I'm an 18 year old developer. How do I become one of the best programmers ever?
146 comments
You might be interested in John Carmack's recent interview on Lex Fridman's podcast. He'd probably be one of the leading candidates for "best programmer".
One thing that's common to people who are unreasonably great at something is that they do it a lot. Like, an order of magnitude more than what a normal person would consider reasonable. For Carmack that was pumping out a new game every week when he was working for a mail-order software company before he became famous. Everyone talks about how the Beatles played tons and tons of shows all over Germany before they made it big. Great comedians go on the road and hone their acts in thousands of clubs until they have something that can be a comedy special.
Quantity has a quality all its own and you have to just experience a lot of variations and run into a lot of different situations and try lots of different things to become really good.
Note, as others have pointed out, this may not be the same thing as having a happy and fulfilling life and the things you want to spend your time doing might change as you get older, but also, they might not. Best of luck.
One thing that's common to people who are unreasonably great at something is that they do it a lot. Like, an order of magnitude more than what a normal person would consider reasonable. For Carmack that was pumping out a new game every week when he was working for a mail-order software company before he became famous. Everyone talks about how the Beatles played tons and tons of shows all over Germany before they made it big. Great comedians go on the road and hone their acts in thousands of clubs until they have something that can be a comedy special.
Quantity has a quality all its own and you have to just experience a lot of variations and run into a lot of different situations and try lots of different things to become really good.
Note, as others have pointed out, this may not be the same thing as having a happy and fulfilling life and the things you want to spend your time doing might change as you get older, but also, they might not. Best of luck.
On every team I've worked with, I've always been the youngest.
I found that early in my career too. It's been happening less and less as I get older. I can't understand why.
I found that early in my career too. It's been happening less and less as I get older. I can't understand why.
Don't compare yourselves to others, compare yourself to your past self. Comparisons to others will either make you think poorly of yourself or make you think poorly of others.
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
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
Unless your IQ is above 140 you stand no chance. The world has a lot of very smart people and it would be better for your mental health to make peace with the fact that you are probably just above average on the bell curve and that you are not anything special. You're not a beautiful and unique snowflake. You're the same decaying organic matter as everything else. We're all part of the same compost heap. We're all singing, all dancing crap of the world.
Is high iq an indicator for success? Would be interested in a source about that.
"Best programmer ever" =/= Success, the key word being "best".
You can no doubt be extremely successful without being the best at something, or particularly intelligent.
But becoming "one of the best programmers ever" would require an extremely high level of computer science knowledge and understanding (at least in my eyes), which boils down to many different disciplines of mathematics. This would obviously correlate with high intelligence.
I'm of course using a generous interpretation of the word "programmer" - someone who can analyze problems, design, and implement efficient solutions to any number of problems in computing.
You can no doubt be extremely successful without being the best at something, or particularly intelligent.
But becoming "one of the best programmers ever" would require an extremely high level of computer science knowledge and understanding (at least in my eyes), which boils down to many different disciplines of mathematics. This would obviously correlate with high intelligence.
I'm of course using a generous interpretation of the word "programmer" - someone who can analyze problems, design, and implement efficient solutions to any number of problems in computing.
Many moons ago I read a story on HN about a very successful programmer that was at the top of his field. He co founded a famous software company and his talent grew and grew until something strange happened. After achieving his greatest feats of engineering he suddenly, quite unexpectantly to everyone lost total interest in his art. He also lost interest in his partner. It was discovered that he had a rare kind of brain disease. The family was like a survivors group for a living person. He was young if I recall.
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.
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.
This is brilliant. Thank you.
Advice? Don’t push yourself as far as possible. You’re young, talented, and capable of kicking ass. Spread that ass kicking out over your lifetime and make sure you don’t burn out early.
Assuming you’re on the west coast, it’s 10 PM. Take a break and relax.
Assuming you’re on the west coast, it’s 10 PM. Take a break and relax.
The best programmers ever are humble, they know their worth, and don't have to show off. I'm sure people around you will appreciate humility, so if you want to push your limits, why not helping that guy who just joined the team and seems a bit lost?
Depends on your definition. The most famous programmers often aren't so humble. If you're working for other people, being quiet is bad for your career path unless you have a rare manager.
Here's some concrete advice from someone ~3x your age who started programming at about the same time.
1. Keep at least one project going just for the fun of it. Remember the joy you've found in programming, and never lose it. A friend of mine is reverse-engineering the Civ IV AI so he can write mods for it. This will not make him famous or wealthy, but serves as something to look forward to when he's not pumping for The Man.
2. Stay in good shape physically. _Mens sana in corpore sano_ and all that. Your body is not just a dumb flesh robot that carries your brain around -- and even if it were, that enough is good reason to keep it healthy.
3. Learn to work with people remotely on important things. Find interesting or useful open source projects and contribute to them. The technical aspects will be easier than the social ones, likely. These are important skills. Vanishingly little non-trivial software is made by one person.
4. Keep learning programming languages. Software engineering is a discipline abstract from its tools. The more languages you learn the more approaches you will have to problems. E.g., learn lisp -- it'll permanently rewire parts of your brain.
1. Keep at least one project going just for the fun of it. Remember the joy you've found in programming, and never lose it. A friend of mine is reverse-engineering the Civ IV AI so he can write mods for it. This will not make him famous or wealthy, but serves as something to look forward to when he's not pumping for The Man.
2. Stay in good shape physically. _Mens sana in corpore sano_ and all that. Your body is not just a dumb flesh robot that carries your brain around -- and even if it were, that enough is good reason to keep it healthy.
3. Learn to work with people remotely on important things. Find interesting or useful open source projects and contribute to them. The technical aspects will be easier than the social ones, likely. These are important skills. Vanishingly little non-trivial software is made by one person.
4. Keep learning programming languages. Software engineering is a discipline abstract from its tools. The more languages you learn the more approaches you will have to problems. E.g., learn lisp -- it'll permanently rewire parts of your brain.
I don't think you can really be. At my school years ago, i met this 18 or 19 yo girl who recoded most of 'ls' in 3 days (without printf or any va_arg as this was forbidden), then got bored and added all the options even some obscure ones and improved the efficiency using branchless tricks, all while teaching people with less than 2 month of experience in programming binary masks and bit shifting (successfully). She wasn't the best in my year, in this new school without reputation.
That's why I decided very early in my career than being the best was pretty much impossible and that i would focus on being a good teammate, knowledgeable on most subjects with a deep focus on one (7 years later i still haven't really chosen btw), and happy to share this knowledge. Write good code, follow the practice of your team even if it means letting go this fantastic python trick (or change them if you think they're inappropriate), document everything and ask for advice. And give advice
That's why I decided very early in my career than being the best was pretty much impossible and that i would focus on being a good teammate, knowledgeable on most subjects with a deep focus on one (7 years later i still haven't really chosen btw), and happy to share this knowledge. Write good code, follow the practice of your team even if it means letting go this fantastic python trick (or change them if you think they're inappropriate), document everything and ask for advice. And give advice
I would learn lots of different languages, databases, concurrency models and paradigms.
I felt like my life was stuck in a rut being very good at one language (Java), but then I tried Ruby and my mind was blown. That reinvigorated my interest in JavaScript/HTM/CSS. Then I felt road blocked by database performance and a good friend really pushed me to really know and understand how and why to use SQL well.
This then was a slippery slope to realizing that something that seems hard or impossible in one language/database/paradigm is trivial in another.
My personal goal is to learn a new language a year. I’m not always successful (I’m looking at you, Haskell!), and I don’t always use the new languages often, but every single time the process has always made my code better, tighter, more maintainable, etc.
A good place to start is the Pragmatic Programmer’s “Seven Languages in Seven Weeks” book and subsequent series of books.
As they quote in the first few pages:
“A language that doesn’t change how you think about a problem isn’t worth learning.”
I felt like my life was stuck in a rut being very good at one language (Java), but then I tried Ruby and my mind was blown. That reinvigorated my interest in JavaScript/HTM/CSS. Then I felt road blocked by database performance and a good friend really pushed me to really know and understand how and why to use SQL well.
This then was a slippery slope to realizing that something that seems hard or impossible in one language/database/paradigm is trivial in another.
My personal goal is to learn a new language a year. I’m not always successful (I’m looking at you, Haskell!), and I don’t always use the new languages often, but every single time the process has always made my code better, tighter, more maintainable, etc.
A good place to start is the Pragmatic Programmer’s “Seven Languages in Seven Weeks” book and subsequent series of books.
As they quote in the first few pages:
“A language that doesn’t change how you think about a problem isn’t worth learning.”
I'd propose thinking carefully about what you mean by "best".
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.
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.
>I want to be one of the best programmers in the world, but I have a long way to go.
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?
?
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?
?
>Do you really want to be the best programmer in the world?
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.
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.
Then find a secret that was forgotten and blow it up to larger than life proportions. Or solve the problem of endlessly waiting at a traffic light waiting it to go green when the streets have been empty for a minute. Think of how much fuel that would save.
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.
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.
Thank you for the high quality question!
>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!)
>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!)
"Incredible things" ? There are so many potential fields. I would presume that "incredible" does not include yet another advertising channel, e.g. Meta/Alphabet/Amazon.
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.
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.
> I want to increase the quality of software in general, including the development experience.
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.
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.
>That just absolutely screams lack of experience.
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.
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.
This. Do you want to make lots of money? Solve hard problems? Have autonomy and ownership of code? Very different career paths!
Work on the hardest problems you can with the smartest people you know. Keep that up long enough and you'll be all on your own, with some crackpot idea nobody is really sure if it will work or not. That's when you've met the cutting edge, the boundary of what anyone knows or has done. At that point you just keep on exploring. Hack something important and useful together, and invent it into the world. Don't worry about the laurels, they'll come in due time.
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.
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.
How do you get the smartest people to want to work with you when you are not as smart as them? The smartest people are all generally very successful and they themselves have wide-ranging preoccupations. What if the smartest people you know are decidedly interested in a different field than you do?
The same thing that makes them interesting to you is what could make you interesting to them: They are working on something that makes you curious. Keep hacking away on projects, invent the future you want to see. Share the vision and work with the world, and keep a kind heart. You can't guarantee you'll be paired with exactly who you want, but someone will come along for the journey.
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.
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.
What does it mean to be the "best programmer ever"? You probably want a more specific objective. Maybe you want to be the best at competitive programming? If so, then practice that, read books on DSA, etc. On the other hand, programming is a means to an end, and most people who are thought of as "great programmers" built something useful, such as an OS, a programming language or a software framework. Rather than focus on development skills in the abstract, it might be more productive to focus on a problem you want to solve, and learn what you need to achieve that.
You’re gonna have to give up a lot, like the girl you love, when she takes too much of your time or doesn’t understand what you’re trying to do. You’ll get over it. But sometimes sacrificing everything will actually break you so learn how to recognize that. If you make a mistake there then recover and move on, like always.
The companies you’re working at are shit and web dev is easy, try to get through that phase in the next year. There are unlimited loopholes for making money, pick one and extract from the world what you need to live, then get back to doing deep and difficult programming. Learn a lot of pure mathematics, because easy programming like web dev will become commoditized or automated and you need the mental flexibility given by pure math in order to come out on top in the future. You have to think longer term than you are now.
And living is an art, refine and trust your intuition constantly. Every ideology and group is wrong in some way. You have to be outside all of them and also take what they know.
Recognize when you’re fighting yourself and realize that you’re distracted. Probably by status or money or ego things. Accept the lost time and move on.
Regularly put everything on the line. You have no time to waste being risk-averse. Make really big bets and make sure they succeed. If they don’t then hopefully you’re fine physically and worst case you have nothing and go live in the woods and eat rice and beans and plot the next move. This is fine, you’ll learn to deal with catastrophic failure. That means you’re pushing the limits. Push harder.
The companies you’re working at are shit and web dev is easy, try to get through that phase in the next year. There are unlimited loopholes for making money, pick one and extract from the world what you need to live, then get back to doing deep and difficult programming. Learn a lot of pure mathematics, because easy programming like web dev will become commoditized or automated and you need the mental flexibility given by pure math in order to come out on top in the future. You have to think longer term than you are now.
And living is an art, refine and trust your intuition constantly. Every ideology and group is wrong in some way. You have to be outside all of them and also take what they know.
Recognize when you’re fighting yourself and realize that you’re distracted. Probably by status or money or ego things. Accept the lost time and move on.
Regularly put everything on the line. You have no time to waste being risk-averse. Make really big bets and make sure they succeed. If they don’t then hopefully you’re fine physically and worst case you have nothing and go live in the woods and eat rice and beans and plot the next move. This is fine, you’ll learn to deal with catastrophic failure. That means you’re pushing the limits. Push harder.
If you become one of the best programmers in the world, what will you have achieved? What is there about programming that captures your passion? Will that be sustainable for the brief moment you are alive. What do you want as a legacy after 80 years of work?
One example: The Hacker's Conference ["Hackers"]. It is populated by a diverse group of people, . Attendees program, but I doubt that anyone of the attendees would call themselves a programmer except in jest.
Hackers do what they do. Some are mathematicians, some are musicians. At least one plays the organ. Others are into sex, drugs, and rock and roll. Some are spiritual, some agnostic. Some climb mountains. Others worry about how to planet-form the earth to recover from an over-abundance of CO2. Some have families and kids, some do not. Everyone is interested in everything. Hackers know things, observe, and learn things. They delight in sharing knowledge, particularly arcane knowledge. They are compassionate, ethical, and loving (although there are occasional exceptions).
If you are good at programming you are likely to be good at living an exploratory life. Be fearless and brash. Always wonder why and learn how.
One example: The Hacker's Conference ["Hackers"]. It is populated by a diverse group of people, . Attendees program, but I doubt that anyone of the attendees would call themselves a programmer except in jest.
Hackers do what they do. Some are mathematicians, some are musicians. At least one plays the organ. Others are into sex, drugs, and rock and roll. Some are spiritual, some agnostic. Some climb mountains. Others worry about how to planet-form the earth to recover from an over-abundance of CO2. Some have families and kids, some do not. Everyone is interested in everything. Hackers know things, observe, and learn things. They delight in sharing knowledge, particularly arcane knowledge. They are compassionate, ethical, and loving (although there are occasional exceptions).
If you are good at programming you are likely to be good at living an exploratory life. Be fearless and brash. Always wonder why and learn how.
Write a lot of programs.
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.
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.
Good advice. Thank you.
> What are some strategies for success?
You want to be the best programmer or you want to be the best known (famous) programmer? Someone like John Carmack?
Create something extraordinary.
You want to be the best programmer or you want to be the best known (famous) programmer? Someone like John Carmack?
Create something extraordinary.
I'm in my late 30s and worked with an absolutely brilliant 18 year old who exceeded all of us oldies with his raw talent.
He had passion projects outside of work that were already popular within our technical niche when we hired him, and continued to deliver on these, very impressively!
We had him present at an international conference on some of the work he'd done for us, which really helped with his growth - it was very different from his other skill sets but he did an excellent job too.
But I think to be honest, the biggest change in his life was finding a romantic partner. Perhaps it was this, perhaps it was just maturing anyway, but he seemed to gain a lot of confidence and wellbeing. She certainly enriched his life in a way that the technical work didn't.
So my advice to you would be:
- keep doing what you're doing!
- but also, challenge yourself in other areas that you can branch out to
- and take some time find a candidate for your future life partner
Best of luck to you!
He had passion projects outside of work that were already popular within our technical niche when we hired him, and continued to deliver on these, very impressively!
We had him present at an international conference on some of the work he'd done for us, which really helped with his growth - it was very different from his other skill sets but he did an excellent job too.
But I think to be honest, the biggest change in his life was finding a romantic partner. Perhaps it was this, perhaps it was just maturing anyway, but he seemed to gain a lot of confidence and wellbeing. She certainly enriched his life in a way that the technical work didn't.
So my advice to you would be:
- keep doing what you're doing!
- but also, challenge yourself in other areas that you can branch out to
- and take some time find a candidate for your future life partner
Best of luck to you!
There is likely no such a thing as "best programmer" at all. A person can certainly excel in deep knowledge of the domain, speed and accuracy, but at a certain level it is hardly possible to discern one such programmer from another - no one is "best". Some of them go on to be famous, but that is because of a need to say something (Aaron Schwarz et al) or do something groundbreaking (Linus Torvalds et al), not because they stand out from their peers programming wise.
That said, congratulations on your achievements so far. You seem to be on track to be a great programmer. To achieve that goal I believe some formal CS training is useful if not required. Learn to master C, C++, Lisp and one of the functional languages and their related paradigms. Learn the different database technologies deeply. Understand how processors, memory and communication works close to the metal. And at that point you no doubt will have found you specialty, developing one such is really one of the requirements to excel. And, as others have said make sure you have a reasonable life/work balance.
Good luck!
That said, congratulations on your achievements so far. You seem to be on track to be a great programmer. To achieve that goal I believe some formal CS training is useful if not required. Learn to master C, C++, Lisp and one of the functional languages and their related paradigms. Learn the different database technologies deeply. Understand how processors, memory and communication works close to the metal. And at that point you no doubt will have found you specialty, developing one such is really one of the requirements to excel. And, as others have said make sure you have a reasonable life/work balance.
Good luck!
Go fly a kite.
Programmers who only do programming, suck at programming. You can't get perspective by sitting still. You have to expose yourself to new things.
Learn how to sail. Take up stamp collecting. Grow exotic flowers in teacups. Earn a black belt. Become a baker. Go to a lindy hop dance night on the weekend. Take apart and put together an engine. Learn a new language. Travel the world.
After all that, programming will seem like a walk in the park. You'll probably get bored with it, honestly. Computer science is a pretty limited field and has had minor incremental improvements over the past two decades. Hardware stuff gets more advanced but the software is mostly the same as 30 years ago. Still, outside experiences will help inform your perspective on what works and what doesn't, where the sides of the box are. Aside from that, just practice a lot, in a lot of different fields.
Also, please don't make the mistake of trying to prove yourself through achievements. We would all much rather work with the best person in the world than the best programmer.
Programmers who only do programming, suck at programming. You can't get perspective by sitting still. You have to expose yourself to new things.
Learn how to sail. Take up stamp collecting. Grow exotic flowers in teacups. Earn a black belt. Become a baker. Go to a lindy hop dance night on the weekend. Take apart and put together an engine. Learn a new language. Travel the world.
After all that, programming will seem like a walk in the park. You'll probably get bored with it, honestly. Computer science is a pretty limited field and has had minor incremental improvements over the past two decades. Hardware stuff gets more advanced but the software is mostly the same as 30 years ago. Still, outside experiences will help inform your perspective on what works and what doesn't, where the sides of the box are. Aside from that, just practice a lot, in a lot of different fields.
Also, please don't make the mistake of trying to prove yourself through achievements. We would all much rather work with the best person in the world than the best programmer.
Being the best is just like that toy that you long wished for Christmas: once you get it and play long enough with it, it will no longer seem as desirable.
Make sure you fill your life with meaning and love. The rest is not as important. Recognition comes and goes. And even if it stays, it will lose its shine fast enough.
PS: And as a Jesuit once said, stay humble and you won't tumble :)
Make sure you fill your life with meaning and love. The rest is not as important. Recognition comes and goes. And even if it stays, it will lose its shine fast enough.
PS: And as a Jesuit once said, stay humble and you won't tumble :)
There's a lot you can learn by yourself in this field as you've probably realized.
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.
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.
There's always Leetcode and Hacker Rank.
If you get involved in an open source project your horizons may narrow quickly, so it's best understanding the strengths of being a generalist or being best in a particular area.
The key thing in the development sphere is that nothing stands still, and neither should you.
For best programmer that might be to learn more Data Structures and Algorithms. Maybe try some LeetCode. See if you can find a senior programmer to be your mentor.
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
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
I've seen many...so this is my advice...increase your output in software. Breed your software development especially opensource in public repositories like rabbits. Design your own programming language something like Lua scripting which is much easier to achieve wide usage than compiled one like Julia or Rust. Choose a field say AI and go real deep into it. Then you can also built your software output around it. Be shameless promoting your own...be as shameless as like Andrew Tate. Dont worry getting into FAMNG. When you're polific they will headhunt you. Focus on your output...everything elese like being the best and 10x 100x will automatically follows. Avoid hacking/cracking that is a dark path that you will be a great sith but rarely will the general public/compabies appreciate/reward you.
Being the best at something is a good ideal, but hopefully you'll never get there. Because if you do, what will be your drive? I'm serious about this. Think through your stated motivation, and ask yourself what you want out of life. Are they the same? If you are the best, what metrics are you using to determine that? A lot of money? Fame? When I was a programmer, I was happy knowing that my program was making someone's day a little easier. They certainly weren't the best programs, but they were what my users wanted, and I talked to my users often. I think a programmer who is a good people person would stand out, but it doesn't matter what I think; you need to answer these questions for yourself. Good luck.
There’s no way to measure or compare programmers, so we can’t say that anyone belongs to the group of “best programmers in the world.” You can strive to get really good at programming, do fun and interesting things, make money, help other programmers.
I remember feeling the excitement and drive you express. Young people learn fast, a big advantage. On the other hand young people lack experience, and don’t know how much they don’t know. Plenty of older people have the same problem but I think it’s more acute in younger people. Use your talents, energy, curiosity, and drive to practice and learn as much as you can. Learn from people who have more experience. Don’t worry about getting to “one of the best.” Instead get to the best you can do, or want to do.
I remember feeling the excitement and drive you express. Young people learn fast, a big advantage. On the other hand young people lack experience, and don’t know how much they don’t know. Plenty of older people have the same problem but I think it’s more acute in younger people. Use your talents, energy, curiosity, and drive to practice and learn as much as you can. Learn from people who have more experience. Don’t worry about getting to “one of the best.” Instead get to the best you can do, or want to do.
Have fun. Don’t let anyone set limits on what you can or can’t do. Follow your curiosity, no matter how impractical it seems. If your goal is to really be the best programmer and not the best paid programmer, eschew the typical path and figure out how to earn money to fund your research (freelance, contract gigs, anything that gives you freedom with your time). Discipline yourself to take care of the money work and then do as you please. Above all else: write and teach as you go. Doing this significantly improves your ability to see flaws in your process/thinking and move much faster.
Last but not least, what my dad taught me: don’t let anyone steal your joy.
Last but not least, what my dad taught me: don’t let anyone steal your joy.
Becoming one of the best ever is only possible if your IQ is one of the best ever. There is going to be some biological upper limit. Minds like Torvalds, Richie, Thompson are rare; and there is nothing you can do to reach that level if your own source code isn't on the same level. However, there is a lot of great advice here in the comments that can take you to your full potential, whatever that may be. That's important too, because it's sure easy to keep yourself well below that level.
Go to YouTube and search for "Big Think Larry Wall" and "Big Think Bjarne Stroustrup" and listen to a couple of the greats.
Go to YouTube and search for "Big Think Larry Wall" and "Big Think Bjarne Stroustrup" and listen to a couple of the greats.
> What is the best use of my time outside of work?
At your kind of age (a little older) both my children went travelling, one around Europe, the other South America, without any prompting. They both came back with a self confidence and respect for other people you couldn't believe. They did it when they felt it was what they wanted (but scared inside) and went alone - they joined up with others they met on the road. If you get to a stage where you feel ready it is worth considering. It is not risk free and as a parent it is petrifying! But as others have said here, it is worth working on who you are as well as what you can do.
At your kind of age (a little older) both my children went travelling, one around Europe, the other South America, without any prompting. They both came back with a self confidence and respect for other people you couldn't believe. They did it when they felt it was what they wanted (but scared inside) and went alone - they joined up with others they met on the road. If you get to a stage where you feel ready it is worth considering. It is not risk free and as a parent it is petrifying! But as others have said here, it is worth working on who you are as well as what you can do.
I’d start by defining your goal more clearly. You said “one of the best programmers” but that means nothing. That’s like saying “one of the best athletes”. You could go all the way from horse shoe throwing to F1 to basketball to golf and be “one of the best” for that specific sport (again - how is that defined? By winning? By your individual stats? Which stats? How much money you make? How much fame you acquired? Who are you comparing against?). Does it mean you’re one of the best athletes?
Tbh - the lack of introspection here on the topic says enough. You won’t be the best cause you don’t even know what the best is.
Tbh - the lack of introspection here on the topic says enough. You won’t be the best cause you don’t even know what the best is.
Exercise, build and maintain relationships, eat well, stay healthy, travel, make friends, stay open minded, be humble, find balance and joy in your life so you don't burn out at 25.
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?
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?
He didn’t ask how to be happy and live a balanced life. He wants to be the best programmer ever and this is not the answer.
Of course it is. Lack of balance is invariable damaging to humans. OP is going to receive plenty of good programming and technical information in this thread. At least one person needs to remind them to have a life as well.
I agree. The best programmers I've worked with are happy outside of work. Leading a miserable life is very damaging.
This is a fun comment because "OP" are his initials.
Most programmers I know don't fulfill all the above, so it's a great way to climb up a standard deviation or two.
All programmers are within an order of magnitude in ability and productivity anyway, so you can't be a "super duper smart 10x SWE".
All programmers are within an order of magnitude in ability and productivity anyway, so you can't be a "super duper smart 10x SWE".
[deleted]
You can't be "the best" when you find yourself unable to work anymore.
I don't think they're mutually exclusive, are they? I'm not at all trying to dissuade the OP from pursuing excellence. I think that's a noble and beautiful goal and I strongly encourage the OP to pursue it :) Just not at the exclusion of self-care.
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 their team), ignore it and continue on (which requires some degree of emotional maturity, enough to at least compartmentalize), move onto other problems (which requires you to know your interests and passions first), or all of the above.
A lone wolf coder can solve some problems on their own (see Bun, Linux, Git, Bitcoin, etc.), but there are other classes of problems that require bigger teams and/or massive investments (to turn Linux into Android phones, or Git into GitHub, or Bitcoin into Coinbase, etc.) Even John Carmack needed Facebook's resources to bring his VR vision to life, Musk needed his teams (and loads of money) for spaceflight and electric cars, Valve (the gaming company) took years to change the landscape, and so forth. Eventually you'll meet other brilliant people too, and how you choose to relate to them will in no small part determine the sorts of problems you get to work on, your work-life balance, how much you get paid, etc.
Your technical know-how is something that you can mostly control on your own, and I have every faith that you will master the knowledge (and then some, and hopefully come back to teach us). I just hope you can also master the rest of your life well enough to stay happy, healthy, humble, and productive (maybe even in that order).
I've ranted enough, lol. Have fun and good luck :)
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 their team), ignore it and continue on (which requires some degree of emotional maturity, enough to at least compartmentalize), move onto other problems (which requires you to know your interests and passions first), or all of the above.
A lone wolf coder can solve some problems on their own (see Bun, Linux, Git, Bitcoin, etc.), but there are other classes of problems that require bigger teams and/or massive investments (to turn Linux into Android phones, or Git into GitHub, or Bitcoin into Coinbase, etc.) Even John Carmack needed Facebook's resources to bring his VR vision to life, Musk needed his teams (and loads of money) for spaceflight and electric cars, Valve (the gaming company) took years to change the landscape, and so forth. Eventually you'll meet other brilliant people too, and how you choose to relate to them will in no small part determine the sorts of problems you get to work on, your work-life balance, how much you get paid, etc.
Your technical know-how is something that you can mostly control on your own, and I have every faith that you will master the knowledge (and then some, and hopefully come back to teach us). I just hope you can also master the rest of your life well enough to stay happy, healthy, humble, and productive (maybe even in that order).
I've ranted enough, lol. Have fun and good luck :)
Becoming one of the best ever is only possible if your IQ is one of the best ever. There is going to be some biological upper limit. Minds like Torvalds, Richie, Thompson are rare; and there is nothing you can do to reach that level if your own source code isn't on the same level. However, there is a lot of great advice here that can take you to your full potential, whatever that may be. That's important too, because it sure it easy to keep yourself well below that level.
> Minds like Torvalds, Richie, Thompson are rare
Going a bit OT, but what do you think makes these minds so rare? They're obviously pretty smart, maybe even very smart - you have to be smart enough in order to become so accomplished after all - but I wonder whether people don't often simply mistake accomplishment with brilliance. I'm pretty sure you could find other people who, being in the right place at the right time and with enough endurance, would be able to fill their shoes. You can't become as accomplished as Torvalds is by simply repeating what he did with Linux since 1991, but today; that niche's already taken, Torvalds 2.0 would be just one of many kernel devs now and their own version control system wouldn't even have an advantage of being used by Linux.
Going a bit OT, but what do you think makes these minds so rare? They're obviously pretty smart, maybe even very smart - you have to be smart enough in order to become so accomplished after all - but I wonder whether people don't often simply mistake accomplishment with brilliance. I'm pretty sure you could find other people who, being in the right place at the right time and with enough endurance, would be able to fill their shoes. You can't become as accomplished as Torvalds is by simply repeating what he did with Linux since 1991, but today; that niche's already taken, Torvalds 2.0 would be just one of many kernel devs now and their own version control system wouldn't even have an advantage of being used by Linux.
I’m reasonably sure it’s been proven that IQ score is a poor measure of intelligence.
Although I believe there is some truth in what your saying, that those engineers had minds which are rare, I personally don’t believe it’s all genetics. Practice, experience, craftsmanship and purpose will lead a person to the same outcome.
Although I believe there is some truth in what your saying, that those engineers had minds which are rare, I personally don’t believe it’s all genetics. Practice, experience, craftsmanship and purpose will lead a person to the same outcome.
Don't lose your desire for excellence and don't discouraged by the non-constructive comments on this thread. Happy to chat; you can contact me at https://www.skmurphy.com/blog/2016/08/01/skmurphy-office-hou...
Ideally you would have a project that you use and maintain/update over a long period.
It doesn't need to be perfect, it doesn't need to consume all your free time. You don't even need to write tests ;)
But there's value in having to fix and refactor your old code: what abstraction proved useful or unnecessary, what code is easy or hard to change etc
It doesn't need to be perfect, it doesn't need to consume all your free time. You don't even need to write tests ;)
But there's value in having to fix and refactor your old code: what abstraction proved useful or unnecessary, what code is easy or hard to change etc
I don’t think Fabrice Bellard or Donald Knuth aimed to be the best programmers in the world.
I have to give "mad props" to Fabrice Bellard and Donald Knuth -- but don't forget about Brian Kernighan, Dennis Richie, Niklaus Wirth, Charles Simonyi, Raymond Chen, Mike "Assume Nothing" Abrash, Jeff Dean, Edsger Dijkstra, Andrew Tanenbaum, Linus Torvalds, Anders Hejlsberg, Joel Spolsky, and, more recently Eelco Dolstra -- and all of the hundreds of thousands of unnamed unsung committers to GitHub and other open-source repositories...
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...
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 reading of interviews, biographies of many of the foregoing, I don't recall a single one having the goal of being "the best". Most certainly not in the sense that we talk about sports stars.
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.
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.
To be honest, I didn't even set out to become a developer. I just loved solving problems. My question is more on the side of where I should invest my time.
What is the largest problem in your life right now?
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!
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!
Thank you! I'll be sure to apply this.
> What are some strategies for success?
Pick any software engineering school or college outside the US.
Pick any software engineering school or college outside the US.
Hard work, fun, and deliberate practice. Find projects that you think are interesting, which also push the limits of your knowledge. It's a lot easier to work hard when you're working on something you find worthwhile :)
Well, you won’t.
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.
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.
> Developer ≠ programmer.
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?
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?
You are not wrong. And in the spirit of doing commute commenting, nuances tend to fall by the wayside.
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.
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.
Seconded for Whiplash.
Developer ≠ Programmer ≠ Web Developer ≠ Full Stack Developer ≠ Software Engineer ≠ 10x'er ≠ Software Architect ≠ Code Monkey ≠ Devops Guy ≠ Power User ≠ "Go-To Guy" ≠ Business Analyst ≠ Productive Coworker ≠ Problem Solver
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>)
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>)
(Extra, Extra Humor!: "≠ HN Downvoter" <g>)
To complement the other answers here, beware: https://youtu.be/K64xhPbo6Sw?t=136
keep doing what you are doing and then turn 50
Show a little modesty and come down to earth. Enjoy programming and making a living by coding is more important than fame.
im not the best, but i think if i was better at math id be closer to that no. 1 spot. i think you should learn about how to succeed at university/how to get the most out of your classes. stay away from digital addictions chess, instagram, hn, reddit, dota and from things that will move you away from your goal.
Solve the hardest problems of digital age, like removing spam completely from emails, search engines and social networks.
Spam is a solved problem, but it makes money so it's not in anyone's interest to remove it.
If you need to throw too much money at it means the solution is not scalable/sustainable, that's the issue to solve now. Captchas are band-aids, moderation tends to elitist spam (ie. Wikipedia, Reddit, StackOverflow), filtering triggers false positives and unfair account bans.
"how do I become one of the best programmers ever?"
focusing on learning and writing less articles on boards
Practice practice practice.
Read read read.
Get a mentor; accountability.
Teach teach teach.
Read read read.
Get a mentor; accountability.
Teach teach teach.
If you want to be incredible, you won't find out how from average people. Make your own path.
Quit the industry and go into academia. Professional programming is slow and rarely innovative.
Go forward with a PhD and post-doc, and do research on solving climate change via computers. Win a Turing award for groundbreaking language and ISA based around energy efficiency of computation. Congratulations, you are now one of the best programmers.
Go forward with a PhD and post-doc, and do research on solving climate change via computers. Win a Turing award for groundbreaking language and ISA based around energy efficiency of computation. Congratulations, you are now one of the best programmers.
Learn about business, the business of programming, engineering services, startups.
Heh. Start by defining best.
This is such a weird and irrelevant request...
one step at a time.
stop getting jobs. get a 4 year degree at the best school you can get into.
stop getting jobs. get a 4 year degree at the best school you can get into.
Practice.
A high-dimensional ball has more surface area than volume.
Human brains are only used to thinking in lower dimensional spaces but human lives intrinsically occupy manyfold dimensional spaces.
"Better" is only a meaningful metric under two circumstances:
* A one dimensional ordering, in which case all items can be ordered in relation with each other
* A multi-dimensional ordering in which one item has total domination over an another item
Take recipes for example, recipes can be evaluated based on taste, nutrition, ease of preparation, quality of writing, availability of ingredients etc, etc, etc.
Is a recipe that's easier to make but less tasty "worse" than one that takes way more time but tastes way better? Either you can "linearize" the dimensions by assigning some kind of weighting like 0.5 * taste + 0.3 * easiness + 0.1 * nutrition + 0.1 * other OR you can accept there is no intrinsic ranking and say neither recipe is better than the other, they're just different.
But what you can say is that a recipe that is worse in taste AND worse in ease of preparation AND worse in nutrition AND worse at everything else is a categorically worse recipe. That's a recipe that's at the center of the ball and not the surface.
In a high-dimensional world, being the best is trivial, almost everyone is the best except the people who are all around mediocre, people who occupy the center of the ball.
Despite this, most people fail at this task, just like how most recipes you find on the internet are categorically not the best, because their mindset does not unlock this view of the world. They're followers rather than leaders and so they subscribe to a very narrow and rigid view of what programming means and are desperately competing amongst those dimensions with every other person who subscribes to that view and they never reach close to the top because a low dimensional ball has very little surface area relative to volume.
So if there's one single piece of advice I could give you about how to become "the best", it's to forge your own path early and confidently and bravely. There are a million different roles that programmers have in society that each require a million different types of skills and the one you're going to be the best at likely hasn't been discovered yet. Follow your passions and your interests and develop a unique point of view and thrive in the intersection between areas of rare overlap and becoming the best is simply table stakes.
Whatever you do, don't linearalize your life upon metrics given to you by someone else because they have an agenda to corrall you into a competition for their benefit, not yours. Introspect and figure out what "best" means for you and use that to drive you and you truly will believe you are the best because nobody else will share that same linearization as you.
For a very similar take on this, but from the Physics world, I recommend you read this paper: Physics in a diverse world or A Spherical Cow Model of Physics Talent [1]
[1] https://arxiv.org/abs/2203.09485
Human brains are only used to thinking in lower dimensional spaces but human lives intrinsically occupy manyfold dimensional spaces.
"Better" is only a meaningful metric under two circumstances:
* A one dimensional ordering, in which case all items can be ordered in relation with each other
* A multi-dimensional ordering in which one item has total domination over an another item
Take recipes for example, recipes can be evaluated based on taste, nutrition, ease of preparation, quality of writing, availability of ingredients etc, etc, etc.
Is a recipe that's easier to make but less tasty "worse" than one that takes way more time but tastes way better? Either you can "linearize" the dimensions by assigning some kind of weighting like 0.5 * taste + 0.3 * easiness + 0.1 * nutrition + 0.1 * other OR you can accept there is no intrinsic ranking and say neither recipe is better than the other, they're just different.
But what you can say is that a recipe that is worse in taste AND worse in ease of preparation AND worse in nutrition AND worse at everything else is a categorically worse recipe. That's a recipe that's at the center of the ball and not the surface.
In a high-dimensional world, being the best is trivial, almost everyone is the best except the people who are all around mediocre, people who occupy the center of the ball.
Despite this, most people fail at this task, just like how most recipes you find on the internet are categorically not the best, because their mindset does not unlock this view of the world. They're followers rather than leaders and so they subscribe to a very narrow and rigid view of what programming means and are desperately competing amongst those dimensions with every other person who subscribes to that view and they never reach close to the top because a low dimensional ball has very little surface area relative to volume.
So if there's one single piece of advice I could give you about how to become "the best", it's to forge your own path early and confidently and bravely. There are a million different roles that programmers have in society that each require a million different types of skills and the one you're going to be the best at likely hasn't been discovered yet. Follow your passions and your interests and develop a unique point of view and thrive in the intersection between areas of rare overlap and becoming the best is simply table stakes.
Whatever you do, don't linearalize your life upon metrics given to you by someone else because they have an agenda to corrall you into a competition for their benefit, not yours. Introspect and figure out what "best" means for you and use that to drive you and you truly will believe you are the best because nobody else will share that same linearization as you.
For a very similar take on this, but from the Physics world, I recommend you read this paper: Physics in a diverse world or A Spherical Cow Model of Physics Talent [1]
[1] https://arxiv.org/abs/2203.09485
At 35, I have the same goal and feel that I've actually made quite a bit of progress and am working on some very interesting projects. I'll share some of my secrets with you:
1. When you find an issue in code, search the entire codebase for it because it's probable that the mistake has been made before. For example, I once used strncpy instead of strncpy_s which got flagged in the code review. After I learned why I searched the codebase and I had done that several times before that hadn't been caught in code reviews. I could have made my week easier by not doing this, as fixing the codebase resulted in additional time, more code reviews, and more embarrassment that I made a stupid mistake many times before my team noticed. However, if I hadn't, then we could have had customers experience issues in the future, which would have been far worse.
2. With any project, build out an extensive structure of resources personally curated by yourself. Get used to documenting everything you learn, even if it is just notes to yourself, but the more the better. At my job, in my file storage area, I have a folder for documentation, a folder for tests to run, a folder for things to install to set the tests up, a folder for customer cases, a folder for freeware that I use, etc. I'm constantly building these out the best I can. Make sure that it's an area you have complete control over so that you can control the organization of it.
3. Keep track of the issues that make it out to the public, even once they are fixed it takes customers years to update so you will be hearing a lot about any issue that gets out. My team recently changed a lot, so after the dust settled I asked for a few months to do some research. I used a lot of that time to build two spreadsheets. The first is a list of every customer case that was resolved, whether the issue was on their end (environmental) or on ours, and what the issue was. The second spreadsheet was a list of issues on our end, what versions they were introduced in, what versions and changesets they were fixed in, what to look for in the logs to detect the issue, and so on. I put these files in my folder for customer cases. Then, I used the info I gathered to create a script to scan logs, look for lines of interest, and output that a probable issue has been detected.
4. Realize that other people aren't going to do these things, even if they are good developers. I've become one of the core programmers and have survived multiple layoffs. My section of resources, my logging scanner, my issue spreadsheets, they are all out in areas publicly accessible to the other devs and it doesn't matter. I'm not afraid of becoming redundant and being replaced because my knowledge is out there. Rather, it's the exact opposite. The rest of my team, even though they are skilled programmers, are not going to do the same things that I do even if I explain all the details to them on how to keep track of everything. Instead, they are constantly amazed that I can often solve issues that pop up immediately.
5. If someone finds a tool too complicated or confusing, then the issue is not with the person, but with the tool. Often as developers we are responsible for how tools are presented and explained but not who the user is. As such, it is tempting to say that the problem isn't with the tool we built, but with the "stupid" user. I call this view "Linux mentality" because I find many (of course not all) Linux users have a "git good" type attitude where they think the solution is for people to spend a vast amount of time and effort learning to use clunky tools, instead of finding better tools.
My favorite example of this came from this very forum: a comment on a post once actually said that if you don't know how to use the command line, then you have an "extreme addiction to IDEs", are "dumber by the day", and "you will be replaced by lesser skilled cheap labor inevitably". He never once thought that maybe the command line should be replaced with something better. The other example I have of this is in school when I was telling a classmate about software that I had written. He asked me why I had written it as anyone could write a script to do what I was doing. I told him that while he could write a script, my mom sure couldn't. In other words, I view complicated tools as an opportunity to either fix the tool or to write my own competing tool instead of expecting users to spend their precious time and effort overcoming the complications.
6. So far this has all been about working with people, which is the often overlooked part of programming. However, I have a secret about code as well: programming is a broken mess because it is over-complicated. Just like my last point was that complicated tools need to be fixed to be simpler, all of programming is complicated and should be simpler. At the end of the day, programming is just about defining functions and datatypes. Classes, constructors, destructors, exceptions, many of these things started out as ways to make programming easier but try to teach programming to a newbie and you'll see just how much of what we think is fundamental to programming is hard to explain why we do them.
In particular, the crux of my hot take is that I think Object Oriented Programming (OOP) is a mistake and a dead end. I'm not saying that you shouldn't use it. I'm saying that I think the jump from Procedural programming to more organized code made a mistake by going to OOP. Many people don't even realize what a class actually is: a grouping of a user defined datatype and a set of functions that invisibly take a variable of that datatype as its first parameter (Python in particular makes this more apparent by turning the invisible first parameter into a visible parameter named self). I have my own ideas about what programming should be instead of OOP, but its going to be a few more years before I'm ready to talk about it publicly, so I'll just leave this as a little teaser: both OOP and functional programming over complicate the ideas of programming and turn the entire field into a giant mess that takes years and decades to learn. I think they have missed the mark, and that there are other ways to fix the problems that procedural programming has. Until then though, it's probably still best to use OOP, but in the meantime, make sure you understand what a class actually is.
1. When you find an issue in code, search the entire codebase for it because it's probable that the mistake has been made before. For example, I once used strncpy instead of strncpy_s which got flagged in the code review. After I learned why I searched the codebase and I had done that several times before that hadn't been caught in code reviews. I could have made my week easier by not doing this, as fixing the codebase resulted in additional time, more code reviews, and more embarrassment that I made a stupid mistake many times before my team noticed. However, if I hadn't, then we could have had customers experience issues in the future, which would have been far worse.
2. With any project, build out an extensive structure of resources personally curated by yourself. Get used to documenting everything you learn, even if it is just notes to yourself, but the more the better. At my job, in my file storage area, I have a folder for documentation, a folder for tests to run, a folder for things to install to set the tests up, a folder for customer cases, a folder for freeware that I use, etc. I'm constantly building these out the best I can. Make sure that it's an area you have complete control over so that you can control the organization of it.
3. Keep track of the issues that make it out to the public, even once they are fixed it takes customers years to update so you will be hearing a lot about any issue that gets out. My team recently changed a lot, so after the dust settled I asked for a few months to do some research. I used a lot of that time to build two spreadsheets. The first is a list of every customer case that was resolved, whether the issue was on their end (environmental) or on ours, and what the issue was. The second spreadsheet was a list of issues on our end, what versions they were introduced in, what versions and changesets they were fixed in, what to look for in the logs to detect the issue, and so on. I put these files in my folder for customer cases. Then, I used the info I gathered to create a script to scan logs, look for lines of interest, and output that a probable issue has been detected.
4. Realize that other people aren't going to do these things, even if they are good developers. I've become one of the core programmers and have survived multiple layoffs. My section of resources, my logging scanner, my issue spreadsheets, they are all out in areas publicly accessible to the other devs and it doesn't matter. I'm not afraid of becoming redundant and being replaced because my knowledge is out there. Rather, it's the exact opposite. The rest of my team, even though they are skilled programmers, are not going to do the same things that I do even if I explain all the details to them on how to keep track of everything. Instead, they are constantly amazed that I can often solve issues that pop up immediately.
5. If someone finds a tool too complicated or confusing, then the issue is not with the person, but with the tool. Often as developers we are responsible for how tools are presented and explained but not who the user is. As such, it is tempting to say that the problem isn't with the tool we built, but with the "stupid" user. I call this view "Linux mentality" because I find many (of course not all) Linux users have a "git good" type attitude where they think the solution is for people to spend a vast amount of time and effort learning to use clunky tools, instead of finding better tools.
My favorite example of this came from this very forum: a comment on a post once actually said that if you don't know how to use the command line, then you have an "extreme addiction to IDEs", are "dumber by the day", and "you will be replaced by lesser skilled cheap labor inevitably". He never once thought that maybe the command line should be replaced with something better. The other example I have of this is in school when I was telling a classmate about software that I had written. He asked me why I had written it as anyone could write a script to do what I was doing. I told him that while he could write a script, my mom sure couldn't. In other words, I view complicated tools as an opportunity to either fix the tool or to write my own competing tool instead of expecting users to spend their precious time and effort overcoming the complications.
6. So far this has all been about working with people, which is the often overlooked part of programming. However, I have a secret about code as well: programming is a broken mess because it is over-complicated. Just like my last point was that complicated tools need to be fixed to be simpler, all of programming is complicated and should be simpler. At the end of the day, programming is just about defining functions and datatypes. Classes, constructors, destructors, exceptions, many of these things started out as ways to make programming easier but try to teach programming to a newbie and you'll see just how much of what we think is fundamental to programming is hard to explain why we do them.
In particular, the crux of my hot take is that I think Object Oriented Programming (OOP) is a mistake and a dead end. I'm not saying that you shouldn't use it. I'm saying that I think the jump from Procedural programming to more organized code made a mistake by going to OOP. Many people don't even realize what a class actually is: a grouping of a user defined datatype and a set of functions that invisibly take a variable of that datatype as its first parameter (Python in particular makes this more apparent by turning the invisible first parameter into a visible parameter named self). I have my own ideas about what programming should be instead of OOP, but its going to be a few more years before I'm ready to talk about it publicly, so I'll just leave this as a little teaser: both OOP and functional programming over complicate the ideas of programming and turn the entire field into a giant mess that takes years and decades to learn. I think they have missed the mark, and that there are other ways to fix the problems that procedural programming has. Until then though, it's probably still best to use OOP, but in the meantime, make sure you understand what a class actually is.
Traverse these trees diligently:
https://roadmap.sh/frontend
https://roadmap.sh/backend
Every year learn a programming language that is a whole new paradigm. Stack-based FORTH, a Lisp dialect like Clojure, x86, etc. Do this while getting as strong as you can in your main language(s). Write your own simple scripting language that solves a problem you actually run into. Maybe something like a tool that scaffolds code for you.
If you enjoyed that, take it even further. Get familiar with some more advanced data structures and patterns. FSA, abstract syntax trees, bloom filters, compressed bit vectors. Build an API, a framework and an engine to get deep into the world of being a code steward. Learn how to write and document code that goes into central infrastructure.
While you're doing this, get something like FB reader and pay $7 for premium. Have it read the SWEBOK out loud to you. Get deep into understanding software design, construction methods, testing, maintenance and all of the moving parts in the E2E process.
Note that above isn't necessarily good advice, just like all of the advice in this thread. "having fun it" or "doing hallucinogens" or "listen to some online courses" won't accomplish your goal. If some of the things above resonate with you, go for it. Mostly, just fuel your curiosity without burning yourself out.
Look at what more successful people are doing, deconstruct how you could do that yourself, and keep doing it until "more successful people" are few and far in-between.
Every year learn a programming language that is a whole new paradigm. Stack-based FORTH, a Lisp dialect like Clojure, x86, etc. Do this while getting as strong as you can in your main language(s). Write your own simple scripting language that solves a problem you actually run into. Maybe something like a tool that scaffolds code for you.
If you enjoyed that, take it even further. Get familiar with some more advanced data structures and patterns. FSA, abstract syntax trees, bloom filters, compressed bit vectors. Build an API, a framework and an engine to get deep into the world of being a code steward. Learn how to write and document code that goes into central infrastructure.
While you're doing this, get something like FB reader and pay $7 for premium. Have it read the SWEBOK out loud to you. Get deep into understanding software design, construction methods, testing, maintenance and all of the moving parts in the E2E process.
Note that above isn't necessarily good advice, just like all of the advice in this thread. "having fun it" or "doing hallucinogens" or "listen to some online courses" won't accomplish your goal. If some of the things above resonate with you, go for it. Mostly, just fuel your curiosity without burning yourself out.
Look at what more successful people are doing, deconstruct how you could do that yourself, and keep doing it until "more successful people" are few and far in-between.
1. Learn computer science to at least a graduate level. It’s ok if your college major is something else.
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.
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.
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.