DEV Community

Michael Caveney
Michael Caveney

Posted on

My 2020 In Code, and What I'm Planning For 2021

2020 was difficult, but a very big year for me as a developer. Let's look at what the year looked like for me, and what I have planned for 2021!

What I Accomplished

  • My First Production Dev Job: 2020 was when I got my first official engineering job, doing some work for a local consultancy. This was a high milestone for me after a long while of learning and doing smaller web dev jobs in addition to a day job to pay the rent. Like most first production jobs, there was a big "before" and "after" in my mindset after that experience, but I'm mostly glad that that milestone was crossed.

  • My First Large Solo Project: Like a lot of self-taught devs, I spent some time in the doldrums of tutorial hell, and didn't appreciate just how vital a certain amount of struggle and not following the 'happy path' of easy answers that tutorials provide for you really is to effective learning. My aforementioned first job wrapped in October, and I took the momentum from that and applied it to a personal project I've had in mind for a while, a character tracker for the Marvel Puzzle Quest mobile match-3 RPG. I knocked out the MVP in a few weeks and deployed it here. There's a lot of work that remains (mostly optimization, caching, testing, etc), but it's gratifying to have gotten this much work done at this point.

What I Learned

Technologies: In 2020, I used Angular, PHP, WordPress, Hasura, Apollo, and Auth0 in production for the first time. I had some prior experience with the former three, and it was tremendously useful having to step outside of my comfort zone. Hasura/Apollo/Auth0 makes a great stack for fast GraphQL backends once you understand the setup.

In personal and smaller projects, I focused heavily on React using Preact, Gatsby, and Next.js. I purchased Kent C. Dodds's Epic React course (my review of that is here), and that deepened my knowledge of React fundamentals, gave me in-depth practice with the Hooks API, and introduced me to advanced patterns, practical usage of inversion of control, and forced me to consider how to make code flexible and reusable in ways I'd never been exposed to before. I've finished the vast majority of that course as of this writing, but I'll be spending a lot more time reviewing and practicing the material from that course.

Principles and Practices:

There was a lot that I got from my contract work in 2020 in terms of high-level approach and general lessons learned including:

  • Always be able to know what your data is doing, at any point in the program lifecycle: console.log-ing things will often not be sufficient. This really tripped me up in PHP since I hadn't looked at it in quite some time before this year, but not being fluent with step-through debugging in JavaScript slowed me down as well.

  • It's always better to take some extra time to prepare, whether that takes the form of planning features out in pseudocode or reading the docs for a new third-party library in their entirety before implementation. Fighting the tendency to just dive into implementation details without planning will always cost you time fixing oversights and impulsive mistakes.

  • Testing will save you pain: Most of the code I had to write this past year had no automated tests (mostly due to time constraints), and all of those codebases were much poorer for it. Another area testing can help is if you have to implement form logic that's particularly thorny: you'll get results a lot faster from an automated test rather than manually plugging values into the browser, over and over again.

  • Know when to ask for help: While some struggle is valuable in learning, there is such a thing as too much struggle, and being able to identify when the process is helping you to grok something or you're straight up stuck and need to get a second pair of eyes on something will save a lot of time in the long run. It can be tricky to definitively identify when you're stuck past the point of needing outside help, but I try to think of it like so: Is working through the particular problem helping me to understand how to approach solving something similar in the future, or am I spinning my wheels? Time can also be a factor: spend more than 20-30 minutes on one problem, and it's definitely time for a second opinion.

What I'm Going To Accomplish In The New Year

  • A new portfolio site: I've built started some work on a portfolio site in the past, but have always been stymied by decision fatigue regarding design. This year, I'm going to make something modern and beautiful!
  • Project work using Headless WordPress/CDN: One piece of advice I heard a lot is not to sleep on WordPress because of how widely used it is, and this has borne out in terms of picking up some small jobs here and there. But I want to have a project that combines the utility that WordPress provides non-developers with a front-end that is more performant than the aging technologies that WordPress currently utilizes.
  • Project Work using Node.js: I love Node.js, and I have no substantial work in it as of the time of this writing, so some larger project work utilizing Node is a high priority for me this year.
  • More Writing: I didn't have a lot of time to write in 2020 because of work, but that's going to change this year, with updated and new blog posts on a variety of tech topics!
  • Learning D3: I've made attempts at this in the past, but more generally useful front-end skills have taken precedence. This time around, I'm committed to getting the Data Visualization certificate on freeCodeCamp, and hopefully finding the time to cook up something more custom using that library.
  • Mastering React, including how to integrate TypeScript: I'm committed to deep fluency with React so that work will continue this year. When I was working with Angular, I saw how helpful TypeScript could be in enforcing disciple and preventing mistakes (once I got over the lazy habit to infer as much as I could get away with...), so I'm looking forward to adding that tool to my React toolbox.
  • Learning Python: It's good to stretch out, so I'm spending a few minutes a day SLOWLY getting acquainted with Python.
  • Strengthening Other Fundamentals: It's a never-ending battle strengthening our skills, and some of the other tasks I have earmarked for this year include getting more familiar with the strengths and weaknesses of common data structures, going through Gaurav Sen's excellent system design lectures, researching and writing in-depth about the material covered by Khalil Stemmler's software design and architecture roadmap, and sharpening my async JavaScript skills, just to name a few items.

Conclusion

I mention this to publicly commit to these goals and hopefully spark some discussion. What did your last year in code look like? What are you looking forward to learning?

Top comments (0)