* Help yourself to other people's servers. Get a free shell account on a unix server and try to use it to the fullest. Chat with people in whatever MUD system they have in place. Try to circumvent security, build software on your account to go around network restrictions .. but don't be abusive. Try to tunnel a banned network protocol over a permitted one. Have your programs in your various account talk to each other. Leave backdoors, but not big, nasty gaping ones.
* Automate your social life. Write scripts to check your email, or parse RSSes of sites you frequent, or see any replies to your threads.
* Get accounts on shells that run on non x86 archs. Learn different assembly languages and have fun. Hack your router and game consoles, install a different OS than the vendor's ;-]
Update!
* Clone the basic unix commands in python and scheme. Coreutils from the GNU project should keep you busy for a while.
* Keep your code off of other people's boxes, including Google (with the appengine recommendations and all.) Sandboxed environments will not teach you how NOT to shoot yourself in the foot. This also goes for hacking in an emulator or a VPS. Learn on a real machine that you can touch and physically fuck up. A desktop is highly recommended, it will force you to open it up and change hardware. The first time you google a motherboard manual to flip a jumper or change a dead CMOS battery will be the day you realize the benefit of having total mastery over your machines.
Nearly every interesting programming problem is a bit over the top to you, at your current knowledge level. The point is to apply yourself, learn things as you go, research, and conquer the problem.
There are no cookie-cutter "noob" problems; there are problems whose solutions you can visualize in your head and see them happen, and problems that make you sit back and go "hmmmm". As you gather many technologies, more and more previously impossible problems begin to fall into the first category. This is what allows you, as an experienced programmer, to rule many application domains as boring and trivial. Even if you have never written a ticket ordering application for a concert hall, if you have done the most basic database application, you can pretty much visualize the solution :-)
Even though he is a "noob" the term coined by pg and appropriate here is to be relentlessly resourceful. That is if he wants to become a good hacker from a nubile state he will need to become relentlessly resourceful in the effort to get things done. I agree with pg that the good/great hackers are extremely resourceful.
Comments
[Edit: Update 2
* Help yourself to other people's servers. Get a free shell account on a unix server and try to use it to the fullest. Chat with people in whatever MUD system they have in place. Try to circumvent security, build software on your account to go around network restrictions .. but don't be abusive. Try to tunnel a banned network protocol over a permitted one. Have your programs in your various account talk to each other. Leave backdoors, but not big, nasty gaping ones.
* Automate your social life. Write scripts to check your email, or parse RSSes of sites you frequent, or see any replies to your threads.
* Get accounts on shells that run on non x86 archs. Learn different assembly languages and have fun. Hack your router and game consoles, install a different OS than the vendor's ;-]
Update!
* Clone the basic unix commands in python and scheme. Coreutils from the GNU project should keep you busy for a while.
* Keep your code off of other people's boxes, including Google (with the appengine recommendations and all.) Sandboxed environments will not teach you how NOT to shoot yourself in the foot. This also goes for hacking in an emulator or a VPS. Learn on a real machine that you can touch and physically fuck up. A desktop is highly recommended, it will force you to open it up and change hardware. The first time you google a motherboard manual to flip a jumper or change a dead CMOS battery will be the day you realize the benefit of having total mastery over your machines.
Some of your suggestions are a bit over the top for a noob...
Nearly every interesting programming problem is a bit over the top to you, at your current knowledge level. The point is to apply yourself, learn things as you go, research, and conquer the problem.
There are no cookie-cutter "noob" problems; there are problems whose solutions you can visualize in your head and see them happen, and problems that make you sit back and go "hmmmm". As you gather many technologies, more and more previously impossible problems begin to fall into the first category. This is what allows you, as an experienced programmer, to rule many application domains as boring and trivial. Even if you have never written a ticket ordering application for a concert hall, if you have done the most basic database application, you can pretty much visualize the solution :-)
Even though he is a "noob" the term coined by pg and appropriate here is to be relentlessly resourceful. That is if he wants to become a good hacker from a nubile state he will need to become relentlessly resourceful in the effort to get things done. I agree with pg that the good/great hackers are extremely resourceful.