There should be <i>much</i> more emphasis on standing on the shoulders of giants.<p>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 <i>their</i> predecessors when creating solutions.[0]<p>The big gap I've found when working with new professional programmers is that they have almost universally <i>not</i> 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.<p>- At a functional level, there are algorithms<p>- At a solution level, there are design patterns<p>Sure, the article mentions that you can search for solutions: <i>"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."</i> 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 <i>generations</i> of bad programmers, as seat-of-the-pants developers ignorant of the literature become role models of newer developers.<p>But then it says this: <i>"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> I can't imagine saying that to a chemist or microbiologist, or even a structural engineer or architect, plumber or electrician.<p>[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." - <a href="https://news.ycombinator.com/item?id=10044020" rel="nofollow">https://news.ycombinator.com/item?id=10044020</a><p>[1] ... and I'm not talking about Stack Overflow.