Build tools to help automate simple things you do every day. Build tools just for yourself. That way in a couple years you'll already come to the field with a huge portfolio, and who knows one of your random projects might actually end up getting popular and making you something.
I started making personal projects at 15, worked under my mom's name for freelancing sites while <18 (illegal against their ToS but oh well) and now I'm leading a team of people at a big company since I have 9 years of experience and 5 years of experience with my specialized field (Android).
Just build something.
Simply having an open source project in itself brings in no cash. Can either of you (or someone else) go into detail on your experience? Links are OK! The OP (and myself) would love inspiration :)
CS/math fundamentals are golden and make the difference between you being just another redundant dime-a-dozen ruby coder and a world-class engineer. Not to mention personal enjoyment of what you do down the line. Take a look at the Silicon Valley for proof.
Learning all this stuff on your own is possible, but much harder when you're "working 18 hour days". Harder yet if you eventually have financial commitments (e.g 14 cases of child support payments, har har).
It took almost a decade before I would have considered myself very good... And in fairness, many of those even with formal education I wouldn't consider good. Passion accounts for a lot. I didn't start getting really good until I actually started deeper reading into more conceptual bits of programming, and some of the hard math still isn't the easiest for me, fortunately a lot of real world work doesn't need it so much in practice.
In development, with sufficient drive and without formal education, you'll spend 4-5 years just mastering your tools (the languages you tend to use, your environment for development and deployment etc)... and another 4-5 years on deeper understanding of the craft itself... even then you'll be missing on some of the deeper more low-level understanding.
There's room in this world for both, but if you can get a formal education without amassing hundreds of thousands in debt, I'd say go for it. Just don't think you'll be done learning when you graduate (I still spend at least 10-20 hours a week reading on software/tech), and accept that you will have to break every rule in practice during a career.
Could that be you, the OP? Of course.
Could that be the right path for someone who can't stand formal learning environments and thrives on the challenge of real problems? Sure.
Is it very hard and risky? Yes, in all sorts of ways. You need great mentors and people that will show you how much you don't know. If you accidentally end up surrounded by mediocrity, it's very easy to fall prey to Dunning-Kruger effect. How do you get to work with world-class engineers? It's a catch-22 although not impossible. Universities, on the other hand, are by design a place with many smart people, and you're not expected to have anything other than potential to join.
(And yes, absolutely, if you decide that you're done learning after graduating, good luck with your future hardship. Unless you first learn COBOL, in which case you might still be able to comfortably ride on it for another 20 years)
I agree with this. Before going to university I thought I was an ace programmer.
After just a single semester I could look back and see just how sloppy and awful my pre-university programming was.
I'm very thankful to my university degree for teaching me rigour and core CS fundamentals. Yes, you can learn them elsewhere, but like my parent post says, it's much harder and sometimes you might not even know where to start.
Be prepared to show your work and have something in a document, or better a portfolio website, describing your background and that you can send on request.
If that doesn't produce results, you could try expanding your search to companies that are not in your area, but it will likely be more difficult.
I also think that having a strong track record of contributing to open-source software says a lot more than the kind of job I had; I wish I had discovered and gotten really involved with a project like Python or Debian back when I was that age. Instead, I released game mods, which isn't too bad a use of your time if you find that sort of thing fun.
I'd suggest starting with a small mobile iPhone or Android app. Make a little bit of side money while building a portfolio you can use to your advantage later.
Personally when I was your age I was creating websites. I made a book search engine, and a geoip enhanced amazon affiliate ad system for easily adding affiliate ads to blogs and websites. Both achieved some minor success, although they eventually got banned by Amazon (the book search engine because I was scraping Amazon content, and the ad system because it got adopted by a lot of spammy content farmers because it was a highly effective way to monetize Google traffic, so Amazon blocked my API access).
So the ultimate success of my ideas was minimal, but the experience I gained from those two projects got me a great job at a startup that has led me down a very successful career path so far.
Why not? The point is to learn. Good software engineering skills take years of practice and experience.
One good experience to have is finding out that something you enjoy building might not be something people enjoy using.
When I was closer to that age, there wer 16yo running major pirate software networks, art groups, bulletin boards and even developing related software for the fun of it... if someone finds it useful, awesome, if it solves a problem you experience even better.
It doesn't have to be widely used for the experience to be beneficial, and to make a little money off of it.
Even if you truly had the merits - how could you possibly be seen across the noise?
If you're stable and have all the basics; food, shelter, access to electricity and computer networks; Try to write some software of your own accord, and attend some meetups. It sucks to be below legal drinking age at a free beer event, but you'll meet some people you'll like for sure.
Write some open source code if you want to attract people who have technical ability, write something you think would be useful, and test it with the market, if you would like to attract business.
Another thing mentioned a bit too pro-university here, was the importance of culture and theoretical knowledge. You should probably know your O notation and vacuum up Wikipedia pages on graph theory, discrete maths, or whatever tickles your fancy. Maybe take a weekend to learn how formal verification works, and write a proof or two in Isabelle or Coq. Maybe broaden your horizons to natural language processing, or go into the bowels of the machines you're programming, figure out how adders work.
By far what has helped me the most to prevent myself from being alienated from my industry(which is full of theoretically astute graduates), has been a focus on being cultured and knowing everything they know and more about the topic at hand.
Do not, under any circumstance, let your elders outknow you, or you will be defined by your age.
If you can't think of anything then maybe try a code camp over the summer. They cost money but they will definitely teach you how to write code at a company vs open source and they might even be able to hook you up with a nice internship once it is over.
If you can't afford that then you could try getting an internship by going to coding meetups and when people say they are hiring people go ask them if they are will to bring on an intern. Tell them you learn fast.
You could also use one of your parents to sign up on those sites. If you wanted you could even just build a site for yourself and marketed it a little at local meetups. In the end it is up to you to make the effort.
On all the talk about if you should go to formal school or not that is up to you. It isn't needed but just know you will have to learn a bunch about software design and different libraries on the job. Formal schooling will teach you theories and code camps will teach you one way with current processes. So if you enjoy theories and building compilers than formal schooling might be perfect for you. If you just want to build cool stuff and are will to learn as you go then skip the $100,000 price tag and learn as you go.
Just know whatever you learn at code camp, in school, or even your first job or internship is not the only way. Programming for a living is learning every day. There are many correct ways to build a system and Ruby, Python, C#, Javascript whatever you learn first isn't the only way. Find what you enjoy and do more of that.
I actually used it as reference for my first programming job at 18-19.
Just build something you're passionate about. At the time I wanted to be like Steve Jobs/Bill Gates.
Who are your heroes? Any website / apps you want to make? Any games you want to make?
I suggest you learn a language like Swift or JavaScript and build a webapp, iphone app or iphone game.
Since you are young, maybe you can program something you and your friends want?
Good Luck!
There's always room to improve what you have out there... On the interviewer side, plenty of people only have 1-2 things on github that either don't work, are poorly documented or just plain don't reflect well on them. Do your best to make what you do put out there the best you can.
I should take my own advise more often.
Then when you get to be legal, you will have a few (or a lot) of side projects that each will deliver a little trickle of money. Use these as fun money or even bette channel it into larger and larger projects, hiring others to do the important stuff you find uninteresting.
Find a mentor, someone wiser than you, let them help you level up faster than is possible alone.
Join a mastermind group, be accountable to others, learn to ship real stuff.
When you reach legal age, travel to conferences, talk to older more experienced people, learn how they did and copy what you like.
When you hit 20-25 you can have a steady income high enough to support you.
Also, the joy people get from your work is really high, they are very supportive, and it's an all around fun experience. The negative is you'll get used to that, and then when you work on your own, or for a company wonder why no one is as thrilled :)
Having said that, the other thing that will help you down the road may be getting some good theoretical knowledge in related fields (math, cs); as noted by paul_milovanov in this thread.
Good luck.
Flash forward a bit... And the summer before my senior year in high school I interned at a startup in Honolulu. Just keep learning and working hard and good things will come of it.
Regardless of that, you should also contribute code to an open-source project you really like. This will also get you a good resume.
Google Summer of Code is a global program that offers post-secondary student developers ages 18 and older stipends to write code for various open source software projects.
Go to local tech meetups, give a presentation on something and say HEY by the way.. I'm looking for work! Someone is bound to take you under their wing.