Ask HN: I'm a terrible developer, what now?
I've been programming for a while purely as a hobbyist for many years and as a professional for less. I've come to realize I'm not very good at it and thats unlikely to change. I have basically no CS knowledge and am not even really that great with the "practical" stuff despite having been at it for so long. There's not a single language I'd consider myself good with, maybe one or two I can write and maybe one I'm ok with. I can read most code and I suppose consider myself well read when it comes to tech in general, in that I have very surface level familiarity with all sorts of things many most people have never heard of, although I must stress the "surface level" part. Its good for temporarily sounding smart or experienced, but most of that however is unfortunately useless. I can recall my last interview tripping up on questions about very basic OOP concepts, which you'd think I'd have internalized now and there's no way in hell I'd make it past a phone screen for your average whiteboarding company. I know many people much less experienced or even relatively new who are significantly better at this. I suppose that some people are simply more intelligent or at least more inclined to the proper skills than myslef, which isnt neccesarily good or bad, more of just a fact. I also suppose that I'm an ok "hacker" in that I can get very interested / fixated on certain problems, although my solution is more likely to be a complete mess.
Main problem is I'm not sure what quite to do about it. I'm not sure this is a "try harder" type solution, as I've been at it much too long for brute forcing to be realistic, but most of the alternatives seem dreadful. Not sure what options I have given my strengths and weaknesses.
259 comments
[ 3.0 ms ] story [ 283 ms ] threadNot having deep knowledge on particular subjects, not knowing OOP, being a generalist - these are not signs of being "terrible". Everyone has blind spots. Some people work on font rendering or audio codecs their whole careers and don't know how to build a decent web app to save their lives. That's ok.
Another issue is that it's entirely possible that your current role doesn't challenge you to learn or retain CS concepts nor deeper aspects of the practical tools you use. Many jobs can be done very well using the same shallow toolkit repeatedly. If that's the case, it's not really a question of your ability, but maybe you can start actively looking for projects to force yourself to start learning more.
Employees are an investment. An employee who can take the initiative to flag-up areas that they could benefit from training is valuable.
If you don't enjoy it, find something else! If you hate it so much that it makes you suicidal, doubly so. I tried doing the "practical" money making thing, and it made me miserable. Programming is the thing I found later that brings me joy.
Find what brings you joy, and do it. Until you know what that is, explore. Hop on a bike and ride across the country. Move into the woods. Go volunteer in a developing country (some positions provide room and board, you just have to get there, but the pandemic does complicate things). Literally anything other than 1) what you are currently doing 2) suicide.
I have been there and I feel for you, truly. No matter how it feels, there are other options. Take care of yourself and hang in there. From someone that has been to the very bottom and made it back, it can get better.
What do you do now?
It probably doesn't get you an absurdly-high-paying FAANG job rewriting code someone else rewrote the year before, but I guarantee you any competent generalist in IT can get well-paying job without much trouble. There are a lot of places out there that can't afford to have a specialist in everything they do, but can afford the kind of person who is willing to tackle any problem put in front of them.
I hope what I said makes sense. Try not to feel frustrated. Frustration never helps.
Citation needed.
You could take some computer science classes, then you'd get some CS knowledge.
If you haven't been through CS in school, watching MIT's CS50 classes will introduce you to a lot of basic concepts and language that you'll find helpful.
And hardly a nitpick. It verges on a fail. Sorry.
Also, you may want to get checked for ADD/ADHD if you find you can fixate on things, but have trouble focusing on broader tasks.
Usually, if you have impostor syndrome, a good cure is to learn something that is unique in your environment and makes you feel valuable. Or to build something on your own and see it finished and working.
I think you might have pinned it here. It may be that you are just fine as a developer but that you have burn out or some other mental health issue honestly. I don't mean that as a negative. I was burned out very badly a few years back and I felt exactly like you describe. It led to anxiety, depression, a lack of motivation, pain... nearly a mental breakdown.
I had been on a bit of anxiety medication for a while. I had a near breakdown (some would say a total breakdown). My doctor literally said "You need to go see a therapist. I mean it. You can either go on your own or I am locking you into the trunk of my car and taking you and you won't be let out until you talk to someone." (So, my doctor threatened to kidnap me, and thank goodness!) So I went and talk to a therapist. And talked. And talked so more. For months, then years. It has changed my life for the better. I am a better developer. I work better. I am a better husband and father. I FEEL better.
I really can't recommend highly enough that you take a look into your mental health. It will help a lot. So what now? Talk to a professional.
Literally every programmer I know has been wracked by doubts and existential dread over their skills. I've mentored a lot of interns and I always stress how impostor syndrome is normal, everyone gets it, including everyone above them in their teams.
My history is more of the "programming wunderkid", been programming since I was 13 and (like many on this site) find reading HN and programming news relaxing and recreational. I say all of this to highlight the fact that I got impostor syndrome. It was particularly bad the first few years. Once you realize everyone feels this way it's liberating. In fact you can even use impostor syndrome for good; either by motivating your learning or by empathizing with others.
I'm constantly learning and growing, which means I still feel like an impostor in these new areas. I'm the Kubernetes expert for multiple startup and government projects, but I still feel like a beginner in out of his depth.
The way I see it, you have two options. You push your comfort zone, and get comfortable with being uncomfortable, or you stagnate. You either become a constant learner who always has a niggling impostor syndrome, or your knowledge becomes static.
Be like Socrates. "I know that I know nothing."
I think it's more common that someone is simply not confident in their programming prowess and without that confidence may never achieve their goals. Knowing this, knowing that neither you nor I likely have the credentials or ability to prejudge someone's ability, and barring some obviously shady/impostor behavior like having bummed most of an assignment off of someone else and then asking for my help laundering it... you will almost always find me encouraging people to not feel like impostors and instead feel like programmers that are just early on in their careers.
I think such a default makes sense, and not even because it is "nice". Even pragmatically, people can often improve.
"I've got skill gaps as a programmer, especially at broad-level architectural design" is a belief that a mentally healthy person can have.
"If I express concern about my skill level, people will just say that I'm delusional" is a belief that will mess somebody up, especially if it is repeatedly re-enforced by reality.
There is no equivalence between "bullshitting people" and encouraging them to think of themselves as early on in their careers. There is no equivalence between encouraging someone to improve and ignoring someone's self-concerns about their skill level. There is no equivalence between someone currently lacking programming skill and someone being too short for the NBA.
In case I wasn't clear about it before, you shouldn't bullshit people who clearly aren't putting the work in or are having trouble getting to where they want to go. You should encourage them to think in a healthy way about their current progress and encourage them to find ways to get better and allocate the resources needed for their growth.
Agreed.
> You should encourage them to think in a healthy way about their current progress and encourage them to find ways to get better and allocate the resources needed for their growth.
Agreed.
> There is no equivalence between encouraging someone to improve and ignoring someone's self-concerns about their skill level.
It depends crucially on the words you use to encourage them to improve. I've often found 'impostor syndrome' to be stymie clarity. I might be guilty of replying to a comment that isn't quite your words though. apologies for that.
Apparently, they may often think that they are good at it! See https://en.wikipedia.org/wiki/Dunning–Kruger_effect
Everyone feels like they suck at programming, because they do, it's ok, everyone else sucks too.
I sometimes think that the first set of people working on most software are just trying to get it to work at all, with limited expertise and lots of duct tape. Then come some journeymen who have to add more things. And, well, when I am writing code it tends to look a lot like the stuff around it... things just get Progressively worse!
I am not a dev. I don't intentionally write bad code, but the code I write sometimes hits prod. I don't really know what "good" and "clean" really look like. Just "works" and "doesn't".
So if you're honestly questioning whether you are capable or not, then by definition you're not an imposter. Some people are actually imposters but they are not the ones openly asking for advice about it and asserting that they don't belong.
So no, fake it till you make it, taken seriously, is not a good advice.
Also, sometimes pressure forces person to learn something in a very short period. So, if you "fake it", but also put significant effort to quickly learn what is needed to succeed then it is not lie but a 'future promise' it would be lie only if you don't succeed.
Now I don't have to lie about my education. I would like to think its because of my skills I developed over 16 years but it could also be the times changing.
Like many here I also enjoy hobby development projects. I also suffer from imposter syndrome probably because to some commenters' point, I am an actual imposter.
also TIL impostor and imposter are both correct spellings (even though I got dinged for the o spelling in middle school)
So when someone posts something like this, why is it good to talk about impostor syndrome? Because encouraging a growth mindset [0] leads to better results. Saying "Yep, you suck" isn't going to lead a person to try harder. Saying "Yep, it's natural to feel that way, everyone feels that way sometimes, and Science^TM confirms it (aka Imposter Syndrome)" allows people to step back, go easier on themselves, and focus on what they do have control over (time invested, quality of time, how they get help when they're stuck, etc, etc).
One point I'd like to make to the OP: Whether you go into professional programming or not I think that the skills, background, and experience that you're accumulating can pay off. Maybe you decide that you'd rather not program all day. Perhaps you can go into a technical & interpersonal job, like management, or developer relations, or program/project management, or Q+A, etc, etc. There's a lot of jobs in the tech field and having a background in programming will make it a lot easier to talk with programmers.
Good luck to you, whatever you choose.
--------- [0] https://www.psychologytoday.com/us/basics/growth-mindset
The author can easily read code from others, there is no implication of other people complaining about his code, and can program in several languages.
There are also stuff that commonly causes impostor syndrome up there:
Very general surface level knowledge, problems with interview questions, and difficulty on understanding "very basic OOP concepts".
The only thing pointing to a bad programmer is that "although my solution is more likely to be a complete mess", but it's thrown there without any context on problem difficulty, code size or environmental restrictions.
Any of the best programmers I have ever met could have written that same question if they got reasons to doubt themselves.
From there everything else will naturally happen. The problem most people have in situations like this is too much shallow knowledge, which doesn’t lead to real stimulation of curiosity and creativity. Find something that fascinates you and go for that.
Alternately audit the MIT CS106b course for free online and see if the intro to CS stimulates you intellectually.
Second alternately change careers to something where you deal primarily with people (like sales or product) or where you spend time outside.
First up, you wrote quite a bit but never expressed something super important - do you enjoy developing, do you feel happy doing it? Or is it just a job and a means to put food on the table?
Secondly, technology is a broad area and I actually knew plenty of developers who quit within 6 months and went into other tech areas (sales, project management, etc.).
Finally, I've been coding for decades and sometimes I feel crap about my own work too when I look at the quality of stuff that some others are able to produce. I'm at peace with that though, because I know my real skills lie elsewhere. That, and I'm happy doing what I do, I feel good about it and I figure if I keep trying I can only get better.
That said, you could also pursue engineering adjacent paths. Things like project/product management, QA engineering, sales engineering, etc.
Your best bet is to try to specialize in the tech within your professional space. If you're working for a company, work hard to understand the technology and codebase they are using. Try to learn best practices, and see how you can integrate them into the existing codebases. You'll maybe learn the patterns you feel you're lacking, and also learn that a lot of times stuff is not coded with best practices in mind. There is tons of production code hacked together and barely working, and in a lot of cases that doesn't matter, it only matters that it's technically working.
Management may be an option for you down the line if you're feeling you're still not confident coding is the right thing for you. I am sure people would love to have a manager that is at least relatively competent at reading code and tech literate.
How to get better?
Evaluate your strengths and weaknesses (ask a friend/manager who's willing to give critical advice).
Plan and practice, practice, practice.
It's a mental game, too. I find the sheer volume of knowledge out there to be overwhelming -- don't worry about this. Start where you are, and add, incrementally. Nobody goes from A to Z.
You got this. Ping me further if you want a mentor or accountability partner.
If you don't want to develop software there are many ways to use that experience. You could move into QA. If you can write, you could do technical documentation. If you can organize things well, maybe technical project management is up your alley.
There's lots of options, if you think about what your strengths are. You can use your development knowledge to make your other strengths into a great job. Or stick with development. Most of us aren't ____________ (insert rockstar developer you've read about in a blog, here).
I think most of us wrestle with imposter syndrome from time to time. It doesn't help that there's no grading system for programming, no professional body that will certify us, no systematic learning program that we can work our way through. CS degrees don't teach actual programming skills (seemingly as a point of pride). There is literally no external source of validation except comparing ourselves with our peers - which is always a source of misery if you're not a narcissist.
There are constantly stories from famous, objectively good, developers who failed technical interviews. As with all interviews, a lot of it depends on social skills rather than technical skills. Failing technical interviews doesn't mean anything.
But, let's assume you're right and you're a terrible programmer. What do you enjoy about programming? Usually our talents lie in the direction of the things we enjoy. "Software development" as a career incorporates a huge range of sub-careers, and there are advantages in non-IT careers for people who understand coding. Can you head in the direction of your interests?
It's okay to just write code for the sake of writing, but keep in mind the idea that what if new requests comes thru; given the current state, can the code be changed easily?
Code organization is a work in progress. Can your code be easily/separately testable?
Being good at coding is subjective.
Sometimes, it may just be the tool (programming language) you are using. Try Ruby. Try Vue.js.
It depends on what your goal is. Do you want to get better at creating software as a goal in itself? If so you might want to think about optimizing for lower pay check jobs at startups where you will get to work with talented engineers and do new and different things although be careful they actually have good engineers who can mentor. This could prove to be the most monetarily rewarding path over a 5 or 10 year time frame as well if you drastically increase your skills.
Do you just want to make money off of it? If so look for skills that are highly valued in job listings, maybe react.js right now, and spend a few months of your free time studying that one thing as much as you can and maybe build a test project like todo mvp. If you can do anything at all with react you can collect a paycheck somewhere.
Software has a lot of froth these days. You don't have to be incredible to get good outcomes in the industry.
Terrible developer here. I can say the stress of never knowing when you might get fired and having job options is very stressful.
Now I'm stuck learning/relearning multiple languages (python, java) and stacks (ECS, lambda, Dynamo, S3, etc). I've been on this team for 6 months and have never used the same tech twice. For me, that makes it very hard to become an expert when there's no chance to use the same tech again - I need some repetition. I want to get to the point where I don't have to think about the stack or the semantics/features of the language and just focus on crearing a great solution. That's never going to happen here.
I also lack the drive anymore. I've been screwed over, passed over, and had my prior positions outsourced to contractors. I feel like why should I try hard if the company is just going to throw me away again.
Seek education (either a CS course or the multiple online courses), seek the help of a mentor (someone at work? friend w/ more experience?) and keep working on getting more experience.
Don't think people are "born programmers" - the good people invariably sank a lot of time into it.