There were surely a couple of books along your way as a software developer that influenced your mindset the most. That may be those books, that you’ve read quite some times ago but you still refer to those books in one or the other way (discussions, documentation, presentations, …) or at least still have effect on how you see the world of software development and act within it, influencing a good part of your decisions and overall thinking in your every day job – those books that may be at the top of your shelf, because it’s always a good feeling to grab some of them every now and then again and re-read …
The following section presents some books that influenced the shaping of my mindset very strongly (and therefore is surely not representative for others or THE ONLY List of books for effectively shaping your way of thinking, nor is it complete in respect to any kind of criteria), along with a short reasoning about it’s impacts on me (means, it may not have the same impacts on you).
Please note, that the books are presented in no specific order – they were all important for me, getting new insights, each emphasizing quite different aspects. While those books provide a far wider range of knwowledge and insights than mentioned below, i’m only focussing on those main aspects that formed my overall understanding in the general field of software development.
Regrettably, i read this book very late in my present career. It was recommended by a good friend of mine (THANK YOU SO MUCH Bastiaan !!!) and it hit me like a bomb when i first read it. This book was and still is one of the biggest sources of motivation for me, encouraging to invest in yourself, invest in your knowledge and staying curious, all written in a way that’s very fun to read (i had to think back to some of my previous projects with a big smile on my face more than once).
If you would ask me about one single, recapitulatory advice, that stick the most to my mind, than it should be: don’t turn of your brain !!!
At least, it’s the overall philosophy (a kind of zen) of that book that had and still have a great impact on me – and the title couldn’t be selected better. It’s truely a guide for becoming a pragmatic programmer.
Once a prof at my university said, that every student should have deep knowledge in systems theory. I didn’t understand the importance of his words until i read this book! It showed me in a very funny way the obstacles of human thinking, especially related to complex systems. It’s a guide to ‘organize’ your own thinking when it comes to problem analysis and problem solving (not only related to the field of software development).
For me it opened my mind to a more sensible view of how we think and how we make decisions. It sharpened my cognition to a more holistic approach for looking at systems of any kind.
This classic is truely one of the books that can make you see the world with different eyes after reading it.
I stumbled upon this book by chance, but it affects the way how i think about designing enterprise systems up to this day.
I think the mentioned ideas and concepts from within this book are one of the most i refer to in discussions or design sessions. If you think that the underlying technology isn’t the problem (or at least shouldn’t be the main problem, oftentimes responsible for bringing complexity into a system) and that’s the business that matters, even to the bones of your software, than this is the book for you!
Beside that, it’s an easy agreeable advocator for bringing back the emphasis to the good old school of pure object oriented design.
I remember that i read this book while being on a project that heavily relied on the usage of EJB – Session AND Entity Beans (i think it was in the beginning of 2.0). I thought to get some more tips on how to apply the J2EE stack to my project the right way (yes, we had some ‘issues’, especially with Entity beans …).
Instead, this book teached me not too much about a specific technology but rather about alternative forms of building enterprise systems. In a way, it opened my eyes for not to be too focussed on a certain stack of hyped technologies and dogmas but instead to stay curious and not to blindly belief any marketing statements.
Don’t read this book if you search for excuses not to build your own opinion and looking behind the surface.
Well, i simply like the way ‘Uncle Bob’ demonstrates the cornerstones and obstacles of designing and structuring a software system in an object oriented way.
The ‘Agility’ he refers to is mainly related to a more ‘technical’ view (not commiting to a certain agile process model) in order to end up with a system that quickly responds to a set of specific needs (depending on the given environment). Along the way, you learn a lot about the core principles of Object Orientation (like Dependency Inversion Principle, Open Closed Priciple, …) – a sound foundation for building systems in an OO style. If you deeply wan’t to learn about the what i would call ‘common sense of OO’ and the reasons that directly leads to the background of many well known Design Patterns, then this book might be for you.
This book teached me in a very amusing way, that technical knowledge isn’t everything you need in your career.
More than that, this book teached me humility – after reading, you know that you aren’t the best (not even one of the best in my case), but that there are many chances to improve every day, not only in the technical area of your profession to stay up to date.
For example, even if you gained some experiance and knowledge, nobody will take notice, until you market yourself – this demands for a completely different set of skills and an appropriate volition.
It’s a big motivation to look beyond one’s own nose (going beyond the skills of core software development).
I think this is one of the classics. If you haven’t participated in some bigger projects so far, you start to become a clue of how difficult it might be to collaborate within a software development project by reading this book. It’s still the people that participate to the success of a project and it’s essential to understand their motivations and interactions (who said ‘it’s the people, stupid’ again?).
This book highly emphasises the value of every single person in a project and of course the value of real teams (along with all its difficulties) – it deeply teached me respect and the right sensibility for collaboration and open mindedness, when trying to become a better team player.
If you want to know more about the background of the agile principle ‘Individuals and interactions over processes and tools’, than you may find many of the pioneering groundwork in this book.
This book acts as a kind of representative (i also could have mentioned ‘Groovy in Action’ or some other books). For this was one of the first language books i bought within a very long period not being related to my ‘home language’, i chose this one. For me, reading this book made up my mind, showing you that there’s not only one language in the world. By learning another language you may get inspired by concepts and new solutions to some old problems. You may get a completely new viewpoint to a certain problem space and might carry new ideas over to your every day work.
Beside the main fact that it widens your mind for new ideas and maybe other useful paradigms, it’s a good motivation or starting point for engaging in functional programming, dynamic languages, metaprogramming, …
I’ve surely forgotten some of the books that influenced me on my way. And of course we all know, that reading books alone isn’t enough. It won’t replace the experiance you’ll gain from ‘practicing software development’ on an every day basis. At the end, i think it’s a good mix of both – you only have to find the right balance …
And you? What’s on top of your book shelf?