
Ask HN: I'm not a good programmer, but I keep acing interviews - noisefridge
In the movie Moneyball, we learn that the Billy Beane character, when he entered baseball as a young player, was judged as a potential superstar by scouts. But he turns out to be a bad performer in the real game. He gave up other opportunities to play Major League Baseball. So those baseball scouts actually ruined his life.<p>I think I&#x27;m a lot like him. How can I break out of this?<p>I happen to be very good at a-ha problems, which show up often in interviews. I know a lot about how to optimize algorithms. I can talk learnedly about the tradeoffs between various paradigms. Interviewers are often very impressed.<p>The problem is, the job has nothing really to do with the above skills. It&#x27;s mostly about slogging through poorly documented Java framework code, and getting some masochistic buzz from it. The desire to craft perfect code is an <i>obstacle</i>. Know how to do it better? Congratulations, you will be permanently dissatisfied.<p>And let&#x27;s be clear, most of the job, even under the best of circumstances, isn&#x27;t about coding. At best it&#x27;s about communication and careful risk management. At worst it&#x27;s cutthroat office politics in an industry that has too much money to ever treat people in a sane or humane manner.<p>I get depressed about this, and then those same people who judged me a potential superstar start collecting evidence to fire me.<p>So I&#x27;m in a job search right now. I just aced another interview. It&#x27;s a company that wants to pay me way, way too much money to work on updating their legacy app. I have money woes right now but I&#x27;m considering turning it down. I am sick of being a disappointment.
======
hluska
I have two comments:

1.) Moneyball made it look like the scouts ruined Billy Beane's life, but the
reality is much more nuanced. His playing career didn't go well and when he
was in AA, he started seriously doubting himself. But, when his career ended,
he started off as an Oakland A's scout. 25 years later, after a great run as
General Manager, he was named the A's Executive Vice President. The point of
all this is that in retrospect, the scouts who projected him to become a
superstar weren't entirely wrong - he has an excellent mind for baseball, but
he couldn't make the physical/mental adjustments required to succeed against
tough opponents. I'd suspect that your issue may be similar - you clearly have
an excellent mind for code, but perhaps you need to make a few adjustments. I
think it's also important to note that as Beane's confidence wavered, it got
harder for him to make the adjustments that he needed.

2.) How are you doing? When I read this over, I was actually rather worried
about you. You sound like you're taking on a lot of life right now and money
woes don't help. Are you okay?

The bottom line is that you sound very intelligent. I believe in you and in
your ability to figure this out. Good luck and be safe!

~~~
noisefridge
Thank you for your kind responses.

1) I know the movie is a fictionalization. I should have said, the “Billy
Beane character”. But I see your point. Reality is more complex than one
person being right for a role, and another person being wrong. There are many
variables and a smart manager (or a smart person managing their career) can
and should make changes.

I am not sure what those changes are. It might surprise you but I’m not a
young developer at all. I have never found anyone, coach or therapist or
manager, who seems to have an answer.

2) It’s a stressful time but I’m okay. I have multiple job offers. I’m
considering not taking the one with the highest salary. However, I have some
major debts right now and as stated above, I’m not young and I need to think
about retirement too.

~~~
guitarbill
> It might surprise you but I’m not a young developer at all

Have you considered becoming a team leader/scrum master/whatever it's called
nowadays? I slipped into that role by accident, but found it very fulfilling.
I saw my role as shielding my devs from mgmt, so they could deliver, which is
all management wants at the end of the day. You still need to be technical,
participate in design, do code reviews, maybe do a bit of coding etc, but you
aren't slogging it in the trenches/doing the grunt work. You'll have to do
more planning, sizing items, distributing work, but that also takes dev skill
and dev knowledge.

Give it a try if you can. Worst case you can say it isn't for you, and you
don't seem to have a problem finding a job. Best case, you might become a
great team leader (or even manager if you want to go even less technical), and
make a difference for the devs who'll be in a similar situation like yours
once the novelty wears off. Team leaders can make huge changes to process, if
you can justify them with e.g. hours of engineering saved.

Best of luck to you. I know what it feels like when you think you're trapped
in one career path because you happen to be good at it, and it's horrible.

------
greenyoda
_" The desire to craft perfect code is an obstacle. Know how to do it better?
Congratulations, you will be permanently dissatisfied."_

One way to think about it is: A programmer's job is _not_ writing code. It's
creating solutions to problems that the people who are paying you have. These
solutions are usually time-sensitive, and can never wait for someone to keep
rewriting their code until it's perfect. If you can learn to be satisfied
about delivering solutions rather than code, it might make you feel (and
perform) better. (And if you can deliver a solution without writing any code
at all, you've saved your employer a lot of money.)

Another possible source of satisfaction is constantly learning how to deliver
better code with the available resources. If you look back on code you wrote
years ago and you see that you're doing it better today (even if it still
isn't perfect), that can be a source of satisfaction.

Also, if you eventually become a lead programmer, you can help bring up the
quality of an entire team and have a greater impact.

~~~
taylodl
Exactly - _there is no such thing as perfect code._ All code has constraints:
maintainability, securability, scalability, flexibility and so on. You can't
maximize all the constraints simultaneously as some are opposed. That's the
nature of the beast.

Once you realize there is no such thing as perfect code AND you realize your
job isn't to produce code but to provide solutions then you'll be on your way
to becoming a good programmer. Good luck!

~~~
alacombe
And then, real question from another recent experience: "here's our network,
optimize it" ... without any insight on any existing problem to solve, nor
details about constraints or requirements.

------
mod
First of all, I'm willing to bet that you are, indeed, a good programmer. I
say that as a programmer who is in all likelihood a pretty average programmer
(I don't have a huge amount of comparative experience to know for certain).

You're almost certainly average at a minimum, based on what you wrote.

Second, I feel like you're...overthinking it? I don't play office politics,
but I'm not gunning for a promotion or even a "senior" in front of my title. I
don't care about any of that. I complete the work assigned to me and go home
to my hobbies.

I've always worked at small shops. There's no room for cutthroat office
politics. Maybe that would be an okay move for you. I've yet to have a bad
interaction with another coworker and it's been years at this job. (I do have
an occasional bad interaction with a client, which is to be expected).

I'd take the job and do my best to avoid getting wrapped up in it to the point
of depression. If corporate culture is depressing, aim to find a new culture.

------
pascalxus
You might be a good programmer but the companies you worked for might just be
terrible at keeping you. Many Software companies are always looking to fire or
lay off employees (they often have a quota or stack ranking systems in order
to churn a certain percent every 12 months), especially the toxic companies
ones. Don't let that make you assume your bad at your job.

Try to find a company with a good work culture and High employee retention.
Low retention always reflects badly on the company. And make sure to ask the
hiring manager how many employees he's lost in the last 12 months. If he
looses 2 or more employees per 10 (regardless of who left whom), then it's one
of those places that always fires people or makes a bad environment, so watch
out.

~~~
muzani
While I agree with your point, I'd like to add on that very high retention is
also bad. It's where complacence thrives, and these places often weed out more
ambitious people like OP via politics.

------
potta_coffee
I wish I was you. I can get shit done but I'm terrible at interviewing.

~~~
muzani
That's the irony. People who focus more on getting shit done are bad in the
interviews.

I've come to accept that being good for interviews is just another thing you
have to get done, that it's something people have to put effort in, some more
than others.

------
combatentropy
In the interview you too can ask questions. For example, "Is this job mostly
about slogging through poorly documented Java framework code?" Maybe you can
phrase it more politely. But then again a manager should welcome candor. "I
want to do __________, __________, and __________. I hope that there's not
much _________, _________, and ________."

Then again, you can't always trust the interviewer. Ideally you would somehow
find people in that job at that company and ask them what it's like. I know
it's odd, but a friend of mine who is a tech recruiter recommended it. Instead
of waiting for a job posting, research which jobs and which companies you most
want, and then try to network your way into them, job posting or not.

Regardless, you are right, why don't interview questions better line up with
jobs? I think I'm in the opposite boat. I like cleaning up code but would
probably flunk a flurry of theoretical algorithm tests.

Be sure that programming is what you most want to do, given that so many of
the jobs are about keeping up old code. Is there anything that has some of the
things you like about programming but less of the things you don't like?

------
spyckie2
Programming, as a craft, is about the aspiration to write perfect code, as
defined by your values.

Programming, as a job, is about doing a job, as defined by the job's values.

It sounds like you're a great craftsman but poor at letting go of your values
in order to align yourself to what a job needs. (disclaimer - often what a job
needs is NOT what anyone would include in their values - no one is a garbage
truck driver because they aspired to it).

2 choices - double down or fold. If you double down, you should hold out
choosing a job until you find a company that shares your values. If you fold,
you should find a job that meets your living standard needs with the least
amount of expectations and then seek something outside of work that aligns to
your values. You can find that community via Ask HN, looking at open source
projects that you respect, going to meetups - a whole host of ways.

I would recommend you write down your programming values so that you know it.
For each value, you may want to give some reasons why you value it - this
exercise is, at the very least, good for introspection.

------
muzani
A comment on that last paragraph: companies often pay a lot of money for jobs
like that because nobody wants to do it. It's a grunt job.

The grunt jobs can be a lot of fun. I don't mean this in a masochistic way. I
mean that once you are good enough at slogging through poorly documented code
and ripping out bugs, you find a challenge in it. Unlike a repetitive assembly
line task, it's very possible to improve in these skills and get some
satisfaction from the improvement. It's sort of like cooking, making tea, or
Candy Crush.

There are many branches in software engineering. Another is the disciplined,
Google style, high quality code - all about getting it efficient from the
start. Companies like Pivotal also specialize in this. You might look for
those.

Treat interviews as a process where you're interviewing the companies as well.
Learn the type of company you want to work for and filter those out.

------
sjg007
The sign of a good programmer is the one whose code can be refactored. There
are, at least, two reasons for this:

1\. The solution was apparent (in the code) and the code did what it said it
did.

2\. The code was "bad" enough to require a refactor or a better
abstraction/generalization. To say this another way, the product requirements
evolved and the code has different demands placed on it so the original
design/code whilst good enough, merits replacement.

Your job as a superstar is to take that code to the next level. This is what
these interviews are all about and why we do them.

You are not a disappointment btw... Politics are politics and if you are in a
political env then leave... Engineering cultures exist and in those, the name
of the game is to make the code work and hopefully make the code robust enough
to reduce the amount of work you need to do in the future. And to allow others
to build upon your work.

------
Trundle
Not every job is about poorly documented legacy apps. "Green field project" \+
"quality, not a rushed MVP" might be rare, but hey, if you're a good
programmer who aces interviews then you can afford to go for the rare ones. Be
selective with what you pick.

Also, don't be afraid to try to make that position. If you're considering
turning down this legacy app job for one that offers less money, first try
pitching them on a rebuild. If you smashed their interview and they offered
you a lot of money, then they think quite highly of you right now. Maybe
they'll listen.

------
camgunz
Think about building anything else, besides software. The act of building is
very different than the act of fixing, and even the act of adding on.
Practically all software interviews -- technically speaking -- about building
new stuff. Fixing bugs, adding features, and dealing with technical debt have
practically nothing to do with algorithms and other technical interview
topics.

Which is to say that if you're not into that, it's on you to find out early
because most companies think all they have to do is hire the smartest
engineers and everything else will work itself out. Typically you don't need
to ask anything at all: unless it's a startup or some crazy project by an
older company, you're fixing bugs and adding features. But probably a good
idea to ask anyway.

Or there are ways to make the "fix bugs and add features" gig work. Ask about
their process: do they have docs, do they have a roadmap built with
engineering input, how much time do they devote to addressing technical debt,
and so on.

It sounds like you're actually a good programmer, but coding is really a very
small part of the gig. Now that you know how to do it, you'd probably benefit
from learning the process around it and being proactive about what you're
getting into.

~~~
alacombe
If tech interviewer were trades interviewers, it would go somewhere along
those lines:

For a welder position:

\- "So, you are a welder."

\- "Yes."

\- "Good, so tell me how an IGBT transformer works."

\- "I don't know, I can stick weld, MIG weld or even TIG weld aluminium,
stainless, heck, even titatium"

\- "That's not the question, I'm asking about an IGBT transformer"

\- :facepalm:

That is, totally irrelevant questions for the job asked.

------
NTDF9
You are above average. Simply because you realize that interview processes are
tangential to real world development.

If anything, I don't think you are the failure. I think the companies who hire
based on fake proxies and false metrics are the real failures.

You, on the other hand, are possibly an asset who can talk the truth in a
heated meeting. I'd pick you over inexperienced algo-ds solvers who don't
understand real world consequences.

------
itamarst
Some options:

1\. Learn to take a broader view of programming. As others have said (comments
from greenyoda, taylodl), and you intuit, the job isn't really about coding
most of the time, let alone coding algorithms. It's hard to make that mental
leap, but when you do you view your work very differently (I wrote about this
here - [https://codewithoutrules.com/2017/07/10/stop-writing-
softwar...](https://codewithoutrules.com/2017/07/10/stop-writing-software/)).
There are plenty of interesting new skills to learn if you learn this
attitude.

2\. There are jobs that _are_ about hard algorithm optimization. So try to
find jobs where those algorithm-specific skills are useful; they do exist. (I
personally don't see my job as writing code,I see it as identifying and
solving problems, but I would very much hate to update legacy apps. I'd get
horribly bored and want to quit. Right now I'm really enjoying doing
scientific computing, specifically image processing for gene sequencing.)

------
dandersh
A few things here jump out to me...

Put your happiness and well-being first. It's easy for me to suggest that you
take the new position and bank $$$ for 6-12 months and get out before the
feelings of disappointment set in, but only you know whether this is something
you want or am able to do. Do what you can to keep yourself out of a role that
makes you not want to get up in the morning, or staring at the clock anxiously
waiting to leave.

Don't feel bad about being able to find work for yourself, and don't feel bad
if the role is not what you expected/wanted. Finding the right gig takes some
skill of its own, and a lot of luck (or someone you know you can tell you what
it's truly like there...)

It sounds like you are projecting from the roles/companies to yourself as a
programmer and then as an individual. Never, ever conflate the competency of
what you do with the type of person you are. You may write code a living, but
the quality and performance of that code does not define who you are. No one
is a perfect fit for every role and every company, and some roles and
companies are plain toxic.

It sounds like you have stuck around at places too long. You've been exposed
to the office politics, questioned/been questioned about your performance,
realized it's not a good fit but have not moved on, etc. If it's not what you
were expected, if it's not what you wanted, there's no shame in looking to
move on. Imagine getting married to someone after going on a blind date.
That's a lot like how jobs are acquired in IT, unfortunately.

It sounds as if you're getting opportunities for a job, and not to challenge
yourself. You mentioned the money issues, the similarity between roles, etc.
Sometimes this is outside of our control, but it wouldn't hurt to think of
what you would like to do and prioritize that in new roles.

------
meric
“Know how to do it better? Congratulations, you will be permanently
dissatisfied.”

Try to be empathetic when you give advice. Take into account the company’s
circumstances when the code was written. E.g. The code might be utterly
horrible but was written by a non-programmer who studied 3 months of
javascript at community college, but gets the job done, in that case, rather
than be dissatisfied, see if you can convince yourself to be impressed
instead. Keep in mind people are trying their best; otherwise you would not
have joined them!

Instead of thinking about it as office politics - think of initiating yourself
to be a member of a tribe, is it only a matter of how many deers you kill and
how much grain you harvest, or are there other important qualities of a tribe
member? There will always be a time to show off your abilities or improve the
state of affairs but sometimes the time is “not now”.

In our minds we think we are rational but in our hearts we are and always will
be a part of nature.

------
matt_s
I think you answered your own question in a way. The baseball analogy is you
keep making the team (acing interviews) but it sounds like you are trying out
for teams below your league. Like a major league player trying out for AA ball
team.

OR

Maybe you have to realize that being a software engineer really doesn't have
much to do with optimizing algorithms, trade-offs on design paradigms, how to
perfectly architect an application or having perfect code. Unless you are at a
brand new startup working on v1.0 you are maintaining software. When a company
has a tech stack and an application built, they have already made most of the
decisions.

You comment about office politics, communication and risk management. These
are facets of working for anyone in any job where there is a decent sized
office. Spend more time interviewing the company, boss and potential coworkers
next time. Come to the realization that being a software engineer isn't just
about writing code.

------
lamf79
I think it's more about finding a good fit. I took "the good money" at a place
recently. Sure, it was good, but I came home everyday burned out and
questioning my career path. (Luckily I'm in 3rd interview stage with a company
much more inline with my career goals).

I say a company has no loyalty to you, so why should you have loyalty to them.
I have had patches of burning through 3 or 4 jobs over a few months. If your
not going to be honest with me about your project from the get go and I
discover that my skills have no place on your team, I walk. Without even a
second thought.

This may just be imposter syndrome getting the best of you. It runs wild on me
sometimes. Then I remind myself that when 10 devs are sitting in the room 9 of
them are probably going through the same thoughts I am and just laugh about
it.

If programming is what you love to do, you'll find a place. Don't be afraid to
keep looking.

~~~
user5994461
If you have to go through 4 jobs in 4 months, you need to reconsider how you
screen companies.

~~~
dabockster
It's also entirely possible that he/she was mislead about what the job
entailed. /r/recruitinghell comes to mind.

~~~
convolvatron
this happens alot*. i think some reasons include

company/group is experiencing turnover so high its becoming existential. tell
the candidate whatever is necessary to get them in the door and hope inertia
keeps them around for a bit.

upper management and recruiting is keeping hold of the narrative that they
want 'only the best'. they don't have enough experience to know that fit is
more squishy thing and maybe being a dba isn't really your thing

as a corollary to the above, maybe they just don't know any better. they've
never seen an actual software developer, and think the pinnacle of the game is
managing a migration across minor revisions of os releases. how many jobs
listing 'kernel experience' actually involve writing kernel code. or
distributed systems or compilers, or networking, or graphics or ml, or
anything really. all of those terms are used interchangeably to denote the
development of a thing and the use of a thing. 'implement' used to mean
something else entirely.

the lack of any team culture or planning. maybe management really did want to
hire someone with intention of righting the ship. but in the absence of any
kind of structure, the wheel isn't really hooked up to anything. you can talk
all you want about what needs to be done, and people might enjoy the
discussion, but no one is going to change what they are doing one iota to
achieve a common goal. often the lack of any testing infrastructure makes any
change or evolution a non-starter.

the company hires in a pool and holds its candidates to high standards. in
reality they need many more support people than architects and senior
developers. so many of those people get assigned to work that they graduated
out of doing several years (or decades) ago.

original team is trickling away. they were great. exceptional. the best in the
world. of course you want to keep hiring to the same high standards. except
the nature of the work has changed, you don't really want to rewrite
everything, you just want to keep it going. and maybe the end result of that
initial effort is considerably less exceptional than you've been telling
yourself, your customers and your investors.

come to think of it...it really seems pretty likely that your new job is going
to be a bit of a disappointment.

------
soneca
I think one solution is to accept the job and work on the skills that you lack
to be a "good programmer".

If you decide to go this way and believe communication is a skill you would
like to develop, I can help.

I am not an expert by all means, but I keep receiving good feedback from my
coworkers regarding my communication skills. I prepared a talk with tips on
written communication that also got very positive feedback (so much I am going
to give this talk a third time inside the company).

You may even notice that I am not a native English speaker, but my tips are
about communication, not proper English writing :)

So we can work it out on some remote coaching. What better way to improve
written communication than exchanging emails on complex subjects?

If you are interested, my email is on my profile.

And good luck with your choice!

------
toast0
Interviews are there for both parties to get information about the other.
Start asking questions to figure out if you even want the job. Note that
asking questions may turn off some employers, but if you're getting lots of
offers you're in a good place to turn off some people.

Strongly considering taking the way too much money, and get your finances in
order. Having a big financial cushion and excellent interview skills will give
you a lot of room to make choices that make you happy.

------
scalesolved
Sounds like perhaps you should use this skill more often then, perhaps become
an interviewer for a remote company like this?
[https://stackoverflow.com/jobs/141116/freelance-expert-
inter...](https://stackoverflow.com/jobs/141116/freelance-expert-interviewer-
karat?so=i&pg=1&offset=-1&r=true)

Best of luck and keep your chin up :)

------
stuaxo
Your position isn't too bad. You'll get better at the other skills, though it
may take a few jobs.

Or, it could be the kind of work you are doing... I was never happy in Java on
the web, did a some Java mobile back in the day and it was really fun.

Now I build stuff in python and it's generally not bad.

------
JoeAltmaier
Don't work on legacy code. Join a startup where the IP _is the code_. Make
great code.

Or heck, just do it for open source for the kicks. But don't let the market
for bad code, convince you to prostitute yourself to the market.

------
segmondy
Why don't you work for a startup where you can get the chance to build from
the ground up?

------
lsc
>So I'm in a job search right now. I just aced another interview. It's a
company that wants to pay me way, way too much money to work on updating their
legacy app. I have money woes right now but I'm considering turning it down. I
am sick of being a disappointment.

My advice? Take the job. Solve your money woes. do what you can to fix their
shit. Accumulate a pile of cash. Label the checking account "the freedom to
say no" \- 6 months from now, you should have enough money that you don't have
to worry for another 6 months. I'm not saying to quit in 6 months, but think
about it. Still, my advice remains, solve your money woes, because if you can
earn programmer money, money woes are easy to solve, and money woes are stress
you don't need.

Interviewing well is almost a superpower. This means you have way more choice
and freedom than most people. And that's the thing... jobs are super
different. Try out different jobs, with different people, in different
industries. Hopefully, eventually you will find one that is tolerable. This is
another reason to solve your money woes. If you know you can go 6 months, then
you should be pretty comfortable telling anyone "no"

>And let's be clear, most of the job, even under the best of circumstances,
isn't about coding. At best it's about communication and careful risk
management. At worst it's cutthroat office politics in an industry that has
too much money to ever treat people in a sane or humane manner.

Huh. from what I've seen, we get treated way more humanely than people in
industries with less money. Quite often when I go out I see someone berating
or otherwise mistreating workers who make like 1/10th what we do. Frankly, for
what I get paid, if I had to eat a little shit, I would. but I don't. (or, at
least it doesn't feel I am eating shit... perhaps it is because there is so
much bread.) as far as I can tell, we get treated better in other ways as our
pay goes up. It's backwards and unfair, I think, but it's backwards and unfair
in our favor.

Serious politics that you couldn't just ignore by pretending to act more
introverted and nerdy than usual have been rare in my work (and it's almost
always acceptable to withdraw into 'nerd mode' and just focus on the
objective, in my experience.) - I mean, once in my career I was in a situation
where that wasn't okay, where, you know, one of the parties doing politics
thought that if you choose not to decide, you still have made a choice. Man,
that job was miserable, I should have quit so much earlier.

But that's the thing, if interviewing is your prime skill, you are in a
uniquely good position to just say "No" and leave, if you aren't treated
decently.

Also note, I personally have found that large companies treat you better, and
as long as you are clearly an individual contributor and clearly not gunning
for management, they are, in my experience, much better than small companies
at shielding you from the unpleasant parts of politics.

------
gargarplex
Check out keyvalues.io

------
tytytytytytytyt
> It's mostly about slogging through poorly documented Java framework code,
> and getting some masochistic buzz from it. The desire to craft perfect code
> is an obstacle.

So make things that work and practice doing that so you get better at it?
Could the solution be any more obvious?

