What makes a great developer? A story of an extraordinary blacksmith
quickbirdstudios.com
quickbirdstudios.com
Here are the points in the article, translated into whining about software developers:
"He Loves What He Does" == "Why are good developers expensive?"
Curiosity - "If a craftsman does not love what he does, he is usually working for money or prestige" == "I should not have to pay a developer very much money"
Creativity - "The best ideas come when you walk home from work and your brain just cannot stop thinking about the exciting problems you are working on." == "My developer doesn't think my ideas are exciting"
Long-term motivation - "His motivation comes naturally the process of building and creating new things" == "I should not have to pay a developer very much money"
"He is humble" == "Why do my developers think they're smarter than me"
"He is courageous and honest" == "Why can't my developers give me good estimates for how long things will take"
"He is a team player" == "I want my developers to be instantly replaceable with another developer"
"He is extremely customer-focused" == "Why do my developers keep saying that my ideas are bad?" and "Why can't my developers give me good estimates for how long things will take"
Bad managers, I'd say.
I mean, you can construct a picture of such a blacksmith being Mr Super Customer Focused, sure, doesn't really make it true though? Why add in such an extra layer of distraction when you can just, well, describe good software team members?
I'm pretty sure priorities in the 17th century were not the same as they are now and people had a totally different perspective on work.
I think there's an apt and pithy description for the original article.
It's rather sad, because it turns out that real blacksmith stories (if you ignore the mythological ones) are far more interesting and inspiring than this superficial nonsense.
http://theconsummatedabbler.com/2016/06/25-of-the-worlds-mos...
It's a shame, I did quite enjoy the "our sword guy let us down" cartoon!
Suspension of disbelief is when you put your doubts on hold to enjoy, say, a good zombie movie. As per your link "a willingness to suspend one's critical faculties and believe something surreal". If you need to employ it for a business metaphor, again, really bad metaphor!
Similarly, if you look into the toolbox of almost any mechanic, or carpenter, or millwright, or any tradesperson, really, you are going to see some modded or homebrew tools, that they have put together specifically for some particular job that they do. Jigs, cut down wrenches for tight places, weird welded up gobs of metal that aren't immediately obvious but are super useful for x, y or z. A good software developer should have a whole arsenal of little shell scripts and tweaks and customizations to their editor or IDE that make their work easier.
I'm probably reading too much into this, like someone complaining that computers in a Hollywood movie are not technically accurate. Bloggers have re-invented fables, only this time with medieval trade unions instead of animals.
Aesop got this right. Nobody thinks he's making a judgment on the work ethic of tortoises. You use animals in morality stories for the same reason programmers use "foo" and "bar" in sample code. Write about blacksmiths and you risk naive people like me thinking that you actually mean a real blacksmith.
I bet Masamune (considered the best sword smith in japan) had an amazing wait list and you probably had to know some one to even get on that list.
- Curious
- Creative
- Humble
- Communicates well
- Sees the big picture
- Teaches others
- Honest
- Brave
That's not just a good programmer, that's a good person to have on your team regardless of her/his responsibilities.
So roughly 1/256 people will have all of those traits more than average. This on top of hopefully being able to program.
Depending on the psychology research (which doesn't exist as far as I know) the odds could be much higher or much lower.
If by “average” you mean ”median”, sure (the median is an average, by not the only or most common one), but it's pretty obvious that they aren't independent. Curious, creative, and sees the big picture are clearly correlated, as are communicates well, humble, and teaches others, as are honest and brave. There may even be correlations between the three groups.
I think the key is to actually care about your work. You got even a little bit of that and you're fine.
If I think of it as team dynamics, I can see a single developer making that much of a difference. On his own (s)he is not that much better than your average developer, but in a team (s)he can lift the team with his/her experience and really make them significantly better. 10 times better is probably a stretch, but measurably better at least.
The speed improvement isn't like, "This person can type 10 times faster than everyone else", but more like, "This person doesn't get stuck or waste time chasing dead-ends".
Possibly your code-base needs to have more than a certain level of complexity before developers start getting stuck like this.
I've been in similar situations and, invariably, the "few lines of code" is inscrutable nonsense that no-one else will be able to maintain (and often even understand.) I can write obtuse one line "clever" hacks to solve problems but I'm keenly aware that a) I'll have forgotten how it works in an hour and b) some poor bastard (which might well be me) will have to maintain it for N years after I'm gone.
Presumably this was a trivial data dump and not something like a report that could have benefited from, e.g., embedded formulas, multiple sheets, etc.? (I've produced exports with the latter and the enhancements were greatly appreciated over the plain old CSV export.)
For example, it is impressive how much code can be simplified by just using the correct API calls. Also, some language features are explicitly designed to address a specific problem, and yet they stay unused, even when the problem arises.
As for your two points.
- If you forget about how it works in an hour, you never knew how it worked in the first place. It can happen when you write code at random and tweak it until it passes the test. IMHO, that's the opposite of a clever hack.
- I love to see clever hacks in code I maintain. Like everyone else I start going "WTF?!" but a few minutes later, it usually turns into "oh nice, I learned something today".
To illustrate, this is the kind of code I like to read https://www.youtube.com/user/Bisqwit . This guy's code is short, clever, takes advantage of everything the language has to offer, and still manages not to be too cryptic. Note that these are educational videos and the author spends a lot of time to get to that level. I don't expect to see that in a typical project, but that's kind of an ideal for me.
Obviously I disagree. I'll have forgotten through a combination of being old, not being interested in that code any more, having spent an hour doing something else, and work not being important enough to take up rent-free space in my brain.
It wasn't a hack, so much as removing someone elses (unnecessary) hack that fixed the problem.
A 2nd edition of Peopleware summarises it; the 10x programmer is not a myth, but it's comparing the best to the worst; NOT best to median. It's also not about programming specifically; it's simply a common distribution in many metrics of performance.
The rule of thumb Peopleware states is that you can rely on the best outperforming the worst by a factor of 10, and you can rely on the best outperforming the median by a factor of 2.5. This of course indicates that a median developer, middle of the pack, is a 4x developer. Obviously, this is a statistical rule, and if you've got a tiny sample size or some kind of singular outlier or other such; well, we're all adults and we understand how statistics and distributions work.
Peopleware uses Boehn (1981), Sackman (1968), Augustine (1979) and Lawrence (1981) as its sources. [ "Peopleware", DeMarco and Lister, 1987, p45 ]