

Ask HN: Learning to Program... - GrandMasterBirt

So I know someone who has been a "programmer" for some time without an formal training. His limited knowledge is becoming a major problem as he is pretty much hitting a roadblock in his career. Would anyone recommend any resources (paid or not) for further training someone in both basic and advanced concepts in programming? He does not have the resources/time to go to a full 4-year college bachelor program at this point but is looking to get better.<p>Any help would be much appreciated.
======
ze_dude
(Given your mention of a career, I'm going to assume he is at the stage where
he can write programs to do stuff, but wants to move to the next level.)

To get better at programming, you need to do more than learn to program
(languages, semantics, frameworks, etc.): you need to learn to think link a
programmer. In this, there aren't many shortcuts: it requires study and
practice.

Here are some great subjects to look into to get him started:

\- design patterns (<http://en.wikipedia.org/wiki/Design_Patterns>)

\- functional programming (although this is language agnostic, I personally
would suggest working through "Scala by example" [http://www.scala-
lang.org/sites/default/files/linuxsoft_arch...](http://www.scala-
lang.org/sites/default/files/linuxsoft_archives/docu/files/ScalaByExample.pdf))

\- meta-programming (here are some videos--with free samples--on
metaprogramming in Ruby [http://pragprog.com/screencasts/v-dtrubyom/the-ruby-
object-m...](http://pragprog.com/screencasts/v-dtrubyom/the-ruby-object-model-
and-metaprogramming))

\- algorithms

\- compilers ("the dragon book"
<http://www.amazon.com/dp/0321486811/?tag=stackoverfl08-20>)

\- testing (unit, functional, integration, etc.)

One thing that will probably help him advance a LOT is learning a language
that does things completely differently than the one he's using. If he'd like
to try that, this book looks good (haven't used it myself but the choice of
languages is pretty good): [http://pragprog.com/titles/btlang/seven-languages-
in-seven-w...](http://pragprog.com/titles/btlang/seven-languages-in-seven-
weeks)

Also, there are some great books on this list:
[http://stackoverflow.com/questions/1711/what-is-the-
single-m...](http://stackoverflow.com/questions/1711/what-is-the-single-most-
influential-book-every-programmer-should-read)

I'm sure there's a lot more to be said on the subject, but that's a start off
the top of my head. What he should start looking into really depends on his
specific weaknesses and/or preferences.

------
jey
College degrees don't teach people how to become good programmers. A college
degree is just a way to gain familiarity with a lot of topics.

To learn to code, (s)he needs to _code_. Lots of deliberate practice coding on
projects that pushes his/her boundaries.

<http://norvig.com/21-days.html>

------
meadhikari
The Hacker's Path krainboltgreene.github.com/l/2/

Found this couple of days ago here on HN. Hope this helps.

------
antonioe
I am a fan of lynda.com. Great tutorials at a reasonable price.

