Every day, new blog posts are rising ideas and distilling knowledge through Twitter, Medium or whatever, continuously improving our field. The internet is becoming such a great place to share that, nowadays, I can hardly believe that we managed to start web development without tools like StackOverflow.
During the past 10 years, probably just like you, I’ve absorbed about almost anything: methodologies, languages, weird and beautiful data structures, the same for algorithms, computer science history, frameworks and API's. I also had the chance to meet wonderful people, at work or events, with various level of experience.
I've almost avoided the impostor syndrome and gained experience in many ways: maintenance tasks, full stack, specialization, devops, analysis, project management, tough issues, training and even sales interim (!). But in the end… this feeling of missing the big picture was still there, knowing that there is more than that.
At a certain point comes this trivial question, what makes the difference between a junior and a senior developer?
A few answers can be found on StackExchange, Medium or Quora. But... still not there yet, what appeared to be the true answer for me came after talking and listening to other developers, and it is a single word: craftsmanship.
Craftsmanship is just doing things well with the help of various attitudes.
- It all starts by taking care of what you do.
- Do not work alone: help and accept to be helped.
- Be critical.
- Never limit to your current knowledge, know your field and know it well.
Here is one of the session that can just change your life as a new developer. At least you will get a good reminder of how things should be.
So... I asked other developers where to find learning materials about software craftsmanship and it was the sound of a single voice.
You probably already know these books, but if you do not and still have room on your Santa Claus list, just add them at the top, really.
From Journeyman to Master
Andy Hunt and Dave Thomas, 1999
This book is almost 20 years old and still deserves its reputation. You will learn, among many others, the concepts of Kaizen, capturing real requirements, code flexibility, testing or personal responsibility.
I've also heard of companies offering this book to new collaborators.
The book does not present a systematic theory, but rather a collection of tips to improve the development process in a pragmatic way. The main qualities of what the authors refer as a pragmatic programmer are being an early adopter, to have fast adaption, inquisitiveness and critical thinking, realism, and being a jack-of-all-trades.
The book uses analogies and short stories to present development methodologies and caveats, for example the broken windows theory, the story of the stone soup, or the boiling frog. Some concepts were named or popularised in the book, like code katas, small exercises to practice programming skills, and rubber duck debugging, a method of debugging whose name is a reference to a story in the book.
If you do not have the time to read it now, you can still have a look at this summary.
A Code of Conduct for Professional Programmers
Robert C. Martin, 2011
Can be considered as a continuity of the first book. As its predecessor, I regard it as an humanistic approach of software development.
Introduces the disciplines, techniques, tools, and practices of true software craftsmanship. This book is packed with practical advice–about everything from estimating and coding to refactoring and testing. It covers much more than technique: It is about attitude. Martin shows how to approach software development with honor, self-respect, and pride; work well and work clean; communicate and estimate faithfully; face difficult decisions with clarity and honesty; and understand that deep knowledge comes with a responsibility to act.
Readers will learn
- What it means to behave as a true software craftsman
- How to deal with conflict, tight schedules, and unreasonable managers
- How to get into the flow of coding, and get past writer’s block
- How to handle unrelenting pressure and avoid burnout
- How to combine enduring attitudes with new development paradigms
- How to manage your time, and avoid blind alleys, marshes, bogs, and swamps
- How to foster environments where programmers and teams can thrive
- When to say “No”–and how to say it
- When to say “Yes”–and what yes really means
A Handbook of Agile Software Craftsmanship
Robert C. Martin, 2008
A more practical approach with coding examples.
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.
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.
Readers will come away from this book understanding
- How to tell the difference between good and bad code
- How to write good code and how to transform bad code into good code
- How to create good names, good functions, good objects, and good classes
- How to format code for maximum readability
- How to implement complete error handling without obscuring code logic
- How to unit test and practice test-driven development
I wish I would have discovered them earlier, hence this post.
These books will give you a brand new perspective of your work. You will gain confidence, having a strong feeling of mastering your skill. You will become a better colleague and produce maintainable code.