Ask HN: What is the best way to spend my time as a 17-year-old who can code?
My GitHub is: https://github.com/meyer9
My GitHub is: https://github.com/meyer9
What's the best way to spend your time? Basking in the sun. Finding a scam to score some schnapps or beer or weed. Telling somebody you love them, and just going for it. Recklessly driving a car at a high rate of speed down an old country road. Learn how to play a bass guitar. Spend your waning hours getting your hands dirty while there's still time, and before the world judges you too harshly for wanting to live in it.
And if you've done all that, and you're bored with it, maybe it's just not for you, or whatever. Then work on projects that interest you. I spent a lot of time perfecting photo galleries, and was able to stretch that in to a modest career and a house that went in to foreclosure. Linux could use a lot of things still: there isn't one good kick ass music player to rule them all like iTunes on the Mac. There just isn't anything for organizing photos like iPhoto. There's gaps in the Linux user experience that need filled with good competent software that isn't a maze of checkboxes and sad UI/UX. And if Linux isn't your bag, well, fucking learn some of that then. When I'm not a programmer, I'm a Linux server administrator, because when one don't pay the bills, the other one will.
But my stone cold honest advice: Live. Live well.
I could code at 17, but I focused on school until I graduated. Then I got a job doing freelance game development when I was 18. Paid better than stacking shelves at the local grocery store and I was learning.
I don't do game development now, I'm in my late 20s and run my own software development business. But I don't drink (never have), never drove a car like an idiot (I even have a motorcycle license and never rode a bike like an idiot). I went to Amsterdam and tried weed, as an adult, good luck doing it when you're 17.
I'm married, have hobbies, play sports, play guitar, whatever. But those are my personal interests, and my personal choices, everyone is different. Clearly the OP came to Hacker News asking for programming career advice, not advice on how to live his life.
So my advice is, find something programming related that you're interested in. Teach yourself, post some stuff to Github and then find some work in that area once you've got proof you can do it. Manage your expectations, don't expect to be paid well, expect resistance from ageist co-workers, but also respect them because there's always room to learn.
Those early friendships and social contacts are extremely useful in later adulthood. Be it support, advice, whatever. They're also a great gateway into meeting more people in an unguarded setting, like a dinner party. It's easy to make friends when you have friends, it's much harder when you don't know anybody.
The greatest advantages of being a teenager are the free time, possibilities, and lack of responsibility. There are hobbies I had in my youth that I literally could not pull off with a wife and child. I don't care how understanding and loving my wife is, me deciding I'm going to take off for two weeks to hitchhike across Europe by leaving a short note is not going to fly.
Sports, guitar, motorcycles... they're not teen hobbies, they're shit adults to do feel like we're still alive. To feel the way teens feel lying in the grass on a warm day and not giving a damn.
Thank you.
Kids will force you into having less friends but the friends or family that remain will be closer plus kids will force you into social situations. In your 20s you can give trust more freely because you have less to lose but when you involve kids the trust and closeness requirements increase so the circle decreases.
I think the desire for a lot of friends goes down as well the older you get as well.
Perhaps the problem here is that there are two groups of people, those who feel like they're aren't alive and do things to try and feel like they are, and those who don't need to lie to themselves to feel better.
I understand what you're saying in your post above, but I think it's wrong, personally. I know many people now who followed that route and their lives suck now because they didn't invest in themselves early on.
Sure, you have some cool memories, I have some cool memories too, but when I sit here, with my one-year old son asleep upstairs, my dinner cooking away in the oven, it's not the past that my mind is drawn to, it's the future. I think about what the next year will hold, what the next five years will hold, and what we'll do in a decade. I don't sit here thinking back to the summer days I spent out underage drinking with friends, those memories are slowly disappearing one by one as I live my life, but I do remember the time I spent working on projects, exciting work, responsibility free work, starting my own business at 18 was better than drinking in the sun and waking up feeling like death still dressed in a corner of a mates kitchen.
You can spend your teenage years living it to the max, and when you come to the end of the line, you can derail and find yourself stuck in the shit, or, you can start to invest in yourself early on, while you don't have a wife & child, while you don't have meetings to attend, clients to keep happy, and bills to pay. While your brain is still fertile and you pick things up at twice the rate you will in your 20s and 30s.
"Have fun" is exactly the advice we should be giving OP, but telling him what fun is, that's not how it works.
So OP, have fun, in whatever you choose to do. Don't stop enjoying life, for in every circumstance, there are things that can bring you joy.
Programming wise, practise. Practise practise practise.
Start a project. Make a game. Commit every day for a year. Interact with other developers in a field you enjoy. And don't be afraid to fail.
Twenty years later, I don't really remember the parties, I don't recall the code, or the late nights out... but I still cherish the friendships I made. I can trace 90% of my career to people I met, who introduced me to others, who introduced me to others. You can't make those connections at 40 or 50, you can always learn another language then. The world is full of coders who have horrible jobs, because they are poor at interpersonal relations. They're a skill like any other, and 17 is a perfect age to work on them.
I had to endure few shitty jobs because of lack of connections but that got fixed when I eventually did make good ones. And that happened without any deliberate effort. I can't comment on the importance of working on inter-personal skills but in my experience, being stressful about it doesn't help.
If I were 17, I would've focused less on my programming career, and more on life itself.
But that's the rub. No take backs. No retrys, no continues, no replays, no New Game+.
So I feel the best I can do, if they're asking, and I've been there, is to tell it how it is in my heart.
But I always recommend people travel internationally in their 20s. Sure you can do it when you’re older. And it is still amazing.
But there is something about traveling in your youth that can’t be captured later in life.
If someone is only "looking at stuff and eating" as they explore the world, then they have given up on exploring themselves (maybe temporarily, maybe permanently). There is plenty of opportunity and reward for growing ("exploring oneself") when you're older, and choosing not to is simply the path of least resistance that many/most people seem to take.
Lots of younger people seem to think that the spirit of life starts to die after some age (30?) or life event (having kids?), but based on people I know who have passed these milestones, that is completely not a fait accompli. Quite the contrary.
If you don't want to smoke weed, drink/party, chase girls, play in a band, that's fine, but be absolutely sure you don't want to. And you probably never will feel absolutely sure; so just go do them anyway - that is the only way to know. A 17 year-old running around, drinking, partying, speeding, chasing girl after girl, acting awkward, etc. makes a lot more sense than a guy in his forties or thirties doing those things. You'll build social skills and have a lot of fun in the process. Of course you can still do these things as you get older, but it won't feel right. You'll feel immature and lagging behind, at least I feel that way.
People treat and perceive you differently as you age. The most valuable thing about Youth is the degree and amount of social and romantic opportunities available to you. Take advantage of them.
To the OP: if you don’t like becoming an average older person, avoid following average older people’s advice. Think for yourself.
This profession, more than any other I think, can allow you to disappear from society chasing knowledge for its own sake and it's pretty easy to wind up 30 with a fat stack of cash and glowing career but no friends, no family and no way to efficiently bootstrap any change.
This was definitely my mindset at 17 (and today).
And there is compounding impacts for seemingly trivial decisions you make at 17. They are more important, not less, than the future decisions on that factor.
Also, I hate to point out that 17 isn’t that young. That some people in the thread are so underestimating of 17-year-old capabilities is disappointing.
They really need to make Alan Partridge does Silicon Valley.
There's a long-lasting joy in creating something and sometimes, for some people, it might be mightier than any crazy party would give.
I'll never forget the wonder I felt, the joy, the prospect.
Not all teens enjoy what is described in the first paragraph. So if it is not your cup of tea, then don’t be afraid to be true to yourself. If living well for you means spending time in your basement in front of your monitor, reading books, barely interacting with other people, then just do that. Don’t try to fit yourself in something that you are not.
Regarding coding, my advice is find an interesting project and code it in as much languages as possible. C, Java, some Lisp, Erlang, Ocaml, Haskell and Scala.
Even then, for 90% of the people there far more obligations >30 (partner, kids, mortgage, work, etc.). When you are young you are much more agile, enjoying that is good advice, or you might be 40 and missing the life that you never had. Of course, you can enjoy the freedom in many different ways - if you are into programming and free software, go to FLOSS conferences, meet people, hack together, enjoy dinner together, etc.
I started programming when I was 10 or so and was reasonably good at it when I was 17 (as good as a kid without Internet, Turbo Pascal, and a couple of library books can be). Even though I ended up in computational linguistics, I feel blessed that I got fed up with programming when I was 18, and decided to study philosophy. It was mind-expanding and lot of fun. I ended up in CS/CL, but much more energized when I would've dived into CS immediately after high school. Of course, the low tuition fees in Europe allow you to make some detours ;).
At any rate: find a nice project and find other nice/smart people to hang out with.
I've never understood this. How can you miss something you never had? Is it that people regret not doing something? Everybody has regrets, but I'd regret losing everything I have now more than I'll ever regret not having done something in my childhood.
How about instead you balance out doing what you want and doing what's required to reach your goals, at all times?
I'm a bit surprised that so many commenters here are reacting to the second paragraph as if it described an extreme lifestyle that would inevitably lead to ruin, or as if you need to make a choice between having these kinds of experiences and being a successful, fulfilled adult later in life. Neither of those things are true.
Here's what I believe the parent post is saying, but stated differently: try all the things that life has to offer, and get outside your comfort zone. Let yourself make mistakes. Explore. Try to connect with many different kinds of people, especially people who aren't like you. Push the boundaries a little. When you find something you're passionate about, dive in, but be sure to come up for air regularly and enjoy the simple pleasures of life.
Don't let the anxieties or negativity of others stop you. If you do those things, I promise you you won't regret it.
I have a slightly different twist on the same advice. Living well doesn't necessarily need to be the "cool" stuff such as described above. Nerdy things can be cool too. Learn math, or physics, or electronics. Studying those things was "living well" for me. It could expand your options for what you can do with programming, or for when you get bored with it.
I did go out drinking sometimes and it was fun but living it up depends on your personality and if you are not naturally social its probably not going to be enjoyable pretending to be that guy. Plus at 17 everyone will see through it and not be polite about it.
I don't regret studying hard at 17. I had a passion and enjoyed learning. Was a great part of my life when other things were not so great.
OP, don't listen to this crap here's the stuff I wish I'd done four years ago:
- Look at real systems in the wild and ask yourself "Could I build that?", if the answer is no figure out how to and try it. I mean websites, command line tools, applications. Once you start looking at the world of computing through this lens and thinking about it you realize just how much you still don't know.
- Focus on the CS fundamentals, look up the algorithms textbooks employers will have expected you to read during college and get a start on them early. The fundamentals change much slower than the latest web framework, and if you master them you'll be employable for much longer than someone who only has a long string of obsolete web frameworks to their name in 20 years.
- If you have any hobbies you'd like to pursue, find a good book on them and do it now because you're actually not going to have all that much time later. Especially if you're pushing yourself and pursuing projects, secondary things you want to learn will start falling by the wayside. I still haven't found the time to learn piano.
- The world really is full of interesting problems to fix. Here's some advice on spotting them: http://www.jdpressman.com/2017/08/28/the-favored-mindset.htm...
- Figure out what you really want as early as possible, and I don't mean "from your career" or whatever. I mean what you want period. Lots of people say they 'just want to be happy' because that's a default trope, but if you really just want to be happy your best bet is to become a Buddhist monk. You have to think beyond such things if you're really going to find a coherent self identity.
Some stuff I did do four years ago and would be hurting if I hadn't:
- Figure out how to reliably have a great conversation with people. Carnegie's famous How To Win Friends And Influence People will get you most of the way there. This is a skill you'll use every day of your life just about, and it'll really help you get towards some of that living the parent insists is vital.
- Start trying to meet people outside of your traditional high school friend group. Unless your high school is truly elite, whoever your friends are there are probably kind of stunted and ineffectual compared to the people you can meet out in the 'real world'. Pay some mind towards how much others can help you, but people who base their entire social life around that I'd think live sad cynical lives.
- Don't get lazy, keep pushing the limits of what you're capable of. In order to learn you always need to be just a little bit outside your comfort zone. If you always stay within what you know you're capable of you won't learn.
I won't disagree that the most important thing is to enjoy life, meet people who have real problems that need solving, and to build relationships that could last a lifetime.
That said, I spent a lot of time on the computer when I was 17 (and 18, 19, ....). I still draw upon that experience today. Sometimes, when I solve a problem or fix a bug, it's rooted in something I did way back when I was 17.
On the other hand, I also wasted a lot of time too.
My advice is to get close to a real problem. Intern somewhere. Do it for free. Get close to real work, roll up your sleeves, and try to contribute. And have fun.
If you are being paid, they very might well ask you to fetch lunch and dry cleaning. And, since you're being paid, you feel obligated to comply. Many interns have that unfortunate experience.
If you're not being paid, then you just say no thanks, I'll go home instead.
The fact that you are asking the question tells me you are on the right path. Keep learning and honing your skills. If college is in your path, use it to get better at fundamentals.
Don't just code. Learn the fundamentals of software engineering.
The first question is: how do you know you can code at a 'relatively high level'? Don't be surprised to learn that you still have a lot to learn (actually, there is always more to learn, get used to it) For example, from the small amount of code on the github, I see no documentation or tests. Also javascript and python are fine, but they are only a beginning. The best education you can get, before you go to college(!), would be to join an open source project and try to contribute. The feedback you get may be brutal, so choose a project you can care about and that is well structured for newbies (look for projects that include specific provisions for new contributors like a 'graded' bug list that have a category for easy fixes waiting to be done). Start looking at the code so you develop the skill of reading and understanding OTHER peoples' code and then fix a few bugs and submit them for review. You will learn more in a month this way than you will in a year on your own.
Coding is very different as soon as you start working with other people, whether they are other developers, customers, bosses, etc. The best way to learn those other skills is before there is money involved.
If you really want to take on projects, look for volunteer organizations in your area that might want help with their websites. They often have at least small budgets and might be able to pay you something for that help. Even your high school IT department might need some help. Ask! Does your high school get any sponsorship from area companies for things like tech or robots? Contact those companies and see if they have any needs.
Good luck!
OP, some helpful resources for your first PR(s):
2) Learn another language
3) The normal pipeline is HS-> College -> Entry level corporate job -> change jobs -> slightly better corporate job -> change job -> ... -> senior programmer in a corporate setting.... I'm at the end of this pipeline, and it pays the bills but its not that great...
How to get out of the pipeline? Make money in a non-standard way: start a tiny business, make money in the stock market, or day trade crypto, or sell t-shirts, or make an iPhone app, or start a newsletter, anything... apply your mind to making money in a different way, because the alternative is the a boring corporate pipeline. Most successful entrepreneurs start their first business around your age, which usually doesn't succeed but they learn the skills to make a better business the next time around... and keep leveling up.
4) Also if you are going to go to college, learn from my mistake... I went to college in Madison, WI, but its a transitory school (few people stay in Madison after college), so my network of people all moved away... If you know you want to work in NYC, then go to college in NYC because when you graduate you can leverage all those connections because they will probably still be in town and not all move away.
5) If you are in the US and going to take SAT/ACT study / or take a prep class and plan on acing the things. High score can result in entrance to the best school and/or tremendous savings in terms of scholarships
Also, at 17, you're likely to think you are way better at programming than you actually are. A high quality CS program will quickly disabuse you of that notion, thus allowing you to get better.
And like many others have said, of course, still have fun along the way.
At 17, I thought I was a brilliant programmer.
Twenty years later, I think I'm finally pretty competent, and I realize how embarrassingly little 17-year-old me actually knew.
This, in a nutshell is the problem with investing your youth in coding. There is more to life than optimizing your potential as a producer so you can optimize your potential as a consumer. I, too, am at the end of this pipeline. There are worse places, but explore your options first.
If you want quality life advice, look elsewhere. More generally, don't look for it in any narrow community where most people are still young. Being young doesn't preclude wisdom but being young and narrowly focused doesn't improve your odds of finding it.
If I were starting over I would spend more time understanding my goals and values, work harder at building deeper social bonds, and invest more in caring for my mental and physical health. I think this would have made me a better person, a better parent, and even a better employee.
Do sports! One that doesn't involve hitting your head on stuff. Read some of the philosophy greats. Appreciate art at museums. Go to social events like school ski trips, meet friends and ladies (or guys if that's your thing). Make a couple minor bad decisions so you know how to handle the consequences. Go to concerts. Show your parents gratitude if they've done a lot for you (protip: they have). Don't take these years for granted.
You can be a successful coder and still have time for these things. Don't railroad yourself into workaholism, maintain a healthy balance. It'll do you good!
My fiancé and I were ski bums and travelers through most of our 20’s. We are “behind” now, most of our friends have houses and kids (we are currently in our mid 30’s).
However, we’ve had experiences that you just can’t have when you’re older. Youth hostels and college bars become a bit uncomfortable as you get older. Hangovers get worse with age. You lose the energy later to party til 6 in the morning and trust me, you want to know that you’ve “been there done that” rather than always wonder if you would have liked it.
Play sports too. Team sports. It will be a way to meet people (outside of work) if you ever find yourself moving for a job. Sports also get harder as you age. You end up with more injuries and take longer to heal. Easier to learn when you’re young and made of rubber.
Finally, don’t get caught up in financials if you are thinking about a family. Do that while you’re still young (maybe mid to late 20s?). It becomes harder and harder to have kids as you get older.
If you’re introverted like I am, you’ll be happy that you forced yourself to get out of your comfort zone.
I’m not saying don’t code. I’m just saying strike a balance that works for you. That job title may not be as gratifying as you think.
You can study a ton and learn all the algorithms in the world but you have a lot easier time learning on the job in a position where you wouldn’t need them. If you’re still in high school ask if they have any local business connections that might need your assistance. I did mostly websites but I also never turned down general it help for people that had a computer that didn’t work right. I also did real invoicing and tried to treat it as a business.
In general I think you are on the right track -- you need to find some way to validate your skills when it comes to programming. That might take a few projects. It is also likely that the first clients don't care about the technical details as long as the thing works. It might feel like the people don't appreciate your skills, but as long as you are actually enjoying what you do, you shouldn't be worried (this also applies to the 'wtf go be young advice'). Better clients (or companies to which you interview to) will be able to understand you later on.
How would you recommend finding them then?
When I was younger, I used to think: "Wow, I want to create the next Facebook." I was envious. Thinking like that set me back and I was just trying to create a "mimic" of Facebook. "Everyone is going to use my product because it will be so much better." False.
It's not that you can't build something better, but don't try to be the next Facebook or the next Google or the next Twitter or the next... anything. They are huge and established. To try and "break the public" out of using these is almost impossible.
Create something different. Start on small projects so you can learn. Just start creating small useful apps that you and your friends and family can use. Practice and get good at what you do.
Just a few examples of some projects that I've worked on in the past that are now live and in the wild... https://mypost.io and https://scamshare.com
I've got at least a half dozen more projects in the works. It seems with each product I release, I'm learning and it is often well received. Unpredictably, MyPost.io became very popular in Russia. ScamShare received 21,000 visitors in about 2 weeks. I mean.. nothing to brag about, but its just getting used to some exposure and seeing what things I can create that people can use and enjoy.
My next few apps that are being released will be subscription-based.
Anyways, get comfortable with creating stuff and learning about what people like. Learn how to develop your own personality and style of your UI.
Eventually, there are two ways you can go:
1) Work for someone. 2) Work for yourself and your clients.
I'd suggest after you graduate, go work for someone for a few years. Learn how business work. See that world for a while. Then if you get tired of it, start thinking about going into business for yourself.
Also, don't forget to be young and get out there in the world. You'll have your whole life to spend behind a computer screen and being part of the world gives you a greater understanding of the roles your skills can play in it.
But also keep a balance and do things you can't do when you are in your 30s. Get physically active in some fun sports, learn how to compete and make friends. Date, a lot, and learn how to have conversations, flirt, and just hang out.
Make mistakes, they are cheaper to correct at your age.
The best thing, as a young person that likes to program, is that you can feasibly code and travel around. So do that. If you are intimidated, start small and just drive to different cafes in your city, or go to different cities. Then find a way to move to another city, even for a few weeks. Tourism is boring, but living other places is awesome. Then think about going to a different country, see the world, but also develop yourself professionally.
Ignore those that tell you to dope up and tune out, that's an absolutely shitty way to spend your young years.
No, no they're not. The "be stupid early" plan is a major fail IRL. The idea that society will forgive you for it is proven wrong every day. When employers look for anything to disqualify you, that old FB post with you being stupid is made to order, or the arrest for DUI, or any of those early mistakes, are very handy. It's actually much harder to overcome early stupidity than it ever was in the past because the internet remembers.
The math of compound interest applies to a lot of things beyond your bank account. The earlier you learn the basics of something, the earlier you start doing a hobby, the earlier you start collecting RL 'achievement earned' points, the faster they will grow in later years. I would argue that THAT is the way to invest the freedom of youth. Try a hobby or learn something to see if you like it. THAT's ideal to do when you can easily move on to something else while those choices are entirely up to you. You will move on to college and a career with much more confidence that the path you are on is one you really want. YOLO is true. Why would you want to waste any of it?
I also want to call BS on the 'life ends at 30' advice here. You really think traveling is best when you have no money or skills? BS. You think no one >30 is physically active? More BS.
The "make mistakes" isn't, "do drugs and get STDs and fuck up your life!", it is "try things that you might not like" or "date two women at once" or any variety of "mistakes" that people are afraid of doing at that age.
Also, life doesn't end at 30, quite the opposite. I love being my age (well over 30!) and am very physically active. But traveling is a hell of a lot easier when young, because you don't have kids and bills and pets and all the other things that are great later in life (well, not the bills, but the things you get for paying those bills), but make floating around difficult.
And there's no way to compare the physicality of someone in their 20s with someone in their 40s. If you think so, you were not physically active in a significant way in one of those two ages brackets. I could play soccer for hours in my 20s, but I had to finally give it up at 45 because it's just too hard on the body.
I also don't think "make mistakes" and "try new things" are equivalent. Especially in the context of the lovely set of 'mistakes' advised in quite a few other posts in the thread.
Based on your followup, what you meant, is, unfortunately, not what you actually wrote. Nuance is important.
I was into C++ and C. I didn't rely on any toolkits. I wrote my own GUI (Windows, buttons, Sprites, event handling, renderer, physics and threading (although threading was a complete failure). I tried to re-create the Legend Of Zelda with just my own tools.
I still have all of this code from back then even. I should dust it off.
My advice: really learn your language, exploit it, learn another one. Try to write the same project in 2 different languages. Don't settle for what the OS has to offer. Try and create your own classes of functionality. Eat good, get outside, enjoy your friends and get ready for college.
But probably do when you start actually writing real applications that people are going to use, that aren't just games or toys. Don't be that hotshot developer that creates yet another GUI toolkit ignoring accessibility (for screen readers and the like).
I would also highly recommend you avoid listening to bullshit life advice encouraging you to “live” by being crazy, partying, traveling, learning instruments, or anything else that seems like it belongs in a shitty coming of age movie. I have been at my happiest when I am doing what I love (coding and creating). I have also found that putting effort into quality relationships has been worth the effort.
Video games that are not in some sense a social bonding with your friends may amount to very little. To take the context out of video games, I know one person who spent countless hours on pool (billiards) and regrets it, and another who spent his whole 20's upgrading cars and more or less regrets it (as it robbed him of enormous amounts of time that he could have spent with family/friends and also a bottomless money-pit).
Don't feel like you have to be hanging out in beaches/bars/clubs to have a good time. Some people really like being in forests, chopping wood, taking care of chickens, making food, etc.
Use social media like Facebook only as a means of keeping in touch (think of it as a system of open letters) and for finding your people (the people who care deeply about the things you care about).
Answer enough questions on stackoverflow and you'll get job/book offers.
You gain nothing from being shy. Really. Talk to everyone around you.
Whatever you do, go to a somehow bigger company, make an internship and work besides school or whatever you do with 17.
I was in your age, i thought i'm really good, i was not bad and a quick learner but still had to learn a lot. And yes i wrote code in c++, Java, Javascript and PHP at that age and there is still a good way to go for you.
Now, if you must spend your time coding, don't do Upwork, don't do freelance. Instead, solve problems for people who don't realize they had problems to solve. Talk to your friends, parents, grandparents, find out what bugs them in their day to day life. Observe what they do and think of how they could optimize it.
Help them by creating tools to solve their problems. That's what programming is - telling computers how to help us solve problems. To code isn't the goal, the solution is. If you figure that out, figure out some skills in that area, you're ahead of 95% of the people coming out of CS schools who still think the point of their 4 years degree is to optimize a sort routine.
That said: Don't go into serious debt to do it, and try to get into the best school you can. Perhaps even consider going abroad (Germany has many programs in English, for example.) Approach it as a learning experience, not as a credential.
I threw my resume out there and eventually landed a paid internship. I realized that I don't want to code for other people. The cool part about coding for me was that I could make anything I wanted, but when you're working you're stuck implementing someone else's vision.
My advice is to hire yourself. Start selling apps or whatever, but don't sweat it too much. You're at the age where you're allowed to do stupid shit and get away with it, so just enjoy it while you can.
- Writing code that works is only the first step.
- Writing code that works and is written in such a way that other people can understand it and maintain it takes a lot longer.
- Treat "yourself in 6 months" as another person because you WILL NOT remember why you wrote it the way you did. This goes way beyond just writing good comments and documentation.
- Coding for your self is how you get hooked. Coding for other people is how you get booked (paid). These are NOT mutually exclusive and there is a delicate balance.
On the subject of getting hired:
- Writing code that works is the bare minimum. It will make you hire-able but it won't get you hired. At least 50% of the other people applying for the job can probably code better than you.
- There is ALWAYS somebody better than you and that's okay :)
- I'd much rather have someone whose code isn't as good but is better in a team. Again, there is a balance.
- Good interviewers will look for people who can work in a team. Frankly, this only comes from experience working with other people. Contributing to OSS is a great way to show you can work with others' code.
So, kind-of-open secret about requirements listed in job descriptions: they're bullshit. Not meeting them is an excuse for folks to throw away resumes if they need to, but with the job market like it is, they often don't need to.
If you can code, it just means that your response rate is something like 2% instead of 4% or whatever. If you want a programming job and you're okay with the least-effort option of web dev, slap together a web app of some sort in a week or two, put it on github, and send out a hundred resumes or so. I'd be astounded if you didn't get at least a couple of phone calls.
Worst case you're out some time. A decent backup option is to attend the best CS school you can get into for as little time as it takes to get an internship/coop/cofounder and then drop out.
Also, read tech news to get the latest technology trend and what's hot in the area*Can read from http://www.pxlet.com). At this age, gain experience and build a strong foundation is the most important thing.
Then involve in open source projects by starting to read their source code and use them and submit patches and then you can get sense on how frameworks are developed and maintained.
Once you get the experience, it should be easy for you to get an ideal job. Don't rush before you get ready.
You're going to have to scrape by for a bit to earn the right to a good job, so be humble and try to work you way up from something that may seem below your talents. If your quality of work shows that you are competent and hard-working, doors will eventually open up for you. Don't ever act entitled; always turn the other cheek. Be consistent and persistent. Good luck!
Vastly more beneficial to you to contribute to OSS in my view. Nobody will really care how old you are (they'll only know if you tell them, or make it obvious in your profile) - you'll be judged only on your contribution.
The experience, both for yourself and your CV, will be worth far more than some menial task set by whoever hires you. Bear in mind that anybody who does, short of some sort of family/friend connection, either can't get or can't afford an undergraduate intern.
I thought that when I was 17, and I was proven laughably wrong when I started university and learnt how to program properly.
Then once again I thought I was pretty good at programming and went in to industry - and once again I found my skills were nowhere near as good as I thought them to be.
My advice is to put aside notions that you are good and always be looking to improve and learn.
> but generally people aren't willing to hire a 17-year-old
Who needs to know that you're 17? If you have a good enough portfolio it will speak for itself.
_This_ guy gets it.
IMO before you have years of work experience, on a job, you’ll learn useful stuff much faster that you’re able to do by yourself or by participating in open source projects.
One reason is motivation: salary, boss, peer pressure.
Another reason, as an inexperienced programmer, on your first jobs you’ll be surrounded by people with much more experienced then you have. For me, the equation has changed after a ~decade in the profession. Before I got that experience however, I was lucky to work with very nice people much smarter than I was. I have learned a lot from them, probably more than a half of what I know to do now.
Select these first employers carefully. Don’t focus on salary. You don’t want to work in a large company where the software is not the core business. Prefer small to medium companies (not necessarily startups, 10-50 people are still OK). Prefer companies where the software (or hardware running that) is their core business. Prefer companies who do some R&D, not just coding. Prefer companies who do what you’d like to do.
Don’t afraid to switch jobs. Especially switch into different fields/platforms/languages.
Good luck.
P.S. I’m much older then you are, and I’m well outside US. Because of that, take my advice with a grain of salt: I’m not sure how well that applies to your environment. But for me I think it worked more or less OK.
- ditch "gaming" as a hobby. Its a lot of fun but you'll regret most of the time you spent later on. Go create more stuff instead...
- think about the "business side" of software too, not just the technical part. There are more ways to make money than you know / can think of! (I was surrounded with loads of crappy share- and freeware tools where people were still making a living of. I did not realize this and skipped a lot of opportunities.)
- stop "coding" in VisualBasic ;-) try other languages (However, if you just want to quickly get something live, use what you know best already)
- Keep your eyes open for new emerging platforms and technology which pop up every century or so... and get onboard early on to understand the dynamics, play around, try your ideas. You'll have a first mover advantage for ~1-2 years and can get away with almost any not-too-perfect-solution because there is nothing else solving it right now. (Think the Internet, think cheap web hosting, think online gaming, think iPhone / AppStore & Smartphones in general, then Android, then xxx, ...
- Whatever projects you start. Make a commitment to yourself to launch them all. At least a version 0.0.0.1 .. ´. Nothing wrong with a crappy and dead tool or website which is not supported since years - but everything wrong with a private repository and an un-launched 99% ready software/webstie where you spent countless of your life-hours on! Launch everything!
- Oh yes, and just try ALL your crazy ideas too. You have nothing to loose. Just do them!
The challenge is that (at least in the U.S), you can't consent to contracts until you're 18. This is legally problematic for most organizations; corporations rely on contracts for things like confidentially agreements, intellectual property, payment of wages, etc, and having someone who hasn't signed these contracts working on this can muck things up. You might be able to find small organizations that just don't care, or large organizations that can silo you off and have you work on some throwaway projects, though. When I was your age it was the thick of the dot-com boom and there were a bunch of small local businesses or community newspapers that needed websites done. It's a different time now, but that same customer base might be similarly willing to have a teenager do some work for them.
This is not quite true. You can enter into a contract at any age. However, if you are under 18, the contract is voidable by you (voiding a contract -> neither party is bound by it any longer). It is not voidable by the other party.
So it's not that you can't enter into a contract, it's that this is risky for the business, because you are not bound to honor it.
Source: I took a business law course in the spring. Obligatory: I am not a lawyer and this is not legal advice.
Don’t worry about getting a coding job yet. You should build your own personal projects as much as possible while you are still unhireable for reasons you don’t control (age). Doing your own projects will help you learn how to structure large things. See how big of a program you can get to before the code starts to feel like shit. The more you practice, the better you’ll get at structuring code in a way that allows you to grow it a lot. This is a skill you can practice, and you should do that now to maximize your competitive advantage once you can work.
Apply Computational Thinking to solving a given problem. Break it down into completeable tasks.
You can work on multiple canvasses at once: sometimes it's helpful to let things simmer on the back burner while you're taking care of business. Just don't spread yourself too thin: everyone deserves your time.
Remember ERG theory (and Maslow's Hierarchy). Health and food and shelter are obviously important.
Keep lists of good ideas. Notecards, git, a nice fresh blank sheet of paper for the #someday folder. What to call it isn't important yet. "Thing1" and "Thing2".
You can spend time developing a portfolio, building up your skills, and continuing education. You can also solve a problem now.
You don't need a co-founder at first. You do need to plan to be part of a team: other people are good at other things; and that's the part they most enjoy doing.
I lean towards comments suggesting to think about college and continue honing programming skills.
When you are young, you haven’t seen what’s out there yet. College is the stepping stone towards that. If you don’t know what’s out there, how can you know how to build something that’s useful?
Also, practicing programming doesn’t have to be boring. In my teen:
* I wrote fortune telling CLI app to impress girls.
* Hacked infinite money on my SimCity and Dune 2 save games using hexadecimal editor.
* Pranking a friend by asking him to download an agent that control his cd rom tray (for haloween purpose)
* Wrote a bunch of excel functions for soccer gambling.
So I guess, long story short, life should be fun, but that doesn’t stop you from being a kick ass in programming.
Don’t worry too much about CV or portfolio. If you are good, you will have plenty of time doing that already in college.
It's something I understand as an adult coder, but it's not my normal way of thinking and I think that kind of a switch changes you.
2.) If you do own project, do something small. It is enough to learn technology and ability to come up with vision is different skill then coding. Technical demos or community challenges are fine for portfolio.
2.) The best way to find first job is through people you know. Yes, it is unfair, yes it requires social skills, but it is what it is. Go to meetups in your area even if they are about technology you don't care about. Talk with people and mostly listen to what they say. Something may get out of it.
Also some of the comments here suggest socializing. Personally I'm not a very social person, when I get home from school I really just want to be left alone. I just want to say that if socializing is your thing, then go for it, but if it's not, don't feel that you are being pressured into it.
2a) build up a portfolio of programming stuff to show you can program
2b) that portfolio should also demonstrate polite professional communication skills. People discriminate against age (both too young and too old). They shouldn't, but this portfolio might help.
3) Get hold of any of these books, and implement the examples in a modern language.
Computers, Pattern, Chaos, and Beauty by Clifford Pickover (anything in this would be a good ShowHN, especially if you put it on a website with interactive sliders) (it's available as a download somewhere)
Any of the A K Dewdney books eg The Armchair Universe or The Magic Machine.
Build something and charge for it.
Code a lot. Understand non-blocking I/O, memory management, parallelism.
Learn everything about networking you possibly can. At every level.
Hone that skill set over a few years and you’ll be invaluable.
My advice would be to practice, practice practice. Think about an app you would like to build that's quite ambitious (maybe involving an Android app, iPhone app, Alexa Skill, Web App, realtime communication between them etc) and try and build the entire thing yourself. Get it onto the various app stores and try and get people to actually use it.
You'll learn loads and hit lots of stumbling blocks along the way, and you might even make some money out of it!
You can reg a domain name and have your own project or idea/app/affiliate/Adsense site up and running for next to nothing, except your own time.
Similarly, you can build a small Windows or Mac app, a little $10 utility or tool.
I don’t think an OS related portfolio is needed at all, actually.
I personally would start in that way, as you are in full control then in what you do. It could be something sustainable you build, make money with and looks good in your portfolio while doing so!
I strongly believe early adulthood is about getting you laid. Not Tinder style, but have to go hang out with others and meet people style. I’m 51 now, and three of my best friends are people whom I met before I was 20 while on the prowl for beautiful women. And those guys are pure gold. Life sure is different now, being married and having a daughter but those guys, only one being a family man, are still there and our friendships are as strong as ever.
So that’s part of what I did. The other part of what I did, I got a job being paid to code, well, actually paid to learn to code. I thought I was hot shit but the guild of ex-rocket scientists and other smart people I ended up with taught me a lot. So, how did I find that job? I met my best friend’s girlfriend’s dad who gave me that job. Yes, the pursuit of getting laid found me and my friend at her house, hungover one Saturday morning when I met him.
So maybe getting laid isn’t your thing. But get your ass out there and start meeting people and spending some time with them. Don’t be a walking banner ad of “I’m a coder”. Get to know people and let that disclosure happen naturally. Most people really enjoy helping their friends, and someone will make a connection for you.
While you're young and don't have crucial responsibilities like earning money, you can spend your time however you want and not be pressured into doing anything in particular.
That means you can try a lot of things and make a lot of mistakes without worrying. You get a lot uf unbroken time to focus on one project if you want - find a problem that interests you and figure out the hell out of it. In all likelihood, it won't pay off immediately, but you will learn a lot and that will help long-term. Or, dip your feet into a lot of different things until you find something you're passionate about.
This is actually general advice. People don't think much of the young, so you can do many things you're "not supposed to do" later, i.e. get in trouble with few consequences.
Perhaps this isn't an answer about how to gain traction as a coder. While I'm not an authority, contributing to Free Software helped me immensely. Find a project with contributors from large companies and spend a few months asking questions and helping out. You will make useful connections and will stand out for recruiters.
Contributing to open source is an admirable goal, but it's definitely a nice-to-have rather than a must. You have a Github portfolio, so build that out.
Instead of picking some random project to help out, decide you like doing and fix what annoys you. I use OpenCV every day and my first open source PR (ever) was a documentation update, because something was poorly explained. The next one was a fix for some function that wasn't consistent with the rest of the codebase. These are very minor things, but I was personally invested in fixing them.
However here's my advice right now: if you want money, find work locally. Ask around people you know, odds are you know someone who needs a website. Go around ask local companies (like, within a mile of where you live) if they have any jobs that need doing. Pull on your networking strings, don't prostitute yourself to freelancing websites.
Don't limit yourself to advertised schemes. I have a physicist friend who emailed a random startup in Berlin that she liked (she lived in the UK at the time) and just asked if she could do some work for them, they said yes.
Also you have a lifetime of coding ahead of you (if that's the career you are after), enjoy your life while you don't yet have responsibilities like mortgage and family. You may not realize it, but at your age the amount of freedom you have to do whatever you want and make mistakes is a big advantage.
The one difference (compared to 17) is that I have a lot less free time now - I wake up at 7am, I'm at work by 9:30am, leave around 5:30pm, and I'm home at 6:30pm. I end up with maybe three free hours after dinner. When I was younger I spent that time tinkering with side projects or working, while now I prioritize doing things that are fundamentally different than my day-to-day work :)
My biased opinion is -- if you don't absolutely need the money -- spend the time on fun side projects with cool technology or practice an instrument or something else fun. You'll have years and years to code 40 hours a week for money!
Seeing you code I can tell you can code but you probably cannot code anything big. Learn code patterns and software engineer. You need to learn how to design the architecture of your programs and things like integration and testing. This is why jobs ask for a CS degree. Coding is easy, solve problems is hard.
Feed your brain by reading, doing and teaching, be it coding or (preferably also) something else. Strengthen your will a bit (not too much!) by taking some obligations and responsibilities, be it financial, social or personal. Help your body work better and feel good through exercise, rest and diet. Nurture your heart with family, friends, opponents, romance, the successes and the inevitable setbacks. Understand honesty by standing up for what you believe and, because of that, losing things and people you had earned. Respect yourself and your time alone. Value others and the time you take from and give to them.
Don't let survivors talk your into taking risks you don't truly and wholeheartedly want to take yourself. Don't let anyone tell you what a life well lived means.
Having said that you have one major attribute going for you, and don't take this as a pejorative, and that's naivety. You don't know what isn't possible cos you haven't been beaten down by experience (a double edged sword).
Take that naivety, think of something crazy that floats your goat. Can you write an AI for gaming? Can you make a filesystem faster? Whatever it is, set a goal, double it (ie an AI for gaming that can beat the top 10% in the world, a filesystem 5x faster than exists today)
You'll learn something far more valuable than a coding skill... You'll learn you are capable of much much more than you ever believed.
Just don't procrastinate, think big, fail big, and beat fear.
At 17 I was also quite focused on making money doing stuff like freelancing, and I did do some, but unless you/your family have a desperate need for more money right now (I hope you don't, and I'm thankful that I didn't) then I think it's a bit pointless - freelancing/consulting is a great gig if done through the "right" channels, but doing it via Upwork (back in my day the big one was GetACoder.com) isn't particularly fulfilling imo - it's a race to the bottom in terms of money and quality, and you're competing with people outside the UK/US for whom the pay on these sites is actually alright. Making money at 17 is quite nice though and I'd probably recommend doing it for a short amount of time, just to realise that being rich for your age isn't actually that exciting.
If I were you I wouldn't worry too much about doing an internship right now, unless there's a company that you really really like. Just focus on improving your skills, and do cool stuff that you find interesting, whether that's working on open source, random website/app ideas, learning theoretical CS/maths, whatever.
Being good at coding is a great skill to have, so if you enjoy it then it's great to regularly do it and get better, but don't forget about the rest of your life - don't get too bogged down in having to do this stuff 24/7, despite all the news stories you probably hear about 17 year olds making $$$ from their [app/website/startup]. Make sure you're happy and healthy day-to-day :)
On the coding side of things, I regret not learning theory and how to do things "properly" sooner - I spent the first few years hacking together web apps semi-blindly without bothering to brush up on technical knowledge, which I think slowed me down in the long-term, so find a good balance between "learning by doing" and "learning by reading" imo.
If you lock down on some field make it an interesting one or else you might find yourself hating your job one day. University degree will give you way more options but does not guarantee any outcomes.
A good way to make money by programming is to first understand some other domain really well and then implement solutions that help there.
"Coding" means you are skilled in instructing a computer. Now, what should those instructions be? Why? Most domains worth anything are complex - intrinsically or accidentally. Hence understanding a domain is critical to become a valuable contributor.
Getting a degree is highly recommended. If you don't want to go to a full time on campus uni the University of London's International Programme is great and cheap.
To that end, there are 2 steps to getting most internships and jobs at your level.
1. Pass the initial resume to get the interview. I don't have much advice on how to do this besides being a cs undergrad with a high gpa unfortunately.
2. Pass the interview. At your level, most companies ask you to solve data structures and algorithmic problems on a whiteboard. To prepare for this, obviously read some data structure and algorithm books and then their is interview prep you can do such as cracking the code interview book and leetcode.
I'd find a company with team of devs you can learn from and work there for a few months. You'll be much more employable by the end of it.
As for finding a job, I'd suggest going to tech meetups, startups in particular will be keen on any cheap labour. Alternatively ask your family or parents friends if there is either a position at their work for you, or if they run their own business, if you can do their website.
If you end up realizing that coding is in somehow related to $$$, and that is your goal - then stop now, and proceed directly to law or finance.
edit: And oh god - do the MOST IMPORTANT THING you can as a young person: exercise! Becoming(and remaining) fit at a young age is so much easier than putting it off - and it will absolutely give you future benefits beyond your comprehension at this point in time.
I think if you walk into a small local company, and tell them what you can do and that you're interested in a summer internship. You have decent odds. A lot of people like to give back to the community. And HS interns are cheap.
Please, please, travel, and by that I don't mean doing a full a world tour. Just explore what exists outside of your surroundings. Exercise yourself to questioning. Making money is fine, and most of the time needed, but discovering what your like / loathe is as important. Talk to people, share stories, get into argument, confront yourself with other way of thinking.
Being able to code or having a nice portfolio might make you hire-able but true maturity will make you shine amongst others.
Do not undervalue skill sets outside of coding. We have hundreds of universities pumping out coders right now. Be someone else who can also code.
Further, you'll rarely solve big problem on your own. Doing the above will prep you for working in a high functioning team. Strive to put yourself in a position to work with the best. From there life will take you to the right place.
2. Build something. Anything. Many things. Don’t stop. You will find your “specialty” niche eventually and blast off from there. Here are some ideas (in some different spaces):
- an alarm clock that stops when it sees your face (computer vision)
- an easier way to search Instagram (social engineering)
- SMS mailing lists for small business owners (SMS, communications, lead gen)
- literally any idea that comes to your mind...build it just to say you did.
3. Talk about it. Be passionate. Help others. This could definitely be in the form of OSS contributions, which is great way to gain visibility in the community.
4. Specifically on generating income: since you don’t have a product built (yet), focus on consulting which can help build your reputation. Start with your current personal network, even if it’s just friends of your parents that may own a small business or maybe someone you know from your community. Before you contact them, do the research. Do they already have a site? What’s it built with? Where does their business come from? Is there a clear opportunity to tangibly improve this for them? If so - reach out. Start open minded and asking questions. Find out what they need - it may not be what you’ve identified in your research. If it is, great, you were spot on. If not, that’s fine, sell them whatever service you are confident you can help with, and take note for the next customer in that industry.
If you’re set on finding a normal job - just start applying. No need to say anything about a degree or school. Show off what you built (step 2!), express how passionate you are (step 3!!), and don’t stop until you have an offer. It will happen. I didn’t go to school and one of the first ways I figured out how to reliable get in the door was I just _started assuming responsibilities of an engineer at that company._ For example, does that company need a new website? Yeah? Then just build it. Send it to them with your resume. “Hey, notice you needed a new site. Here you go.” Depending on how well you nail their branding or what their focus is, this can leave a great impression of your passion and work ethic. I’ve skipped many interviews this way and just landed the offer straight.
YMMV.
Good luck mate!
Also it really depends on your inborn personality and predictions. My advice above is really for creative types. You might be a more conservative type and a 9-5 job for 50 years would be perfect.
Take a big 5 personality test and go from there.
I don't have much work experience, but I am employed at a global top5 tech company and the number of people around me who are miserable even with all the benefits the company provides that outsiders consider sources of happiness (above median salary, indoors swimming pool/gym, free food, onsite medical personnel [gp, dentist, therapist], flex hours) tells me that it's not entirely up to the environment.
The happiest people are the ones that seem to do whatever they feel like doing. I've also noticed that almost all of them, fit or not, go to the gym and do some sort of physical exercise.
I'm in my early 30s, and two very important things I've realised are: - Life is happening right now. Not in a year or 10. Plan ahead if you want to, but don't sacrifice so much that you're not enjoying yourself. - Nothing is black and white. Life is not a piece of code; things are not 'either 1 or 0'. Everything exists on a spectrum; everything is a shade of grey. Even the things you think are absolute truths can be inferred to be different in other circumstances.
Pink Floyd's lyrics have always resonated with me, and I guess this is one of my favourite bits:
For long you'll live and high you'll fly
And smiles you'll give and tears you'll cry
And all you touch and all you see
Is all your life will ever be
which is followed by a take on modern life and how it requires us to work at all times: Run, rabbit, run
Dig that hole, forget the sun,
And when at last the work is done
Don't sit down, it's time to dig another one
Do whatever you feel like doing, but know that with every decision you're choosing a path which is different than the one you could have taken before the decision. Sure, you can follow multiple paths and achieve more goals, but there will always be something else you could've done......and that's OK.
i know broke people who just surf or hang out all day and they sure seem happy.
i also know rich people on a mission in life, and they are very unhappy, or will constantly find something to be unhappy about, so the net effect is just never being happy.
Also: don't forget to just switch off your computer and be 17. I'm 40 and I can code as much as I want but I can't be 18...
Forget working as a developer at 17. Use your time for something better.
Finally, have an answer for your age (tell them what motivates you) but don't bring it up. You run your own business, people pay your business. If you have a trusted adult, google how to DIY forming an LLC in your state and make it official.
I have seen many unexpected setbscks in my life. the ability to create a business from nothing enabled me to overcome them all.
The main ways to get paid well or get rich and work on your terms is to run a business, trade assets or invest well.
20000 hrs of cranking out JIRA tickets loses its luster. Companies rarely invest in their employees career.
Make of this what you will
You're already on a great trajectory - so at worst you'll earn a 6 figure salary and at best you will be the next zillionaire startup founder. Don't waste your youth on HackerNews and Github.
Half go down the alternative route. They've been largely working full-time from 16, while doing a bit of college, and most of them look at their peers at work and decide that university isn't for them. They've already got a job, and the whole point of going to uni was to get the job they're already doing. A few of them move on, and they do fairly well. The problem I've found is that they're not getting paid as much as some of their peers, even if their job title is greater than their peers at a younger age. They also seem to pigeon-hole themselves into a given stack, and while they are happy to move along with that stack, they set their goals too low. Sure, it's great to be the genius kid that is working on large-scale projects at 18, but in a few years you'll just be another young developer, that is probably bored of building the same old shit for ten years when everyone else is still enthusiastic about CRUD CMS applications.
Half of the others go down the uni route, and most of them seem to be much happier, depending on how much focus they've put into their studies. I've seen some child geniuses go to shitty universities because they couldn't be arsed to study for their A Levels, but study something that legitimately interests them. One went on to study Mechanical Engineering and went back into software development. I think he interned at Microsoft during uni, and now he works at some FinTech startup in London. One of them did pretty well and ended up studying CS at Edinburgh, saying that going to uni as an already decent developer helped him relax into the environment while others were learning how to write code for their projects. I'm not sure what he's up to at the moment, but he went from a fairly stressed out kid to a happy young man, so it obviously worked out well for him!
Since you're 17, I'd think about what your dream scenario would be. Do you want to study CS? Is there something else that would interest you? Ultimately, if you want to be a coder, do you need CS? I have a CS degree, and it's helped me a ton, but I've worked with plenty of great developers that pursued other degrees. That other degree might open up other avenues for you, whether it's business or law or biology. The only real advice I'd give you is to ace your IT/CS classes at school, and focus that time elsewhere.
Stop hearing this cool open source projects stuff.
1. Be good at interviews and get 10 offers from all tech companies. 2. Work hard for 50hours per week and make sure you are getting smarter and smarter everyday.
Find where you can add value, and do it.
Then do it better.
It's both a good way to learn and accidentally stumble upon a business model.
Contribute to the (standard, maybe) library you like the most?
Ability to code is least needed commodity. Ability to fit is a better commodity. Be able to compromise if software development is your goal. Be a bussinesman if entrepreneurship is your goal. Be a politician if corporate ladder is your goal. Nobody needs coders. Besides your skills are outdated by the time you learned them. So, go sailing.
Both can go on your resume.
That right there is a major fork in the advice you can be given. If you need money - like you're going to be out on the street or at least working at Burger King after highschool if you don't find something better - your best bet is developing something that you can directly monetize as quickly as possible that doesn't take any startup capital to get going. Mobile apps were historically the go-to thing, make something simple that you can sell for $1 to a few hundred or at thousand people, repeat. You're going to have a hard time leveraging anything like open-source development into a paying career in less than the "many years" time-span. People are going to be just about as nervous about hiring a 17- or 18-year-old with no degree and 6 months open source experience as they would one without.
If you just want money, either because money is nice or because it seems like a logical next step or because you like the challenge and gratification that comes with paying work (if someone is paying you, you must actually be good, after all) or because you want to fill out your resume, you have a lot more options.
If you are a young person with means and are expected to go to college and spend the next 4-6 years learning, but you already feel like you know enough programming to get a good job if people'd give you a chance, you have a glorious opportunity before you.
From a purely practical point of view, many of us olds lament that all we know is programming, so all we want to program are programming tools. Those of us who were also math majors occasionally want to program automatic theorem-proving software or remake Matlab, which is equally non-profitable.
You, on the other hand have the opportunity to double-major in something completely different, like medicine or horticulture or hospitality or law, and learn about the sorts of software a completely different set of professions need and want, the way only an insider can. While the rest of us are writing the 17,000th text editor that will never replace emacs or vi, you can be writing the garden-management software that millions have been crying out for.
There's a lot of other skills you can learn a little bit about if you're not wasting your time taking ever variation of ever CS class offered. Many highschools, even, offer classes on skills like CAD, welding, and engine repair. If you want to take one of those when you're 30 you'll need to pay 4-10k$ to your nearest community college and find time in your work/life balance to attend the classes.
A huge number of things are going to be easier to learn over the next few years: languages, music, shorthand. You should still get the CS double-major or at least minor, since it will be the certificate you need to get the paying work, but the real opportunity before you is the chance to learn everything else. That everything else isn't just for "rounding out" or "enrichment" or "enjoying youth"; it will make you more valuable as a programmer: you aren't just learning cool things, you're learning domain knowledge for the applications you may someday write.
Generally, in a CS major you will get accounted with many great things that are the baseline of computation, I really enjoyed my time in university with intense math discussions, really good friends and lots of new experiences.
But math passion started to peak at my last semesters when knowledge started to get denser and denser. And because I decided that I wanted to work in private sector instead of academics, I knew that that knowledge in very different areas of computation will irrevocably start to fade away. I don't regret having done my major though!
Enter real life work... Well, the real thing about real life work is that you have to manage a lot of non technical issues, namely coworkers, lead tech(s) planification, discussions about what to do next, what to do with inherited mess, resolutions in those regards, etc. Being practical before being correct. And then, balance practicality with correctness through simplifying.
I started to learning how to code in 2006 but I had a part time job in web development in 2010 and roughly I could say that I have used many different technologies since then. In every team you'll be working, you always need to handle those issues (at least in my limited experience).
Now a little bit of non-requested advice: 1. Don't worry too much about tech stacks, they change over time, at varying frequencies, but a rule I have seen is that almost no library or framework endures a lot of years without major adjustments or complete overhauls. 2. In CS major I learned a few tricks about the foundations of now-a-days flashy features of new tech stacks so don't let them blind you. Experiment with due diligence (I mean, new tech inherits a lot of risk in adoption, so test thoroughly and mindfully). 3. Balance practicality with correctness (again).
Lastly, let's talk about passion. I left this point intentionally as the last thing to talk about because it's something very important to me that I started to reflect intensively lately (I'm 27 btw). CS and computation in general is a whole world by itself, you can do thing for the very sake of doing that, solving math problems, coding new features, read HN for the sole intent and joy of knowing more. But that's not the only way to view this regards. CS and computations in a wider view is just a tool for something else. A tool for creating art, creating experiences with games, creating music, preparing trips around the world, exploring worlds far apart, learning different cultures and languages, helping people in need and so on and so for. So at the end, my last non-requested advice is to experiment life in different places, with different people. I'm very passionate about languages and linguistics in general so I can say firmly that easily I could spend a decade on working something related to language / linguitics. Take deadmau5, he did CS and was passionate about doing music. Take Paul Graham, he knew was passionate about CS and art, but later in his life he turned into an enterpreneur and created Y Combinator. Take solo-devs of indie games, they enjoy computation but are passionate with games. At this age, explore as many areas as you can and hit your passion right away, even if that mean to spend some years in the finding. I recommend to you reading the conception of DuckDuckGo by Gabriel Weinberg [1].
Have a nice journey.
[1] DuckDuckGo: The Solopreneur That Is Beating Google at Its Game - https://fourweekmba.com/duckduckgo-vs-google/
Then I went to college for journalism because I found writing easier than math. Realized pretty quickly I should be in a computer science program instead, but didn't want to switch schools and the comp sci program at our school sucked hard (their intro to CS program used VB, which was great for me but bad for life). So I stuck with journalism and dabbled in Python on the side.
Fast forward four years. I was behind by a couple classes due to slacking off and failing a couple classes. On academic probation. But I've been playing a certain video game and keeping an eye on the studio's jobs page. They need customer support people. I apply. I get the job. I leave to work, my capstone and one elective left to complete my degree. I finish my capstone while working, but ignore the elective.
While working in customer support, I get fed up with some of our manual processes, so I write Python scripts to automate them. Our one tools programmer encourages me to implement the scripts in a web interface for everyone to use, so I do. People like it, so I make more. I make the case to management that it's their choice whether they want me doing the work of one CS rep or multiplying the effectiveness of all our CS staff (We have a couple years' worth of automation opportunities at this point). They see my point and put me on automation full-time.
So all that said, I'd highlight these two points (which are really two ways of saying the same thing):
1. Find opportunities where you are. Someone you know almost certainly has some problem that you could solve with software. If they have many of these problems, you might negotiate some money out of it. But more important than that, there's a lot of value in the practice of identifying and solving real-world problems rather than just doing contract programming work.
2. Think like a software engineer. By which I mean look at the world around you, identify problems, and think about how you can solve them with software. Think about the trade-offs between your various options in how to solve them as well. This, in my opinion, is the key distinction between software engineers and programmers.
Here is my story, I'm 25 and have successfully raised VC funding for an Open Source database. I also took an odd route to life, I found the woman of my dreams, bought a house together, married her, and started having kids. This may sound boring, but because we are young, we can live life fully and do crazy things - backpacking through Europe (specifically, Cinque Terre), visiting Africa, discovering house parties in Canada, doing a 30 day road trip up and down the West Coast, illegally but safely climbing radio towers, or doing rock climbing.
Never worry about society, live life fully, always give and love to people (Open Source is very important in this way). Trail blaze your own route in life, and people will come to you as the authority and want to pay you. Shoot high, so that way if you fail, at least you land on Everest. If you do what everybody else does, you won't have leverage. If you do what other people do, you won't discover something new.
So as a result: Never take advice from other people, especially me. Choose your own, and own it, this will be your most important skill in life. And especially never listen to haters.
And I can tell you are already doing it well ;) you are on top of HackerNews building your personal brand. Keep doing that, unfortunately, cleverness like that goes a lot further for career improvement than actually being incrementally better at coding. :/ Keep networking!
anythingbot, chaosbot
If you do, post it to HN, /r/javascript and /r/programming
If you want money, go to /r/personalfinance and ask for help
I would avoid making money with code. Google and Facebook are evil, period. If you try to make money with code, you deal with the devil eventually.