33 comments

[ 0.23 ms ] story [ 68.6 ms ] thread
This is great. I just started my first real full time programming job and was feeling a tad incompetent. It definitely resonates. I'm having issues with really identifying as a programmer and what expectations if any come with it. I'm starting to come to the agreement that improvement at my own pace and in my own direction is going to be vital to not burning out.
Don't think about yourself as a programmer. Think about yourself as a person having fun creating things.
Always keep learning in your own pace, pick up technical books, learn a weird language, get acquainted with vim or emacs, bash, awk.. it might take a handful of years but eventually you'll feel in the know, have a strong opinion about most mainstream tech and scoff at rehashes and things that won't die from 5 years ago.
> get acquainted with vim or emacs, bash, awk..

Erm, totally irrelevant to this.

> totally

tools are part of the trade, no? even if you don't use a particular one, having a decent understanding can provide a contrast to the tools you do use and perhaps improve your utilization in subtle ways.

I would disagree. Understanding different tools helps me to understand how co workers may approach a problem or teach me about why they use specific tools. VI mode in sublime may not make sense to a developer who doesn't know what vim is and why someone may choose to use it.
I prefer to invest my time in learning a new programming language, if I have to use my time to learn a new text editor (with a very steep learning curve) than it is absolutely wasted time. Modern IDEs do wonder and, honestly, the important thing in programming is not to minimise the amount of time that it takes you to write code, but to minimise the time that other people need to spend to read it.
Bash and awk are programming languages, although they're not something I'm keen on using.
> Understanding different tools helps me to understand how co workers may approach a problem or teach me about why they use specific tools.

I agree with this but that's not what he said. He quoted very specific tools needed to achieve this and that was the cause of my disagreement.

Being a beginner is the best. It's when you experience the most rapid change and improvement.

Enjoying that also helps keep you curious and wanting to learn new things. My favorite thing is getting to talk with a developer that is much better at something than me, and talking about their area of expertise. Walking and talking about a problem or sharing 45 minutes at a whiteboard can lead you to ideas that you would never find on your own.

(comment deleted)
It's not the amount of knowledge that makes a programmer competent. It's whether this person has the potential to be great by having the drive for constant self improvement. A great programmer is someone who pays close attention to her work and always asks whether it can be even better.
> Exactly no one knows what's going on anymore, but a lot of people are drawing paychecks and clicks by maintaining the illusion that they do. Some of them will interview you, and there's nothing you can do about it.

and

>You will walk into any given interview with what you think of as a cornucopia of arcane knowledge all but forcing its way out of your tear ducts to raise property values in a half mile radius. Much of the time, you will walk out of that interview wanting to give up and raise guinea pigs for a living.

Building software is actually one if the times I've felt least like an impostor (bordering on not at all?). It certainly is much better than science grad school in this respect, which is likely due to fast feedback from the compiler, your tests, and your peers. Seeking out feedback at all levels that you can find it is vital not just for happiness but also for growth, and it doesn't always come in the form of a paycheck.
I definitely agree with this. It's very cool to see something you've built actually work more-or-less correctly. In science all I get are maybes.
How I Learned to Stop Worrying and Love Building Software
Probably the best writeup on the subject of programmers and impostor syndrome I've seen posted here.
Currently what's making me worry about being a bad programmer is a coworker. I have no idea what I did to him but the guy clearly has some kind of grudge against me. He questions my competence (sometimes subtly, sometimes outright) and doesn't want me changing the code even if I submit a 1-line code review removing an unused variable. He's a lot more lenient with other people and sometimes it's me who catches errors in code changes he's already put a "lgtm" on.

Going to work and having to sit next to someone like that every day is quickly making me think of jumping ship.

Have you tried asking that co-worker directly in a tactful way? If you have, what about talking to a manager with whom you have a good relationship? If their behavior is a problem, then ignoring this will just let it fester.

You might also try to take a step back and see if their behavior actually matters, and treat it as a personality quirk. There are people like this everywhere, so even jumping ship may not exclude this or worse from happening at the next place.

Just don't mention that you're thinking about jumping ship to anyone. That doesn't help you or them.

Bring it up to your boss, and make sure you're clear that you need it to stop. These are the kind of jerks that can do a lot of harm to your confidence and your career as a programmer, especially if you're a minority in programming already (by making question if it wouldn't be better if you just went and did something else, which is already something that the world is telling you from the get go).

Don't let it slide, raise the issue to HR if you need to.

If it doesn't end, go find another job where you can grow and just leave. Don't look back. Working with people like this is very poisonous in lots of insidious ways, and ultimately never worth the stress

It's interesting that a lot of companies complain about a shortage of programmers and applicants, but, at the same time, allow this sort of toxic environment to persist.
Of course, since there is such a shortage of programmers, people are reluctant to fire the jerks.

It's also hard for outsiders to tell who is the jerk when two programmers don't get along. It's often both of them.

This profession attracts a lot of people with low social skills, on or off the spectrum, so this stuff is hard...

There's no shortage of programmers. There's a shortage of employers willing to pay programmers more than a rounding error on the success of the company.
Unfortunately, I have seen this happen way too many times. I sometimes wonder, if that is a defensive technique to hide one's own insecurity.
The coworker in question has some very childish traits. I find it hard he would feel insecure though, since he is definitely very smart and delivers good work. I'm not one to say I'm smarter than him or even as smart as him, but I am fairly confident in the quality of my work (boosted by positive feedback from good developers I've worked with and look up to). That's why it bothers me that he has this attitude towards me.

Initially I ascribed the somewhat rude way he acts to a psychological trait (I'm positive the guy has Asperger's), but then I started noticing it was more targeted at me.

I had a very similar experience at the beginning of my career. Due to inexperience, I tolerated it for several months. It took more than that after I changed environment in order to come back to normal. The damage that person did to me was huge. I managed to recover only thanks to very strong social support from some friends I had since university. Even though we were not talking about the issue, doing other (kind of extreme though) activities helped me.

Looking back, tolerating this behaviour was a disservice to both me and the company I was working at. I lost many things professionally because of that. Do not make the same mistake. The guy might be super clever, super efficient and very knowledgeable. That does not give him the right, though, to destroy people's lives. And if you tolerate this, keep in mind that there will be also others in your position later.

Btw, the description you provide matches pretty closely the guy I knew. Super smart, Asperger's and I was his victim. Before me, there was another person who was holding him in very high esteem but was also forced to resign, partly because of the unsupportive environment.

Any way to find common ground with this person? Maybe take walks with them and listen to what they have to say about anything at all or something? Maybe ask why they question your competence and how you can work together better in an informal way?

Sometimes people are just assholes. Sometimes people are a lot alike and that actually causes friction. In those cases, it's possibly to transform a "rivalry" into a friendship if you work at it.

But if they really are just an asshole, then ya, the advice in the other people's comments make sense. Just make sure you at least try to bridge the gap first.

Otherwise, if they are a good person and the friction is not due to them really being an asshole, going to your manager or HR could end up drastically eroding the trust to the point of being irreparable.

i would go as far to say if you dont use the tools/tech at your disposal to get the job done as effeciently as possible then you are suboptimal as a programmer. the entire concept of technology is building or gluing others' efforts before you to create something new. there are rare exceptions to this and these are the very ones you stand on.
Thanks for posting. Haven't laughed out loud that much in a while.
I've found my career to be a continuous ebb and flow of feeling incompetent.

Very early on, I started out by learning Perl programming on the job, writing CGI scripts for basic interactive websites. I had no clue what I was doing when I started, but after a while I was pretty good at it (and felt relatively competent). Then I got a job where most of the code was C, which I had done only a little of. After a few years of that, I think I was pretty solid, but then it was time to start learning about Java and its ecosystem. Later, I wanted to do some iOS work, so I had to dive head first into Objective-C and Cocoa - I was pretty lost to begin with, but eventually I got the hang of it. Somewhere along the lines I picked up Python. I struggled for a while (and it took me longer than I'd like to admit to get comfortable with significant whitespace), but I got there.

Now I'm working on updating my web dev skills by learning about React and all of the surrounding technologies. Once again, nearly 20 years into my career, I'm feeling pretty lost and incompetent. I've been through this enough times to know that I'll figure it out, but it can still be pretty frustrating and demoralizing to struggle to even get something basic working.

I think this is just a fundamental part of software development, and of continuing to learn and expand your skillset. It's good to remind ourselves that no one out there knows everything, everyone struggles from time to time, and if we're hitting speedbumps it means we're learning and improving.

> It's okay for some codehumper to make everybody else hate their job and themselves, because, hey, that guy loves what he does, and if you don't it's your own fault for not spending Saturday nights masturbating to tail recursion tutorials.

I love this sentiment. A lot of self-deprecation on the part of programmers--nay, on the part of anyone--comes from comparison.

"My favorite job of all time was washing dishes. I was good at it, and I could do it on autopilot, and it left my brain free to go braining."

I felt the same way for years about working as a landscape laborer. At the time, my 'information worker' gigs required me to think constantly about the most mundane things. Being a software engineer is a lot better than that, but having the freedom to think about anything you want is a very beautiful thing.