I have recently been reflecting on my frustrations in trying to become a better programmer, in particular thinking about what Jeff Atwood has said on the issue here and here. He quotes Bill Gates whose opinion with regard to mediocre programmers like myself is as follows:

I think after the first three or four years, it's pretty cast in concrete whether you're a good programmer or not. After a few more years, you may know more about managing large projects and personalities, but after three or four years, it's clear what you're going to be.

I care deeply about my career path and want to progress towards a role in ML engineering or research, so I want to know whether my goals outstrip my abilities or not and whether I can every become a truly decent programmer.

Some Background

I first started coding in college eight years ago and my self-assessed skill level has progressed from abysmal to merely mediocre. I don't know whether this is just because of my recurrent mental health issues or if it reflects something more fundamental about my ability to problem solve. I graduated in four years with a degree in CS and was immediately employed at a tech startup where I became depressed and as result resigned after little over a year. Then I bounced around for a bit before starting a master's program in data-science, which is where I am now. I was told by my advisor I was one of the best students in my cohort, but it doesn't mean much to me, as I doubt most of my fellow students could write FizzBuzz.

Issues I Struggle With

While I have always had a good ability to understand abstract concepts like calculus, data structures, and algorithms, I deeply struggle with remembering command syntax and other important details of software implementation and have to spend most of my time reading documentation to refresh my memory. For example, I don't find it too hard to code up basic problems in project Euler but will become mired for hours or even days trying to properly configure my package manager because I can't remember the documentation after I have read it.

I am also easily derailed by any task that requires context-switching, as by the time I have looked up the solution to a problem online, I have forgotten what I was doing in the code and have to reorient myself with what I was working on before.

  • 8
    Observation: one article is 15 years old, the other is 18 years old.
    – DarkCygnus
    May 11, 2022 at 21:37
  • 10
    No intention whatsoever to armchair psychologise, but as a fellow programmer who has ADHD, read up on the condition, as your section “issues I struggle with” is very reminiscent of common symptoms. There are both treatments and helpful strategies if this applies to you. If you hear “best in your cohort” and immediately think “that doesn’t count”, also look up impostor syndrome. And, for the record, all that “innate coding ability” stuff is bollocks.
    – Ottie
    May 11, 2022 at 21:44
  • 1
    Syntax is irrelevant, that's what Google is for. The question is more if you can write code or you can architect software. I can competently do the former but not the latter, and that is the point where I decided I do not want to proceed as a programmer. May 12, 2022 at 8:35
  • 3
    @EikePierstorff - no, that's what Stack Overflow is for ;-)
    – RedSonja
    May 12, 2022 at 12:11
  • 2
    You wrote "I don't know whether this is just because of my recurrent mental health issues..." Have you got professional diagnosis and help ? It may be helpful to fix the root cause if that is the real problem. May 12, 2022 at 22:25

8 Answers 8


I suspect you're worried about the wrong thing. I have a background in AI, ML/data mining, and software development with a PhD and 35 years in industry and research, so my perspective might be useful to you.

When I think of a good programmer, I think of someone who --once they have a bit of experience -- can identify a good abstraction for a problem, design a good solution, design a good API, implement the solution in a suitable programming language, test the code, stuff like that. Someone who can design and develop a sizeable piece of software.

In data science/ML/AI (whether in academia or industry), you don't necessarily do a lot of that kind of programming. Yes, you write code, but it's usually short scripts that make use of existing libraries. If you invent a new algorithm as part of your research, you need to be able code it. You might even need to optimise it to make it perform better, but many researchers would need help with that. Your code doesn't have to be "good" in the sense of being well-designed; the focus is on the algorithm, not your particular implementation. Researchers do not need to be "rock star" programmers.

However, nothing you've said leads me to believe that you aren't a good programmer. Some of the issues that you describe become easier over time, either because you become more familiar with a particular language/OS/package manager etc., or because you are familiar with similar systems. As for not remembering the command syntax after reading the manual, that is not a red flag. I frequently have to look up things like that. The fact that you have some humility about your skills is a good sign. Despite the stereotype, I find that the best programmers tend to be modest.

  • 9
    +1, and I'd add this: Stop so blindly ascribing truth to half-baked quotes of rich men, because it has never been proved that "CEO of a huge tech company" implies "talented programmer".
    – LoremIpsum
    May 12, 2022 at 0:11

You're thinking about this quote too deeply.

Being able to be a career programmer ultimately boils down to two things:

  1. Can you solve problems?
  2. Can you work well with others?

If the answer to both of these questions is 'yes', you're well on your way to being an excellent programmer. If the answer to either of those questions is 'eh, kinda' or worse, the answer to that is practice.

Practice both enough, and they will become part of your mindset. When it becomes part of your mindset, your mind will automatically look for the solutions to technical issues and ways to navigate the human ones. This is what is meant by:

after three or four years, it's clear what you're going to be.

This isn't deterministic, however. The quote above assumes no effort to adopt a new mindset or to make adjustments. If you are changing your mindset, your course can always change.

  • 1
    I have been programming for about 6 years now. I have only really committed to doing it for a living in the last two years. My new motivation meant I learmed more in the last two years than the four before it. No real hard and fast rules for how long skill takes to develop.
    – Neil Meyer
    May 12, 2022 at 19:33

You can probably do anything if you apply yourself and have the right opportunities.

Nothing you have described seems insurmountable to me. I'm not a developer but the fact that you got a degree means you can apply yourself to some extent.

I don't think you need to be the best to be a decent programmer and make a career of it. I know a few professional developers with very different abilities. It's just like any other profession. No need to push yourself forever, you can find your comfort zone and sit in it, many people do this and are very valuable employees.


There's nothing wrong with being mediocre. Not everyone can be, or needs to be, the best and no matter how good you are you will always meet people who are better than you. Simply doing work satisfactory to your employer and getting paid for it is a perfectly respectable way to live your life.

However, I think you're worrying about the wrong thing here. It is likely that your experience of a working life as a programmer will be closer to your time in the startup than your time studying. If you found that working as a programmer caused you to become depressed, that is a much bigger concern than whether you're meeting some arbitrary metric of programmer quality. You should seriously consider whether a working life as a programmer is really for you, and investigate alternatives. Your mental health and happiness are too important to gamble with.

  • Nothing wrong with being mediocre? Surely all programmers should be above average? :) May 13, 2022 at 10:43

In all honesty, the fact that you don't have an overblown conceit of yourself is a signal to me that you may have the makings of a good programmer. In the early days of being a professional programmer, it is very easy to feel overwhelmed, particularly by the sheer amount of information that you're expected to absorb, much of which is never even hinted at in college. But after a while, there is a moment when something clicks and suddenly you start to feel like you have a general grasp of how things work, even if the details are still a little hazy. The key at that point is to have the self awareness to realise how little you still don't know and apply yourself to learning it. In my experience, becoming a programmer requires work, lots of it, so it's entirely natural and common that you'll feel that you don't know anything at the start of your career - because you don't! So being aware of your own limitations and having the humility to learn seem like good, not bad, signs to me.


Some aspects of being a good programmer are easier to improve than others.

Learning design patterns, good interface design and clean code principles, for example, is easier than increasing one's capacity for algorithmic/logical thinking.

Therefore, if I were you, I'd focus on the intersection between what's easiest for you to improve and what will have the biggest impact on your career.


One part of being a good programmer, is choosing the right tools. One of the best paradigms for platforms is having best practices as preset defaults and leaving the coder to fiddle only with the relevant details. So if you find yourself not remembering something about a tool, it is a usability problem (of the tool), not a problem in the user. Steve Krug famously summarized, Don't Make Me Think.


Your problems seem to me to not be solveable by a non-therapist. You look like you have some sort of depression that may stem from a lack of purpose.

This lack of purpose may make it hard for you to motivate yourself to the level required to excel at your job.

You may also have an extreme case of imposters syndrome. You may be a much better techie than what you give yourself credit for.

Who is to say? Without knowing you personally nothing on the matter can be said with any amount of certainty.

What I can say with certainty is you should tell this post to a therapist. He or she will be much better qualified to help you.

You can ask the therapist what his or her opinion is on Logotherapy. It may help you.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .