I'm an 18 year old developer. How do I become one of the best programmers ever?
Age 8: Started learning 3D software and CAD.
Age 16: Got a job doing CNC programming for an aerospace mold tooling company.
Age 17: Got my first web developer job.
Age 18: Got my second web developer job.
On every team I've worked with, I've always been the youngest. I learn very quickly.
I want to be one of the best programmers in the world, but I have a long way to go.
What is the best use of my time outside of work? What are some strategies for success? I want to push my limits as far as possible.
147 comments
[ 3.4 ms ] story [ 207 ms ] threadAssuming you’re on the west coast, it’s 10 PM. Take a break and relax.
I'd start there!
Even if this problem is non-technical/non-programming in nature -- by examining it in depth, it might very well lead into a set of related sub-problems where one or more of the sub-problems are technical/programming in nature!
Simple example from my own life: One "life goal" of "How do I make more money?" which is non-technical, non-programming in nature -- at one point in my life led to write software as a side-hustle.
This then (writing the software) became a sub-problem which was technical/programming in nature.
Start with your own life problems, technical or not. Break them down into sub-problems. One or more sub-problems will lead you down one or more technical/programming paths -- which in turn may lead you to more sub-sub problems!
If you love problem solving -- if you use this method -- you'll always have challenging and interesting problems in your life -- you'll never be bored!
That's because in solving one non-trivial problem -- you'll often encounter many more cross-domain sub-problems! When you encounter them, you'll need to learn more domain knowledge -- which is great motivation to study interesting and sometimes quite esoteric topics that you haven't studied before!
In other words, you'll keep learning, keep solving problems, and keep finding new problems to solve!
As far as how to best invest your time -- well, you'll figure it out!
And of course Charles Babbage, George Boole, Alan Turing, John Mauchly, J. Presper Eckert, Claude Shannon, John Von Neuman, Grace Hopper -- and the other early pioneers of computation...
In my understanding, each and every person on your list was passionate about solving some problem, extending their knowledge, sharing their learning with others. The recognition followed their contributions.
I think you have set a very noble goal for yourself; I certainly wish that you succeed in that endeavor!
But let me ask you something...
Do you really want to be the best programmer in the world?
?
What does it mean to be the best programmer in the world?
?
If you want to become the best programmer in the world because "companies like Facebook (Meta), Apple, Amazon, Netflix, Google (and Microsoft!) -- hire only the best programmers" -- then you DON'T actually want to be "the best programmer in the world" -- your goal would be to simply be hired by Facebook/Apple/Amazon/Netflix/Google/Microsoft!
That is (if that were the case!) -- getting hired by Facebook/Apple/Amazon/Netflix/Google/Microsoft -- would be the actual goal, the WHY of the goal!
You see, you'd make great progress towards your goal -- if you could better define the goal!
Let me ask you this:
WHY do you want to become one of the best programmers ever?
?
One of the best, yes.
>What does it mean to be the best programmer in the world?
I want to do incredible things. And those things don't need to include buzzwords. I want to solve big problems. I want to increase the quality of software in general, including the development experience.
I haven't really thought about working for FAANG. Money doesn't interest me. Interesting problems do.
Thank you for the high quality answer.
What about detection and treatment of various cancers; advancing the state of DNA techniques for better treatments, detection of diseases; new forms of energy storage, e.g. flow-batteries; assist conservation, e.g. detecting illegal deforestation and implementing rapid response; track and rescue endangered species; etc.
Being a good programmer is table stakes. It is your knowledge and work within a specialized domain that leads to incredible accomplishments.
Explore and enjoy the adventure.
Find a bite sized solution for something incredible but before you do, imagine ways in which it can make a return to your wallet.
Realize that these sorts of things take a very long time to discover but you will know exactly what it is when you find it if you know there is no alternative to it.
The vast majority of my interest led no where but one did lead and it was the discovery of a popular textbook written in the 1800s which happens to be popular today. I used the material for an app that was pretty successful for a number of years.
Self publishing is tricky.
Perhaps find something like a bread and butter throw together thing. It can be amazing that people have learned how to turn a server in their bedroom into a 2k per month source of cash. Then you will have total freedom to explore any avenue, no matter how unlikely it is to pull it off.
That just absolutely screams lack of experience.
If you think some software is lacking, then by all means knock yourself out and try to improve it.
If you're having issues with your 'development experience' then that's you, not the industry in general. Also development is not programming.
No, I think it shows I understand that many systems developers are forced to work with are poor design. You are misinterpreting me.
I don't blindly accept a system because everyone uses it. I understand what is happening under the hood and know it could be better.
>I want to do incredible things. And those things don't need to include buzzwords. I want to solve big problems.
OK, do you want to solve big problems solely in/with/by programming/software -- or do you wish to engage in problem solving where Programming -- is only one of many domains used to solve problems (sort of like cross-domain problem solving, where the solution to a problem may include elements of software/programming -- but also elements from other fields, including (but not limited to!) such things as Psychology, Philosophy, Business Theory, Math, Physics, Engineering, etc.) ?
>I want to increase the quality of software in general
How?
>including the development experience.
What specifically don't you like about the development experience?
?
(Note: It's OK not to like aspects of software development -- each software developer has their own specific dislikes -- I only ask this question to get more information to help me figure out exactly what you're trying to do! If I can, then maybe I can help!)
2. Program and learn more about programming constantly.
3. Working for and with idiots is not a useless experience, but it’s commonplace and repetitive. Move on when you stop learning.
4. Program and learn some more. Keep at it for 30+ years.
For best developer, I think it is good to learn a bit about each team member's role. Learn some UX design, Scrum Master, Tester, Product Owner and Database Admin. You don’t need to learn enough to be able to do their job but enough to understand how and what they work with.
Keep learning programming, more languages, you come from the web, learn some Golang, Rust, Elixir, Python, to learn different paradigms. Do some side projects about things that you are passionate about (I play Dungeons & Dragons so I have built tools and websites to help with that).
Maybe get a job at a consultancy, you get to work with different clients in different domains and learn a lot.
But as others have pointed out, don’t burn yourself out. It sucks and takes a long time to come back from. Godspeed
Learn the skills if you want. Go to school if you want. Get involved with open source projects.
But don't let it take over your whole life. By the time you're 40, nobody will really care if you're the best programmer in the world. Your friends and colleagues will have their own lives. Businesses will rise and fall. Languages will come and go. Will you still be happy?
All programmers are within an order of magnitude in ability and productivity anyway, so you can't be a "super duper smart 10x SWE".
Already, there's every indication that the OP is very capable of picking up new knowledge and technologies quickly, on their own. And HN being what it is, there will be plenty of specific domain knowledge from people who've done it longer, better, than I have (or ever could, really).
But how many of us were young and brilliant once, standing out in a sea of averages, starry-eyed with the whole world ahead of us, filled with unlimited potential... and little awareness of our limitations and fragility, present or future? Life experience is harder won than technical skills. We are, at the end of the day, still primates with deeply-rooted biological, social, physical, and emotional needs. Unless the OP manages to transform us all into the Borg.
OP, if you're reading this, just know that I'm rooting for you and hope to you see your name in the news (or repos, or credits) for years and decades to come. I said what I did only because I want that to remain the case well into your 30s, 40s, and beyond. Too many of us dev types start out eager and burn out early because of the stresses, ceilings, roller-coasters, limits, bureaucracies, whatever. If you browse the Ask HN section you'll find "Help, I'm burning out..." type posts with some frequency. Some change careers, others spiral into depression, etc. Maybe we should have our own version of the "27 Club".
Some people are lucky enough to be able to maintain a single laser focus through their entire lives, never deviating, never wanting anything more, and feeling empty when they're not doing that one thing. Maybe it's a personality thing, maybe a spectrum thing, maybe a genius thing, maybe all of the above and more... who knows? I'm not a brain scientist. But they're lucky, and relatively rare. It's not like that for most people.
For the rest of us, the pursuit of excellence -- however we might individually define it -- requires us to be able to, at a minimum, maintain a sufficient baseline of health and relationships so as to remain a "functional workaholic". Think of it as "devops for the mind and body". If you do just the bare minimum, which isn't much (a few hours a week, if that), you can wake up every day feeling rested and energized to do the work, avoid repetitive motion injuries or posture-related pains later in life, grow the networks you need to meet other people at the top of their game, have friends and colleagues to help you through hard times, etc.
And if you do more than the bare minimum, the network effects can compound and create a virtuous cycle. You might meet professionals in other fields working on hard problems but not seeing it through the eyes of a programmer: mathematicians, natural scientists, cartographers, rocket scientists, architects, musicians, artists, whatever. They can provide not just new problems to solve, but fresh perspectives that we don't see enough of in the dev world. Same thing if you develop more hobbies (drones can lead into photogrammetry and aeronautics, photography into sensors and machine vision, hiking into network graphs and GIS, dance into mocap and animation, whatever).
Then, when you become truly exceptional, you'll probably run into ecosystem limits created by your peers... not on purpose, but just because most of us are only slightly above average. For every John Carmack or Linus Torvalds or Ada Lovelace there are a million mediocre devs working on everyday projects. In the professional world, much of your own code will be surrounded or hamstrung by other people's mediocrity. When you reach that point, you can choose to improve it (which requires people skills to convince them to refactor and/or accept your PRs or let you onto...
I don't mean to scare you but you are definitely smart enough to do what he did given the right environment and it looks like you are there. Unlike your peers learning is not a chore but it is exhilarating.
But remember we are finite, we have an experation date. Groups of people study us and determine when that date is and sell us life insurance.
Keep in mind that not all roads lead to happiness. You could have great riches, fame, respect, admiration. But it is all for nothing if there is no love.
For some love is in craft but craft cannot love you back.
Others find love in a mate and it is a rare couple that is happy. But that doesn't mean it isn't worth it to keep an eye for one that you like. If you find one that sees you as a partner, even if she isn't easy on the eyes, will give you a payback that is hard to measure. Family, inter-family fun. Vacation with meaning.
There is the final love that no one can take from you and that is your connection to the Almighty creator. His voice is a whisper. But it speaks love.
Some general tips that I've found useful to make myself better:
- Expose yourself to many different domains (frontend, backend, gaming, photorealistic rendering, scientific)
- Expose yourself to many different styles of programming (procedural, object oriented, functional, declarative). Spend a bit of time with languages across that spectrum: e.g.: c, rust, java, lisp, haskell, sql.
- Read codebases. Read code bases that have been around for a while. Postgres is a great example of a wonderful read. You can find notes in the repository passed down for decades. One of the hardest things in the software engineering world in my opinion is engineering with respect to time, and managing a codebase over time. Learn how what you do now might ripple out for years to come.
- Listen to lectures. MIT open courseware is your friend.
- Learn when to say "good enough". Don't let the perfect be the enemy of the good.
- Don't let it consume you. Be mindful about taking time off. Cultivate some other hobby that you can enjoy without pressures from the outside world.
- Stay humble. Be kind to yourself. You can't learn everything, find acceptance and prioritize what you do what to learn.
EDIT: - learn how to ask questions well. Don't be afraid to admit if you don't know something. Provide information about what you've already tried with your question, value the other persons time. Copy terminal output verbatim, don't paraphrase errors.
- Measure before thinking about performance.
- YAGNI
I found that early in my career too. It's been happening less and less as I get older. I can't understand why.
If there was a book called "How to Become the Greatest Programmer Ever" I would recommend it to you. The fact of the matter is the world is a strange and lonely place: Your guess is as good as mine. Follow the well marked paths as long as you can, never let good advice fall on deaf ears, and pray to heaven for guidance when the going gets tough.
Think of Joe Rogan, who arguably is the greatest in the world at getting smart people in the same room as him. He knows what he's good at and shares his knowledge, he keeps an open mind and curious character, and he always tries to stay polite and inviting. If you are looking for someone to model yourself after to meet more smart people, there are many worse choice than Joe Rogan.
But I find the best learnings for me have come from others. Mostly through observing their work and them observing mine. I think finding and surrounding yourself with people you admire is best.
Remember code is just a tool to achieve some end goal and it shouldn't be the goal itself imo.
Developer ≠ programmer.
Let adversity be the fuel to to you fire. Don’t let a random person like tell you it’s not gonna happen. Prove me wrong.
Learn programming (if that is what you want to be the best at. There are of course many diciplines out there where you could be no.1)
Think and reflect. Maybe try a hallucinagen at some point (that won’t make you smarter and carries its own risk, but best case scenario it will open the doors to new mental pathways for you to think and reflect internally and externally)
Learn. As much as you can. Apply that knowledge to as many things as you can. If your toolbox only has a screwdriver and nails, how do yo solve for that? Get a screwdriver, modify the hammer or create a solution to put between the screwdriver and nails? This also leads back to the think and reflect part (and is not exclusively entrepreneurial in spirit, it applies to most aspects of work and life)
Be nice and humble. You won’t get far on raw talent alone. You need people to support and challenge you.
Focus, dedication, determination. The movie Whiplash in many ways explores what it means and takes to become “the best”. Watch it.
Noone agrees on the definition of any of these, and they have changed over the years. Wikipedia says they are the same https://en.wikipedia.org/wiki/Programmer
> Maybe try a hallucinagen
Is there strong evidence to support this is necessary? Which great computer programmers attribute their abilities to this?
It could of course also be = and not exlusively ≠. More context and discussion to pin down similarities and difference is case by case.
Maybe does not equal nescessity. Pf course you do do not need to get high to achieve success. Depending on your specific personality and ambition it may help loosen or untie mental “knots”. I do not endorse it as a general rule.
I am but an internet stranger surfing on evaporating bytes.
There may be areas of overlap in one or more of the above -- but in general, they are mostly different! (Learn to recognize which is which in your work environment! <g>)
(Humor: I should have added "≠ Ruby On Rails Developer" to the end of that list (you know, for comedic purposes! <g>) -- but then the whole RoR community would be after my keyster! <g>)
stop getting jobs. get a 4 year degree at the best school you can get into.
Last but not least, what my dad taught me: don’t let anyone steal your joy.
Pick any software engineering school or college outside the US.
If you learn quickly the rest will fall in to place. Don't pay too much attention to the constant flux of industry dogma, focus on working solutions.
Stop reading HN.
Most well-known? Most respected? Most influential? Most prolific? Most knowledgeable? Most hire-able?
How are you going to measure your progress?
---
> On every team I've worked with, I've always been the youngest.
I don't mean to be snarky, but why hit this point so hard? If your post started at "I want to be one of the best", it'd be less than half as long and get the same point across.
I applaud your initiative and ability; you are further on the road to expertise than many at your age. Still: be humble. It's hard to become the world's best if you're not a working programmer. Make sure companies continue to want to hire you by being a knowledgable programmer who is easy to work with.
---
Plan on working with people?
- Practice arguing a position effectively. - Get accustomed to communicating your ideas simply, with the goal of teaching your audience
---
Don't think about programming all the time. Read, look at art, push your brain in unexpected directions. It pays off in your work.