After the gauntlet of assignments and expectations that is the modern Computer Science degree, you might notice your technical growth slow. These are tips about how to accelerate your technical growth beyond the ambient learning that full-time software development provides.
“One form of perseverance is the daily discipline of trying to do things better than we did yesterday.” ― Angela Duckworth, Grit: The Power of Passion and Perseverance
1. Read (and not just tweets)
I too enjoy scrolling through technical Twitter and HackerNews, but treat these sources like you treat Wikipedia – following the references to meatier primary sources.
Read official documentation
The best documentation contains very little code. It instead spends time explaining the library / technology’s high-level approach to its problem. Good documentation give you a solid grasp of relevant concepts. Good documentation will inspire you to better document your own projects!
If you are skeptical of these claims, take a spin through the official React, Rust, or Autofac docs.
Use tools like Twitter, HackerNews, or blog aggregators to discover new authors. Some aggregators (like “The Morning Brew”) will highlight official release announcements as well as blog posts from the community.
Curating your RSS feed (i.e. deciding who to follow) is a personal journey that I won’t comment on.
I know, this is a very old school suggestion. There is unique value in hearing information in long-form. Books as a medium give the author more breathing room to provide context and in-depth examples without having to worry about user engagement metrics like a blogger does.
Seek out books that are more than reference guides. In the .NET, the north star is C# in Depth which discusses design decisions made when developing C# features in addition to practical guides on how to make use of these features.
2. Take advantage of existing opportunities
As you approach projects in your day-to-day, take opportunities to understand the technologies you work with. For example, when tackling a bugfix for a dependency injection error, don’t stop at the first StackOverflow post that “fixes” your problem. Spend time reading through the official documentation or blog posts of your dependency injection library and its philosophy. While at it, try to understand what why dependency injection (and more broadly “inversion of control”) is valuable and why it never was a part of class projects.
As you approach designing a new feature, seek out similiar examples – from open source, your own company’s code bases, or blog posts from other companies. Getting outside perspective on how others approached design trade-offs can elevate your own technical design.
Beyond external resources, leverage your excellent coworker’s know-how. Ask the senior engineers on your team about big picture questions, they will appreciate the opportunity to share their technical knowledge!
This is likely obvious, but if your company offers technical reading groups, or brown-bags, or “guilds”, you should participate in those formal opportunities as well.
3. Be consistent
If you take one thing away from this post, let it be that technical growth is not an extracurricular activity. Learning is something you can and should be doing on the clock. A great engineer does not need to spend their weeknights or weekends thinking about code.
Consider blocking off time on your calendar for a dedicated time for growth. Maybe that means picking 2 articles from your RSS reader while drinking your morning tea. Maybe that means watching part of a conference talk on YouTube right after lunch. Maybe that’s meeting every other week with friends to go through a book or blog together.
Figure out how you like to learn – reading books, participating in discussion groups, watching conference talks on YouTube – and do figure out how to weave it into your work day or work week.