Advice to Aimless, Excited Programmers
prog21.dadgum.com
prog21.dadgum.com
I probably don't need to say anything more.
It can be a problem because you use your favourite language/tools over and over to be productive, but then you look up and ten years have passed and your skills are no longer marketable.
This is easier to see in the older generation - I have the pleasure of knowing some totally top-class programmers who have happened to spend their whole career writing FORTRAN. Would any of you guys hire them? No, you want the RoR kids, not surprisingly.
Like everything else in in life, there is a Middle Way. Don't have new-shiny ADHD, but try and tick over a new language or technology every few years.
(Incidentally, the only new language I've been able to stick with after learning Python is R, because it solves completely different problems. Which means R is now my Blub for stuff that I'd like to, given some free time, try with Clojure/Incanter...)
Just be sure to finish them. The mantra in indie/hobby video game development is "finish your games, and if you can't finish, try making something simpler".
See also: http://makegames.tumblr.com/post/1136623767/finishing-a-game
I used to build tic tac toe games It was never complete or useful but it helped me learn the tech I was using. Now days creating a blog engine is my new tic tac toe.
By then you should know a good chunk (IO, loops, built in data structures ...)
o | o | o ---------- x | x | x ---------- o | o | o
That (if HN doesn't mangle it) should be a fully working Tic-Tac-Toe board. You can store it as a string, hashtable, whatever you want. You could label the squares 1-9 for the prompt asking the user where to move.
This is all doable with perl and a command line. Try it out, see what you learn.
o | o | o
---------
x | x | x
---------
o | o | oWhat was so cool about it was watching it learn, and realizing that unless I programmed it to make random mistakes, it would settle for sub-optimal strategies.
If you haven't already, check out _Essentials of Metaheuristics_ (http://cs.gmu.edu/~sean/book/metaheuristics/), a free textbook / set of lecture notes. :)
Not necessarily. You could get much the same effect (the program learning by playing itself over and over) with many Reinforcement Learning algorithms (like TD learning, say).
There are major differences between Value Function (loosely, perceived_state -> perceived_long_term_reward map) based RL algorithms and algorithms that work only in the policy (loosely, the perceived-state -> chosen_action map) space like Simulated Annealing (or Genetic Algorithms). Barto and Sutton (somewhat loosely) use the term "evolutionary algorithms" to distinguish Value Function based algorithms from those that only manipulate policy
"The good thing about reinventing the wheel is that you can get a round one."
Douglas Crockford -- creator of JSON
This also applies to the 'entrepreneurs' who hang around, wanting to make it big but lacking any ideas about anything useful they could do.
The real problem are those who don't even have useless ideas.
That's why there are so many programmer tools and frameworks. :-)
This frustration then gets interspersed with furious bouts of development on personal projects that can last 4-6 weeks, and then I go back to another 3 months of doing nothing and hitting my head against a brick wall.
Help?
I'm trying to make a website to solve this: http://somebodybuildthis.com
By which I mean, if your life as you're living it isn't providing itches that you need to scratch with software, a new hobby might provide some. Or, you might spot an unserved opportunity or market.
The advice is correct, but could be summed up better:
Go work on something.
It doesn't matter what, just pick something. Don't ask someone else to give you work to do. That -never- works out without external pressure, like a paycheck.
I get the urge as much as anyone else to "build something new and cool" (spend enough time Googling me and you'll see I'm pretty guilty of this) but I think FOSS would be farther along if fewer people tried to start their own projects and instead contributed to existing projects.
Er, what’s wrong with someone looking to non-specifically contribute something to a movement (GNU/Linux) or to improve their skills in a particular language? Not anything, necessarily; they’re probably just young.