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.
Any help would be much appreciated.
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...)
- meta-programming (here are some videos--with free samples--on metaprogramming in Ruby http://pragprog.com/screencasts/v-dtrubyom/the-ruby-object-m...)
- 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...
Also, there are some great books on this list: http://stackoverflow.com/questions/1711/what-is-the-single-m...
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.