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.