Hermit Programmers Are Dead
cesarsotovalero.net
cesarsotovalero.net
As they don’t plan, you never know when (or if) they are going to finish a task. As they don’t document, their code is not reusable because nobody knows how it works. As they don’t test, chances are the code they write is full of bugs. As they don’t refactor, the software cannot evolve. As they don’t handle infrastructure, their code has only been executed on their machine, and only God knows what will happen when the code runs in production. As they don’t have good communication skills, they do not know how to sell what they do to the market, which is why they are always behind the competence. As they don’t diversify their skills, powerful AI will take over their workplaces.
I think in the end the author took the attributes of "Bad" programmers and applied them to "Hermit" programmers.
So yeah I agree Bad Programmers are going to have a Bad time in future.
He might even get hired because managers love this kind of incoherent drivel. He is still wrong though.
"I'm a Ph.D. student doing excellent research in Software Technology"
https://www.cesarsotovalero.net/blog/the-cuban-revolution-ex...
> The genius behind Google’s browser
https://www.ft.com/content/03775904-177c-11de-8c9d-0000779fd...
He was heavily characterized as a hermit at the time at least (maybe now we'd just say remote worker).
I can determine the intended logic regardless of class or function names, and parameters labels.
I’ve repurposed a lot of code that was labeled as being for one thing but the logic worked fine for another so I just changed the names.
There are a lot of educated bad programmers out there who think their academic view make them good programmers.
The stuff about automation doesn't even seem to fit in this article... that's a completely different conversation.
So I come back to... why bother even writing this? It's no secret that poor "team players" are a nightmare to work with.
I've always worked at agencies so I get exposure to a great deal of projects, and I do partly see what they are saying. More and more parts of orgs are becoming intertwined with software, and they're becoming better at software, requiring you as a developer to organize and connect all the loose bits and pieces everyone else has made to achieve tasks. That takes communication and collaboration even if you're the only developer.
Half my days are spent getting access to SaaS accounts, figuring out who's in charge of what, finding out if certain things are still in use or not. A task like "automate a monthly sales report" becomes a journey of discovery, where you don't have access to anything, and nothing lives where you expect it to.
A single piece of functional software, built from the ground up, is not usually what I find in a new project anymore. More often it's a hodgepodge of SaaS that's opaque and hard to reason about in whole, but each part made sense at the time.
I see now that much of my ability to accomplish a task/feature/project is now out of my control - I'm now so highly dependent on 3rd parties and spend the day sorting out stuff to glue together rather than actual creative work.
Tell that to millions of small-medium businesses, if their needs can't be met by squarespace (and anything other than a brochure really can't) They reach out in their network for what could be looked at as a 'computer/internet handyman'. Will they get the highest quality solution? Maybe not... but they also don't have the budget for that.
I don't agree with the article by the way, I don't see SaaS/cloud computing eating software at all levels.
This is not a good way to launch "hermit programmer" as a new term. The term is not defined and mentioned only three times in the entire text (once in the title). I suppose most readers have different assumptions on its meaning.
I know a few "hermits" (the way I interpret the term) that are excellent engineers and also excellent communicators. Only that they work via mailing lists and not in person. And that they are not willing to succumb to a manager bossing them around.
* they don’t plan how they're going to finish a task
* they don’t document
* they don’t test
* they don’t refactor
* they don’t know anything about production infrastructure
* they don’t have good communication skills
* they don’t try to diversify their skills
I'd agree with the article that this kind of programmer is "dead".... but as far as I know they've been dead for a very long time already.Some of the very best programmers I've ever met tick all those boxes. They could deliver in a week something other teams would struggle with for months. The problem of course came when other people would try to understand and build on what they had done.
If you believe the quote that "Real Developers ship" then they where absolutely Real Developers.
Because of that I suppose I don't fall into this mythical group of programmers that can crank out something in a week that teams struggle with for months. I've done it several times but it's not how I usually roll, plus teams can be super slow sometimes so single guy beating them isn't a huge achievement. I've gotten a lot of accolades because I've "left the garden better for the next guy", several times.
They'll have to bring the base down to their level to understand and iterate on it.
If you brought another "hermit" in, he'd obsess over it and either refactor it in his vision or understand it and know how to flex it to continue iterating.
You bring a team of normal people in, they'll think it's too "adhoc", and rewrite it in a bloated and complex way.
Sure, but shipping untested, undocumented code in 3 days that is bug free, fast, rock solid and does everything it's supposed to do on the first try, takes a certain sort of talent. They might make very annoying colleagues, and the people who have to follow them might curse their names, but they're not "bad programmers".
I think they are quite alive.
Or you know just want to make a good job, and not have to "live" in a artificial and complete dishonest "family", like the googles of the world try to portrait them self's.
> As they don’t plan, you never know when (or if) they are going to finish a task.
> As they don’t document, their code is not reusable because nobody knows how it works.
> As they don’t test, chances are the code they write is full of bugs.
> As they don’t refactor, the software cannot evolve.
> As they don’t handle infrastructure, their code has only been executed on their machine, and only God knows what will happen when the code runs in production.
> As they don’t have good communication skills, they do not know how to sell what they do to the market, which is why they are always behind the competence.
> As they don’t diversify their skills, powerful AI will take over their workplaces.
I have only one answer to these rather ... interesting ... statements: https://stackoverflow.com/story/chrismarshall
And communication skills where highly useful in the mid 90s as much as they will always be. And the salaries for developers are so much higher now than before. Yeah sure everyone that knew what CGI was in 1996 got a great job, but that salary was like 25% of what is now.
For example, once self driving cars gets on the road you will likely see a huge need for developers writing apps for using those cars to automate many daily tasks etc.
When was this ever different? Single developers always could barf out whole systems. And going by my experience, the relative quality of fullstack-devs today is not better than it was in the past, they just have now more gears moving.
> And the salaries for developers are so much higher now than before.
Are they? Salaries are always going up, so going just by the numbers of course is it higher. But did salary in IT really grew stronger than in other jobs over the last decades?
Before that, you’d have to have a number of landlines to provide a service from home that people had to dial into.
This is in itself nothing special. There also was always a price for this, which usually was quality and time. This didn't change till today, but as time moves on, things become simpler, so more people can do this now on a higher level in a shorter time.
> Colo places
What is that?
> if you knew the right people and had access to cash to buy a server up front
I'm not sure how old you are, but cheap webhosters exist since the 90s, and so do one man-web-companies. And before that you could misuse other means. Additionally, I'm not just talking about webdev, but development in general. Single developers creating whole mature applications and companies around them is nothing new.
It was a much simpler way of doing things because the number of users was known, and you didn't need to scale past that.
Also, your users were known, and thus you really didn't have to worry about security, for the most part.
Programming was a matter of finding the right libraries, and doing plumbing, back then, as it is now. Nothing has really changed in that aspect.
What has changed is that productivity has plummeted as a result of having to fragment systems across servers, networks, and client platforms, with many additional leaky layers of abstraction added to attempt to compensate.
I watched as the office network I was hired to support in 1997 became so reliable that by 2013 there was almost nothing for me to do. The tools that can produce code to run in that environment from 1997 only fail because we've switched from 32 to 64 bit environments.
All those layers of plumbing need to be managed, and it's programmers, not some AI that is going to do the job.
It seems by "programming" you mean setting up a website or a webapp. You know, maybe this is what most of the programmers do, but the whole programming area is much, much more vast.
Very little of what I have been doing in 25 years of software development, or what my colleagues are doing, could be described this way.
Yes, there is some plumbing in networking, GUI, or say UTF-8 handling. But I would guess 95% of our code is original and complex logic.
By programming, I mean starting from a sketch on a piece of paper at lunch at Wendy's outlining an idea, and implementing it on both a handheld computer programmed in PL/N, connecting to it via a weird custom serial card/cable, then in Turbo Pascal on an IBM compatible PC, implementing a database, text editing routines, multitasking, and all end user support... in the days of MS-DOS through Windows 3.1
Building my own multi-tasking definitely wasn't plumbing, but after I had the libraries built I needed, it was all plumbing.
The nice thing is in Turbo Pascal, everything had help that was complete, with a working example piece of code.
GIT still is way better than backups to zip file on floppies.
With all of the benefits of efficiency and the cloud mentioned in the article, such lonesome characters can now put together their own SaaS or similar sorts of high margin services/products (such as infoproducts, data, or semi-automated consultancy) and make a reasonable income, and most customers don't care whether it's wired together with tests, refactored properly, or what not.
It does require at least enough business, marketing, and communication skills to sell their work, however, but even this is becoming an easily reproduced or outsourced skill nowadays.
i actually print out the sourCe code and go line by line while on the toilet. though i now use an ipad to do that.
You sub-tier hermit blub code monkey piece of shit how could you forget to document and test well and refactor and stay on top of a 100 tech trends while churning out tickets all day, firefighting production issues, mentoring other programmers and working from home during a pandemic while friends and family around you are getting sick or dying? All of these things are doable if we had 5x more time and training and sane work cultures but we don't.
Fuck off, blame management.
This subtitle is almost the same as the title Patrick McKenzie's popular article on salary negotiation and career progression which is almost 10 years old now. So not really anything new and it's a bit disingenuous to present this as a big new change as of 2021.
The article does this switcharoo where it states something in the title, never addresses in the text and then it lists conclusions which aren't related to the main text or to the title. The conclusions make sense on their own - it's a list of useful skills for software developers. But they don't belong to the rest of the article or to its title.
1. There exist successful projects that don't rely on them.
2. They're not in an exclusive relationship to programming (e.g.: a person that focuses just on programming and that write code for themselves can still refactor their code).
Should be obvious that being a hermit does not correlate with being professionally unsociable, nor does being an amazing programmer does correlate to being sociable. They are separate things and even if there's some overlap that says nothing about the one thing or the other.
Fairly pointless article, feels like it was written mostly so the guy can advertise himself.
> An error occurred: JSON.parse: unexpected character at line 1 column 1 of the JSON data.
That to me is the near future of software: people thinking software is somehow solved or easier while failing to execute well on basic things like displaying a static HTML document.
What? I don’t think this guy was a programmer in the 90s. Maybe a fetus.
The vast majority of sw projects are exactly that: connecting pipes.
There's about 4 people that really understand how ffmpeg works, and thousands of people that write stuff that runs on the top.
Also I don't really think that it's fair to claim something for everyone in the world. There are plenty of developers, forking some project and working silently upon it inside some big corporation. I'm sure that there's some chinese guy chuckling on your words as he writes some assembly optimization for H.264 for some rare architecture.
It's just that one guy in Nebraska situation is kind of local optimum and everyone is more or less OK with that, at least for the time being.
I've seen such things several times in my career and it made me very skeptical of people generalizing, like your parent poster kind of did.
One project I watch one dev in charge of the project is seeing comment after comment in the project is 'I will just keep these changes to myself then, closed' and specifically because of him. Lots of devs are keeping their stuff private.
I personally have done this in another project. I got tired of arguing with one dev over 2 lines of code. So my private version works. The public one is broken in that case. That was 2 years ago. It is still broken publicly and the forums for that group are telling them that...
> no-code movement will continue its expansion
One of the many examples of false opposites.
A good programmer / software engineer / whatever you name it, is characterized by his ability to move smoothly between very different layers of abstraction vertically as well as the ability to adopt different points of view, technical caused ones and others. This requires different levels of mastery of all of these things. Not always at the same time, but ultimately no one can be avoided.
Regarding the example from above: Dealing with a real programming language becomes unavoidable with certainty at some point. And this isn't simply "glue code", a pretty derogatory term often used by people who just can't program. It is part of real quality.
One of the many examples of false opposites.
Absolutely. As a developer who works a lot in a no-code environment, the way I approach a problem is no different there than if I was developing the same solution by typing text in an editor. I see every day that people who are "good" programmers produce solutions in those environments way beyond what non-programmers produce.
Someone with a programmer’s mindset is going to continue to have a solid advantage when building software, regardless of the tools used in building.
Every single point in the conclusion is wrong.
I still don't know what's being sold, though.
In programming it's different. Cost of mistake is negligible for most projects. Worst case is your production database is dropped, so you have some downtime while restoring it from the back up.
If some AI will be able to actually replace even junior developer, it'll be widely adopted. May be not for martian missions or artificial heart, but for some boring CRUD service - any day.
An issue is that so far GitHub Copilot is the only widely known AI attempt to tackle code generation. And while it's promising, it's far from replacing a human. It just can't write useful programs. While automated truck driving is absolutely a thing for many years.
Uhhhh…WTF?? On a scale of 0 to WRONG this is WRONG + 1.
When that pay raise doesn't happen, when cuts to the staff come down, when that other or junior person get's chosen or promoted over you, when your job get's outsourced, etc... It's about their profits, not you.
Somehow this person has got themselves so twisted up in the corporate game, they don't know the difference between "hermit programmer" and "bad programmer".
Below is a list of traits of bad programmers. Saying that only an independent or hermit will do one or more is to be blind to reality:
1) they don’t plan 2) never know if they are going to finish a task 3) they don’t document 4) their code is not reusable 5) they don’t test 6) code they write is full of bugs 7) they don’t refactor 8) the software cannot evolve 9) they don’t have good communication skills 10) they don’t diversify their skills 11) powerful AI will take over their workplaces
As for AI, corporate is more likely to use such to eliminate jobs internally, to save themselves a few bucks. In addition, corporate environments and teams don't produce bug-free code and management can lead a project "off a cliff" to where it fails. Just because a team of people think they are doing the right things, doesn't mean they actually are nor is there any guarantee of success. Doing things by committee can also be a source of vicious arguments, resentment, and project stagnation. Every team isn't effective or efficient, so can depend on the situation.
Bad programmers can exist in corporate environments and teams too, because they are able to abuse the power of their position or fool management for a while or prior to them jumping ship unexpectedly to another company.
An error occurred: Unexpected token < in JSON at position 0.
at the bottom of the page.Not really. It's more that the balance between breadth and depth has shifted. Applications are so much more complex and do so much more than they did 20 years ago. You definitely need to build a web version, and probably at least two mobile platforms too. Depending on what it is, maybe one or more desktop apps too.
In fact as a 1-person team it's usually necessary to interface much more often with other non-technical people. In larger (scrum) teams that is usually centralized through a PO or PM. Which is in the long-run usually a good thing, pressure can be extreme for 1-person teams since people call the programmer directly. I used to work at places where sometimes for a time frame of 1 hour a day someone tries to make me listen to his or her ideas. Such a waste of time.
> As they don’t plan, you never know when (or if) they are going to finish a task.
I have the next year and change planned out.
> As they don’t document, their code is not reusable because nobody knows how it works.
I write lots of documentation.
> As they don’t test, chances are the code they write is full of bugs.
I do a healthy amount of testing (specifically on stuff that involves a lot of variability or uncertainty).
> As they don’t refactor, the software cannot evolve.
Refactoring is like church.
> As they don’t handle infrastructure, their code has only been executed on their machine, and only God knows what will happen when the code runs in production.
I built and maintain my own stack on a combination of setups involving bare-metal, Docker, and Kubernetes.
> As they don’t have good communication skills, they do not know how to sell what they do to the market, which is why they are always behind the competence.
I've been told I'm an excellent communicator. Maybe that's because I spend most of my time talking to myself.
> As they don’t diversify their skills, powerful AI will take over their workplaces.
I can design, develop, write, market, speak, and sell.
---
tl;dr; Don't apply lazy generalizations to yourself as they set an artificial ceiling on your potential that makes you easy to control. See: https://podcastnotes.org/kapil-guptas-solo-podcast/kapil-17/
Perhaps a similar separation will occur in programming, and perhaps (this is a separate assumption) the lower-skill jobs that involve mostly "plumbing" will be automated, just like "assembly worker" jobs are getting automated.
I doubt very much that the more complex and "creative" tasks could be replaced, not in foreseeable future.
At the beginning of the 1990s, one still had minicomputers, notably but not only the VAX. In the workstation market, one had MIPS, SPARC, PA-RISC, Alpha, 88000 platforms. And that's not even addressing IBM world.
Also:
> if you want more SSD storage or CPU processors, you just need to add them to the basket
I used to say "CPUs are cheaper than developers", until the day I discovered that's not always true, and had to spend several months refactoring the product we were building so that it could actually scale properly. Funnily enough, Terraform doesn't magically solve P=NP.
Don't be good at programming, just glue lego bricks together, This Is The Future!
> As they don’t plan, you never know when (or if) they are going to finish a task.
>As they don’t document, their code is not reusable because nobody knows how it works.
>As they don’t test, chances are the code they write is full of bugs.
>As they don’t refactor, the software cannot evolve.
>As they don’t handle infrastructure, their code has only been executed on their machine, and only God knows what will happen when the code runs in production.
>As they don’t have good communication skills, they do not know how to sell what they do to the market, which is why they are always behind the competence.
>As they don’t diversify their skills, powerful AI will take over their workplaces.
What does any of this have to do with being a hermit?
I’d also argue that good communication skills are subjective. For instance people in different regions communicate differently, and some skilled people have disabilities affecting how they communicate. In my view it’s important to be open and accepting towards diverse communication styles. There is no “good skill”, that if you don't posses makes you “always behind the competence”
And even the content is not much better.
That being said, the article sucks and I hate his fonts.
Yeah I wish I hadn't read it either.
Is this actually the case?
Not to pile-on, but I don't understand the bizarre disparagement of computer science. There are far too many programmers, hermit or otherwise, who don't know what big-O notation is, which data structure(s) to choose in a particular scenario based on requirements, algorithm design, or the Church–Turing conjecture. I would also add variations of software engineering methodologies are obligatory knowledge of a professional programmer for situations like using strict, formalized waterfall development in life-safety systems. Credentialed Professional Engineers supervising and/or implementing critically-important code are also Good Things in such situations too.
Concur with the large number of commenters saying this guy seems to have limited experience with which to judge the scale of the problem.