Software Craft & Career

The work itself, and the working life around it. Strong craft without communication leaves you stuck at senior engineer. Strong communication without craft leaves you with nothing to communicate about. The first half of this list is the canon of software craft: how to write code other people can read, how to refactor without breaking things, how to design at the boundary of the code. The second half is the canon of being a working professional: communicating clearly, writing well, staying creative across decades, building a body of work you can be proud of.

Laborers are hired to take direction. Professionals are hired to ensure that the direction chosen makes sense. – Robert C. Martin

Heavily weighted toward books that age across language fashions and management trends.

Anastasios Piotopoulos
Written by Tasos Piotopoulos
Lead Engineer | MBA Candidate | M.Sc. Software Engineering & Ubicomp

The Pragmatic Programmer: 20th Anniversary Edition

This was the first technical book I ever read, back in the early 2000’s. I wasn’t quite ready for it then, but some of its concepts stuck in my head and helped me become who I am today.

Instead on focusing on code, the authors present a number of practical approaches they have found to work in real world scenarios, accompanied with solid advice and outstanding analogies.

As Ward Cunningham, the father of wiki, said:

If I’m putting together a project, it’s the authors of this book that I want… And failing that I’d settle for people who’ve read their book.”


Code Complete: A Practical Handbook of Software Construction

This book made me realize, among other things, that assuring quality in software is not something that takes place toward the end of the development life cycle, but is rather a continuous effort which starts from the very beginning, at the stage of defining the problem and gathering requirements.

Concepts within the book are described using colorful metaphors so that they’re easier to comprehend and simpler to explain to a non-technical audience, such as business analysts and project managers. Decades after publication, the value is still timeless.

Reading Code Complete 2 is one of the best investments you can make if you really care about your craft.


Clean Code: A Handbook of Agile Software Craftsmanship

Programmers tend to optimize for writing code fast, which is unfortunate when we spend most of our time reading and modifying code that already exists. The book argues, with examples, that optimizing for readability costs less than it appears to and pays off across every future change.

Robert C. Martin covers the practical questions: what separates good code from bad, how to refactor bad code into good, how to handle formatting, naming, testing, and error handling without smothering the business logic. Some advice is opinionated and not universally accepted (the chapters on small functions and comments in particular have been criticised), but the underlying habit of reading-first design is what makes the book worth keeping on the shelf.


Refactoring: Improving the Design of Existing Code (Object Technology Series)

Martin Fowler introduces a series of refactoring techniques that focus on improving the internal design of existing code without changing its external behavior. Each refactoring type is given a name and it’s described in small, easy to comprehend steps.

My favorite quote from the book is:

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

The book’s code examples are presented in Java, but the concepts illustrated are 100% applicable to any object-oriented language.


Working Effectively with Legacy Code

Michael Feathers defines legacy code memorably: code without tests. Not old code, not bad code, not code you did not write. Code without tests. By that definition, most of the code in the industry is legacy code, and the question becomes how to change it safely.

The book is a long, patient walkthrough of techniques to get behavior under test in codebases that were never designed for testability. The “seams” concept (places where you can alter behavior without editing the surrounding code) is the central tool, and once you have the vocabulary you start spotting seams everywhere.

If you have ever inherited a codebase, you need this book. Pair with [[refactoring]] for the moves you make once you have the safety net of tests.


Design patterns: elements of reusable object-oriented software

For the more experienced engineers, I recommend the all-time-classic Design patterns : elements of reusable object-oriented software, written by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides, a group of authors also known as The Gang of Four.

I made several attempts to read this book over the last few years, just to find out that I wasn’t ready yet. Only after reading Head First Design Patterns (Amazon affiliate link) and getting some more experience in the field I was finally able to read and understand the GoF book. I believe that no one should get discouraged if their initial attempts fail.

The book’s examples are written in C++, but the designs are applicable to every OOP language, especially to the strongly-typed ones.


Head First Design Patterns: Building Extensible and Maintainable Object-Oriented Software (2nd Edition)

Design patterns is one of the most essential concepts of software engineering. Essentially, some of our every-day problems in software design have already been solved by others. Instead of reinventing the wheel, we can tap into the experience tank of those people and find solutions that we probably wouldn’t think by ourselves.

For people who work in large corporations, their boss or client may not want to see this book on their desk, mostly because it’s playful and funny, it uses an informal style of communication, and overall it doesn’t look very professional, but it is! I strongly believe that it’s the best choice one has to get introduced to the mindset of designing software based on well-defined patterns.

The book’s examples are written in Java, but the designs are applicable to every OOP language, especially to the strongly-typed ones.


97 Things Every Programmer Should Know

This is a great collection of tips from a wide range of industry professionals, including Michael Feathers, Pete Goodliffe and Diomidis Spinellis. It provides practical knowledge and principles that can be applied to all types of software projects.

A great advantage of this book is that each chapter is autonomous and relatively short (1-2 pages long), so it’s convenient to read between pomodoro sessions during the day.


The Clean Coder: A Code of Conduct for Professional Programmers (Robert C. Martin)

In this book, legendary software expert Robert C. Martin (Uncle Bob) offers a comprehensive code of conduct for professional programmers, which includes disciplines, techniques, tools and practices of true software craftsmanship. It’s not about code, but rather about the appropriate state of mind to produce high-quality code.

The wisdom contained within those pages has emerged through decades of real-world work experience, not in some vacuum. Of course you don’t have to agree with everything in the book, but I guarantee that this will be one of the most useful reads you will ever come across as a software professional.


Soft Skills: The Software Developer's Life Manual (2nd Edition)

Soft Skills covers the parts of a software-engineering career that aren’t about writing code: career planning, learning strategies, personal branding, productivity, money, fitness, even mental health. Short chapters, easy to dip into rather than read straight through.

The 2nd edition (2020) updates the content and adds a few new sections, but the core stays the same: a wide-angle view of life as a working programmer, opinionated where most career advice is generic.

If this resonates, The Complete Software Developer’s Career Guide is the much-longer follow-up with broader coverage.


Communication for Engineers

A short, modern, practical book on the communication problems engineers actually run into: writing design docs that get read, presenting in front of a skeptical audience, navigating async tools (Slack, email, PRs) without burning trust, handling disagreement in a code review without escalation.

What I appreciate is that it does not condescend to engineers. The author treats communication as a craft with mechanics, the same way we treat code, and offers concrete techniques rather than soft-skills clichés. The chapters on writing for asynchronous audiences are especially useful in the current remote-and-hybrid era.

Recommend to mid-level engineers ahead of their senior promotion case, or to senior engineers who keep getting feedback that they need to “communicate more”.


On Writing Well, 30th Anniversary Edition: An Informal Guide to Writing Nonfiction

This book was recommended to me by Dr. Venkat Subramaniam for whom I have the utmost respect. He recommended that I read it “a few times”, so that’s what I did. And I am going to read it a few times more.

You might not be interested into writing a book or a blog yourself, so you may think this book isn’t relevant. Think again!

Working in the tech industry means that you are constantly expected to write, from documentation and proposals to tons of emails.

And because your career progression is directly affected from how well you can communicate and influence others, this book can be a powerful weapon in your professional arsenal.


Made to Stick: Why Some Ideas Survive and Others Die

This book was recommended by John Papa during an interview he gave me at the Voxxed Days Athens conference.

More often than not we attempt to explain something to others, but instead of getting to the point, we sometimes give long intros and take our time. By the time we reach to the juicy bits, we have lost our audience’s attention.

The book is all about getting an idea across in a short and concise fashion, in a way that will quickly capture - and resonate with - your target audience. In the era of extremely short attention spans, this technique can be a game changer for your career.


Show Your Work!: 10 Ways to Share Your Creativity and Get Discovered

Austin Kleon never disappoints. His first book, Steal like an artist, is one of the biggest sources of inspiration I’ve ever come across. It was only natural that his next book would also a blast, and this time is about sharing the results of your inspiration with the world.

We love our work, we’re passionate about it, but it’s often the case that people around us don’t know or understand exactly what that is. This book will help you tell your story, get your message across and get discovered. Don’t wait any longer, show your work!


Steal Like An Artist

OK, this book is not actually about stealing but rather finding inspiration and fuel creativity. I’ve read Steal like an artist more than three times so far, each of them in one hit. It’s short and perfect.

Software development is a highly creative process. Sometimes that creativity is greatly impaired by stress, lack of self-confidence, deadlines or extremely demanding bosses/clients. The truth is that nobody is able to force creativity, but they can certainly invite it, and that’s the whole essence of this book.


Keep Going

The third in Austin Kleon’s trilogy, after Steal Like an Artist and Show Your Work. Where the first two focused on getting started and getting your work into the world, Keep Going is about staying at it: the long middle of any creative career, when the novelty has worn off and the discipline has to do the work.

Short, illustrated, easy to finish in an afternoon. Useful for anyone whose creative work is also their job and who needs a periodic reminder that the routine isn’t the enemy of the work. It is the work.


The Accidental Creative: How to Be Brilliant at a Moment's Notice

You go to work each day tasked with (1) inventing brilliant solutions that (2) meet specific objectives by (3) defined deadlines. If you do this successfully you get to keep your job. If you don’t, you get to work on your resume. The moment you exchange your creative efforts for money, you enter a world where you will have to be brilliant at a moment’s notice. (no pressure, right?)

Spot on, Todd Henry!

Designing and creating software is a highly creative process, one that makes us squeeze our brain on a daily basis. The big question is, is it possible that you can stay creative at a sustainable pace? As it turns out, creativity is a muscle, hence the more you train it the best it performs. Left untrained for long and you can find yourself struggling.

This book is a great tune-up between the two halves of the brain, can make a big difference on how you deal with your day to day work, and can also help you formulate habits that keep your creativity muscle alive and kicking.


Algorithms to live by

Brian Christian (a writer) and Tom Griffiths (a cognitive scientist) take a set of computer science algorithms and apply them, with rigour and humour, to everyday life decisions: when to stop apartment hunting, how to organize your inbox, how much to explore versus exploit at a new restaurant.

For engineers, the joy of the book is recognizing old friends in unfamiliar settings. Optimal stopping, exponential backoff, scheduling theory, caching, the multi-armed bandit, they all show up doing useful work outside their native habitat. It is the most fun a book about algorithms has any right to be.

A great gift for the engineer in your life who claims they do not read books outside work.


The Power of Habit

Charles Duhigg’s tour of the science of habits, written for a popular audience but rigorous enough to point at the underlying research. The cue-routine-reward loop has become common vocabulary partly because of this book.

For engineering leaders, the most valuable chapters are the ones on organizational habits, the patterns of behavior that persist in a company long after the people who started them have left. Most cultures you walk into are running on autopilot, and most “culture change” initiatives fail because they try to change values without changing the underlying habits that produce them. Duhigg’s case studies (Alcoa’s safety culture, Starbucks’ service training) make the path forward concrete.

Read alongside [[fivedysfunctions]] for a complete picture of how teams accidentally settle into their dynamics.


Remote: Office not required

Written by the founders of 37signals (now Basecamp) in 2013, well before the pandemic forced the rest of the industry to think about distributed work. The book is short, opinionated, and aged extraordinarily well.

Fried and Heinemeier Hansson argue that remote work is not a concession or a benefit, it is a different operating model with different strengths. They are unapologetic about the parts of office culture they think are theater (interrupting people, mistaking presence for productivity, measuring hours rather than output) and concrete about what to replace them with: written communication, async by default, fewer but better meetings, trust.

If your organization is debating remote, hybrid, or return-to-office, hand this book to the loudest voice on each side. It will sharpen the conversation.


Creativity, Inc.: Overcoming the Unseen Forces That Stand in the Way of True Inspiration

When I bought this book I was looking for a pleasant mental break from technical reads, and by no means expected to hit the inspirational jackpot.

Ed Catmull, co-founder (with Steve Jobs and John Lasseter) of Pixar Animation Studios will take you to a journey of creativity, decision making, team building and impressive insights from his long and rewarding career.

The book has been the source for my blog post Which is more valuable: Good ideas or good people? and a whole list of ideas to write about in the future.


The Complete Software Developer's Career Guide

A 796-page reference that covers almost every part of a software career except writing software: setting career goals, navigating teams, managing your own learning, communicating, marketing yourself, even personal finance.

The chapters are short and self-contained, so the book works as a reference rather than a cover-to-cover read. Particularly useful for engineers in their first or second job who want a structured view of what they should be paying attention to beyond the tech stack.

If you’ve read Soft Skills, this is the natural follow-up with broader coverage and similar bite-sized chapters.


Practices of an Agile Developer: Working in the Real World (Pragmatic Bookshelf) (Pragmatic Programmers)

Venkat Subramaniam and Andy Hunt (co-author of The Pragmatic Programmer) deliver a tight overview of the mindset and habits of an effective agile developer, less concerned with process ceremony than with the discipline that holds the practices together.

The book treats agile not as a methodology to be adopted but as a set of working principles that survive scope changes, deadline pressure, and the gap between what customers ask for and what they need. Short, practical, easy to finish in a couple of sittings.


View more book collections