Hey Lachlan,<p>I'm a 19-year-old software engineer for Barracuda Networks. When I was about your age, I was very interested in programming and computers as well. :) (You can actually find screenshots all the way back to the very embarrassing beginning where I tried to figure out how fonts + iframes worked here: <a href="http://www.screenshots.com/ghostlypets.com/2005-12-15" rel="nofollow">http://www.screenshots.com/ghostlypets.com/2005-12-15</a>)<p>Like you, I spent a lot of time wishing I could just "be at MIT already" or "just get hired to do some work." As most people have said here, however, in the US, you can't legally be hired, as much as this sucks.<p>However, you should check whether the high school you're soon to be attending has a FIRST Robotics program. You'll get to work on a team, similar to a small startup company, to build a robot (and a website, and a business plan, etc.)<p>Additionally, one thing that I found was pretty helpful to me was to find some small niches that needed devs (when I started, I used virtual pet sites as this niche, being a Neopets fan, and later moved to Bitcoin when that got popular.)<p>I got recruited when I was 18 because the company saw me on LinkedIn, saw my Github, and was already interested in me. It was awesome. I'm glad I'm here, it's what I always wanted. But I also have less time to work on "side projects" (i.e. the type of projects you get to work on right now), which means less time to learn what I want to learn and more time to learn what the company needs.<p>So my advice to you would be to find some niches you're particularly interested in and explore them to the fullest extent you can. Learn multiple languages, learn multiple paradigms, learn multiple architectures.<p>The web and computers are more complex now than they were when I was young, and they are going to continue to get more complex. The more abstractions you create, the more there is to learn in the entire field of programming. But when you get into a business role, you have to focus on what makes something work, rather than what's new, what's interesting, or what you don't already know. Now is the time to keep doing that sort of thing, and figure out what you <i>really</i> like about programming.<p>P.S. Looking at you and your friend's sites and blogs, you are the kind of devs companies will be trying to hire. :) When I was young I spent a lot of my time "looking up" to a lot of devs with jobs. Having a job isn't the end-all-be-all to being a dev. It's not even close. There is so much to learn, and so much to do, that nobody will ever be a "better" dev than another. Just stronger knowledge in certain areas. :)<p>P.P.S. I focused too much on web dev when I was young. You can learn a lot about languages, and it's awesome because you get immediate results. But frameworks like Rails provide a lot of abstractions, and if you want to learn the core concepts behind computer science, using them isn't the best way to learn. Try writing your own framework, try writing a game (command-line if graphics is too daunting). You'll learn algorithms, data structures, and paradigms. That's the type of thing that translates between languages. :)