I think I'm a lot like him. How can I break out of this?
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.
The problem is, the job has nothing really to do with the above skills. 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. Know how to do it better? Congratulations, you will be permanently dissatisfied.
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.
I get depressed about this, and then those same people who judged me a potential superstar start collecting evidence to fire me.
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.
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!
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.
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.
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.
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!
Yet, interview revolves around: implement a link-list/LIFO algorithm.
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.
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.
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.
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?
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.
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.
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.
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.
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.
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.
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.
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...). 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.)
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.
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.
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.
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.
Part of what is considered "life experience" is stumbling through things until you figure out the circumstances where you can do your best work, and where you turn into "doesn't meet expectations." In that journey you realize what trade-offs you're willing to make to be in the circumstances where you can do good work.
I have a friend who is a brilliant developer, but he just got tired of doing what you typically do in a 100% development role. He eventually landed in the educational org of a software company where a large portion of his role is help develop the infrastructure backing their learning system. He gets to develop, has a ton of autonomy, and gets to work in small groups with sane deadlines since they don't sell the infrastructure, they sell the course content. He's much happier now than when he was in a 100% technical role.
You've got to find out what works for you.
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!
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.
Best of luck and keep your chin up :)
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.
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.
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.
So make things that work and practice doing that so you get better at it? Could the solution be any more obvious?