4 ms·
If 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 white-flame 9y ago
If 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.