5 ms·
I disagree. Programming is a social activity. Developers who are too smart are not necessarily good developers. They might overengineer things and make them mo
by jondubois 9y ago
I disagree. Programming is a social activity. Developers who are too smart are not necessarily good developers.
They might overengineer things and make them more complicated than they need to be and it just slows down everyone else in the team.
Good engineering is really all about empathy and psychology.
- white-flame 9y agoIf somebody cannot abstract, then they will not be a good software developer, period. Code will be copy-paste, genetically engineered, and not understood even by the author why it does or does not work, meaning an inability to document it or even explain it to coworkers. Assuming people can keep fully in mind about 7-10 things at once, a person who can abstract can keep entire constructed systems in mind as one of those "things". A person who cannot abstract will only be able to hold that many immediately tangible source-code level concepts in mind, having a hard limit on the amount of complexity they can have in their projects before their mental organizational capabilities collapse, in the same way people throw up their hands and give up at math problems that are beyond them. It's a necessary but not sufficient skill; as you mention, social tuning and business mindedness tend to round out effectiveness from just raw skill. And if somebody's being an Architecture Astronaut in their "abstraction", then they're not abstracting what they're doing in context of making a workable system; they're just rote copy-pasting architectural memes that they think matches a pattern, just like the ineffective programmer.
- GuiA 9y agoThis seems like a strawman. Are there any humans with a high school diploma/college degree who "cannot abstract"?
- white-flame 9y agoIt's obviously about being able to abstract computational processes and programming constructions, as done by Developers who are Hired to build software. And yes, I've dealt with real people on all ends of this spectrum, and there's stark common denominators in their respective successes and failures. That's not to say this article is any good, but the skill of abstraction is still paramount to software development.
- GuiA 9y agoSure, but phrasing it as “abstract/can’t abstract” seems reductionist and arbitrary. By and large, the overwhelming majority of humans will bring you a cup or bottle of water if you ask them for “water”, rather than bringing you water in their cupped hands. Clearly all these humans can abstract. If this conversation is to be meaningful in any way, it’d be helpful to use well defined, measurable properties (“can count to 10 without using their fingers”) rather than fuzzy things like “they can’t abstract” which is clearly plainly false. Otherwise, these conversations merely devolve in “10x programmers are real and I only hire 10x programmers!” vs “anyone can be a 10x programmer given the right environment” and it just doesn’t go anywhere.
- white-flame 9y agoAgain, you're projecting things nonsensically into non-programming fields. There are plenty of wannabe programmers out there who simply like computers or like the idea of money in the field, who regardless of age cannot muster the required abstract thinking as applied to programming to be a developer that can put out minimum-acceptable-quality code. Regarding your last sentence, that's why I've been careful to call it a "skill", because it can be exercised, apprenticed, and gleaned. But for some people it just never gels. This isn't the distinction between "10x programmer" and "regular programmer", it's the distinction of "has programmer skills" and "does not have programmer skills". And as much as the pointy-haired inclined hate it, software development heavily involves creativity and bespoke research, for which there's no reasonable objective skill measure besides simply doing the work.
- lsadam0 9y agoOn the level required to be an effective developer? Yes. Absolutely.
- digaozao 9y agoI have met many of them.
- jondubois 9y agoI think it's a problem for a lot of software projects that often, simple user operations traverse too many files or components. Obviously this kind of complex logic is written by smart people who can keep long chains of logic in their minds but it doesn't mean that it's a good thing. A less intelligent developer would probably have a hard time keeping long chains of logic in their mind and so would be more likely to keep their code simple and readable... Which often means better code. But it depends what kind of problem is being solved. If it's a very complex problem like working with distributed systems then complexity cannot be avoided.
- booleandilemma 9y agoLots of jobs can be considered a social activity, including programming, but at the end of the day empathy and psychology aren’t going to write your code.
- TheOtherHobbes 9y agoAnd the absence of empathy and psychology - and creativity - will give you impenetrable code with a terrible UX. I'm not sure abstraction is the correct thing to look for. There's an engineering joke about the difference between an engineer and a hobbyist being that anyone can build a thing for $20, but you need an engineer to build something that works just as well - or better - for 20c. There's a lot of $20 code out there. 20c code is much rarer. This isn't entirely related to IQ or the ability to hold a model of the entire codebase your mind, although both help a lot if someone has a talent for seeing the essence of complex relationships. Some people get there after a few iterations, some people never get there at all, and a talented minority of developers tend to get there on the first try.
- deleted 9y ago[deleted]
- sheepmullet 9y ago> Good engineering is really all about empathy and psychology. I disagree. I'll give you a team of psychologists and I'll take a team of mathematicians and we can see who can build the better software. Empathy and psychology are game changers only when they are built upon a broad and deep base of analytical thinking and problem solving.
- jondubois 9y agoAssuming that both groups spent the same amount of time learning programming. For most kinds of large software projects, I think that the psychologists will produce better, more readable and maintainable code. If the project is like a game or something heavy on physics then mathematicians will have the upper hand. I actually did a project for a professor of psychology at a university in the US. They didn't know much programming but I was impressed by the specifications document which they sent me because it didn't have any gaps or inconsistencies like most engineering specifications that I've seen before. The requirements were very clearly expressed. Being able to share very complex ideas with a high degree of accuracy is is an extremely valuable skill.
- sheepmullet 9y ago> For most kinds of large software projects, I think that the psychologists will produce better, more readable and maintainable code. Interesting. I've taught third year maths and psychology students and the maths students almost universally produce more sophisticated applications. Of course it's hard to directly compare because the courses had different focuses. > because it didn't have any gaps or inconsistencies Mathematicians are very good at this - where they might fall down is eliciting complex requirements from others. > like most engineering specifications This is more of a deliberate choice on software projects than a lack of ability. I remember the pre-agile days and specs were a lot better.
- deleted 9y ago[deleted]