[TL;DR I’m a 15 year old self taught programmer unsure of what to learn and how to learn it].
Hello, I’m a 15 year old self-taught programmer and I need some help. About a year ago, I made $21,000 making apps for webOS through their Hot Apps promotion. However, that was a onetime thing, and I’ve concluded that the size of their user base makes it a bad platform to sell apps on. But now I’m unsure of what to do.
As a self-taught programmer, it is difficult for me to pick up new technologies. Right now, I know Python, C/C++, Objective C, and some HTML/CSS/JS, and my most complex app was about a 1,500 line C++/OpenGL piano app. I know the syntax of these languages, but I feel like I don’t know how to apply them to make things. When trying to learn frameworks, two things generally happen: One: I find a tutorial, follow it halfway through religiously, and then quit because I’m not making anything useful. Then, I transition to the “just build something” phase, in which case I will spend hours googling relatively trivial issues that I run into. I eventually give up because it takes a ridiculous amount of time to do something that seems so easy. I then move onto the next technology and repeat.
One option is to continue doing phone apps, except for iOS and Android. I have never programmed for Android, but I have been learning cocos2d for iOS and also about normal iOS apps. However, I don’t feel that I can make an app that’s good enough to compete with what’s already out there. Resulting from this is a constant belief that my ideas suck, I would never be able to code my idea, the idea wouldn’t be good enough to be sold, etc.
Another option would be for me to learn about data structures and algorithms. I’ve been studying them a little and know some of the basics, big O, sorting, etc., and I’ve done the first 55 or so Project Euler problems without much trouble. This seems like it would help me the most in the future, but I find it hard to see the benefit in it now, and wonder if I should just wait until college to learn it. Everything else just feels like gluing together libraries that won’t help me at all in the future, while this feels as if it would actually be worth something. Additionally, I also want to get into Stanford, and knowing things like this would help me be ahead.
Another thing I could learn is web programming, which I now know next to nothing about. I mean sure, I know HTML, CSS, JS, Python, but I don’t know how that’s glued together to make a flashy web app. I mean with my skills now I could design something, but it would probably look like crap. The idea of doing a web start-up right now is very appealing to be, but I just don’t know where to begin. I feel like most material is way too basic (“this is a variable…”) or talks about stuff that I have no idea in what context its being used.
Anyways, thanks for reading, and any help that anyone can give would be much appreciated. Thanks!
1) The way to go from "dabbling" to "proficient" is to ship software. It doesn't have to be amazing software. Entire industries are built on very non-amazing software. You will learn more from writing and supporting 1 real application than you will from a hundred tutorials.
You are, from the perspective of 99% of people in the world, a magician. Other people solve their problems by hand, by paper, by process, etc. You can conjure demons, speak arcane words to them, and the problems just go away. Find someone with a problem that they think is a Really Big Deal because they are not on speaking terms with any demons. Speak to demons for them. Get their money. You'll learn a lot from the process -- in particular, how little speaking to demons is actually required of a demon-speaker.
2) Study CS in college. Study something else, too. Your career prospects will not be dominated by your programming ability. Restated for emphasis: your career prospects will not be dominated by your programming ability. If you get really good at one hard thing plus programming, you're pretty much set for life (if that is your goal), since the intersection of the sets "can do This Particular Hard Thing" and "can program" will be only a handful of people.
3) The really useful engineering classes are the ones that teach you how to interact with other people, in particular, how to interact with people who are not engineers. People who are not engineers control most decisions you want made in your favor. Look for courses like Technical Writing or Communication For Geeks or whatever and make a special effort to take those versus learning e.g. how to build microcomputers out of NAND gates.