**14 Habits of Highly Productive Developers** Zeno Rocha
You can learn the most popular frameworks, use the best programming languages, and work at the biggest tech companies, but if you cultivate bad habits, it will be hard for you to become a top developer.
This book doesn't offer a straight path or pre-defined formula of success. This book is a result of a quest. A quest to uncover what habits can be cultivated to become a better software engineer.
Each chapter has a Q&A with advice from highly efficient software engineers like of Addy Osmani of Google, senior engineers at Amazon, Microsoft, Shopify, GitHub and other companies with good engineering cultures.
<aside> 💡 A great book to share especially with your junior- to mid-level team mates.
Building a Career in Software: A Comprehensive Guide to Success in the Software Industry Daniel Heller
Software engineering education has a problem: universities and bootcamps teach aspiring engineers to write code, but they leave graduates to teach themselves the countless supporting tools required to thrive in real software companies. Building a Career in Software is the solution, a comprehensive guide to the essential skills that instructors don't need and professionals never think to teach: landing jobs, choosing teams and projects, asking good questions, running meetings, going on-call, debugging production problems, technical writing, making the most of a mentor, and much more.
In over a decade building software at companies such as Apple and Uber, Daniel Heller has mentored and managed tens of engineers from a variety of training backgrounds, and those engineers inspired this book with their hundreds of questions about career issues and day-to-day problems. Designed for either random access or cover-to-cover reading, it offers concise treatments of virtually every non-technical challenge you will face in the first five years of your career―as well as a selection of industry-focused technical topics rarely covered in training. Whatever your education or technical specialty,
Building a Career in Software can save you years of trial and error and help you succeed as a real-world software professional.
Clean Code: A Handbook of Agile Software Craftsmanship Robert C. Martin aka 'Uncle Bob'
Even bad code can function. But if code isn’t clean, it can bring a development organization to its knees. Every year, countless hours and significant resources are lost because of poorly written code. But it doesn’t have to be that way. Noted software expert Robert C. Martin presents a revolutionary paradigm with Clean Code. Martin has teamed up with his colleagues from Object Mentor to distill their best agile practice of cleaning code “on the fly” into a book that will instill within you the values of a software craftsman and make you a better programmer—but only if you work at it.
What kind of work will you be doing? You’ll be reading code—lots of code. And you will be challenged to think about what’s right about that code, and what’s wrong with it. More importantly, you will be challenged to reassess your professional values and your commitment to your craft.
<aside> 🥇 An absolute classic that should be in every engineer's library.
**Communication for Engineers: A framework for software developers to become better communicators and increase their happiness, productivity, and impact** Chris Laffra
This book was written by a software engineer for software engineers. It provides an overview of various communication skills and techniques that are relevant to people working in the software industry. Some of the communications skills discussed in this book have a generic nature, such as self-awareness. Others are more specific for engineers, such as writing clean code. The result is a comprehensive coverage of communication as it concerns software engineers with many practical and relevant tips to follow.
The book sometimes focuses on communication between engineers and at other times, it explores how to interact with others, typically in a business context. When we say "engineers" in this book, we generalize and refer to software engineers, programmers, developers, designers, engineering managers, PMs, software architects, or anyone else working in software development.In this book, each communication skill will be discussed with specific tips to help you improve in a well-structured, constructive, and productive fashion.
The end goal is to increase your impact as an engineer by focusing on "soft skills" that complement your existing coding and problem solving skills.
Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems Martin Kleppmann
Data is at the center of many challenges in system design today. Difficult issues need to be figured out, such as scalability, consistency, reliability, efficiency, and maintainability. In addition, we have an overwhelming variety of tools, including relational databases, NoSQL datastores, stream or batch processors, and message brokers. What are the right choices for your application? How do you make sense of all these buzzwords?
In this practical and comprehensive guide, author Martin Kleppmann helps you navigate this diverse landscape by examining the pros and cons of various technologies for processing and storing data. Software keeps changing, but the fundamental principles remain the same. With this book, software engineers and architects will learn how to apply those ideas in practice, and how to make full use of data in modern applications.
Good Code, Bad Code: Think like a software engineer Tom Long
The difference between good code or bad code often comes down to how you apply the established practices of the software development community. In Good Code, Bad Code you’ll learn how to boost your productivity and effectiveness with code development insights normally only learned through careful mentorship and hundreds of code reviews.
Good Code, Bad Code is a clear, practical introduction to writing code that’s a snap to read, apply, and remember. With dozens of instantly-useful techniques, you’ll find coding insights that normally take years of experience to master. In this fast-paced guide, Google software engineer Tom Long teaches you a host of rules to apply, along with advice on when to break them!
Modern Software Engineering: Doing What Works to Build Better Software Faster David Farley
In *Modern Software Engineering, *****continuous delivery pioneer David Farley helps software professionals think about their work more effectively, manage it more successfully, and genuinely improve the quality of their applications, their lives, and the lives of their colleagues.
Writing for programmers, managers, and technical leads at all levels of experience, Farley illuminates durable principles at the heart of effective software development. He distills the discipline into two core exercises: learning and exploration and managing complexity. For each, he defines principles that can help you improve everything from your mindset to the quality of your code, and describes approaches proven to promote success.
Farley's ideas and techniques cohere into a unified, scientific, and foundational approach to solving practical software development problems within realistic economic constraints. This general, durable, and pervasive approach to software engineering can help you solve problems you haven't encountered yet, using today's technologies and tomorrow's. It offers you deeper insight into what you do every day, helping you create better software, faster, with more pleasure and personal fulfillment.
Refactoring: Improving the Design of Existing Code Martin Fowler
A modern classic. Must read for every software engineer.
Like the original, this edition explains what refactoring is; why you should refactor; how to recognize code that needs refactoring; and how to actually do it successfully, no matter what language you use.
<aside> 💬 „Whenever you read Refactoring, it’s time to read it again. And if you haven’t read it yet, please do before writing another line of code.” — David Heinemeier Hansson, Creator of Ruby on Rails, Founder & CTO at Basecamp
<aside> 💡 Great book for younger engineers. If you consider yourself a senior engineer, feel free to skip this book as many of the patterns will feel rather obvious to you.
Seriously Good Software: Code that works, survives, and wins Marco Faella
Serious developers know that code can always be improved. With each iteration, you make optimizations—small and large—that can have a huge impact on your application’s speed, size, resilience, and maintainability.
In Seriously Good Software, author, teacher, and Java expert Marco Faella teaches you techniques for writing better code. You’ll start with a simple application and follow it through seven careful refactorings, each designed to explore another dimension of quality.
Seriously Good Software is a handbook for any professional developer serious about improving application quality. It explores fundamental dimensions of code quality by enhancing a simple implementation into a robust, professional-quality application. Questions, exercises, and Java-based examples ensure you’ll get a firm grasp of the concepts as you go. When you finish the last version of the book’s central project, you’ll be able to confidently choose the right optimizations for your code.
Software Engineering at Google: Lessons Learned from Programming Over Time Titus Winters, Tom Manshreck, Hyrum Wright
Today, software engineers need to know not only how to program effectively but also how to develop proper engineering practices to make their codebase sustainable and healthy. This book emphasizes this difference between programming and software engineering.
How can software engineers manage a living codebase that evolves and responds to changing requirements and demands over the length of its life? Based on their experience at Google, software engineers Titus Winters and Hyrum Wright, along with technical writer Tom Manshreck, present a candid and insightful look at how some of the world’s leading practitioners construct and maintain software. This book covers Google’s unique engineering culture, processes, and tools and how these aspects contribute to the effectiveness of an engineering organization.
You’ll explore three fundamental principles that software organizations should keep in mind when designing, architecting, writing, and maintaining code: