This is the post that I always thought to write. Actually, it should have been the first material of the blog as a kind of presenting myself but as I was reading some titles during that time I decided to finish them before write it. This text is a kind of walkthrough in my career once I believe that the books you read directly influences the quality and the maturity level of the professional. As I mentioned before I usually read a lot of books but only achieve the end of those that really arouse my curiosity and interest, there are a lot of titles that I just start and some that I don’t think I am ready in terms of knowledge or inspiration to get the details so, I postpone the read and strangely that action works for me because some of the best titles I ever read were left aside to read in a later opportunity sometime.
I don’t like list anything in order of relevance because it is a very subtle concept, even being a personal list it is hard to give a cardinal order for my favorite books (I have already tried do it with my vinyl records and CDs but I always forget one that cannot be missing), I will try to put them in a chronological way, from the first to the last I’ve read to give an idea of sequence so, let’s start:
Thanks to John Sonmez, author of Simple Programmer Blog and Soft Skills: The software developer’s life manual book which is on my wishlist and next book in line to be read, for inspiring me to finish this post. ;)
Java How to Program (6th Edition) (How to Program (Deitel))
This was the first programming book which I’ve read and the one that helped me to get the concepts of OO and programing in Java Ecosystem. Clearly focused to starters, the Java Deitel is an awesome resource that brings an naive example of an ATM and its evolution to a java application using Swing GUI, network API, Multithreading and the old fashioned JDBC. Even the book being really large, it is not necessary fatinguing to read althought sometimes it goes really deeper in some examples (and some recurrent and trite explanations). The extensive use of UML to illustrate the examples is perfect to enhance the reader understanding in a visual approach. Personally, even years later from my first contact with this reading I think it still relevant for entry level developers who intend to enter the Object Oriented world and the Java language.
Head First Design Patterns
One of the first books that I was suggested to read when starting programming was the Design Patterns: Elements of Reusable Object-Oriented Software written by the gang of four(Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides). Every experienced software developer recommend this as a mandatory read, so I gave a try years ago…It was disappointing. I could not understand even a line, and I felt terrible because every found that book awesome except me. Design Patterns stayed as a puzzle in my head for a long time, I could not get the practical benefit of using it. Then, Some time later the company that I was working at that time bought a copy of Head First: Design Patterns. The series was completely unknown for me and my first impression was terrible once the cover has a strange image of a Gwen Stefani style girl with a brain in her side, in my mind that weird book would not be able to make me grasp the concept of Design Patterns. But as I started to read I could not stop, a real pleasant way to assimilate all his content with a lot of images and visual examples. Every Design Pattern is exemplified in a nicely and rich in details way ensuring that the reader is absorbing the main idea of the content.
Effective Java was written by Joshua Bloch, if you don’t know him by his name just open some core classes of the Java Language and check the name of it’s author. In this book, Joshua Bloch gives insights that will led your career to a higher level (I think that this is a mandatory read for any Java Developer who believes to be at an advanced level). Important concepts like lifecycle of objects, concurrency, serialization and inheritance are addressed in a eloquent way going straight to the point and giving examples of choices made by him during the concept of some Java’s core classes. I have used this book for more than four years as a guideline, everytime I caught in a doubt about different approaches in to solve a problem in Java, I take a look at this and impressing is that every time I open this book, I learn something new that makes me think: “How I didn’t know this?”. The chapter “Creating and Destroying Objects” deserves a special attention from the reader considering that many developers does not have any idea of how it works.
Data Structure and Algorithms In Java
Understanding Data Structures in essential for any developer, definitely is impossible to thrive as a Software Engineer without a good notion of this concept. This book from Wiley presents the topic from basics to advanced concepts smoothly, inviting the reader to think and understand the concepts behind implementations. It starts with some basic definitions like flow control, loops and a little bit of theory that can be skipped by advanced readers. But from chapter 3 ahead the book gets exciting to read starting with List (awesome explanations for Circular Linked List and Doubly Linked List), then one shallow chapter dedicated to Algorithm Analysis(if you want good resources in Algorithm Analysis, a quickly search on Google can provide you better sources) and the rest of the book is dedicated to theory and useful implementations of Stacks, Trees, Queues, Maps and Sorting and Ordering Algorithms. Some time ago I created a GitHub Repository to implement the algorithms represented in this book, unfortunatelly I having a lack of time to finish it. If you enjoy the idea, feel free to fork and help to implement them. In a near future, I will be implementing them in Ruby to demonstrate the ease of legibility of this book for those that aren’t familiar with Java.
The Pragmatic Programmer: From Journeyman To Master
This is that book you should read everytime you pass through some situations that only happens in our area like maintaining bad code, working late to put a feature in production without test, doubts about your future and so forth. Definitely a classic in our area and impossible to read and do not identificate yourself in some scenarios described here. I read it in a moment that I was really frustrated with some situations in software development, personal achievements that I was unable to do and discrepancy of what I believe to be a good development environment with what my managers think. I thought that I was completely mistaken when I started to read Pragmatic Programmer and it was tremendously helpful for me. General hints that can drive the developer to the highly productivity way are presented in a contextual manner like be less wedded to a specific technology and create a background stem to allow you to decide which best fits your problem. I copied an important definition of what makes a pragmatic programmer of the preface of the book, they are:
- Early adopter/fast adapter: You have an instinct for technologies and techniques, and you love trying things out. When given something new, you can grasp it quickly and integrate it with the rest of your knowledge. Your confidence is born of experience.
- Inquisitive: You tend to ask questions. That’s neat—how did you do that? Did you have problems with that library? What’s this B e OS I’ve heard about? How are symbolic links implemented? You are a pack rat for little facts, each of which may affect some decision years from now.
- Critical thinker. You rarely take things as given without first getting the facts. When colleagues say “because that’s the way it’s done,” or a vendor promises the solution to all your problems, you smell a challenge.
- Realistic. You try to understand the underlying nature of each problem you face. This realism gives you a good feel for how difficult things are, and how long things will take. Understanding for yourself that a process should be difficult or will take a while to complete gives you the stamina to keep at it.
- Jack of all trades. You try hard to be familiar with a broad range of technologies and environments, and you work to keep abreast of new developments. Although your current job may require you to be a specialist, you will always be able to move on to new areas and new challenges.
This book is a inspiring source of self improvement and I definitely wish I’d have read it before.