A friend recently asked me what I’ve used to improve as a software engineer. I mentioned a bunch of resources. When he later asked me for a list, I realized I didn’t have one yet. In this post, I’ll share resources that have helped me grow.
A quick word of advice before I go into the list. I think the key to improvement boils down to two things:
- Regular, purposeful practice
For the first point, make practice a habit and a regular part of your schedule. I usually schedule about 30 minutes to an hour each weeknight for programming-related activities. I’ve done that for a few years and I’ve noticed improvement.
For the second point, even a small amount of research can help you improve. As obvious as it sounds to Google how to do something, we often don’t think to do it. As an example, I didn’t think to look for how to ask good questions.
Okay! Let’s talk resources.
I usually read stories and articles when they appear on Hacker News. A few authors show up with consistently good posts:
Dan Luu: His writing on his experience at big companies led me to consider joining Amazon over another startup. I often reference his post on normalization of deviance as a model of how we get accustomed to weird processes. Finally, he has a list of great programming blogs and books. That’s just a subset.
High Scalability: This is a good and well-known blog on building complex systems at scale. I like the post on Netflix’s architecture as an introduction.
Julia Evans: Julia writes infectiously exciting blog posts. Want to learn about what happens when you start a process on Linux? What about how to decide what to work on? Maybe you didn’t before but I’m guessing you’re curious now.
I have a hard time sitting down and powering through a programming book, unless I’m on an airplane where I have nothing more interesting to do. If a book feels immediately practical and / or uses exercises, I have an easier time with it. Of the software books I’ve read, I recommend:
Learn Python the Hard Way: This book basically started my career in software. It’s more basic than the other books on this list but it’s fun in a way that most programming books are not.
Test-Driven Development with Python: A great introduction to test-driven development, and practical if you’re working in Python or Django. I like hands-on style books and this one is essentially a long tutorial.
Effective Java: I’m new to Java and it’s wonderful to have an expert like Joshua Bloch explaining best practices in his native programming language. Well-reasoned and thoughtful.
Continuous Delivery: Filled with good advice for automating and improving your DevOps processes. It’s good for poking the introspective part and encouraging you to examine what can be improved.
Cracking the Coding Interview: I recommend this book in the job hunt guide and think it’s good even as a general purpose algorithms book. I encourage you to do the exercises.
Listening to software-related talks is one of my favorite tricks to improve as an engineer. I wrote a post a few years ago about a few of my favorite talks.
I have a few sources that I check for programming-related videos:
Destroy All Software: Gary Bernhardt’s screencast series for working professionals. When I watched through the first season, it changed how I use the command line. Although not representative of the rest of the screencasts, I love Gary’s wat talk.
YouTube: It’s easy to overlook. Many conferences post their recorded talks on YouTube, such as PyCon 2017 and Strange Loop. Sorting by views is the killer feature for finding good material within a particular conference. youtube-dl can save bandwidth if you listen while travelling.
Deconstruct Conf: A software conference organized by Gary Bernhardt. Maybe it’s cheating to include this, since I already mentioned Gary. Oh well! I enjoyed “Patterns failed. Why? Should we care?” and look forward to the 2018 videos.
Massively Online Open Courses (MOOCs) offer an amazing way to for growing as an engineer. I’ve used MOOCs since 2011, when Stanford offered three courses online for free and completed something like 15 MOOCs so far. This is what I’d recommend:
Georgia Tech’s Online Master of Science in Computer Science: I started this program while already working as an engineer and completed it this past summer. I think it’s the most practical way to pursue a master’s degree in computer science while working.
Coursera: Great online courses and a huge variety. I enjoyed the algorithms courses.
Class Central: Class Central has reviews and rankings for courses, which is useful for navigating the recent explosion in the variety and number of courses.
That’s all I have for now! I’m still learning too so I’ll update this post as I encounter new resources to recommend.