I'm 19, and just started as a software engineer at a startup in NYC. It's been absolutely incredible - I never thought I'd be here a year ago.
I'll admit that my situation isn't universal - luckily, I could get my foot in the door with many startups by being in the last batch of Hacker School - but if you, like me, hate academia and want to get to work, don't let your age stop you. Sure, there's companies that care about your schooling - the Googles, Twitters, Facebooks, and Palantirs of the world - but there are so many more that just want great hackers with awesome GitHub profiles and real-world chops.
(and, of course, make sure to never stop learning on your own time! You will, inevitably, have gaps in your knowledge you missed from school, but between Coursera, the availability of free textbooks and lectures, and other resources, it's not hard to remedy that on your own)
Please understand that my intent here is not to begrudge you in any way - I think it's wonderful that you're working as an SE at such a young age - but..
I'm 10 years older than you. I code in the evenings, I spend my morning commute listing to any computer science online course I can find... I have over 5 years experience as a Systems Admin... I've interviewed with a number of big companies and startups but I don't feel nearly prepared enough to land an SE role.
How is it possible a 19 year old can?
I can accept that perhaps that 19 year old is just more clever than I am, but I'm a pretty clever guy. What am I missing?
I'm not sure I follow the distinction you're making. I can make things work, but I don't know if that makes them a good product.. I guess that's your point?
Its a founder/CEO/Top brass job to figure out the product and whether its a good one. Its an engineers job to make the thing. If you think you can make the thing, then you can get a job as an engineer. If you think you can LEARN to make the thing, you can get a job as an engineer.
I think you're comparing yourself to the best of the best software developers on HN. I felt very bad about the code I produced until I started working at a big company. Now I feel more confident about my own code.
Write some self sufficient applications. It can be as simple as an app that shows you movie times in your local area in a nice way, scraped from movies.google.com by some quick web-service you written. Try writing the app in some in demand underserved platform.
Teach yourself a couple of algorithms courses and some basic multi-threading problems like producer-consumer and so on so you can get through the interview gauntlet. All of my interview questions can be derived from 5 courses: Algorithms & Data Structures, Discrete Math, Operating Systems, Compilers and AI/Machine Learning (optional).
Go interview, be willing to move.
If you feel like you've already done the equivalent, then your prepared.
I have a few friends who have experienced absolutely meteoric rises at their respective companies. These individuals are good, but not to my knowledge exceptional. In less than two years, they go from new college grad to the very top of the company.
You are a clever guy- what does that say to you about the company they work at, and by extension them?
It doesn't take much to look like a master circuit designer when you are the only person at the company with any training in circuit design. For example, during college at an "internship" of sorts, the two years of education I had at the time pretty much made me the resident expert on circuit design.
Tell us what you think is missing. You don't "feel nearly prepared". Have you prepared? These interviews (for better or worse) tend to be algorithm based. How are you on those?
Example scenario:
If you ask me to solve a problem, I can intelligently talk to you about what a program that solves that problem is expected to do, and happily whiteboard a big picture idea.
If I don't know the language required for implementation, that's ok because I'm pretty confident I can work out the basics and what I need to code.
To meet your points:
A) I haven't really put myself out there in a while(over a year), I've been 'prepping'
B) My algorithm's are poor. While I understand the concept of Big O notation, I can't readily look at something and say "oh that's a _______ sort"
For what it's worth, I didn't have to whiteboard once during my several interviews. If you're interviewing with new SF or NYC startups, you'll find many of them care far more about practical* skills than pop quizzes. This certainly isn't universal, but it shouldn't frighten you away from trying interviews.
* (not that algorithm knowledge isn't practical, but for a lot of smaller, "web-interface-around-a-database" startups, they're not nearly as important as being comfortable around a full web stack)
I need to take time to build code I can actually show off.
The things I build now are essentially web interfaces sitting on databases. The problem is they aren't exactly.. or at all.. legal.
Great learning projects (putting my home video library into a web interface, with episode data from a TV series API) but not something I feel I can show.
Algorithms aren't really about recognising standard implementations - although in preparation you'll certainly learn that. It's about having a deep understanding of programs' flow, and being able to recreate and combine patterns when needed to solve a problem.
You should "prep" your algorithms knowledge - it plays a big role in a lot of interviews.
Don't forget that at your age, I'm guessing you have more financial responsibilities, maybe a mortgage, maybe even kids... You need a 'stable', well paid job. A 19 year old will happily work for less, in a junior position, with the knowledge that the job might not be a permanent thing.
I'll admit that my situation isn't universal - luckily, I could get my foot in the door with many startups by being in the last batch of Hacker School - but if you, like me, hate academia and want to get to work, don't let your age stop you. Sure, there's companies that care about your schooling - the Googles, Twitters, Facebooks, and Palantirs of the world - but there are so many more that just want great hackers with awesome GitHub profiles and real-world chops.
(and, of course, make sure to never stop learning on your own time! You will, inevitably, have gaps in your knowledge you missed from school, but between Coursera, the availability of free textbooks and lectures, and other resources, it's not hard to remedy that on your own)