Hi! I’m Ignacio, CTO at Frogmi®. I’ve been working in the software industry for 10+ years, but I did not study computer science engineering. In fact, I’m an electrical engineer. Fortunately, I have had excellent friends who are software engineers, and who recommended me great computer science books, some of which had a strong impact on my professional development. Given the above, I decided to write this article sharing the books that contributed the most to me, along with why and what I enjoyed most about them.
Understanding Computation, by Tom Stuart
As you may imagine, I didn’t take courses like computer theory or programming languages while studying. Therefore, this book was instrumental in learning those topics. Understanding Computation is a book that shows you how Automatas, Turing-Machine, Compilers, and Functional Programming work. But its most remarkable feature is that all the examples are done in ruby, so it’s simple to understand how they work. I certainly recommend this book if you want to learn about these topics for the first time, like me, or if you want to revisit them following this new ruby approach.
Clean Architecture by Robert C., Martin
This book explains how to design scalable and easy-to-maintain software. It describes the three main programming languages paradigms: procedural, object-oriented, and functional. Then, it depicts how to apply some helpful design principles, like SOLID principles.
What I liked most from this book is the concept that business logic should never depend on details (databases, frameworks, UI are details), and the usual way to resolve this is using dependency inversion.
Agile Software Development, Principles, Patterns, and Practices by Robert C., Martin
Following Clean Architecture this is another book from Robert C. Martin (a.k.a. Uncle Bob). In this book, Uncle Bob explains the SOLID principles and how to use many practical design patterns, providing excellent examples (and a lot of code). Thanks to this book, I truly understood why OOP is essential for building scalable software. Despite it being from 2002, this book is still relevant today.
Bonus: the book has a transcription of Uncle Bob’s pair programming session that is very useful to understand pair programming’s value.
Refactoring by Martin Fowler
Refactoring is the process of improving the code without changing its functional specifications, meaning that the existing tests aren’t modified. The way to achieve this is by following the sequence: doing small changes and running tests; doing small changes and running tests; and so on. This book catalogs those most common ‘small changes’ for doing refactoring. On top of this, you will very insightful find a step-by-step refactoring example in the introduction.
Peopleware – by Tom DeMarco & Timothy Lister
This book is not as technical as the others on my list, but I absolutely recommend it. I heard someone saying that we, programmers, are more translators than anything else. Our job is to understand what people need and write it in a language that a computer can understand, and that’s undoubtedly a social ability. In this book, DeMarco and Lister show us, with data, how most issues in software development are not technical but sociological.
I hope these recommendations are as helpful to you as they were to me.
If you want to talk about them, I’ll be happy to hear from you. Just write me! =)In case you want to work with us and join Frogmi®, we are always looking for new talent! Check out our open job positions for developers here.