Ask HN: I'm afraid I will always be a mediocre developer

89 points by bndr ↗ HN
Hi everyone!

I'm afraid I will always be a mediocre programmer. How can I become better?

Everyday on HN I see some coder come up with an amazing algorithm/piece of code/software, and I think to myself "WOW, that is brilliant" and the next thought is "I will never be as good as these guys".

Can you give me any advice?

P.S My daily job involves php/js, but I'm trying to move on from them to some other language (Learning GO now).

Thank you.

92 comments

[ 3.3 ms ] story [ 160 ms ] thread
In my opinion being good comes down having good ideas. You can be genius at your code, but if you have no ideas on how to use that skill to make something awesome, you're still a mediocre programmer. Therefor, if you can learn to think what would be needed or what could be done better and you have the skill to do it, then do it.

Sometimes to get anywhere, or get any recognition is to just build cool stuff, even if they won't bring you any money. Just keep building stuff on great ideas and always have quality in your work.

Don't feel obligated to stay at your current job if it doesn't challenge you. The best decision I ever made was leaving a corporate programming job where I was bored 95% of the time.
I second this. Moving out of your comfort zone because you have to will make you have to learn new skills.
Thanks! I'll definitely think about that.
First of all, it's so great that you have a desire to get better. That alone puts you ahead of most people. So, how do you actually get better? Take an inventory of your weaknesses. Now eliminate them, one by one. Next, start building stuff in your spare time. Read code on github, fork repos, create your own. A lot of what you make won't be good, but keep at it. Over time the projects that you keep working on will improve, your weaknesses will be eliminated, and you'll be doing side projects that stretch you. If you keep at it you'll be great at whatever you set out to be great at.
Why don't you just pick something and try to solve it? That will make you read books, online tutorials, maybe a new programming language and that's how you improve yourself. Some coders I know started to learn math just because they wanted to solve something.
Mediocre programmers (or members any other profession really) will never realize or admit their own mediocrity. The fact that you've done this, and are actively trying to improve, already puts you ahead of most. Don't have any specific advice for you though. Just thought you could use some encouragement.
I don't agree with this, because I'm a mediocre programmer. I won't be forever, granted, but I most certainly am today.

I study and work hard at improving, but that doesn't "put me ahead of most"--not today, anyway.

It does put you ahead in the process of becoming a great programmer, because many have yet to realise this (or that's how I interpreted cjf's comment).
Keep working. I've been a developer for over 25 years and still learn something new almost every day. Working in other languages will definitely help give you new perspectives.

I don't know if anyone reaches a point where they feel they are "brilliant" developers. Maybe if they have a big ego they do. I'm competent in certain niches, and I think that's all most developers are.

How can you learn something new almost every day? Can you give a couple examples?
(comment deleted)
The other commentators haven't mentioned the fact that perhaps you could instead try to accept the fact that there is nothing wrong with being mediocre. By definition, most people are. Try to look into why you fear being mediocre? Also, perhaps you just happen to perceive yourself as mediocre? Sometime the want for change is the ill that needs to be addressed, and not the perceived faults in yourself. Good luck however you proceed!
The other commentators haven't mentioned the fact that perhaps you could instead try to accept the fact that there is nothing wrong with being mediocre. By definition, most people are. Try to look into why you fear being mediocre? Also, perhaps you just happen to perceive yourself as mediocre? Sometime the want for change is the ill that needs to be addressed, and not the perceived faults in yourself. Good luck however you proceed!
Identify some great programmers that are solving problems similar to the ones you are working on and mimic them. Ruthlessly. If you fall short then try again and repeat until your solution is at least approximately as good as the best you have seen. If you ever exceed the programmers you mimic, find someone even better.

Due to the nature of programming it involves solving new problems all the time so there will in general almost always be someone better than you at solving problems that are important to your current project.

How would I go about finding great programmers to follow?
Look at the libraries you're using. For me, it was caolan/async. One evening, I sat down and thought about how he was doing it and I recreated all the most interesting features without looking at the code. In passing, I found a lot of opportunities to add more cool features, so I did. It was an enlightening experience, even if no one ever uses my piece of code.

It has also been mentioned by almost every single recruiter I've talked to since I posted it to Github.

I second this. Looking at the libraries you are using have many positive effects; its due diligence, its relevant and a great way to learn more about the power of your dependencies.

Personally I also try to discover best practices on how to solve problems in my domain, and learn why they are best practices.

arvidj, you are hellbanned.

Your comment reposted: The other commentators haven't mentioned the fact that perhaps you could instead try to accept the fact that there is nothing wrong with being mediocre. By definition, most people are. Try to look into why you fear being mediocre? Also, perhaps you just happen to perceive yourself as mediocre? Sometime the want for change is the ill that needs to be addressed, and not the perceived faults in yourself. Good luck however you proceed!

I don't think so, their comment shows up fine (for me at least)
Develop a sense of curiosity, get into the habit of asking yourself why things are they way they are, even if you don't need to know the answer. Read widely about technology and follow the threads to new topics. Try things just to see how/if they work. Go's a great start - it'll get you thinking about programming language design, concurrency, networking, etc., and all of those will lead to something else.

You'll also need to be comfortable thinking about things you don't understand. If everything you do is familiar to you you're not thinking broadly enough.

Let's say for a minute that there are only 1000 developers that post stuff to HackerNews. Each of them only needs to make something neat once every 3 YEARS for the the front page to have one instance of brilliance every day.

Now imagine there are 10k developers that post stuff to HN. Each would only need to produce something amazing every 30 YEARS to get something on the front page!

It's hard to see your own improvement -- your day-to-day performance doesn't seem to be any different. On the internet, it seems like everyone is doing cool stuff all the time and you are falling behind. You aren't alone, I get this feeling all the time; we are always our own toughest critic and usually the last ones to praise ourselves.

So don't sweat it! If you make something awesome in the next few years, you are ahead of the curve :) Why not start today?

Take an hour this week to look back at your own year's accomplishments and I think you'll find that you've done and learned more than you thought.

Thanks for the encouragement!
I wasn't kidding about taking an hour either - go do it and write up your accomplishments on a blog, even if you are the only reader (though I'd love to read it!). I've done it myself for the past two years and it always helps me when I get these kind of feelings.
Writing to blog about my mothly/yearly accomplishments actually sounds like a very good idea. Thanks! :)
Totally agree with this. Learn by doing. Just create something, drop some acid, create some more, and sooner or later you'll find that you accidentally built something spectacular.
Drop some acid? Yeah, I guess you could, but it's far from a free ticket. Besides, it's really easy to be creative without it.

There's just one thing you have to do -- think.

Just always keep your eyes open to the things that don't work as well as they should, and work to improve them. Just start. Start small. Build out the core, then go bigger. Let it consume you.

A million great ideas come out of any kind of work you feel passionate about. Just find something that sucks and improve it. Once you get the ball rolling you'll have more ideas than you could build in a lifetime.

Dropping some acid is effective though, the statement that you can do 8 years of therapy in 8 hours still holds - but like any drug, it's a tool - what you do with that tool/power is entirely up to you.
It was more or less just a funny, but not so well-received. So hard to convey lols through text.

But, your point, it's really easy to be creative without it, I would argue against.

You can't teach creativity. You can't learn creativity. Creativity is something you're born with and developed subconsciously. You can't consciously be creative. You can consciously think out of the box, sure, but as a true creative individual myself, there's such a fine line between the two.

Meh, I beg to differ. To each their own, I suppose.
I don't agree, you CAN learn creativity. Watch this great lecture from John Cleese from 1991: http://vimeo.com/18913413
(comment deleted)
You should post this on the front page
Output, or "ABC": Always Be Creating (leave Coding to the geniuses, and just build stuff).
Getting better for the sake of getting better does not scale. Is there anything you would like to do? any project? best ideas come when you are doing something and realize that whatever you are doing could be done better. Listen to your "what if.."
Now that you mention it, there's a project I wanted to do, but dismissed it because it was too big, maybe I will try and build it. Thanks!
There is really only one way.

Deliberate practice.

This is the thing that nobody ever understands. You absolutely have to practice, in anything.

I'm a high-level pool player, and because of deliberate practice, I went from the worst pool player in town to maybe top 10 in approximately 1.5 years, because I practiced. Everyone else just plays with friends and in matches, never practice.

That gave me a real appreciation for the stark difference in the two approaches.

(comment deleted)
Thank you for this, always inspired by your thread.
How long have you been at it? Any reasonably intelligent person can become a great developer if they work hard.
Well I've been coding in one way or another since I was 14 years old, now I'm 22. So that makes it 8 years now.
There's a long time ahead of you. Work with smart people and work on your skills regularly. You'll get better before you know it. You'll be surprised to see how much progress you can make by just making incremental improvements regularly.
"Hi everyone! I'm afraid I will always be ugly. How can I become prettier?

Everyday on E! I see some model/movie actress and I think to myself "WOW, she is gorgeous" and the next thought is "I will never be as good looking as them".

Basing your self worth on comparisons to those you see in media is the road to ruin. Don't sweat it, and realize that you are seeing the best people on their best days on HN.

Should I not try and measure up to the best people on their best day?
IMO you should aim a little higher, just know the road might be long, and keep your nose in it.
Everyday on HN I see some coder come up with an amazing algorithm

Amazing algorithms don't always make for maintainable code. Most of being a good programmer (like any other job) is about being hard-working, diligent, and thinking about your customers, including the programmers who will have to maintain and extend your code. Anyone can learn to do that - but the most "brilliant" coders sometimes don't.

Yes. Brilliance is overrated.

Most of the day-to-day challenges we face require solutions that are well-thought-out, well-designed, and well-implemented. Brilliant algorithms are not a feature in and of themselves; they are only useful if they solve the actual problem at hand. And even when they do, they often need dependable, well-written, "run of the mill" code to support them and flesh them out.

I would rather work with a team of people who are diligent, dependable, and thorough than one or two brilliant aces. And I would rather my software be written by the former as well.

Like many here I've been a developer for ages (30+ years in my case). I know loads, and there's loads I don't know. Sometimes I feel like i'm a freakin' genius, other days like I should probably pack it in.

It's how we're made (humans).

Note that most of the stuff companies release isn't all that special. But it sells. Programming is never really going to be 'won' - marketing wins all the time. A lot of what you see around you is actually marketing. Just cover your eyes and do your best :)

Building projects that are interesting to you can be the best way to learn and improve. They allow you to take risks and be bold -- two things almost universally discouraged at 'real jobs'. Finish these projects and take what you learn in the process to make the next one even better.
A brilliant programmer can get noticed across all of the internet.

Paying attention to the smartest and most accomplished people on the internet and matching yourself against them is likely to be hard on your ego. I recommend not doing this.

Getting better than you used to be is a more reasonable goal. (In lots of things, not just programming.)

On the programming side, studying Go sounds pretty good. Give yourself an attainable-seeming project and go after it. I think pg recommends picking something you think you can finish in a month--that sounds pretty good to me.

Good luck.

The good thing is, brilliance doesn't have to do anything with IQ, it just has to do something with hard work.

So try to find a small project that you really, really want to build. Then build it, and see how people use it. That is the most amazing thing as an engineer anyway. :)

You've got me thinking about what it means to be a 'mediocre' programmer.

I'd say there are two types of mediocre programmers. The first writes just ok code. It's structured ok, not great, it's efficient, but nothing special.

The second type writes ok programs. Your basic I/O stuff. The UX is ok, it works, but nothing special.

Now, which would you say you are?

The other of the potential of each of these programmers is, for the person who writes ok code, but the things they make code do are amazing! The code may not be beautiful, but they take on challenges that few others do, and it works.

The second type are the people who make mediocre products, but if you actually look at their code, it is brilliant, beautiful, perfect.

Which are you? Which would you prefer to be?

Of course, their are people who have both and that is the ultimate goal.

Everyone is still figuring it out, even the people you look up to. Not just programming or whatever skill you happen to be talking about, everything.

It's OK to doubt yourself, but try to get a better view of your skills, accomplishments and improvement once in a while.