Every year, I work with a smart bunch of college kids during their summer/winter internship at HackerRank. While I’ve learned a lot of things from them, they usually ask for feedback/advice at the end of the internship. The individual feedback varies from person to person, but there is a standard set of links/books I share with them to read to become a better software developer.
Here is the list I share with everyone (in no particular order)
- System design primer – https://github.com/donnemartin/system-design-primer. While many use this just for the system design interview during the job interviews, this is an amazing set of system design patterns to learn. I love the diagrams and the way everything is explained and organized.
- 97 Things Every Programmer Should Know – Great book that helped me shape my development career at the early stage. I was lucky enough to read this book when I was getting into software development and some of the advices are still deeply ingrained in the way I work. The best part is that each chapter is just 2 pages long. Very easy to follow and remember.
- The Architecture of Open Source Applications (Volume I and II) – http://aosabook.org/en/index.html (the two books at the bottom of the page). A super hard book to finish. I’ve been trying to finish this book for the last 2 years and still not successful. Each chapter is about an opensource application (like Eclipse, Git, GDB, nginx, Puppet, PyPy, and many more). You feel fully exhausted just after finishing one chapter.
- UI Patterns – There is no fun in building websites with horrible UI/UX. It isn’t so hard to learn as well. All we need is a little bit of browsing and common sense. These makes you get an idea of what to use where while building a web application. Increases your common sense and something I believe all developers should know at some point. A few website I would recommend are http://uipatterns.io/, https://ui-patterns.com/, https://goodui.org/ and https://www.uxlibrary.org/.
- High Performance MySQL – Gives a good understanding of how things work/move under a database. I learned a lot of query optimizations, engines, and other aspects of a database after reading this book. I would love to read something similar about PostgreSQL. You feel like the “Neo” of the database after reading this book. Highly recommended.
- What Makes A Great Software Engineer? – Paper link – https://faculty.washington.edu/ajko/papers/Li2015GreatEngineers.pdf and the presentation link – https://pdfs.semanticscholar.org/5a8a/71865fa1b9987edd5b68af3a8899205a04c4.pdf. Growing as a software developer is not just about technical skills. It involves so many other things like personality, decision-making skills, teammate interactions, and finally, the coding skills.
- Bug Fixing – An interesting/funny story – http://web.mit.edu/jemorris/humor/500-miles
- HackerNews – This is an interesting thread in HackerNews discussing the same topic – https://news.ycombinator.com/item?id=18128477. Top comments I loved and try to follow are 1) https://news.ycombinator.com/item?id=18130605 2) https://news.ycombinator.com/item?id=18129407 3) https://news.ycombinator.com/item?id=18130501 and 4) https://news.ycombinator.com/item?id=18132374
When I shared the above list with Alagu, he shared two more links with me tailored for junior developers
- 20 Tips For Your First Job – Atul Chitnis did a tweetstorm for students joining their first job – http://atulchitnis.net/2011/first-job/ I could relate to a lot of it, wish I had known this when I joined fresh.
- Ruby Under a Microscope – If you are using ruby for work, this is a really good read – Ruby under a microscope. It gives a very “Compiler design” perspective of Ruby.