There should be much more emphasis on standing on the shoulders of giants.
Just like modern scientists use the work of their predecessors (either reproducing it during their education, or using it as a foundation when creating new knowledge), modern programmers should use the work of their predecessors when creating solutions.[0]
The big gap I've found when working with new professional programmers is that they have almost universally not grokked how to use the available literature[1]. If you haven't figured out how to look at a problem in the abstract and find existing ways to solve that problem, then you're going to waste your time creating new work that is probably substandard.
- At a functional level, there are algorithms
- At a solution level, there are design patterns
Sure, the article mentions that you can search for solutions: "Every problem you have in the first year you learn to program is a problem 100 other people have had before you. And all the answers are recorded online. The sooner you become effective at googling for programming help, the happier you'll be." This is at best only the barest nod in the direction of real work that has been done in computing, and at worst it fails to acknowledge that work (and encourages getting anonymous or amateur advice on a per-problem, no accountability basis). This is what results in generations of bad programmers, as seat-of-the-pants developers ignorant of the literature become role models of newer developers.
But then it says this: "The best way to get better at programming is to write lots of code. Just keep making stuff. As a teacher, I'll try and give you a leg up when I can. But once you know enough, anything I can tell you you'll be able to figure out without me given enough time." I can't imagine saying that to a chemist or microbiologist, or even a structural engineer or architect, plumber or electrician.
[0] From my comment on an earlier article: "Scientists expand the range of human thought in the field by discovering new truths, such as algorithms, design patterns, and conceptual relationships. Engineers turn these truths into techniques and building blocks/frameworks, and maybe designed solutions. Technicians take the building blocks and techniques and make artefacts, hopefully using best practices." - https://news.ycombinator.com/item?id=10044020
> modern programmers should use the work of their predecessors when creating solutions
But they have to be careful.
Ten years ago, every web dev I knew did PHP and 99% of them didn't make use of the work their predecessors. Everyone reinvented the wheel.
Since the rise of node.js packet managers like npm became big and every web dev is like "don't reinvent the wheel, use whats already available". Now I see many projects that switched their "home-grown-solution" problems for "dependency hell" problems.
Just like modern scientists use the work of their predecessors (either reproducing it during their education, or using it as a foundation when creating new knowledge), modern programmers should use the work of their predecessors when creating solutions.[0]
The big gap I've found when working with new professional programmers is that they have almost universally not grokked how to use the available literature[1]. If you haven't figured out how to look at a problem in the abstract and find existing ways to solve that problem, then you're going to waste your time creating new work that is probably substandard.
- At a functional level, there are algorithms
- At a solution level, there are design patterns
Sure, the article mentions that you can search for solutions: "Every problem you have in the first year you learn to program is a problem 100 other people have had before you. And all the answers are recorded online. The sooner you become effective at googling for programming help, the happier you'll be." This is at best only the barest nod in the direction of real work that has been done in computing, and at worst it fails to acknowledge that work (and encourages getting anonymous or amateur advice on a per-problem, no accountability basis). This is what results in generations of bad programmers, as seat-of-the-pants developers ignorant of the literature become role models of newer developers.
But then it says this: "The best way to get better at programming is to write lots of code. Just keep making stuff. As a teacher, I'll try and give you a leg up when I can. But once you know enough, anything I can tell you you'll be able to figure out without me given enough time." I can't imagine saying that to a chemist or microbiologist, or even a structural engineer or architect, plumber or electrician.
[0] From my comment on an earlier article: "Scientists expand the range of human thought in the field by discovering new truths, such as algorithms, design patterns, and conceptual relationships. Engineers turn these truths into techniques and building blocks/frameworks, and maybe designed solutions. Technicians take the building blocks and techniques and make artefacts, hopefully using best practices." - https://news.ycombinator.com/item?id=10044020
[1] ... and I'm not talking about Stack Overflow.