As a 16 year old, I find it nearly impossible to find work on software that I can do, because of EULA's on most freelancing(i.e Upwork) and pay-for-fix sites(Bountysource). I already contribute to open-source software. What other options are available for me to gain experience?
Just build something - it really doesn't matter what. You have a good window of time where you have very little requirements in terms of paying rent, bills, etc., so take advantage of that and just write as much code as you possibly can.
Bingo. This is exactly what I did. Build a lot of of things, it doesn't have to be unique, it doesn't have to have a business plan, it just needs to be something.
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).
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 :)
Had experience in sysops perl scripting for web apps under my belt (wanted unified dashboard + designer for monitoring metrics visualization https://github.com/andrdeas-marschke/nagplot) in the process reverse enginieered NRPE from source / wiretracing and created one of the most if no the most linked articles on the protocol in the process. Released the code as seperate package (Nagios::NRPE).
Then decided to learn JS and node and started writing a web real user monitoring system based on http://github.com/bluesmoon/boomerang. While at it submitted PRs to upstream and engaged in the community mostly with complaints about sftandard stuff missing and modules not being in a good state.
Now I work in the same company as the guy who created boomerang and lpve every minute of it.
Also, I contributed to Drupal for a while starting in high school. That itself doesn't bring in cash, but it established a reputation in that community, and now I work at NBC doing Drupal development. Open source contribution is a means to an end sometimes.
I built simple websites for local businesses, and then moved into building an overly complicated CMS and hosting service for them. I put in like 18 hour days for almost a year (skipped a lot of classes in high school), and ended up with a pretty cool product. Unfortunately, I lost pretty much all of the code, so I don't have a lot to show for it. :(
I started by building services but never really expected a payment, I just wanted to build something and figure out my way around servers. I think that's the best way to get started because it affords you the opportunity to start over if you find a new framework/database/server/etc. and there's no penalty for failing.
I built a social website for artists. It exposed me to the whole stack and I learned an immense amount. I got my first paying gig by using the website I built as a foot in the door. Nothing beats learning by doing.
I'm a dev who became a manager. I do a lot of interviews at one of the big tech companies. I cannot overstate how right cweagans is -- you have the opportunity now to just build stuff. Explore new projects, get passionate, learn as much as you can. You don't have to finish every project, but try to get one polished and shipped. The first question I often ask candidates is to tell me about a project they found challenging and interesting, and if you have a wall of those projects you'll be a leg up on your peers.
Beware of foregoing formal university education just because you are getting coding gigs.
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).
As someone without a formal education in this path, I mostly agree...
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.
I know a really successful, world-class, senior Google engineer who doesn't have a high-school diploma. He's very smart and incredibly hard-working, a great mentor and an inspiration to others. He's also probably been lucky.
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.
Look first for local software development shops and contact the CTO, group manager, or if available, HR about your interests. Consider looking first for services companies (e.g. web development shops, digital agencies, etc.) as they typically can use an extra set of hands. LinkedIn should be a good source of contacts. Explain your background and that you are interested in shadowing or being an intern. Even though you may be beyond the abilities of an intern, take it if the opportunity looks interesting and you have an opportunity to learn and expand your skills.
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.
This is good advice. I got my first programming job at 16 working for a local web agency as a summer internship. I actually responded to an ad - I was lucky in that they were looking for someone like me. If they aren't, I think there is a lot of value they could get from you, and your task is to convince them of that fact :)
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.
You could work on things for yourself. As a 16 yr old presumably living with your parents there's no risk.
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.
Don't worry about success of your idea if your primary focus is gaining experience. If you get some success as a side effect then that is a nice bonus, but the more important thing is that you gain experience and practice which makes you a success later on when you are working on getting a real job.
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.
Make something you're interested in using yourself. It doesn't matter if the app already exists. Read reviews, see what people do and don't like about it and try to make a better version.
LOL.. at 16, it doesn't matter... you don't have much overhead.. do something you're passionate about.
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.
I started working full time at a web development consultancy at about that age, you'll get screwed a bit: you'll likely be brought in at a less-than-appropriate salary, as I was.
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.
How much are you looking to get paid? If you don't care that much, try putting an ad on craigslist or see if your high school's CS teacher has any connections. (Others in the school who might help network you are web dev teachers, computer networking teachers, and IT.) There may be a solo guy in the area who's working on his startup (probably funded from his personal savings and/or from a wife, or the startup might be a side-project while he works a 9-5 or occasional consulting) and who would find it worthwhile to pay a bright student $10-$20 per hour to do work. Or they might be a small shop with multiple people who don't realize they could use a cheap intern until the cheap intern asks them if they'd consider it. :) If you'd like a shot at more money, I'd either go the app route others are suggesting, or do your own freelancing. Ask your dentist, etc. if they need a new or updated website, that sort of thing. If you want other ideas, observe how people are operating at their jobs and try to imagine how software could make them more efficient, and if you think you could write that software talk to the person with the power to pay you.
Find something you want to build and build it. Mobile App idea? Website Idea, anything really? The more passionate you are about it the better it will be.
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.
At 16 if you are contributing to open source you are well ahead of lots of programmers with jobs so kudos to you.
If I were you I would use this to my advantage by having the git repos etc on my resume + LinkedIn and then start searching for volunteer orgs. for programming gigs and get noticed there and take good references and then apply for full time jobs. Good Luck!
On top of that, would take some time to spruce up code after even a year or so... if you don't have test coverage, add it. If you still use it, take what you've learned and refactor it.
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.
As many have said, just build something, put it on the internet, learn about building homepages that converts well, learn to ask users before building the next project, charge if you can find a way (donations, paypal, parents)
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.
I like to mod games I enjoy. I don't even play games, but I mod them. It's enjoyable, and gives me a lot of experience in technologies and setups that I'd never have seen without modding.
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 :)
Email a professor at a nearby university talking up some interest in his field and pitch him/her your interest in gaining experience building software, he/she may have something in store if you're willing to do it for free?
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.
When I was your age I was doing freelance web development. Keep working on OSS and start doing some contract work and you'll be golden.
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.
Don't try to get money while you are 16. At least if you don't need it badly. Build stuff, you'll learn so much more. I am 27 and two kids, getting paid a lot but I regret the time where I could spend hours on my own project. Now if I have an hour per week I am happy.
When I was 14 I got my first job at a local company. They let me "intern", with good pay. When I was 16-17 I did remote work for a company I found through stackoverflow careers. It did take a while to find one that would take me with my lack of experience, but it happened.
Apart from contributing to well known open source projects or starting your own, you could also try to write a plugin for some product that has a large community (e.g. Jenkins) and/or marketplace (Atlassian's one, though not sure if you have to be 18.)
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.
Also regarding Bountysource (laughably low bounties) and Upwork, for that matter Elance, odesk - all of those are races to the bottom.
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.