by Jimmy Zhang
If you are a developer who’s obsessed with learning, check out these resources.
So much about software development revolves around learning. The industry moves fast, and new languages, frameworks, and systems sprout up seemingly overnight.
But aside from learning how these technologies work, software developers also need to learn which field of software development is best suited for them. It’s something I’ve recently been focusing on, and I wanted to share a few of the resources that have helped me along the way.
Below is a list of resources including: curated daily digests, programming forums, books, and podcasts. Each resource (aside from the books) covers software development in general, rather than focusing on a specific area.
Wherever possible, I gathered data on the types of topics covered, and this is presented alongside each resource.
First and foremost in this list are three curated daily digests, which are a favorite of mine because of their high “hit rates” (signal to noise ratio).
A “daily digest of the best engineering blogs from across the web,” DiscoverDev is one of the first sites I visit every weekday morning. It has introduced me to many quality blog posts I would never have found otherwise.
DiscoverDev gives each featured post a few topic tags, which highlights both the variety of topics covered and the popularity of machine learning.
The Morning Paper
Every week day morning, Adrian Colyer summarizes an “interesting/influential/important paper from the world of CS”— and has been doing so basically everyday since October 2014!
His summaries use simple language to describe key findings, and he deserves a lot of credit for making research papers more accessible.
Not only is Colyer’s blog a treasure trove of reading material — it’s a treasure trove of data as well. It shows us that while overall, distributed systems are the most popular research topic:
Over the last three years, deep learning has become much more popular:
Morning Cup of Coding
Similar to DiscoverDev, Morning Cup of Coding is also a curated daily newsletter of technical articles from around the web.
However, Morning Cup of Coding is a bit more programming language-centric (“do X with Y programming language”). It also includes a “Fun” section, featuring an amusing article and an esoteric programming language of the day.
Morning Cup of Coding only recently started tagging each post. Individual programming languages are prominent. Deep learning is still ubiquitous.
Forums are a great place to discuss articles and ideas with other programmers. Some comments are superfluous, others are downright mean. But every once in a while, I will read a comment that is more insightful than the article itself.
Quite possibly the best place for discussing programming on the internet. I have found more interesting content from Hacker News than any other site.
A quick parse of the front page reveals a “hackers” bent, with multiple security, unix, and linux submissions. Notable omissions: deep learning, machine learning.
This sub-reddit discusses many of the same articles that are shared on Hacker News and Lobste.rs.
While technical books are a surefire way to level up in a particular area, they can be a slog to read. With technical books, I find it helpful to:
- skip around instead of trying to read the book front to back.
- read as part of a group to keep up momentum and clarify confusion.
There are many worthy technical books out there, and these 6 were chosen because they all cover different aspects of software development. (The free versions of the first 3 books helped as well).
High Performance Browser Networking by Ilya Grigorik (FREE)
Topics: Performance, Networking, Web Development
Covers the basics of networking with respect to the internet and web development, at a very digestible level of technical detail. I found the chapter on TCP to be especially informative.
The Architecture of Open Source Applications (FREE)
Featuring articles about the design of software in a wide variety of domains, The Architecture of Open Source Applications is an under-appreciated series. I love reading about why certain decisions were made, and how those decisions have held up against time.
My favorite articles are Graphite, which chronicles the evolution of a system in the face of increasing scale, and Selenium WebDriver, which includes a tidbit about intentionally absorbing complexity in order to build a bigger ecosystem.
The Art of Unix Programming by Eric S. Raymond (FREE)
Topics: Unix, Software Design,Operating Systems
Unix has withstood the test of time, and I, like many others, appreciate the elegance of its core ideas. This book is more of a treatise on the philosophies that drives those ideas, and less of a “how-to” manual (for that, Your UNIX/Linux is an appropriate resource).
Designing Data-Intensive Applications by Martin Kleppmann
Topics: Databases, Distributed Systems, Scalability
If there were a free version, this would be the first book in this list. Designing Data-Intensive Applications is a comprehensive guide to the fundamentals of a modern computer systems. It can get dense, and reading with a group of co-workers helped a lot.
The chapter on encoding has helped me more with my current job than anything else I have read.
Data Science For Business by Foster Provost & Tom Fawcett
Topics: Data Science, Data Mining
I wasn’t going to include this book initially, because I’ve only read the first few chapters. However, I included it after seeing data about the popularity of deep learning and machine learning. While this book doesn’t touch on deep learning, it is a valuable introduction to predictive data modeling nonetheless.
Inside the Machine by Jon Stokes
Topics: Computer Architecture, Microprocessors
As software developers, we rarely have to think about CPUs and registers. However, when writing performance critical code, knowledge of computer architecture internals (such as CPU caches) is key.
I discovered this book from a Hacker News comment about the famous paper What Every Programmer Should Know About Memory. The comment recommended Inside the Machine as “something more approachable”, and I wholeheartedly agree.
Podcasts are great for both gaining exposure to new ideas and keeping up with the new developments in the industry. Two podcasts that cover a variety of software topics are:
- Software Engineering Daily (SE Daily), which focuses more on today’s trends (Blockchain, Machine Learning, Kubernetes)
- and Software Engineering Radio (SE Radio), which focuses more on the day to day details of programming (testing, languages, design patterns)
SE Daily is a favorite of mine, because they really do live up to their “daily” moniker (although to be fair, SE Radio has episodes from as far back as as 2006):
I hope the resources mentioned in this post help in your journey towards becoming a better software developer. If there are any resources that you find helpful, I would love to hear about them as well.
Thanks for reading!