I should’ve made it more clear that once you’ve got programming basics, there are (very roughly speaking) two ways to go from there. The first, which I emphasized more in the post, is to write some kind of Modern Software™ like a web application, phone app, etc. This typically entails reading tutorials and other documentation, dealing with system administration issues, etc. Basically, scale humankind’s ever-growing mountain of software and add to the top of the pile.
The second way is to improve your conceptual thinking by learning new features of your language, solving challenges from Project Euler, tackling fields that require programming skill as a prerequisite (like algorithms and machine learning), learning new and different programming languages to see what they teach you, etc.
The first is more frustrating and more economically valuable, while the second requires thinking harder, is more intellectually rewarding, and builds your skills more in the long run. I guess I emphasized the first because writing Modern Software™ isn’t actually that hard if you can deal with the frustration, but it took me years to realize that, so I wanted to tell others early.
I guess maybe another field of endeavor is dealing with especially large programs written by yourself or other people, where the sheer amount of code makes things tough.
I should’ve made it more clear that once you’ve got programming basics, there are (very roughly speaking) two ways to go from there. The first, which I emphasized more in the post, is to write some kind of Modern Software™ like a web application, phone app, etc. This typically entails reading tutorials and other documentation, dealing with system administration issues, etc. Basically, scale humankind’s ever-growing mountain of software and add to the top of the pile.
The second way is to improve your conceptual thinking by learning new features of your language, solving challenges from Project Euler, tackling fields that require programming skill as a prerequisite (like algorithms and machine learning), learning new and different programming languages to see what they teach you, etc.
The first is more frustrating and more economically valuable, while the second requires thinking harder, is more intellectually rewarding, and builds your skills more in the long run. I guess I emphasized the first because writing Modern Software™ isn’t actually that hard if you can deal with the frustration, but it took me years to realize that, so I wanted to tell others early.
I guess maybe another field of endeavor is dealing with especially large programs written by yourself or other people, where the sheer amount of code makes things tough.
Anyway, here are some more puzzle sites:
http://www.pythonchallenge.com/
http://www.codechef.com/
http://www.4clojure.com/ (for the Clojure programming language)