You will need math unless you want to spend the rest of your life as a second-class programmer. You don't have to wait for your teachers to "teach" you good math, you can start today by reading a good book. I recommend Peter Eccles' "Mathematical Reasoning"[1]; it will teach you how to think logically like a mathematician.

[1]http://www.amazon.com/Introduction-Mathematical-Reasoning-Pe...

Mathematics will give you a language to reason about your problems, and once you have the foundations you can start using algorithmic cookbook-type solutions you find in texts for your own problems. A good grounding in Analysis, Logic, and some basic formal methods (you can ask me to explain what these are) will make you a better communicator with yourself.

Along with mathematics you should probably venture more into systems programming. There are programmers who make software for other people, and there are programmers who make software for other programmers. At the risk of sounding snobby, you can probably guess who is having more fun :-) Master your environment. Whatever computer and Operating System you use, tinker with it to no end and figure out everything about it. Systems programmers make Operating systems and compilers, linkers and loaders, debuggers and disassemblers, packet sniffers, and hardware drivers and programming languages.

Don't forget to have fun. Most people you see here are doing software for the money/independence. Nothing wrong with that. But you don't have any bills to worry about, so you can afford to actually become a HACKER (in its cool "dark shades and gelled hair" badass sense) you can start to make stuff your friends at school will go crazy over.

In addition to maths and systems programming you will also need a COMMUNITY. A bunch of hackers who you can chat with online and show your stuff to. There will be experienced members and there will be beginners, however, your community should foster free participation and mutual respect (don't go to forums where people use sexist and racist language and don't hangout with people who call you "n00b" or some such derogatory terms. Bullies are the least capable hackers, usually.)

Challenge yourself. Read books even if you can understand only the first chapter. That's usually a good sign that you will be able to understand the second chapter, if you read the first carefully and did the appropriate research. Browse wikipedia. Lookup difficult English words; not everything has to be technology related, I learned the ABCs of English at the same time I learned programming.

You will become good at what you love, so if you love hacker culture, you will become a better hacker.

Plan your weekends to have fun. Grab an assembly language text and sit by your computer to type in the examples. You might need to get an older computer and install MS DOS to read most of the cheap books; Windows assembly programming is not fun or easy, but Linux's IS (http://asm.sourceforge.net/) Nowadays, Windows is becoming a more difficult hacking platform, all the cool accessible systems programming level stuff are being done on Unix.

Discover Unix. It's a beautiful thing. It's OK to be a hacking snob, if you talk to your friends about what you can do on Unix and brag about it, you will set a standard for what's cool. You will be the trend-setter that your friends copy and if enough of them are interested in hacking you will all compete for brag rights and all will become better for it in the long term. Make something and show it to your friends, either at school or online. That will motivate you more than anything.

I know this is too long, but I had to say it. When I was your age and slightly younger, I was a child-militiaman. I carried a rifle and sat up all night for guard shift. I dug a well with my own hands. I collected wood all day and burned it in a whole to make charcoal for cooking. None of that matters now though, by the time I was 18 I was a Unix hacker; that changed my entire youth, I don't even remember being in a war-zone as a child anymore, all I remember is making my PC speaker scream with a buggy assembly language routine and waking up the whole family at 4AM :-)