I was refactoring an old project when it dawned on me that I’m a better developer today than I was a year ago. There are very few places in my life I could say I’ve improved with such confidence. Are my friendships and relationships stronger? Am I a more empathetic person, a better musician, a more effective product manager? I vaguely feel better, but I can’t be sure.
But with code (and running), where there are concrete benchmarks to measure my progress by, I am sure. I am confident that I am writing cleaner, more maintainable, and more efficient code today than I was a year ago. Of course, improvement =/= mastery, and the more I learn, the more I realize how much is left to learn, but I wanted to take a moment to reflect. Compared to a year ago:
- I structure my code better
I’ve often succumbed to jumping into my code head-first. It’s easy (and fun) to solve the problems in front of me, and hard to think through the repercussions and edge cases. This approach has bitten me in the tuchus a bunch of times, and in response, I’ve made a consistent effort to plan more. Before I tackle a big project, like Hackterms, I sit down and set up a Kanban-style Trello board, where I make myself prioritized tickets. Before I write complex functions, I write out my logic, and force myself to consider the general purpose of the function and the edge cases. I wireframe, I think through user flows, I sketch out relationships between pages, and design database schemas.
I’ve got a long way to go, but I’m becoming more organized, and run into fewer surprises down the road. And, when I skimp on this process (by convincing myself that “it’s just a small project”), I run into all my old problems, which only motivates me to plan further
- I am writing cleaner, more efficient logic
Thanks to my collaborations and pair programming with James and Esther, I have learned more optimal, cleverer ways to solve common projects: operate on and iterate through objects and arrays, keep track of my application state, break up my functions, operate on strings. Problems that used to take me twenty lines of code and multiple loops now take me ten. I haven’t gotten smarter – I’ve just seen more code.
- I am using core language features
James often pushes me, actively in our collaborations and indirectly through his work, to consider the core language features before looking at libraries. Influenced by this approach, I now frequently use the ternary operator, regex, flexbox, CSS animations and variable names, map and filter functions, just to name a few.
- I am writing better functions and variable names
Thanks to Esther, Clean Code, and my work on the engineering team at the NYC Mayor’s Office, I am making an effort to write more maintainable code. An important realization was that writing clean code isn’t just for others – I found, with some surprise, that I couldn’t make sense of projects I wrote a year ago. Now, I think hard about my variable names. I try to break up my functions to handle a single responsibility. I split up my application into self-sufficient modules and components.
- I am designing better interfaces
After working to improve Hackterms, I am paying way more active attention to web design principles and patterns. For years, I’ve pulled up Chrome inspector to check out cool web design effects are achieved. Now, I take time to ask why. After brainstorming my own ideas, I check Dribbble for how other designers tackle common web elements. I’ve used Coolors enough to develop a better sense for what makes a good color palette (hint: it’s often multiple shades of the same color). I’ve got a long way to go, but I think I make better looking projects than I used to.
- I am using git more effectively
Kim Peng over at the NYC Mayor’s Office spent lots of time helping me make sense of git. The Atlassian documentation is also pretty great. My git experience used to consist of add | commit | push, and occasionally frantically search for how to hard reset. I now use branches, and know how to handle fetching, merge conflict resolutions, moving the HEAD to a different commit, stash, cherrypick, and reset.
- I have more tools to draw on, and know when to use them
Over the last year, I’ve used flexbox and Vue.js, Mongoose, Handlebars.js, Socket.io, and Firebase hosting and data store. I understand what each of these tools do, and why they’re used. As I’ll never tire of saying, connecting the dots has always been the hardest part of web development for me, and I tended to grab popular off-the-shelf solutions without really asking why. Using Vue has been a breath of fresh air, for example, now that I’ve experienced trying to and parse state from the DOM.
- I’ve seen more code and read more documentation
At the Mayor’s Office, I had my code reviewed, and helped my teammates debug their code, and read the in-house codebase and documentation, and even contributed to it. I’ve taken Udemy courses. I coded with James and Esther. I read Vue.js and other library docs, and studied algorithms. Although I spent years helping design effective coding educational programs at Codecademy, most of that time was spent helping users just get off the ground. Now, I feel like I’ve leveled up; I’ve even helped beginners in my life write more efficient (not just functioning!) code.
It’s been a good and impactful year for me as a developer, but there’s so much still to learn. Looking forward to writing another post like this in a year!