
What I tell all new programmers - AliCollins
http://josephg.com/blog/what-i-tell-all-new-programmers/
======
jeremysmyth
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](https://news.ycombinator.com/item?id=10044020)

[1] ... and I'm not talking about Stack Overflow.

~~~
k__
> 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.

