How do I go from an average CS student to a top-tier programmer?
Posted by babayagaaaahhh@reddit | learnprogramming | View on Reddit | 116 comments
I’m currently a Computer Science student, and I don’t want to end up as just another average developer who only copies tutorials and builds the same projects as everyone else.
I genuinely want to become a top-tier programmer — someone with strong problem-solving skills, deep CS fundamentals, the ability to build complex systems from scratch, and enough skill to create impactful projects/startups.
Right now I feel pretty average, so I want honest guidance on what actually separates elite programmers from normal ones.
What should I focus on most?
I’m willing to put my life in to this and become a great one.
Key_Use_8361@reddit
honestly the biggest upgrade for most people is just building way more tiny projects instead of waiting to feel ‘ready’ 😭
stuff finally started clicking for me once i began making random messy experiments, runable made that process feel way less intimidating too
buildingstuff_daily@reddit
build stuff that isnt a tutorial project. sounds simple but thats literally it
the gap between average and good is that good devs have been stuck on weird bugs at 3am and had to figure it out themselves. you dont get that from copying a todo app tutorial. pick something that actually matters to you or someone you know and try to build it. youll hit walls you never expected and thats where the real learning happens
also stop comparing yourself to people on twitter/linkedin who make it look easy. most of them are just better at marketing themselves not better at coding
Unhappy-Wave-5822@reddit
I went through this same phase in school and what shifted things for me was treating one non‑tutorial project like a long, messy apprenticeship. I picked something I actually cared about, shipped a scrappy v1, and then forced myself to live with it: fix real bugs, handle weird user behavior, migrate data, rewrite parts that didn’t scale. That’s where I actually learned design, not from diagrams.
What helped was adding constraints: write tests before big refactors, limit tech stack, and keep a tiny changelog of “what blew up and why.” After a few months you start recognizing patterns and your “average” feeling drops a lot.
On the tooling side, I bounced between GitHub issues, Linear, and then ended up on Pulse for Reddit after trying Feedly and TweetDeck to track real user pain points. Pulse for Reddit caught threads I was missing where people described problems in detail, which gave me way better project ideas to build around.
the_real_rcmisk@reddit
Claude Code!
SilentHashashiny@reddit
I'm sure I'm repeating here, but.....
Build. Build increasingly difficult projects. Build until it's muscle memory. Like I said in an other thread, the problem is usually not "don't know how to code" the problem is almost always "don't know how to build."
Jahnavi-builds@reddit
Start building judgement and intuition - under ambiguity: knowing which problem is worth solving, which abstraction is the right one, when to optimize and when to ship, how to think about a system you've never seen before.
It develops when you're working on something that actually matters, making real decisions with real consequences, and having your thinking pressure-tested by someone who's already built at that level.
Find ways to get your work in front of people who could tell you what you weren't seeing and then seek out problems that force you to think, not just execute.
Have you built any projects? Do you have someone who can help assign projects or evaluate?
Much_Basis_6238@reddit
Start building judgement and intuition - under ambiguity: knowing which problem is worth solving, which abstraction is the right one, when to optimize and when to ship, how to think about a system you've never seen before.
It develops when you're working on something that actually matters, making real decisions with real consequences, and having your thinking pressure-tested by someone who's already built at that level.
Find ways to get your work in front of people who could tell you what you weren't seeing and then seek out problems that force you to think, not just execute.
Have you built any projects? Do you have someone who can help assign projects or evaluate?
Lost_Frosting7106@reddit
read books and improve your soft skills
babayagaaaahhh@reddit (OP)
Which are the best books for beginners.
buttman321@reddit
read designing data intensive applications by martin kleppman after you have a good foundation
essential read you will need to crack senior interviews at any top tier company, it’s dense and won’t make much sense but just ask any LLM like claude or gpt any questions you have and keep reading and asking, if you actually understand the theory behind the concepts brought up in that book you will be miles ahead of even the average senior dev at a mid level company
smokedfishfriday@reddit
LMAO
quasar_ayush@reddit
Why are you LMAOing?
smokedfishfriday@reddit
He is saying to read a fucking book to become a well-rounded person with diverse bases of knowledge and perspectives, not to eat a stack of JavaScript tutorial books.
Ticon_D_Eroga@reddit
You must be getting users confused or something.
smokedfishfriday@reddit
What?
Ticon_D_Eroga@reddit
Read the thread again. You seem to not know who you are replying to or what the context is.
smokedfishfriday@reddit
How are you so confused here? Genuinely baffling.
Ticon_D_Eroga@reddit
Im not at all. I guess ill spell it out step by step for you if you really need me to.
OP asks for advice on how to be a better programmer. in body of post, lists areas they would like to improve in such as problem solving and complex system building. No mention of soft skills.
u/Lost_frosting7106 replies: “read books AND improve your soft skills.” the “and” is key
OP follows up, asking which books.
u/Lost_frosting7106 replies again. Note that this is the same user that recommended reading books in the first place, and recommends specific books related to different areas of coding skills
Heres where it gets weird: you appear and reply to the recommendation list with “its plainly obvious [OP] means books about human experience.” Now where in the world did you get that idea? OPs post mentions only areas of software engineering they wish to improve upon (with zero mention of soft skills), and their follow up comment simply asks for book recommendations. But you for some reason claim OP is clearly asking for soft skills books
Then you flip the script: you reply separately to OPs comment asking for recommendations, you respond “LMAO” and when asked to elaborate you say “He is saying to read a fucking book to become a well rounded person.” Presumably in this comment, “he” refers to u/Lost_frosting7106 as this is the person who originally recommended books. Yet…. u/Lost_frosting7106 GAVE his recommendations, and they do not align with what you are claiming.
So the question is are you getting confused about who said what and mixing up information from different comments and users? You shift between claiming to know what OP is asking for and that the books dont fulfill that, to claiming that u/Lost_frosting7106’s list doesnt satisfy his OWN advice. Maybe you are using OP to mean u/Lost_frosting7106 the whole time? But still that doesnt make sense, because your claim about “its plainly obvious he means books about actual human experience” is immediately undermined by u/Last_frosting7106’s recommendation list.
So yes, you have a wire crossed somewhere which is why i told you to reread the thread. Hopefully breaking it down so granularly helps.
smokedfishfriday@reddit
Pretty funny that you can’t follow a Reddit thread! I replied directly to OP with LMAO when he asked which books, then to his “why are you LMAO” with the comment you replied to.
Pro tip on being a pedant: you really gotta be right!
Ticon_D_Eroga@reddit
…. OP wasnt the one who said “why are you LMAOing”
You just keep missing.
smokedfishfriday@reddit
It’s crazy to me that you don’t understand that my reply makes sense? What are you saying? What is confusing?
Ticon_D_Eroga@reddit
And its crazy to me that they let you vote
smokedfishfriday@reddit
Here we go! Found the cryptofascist
ArchitectJL@reddit
You skipped over the soft skill comment
Lost_Frosting7106@reddit
depends on what you want to focus on
when i just started 10 years ago i wanted to deep dive into javascript so i read "secrets of the javascript ninja"
when i interviewed for jobs i read "cracking the coding interview"
recently i started "software engineering at google" which gave me insights on how they work there
if you google coding books for X you'll find plenty of recommendations
smokedfishfriday@reddit
not gonna speak for OP but it’s plainly obvious from his comment he means actual books about human experience.
The fact that everyone is missing this underlines his point.
Upset-Apartment3504@reddit
How do i work on soft skills? Tried being more social but still not seeing much growth.
Esotericdonkey@reddit
Dear god there is some shit advice in here. You don't need to read books on "human experience" to learn soft skills.
Soft skills come down to just not being a dickhead at work, and dumb down your technical explanations so normal people can understand them. That's it.
bowbahdoe@reddit
Which is a funny take. Everyone click into this guys' replies and evaluate the general tone.
You mostly engage by calling "bullshit!" In one way or another. On a quick skim I think I agree with most of your takes, but it's tough to say you approach situations with tact.
Esotericdonkey@reddit
Reddit is a platform built for arguing with other people.
That's like being freaked out when people are at a restaurant eating food. That's the whole point of it.
bowbahdoe@reddit
I mean, clearly thats the whole point to you. Which is fine, just saying not the best resume for a soft-skills coach.
Esotericdonkey@reddit
Well to be fair if you're asking Reddit for advice on soft skills, you're already fucked. So it doesn't really matter what I say 😂
bowbahdoe@reddit
Join a community theatre
clnsdabst@reddit
get a job in food service. one of the few jobs that anyone can get and is heavily soft skill based.
CambrianValley@reddit
And learn how to dance, for example salsa. It must be truly social dancing, it will speed-track ability to communicate and connect much faster than most other activities.
exapunk_11@reddit
In my situation, the best I could get is a full remote job working for call center technical support for an ISP, because it combines both my knack to solve unexpected things, but also to communicate technical jargon to non-savvy customers. And the way I know I'm doing well is because our department keeps NPS and CSAT metrics for everyone, meaning I can leverage that as evidence of soft skills and corporate goal alignment on my resume.
KlutzyCod4637@reddit
Read a chapter (full chapter) from how to friends influence people on monday take the principle apply it through out the week till staurday and don't worry you may forget it to apply it at some instances so as soon as you became aware of it apply it again then stack other principle on top of from next chapter in next week continue doing it till it becomes your nature.
Dacnomaniac@reddit
As someone who used to work in sales that pivoted to CS, this book is absolutely terrible for someone that doesn’t want to come across as a narcissistic dickhead.
KlutzyCod4637@reddit
Happy for you that you pivoted to cs as sales is overwhelming for some people for putting up an act just sell a thing or complete a quota but there are genuine people who are good at sales and want to help customer pick their best offering in the same the process I described what worked for me but who said don't modify try it over a span of lets say 6 months then you'll figure where it demands to be diplomatic where it is counterproductive and appear as fake. But ll i want to say is first read the book in a chronological order then apply it then be observat then you may say whag work and what does not.
Personally it is the reason why I am able to have a huge friend circle, having good professional relations and respond to a critic in a not so foul language.
big-bro-ryan@reddit
I think this is a bit of an unfair biased reading of the book.
I personally found the book really helpful, but it’s important to keep in mind that all of the steps it gives us must be used genuinely. Doing things for the purpose of achieving our wants is specifically what it advises against, which is what you’d say is narcissistic. It suggests genuinely taking interest in people and making their goals your goals, for the large part.
Dacnomaniac@reddit
Hmm that’s fair. Unfortunately that’s not how everyone will interact with the context of the book though. For that reason maybe it’s better getting the same context from elsewhere.
big-bro-ryan@reddit
I can see that, though not sure what other books would be on the roster. I’ve only really engaged with the one
smokedfishfriday@reddit
Read actual books about human experience. You will become more interesting. “Being more social” is not helpful if you’re a STEMlord with no understanding of the world or people
Substantial_Dare7171@reddit
Yikes, this the top rated comment? I'm not surprised that AI is replacing most.
code_love25@reddit
I'm also a CS student and I went to a polytechnic because my highschool grades weren't enough to get me to a university but that didn't stop me. I'm currently building a fullstack POS using JavaScrip to prove anyone who thought I couldn't wrong. All you need is to stay out of too much YouTube, find your path
babayagaaaahhh@reddit (OP)
Yeah iam gonna find my own path bro.
Classic-Band-8119@reddit
It takes time to learn programming. In my opinion, you need to complete as many projects as possible and devote as much time as possible. I recommend finding a project that interests you and then focusing on creating it.
ProfaneWords@reddit
Just be curious. Ask questions when you don't understand something, understand the problem space before proposing a solution, experiment with languages and concept that are outside your typical day to day work.
Circa64Software@reddit
Experience
hexmaps@reddit
Don't hope for it, do it.
ruriKatagawa@reddit
Try making game engines or compilers, they will really up your knowledge on complex problem solving
Mycropic@reddit
grantrules@reddit
The best programmers I know never aspired to be a great programmer.. they just sat down and wrote software. They are problem solvers with endless curiosity.
Appropriate-Rip9525@reddit
Also willing to use new tools like ai
Getting downvoted in 3.2.1...
therealkapitano@reddit
Best advice for you start thinking, you are on the right path
humanguise@reddit
Work through:
scandii@reddit
you're essentially asking what makes an Olympian an Olympian and the answer is incredible amount of practice.
good place to start:
https://roadmap.sh/full-stack
Lynx2447@reddit
And talent. Sometimes you have to be born with it. Lots of practice can get you very far, but even then, you may not reach the best of the best. Just got to relish in giving it your all, it's all we can do.
Biliunas@reddit
How I despise the word "talent". Invented by mediocre people who we're afraid of putting in the work.
Lynx2447@reddit
Cool story bro
wittgenstein1312@reddit
Nah. Unless you are literally trying to be in the top .1%, all the data we have paints a very clear picture: "natural talent" is a borderline myth, and to the extent that it exists, it doesn't outweigh hard work or practice. Very often what we perceive as natural talent is just natural interest. Toddler shows interest in a chess board, parents start teaching him chess very young, kid plays for hours and hours a day, is a GM by 15. Many people could do it, but most won't sustain that kind of practice time without an intrinsic interest in the subject. See:
He has written well-known chess books such as Chess: 5334 Problems, Combinations, and Games and Reform Chess, a survey of chess variants. He is also considered a pioneer theorist in child-rearing, who believes "geniuses are made, not born". Polgár's experiment with his daughters has been called "one of the most amazing experiments…in the history of human education."^([1]) He has been "portrayed by his detractors as a Dr. Frankenstein" and viewed by his admirers as "a Houdini", noted Peter Maas in the Washington Post in 1992.^([2])
josluivivgar@reddit
talent in my opinion, has a lot to do with what and how you were taught in your formative years.
if the way you were taught when you were a child included somehow (by accident or on purpose) how to reason, then you'll be good at reasoning skills and stuff derivative from that
if you were taught how to do sports, then you'll be "naturally" good at sports, there are some physical limitations given to you by your genes, like if a sport requires you to have a certain height, then there's nothing you can do about it, but you can still be really good at sports in general.
Lynx2447@reddit
I don't mean natural talent as in you're just good at some thing from the get go. I mean ability to actually do something. OP said top tier, so we can be generous and say top 10%. Even at 1 standard deviation below average iq, you end up with at least 16% of the population that are incredibly unlikely to become top tier programmers. It sucks, it isn't fair, but it's the truth.
Telling people otherwise is along the same line of "you can do anything you put your mind to." I agree somewhat with the sentiment, but it's setting a lot of people up for disappointment to be driven by such a goal with unrealistic expectations.
QuarryTen@reddit
im curious, do you have anymore examples of this?
babayagaaaahhh@reddit (OP)
Yeah, totally agree with that. Thats true.
babayagaaaahhh@reddit (OP)
Yeah I know they have decades of practise, no matter decades or centuaries iam gonna start. bcz iam tired of being average. Thanks btw, I will look on to that.
NitroSRT@reddit
Learning how to spell will help a lot too.
ChaosCon@reddit
It's also worth noting that "builds the best abstractions" is very, very different from "gets the most work done". "A good programmer" (in a business context) knows the business + customers better than they know compiler internals.
Humble_Warthog9711@reddit
You know what you need to do to improve.
Asking for advice on this is just a way to try to find external motivation for something you probably aren't intrinsically motivated to grind for
xaraca@reddit
Be curious.
Ask yourself a lot of questions. Develop an interest in understanding why things are the way they are. Figure out where the holes in your knowledge are and fill them. Tinker with code. Figure out what works and what doesn't through some trial and error.
The_KiIIer_@reddit
Why do you want that? Programming is dead anyway.
-IoI-@reddit
I'm where you want to be.
It took 10.5 years to arrive here, the only advice I can give is to show a constant hunger for solving problems.
When you truly reach your limits, say a bug has you beat, you should hopefully have some good seniors to observe how they break the problem down even further, or approach it a fundamentally different way.
It's a decade of little learns that equip you for the next stage - seeing the larger picture, and having the confidence to lay it out on green fields.
cwaterbottom@reddit
you must defeat all the other programmers
Formal_Wolverine_674@reddit
The biggest difference is usually that top tier programmers spend years building and debugging hard things instead of only consuming content about programming
apexvice88@reddit
Experience
josluivivgar@reddit
you kinda don't.
you learn with experience, having strong fundamentals is good, but that's it.
a lot of it comes from experience.
also a lot of the work the very top programmers do is actually just designing and solving niche problems.
for designing, again experience but you can learn about systems design regardless.
for niche problems that are really hard, there's really no secret sauce, you just have to do problem solving, figure out the problem, break it down, think of various solutions, get opinions from peers and then implement them.
the funny thing is that those types of problems actually take a while to solve, so they wont' be the highest performer in the team they're on, in fact they might be the slowest (at least while they work on that)
Frolo_NA@reddit
you cultivate good engineering discipline and good habits.
first thing is learn how to communicate.
then study some historical context for why things are the way they are. understand the tools and how to use them properly. write unit tests, write simple and readable code to pass those unit tests. refactor continuously. learn from others when they teach you something important
ZelphirKalt@reddit
Projects, projects, projects. Exploration on countless occasions. Do things out of being interested in them. Passion projects. Make things always a bit neater than what is widely available, in at least some aspect, or at least try to do so, and if you don't succeed, realize why it is difficult. If you are not interested, if it is not your passion to think about concepts, and wandering off the beaten track things, then forget it. You can't fake your way to "top tier". Getting to the top tier has its price. If you are in this field for the pay, instead of passion, forget it.
KikiPolaski@reddit
Think of a full stack project and honestly try to build it as well as you could. You'd be surprised at home much you will learn even from things that seem easy on the surface. Make as many projects that tackle different aspects of development and eventually you'll have an impressive portfolio that will separate you from the rest of your classmates that probably just did a simple to do app
More_Ferret5914@reddit
most “top-tier” programmers just spent way more time struggling through hard problems instead of avoiding them
deep fundamentals matter, yeah. DSA, systems, networking, databases, all that. but the bigger difference is they build things without needing constant hand-holding
also stop chasing the idea of being “elite” all the time. weirdly, that mindset makes people consume more content than they create
build hard stuff. get stuck. fix things. repeat for years. that’s basically the whole secret. boring answer, unfortunately
kryzstofiscool@reddit
build stuff, make mistakes, learn ¯\_(ツ)_/¯
joonazan@reddit
Learn to learn efficiently. Good programmers are efficient at solving any problem, programming or not, even if they have zero knowledge about it beforehand.
I don't know how to teach this and it may depend on the individual how you get there.
Big_Hippo2370@reddit
Buy a Claude max plan
babayagaaaahhh@reddit (OP)
No I don't wanna become a dump vibe coder.
junglebunglerumble@reddit
Well that's the way software development is going whether people like it or not, so if you're graduating now you'll certainly be expected to use AI coding tools during your career, and likely as a core part of your role
Beautiful-Film7263@reddit
Dont bother. If you dont use AI you will get left behind sooner or later, and its as simple as that
No-Income6479@reddit
Build unique stuff.
Kane_ASAX@reddit
Get your portfolio up as high as you can, get into a decent software oriented company and learn from the top-tier programmers at said company.
Last year(also first year working) I worked for some shitty place where my code reached maybe 5 other people in the company. No git, no version control. Backups were google drive. Half the time I was explaining to my boss how I did certain shit.
Left the place after 3 months, and started work on my project. 2 months of almost sleepless nights getting that project to a point where i can showcase it.
Interviewed at a new place, when they asked about my project I quickly spun it up and gave a demo. They walked out of the room to discuss. 5 minutes later and they told me I got the job.
To tell you that these guys are legends is an understatement. 3 repositories reaching 200k-300k lines each. And they knew how every part of it worked.
Kane_ASAX@reddit
Also, you don't want to get into a top tier company either. The systems they have in place could choke you. Small companies are also hell because the code was not written for others to see it. You want to hit that middle ground where there are some systems in place, but there could still be chaos
GrimRose81@reddit
Get out of tutorial hell
babayagaaaahhh@reddit (OP)
This is the thing which made me more dumber. Brother how can i? read docs?
GrimRose81@reddit
To add to the other guy,
DON'T WORRY IF YOUR APPROACH IS NOT THE BEST WAY TO DO IT
Make it work first. Then improve it.
Codzy@reddit
Build things! Choose something interesting. Pick a product or service you like and try to recreate it.
You’ll get stuck, that’s the point, that’s where you learn. When you get stuck figuring out X, naturally you have to read docs that get you there.
It doesn’t matter what the thing is, but build something that keeps you engaged, something you don’t already know how to build.
RadicalDwntwnUrbnite@reddit
You learn by doing, start building and study anything you copy from outside sources until you can explain exactly it's purpose and how it is accomplishing it to another student in a way they can understand it.
babayagaaaahhh@reddit (OP)
Learn by doing approach right?
RadicalDwntwnUrbnite@reddit
Yes, academic experience will get you only so far. Very few positions in the field value your ability to calculate Big-O, it really just becomes avoiding multiple levels of nested loops and making sure your database queries are properly indexed. There are no books on integrating one company's legacy system with another proprietary 3rd party system, you have to learn that on the job.
Having good soft skills is also super important, unless you're Linus Torvald and can bring the receipts being an insensitive jerk won't be tolerated. True "10x" developers are rare, most are just good enough at vomiting POC code long enough to move on to the next employer and leave everyone else with a mountain of technical debt.
If you have no ideas on what to start building maybe find and open source project that you're passionate about and try contributing. Learn about the rules of the project, their conventions and libraries, review their docs and code, join their discord and/or mailing lists. Learning to work within a team project is a great way to gain the sort of experience you'll need to know if you want to be leading complex projects.
U2ElectricBoogaloo@reddit
Experience. Experience building, experience with corporate politics bullshit, experience with communication.
Pick 2. Only sociopaths can do all 3.
kevinossia@reddit
Write as much code from scratch as possible. Read voraciously, especially other people’s code. Use AI as little as possible.
oVerde@reddit
Not just from scratch because that is one facet of a software, take on living GitHub projects then pick one missing feature to add and another to refactor.
kevinossia@reddit
No. The biggest skill gap I have seen professionally is folks who struggle to write things from scratch. They can tweak existing stuff but when you ask them to take ownership of a brand new project or feature they don’t do well.
The skill of authoring code and systems from scratch is what sets people apart.
nazgul_123@reddit
Competitive coding, probably
SilentOverrule@reddit
Stop consuming and start struggling- like building stuff without tutorials and actually getting stuck, and dn't try to learn everything, just pick one area and go deep..........All the best
deleted_by_reddit@reddit
[removed]
AutoModerator@reddit
Please, ask for programming partners/buddies in /r/programmingbuddies which is the appropriate subreddit
Your post has been removed
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.
FudMucker24@reddit
I wasn’t asking for programming buddies? What?
justaguyonthebus@reddit
Write more code. Nothing will improve your skills more than building things.
Subotai_25@reddit
Understand the why behind things
AbbreviationsSalt193@reddit
IMO you either love a discipline and hence automatically dedicate your life to it, or you never become a "top-tier" in that field.
Wooden_Dragonfly_608@reddit
I've found good programming is a lot like good mathematics. Generalize-able at it's core and modular at its configuration level.
babayagaaaahhh@reddit (OP)
I am bad at maths too, I think I need to fix that too. : )
owp4dd1w5a0a@reddit
These days, I would build a lot of thing in different languages and frameworks you’re interested in and leverage AI to review your code and your architecture and critique your work
Embarrassed-Pen-2937@reddit
Practice and time. Once you land your first job, learn from others.
ExtraTNT@reddit
Functional architecture design…in our uni it’s a module you can pick optionally, but worth more than most other modules combined…
BranchLatter4294@reddit
Practice.
ZioTron@reddit
The road is usually long, and it passes through a lot of experience.
Altough you may need different advice depending what you want to specialize in, these are my 2 cents:
Basic knowledge and understanding of computer systems. I mean things like how ram works, how os work, the iso osi stack, etc...
Never leave something unexplained, try to understand at least in rough details how everything works, even things collateral to your specific need in that moment.
Experiment and try again multiple times. you HAVE to try out your ideas, even stupid ones, your intuitions and deviation from the path.
Try to use different languages and tools, even if they do the same thing. If you don't have a policy from your emplyer or client, try different flavours of tools (e.g. for DB build one with myslq, one with pgsql, one with oracle, one with sqlserver). Doing so you'll not only find new and sometimes more useful tools, but you'll bettere understand the underlying tech, philosophy and approaches.
Some of the best developers and software architect I know are not the most knowledgable in the specific topic, domain or tech of the moment, but they how everything works, they can debug something by feel and intuition BECAUSE they have a massive experience
OG_MilfHunter@reddit
Experience, initiative, and passion are what separate top-performers and the mediocre