The Pragmatic Programmer, 20th Anniversary Edition
pragprog.com
pragprog.com
I'd love to see more people pick them up.
So I’ve become extremely nihilistic about software development. It isn’t that I don’t think the properties of clean code and software craftsmanship aren’t worth it, it’s that companies and the engineers who build them from startups don’t care and are focused on keeping their doors open. Long term health is a very secondary concern.
I’ve done my fair share of preaching that we should refactor and start focusing on quality during code reviews and it’s basically just shouted down with “don’t fix what isn’t broken” and YAGNI.
If you have an established, cashflow-positive company that's not hell-bent on scaling fast (or being forced to scale unnaturally by VC backers) then the balance swings back and it becomes worth investing in your codebase.
> Code quality is really not important at all as long as the product works and is bug free
According to Robert C. Martin is not possible to move fast without good quality.
Of course scaling to billions of users only proves that it can be done without quality, not that they could have done it better with quality software.
The way I look at it is the following:
There are times to take the shortcut (Business reason, for example), and there are times to do the technically sound thing (long term health, usually).
A healthy software team is doing both as it makes sense. That's quality software dev. It's when business takes over the software teams decisions and you always take the shortcut that quality falls off a cliff.
I've worked in those environments too much. I want to be able to take pride in the work I do.
That also makes it really jarring when it recommends something that decidedly hasn't taken off, like the blackboard design pattern.
I had the same experience reading "The Design of Everyday Things". To some extent, these books seem most valuable as historical artifacts of what the tech world was like thirty years ago, rather than current references.
This made me laugh - not because you aren't right (in theory), but because I just took over a project from a big four consulting company. When I asked about the location of the latest version of the code (after looking in VC and not finding it)...answer: on the production server. "We could have checked it into VC, but didn't want to take the time."
I've seen at least n=6 of these in the past couple of years.
Sometimes the oldies are goodies.
Fortunately there is no opposition to version control in their group, it's just momentum keeping them from changing.
Their compass to locate "over-engineering" is a bit off track. Engineering starts after you have put your artifacts in git or any other VC :-)
I worked at a large fintech company that had serious problems with this. About the only hope we had for mitigating it was moving all the services to run inside docker containers and of course ban developers from accessing the systems directly.
Who in their right mind works without version control? Who would want to? And version control has just gotten better and better over the years. I started with SCCS -> CVS -> SVN -> GIT (with a couple of side treks into Perforce and Clearcase). Currently using Bitbucket/Jira, but have also recently used raw git/gerrit. (The organization makes the choice)
Can you recommend a book akin to Desi...Things that you feel better describes "modern" design?
When I review the list of tips--which for those unfamiliar, is basically a list of take-aways sprinkled through each chapter--I find the list more timeless than anything.
https://pragprog.com/the-pragmatic-programmer/extracts/tips
The number of times I've told people that "select" isn't broken, or to use tracers, or fix broken windows is more than I can count.
There, I fixed that for you. ;)
I didn't get much out of The Pragmatic Programmer myself. Maybe if I'd read it ten years earlier, it would have been my Code Complete.
In 1989? Lots of RCS shops who had recently moved to CVS and were excited about the "C" part...
Versioned file systems were developed for source code management and go back to ITS and TENEX in the late 1960s. So version control as we know it, as a widespread (at least in the DEC world) practice dates back to the 1970s.
A pattern I see recurring from teams that were forced to start doing version control begrudgingly:
Pull down code from staging or production to local machine. Make changes. Push to qa or staging to test. All good? Push to production. All good? NOW push it to version control.
W. T. F. F?
Keeps me up at night.
20 years ago this stuff wasn’t prevalent, and now people should at least be able to make educated decisions. But, alas...
Answers to these questions is what's needed for coders to do a good job. The original book does encourage you to think about it, but doesn't provide many answers. The way I remember it, it was very useful at introducing you to concepts, so that you know that X, Y and Z are a thing in the first place.
Step 1: choose a metric that makes sense.
Step 2: set a target for the metric.
Step 3: iterate until you hit the target.
So for "good, clear documentation" the right metric might be "other people using the documentation to do things and/or demonstrate they've learned something."
The target might be set a quiz or asking people to use the documentation to do something, and get a 80% passing rate.
The truly pragmatic thing is to not insist on getting anything right thr first time, to measure by outcomes not outputs, and especially to value the input of other people and be empathetic to your users, fellow developers, bosses and yes, even yourself (no failures, just data...)
My own thoughts on this btw: https://mcconnellsoftware.github.io/struggle-design-balance/
So in that sense, the advice is good and necessary. But it's kind of not, because the kind of person who needs the advice isn't often the kind of person who reads such a book.
The way to resolve the dispute (should there not be much difference between them) is to arbitrarily pick one and iterate in short bursts to ensure its assertions come good.
The other side of the coin is that people are constantly reinventing the wheel, bloating the tool sets, and relearning lessons already learned because of lack of standardization.
Sadly true of far too many "influential" books. Although I did enjoy reading it, I finished it in an afternoon - if that's possible, it's probably not hiding any real deep wisdom.
This is probably not what you meant, but: The last thing I want in those types of discussions is "But book X says this!"
I have that problem with a few unfortunately good albums, but never would have thought that might apply to someone with a book.
Most of the time, you're just throwing crap together at the last minute. Doing things without saying no.
My first dev job was so terrible, I almost quit this career entirely.
Try reading it again, this time thinking of each chapter as its own, separate story.
Don't fall into the trap of "This is popular so I'm going to express criticism". If you want to, you can extract a great deal of wisdom from this book.
Hehe, no offense, just talking to myself.
One of my favorite authors wrote that every book eventually becomes a prison for the mind. At some point you will transcend the content which means it's time to move on. But that doesn't change anything about the book, it's still as excellent as ever for others.
The only constant in this universe is change.
What I've never been able to figure out is why it has never been updated in all that time. Does anyone know? I heard from someone who heard from someone that there was some kind of legal reason they couldn't update it, but I can't really imagine what that would be.
Obviously, lots of books don't go into multiple editions, but given what this one was about, I felt like it couldn't possibly be entirely full of "timeless advice" that wouldn't ever show its age.
However there were nuggets of gold in the original. Looking forward to finding the new bits and gems again.
I don’t think a month goes by that I don’t quote this concept to a group or individual. Really appreciate how they put all these ideas together.
That is what I got from the link.
I haven't read that book in fifteen years. Are there any interesting changes since the first edition?
Not all of it may appeal to you, but if there are just a few points that help you become a better programmer then it's worth it.
I have never read this book. Ironically, I have read and enjoyed many books from PragProg. But this one always struck me as a "fufu" book, written around giving advice that one can independently reason and acquire during one's career.
Am I wrong? Is this book worth reading if you already have many years of experience under your belt?
If you have a day to kill, it's an entertaining read, and if you're an experienced developer, you'll find yourself shaking your head or nodding along throughout. But it's mostly just entertaining, well-written anecdotes - there's not really that much to _learn_ there.
So I disabled noscript, which refreshed the page automatically, so of course I was still on https://pragprog.com/no_js and not https://pragprog.com/book/tpp20/the-pragmatic-programmer-20t...
...Not very pragmatic of them IMHO.
I do quite enjoy my copy of the book, however :P
If only to reassure me that I am generally doing things correctly, it didn't really teach me a whole lot.
Never hurts to brush up on the basics.