JavaScriptmas 2020 - My Official Journey Into JavaScript
Tags: javascript
Published: 2020-12-30 21:36:52

Over the past several years, I have spent a good amount of time mining the internet for sites that would help me learn various programming languages. I have tried to hone in on those that really help ingrain knowledge. The ones that I add to my portfolio are most often guided code-alongs with a "teacher key" solution that I can study to understand how to solve the problem better the next time.

I can't recall how I first discovered [Scrimba](https://scrimba.com/). I gave it my usual "shop for a new car treatment" - I tried some part of a free course and ignored all the subsequent emails that came after. At some point I look for the unsubscribe on the emails so I can try to clear one of my several inboxes!

I believe [Scrimba](https://scrimba.com/) was still on my list of "try again some day" as I was delving into more coding at work. I had been feeling a little more confident about my problem-solving skills when the [24 days of #JavaScriptmas challenge](https://scrimba.com/learn/adventcalendar) was announced. I had always intended to try their weekly Wednesday challenge but I wasn't sure if I could complete them. The inherent fun of Christmas gave me the impetus to try.

## The Challenges
With each listing below, I wrote stream-of-consciousness style about my thoughts and feelings diving into each daily challenge.

**Day 01**: Candies: https://t.co/DKfJfNvfsn?amp=1  
I returned to capture my learning from all of the challenges and found this one didn't save so I solved it a second time! I hope it will still count since I didn't discover it until December 18!

**Day 02**: Deposit Profit: https://t.co/h1ZUh3Br1Y?amp=1  
Thanks to the video and instructions, I was able to solve this one very well. It gave me another boost of confidence to continue.

**Day 03**: Chunky Monkey: https://t.co/bods2fv131?amp=1  
I enjoyed learning how to solve this! Once I finished the solution and saw the lovely output, I was quite pleased.

**Day 04**: Century From Year: https://t.co/DbadZtx6vD?amp=1  
I solved this by testing the year portion of the century. I spoke with my elegant code co-worker and he pointed out I missed the hint about Math.floor(). Doh! It stills works if it is a bit crunchy.

**Day 05**: Reverse A String: https://t.co/TsY6Ix8o0b?amp=1  
The solution to this code presented itself quite neatly in my brain. It's so nice to feel like this knowledge is gaining traction!

**Day 06**: Sort By Length: https://t.co/kZc3oShVgq?amp=1  
I know I had seen this code written in many places but this was the first chance to apply it. It seems so simple while also complex; functions used like this seem to be the heart of JS!

**Day 07**: Count Vowel Consonant: https://t.co/hr9vz9Dolb?amp=1  
It was fun to work with a `.reduce()` function in this solution. I had shied away from them previously but found an example I understood and could apply.

**Day 08**: The Rolling Dice: https://t.co/dhzOVfhVUs?amp=1  
Wow, this was **HARD**! This is the challenge that almost made me throw in the towel. Honestly, I could not figure out any other way to do this at the time than adding extra markup to the HTML. I was pleased I was able to construct everything well enough that it did work. An excellent learning opportunity but I sure worked for it!

**Day 09**: Sum Odd Fibonacci Numbers: https://t.co/3Y5kXIQt92?amp=1  
Oh boy, this one was ugly!! I Googled some Fibonacci generation solutions but I still had to put an ugly `break` within my code. In the end, the solution was accurate and I learned more about generating the Fibonacci sequence.

**Day 10**: Adjacent Elements Product: https://t.co/KawUiYgCnp?amp=1  
The first opportunity to use the spread syntax - it's fun. I'm wondering if I could have written this with a forEach loop; I might have to try it sometime.

**Day 11**: Avoid Obstacles: https://t.co/Cqp0zZJZwZ?amp=1  
I added this comment to my code:
```Javascript
// Why does this only work as a constant and can't be a regular function?  
// This version I found in Google works, so let's do it!
```
I still regularly try to understand when to use a `const` declaration instead of a `let` declaration. This one hung me up for some small amount of time.

**Day 12**: Valid Time: https://t.co/ZUgveLvfT5?amp=1  
I felt very prepared for this solution because as a data developer by long experience, 24 hour time and I get along very well. Nothing like knowing your array length so you can set your indexes hard-coded.

**Day 13**: Extract Each Kth: https://t.co/VYUZI67Ezy?amp=1  
I discussed this briefly with the elegant code co-worker because I felt like my solution was odd. They had a similar solution (but more elegant, because that's how they roll!) so I felt better about what I wrote. Any opportunity to properly use modulo is a good one.

**Day 14**: Maximal Adjacent Difference: https://t.co/zToEtaMWvG?amp=1  
I got to use the array spread syntax again!! It immediately came to mind - I feel like my JS knowledge is really growing.

**Day 15**: Carousel: https://t.co/KAUGrKPzYH?amp=1  
My solution could have been a bit tighter. I mean, storing those positions in the array was silly but it didn't look like my slides were running right. I was happy to come up with a solution that worked so well and I can **ALMOST** code a click handler without looking.

**Day 16**: Insert Dashes: https://t.co/hKHQBfagjn?amp=1  
I felt brilliant after I solved this one. It looks like one of the picture-perfect solutions the elegant developer would write. Just lovely!

**Day 17**: Different Symbols Naive: https://t.co/0jBMiqDMmO?amp=1  
I loved this one! I felt like the logic was right up my alley. Although there may be an even more terse way to solve it, I loved that I was able to quickly code my way to a passing solution.

**Day 18**: Array Previous Less: https://t.co/ipGMcVzWCb?amp=1  
At this point, I feel really comfortable with using `.forEach` on my arrays. It's kind of fun to find the functional use of functions like `.unshift()`.

**Day 19**: Alphabet Subsequence: https://t.co/eGjFBtYLdj?amp=1  
I tried for a while in the morning to solve with set size and `.codeCharAt` but just couldn't figure out how I could do it. I was able to find a way to pass the tests so I went with that one. This took longer than I expected but I enjoyed the practice time.

**Day 20**: Domain Type: https://t.co/Gra0BpmyQ5?amp=1  
I solved this one **FAST**! If I hadn't deleted a piece of my code instead of a `console.log` statement, it would have been even faster! My mind immediately jumped to an array method that could be used and all I had to do was type it out. I need to keep this success in my list of affirmations for tougher days!

**Day 21**: Sum of 2: https://t.co/xgLEcUuLrL?amp=1  
I simply could not figure out how to solve this with `.hasOwnProperty()`. I tried running a classic double loop but it just didn't seem to work. I hacked together a solution with `.forEach` and `.map`. It may not be concise but it works to solve the challenge.

**Day 22**: Extract Matrix Column: https://t.co/fADkiW6ggd?amp=1  
This solution came to me accidentally as I did my normal start logging out the parameters. It was kind of cool to solve so fast!!

**Day 23**: Social media input challenge: https://t.co/9vOx0ioNBd?amp=1  
This looked really hard but I was able to put something working together. [Danny Thompson](https://twitter.com/DThompsonDev) is a smart guy so I felt very challenged!

**Day 24**: Test Your Agility: https://t.co/gfwiJQOKxj?amp=1  
It took me every day until today (December 28) for my brain to sort out how to solve this. The first day I poked at the challenge fussily. Christmas Day I ignored it entirely. Saturday and Sunday I moodily walked around with a very real fear I wouldn't be able to figure this last one out.  

Then my brain served up the hint to look up `async()` functions. I pulled up the MDN entry in a browser tab and looked at it occasionally. Throughout the day, little sparks flickered in my brain - there's probably a loop involved...I'll bet most of the code is there that I need...  

Today, I decided to give it another try. During the preceding 4 days, my brain had picked up enough pieces and time to resolve into a bright picture in my mind. The actual development of my solution probably took about 10 minutes that stretched about an hour as I iterated through checking for accuracy. [Carla Codes](https://twitter.com/CarlaNotarobot) presented a tough challenge and I did it!!!

## Summary
I'm so very proud of being able to finish all 24 days of the JavaScriptmas challenge. This is the first time I've been able to feel confident enough to tackle a code challenge in any language. I only used what I had learned and Google to solve - no solutions from my talented colleagues - I truly did it with my own knowledge. I feel encouraged to continue forward on my coding journey knowing that I am gaining, retaining and using knowledge that I have worked hard to acquire.  

And because I enjoy a good Certificate of Completion, I also tackled the challenge of putting a blog together to officially submit my results. I had been thinking about creating a blog for a number of years but always found reasons not to forge ahead. Thanks to an excellent tutorial by [Dave Ceddia](https://daveceddia.com/start-blog-gatsby-netlify/), I'll be able to publish this post as the canonical link to posts on [dev.to](https://dev.to/) and [hashnode](https://hashnode.com/).