Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Ask HN: I'm afraid I will always be a mediocre developer
89 points by bndr on Oct 20, 2013 | hide | past | favorite | 86 comments
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.




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.


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.


I don't agree, you CAN learn creativity. Watch this great lecture from John Cleese from 1991: http://vimeo.com/18913413


You should post this on the front page


Meh, I beg to differ. To each their own, I suppose.


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! :)


I'm 37 , unemployed and took up 'coding' as a means to pull myself out of what by U.S. standards is poverty. No healthcare and I live basically in a hole in the wall of this ladies trailer. I don't know how you can become 'better' but if you ever want advice for dealing with sever hopelessness I can help. First be grateful that you hierarchy of needs are met. Presumably you have health insurance thus if you have say, a rotting tooth in the back of your face like I do...you could probably get it checked out before it infects the rest of your system. After being grateful, the next thing to do is realize that nobody gives a flying fuck what you do and the world is cold. This will allow you to truly realize the opportunities you have as your dispose and put your gratitude on overdrive when any anomalies of concern do seem to present themselves. Next, exploit every resource you have to 'get better'. The computational power of a mac mini is actually quite a lot in the context of the computer market over the last 20 years. Don't look at as programming, look at it as turning nothing into something. If you want to 'get better' first find out exactly what you are not good at! Are you a great programmer but are shitty at being "creative"? Are you creative but can't seem to express it through code as much as you would like? Are you bad at reading other peoples code? etc etc etc. Blatant honesty about what exactly your weak points are can force you to zero in an fix it but first you might have to conduct a self-imposed research project to even figure this info out. Anyway, don't take this post too seriously, I'm a nice guy really. I just felt being a bit brash and off the cuff for a moment. I'm sure you'll continue to achieve. bye bye


I hope things get better for you really soon. And thank you for reminding me to be grateful for the things i've got.


Sounds like you're in a rough spot. Hope things improve.


Sounds like he's in the right place, too! :-)


Hey, I hope things improve for you soon! Don't give up!


Regardless of your situation. This is wonderful Advise. Thanks.


I'm afraid I will never be a software developer. Seriously I am not sure I'll ever be able to make a living developing software. This makes me sad although not that sad, from this realization I just get a "man this sucks" feeling. I'll keep doing what I like until I die, and I like computers. I write code just for fun and because I want to solve my own software needs. I have zero discipline, sometimes I spend weeks with out learning anything about programming, sometimes I am on a learning sprint and I read so much I get sick of it. Right now I am at college studying on a related subject but I don't know if I'll even be manage to pass this semester. I don't really care I am to much of a hedonist, I should be doing homework and here I am slacking in the internet. As I say why worry you'r going to die anyways. If I fail fine, if not even better. Seriously when humans are extinct not even the greatest of us will be remembered. Do what you like and try to be happy, if you can become a great programmer you will, if can't you won't. Whatever can be will be, whatever can't be won't be. Our actions affect our future but there is a limit to what we can hope to accomplish.

TLDR. Try your best and stop worrying about the outcome. If you can become a great programmer you will, if can't you won't.


Sounds like you need to find something so worthwhile you'll work to support it. That might be a sort of work itself, a team, a family... Good luck, I hope it's the work you end up doing that you love so much!


Specific advice: read, study, and practice SICP:

http://mitpress.mit.edu/sicp/

http://ocw.mit.edu/courses/electrical-engineering-and-comput...

It's a book that will permanently upgrade your perspective on creating software, in a way that's language-agnostic. To start, get and install MIT-Scheme and Emacs, then follow along with the videos. And/or dive into the book and do the exercises.


If you feel mediocre then you probably aren't being challenged enough in the role you are currently in. You aren't going to be writing code to send rockets into space if you aren't working for a company like SpaceX. You can try working on stuff like this in your spare time (which you may have to do to land such a position,) but nothing will advance you in that area like doing it as your bread and butter will. If you want to be working on big problems, then you have to go where the big problems are. Always be looking for your next opportunity to level up.

Also, history makes legends. People don't feel like legends at the time of their making. Some of the greatest stories in tech were created by people who were mediocre coders, had no idea what they were doing and probably wouldn't have been doing it if they knew any better. The reason these people turned into legends is because they nailed far more important elements than brilliant coding. They could sell, they could market, they could ship code and they were relentless. Grinders are ugly, but they are the engines that drive the world.


That's great piece of advice. There's a big difference between being mediocre and working on (what seems to be) mediocre project.


Im surprised nobody has mentioned that this is a case (or variant) of "Impostor syndrome" (from Wikipedia [1]):

"The impostor syndrome, sometimes called impostor phenomenon or fraud syndrome, is a psychological phenomenon in which people are unable to internalize their accomplishments. Despite external evidence of their competence, those with the syndrome remain convinced that they are frauds and do not deserve the success they have achieved. Proof of success is dismissed as luck, timing, or as a result of deceiving others into thinking they are more intelligent and competent than they believe themselves to be."

Feeling "as if you don't belong" or that you were falsely placed in a position (by accident, etc.) is a very common feeling among high-achieving students and adults (common, for example, in medical schools and graduate programs).

to the OP: you are clearly achieving success in your career (know several languages, challenging yourself to additional), and the fact that you read HN and have a sense of what makes a project great is important. There's been good practical advice elsewhere in this thread, but I feel that it's important to point out that your underlying feelings fall under a broadly typical pattern as well.

[1]: http://en.wikipedia.org/wiki/Impostor_syndrome


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!


First off, look at some of your older code. How recently can you go back and look at some of your older stuff and thing, "Wow! I wouldn't write it like that now!"?

If it's not more than a year or two ago, then you're a constantly improving developer and I wouldn't be too concerned. However if you're still writing things exactly the same way 5 years later, you're either not learning, or you've got some awesome niche where you're almost the only VBA developer in your town and you're charging out at $1000+/day. ;-)

For me, probably 90% of the time, I love programming for the fact that there's always cool stuff to learn. But the other 10% of the time, I hate programming because you've always got to learn new stuff. (only half-joking... so it's realistically 5%)

It's an awesome field to be part of. You don't necessarily need to compare yourself to the gurus. I'll never ever be a Carmack/Torvolds/Knuth... But in my field, I'm pretty decent and am appreciated by my clients.

And the day I stop learning is the day I'm dead.


wow, awesome reply, thanks. That's almost exactly how I feel about the subject.


I do not know how you can be a better programmer aside from simply doing a lot of programming, thinking about programming, solving problems, and following your interests down the rabbit hole of gaining knowledge.

I can, however, offer you some take-aways I've come up with trying to answer that question for myself. Though I caution you that adopting my solutions to the problem are as likely to help you as wearing my glasses is to correct your vision. (they might be the same prescription but probably aren't)

Firstly, commit yourself to stop comparing your life to the best parts of other people's lives. You get to read about the successes of others, it's far less common to read about their failures. (Unless the failure is presented as a contrast or starting point to show off a later success). This skews your thinking into believing that everyone else is producing all this wonderful stuff while you're just grinding out crap.

Compare yourself against your past self, not other people. Bonus points to commit to that comparison across every aspect of your life and not just your programming ability.

Secondly, decide what you mean by being a "better" developer. What does that mean exactly? The ability to work in multiple languages? Having a deep knowledge of one language? Having a large portfolio of completed projects? Something else?

Do you even really want to be "better" or do you really want recognition or more money or something else?

Thirdly, take the long view and take small steps consistent with achieving your big goal. Example: if you want the ability to work in multiple languages, take the small step of choosing ONE new one and spending 6 months or a year digging into it. Think of a fun little project and see if you can implement it using that language. Repeat that step for a different language for another 6~12 months. How many repeats/years of that will result in you become proficient in multiple languages? If you want, you can combo that with writing up your experience in a blog presenting it to a tech group... it seems to me that combo cold easily result in gaining reputation, expanding your portfolio, opening you up to job offers (more money), etc.

What do you care if it takes you 5 years to accomplish all that? What else were you going to do with that time? (and if using that time for something else would have a higher value for you then forget about being a "better" programmer and instead spend the time on whatever else fulfills you and makes you happy)


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 :)


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?


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

It's less about the language one uses and more about how one uses it to implement the ideas one comes up with. Amazing things can be done in any language, just some make certain ideas easier to implement than others. However, exposure to various languages (especially ones outside of the paradigm one uses the most) helps with becoming a better programmer. I'd say it would help you to have some exposure to functional languages more than Go will help. Try using a Lisp variant (common lisp, scheme, clojure, racket, etc), F# or haskell. You'll learn a number of things you can apply to imperative languages such as PHP and JS (such as lambdas/closures, monads, macros and you'll better understand recursion as well).


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!


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.


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.


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.


It is not about being brilliant but about solving the problems that get on your path while making something.

When I want to learn something new or a new language I always set up a project that seems interesting to me, this will force me to solve all problems along the road towards completing that project, when done I often know enough about the language to go ahead and use it in the real world.

You learn from mistakes but most from other people's mistakes.


"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.


Being a great developer can mean many things. There are many kinds of trees and they grow different, and produce different fruits and nuts. The question is how you grow and maximize what you can do.

I would suggest a couple of things.

- the first habit great developers of all stripes must cultivate is self-introspection and an effort to solve problems of one's own coding style and approach.

- the second habit of a great developer is to focus on producing great documentation for your code. This is important because it helps you see the code from a less immediate and more long-term perspective.

Those two habits are the most important (and most frequently missing!) habits regarding development of development skills I can think of.

In my experience if you are deeply introspective of your own code quality and your documentation approach, you will develop a clear vision of problems that will make you a part of breakthroughs you hadn't foreseen.


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).


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.


You can be a mediocre programmer and do great things. You can be a great programmer and not achieve the success relative to your level. It's all completely relative. I'm an ok-to-decent programmer and turned a sizeable profit on $7k worth of time. I'm not putting my kids through college but improved my family's life and I'm content with that.

Learn as much as you can. Build often even if they never see the light of day. You will always improve your skills by being active in it. At some point it will make you better for you. Don't compare yourself to others. Be better than you used to be. You'll be fine.


Become a project manager. Everybody is not cut out to be excellent coders, but you probably have heaps more of knowledge than the average joe.

Having a project manager that knows the development process, understand coders and know the basics of programming is so valuable both to us developers and the overall success of a project.

Also, there are a lot of different types of coding and niches. I can't wrap my head around most algorithms, I'll never be nothing but a mediocre C coder. Cryptography makes my head explode... But I know how to craft and architect a web app that scales and lives on without (too much) technical debt.

Turn your weakness into a strength.


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.


The fact that you asked the question puts you on the above average developer side. A lot of developers went to school for it because they saw $$$ an wanted a career to make good money. But many of those don't try to do any learning beyond what they took in school, it's just a job to them. If you actually like programming do it in your spare time even though it's also your job and like to learn new things about it then don't worry that you are ahead of or behind others. Just keep learning and asking questions and you will be fine.


deliberate practice.

that means continually practicing harder and harder problems. The very things you're not good at.

I think it's easier to explain with an analogy.

What does an Olympic figure skater do that regular skaters don't? The practice the hard moves and when they master one move, they proceed to the next move degree of difficultly.

First they practice a single axel jump.

Once they master a single axel, then they practice a double axel.

Once they master a double axel, then they start working on the triple axel.

Frankly it just takes a lot of mental toughness. To get better you always have to move on to something new that's difficult for you.


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.


Get a book about compilers. Write a little compiler from scratch. Go around telling everybody about the compiler you wrote. It'll make you feel really smart! Trust me, it works!


Hmmm ... I'd say the fact that you're concerned about it means you'll have a long successful career. Ninety-nine percent of software development is the ability to be persistence and unwavering in pursuit of your goal (working software). The other trait that every great developer I've met has is that they're always learning. It's the people that think their education stopped when they graduated from college who won't make it in this field.


I used to fear that also, until I made a conscious effort to learn (Pharo) Smalltalk and (Racket Scheme) Lisp. I spent so much time and energy on these two. I practised and practised and practised. And then practised some more. After what seemed like an eternity, I looked at other people's code (Java, C#, PHP) and could instantly identify deficiencies and ways to improve them. So my advice: learn Smalltalk and Lisp, and then practise till your gums bleed.


Do or Practice something for 10,000 hours going through in and outs of what you are doing, then comeback and say me that you are a mediocre developer. Sounds good?


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.


Become a manager. A good manager is often a mediocre developer. When your job is simply to make sure people are doing what needs done, and how long something should take, and sort out which of two people have the "more right" solution you don't have to be a great dev, just a person who can keep track of things.


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.


Your are falling for the Survivorship Bias: http://youarenotsosmart.com/2013/05/23/survivorship-bias/ . Keep polishing your skills. Learning Go is a good step.


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.


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. :)


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.


i think this brings to mind the good ole "im i talented?" question. trying your hand at many things and still you cant find what flows easily/effortlessly/creatively that you enjoy doing and when you try trying again you fall hard? for me soccer was my bane. love it so much yet, i messed up my shoulder, broke an ankle, fractured a femur trying to do what i like and hopefully get better at. in the end, its up to you to either accept some humans have limitations and some can bore a hole in it and soar high and even some teleport to the other side of limitations. we're all different yet, the same.


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)


Just a double-post


The only way you can become better is by reading and writing code. If there is something you do not understand dig deeper and learn how it works.


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.


You know what they say, if at first you don't succeed, then middle management might just be for you


Output, or "ABC": Always Be Creating (leave Coding to the geniuses, and just build stuff).


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.


Thank you for this, always inspired by your thread.



:)


Simple: find a development project you are truly passionate about, and jump right in.


That fear is what will prevent mediocrity...




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: