My first pick, although not a book, is a great way to get experience designing more challenging applications and improve your Python skills. Taught by Peter Norvig, the Director of Research at Google, you’ll learn how an accomplished engineer approaches these problems. Peter will start you off with a challenge, give hints, and then allow you to fill in the rest of the code yourself. Then, see Peter’s solution and get a first-hand glimpse into how a great computer scientist thinks.
In school, you’re probably used to writing small amounts of code by yourself, submitting the problem set, and never seeing it again. However, when you begin to work with a team, there’s already a large, existing codebase. “Head First Design Patterns” will help you learn the terminology to discuss code with your teammates and how your new code fits in.
Out of all of the projects I've worked on, they all involve processing, analyzing, indexing and displaying large volumes of data. A great read for someone who isn’t an expert in data yet, “Designing Data-Intensive Applications” dives into the databases and systems that enable leading tech firms to scale their products. Although a more advanced read, Kleppman starts from the first principles and skips the big data jargon and hype.
A little different than my other picks, “The Goal” is a fictional book, often utilized by MBA students. In the novel, a manager is faced with the challenge of making his factory profitable in a few shorts months. The book explores the structured analytical process he goes through to understand what was holding them back and what changes they needed to make to achieve their goals.
Whether it’s negotiating your first job offer, checking in on your performance at your internship, or dealing with a difficult team member, one very important skill is how to engage in difficult conversations. These "crucial conversations" can include giving and receiving feedback, or any other discussion where stakes are high.