As part of my commitment to continuously improve myself as a developer I am reading some fantastic books and the following list are books I would recommend:
- The Pragmatic Programmer
-
-
I have devoted a whole post to my feelings about this book and it is no surprise that it is the 1st on my list. I think this is the book that really got me seriously interested in Agile and prompted me to move beyond my comfort zone. It is language agnostic so should never age and yet still be relevant to huge numbers of people. The pragmatic approach is not really programming as such, more approaches to keep in mind to help you programme. For example, asking yourself "why am I doing this? Is this even worth doing at all?" is something you should incorporate into your daily routine to keep yourself-- and your co-workers-- sane. And that's what makes Pragmatic Programmer such a great book.
- Don't Make Me Think!: A Common Sense Approach to Web Usability
-
-
This book is brilliant! The "common sense approach" means it is suitable for all readers, I'd even ask my mum to read it! Many times I found myself saying "Of course, that's so obvious" and yet so over looked. Now in its 2nd edition, this book is written for Web Usability, but I'd go further and suggest that anyone doing front end work read it, and it wouldn't hurt for back end developers to spend a few hours reading it too.
- Test Driven Development (The Addison-Wesley Signature Series)
-
-
Explains and demonstrates the advantages of test-driven development (TDD). After a short introduction, the book immediately starts off with 2 extensive examples of applying TDD. After that, some patterns for TDD are discussed, followed by short overview of some common refactorings and finally some tips on how to master TDD.
This book is great, but not an introduction to the topic, though the initial chapters walk quite patiently through the concepts and ideas there seems to be a gap between the nice easy "Hello World!" examples and the more complex examples which I found a little jarring and had to go back and re-read chapters to see what I'd missed.
- Code Complete: A Practical Handbook of Software Construction
-
-
Widely considered one of the best practical guides to programming, Steve McConnell’s original Code Complete has been helping developers write better software for more than a decade. Now this classic book has been fully updated and revised with leading-edge practices—and hundreds of new code samples—illustrating the art and science of software construction. Capturing the body of knowledge available from research, academia, and everyday commercial practice, McConnell synthesizes the most effective techniques and must-know principles into clear, pragmatic guidance. No matter what your experience level, development environment, or project size, this book will inform and stimulate your thinking—and help you build the highest quality code. Discover the timeless techniques and strategies that help you: •Design for minimum complexity and maximum creativity •Reap the benefits of collaborative development •Apply defensive programming techniques to reduce and flush out errors •Exploit opportunities to refactor—or evolve—code, and do it safely •Use construction practices that are right-weight for your project •Debug problems quickly and effectively •Resolve critical construction issues early and correctly •Build quality into the beginning, middle, and end of your project
- The Art of Unit Testing: with Examples in .NET
-
Unit testing, done right, can mean the diff erence between a failed project and a successful one, between a maintainable code base and a code base that no one dares touch, and between getting home at 2 AM or getting home in time for dinner, even before a release deadline.
The Art of Unit Testing builds on top of what's already been written about this important topic. It guides you step by step from simple tests to tests that are maintainable, readable, and trustworthy. It covers advanced subjects like mocks, stubs, and frameworks such as Typemock Isolator and Rhino Mocks. And you'll learn about advanced test patterns and organization, working with legacy code and even untestable code. The book discusses tools you need when testing databases and other technologies. It's written for .NET developers but others will also benefit from this book.
- Patterns of Enterprise Application Architecture (The Addison-Wesley Signature Series)
-
Developers of enterprise applications (e.g. reservation systems, supply chain programs, financial systems, etc.) face a unique set of challenges, different than those faced by their desktop system and embedded system peers. For this reason, enterprise developers must uncover their own solutions. In this new book, noted software engineering expert Martin Fowler turns his attention to enterprise application development. He helps professionals understand the complex -- yet critical -- aspects of architecture. While architecture is important to all application development, it is particularly critical to the success of an enterprise project, where issues such as performance and concurrent multi-user access are paramount. The book presents patterns (proven solutions to recurring problems) in enterprise architecture, and the context provided by the author enables the reader to make the proper choices when faced with a difficult design decision.
- Design patterns : elements of reusable object-oriented software
-
Design Patterns is based on the idea that there are only so many design problems in computer programming. This book identifies some common program-design problems--such as adapting the interface of one object to that of another object or notifying an object of a change in another object's state--and explains the best ways (not always the obvious ways) that the authors know to solve them. The idea is that you can use the authors' sophisticated design ideas to solve problems that you often waste time solving over and over again in your own programming.
The authors have come up with some ingenious ways to solve some common vexations among object-oriented programmers. Want to build a page-layout program that embeds inline images among characters of various sizes? How about building a program that converts files of one format to another? Chances are, some programmer already has thought of a better solution than you will and the recipes you need are here. Solutions are presented in generalised diagrams of data and logic structures. The idea is that you can take the concepts presented here and adapt them--in whatever language you use--to your individual situation. You may have to read some of the chapters several times before you fully understand them, but when you find a solution in this book, it will make your job easier and your results more elegant.
- Release It!: Design and Deploy Production-Ready Software (Pragmatic Programmers)
-
Whether it's in Java, .NET, or Ruby on Rails, getting your application ready to ship is only half the battle. Did you design your system to survive a sudden rush of visitors from Digg or Slashdot? Or an influx of real world customers from 100 different countries? Are you ready for a world filled with flakey networks, tangled databases, and impatient users?
If you're a developer and don't want to be on call for 3AM for the rest of your life, this book will help.
In Release It!, Michael T. Nygard shows you how to design and architect your application for the harsh realities it will face. You'll learn how to design your application for maximum uptime, performance, and return on investment.
- Applying Domain-Driven Design and Patterns: Using .Net
-
Applying Domain-Driven Design and Patterns is the first complete, practical guide to leveraging patterns, domain-driven design, and test-driven development in .NET environments. Drawing on seminal work by Martin Fowler and Eric Evans, Jimmy Nilsson shows how to customize real-world architectures for any .NET application. You'll learn how to prepare domain models for application infrastructure; support business rules; provide persistence support; plan for the presentation layer and UI testing; and design for service orientation or aspect orientation. Nilsson illuminates each principle with clear, well-annotated code examples based on C# 2.0, .NET 2.0, and SQL Server 2005. His examples will be valuable both to C# developers and those working with other .NET languages and databases -- or even with other platforms, such as J2EE.
- Refactoring: Improving the Design of Existing Code (Object Technology Series)
-
Refactoring: Improving the Design of Existing Code shows how refactoring can make object-oriented code simpler and easier to maintain. Today, refactoring requires considerable design know-how, but once tools become available, all programmers should be able to improve their code using refactoring techniques.
Besides an introduction to what refactoring is, this handbook provides a catalogue of dozens of tips for improving code. The best thing about Refactoring is its remarkably clear presentation, along with excellent nuts-and-bolts advice, from object expert Martin Fowler. The author is also an authority on software patterns and UML, and this experience helps make this a better book, one that should be immediately accessible to any intermediate or advanced object-oriented developer. (Just like patterns, each refactoring tip is presented with a simple name, a "motivation," and examples using Java and UML.)
Early chapters stress the importance of testing in successful refactoring. (When you improve code, you have to test to verify that it still works.) After the discussion on how to detect the "smells" of bad code, readers get to the heart of the book, its catalogue of more than 70 "refactorings"--tips for better and simpler class design. Each tip is illustrated with "before" and "after" code, along with an explanation. Later chapters provide a quick look at refactoring research.
- The Passionate Programmer: Creating a Remarkable Career in Software Development (Pragmatic Life)
-
I really liked the Pragmatic Programmer, it’s on my recommended reading page for that reason.
For anyone interested in self improvement, getting on with their careers and not being content to drift where things take them this book has ideas and suggestions on how to take control of your career and make something remarkable.
- Code Leader: Using People, Tools, and Processes to Build Successful Software (Programmer to Programmer)
-
-
Review coming soon...
- The Art of Agile Development
-
The title says it’s about agile development, but this book is very specifically about Extreme Programming, other agile methodologies aren't covered. A lot of the content of this book applies to other agile methodologies as well though.
This book does an amazing job of not only showing you what agile development ideally looks like, but also gives a lot of tips and helpful information on how to get to that point. After a thorough introduction on agile development and XP, the book covers a large list of XP values, principles and practices, grouped together in different categories: Thinking, Collaborating, Releasing, Planning and Developing. Each practice is covered very thoroughly and clearly. Finally, the book closes with a few more chapters on how to master your agility as a team after you've gotten used to the values, principles and practices covered earlier. This is one of the best books on software development you'll ever read.