Ask HN: Is it possible for someone to not be cut out for software engineering?
Background:
- I worked as a linux sysadmin at a startup before going to school for CS. After 3 years, I graduated with a decent GPA (>3.6) and a couple internships at a large tech company.
- In college, I always felt like I had to work a harder than most of my classmates in order to get the same result. I would regularly spend 60 - 80 hours per week on schoolwork.
- Upon graduation, I accepted a job with the company I interned with and have worked there for ~1.3 years. However, I've been prepping to jump to a different role for a few months now.
- Recently (past 1.5 months), I've spent 1 - 3 hours per day on tech interview prep using CLRS, Cracking the Coding Interview, etc. My current target is a role at one of the "big four" tech companies or a high-quality startup doing either webdev or infrastructure engineering.
- So far, I have interviewed for and been rejected by no less than 10 different roles. I was also rejected by approximately 20 companies during college. I always fail during tech portions.
- I am REALLY bad at algorithm problems and experience serious performance anxiety. Concentrated studying and mass interviewing haven’t led to positive results so far. I can solve most problems correctly given enough time (usually 2x+ longer than interviews).
Questions:
1.) Does there ever come a point where it just isn't worth it to continue trying to be a software engineer who can get into top-tier companies / projects?
2.) How can I find some positive reinforcement in interviewing / interview prep even if I constantly get rejected? I do perform post mortems on every interview in order to find areas to improve.
3.) If my goal isn't an impossibility, how can I efficiently progress towards it? Would a mentor be helpful?
189 comments
[ 3.5 ms ] story [ 248 ms ] threadI say this as a person who is pretty much in the same boat.
Not everyone can prove their real skillset to the Facebooks of this world in an interview, with very little SE real world experience. You don't need to aim so high to enjoy your job and learn a lot.
- Being cut out for software engineering activities; vs software engineering career/success, may be different skills and concepts. You could be good at development, system administration database administration; without necessarily being good at succeeding in any particular type of company culture or organization, applying those skills. Which one is your question: can a person be "not cut out for software engineering", or can a person be "not cut out for success at particular type of company as a software engineer"? [I would give the answer for both a "probably, in principle, but less often than assumed].
- You mention some of your perceived history of effort, success, and lack of success. What about more personal stuff - do you ENJOY the work? Are you attracted to software engineering (however you see it - development, sysadmin, etc)? Would you dabble with it even if you got a job in an unrelated field?
- Do you have a specific filter you might or might not be aware of? Are you seeking specific types of jobs in specific types of companies under specific constraints?
- Do you have friends you trust in similar professions, or with similar interests? What do they say?
- How about colleagues, classmates, profs?
- Number of failures at obtaining jobs is a metric but not a predictive one without context. Skill at interviews is not the same as skill at software engineering is not the same as skill at organizational success.
- Similarly, you may have _perceived_ to be working harder at college; you may have _actually_ been working harder, due to your higher standards; you may have been working harder but _not_ receiving the same results as others - without full understanding I would not automatically put full weight in your perception of relative work.
- Top Companies and Top Projects may not have one-to-one ration. Why do you think you want/need to work for those particular companies? Are you interested in prestige of the name? If not, what is your true interest - type of work? Team culture? Accomplishment? Paycheque? Write a list of your actual priorities, be brutally honest with yourself, and see how they match with those "top-tier companies".
- How would you perceive your skillset at large? Your communication skills, people skills, friendliness, dependability and reliability, loyalty? Personally, I look for a reliable willing learner on my teams more than somebody who can solve puzzles but will cause havoc - different companies have different fashions however.
Either way, best of luck :)
1.) I do enjoy software engineering to a certain degree, and even if I weren't in the field, I'd almost certainly still write code from time to time.
2.) This is a bit of an involved question, but I'll try to answer concisely. The past few years have given me a pretty decent idea of what I like/dislike about software engineering. At this point, I believe that the team and process are EXTREMELY important factors in determining a (software engineering) project's likelihood of success. I want to work in an organization where engineers are really excited about their product and/or technology of choice. In my experience, I've found that these people tend to congregate at what most consider to be leading/high-quality tech companies (e.g. facebook, google, airbnb, uber, twitter, etc.).
3. & 4.) A good number of my friends and ex-colleagues work at the aforementioned companies (as well as a few other "top-tier" firms). Their opinions on their companies is overwhelmingly positive and directly aligns with my values.
5.) I understand this, but it is a bit of a blocker if I can't even get in the door, right?
6.) This sentiment is reasonable, and it certainly is difficult to quantify "working harder." For what it's worth, I will say that it usually took me longer to complete assignments than it did many of my cohorts.
7.) Here's the brutally-honest list, in no particular order: - Atmosphere: I find that I thrive when I'm around people who constantly challenge themselves ot be better at what they do - Interesting work: I want to be engaged in my work; at the moment, that means full-stack webdev (JS + react/redux) or super-large scale infrastructure engineering (devops) with containerization - Prestige: having a top-tier name on the resume opens doors, and I'd like to maximize my opportunities in future endeavors - Compensation: The financial aspect is important; I work hard and want to be paid accordingly - Culture: Again, I want to be around people who are generally REALLY excited about what they're working on. Having led a startup in the past, I know what it's like to be a part of the atmosphere where everyone is passionate about their work. Now, I do know that this aspect isn't necessary a given for employees at top-tier firms (especially the large ones).
8.) Skillset: For simplicty'sake, I'll use a 1 - 10 scale where 1 is weak and 10 and strong: - Communication: 9/10 - I focus on this skill as much as possible because I've found that none of my work occurs in a bubble - People Skills / Friendliness: 7/10 - I like people and I like interacting with people. That said, I'm always learning how to better interact with people. - Dependability / Reliability: 9/10 - One of my nightmares is being perceived as unreliable. - Loyalty: 8/10 - It's a virtue and a weakness, but I tend towards loyalty to those who have done me right in the past, be it a person or company. - Pure Coding Skill: 6/10 - I get the job done, but I still have a lot to learn - Algorithms: lol/10 - Still working on it - Ability to learn: 9/10 - This is another trait I focus on. Tech is always changing, and I fully believe that one of the core skills of a good software engineer is to be able to continually learn new things.
When you say you had to work harder to get the same result, do you mean the programming or the math? In my CS classes I saw really smart kids who were aces in the theoretical aspects of the program but couldn't grok programming. I also saw the reverse. You will have to be honest with yourself and figure out which kind of person you are and if you are willing to put in the necessary work to be 'big 4' material.
My advice, is keep practicing the algorithms, but do so with purpose. Try to tie in what you are learning with what you are doing at work, or a side-project. The essentials will osmose over time. Learning this stuff without having the proper context to understand is value is difficult ... (for me anyways).
At this point, I'm trying to assess what amount of work it's going to take to get into one of the "big 4"-type companies. I also need some way to feel like I'm improving.
1.5: Interviewing is like dating. At the end of the day, it's all about a mutual compatibility among you and the people you work with.
2: Interviews aren't things you study for. When I interview candidates, I'm trying to figure out if they can learn and if they understand core concepts that come with experience.
I must say this: I can tell when someone studies for my interview. They get all the questions "right," so then I start twisting the questions and the candidate starts acting like "you said this wouldn't be on the test." Those candidates are rejected.
In an interview, I can always take some code on the board, make up a funny situation that you didn't study for, and see how you handle it. If all you do is study interview questions from a book, these questions will tank you.
I've had two situations where a candidate who studied my interview made it past. In one case, the candidate was fired after a few months because he was too focused on goals that weren't our business's goals; and because the quality of his work sucked. In the other case... Well, let's just say that upper management is well aware of the problem.
Personally, I don't find it useful to perform a rote rehearsal of the material. I'd much rather be able to intuitively understand it because I hope it will help me in areas other than interviewing.
Can anyone with diligent work ethic and a continual effort into learning find some place that needs their skills? Very likely. How well does your skill set match how broad a market? It depends. If you are narrower, or aim higher, it will take longer to find a match.
That being said: if you have sysadmin skills, have you considered an SRE position? Or DevOps? It may be that you find a better match there.
Companies focus on these code puzzles and things even when you will literally never come close to that level of code in practice. I mean, I can't even complete the screening challenges Uber gives you but I still found something I can do in the industry. If you are applying for some senior engineer position than you probably need to know this stuff, but if you are looking for a junior role than I really doubt the value of these.
Honestly, I question if I'm cut out for the work I do still. I sometimes just want to walk away from tech and never come back. Today is one of those days that I am questioning WTF I am doing with my life.
This is kind of a tangent, but I don't understand how the sentiments "it's just a numbers game" and "nobody can find good engineers" can coexist. It seems like the people expressing the latter are trying to simultaneously be beggars and choosers.
Overall I might not necessarily "talented," but I certainly enjoy my side projects, have looked for jobs in different areas of work, and try not to shy away from my opinions.
Your comments are varied and it is difficult to fully understand your perspective. Nonetheless, I greatly recommend finding two things: the things you love about software engineering, and the things you believe you have done well within the field.
Capitalize on those things!
There are plenty of reasons that I haven't gotten a job that had nothing to do with me, for example, the CIO already had a third party ready to do the same work or they already had someone at my level of experience and focus.
The only thing that has worked for me is focusing on what I have done, and look for companies that also need those problems solved.
I think part of this is that people too often view interviewing as an adversarial process.
It may help you to enjoy it more if you look at it as a collaborative game that you are playing with the applicant. Your role in the game is to guide them through the process without breaking any rules like asking questions that are too leading, etc. I find this mindset helps me to maximise the applicant's chance of success without compromising the goals of the process. I think it also helps you to subconsciously adopt a manner of speaking and body language that is a bit more friendly and approachable.
You can work as a web dev at a small company without being part of the mainstream silicon valley rat race. Sysadmin-type skills are pretty hard to hire for, and very useful at small companies. It sounds like you've got that going for you. I'd change your definition of success and focus on finding a job at a company with a culture you'd enjoy, and not worry so much about its perceived prestige.
The reason why accounting, banking, consulting need their Big Four / Big Three is because it's hard to measure what their people actually do, so they rely on joining a big firm to reflect their worth.
In software engineering, you should be able to describe to someone in tangible terms what you've worked on in the past 3-6 months and what value it's brought to the company (and if you can't, start writing that down because you should always be ready to discuss that with recruiters or your boss when you want a raise). Because of that, we don't need the prestige of a namebrand company when we jump to the next job.
You should ask yourself why you'd want to join a Big 4 and if it's actually necessary. If it's for potential entrepreneurial connections, I can assure you that there are plenty of startup founders that are doing fine without the Google name. If it's for technical challenges, all companies have their own issues. You may not be working at Google scale, but trust me even with 5000 customers, there are still scaling problems that need to be solved for that particular case. And if you just want to work with smart people, they're everywhere. The company I work at was bought an East Coast company (outside SV!) and their engineering team are doing infrastructure things heaps better than we were.
This is an extremely humbling field and regardless of where you work, there's always something to be learned.
Also the Big 4 are changing every few years. Is Twitter still considered part of that group?
It's clearly currently five. In order of market cap: Apple, Alphabet, Microsoft, Facebook, Amazon. Note that these are now the five biggest publicly traded companies in the world, not merely in "tech" (a clearly archaic categorization).
This isn't exactly a strong line though, since all are at least diversified into things outside software.
Nevertheless, that was the original reasoning.
It's kind of funny that a position at one of those companies is now the new mark of prestige instead of a college degree or something. Shows how far the university has fallen.
Is it Valve?
Does it? Unless things have changed, graduates of elite universities are disproportionately represented at the AppAmaGooBookSoft companies. It seems more accurate to say that those companies play a similar role to HBS and Yale Law.
Even back before Google existed, having MS on your resume would open doors at software companies.
Google has always been a gold star.
But it isn't instead of universities, it is as well as. Stanford/MIT/etc will have the same effect.
Maybe it shows how little I know, but I think Valve and other companies who do this are doing themselves a disservice by basically using Google's recruiting department as a passthrough (and, as an autodidact programmer, I feel essentially the same about people who put it all on educational pedigree -- this isn't an endorsement of the baseline credential, just an acknowledgement that what constitutes it is shifting). It feels like an admission that they don't know how to hire, so they're effectively offloading that responsibility onto companies whom they believe have thorough vetting processes.
Your points are valid, but they're not the complete picture. Otherwise we'd all be clamoring for jobs at Googlezonsoft, but as sentiment shows in this thread; that's not the case.
My main point was to emphasize that it's possible to find job satisfaction outside of the big companies and that one has to question and determine if a big company would be a good fit, or is it purely an ego thing.
The one thing I wish had been made clear to me beforehand was understanding just how little the non-tech and business savy people knew about what we do. As such, despite how much of a positive impact I had, my pay was not even close to what it should have been (first-year photographers were making more than me). It was a constant battle to explain why certain time was needed to complete various tasks, as well as why I was putting in the hours I had.
When I finally managed to get out of there, feeling underappreciated, it was THEN my once boss realized how lucky he had been. Nobody would come and work for the same pay while being asked to do all that I had done.
So be careful and at the very least prepare yourself if trying to go into smaller companies and businesses.
The main point point I tried to get across (somewhat unsuccessfully) is that I need to work in an environment with a passionate, hard-working, highly-capable team in order to justify the time I have spent (and will spend) on software engineering.
The main impediment I've found in turning this goal into a reality is the technical interview. The way I see it, I either improve and make it happen, or I don't and move onto something else.
I would highly recommend you read the book: Decode and Conquer. I would also recommend Cracking the Coding Interview and Cracking the PM Interview. If you can solve those problems on a white board, you can pass a technical SE interview.
I would also suggest you:
1. Work on a problem for a few minutes and try to solve it. If you can't, look at the solution and understand how the solution was derived. Go back and solve the problem again. You are not finished here. Go back a few days later and work on the same problem - repeating this several times a week. Over time, you will grow more confident and can quickly recall concepts that are potentially causing you to perform poorly on your technical interviews.
GL
But it's possible that you aren't cut out for whatever benchmark/ideal you have in mind for software engineering. If a company is looking for the next Jeff Dean, sure, being not confident in algorithms is going to put you at a severe disadvantage. But there are plenty of valuable and important software engineering jobs -- even within the domain of just programming, nevermind design, planning, management, etc -- that aren't limited to those who can show a mastery of algorithms.
One well-known contemporary example: https://news.ycombinator.com/item?id=9695102
My main job is not software engineering right now, though I do a lot of it on my own (to be better at my actual job). I think I'm similar to you in that I was probably mediocre in comparison to the best of the class, though unlike you, I was probably in self-denial of how mediocre I was. But I eventually got into it much more after working in non-software jobs and understanding how the world works, and that there's plenty of uses for programming beyond the narrow scope of what's taught in CS curriculum. It's equivalent to thinking that you're not cut out to be a writer after feeling mediocre in a journalism news writing class, or technical writing, or poetry.
The thing is, I'm trying to figure out whether if it is really worth my time to continue the grind. Are there other roles that I might be both more excited about and better equipped for? Perhaps. This thread is essentially the beginning of my research process.
Examples:
Warehouse shipping companies that have a need for shipping software, barcoding software, always need reports, etc.
Mail order or e-commerce companies who rely heavily on inbound orders and who need automation/streamlining.
Advertising agencies tend to need web devs too. Pay is generally lower but you get the opportunity to work on all types of projects.
I had a conversation with one of our developers recently. He could have been you. He told me that he had interviewed at the big software shops, and had flunked the coding interviews. Yet I know that he's a very bright and productive engineer, who is also a pleasure to work with. I asked him: After those interviews, would you really have wanted to work at one of those shops? He said that he wouldn't.
And I know that I wouldn't survive that atmosphere either. So you're in good company.
Here is my litmus test for developers. Writing software is a boring job that requires you to obsess about details and to concentrate heavily on minutia far beyond the tolerances of most people. It is also a thankless job. Users will hate you for the bugs. Management will hate your for how slow you are. Nobody will appreciate the effort you put in, all believing that what you do is trivial. Even your own team mates will view your work and universally declare it to be crap. Every time you try something new, someone else will tell you that you are doing it wrong and imply that you are an idiot. Every time you discover something truly complex that requires years of experimentation to even come close to getting good at it, someone will laugh at you and direct you to an ill considered blog post or framework that purports (and fails) to solve your problem. To be blunt, you will be criticised for virtually every keystroke you make for the next 45 years.
There are easier ways to make a living. But if programming still seems awesome after you have read the above, welcome to the club. Never give up.
All sarcasm aside, I don't think there is anything "exceptional" about being a programmer, just like how there is nothing exceptional about being a management consultant. I wouldn't say it's the most thankless job, nor would I say it's the job where you get the most praise. It's a spectrum.
Often times, when I have thoughts like these, exuding confidence that my job is the most in any dimension, I realize that they might be more about me than the field of software engineering. Put differently, I'd probably have the same thoughts about welding if I was a welder, or the same thoughts about monetary policy if I worked at the Federal Reserve.
Solve 100s of these problems(start with easy ones and move into harder ones at your ease, learn new concepts and algos as you go) and try the interviews again in another 6 months. I promise, you'll improve a lot at this kind of problem solving. I've seen a number of people do this and succeed at algo interviewing game.
You are probably here to get some hope. Politically correct it would be to give you that hope because we all know that "Everyone can do and be whoever he want if he work hard". Unfortunately reality is different. Sometimes false hope can make more evil than harsh truth. I am pragmatic that's why i will give you pragmatic answer. You have binary choice. You already know that you struggle with certain things. Give it more time, to the end of the year, so you can determine if the problem was not enough time to learn. If nothing will change then aim lower. If you solve software development problems as you mentioned then you can get into software development.You don't need to work for top 4 tech companies to be happy and solve interesting problems.
I have to include considerations about the survival of my clan which is more important than some aspects of my day-to-day happiness.
If you do not enjoy programming, and have a hard time struggling with analyzing and solving problems (writing algorithms) then I do not think you will enjoy your work.
I have seen plenty of developers that do not enjoy their work, and I would suggest that you avoid it, and stay with systems administration, or something else that you enjoy.
There is a considerate amount of stress and pressure in the job anyway, as there are always critical deadlines and urgent problems, and if that is added to a general negative baseline of stress and discomfort, there is a high risk of real problems - like developing a real depression or occupational burnout.
1.) Why top-tier companies ? Have you considered joining a startup instead ?
2.) Ask the interviewer. Prep'ing for interviews will not prep you for the work at hand. Try working on your interpersonal skills and getting real world experience ( open source or side project demonstrating your skills )
3.) The recruitment process is broken. When you find that elusive efficient way - make sure to give back to the community.
Doesn't mean I'm not cut out for software development nor that I can't deliver value to anyone else.
Nor does it mean I can't find a rewarding and interesting job that suits me and the lifestyle I want.
Rejections happen. I would try to see if there's a common thema (some area of knowledge that is missing) or if it's just being nervous/lack of experience
Not everybody is good at algorithm problems and there are other areas you might be better suited for
Performance anxiety is just something you have to get used to dealing with in some way. You can always just ask questions during the interview.
but perhaps you might want to do a bit more math + physics studies (online, books etc..) it helps you with formulas and thinking a different way which helps IMO with programming.
Lastly, use a rubber ducky when programming :).
I myself had a terrible time with McKinsey style case interviews, which is sort of a cousin to tech interviews.
On the bright side, you might very well lead a more balanced life outside work. It's also not realistic for me to make an assessment of your choices but you should honestly answer these questions for yourself.