I will attempt to update this list as I also move forward in my career. Take this as a good rough guide to some very good books. I perfer to read books that are less dry than your average textbook.
Data structures and algothrims are the bread and butter of creating good code, so are good design and clean structure.
- Cracking the coding interview
- Elements of programming interviews
- Clean Code by Robert Martin
- Head First Design Patterns: A Brain-Friendly Guide
- Python Tricks: A Buffet of Awesome Python Features
TODO
Linux is a very powerful operating system and its the most common OS used in the software industry. Thats because its the most customizable, flexible OS there is. Maintained by many contributors, very few bugs/crash, high uptime (no need to restart after updates), and less prone to viruses due to permissions. Its important to learn how to develop around linux as you will stumble upon some flavor of linux during your software career. Best to learn it early.
- The Linux Command Line by William Shotts
- How Linux Works, 2nd Edition: What Every Superuser Should Know
- Wicked Cool Shell Scripts, 2nd Edition: 101 Scripts for Linux, OS X, and UNIX Systems
Once you get a few months of being a programmer, its important to learn how to architect your code. This will allow you to merge what you know about design patterns into code that is scalable and maintainable throughout the years to come.
- Domain-Driven Design: Tackling Complexity in the Heart of Software
- Clean Architecture: A Craftsman's Guide to Software Structure and Design
You don't need to necessarily understand the full scope of DevOps as a programmer but quite franking you should at-least understand the perspective of a DevOps engineer you are coding for. Utlimately, your code has to be executed and if its coded in a way that is hard to configure, deploy, compile or test its going to making the operation teams' lives difficult. Additionally, too many companies do not have a good software development pipeline in place. They do not follow the idea of continuous testing per commit nor do they have automatic ways to midgating risk of deploying bad code to production.
- The DevOps Handbook: How to Create World-Class Agility, Reliability, and Security in Technology Organizations
Life skills is rather important, as software engineers tend to solo themselves rather than work together with the team. As you age, you will find that you can't finish the project alone and you have to leverage your teammates at some point to get the job done. How you communicate with your peers is just as important as how you code. You have to work with people in this world, there is no avoiding it.
- How to Win Friends & Influence People
- The Schmuck in My Office: How to Deal Effectively with Difficult People at Work
- Principles by Ray Dalio