100 Days of Code Challenge (2021)
Happy 104th day of the year! I decided to undertake the #100DaysOfCode Challenge again this year, in which you code for at least one hour a day for 100 days straight. I did this last year, and found some benefit to it, and this year I went in with the plan to focus first on launching my developer portfolio, then on learning about Algorithms and Data Structures. These are two things that I've felt I needed to do for a long time, but hadn't previously set aside the time to tackle. I also attended some trainings on accessibility and headless WordPress on Gatsby, wrote some blog posts, and revisited some of the WordPress stuff I learned last year, and more, but these were asides sprinkled in throughout the 100 days. I mostly concentrated on the portfolio, and then on the JavaScript Algorithms and Data Structures Masterclass Udemy Course.
A big part of my motivation for finally taking on these projects that I've put off for so long is that the COVID-19 pandemic is still going on. I wrote about the onset of the pandemic in last year's post about this challenge, and how it felt like the world shut down so drastically and quickly toward the end of that challenge. It's been over a year since I worked in an office setting. It hasn't been easy working from home all the time. The boundaries between home life and work life have been blurred into oblivion.
Because life is so weird and hard right now, I gave myself some liberties with the challenge, taking some days off from coding, and building in some weekends where I went out of town to visit state parks and be in nature rather than sitting in front of a screen. I really worry about burnout. It's because of this that I probably won't be doing the #100DaysOfCode Challenge again after this. It's just too much of a grind, and I'm not totally sure that it lends itself well to retaining the things that I've learned. I'll keep working on Algorithms and Data Structures on my own time, because I find it to be kind of interesting and it feels like it makes me a better developer, but the daily pace of the challenge is just too relentless to keep up.
What I Worked On
Days 1 - 10: Blog Design and Launch
For the first ten days of the challenge, I worked on finishing the design of this blog. I had an Arena Board of different web development blog/portfolio sites that I thought were solid, and I had started building out my own site in July 2020. Really, before that over at codeandtacos.com. What I had done before the challenge was migrate the blog posts, edit them, and build out the content for the Work and About pages.
I had a lot of wonderful help solidifying the design from Kiah Wagner. Kiah's an awesome graphic designer I've worked with extensively for the last three years. She has an amazing eye for detail and execution on designs, and is awesome at coalescing brainstorming, inspiration pieces, and feedback into impressive visuals. She's quick with responses and deliverables. In short, she's everything you might want in a designer. This is absolutely an endorsement.
Her contributions to the design were an overall assessment of the layout and typography work I had already done, suggestions for color palettes, and creation and delivery of some of the graphical elements seen across the site -- the big waves found near the the header and footer, the blob in the "logo" in the navigation bar, the other blob behind my headshot on the homepage, the diamond bullet points, the hand-drawn arrows, that was all her. These elements were sent as SVG files, and I did the integration onto the site.
I'd like to highlight the technical side of working with these SVGs for the first ten days of the challenge. I'm pretty new to SVGs, but working them into the site has given me a lot more exposure and I'm really enjoying it. From what I can tell, SVGs are much smaller files than typical PNGs or JPGs, and confer a lot of technical benefits -- they don't lose quality as they scale up for larger screen sizes, and with the graphical content being comprised of code, things like animation and fill colors can be controlled through frontend JavaScript and CSS.
By using SVGs for these page elements, I was able to achieve support for some CSS themes, something I haven't implemented yet. I launched the site officially somewhere around January 14, 2011.
Days 11 - 20: Big O Notation and Problem Solving
After getting the blog/portfolio design to a solid place that I felt proud of, I started on JavaScript Algorithms and Data Structures Masterclass on Udemy to try and hone my algorithm, data structure, and Big O notation skills.
The course started with a focus on Big O Notation, which would help us to later determine the time and space complexity benefits and pay offs of one code solution vs. another. I wrote a blog post on Big O Notation that you can read here.
After Big O, the course turned briefly to soft skills, in detailing a common approach to solving problems that hadn't been encountered yet. The following steps would work either in a job interview or on any programming project where you were facing a difficult problem:
- Understand the problem
- Explore concrete examples
- Break it down
- Solve it and simplify
- Look back and refactor
Days 21 - 26: Problem Solving Patterns and Coding Challenges
After the problem solving method, the instructor detailed a few common problem solving patterns -- problems that come up often enough in job interviews that it's probably worth it to understand the pattern and the common solution. These were:
- Frequency Counter
- Multiple Pointers
- Sliding Window
- Divide and Conquer
This section was followed up by a whole heap of coding challenges that could be solved using the various patterns outlined.
Days 27 - 30: Recursion and More Coding Challenges
The Udemy course moved on to briefly touch on recursion, which came with some more practice coding challenges.
Days 31 - 34: Blog Post - Should I Do A Coding Bootcamp?
I took a break from the Algorithms and Data Structures course to write out a blog post, Should I Do A Coding Bootcamp?. This was in response to a bunch of different friends asking me over the last few weeks whether they should attend a bootcamp.
Days 32 - 38: Searching Algorithms
Back to the Udemy course, and working through formal searching algorithms:
- Linear Search
- Binary Search
- Naive String Search
Days 39 - 44: Quadratic Sorting Algorithms
The next section of the Udemy course covered some formal Sorting Algorthms, starting with a breakdown of JavaScript's built-in .sort()
array method, then a deep dive into the Quadratic Sorting Algorithms:
- Bubble Sort
- Selection Sort
- Insertion Sort
I capped this section off with another blog post, The Quadratic Sorting Algorithms.
Days 45 - 54: More Sophisticated Sorting Algorithms and Texas Ice Storm
This week was marred by bad weather. A historic ice storm knocked out power and water for anywhere between 4 days to a week and a half all around Austin. The entire state of Texas was affected somehow or another. The power grid failed us. Because of this, working on coding and algorithms was touch and go, but I did manage to work on a few things, including playing around in NextJS and exposure to some more advanced sorting algorithms:
- Merge Sort
- Quick Sort
- Radix Sort
Days 55 - 59: Review and a Break
After the power came back on and the ice storm passed, I had about a week's worth of work at my job to catch up on. I focused on that, and let myself take a break from algorithms for the most part. I also spent a weekend decompressing in a cabin built in the 1930's by the CCC out in Bastrop State Park.
Days 60 - 61: Blog Social Media Preview Images
I ventured back to working on the blog, specifically working with <Helmet />
and creating social media preview images. Now when a blog post gets pasted into Slack or Twitter, a nice little card with a picture and the estimated reading time will show up. Pretty nifty!
Days 62 - 69: JavaScript Classes and Singly Linked Lists
Learned about and implemented a Singly Linked List. It's a list, but unlike an array (which is indexed), each node (item) in the list has a pointer that points to the next item in the list. Operations like insertion and deletion are much more efficient than in an array, especially toward the beginning of the list, since an array has to re-index the rest of the list.
Day 70: Attended a Headless WordPress and Gatsby Webinar
Find notes about that here on this Twitter thread.
Days 71 - 80: A Bunch of Random Stuff
Felt like a good time to take it a bit easier. I reviewed some of the sorting algorithms I had learned about weeks ago, figured out how to perform a live stream ambient cello show on YouTube, played around in NextJS, revisited some WordPress stuff, and spent some time writing a few blog posts. Oh and it was my birthday so I went camping for a weekend.
Day 81: Attended a Webinar on How to Code for Screen Readers
Find notes about this training in this Twitter thread.
Days 82 - 84: Doubly Linked Lists
Learned about and implemented a Doubly Linked List. Very similar to a Singly Linked List, but each node now also has a prev
pointer that points to the item before it in the list. This went much more quickly because a lot of the methods were either the same as or very similar to the Singly Linked List.
Days 85 - 86: WordPress Themes
Some work and freelance demands had me revisiting some WordPress stuff, and I decided to start building my own WordPress theme because I don't have enough going on.
Days 87 - 90: Wrote Some Blog Posts
Spent some more time writing, including this post about the .flat() array method.
Days 91 - 97: More WordPress
Just worked more on my WordPress theme, and on a child theme that I developed for a freelance project.
Days 98 & 99: Gatsby v3 Upgrade
Spent some time upgrading this site from Gatsby v2 to v3. You can read about that migration in this blog post.
Day 100: Finishing this Blog Post
I finished writing and editing the blog post you're currently reading, making sure my work during the 100 days of this challenge was all accounted for. I hope you've enjoyed following my progress this year! Please keep checking in on this blog site for more of my coding journey. Thank you for reading.