Ask HN: Is it possible for someone to not be cut out for software engineering? - <AUTHOR> I'm pretty new to software engineering (~1 year out of college as a CS major) and am having some serious problems improving my skillset (particularly with interviews).
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? <comment><USER5> Why do you want to work at one of the big 4 tech companies? Software engineering is a very big field, you don't need to be really good at solving coding puzzles on a whiteboard to be a good developer. Hell, there are developers who do nothing but set up wordpress sites for their clients, and they're providing a needed, valuable service.

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.

<comment> et-al As someone who used to work for a not-so-technical large consulting firm, it pains me to hear newcomers wanting to work for the "Big 4" in tech.

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.

<comment><USER6> As a counterpoint, the prestige of the big 4 can be helpful going from a software engineer to a technical co-founder role. Investors like seeing external validation with that kind of weight.

<comment><USER7> While I can't speak about investors, I personally know of one highly-respected niche company that seriously favors candidates who have one of the "big 4" on their resume (AmaMagaGooBookSoft or whatever they're calling it these days). Ironically enough, a widely-recognized position at a major tech company unfortunately _can_ be a stepping stone that gets you in the door at a place you actually want to work long-term. People are generally _really bad_ at hiring.

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.

<comment><USER8> >While I can't speak about investors, I personally know of one highly- respected niche company that seriously favors candidates who have one of the "big 4" on their resume (AmaMagaGooBookSoft or whatever they're calling it these days).

Is it Valve?

<comment><USER9> I wonder why, since Valve's way of working is very different from the way big companies traditionally work

</comment></comment></comment></comment></comment></comment><comment><USER10> [Disclaimer: I run a technical-interview prep bootcamp, [http://interviewkickstart.com](http://interviewkickstart.com). I also worked at a Big4 of my time. And then some]

Your problem is not with software engineering. Your problem is with interviewing. Don't let anyone (including yourself) talk you into conflating the two.

Technical interviewing process at big4 is optimized for the interviewERs (and the company), and not for the candidate. They have to do that, because their hiring requirements are massive. When you are hiring hundreds and thousands of engineers a quarter, you usually land with the quick, brash process they have currently, despite however well-meaning you are. They can also get away with it, because they have a revolving door of candidates.

Don't let that signal reflect on your software engineering skills. As long as you can solve problems in reasonable time (and 2x is reasonable by many measures), you are good.

If you want to get better at technical interviewing, then use brute-force methods to do so. Find a good source of problems like Leetcode or Interviewbit, prepare a regimen and stick to it. Repeat problems. Do several mocks interviews with something like interviewing.io. You can also use us, of course ([http://interviewkickstart.com](http://interviewkickstart.com)).

But like others have said, you don't HAVE to go that route. There are companies who do similar level of impactful engineering and make enough money, outside of Big4, who don't have a seemingly depressing interview process.

<comment><USER11> Yea I will also echo this. I work at Big4. I don't interview particularly well. I was in fact rejected by this same Big4 the first time around. When looking to move out west, a grand total of one company even gave me an interview.

Turns out the job is totally different.

But yea, definitely practice mock interviews as much as possible.

</comment></comment><comment><USER12> > 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).

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.

<comment><USER13> To add to this great advice: ask yourself why you pursued this path in the first place. Do you like what you do? It sounds like it's more of a job you struggle with more than you like, perhaps there are tangentially related roles you would enjoy more?

<comment><USER14> I would say this is the more important thing. I would argue that even if you are under-performing when held to a certain set of standards, if you _love_ doing it then whatever. If you _don't_ love doing it then you should switch careers even if you happen to be "really good" at computer science.

<comment><USER13> I've found it's a personal balance. I worked very hard to get to a job and a company that I enjoy but I had to suffer some very miserable/toxic environments to get there. Even now, obligations to my family prevent me from being free or starting a family of my own.

I have to include considerations about the survival of my clan which is more important than some aspects of my day-to-day happiness.

</comment></comment></comment></comment><comment><USER15> I know that there's a huge demand for software engineers, and just about everyone can think of the time their company inexplicably hired someone who couldn't do FizzBuzz. But if you've already been hired as an engineer and you've worked there for 1.3 years, at a level comfortable enough where you actually want to keep being an engineer and move on to a "better" company, and you're willing to put in 10-20 hours extra a week studying, then you aren't _not_ cut out to be an engineer. You clearly have the mindset and tolerance of rigor that the job requires.

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](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.

<comment><AUTHOR> Heh. It took me a few months to be put into my proverbial place, but now I understand just how amazing some engineers are. I read that post a while back too. A few of my colleagues have actually done client work for Google (even though they clearly never had to go through their interviewing process).

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.

<comment><USER16> I'll take a young developer who understands where they are over someone who can solve tricky algorithm problems any day. You've got a good attitude and it will serve you well.

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.

<comment><USER17> Judging from my own experience, _none_ of this is true or correct. In particular, programming is by far the easiest way to make a (good) living. The apparent fact that programming is not for everybody does not change that a bit. A lot of people who work as software engineers hate it and/or are not good at what they do, but if coding were taught in K-12, I am sure many more people would have liked it - simply because coding would have been a second nature, just like reading, writing, and counting.

</comment></comment></comment></comment><comment><USER18> Do you like writing code?? If yes, you're in the right field. If no, get the hell out as fast as possible.

Some of the best developers I know couldn't pass a whiteboard interview if their lives depended on it. Conversely, the worst developer I ever worked with absolutely dominated the whiteboard phase of his interview.

If I were you, I'd look outside of the big four. There are plenty of amazing companies out there doing some very interesting things. Hell, I work for a company that I guarantee you've never heard of, but I work on the most interesting problems that I've ever encountered.

<comment><USER19> I dunno. Some of the best programmers I know treat programming as strictly a 9 to 5. I'm the outlier at the moment - I go home and keep programming.

I can't help but feel that the "passionate programmer" is a construct created by SF and SV to trick people into working far more overtime than they need to.

<comment><USER20> Are you saying that you don't like writing code, and yet you go do it as a 9 to 5?

I have never worked with anyone who was a coder that didn't enjoy coding. I'm not talking about being evangelical about it, just a basic satisfaction in what they're doing and not having a desire to be doing something else. (Note that I'm talking about the coding aspect, not the other BS that goes with it sometimes. I've met many people that hated the politics/etc.)

<comment><USER19> No, I'm talking about the difference between a person who codes out of hours as well as working, as opposed to someone who codes just during their job.

</comment></comment></comment></comment><comment><USER21> Your title says "Is it possible for someone to not be cut out for software engineering?" while your first point says "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?" which are two very different questions.

It'd be like me asking "Is it possible for someone to not be cut out for jogging" and then changing it up to "Does there ever come a point where it just isn't worth it to continue trying to be a runner who can win the Boston Marathon?"

Most of us programmers can't get hired at Google because we don't have the pedigree, the work ethic and other qualities it takes to be at the top of the game. That doesn't mean we don't enjoy and make a living at computer programming.

</comment><comment><USER22> You say you've only been prepping from CLRS and Cracking The Coding Interview for the past 1 and a half months. It's not unusual for candidates to spend up to 6 months prepping if not longer. Also, it's normal to be rejected from one of the big four 2-3 times before getting in.

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).

<comment><AUTHOR> Thanks for the input. I tend to be good at programming, but very bad at algorithms / math.

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.

<comment><USER23> 1: Don't get hung up on a specific prestigious company. There's more to life then working for a specific company, going to a specific school, driving a specific car, wearing a specific article of clothing, ect. (This also plays into who you date and who your friends are.)

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.

<comment><AUTHOR> You're the second person I've heard this from within the past week. The last person I spoke to about this is an engineer at Facebook who found that several of the most recent interviewees simply "memorized the material for the test," as it were.

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.

</comment></comment></comment></comment><comment><USER24> Some points:

1\. Skill at software interviews seems to have zero correlation with skill at being a software engineer.

2\. Being rejected for 10 roles is nothing. I've probably been rejected at a rate 5X that. 10X if you count college recruiting.

3\. Despite the "shortage of engineers" meme that constantly gets repeated, competition is fierce. There are a lot more engineers that need work than roles to fill.

4\. I disagree with the commenters here dissuading you from interview prep. It's worth it to study up on interviewing and do lots of practice interviews.

Keep at it! I've been out of work for stretches up to 4-5 months. It's not unheard of. It's kind of a numbers game. Do 100 interviews, and if the accept rate is as low as 1% you've got the job!

<comment><USER25> For #1... I've been pretty vocal in my circle about how stupid interviews are, and I'm pretty bad at the myself...

However, at this point I probably interviewed at 100+ places over the years (Ive been at this for a while), and there's very little variations in interviews. You have a few outliers like Google's stupid "Write this C++ shit in a Google Doc", and the "Please write the jQuery code for a Modal dialog" that occasionally pop up, but overall, its all variations within a finite subset. People are not original.

So after being rejected 10 times, if you still don't see a pattern to exploit in the 11th....well, you might be missing a key skill as an engineer that would be worth working on. Even if you're successful, you have one obvious growth opportunity.

</comment></comment><comment><USER26> I doubt I could get a job at one of the "big four". Their interviews seem mired in hard technical questions, the sort of problems I just don't encounter in the things I build. It doesn't interest me.

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.

</comment><comment><USER6> I'm going to sidestep your questions and just remind you that software engineer hiring processes today suck.

Just because one doesn't do well under the extreme time constraints of an interview does not mean they won't do well as a software engineer. Honestly, in fact, I think it can be quite misleading because you have both: (1) good software engineers who work best solving problems with plenty of time to think, and (2) "hacker" style programmers that can whip up something to pass an interview quickly but are not actually good at design pattern and architectural type stuff that separates the software engineer from the programmer. Just my 2¢.

<comment><USER27> From my experience you never know which person you are going to get from me in an interview. If I'm swamped that day and just did a deployment or something then I'm probably already spent or preoccupied mentally by the time the interview rolls around that day. That was my experience when interviewing at Facebook earlier this year. I generally will go on interviews to at least learn what I don't know or what I don't know well enough to do in my sleep. However, many times its just the luck of the draw that day as to which version of me you'll get.

</comment></comment><comment><USER28> I don't see anything in your question about what you -want- to do. That is the important question to understand.

It's of course possible to not be cut out for computer science, or lawyering, or doctoring, or anything else.

But more than mental horsepower, the most important ingredient is desire. What do you want to do?

Not in terms of "I want to be a programmer because it is a good career" but "I want to be a programmer because I love writing code".

It's very important to deeply understand what motivates you, and what you enjoy doing. This might take decades to fully understand, but you must start now.

If you don't love writing code, you will never be a good programmer. If you don't love helping sick people, you will never be a good doctor.

Find what you enjoy. Start there. Doesn't mean you're going to do that for a living, but you can't proceed without understanding that first. And be patient with yourself. It took me 20 years to realize I was meant to program. You might have to do stuff that pays the bills for a long time while you're figuring it out.

But be honest with yourself, try to listen deeply to what your lizard brain is telling you, and then try to find a way to make that work.

Good luck.

<comment><AUTHOR> If I had it my way, I'd drop everything an do another (tech) startup (I've already done one). The problem is, I don't have the financial resources to take on the risk associated with founding and operating another company. I still have lingering debt from my last one (in addition to college loans), and the best way to resolve it is through doing tech for a few years.

So, naturally, I'd like to make sure I end up at the best tech company (with the highest likelihood of making helpful connections) as possible. To me, this is a step, albeit a necessary one, in the process towards being able to achieve my overall goal.

For the record, I do like writing code. I just hate technical interviews.

<comment><USER28> If you did the tech startup, what would you like your role be?

Would you be the product guy, designing screen flows, talking to users, figuring out how to solve people's problems? Would you be the biz guy, doing deals and making sales? Would you be the technical architect, staying up late hacking away?

===

If you love (and notice I keep using the word "love", consciously) programming, then it's just a matter of interview anxiety. That is solvable. Some great companies don't do standard whiteboard interviews. You could focus on those. You can also bolster your overall hireability by participating in open source projects (my project - [https://github.com/attic- labs/noms](https://github.com/attic-labs/noms) \- is always looking for contributors) and publishing code on github.

At my startup we don't do whiteboard interviews for exactly this reason - <USER2> of people just suck at them. It doesn't give you a good signal. More and more smallcos are going this direction.

===

If what you really love is product design, or business development, or sales, then you can try and get work doing that. I am aware of people who have totally hustled their way into great companies as bizdev or product by just doing what needed to be done before even getting hired ("hey, I found you a customer -- btw can I have a job??").

This also can work for engineers btw. "hey, I fixed this bug for you, btw can I have a job??".

When I was at Google, we had a guy show up to one of the OSS projects. He started sending in patches, participating in the mailing list, making design proposals. We hired him. It largely wouldn't have mattered how he did on the interviews, it was clear he was a star before he walked in the door.

===

I would also note that you don't need to go to one of the big-four to get connections for a future thing. Tech is very close-knit. People cycle in and out of bigcos and tinycos all the time.

It's infinitely more important how much impact you make, than where you are. Change the fate of a small company and everyone there will love you and sing your praises. You'll have opportunities from all those people's direct and indirect connections.

Go to a bigco, and it is actually harder to make as big an impact. You'll know more people directly, maybe, but it will be harder to really impress them.

===

Good luck, again. I've been where you are. It sucks, but you'll get through it.

Try to focus on what you want, then put one foot in front of the other to get there :).

<comment><AUTHOR> 1.) This is a really good question, and to be honest, I'm not 100% certain what you'd call my role. At my last startup, I was the founder, so initially, I had to do everything. However, as the project scaled, I focused most of my energy in three areas: product, business development, and operations. What kept me going was figuring out what our wanted and how to best deliver the product to them. For the most part, writing code was a means to an end (aka a better product and/or user experience).

2.) I certainly noticed your use of the word "love" in reference to coding. On the other hand, I purposefully used the word "like" instead. Coding is fun. I generally enjoy doing it and I find software engineering to be intellectually stimulating. At the end of the day, I view coding / software engineering as a means to an end - a way to deliver a better product, or make a process more efficient.

With that said, although I may not have this innate love for coding, I am the type of person who, upon deciding to do something (e.g. coding), has to go all in. Maybe that's enough to be a "great" software engineer. Maybe it isn't.

3.) Good suggestion, although if I do decide to go the product / bizdev route, I think I need to spend some time understanding more about how the formal versions of these roles actually work. On the other hand, the engineering route seems a little more straightforward.

4.) Noted. If you scroll up a little, you'll see a comment I made in response to the "big 4" bit. I'm less interested in targeting a "big 4" company and more interested in targeting the ideals that they represent (culture, challenge, quality, etc.). tl;dr: I want to work an environment that will foster my professional growth in relatively specific ways.

</comment></comment></comment></comment><comment><USER29> CLRS is not a software engineering book, it's an algo book. This is a somewhat widespread misconception. Anyway, what language are you using to implement these algorithms? Some languages are much worse suited for doing algo work than others. I always hated implementing even the simplest algos in C or Python but it's actually kind of fun in Swift, Rust and Haskell (the types really do help in cementing your understanding of what's going on).

Also, there was an article yesterday on HN about how the process of mastery is about memorization and repetition [https://news.ycombinator.com/item?id=12508776](https://news.ycombinator.com/item?id=12508776)

You should try doing that. Write an algo one day and get as far as you can without looking for help. When you are done check your solution against some correct solution. Do it the next day again and try to do it faster. Repeat a couple more times like next week, next month and before you know it, it will be second nature.

<comment><USER30> I totally agree with you!

</comment></comment><comment><USER31> Start elsewhere, there is a reasonably high demand for software engineers out there, get a job and go from there.

I've done some reasonably complicated things in my programming career (things having to do with encryption, threading, high volume systems) but I'm sure I'd fail a Google-style CS drilling (and have no interest in implementing a non- cyclical direct graph on the whiteboard :)).

Guess what - hacker rank type challenges I'm semi decent but not great at.

I do pretty good with take home mini projects though and with interviews where even if things get theoretical they are still relevant to the actual day-to- day, like let's say describing the thought process behind selecting a linked list vs arraylist for a given situation etc.

Imo these things come with experience, so again if your goal is to get a job with "google" eventually, start elsewhere, get the chops and go from there.

</comment><comment><USER32> I agree with others that maybe you should consider whether working at a fancy company is really the only thing you'd be happy with. That goal strikes me as motivated by social status, not the work itself. I don't think that's a sustainable motivation for a software career.

But I mainly wanted to address the anxiety. Programmers definitely skew anxious; it's a trait that's in many ways beneficial. However, it's easy to let it run away with you. I have been coding since I was 12, and I still regularly have feelings that I'm too dumb to tackle whatever it is that I'm working on. I'm not; I just get uncomfortable when I'm not sure what to do next.

The main way to get past that is by accepting that you have particular feelings in particular circumstances. There's a difference between having a feeling and believing a feeling. If you are having trouble finding that difference on your own, find a good therapist (you may have to go through a few) and work on it with them. At your age I would have tried to macho my way through those feelings, but now I look at that as yet another way I let my reactions drag me around by the nose.

Good luck sorting this out! And thanks for asking such a good question. You've helped way more people than yourself with it.

</comment><comment><USER33> I have nearly 8 years of being a professional developer. I didn't graduate, and got into the industry while in college before dropping out. So there are some differences between us in years in the industry and educational credentials.

First quarter 2016, I was laid off from my job as the first engineer/tech lead of a small startup. I have been searched ever since then, and your experience mirrors mine exactly. I have been on over 25 in person interviews and gone through untold degrading whiteboard interviews, code tests, trick questions, and take home projects; all have ended in rejection. This industry has a need to torture candidates because we are all considered to be liars by default.

Much is said about combating impostor syndrome in ourselves but we are too eager to cultivate it in others. It seems people in this industry refuse to understand that some people are not perfect. I never graduated college because I hated it with the very fiber of my being, so I am, like you, not particularly great at white boarding answers to algorithm questions off the top of my head in a high pressure environment. If I need them during my job, I look up answers and learn from people who are much smarter than I am.

My personal identity has been shattered, as I thought my ~5-10 year history of success in the industry indicated I was in demand and talented. I saw posts like this and thought that if the worst happened I'd still be able to find a job. The idea that there is a talent shortage is a lie, or candidates like me wouldn't be treated as I have been. I'm not asking for a free job, or a handout, or a huge salary. I have had a successful career so far and am capable of doing good work.

I have struggled with bipolar disorder and suicidal ideation most of my life. I've dealt with the death of beloved family members and pets over the past two years with only minor lapses in control. Nothing has caused me to consider taking my own life as much as the past 6 months. It seems there is no future for me in the only career I have any skill in and which is a huge part of my identity. And to constantly be told that there is such a shortage of engineers only salts the wound.

If you are expecting things to get better with experience, they won't. It's up to you to decide if you can take the mental strain of continuing in an industry with such inhumane hiring practices.

<comment><USER34> I have to agree with you here. My contract ended last February. Since then I have applied to over 220 jobs. 2 in 3 don't even bother to reply. As for the rest, you get a rejection letter, or, if you're lucky, an interview. I've been through a number of prolonged interview rounds with a coupla dozen of companies since then. You know the drill... interview with recruiter, more interviews with technical people, programming tests, even more interviews, etc. It seems everybody wants to copy Google's process nowadays.

None of these have panned out, they did however waste a lot of my time. But the worst thing is how useless the whole process makes you feel. I have a lot of experience, but that doesn't seem to count for anything in today's industry. Also, you get no feedback, so it's basically a black box that you put effort in, and then you're left guessing where you failed and what you did wrong. Study up on the things you didn't know enough of? Sure, except the market is so extremely fragmented that every company wants a different set of skills and technologies. (A while ago I counted the number of different technologies asked for in one of the "who is hiring?" threads. I stopped when I reached 200.)

After spending months trying to get a job in this kind of environment (with no unemployment or disability, so there is a lot of pressure), it becomes really hard NOT to feel like a complete failure. Apparently I can't even get a mediocre job. And at the same time you keep seeing persistent rumors that there is a high demand for software developers. Companies supposedly have trouble finding them. If that was really the case, why do they make it crazy hard to get hired? In actuality, many companies mention that they get an overwhelming number of replies, which seems to be more in line with their behavior.

<comment><USER35> what area were you applying in? Maybe its just an isolated geographic incident.

<comment><USER34> Most of the jobs I apply for are remote, so all over the US (and a few outside of it). That does mean that a significant chunk is in Silicon Valley. I apply for local jobs as well but there are not that many, and the turnout has been even worse.

</comment></comment></comment></comment><comment><USER36> 1) passing job interviews is a skill orthogonal to coding abilities. You might want to get a book and start training on that.

2) I failed Google's interview 6 times. OK, so I don't work at Google, but I am still a decent software engineer loving functional programming and distributed systems.

<comment><USER37> >I failed Google's interview 6 times.

During last few years me and 2 of my friends passed the interview and got offers there. Everytime Google came up with noticeably (like $10K-$15K) lower salary than the then current pretty typical SSE salary of the candidate with barely balancing that decrease by stock (with total being $5K-$15K higher on a good market day). One of the friends even took that offer with obvious result - more disappointed by the offer than enthusiastic he barely made through the first year and run away.

<comment><USER38> That sounds like supply and demand pricing, people want to work for Google even if the salary is low. It could also be a good pay off in that some people will value you as a better programmer because you're ex google? The right move might well be to take a position for a year and leave if you don't like it, on leaving I imagine you can get a better paid position more easily than before it was on your CV??

<comment><USER39> This is exactly how salaries become how they are in the gaming industry.

Source: I worked in the gaming industry. Everyone wants to work at Blizzard, so why pay people what they're worth? Because you get what you pay for.

</comment></comment></comment></comment><comment><USER30> I am a recent college grad and I started interviewing pretty late. I never did an internship while in school and have had a grand total of four phone interviews to date and two onsites(Google), resulting in one job offer(with a decent tech company). I think tech interviews are beatable. Here's my hypothesis/strategy: \--> The "problem solving" part favors people with an aptitude for math but I think that this is a skill that can be acquired. I presume that you have an understanding of all the basics including graphs and Dynamic Programming. Doing mass interviews/concentrated studying might not help here. I would recommend a style to you: Start with a problem and solve it in 45 minutes. Then look for a similar problem(within similar domain) and try to solve it 40 minutes. Then push yourself until you reach about 20 minutes. Shift to another domain and repeat the process over and over again. The idea here is to practice for interview just like you would do for a math exam. You should never trip on the basics e.g code syntax, or understanding what data structure to use etc. Also problems belong to certain domains and this strategy of repetitive training develops the intuition to categorize a problem. Finally, 1.5 months might not be enough. I would recommend about 3 months of studying as you understand things better over a long period of time --this is why cramming never works. All the best

<comment><AUTHOR> This is an interesting strategy. I like it. Also, given all the posts in this thread, I'm beginning to think it's going to take over a year to really get a good understanding of this stuff.

<comment><USER30> One year is way too much. Tbh, you need two semesters of coding to beat tech interviews. An intro to programming class and data structure class(Which I think you have).

The only advantage taking more classes is that you develop "Comp Sci street cred" but I believe it has no correlation to success in interviews. The advantage of experience is that you get to master a certain language well. Other than that it just comes to a matter of how you practice.

For "culture fit"(which generally means don't be an asshole), communication and butterflies, I think [https://www.pramp.com/](https://www.pramp.com/) will go a long way in helping.

</comment></comment></comment><comment><USER40> For me, interviewing is the worst part of being a software developer. Now that I am a little more senior (5 years experience) I can see that its pretty miserable doing the interviews as well.

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.

<comment><USER41> > Now that I'm a little more senior ... I can see that its pretty miserable > doing the interviews as well.

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.

</comment></comment><comment><USER42> Your original header and the content of your question do not match. I've been a software engineer for 10 years, enjoy my job considerably and been commended for it, but am not working for the big four or a cool startup.

I can't give you any other advice, except for my personal satisfaction the team I'm in and the domain of the problems I need to solve weights so much more than the specific company I'm working for.

For the technical interviews I've participated, I've always sucked ass. But guess what - those tests don't correlate with success at the actual work any way. They are a gate, but a bit arbitrary one at that. Yes, one needs to understand all that stuff, but can solve them at ones own pace - <USER3> puzzles usually take only a fraction of development time unless the situation is most unusual. If you can solve the problems, then from practical point of view it's sufficient.

On learning techniques, Barbara Oakley's "A mind for numbers" is an awesome book. I'm 36 and I wish I had read it 20 years ago. Slow is not bad, if correct methodology is used to verify learning. Slow can be deeper. Barbara also suggests some techniques for dealing with test anxiety - which I've not tried myself, mind you.

As per yout goal, I'm afraid I have no idea what is possible and what is not - people are complex and unpredictable. But as a senior software engineer, from the point of view of theoretical capability - if you understand the problems and can solve them at your own time, that's quite sufficient.

</comment><comment><USER43> Of everything you've said, nothing suggests you actually _like_ programming. I think that's most accurately reflected in your description of how much a chore you find algorithms. That's a pretty serious issue.

I don't think I'm alone when I say problem-solving —even if it's not novel— in an efficient way is something most software developers live for.

Part of this is learned and honed with experience. Part comes from a drive to solve [any] problems, even simple puzzles. I truly believe you can learn everything there is to know about programming, but if that's not your passion, you're never going to thrive.

To answer your questions:

1\. Your aim to become a top-tier company programmer will never happen at the moment. They only hire passionate programmers who love their work. You can't expect to be hired and _then_ get passionate.

2+3. Stop focusing on study and GPAs. That's done. BUILD SOMETHING for yourself to get some experience doing something you have a vested interest in, not under test conditions. Improve it. Ask other people how you can improve it.

Once you have something that's yours, you might be able to display some passion in an interview (as well as having gained some "real" experience).

If you can't muster even that much enthusiasm for the subject, perhaps it's time to look elsewhere. It's not for everybody.

</comment><comment><USER44> > 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?

Don't just look at the top-tier companies / projects. There are many projects/companies where you can learn, grow and contribute.

> 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.

Are you getting a positive reinforcement when you are doing software engineering ? That is the key question. If you do, you can have a very satisfying career. Even if you don't work at google.

</comment><comment><USER45> I would seriously cut the interview prep crap. It's useless in my mind. You're the person you happen to be, and that's the person that need to walk into an interview. Never prep for an interview (other than of cause figuring out what the company does and if you'd want to work there), you'll just try to remember the prep and not focus on being at the interview. Most interviewers only care about who you are, and ensuring that you didn't lie on your resume.

If you want to make difference, find a small business, no more than 30 to 50 people. The kind of company that wouldn't except a person like you to walk in the door.

<comment><USER46> _I would seriously cut the interview prep crap._

Yup. Governing principle being: if a hiring filter can be significantly "prepped" for -- then you have to ask whether it's really valid filter in the first place.

<comment><USER47> It isn't, but if you want to work for those companies you'd better be prepared for it anyways, because they don't care if it's valid for them or not.

<comment><USER48> My problem with the approach is that you may be faking your way into a job you're not qualified for by prepping specifically for its interview. Say you want to work for Company A and get your hands on their interview questions. You memorize them forward and backward and practice until you can spit out the expected answers with confidence.

Great.

On your first day at work, you find you're actually expected to _know_ everything related to that material. You studied for Bayes' Theorem, which is great, but your first bug is fine tuning a random forest exploration. Cue deer in the headlights face.

My favorite jobs - including the one I'm currently at - are the ones I just walked in off the street for. Sure, I did my homework about the companies, their plans, their management structure, etc., but not one second of reading up on the docs of their tech stack. Either I knew the stuff (or had enough related knowledge that I could learn it quickly), or I was honest about my shortcomings in that area. And on my first days at work, I either knew how to do the stuff they asked of me or was comfortable reminding them that I needed to bone up on it first.

TL;DR I feel like studying tech for an interview is like lying to a first date. It may impress the other party but it doesn't last. Be honest, relax, and wait for a legitimately comfortable relationship.

<comment><USER47> In my opinion if you can prepare for the interview, then you can probably pick up anything else you might need to know for the job, too. A lot of algorithms and data structures you'd have to memorize for these interviews are also very easy to Google when you don't know them, and having to do that isn't likely to make you much less effective.

</comment></comment></comment></comment></comment><comment><USER49> I'm not an engineer but I'm am a tech consultant. First, there are options outside of engineering that you may like. Second, being rejected by 20 companies doesn't seem excessive to me. It really is a numbers game. I have 10 years of experience and I'm looking a list of 83 places that didn't want me within the last year. Interviewing really beats me up and makes me feel like I have absolutely nothing to offer.

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.

<comment><USER50> > First, there are options outside of engineering that you may like. Second, > being rejected by 20 companies doesn't seem excessive to me. It really is a > numbers game. I have 10 years of experience and I'm looking a list of 83 > places that didn't want me within the last year.

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.

<comment><USER49> I think "nobody can find good engineers" is a fallacy. Either the filtering is failing or they simply aren't paying enough to attract "good engineers". If they are paying an average wage they should expect average engineers to apply.

</comment></comment></comment><comment><USER51> 1) The answer to that needs to come from you. If it's important to you to work at a "big four" tech company, it's probably possible with enough effort.

2) I think most people in industry realize that interviews don't really correlate well with how well people actually do their jobs. So I wouldn't take rejection too hard. It really is strange that in interviews we test for "can you figure out a non-trivial problem in the time it takes for me to eat a sandwich" when most software engineering roles are more along the lines of "can you work well with others, generate and document clean/functional code, and learn what you need as requirements change".

3) For most things, the best way to get better at something is to do more of it. Interview every single day. Hopefully over time you will get better at it. If you don't, consider seeking help with your performance anxiety. That might help.

Best of luck! :)

</comment><comment><USER52> There's a lot of good feedback here for both sides. The only thing I want to reiterate is that success isn't defined by employed by the big four. There are companies that embark on more interesting engineering challenges or pay more. Big four is a measure of status, not success. I don't think you've defined what you want well enough to quit because you're not being hired by the big four.

</comment><comment><USER53> More Questions Than Answers :

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.

</comment><comment><USER54> Practice your softer skills for interviewing. Do you get anxiety over other aspects of the interview, like the fact that there's an interview itself? Work on that. Many times candidates get hired even if they bombed some aspect of the technical portion of the interview, for various subjective reasons. (Also consider asking for a take-home problem where they give you 2 hours or whatever to email back the solution. It can help if that is solid but your on- the-spot whiteboarding is shaky.)

Also consider an SDET role, those can sometimes be easier to get and then you work internally on removing the T if you really don't like that sort of work.

</comment><comment><USER55> Being on the other side of the interview table is helpful for perspective. You might even experience this if your team is hiring for a position and wants you to look over resumes, do phone interviews, in person interviews etc.

If I interview six people for a position, usually one is really good, four are average, and one is really bad. Guess who is getting the offer? It's almost a paradoxical thing - being average is good enough to keep a job, but you have to be in the top 16% to get a job. Lucky for you, the above average interviewer usually gets competing offers, so that leaves the less attractive job slots open.

If you take six random programmers with a CS degree and <2 years experience, are you the best of those six? If not, you're one of the four average ones, and are not going to pass most interviews unless the market is hot and they desperately need you _or_ you have a friend bringing you in who vouches you can do the job.

You also say you want to "get into top-tier companies / projects". Well, that doesn't mean being one standard deviation above the mean, it means being two standard deviations above the mean.

So now you don't just have to be the one in six that sticks out as good, you have to be the one in fifty that sticks out as great. You know those one out of six quality tier guys I talked about? Now you're competing with just them, and you have to be the best among seven or so of them for the job.

When I was studying CS, I was once assigned to write a homework on the process scheduler for Linux, Mac and Windows. Within 20 minutes I'd know I would have an A on the paper - that was all the study into the subject that was necessary for that mark. But then I continued to read about process schedulers for the rest of the night, because I always wanted to look into it, never really had, and if I was ever going to do it, I knew then would have been the time.

I'm not like that all the time in terms of devotion to learning CS, but if I was, I would have a shot in being one of those two standard deviations above the curve programmers. Because that's what they do, even after they know they got the A on the paper, they keep reading even if it takes hours just so they really know and understand the subject more fully.

</comment><comment><USER56> I suck at studying. It's boring, I have a short attention span for words on a page. And I'm not a good listener, so someone explaining things to me verbally is the fastest way to fill my brain. I used to try learning this way, failed miserably, and then told myself I couldn't be a programmer.

I'm good at grinding away. I'll bite onto a something I want to learn and not let go until I frikkin' get it. I learn with my hands, by asking questions, and staring at the screen until it makes sense. I've learned to push through it, and just write crap tons of crappy code until I come up with something interesting.

As recently as a couple years ago, I had a hard time finding ANY work as a developer. 6 months ago, I finally landed a dev gig that doesn't suck, and my coding mojo has been skyrocketing ever since. I've had code merged into the Elixir code base, I've got another PR waiting to be merged into Systemd, and I'm accidentally discovering use cases for those algorithms that bored me to death when I tried studying out of a book.

If you want to chat, my email is in my profile. I was a technical recruiter for 9 years, and now I'm Sr. Software Engineer (at least in title!). If you have some foundation level skills, there are plenty of ways to hack the interviewing process.

Good luck. If you can't climb someone else's ladder, build your own.

<comment><USER57> >If you can't climb someone else's ladder, build your own.

Seconding this, this doesn't just work in programming.

</comment></comment><comment><USER58> There are people who aren't cut out for it, for sure but it's probably not for the reasons you think.

In my experience those "not cut out" for software engineering who struggled did so not for a lack of intelligence or learning ability, but lack of desire.

To succeed in this industry you need either be:

1\. A "Natural": rare but real people who learn things so fast they don't put a ton of effort into it. They "get it" very quick and find a way to keep current and continue learning ahead of most within their 40 hour week. They spike on something for an hour, comprehend it and retain it.

2\. Everyone else - You'll need to work your day job and learn the most you can, and go home and learn more. Experiment, go through walkthroughs/tutorials/courses and consume information. On your own time. Constantly seek out new technologies and methods, build side projects to learn.

Those are the two types I've seen, and I fall into the latter category. I could never be at the skill level I'm at now by just showing up to work. I have a lot of outside of work tech activities and I'll be the first to admit there are many concepts I don't "get" right away. But I keep trying because I'm having fun. The end result isn't as fun as the experience for me.

Of all the people I've worked with in the last 20 years, most of those who gave up were in the same camp as me but either didn't enjoy "having to learn" something, didn't have the personal time, or just didn't want it bad enough.

I know this isn't the most sunshine and rainbows answer but it's the truth. Look inside yourself and ask why you want to do it, and how bad to you want it. Really ask yourself the question "why do I want this?" and be honest with yourself.

For me the answer is "I love building things and solving puzzles" and I want it bad enough to sacrifice a lot for it. When I imagine something abstract and piece it together into something it feels nice. The money is great, but it's not my primary motivator. This may or may not apply to you but if you're passionate and you love it, you will succeed and it will get easier as time goes on. I learn things about 5x faster than I did when I was 2 years out of college. You will too, if you want it.

If you aren't that passionate about it, start thinking about something that makes you feel like you HAVE to succeed at it, at any cost.

</comment><comment><USER59> Is everyone cut out to be an Olympic athlete, or are some genetics involved? The answer is "it's a mix."

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.

</comment><comment><USER60> Rejected by 10 different roles when you only have 1 year of experience is normal, as is being rejected by 20 companies during college. I've done (far) worse, and I'm still in this industry after 10 years and enjoying it.

If you spend 1-3 hours per day on interview prep you are overdoing it.

Stop it, spend your time doing something else that will benefit you in more subtle ways in the interview and in everyday life, like: * Get in better physical shape (take a walk! go dancing! lift weights! bike around town!) * Hang out with friends, or try to get a new friend by putting yourself into a different environment than you usually are in. The point is to clear some of the anxiety and stress that you now seem to carry, and go into an interview with more confidence and more relaxed.

I too suck at algorithm problems. It is mostly because I fail to see the relevance to the work I want to do, which is to build great software with other devs that want to do the same. The 2-3 times during my career when I've really been confronted with problems that require some clever algorithms to do this, then all of a sudden it becomes very interesting and keeps me up at night.

So perhaps algorithm problems at the whiteboard during the interview is not your strength. It is surely not what the job you are interviewing for is really about either. Just be honest during the interview that you find these situations awkward, and that you perform much better in a real work environment.

Explain what value you think you can deliver to the employer. It might be that you get things done with quality without over-engineering for the future, that you have a solid linux sysadmin background and can help out in a web dev team with these skills, and that you have experience of what works once things are deployed. Or maybe that you really enjoy working close to customers, or that you are the go-to-guy when it comes to tool XYZ, etc.

First and forement do a good job were you are now. If your goal is to get into a top-tier company then accept that you may have to change employer 5-10 times before you get there. You must always focus on doing a good job at your current employer, since the more years in the industry you have, the less algos at the whiteboard during interview counts, while contacts and your reputation starts to weigh very heavy.

Best of luck!

(As always when answering these kinds of questions you really are shooting from the hip because you have so little information, compared to seeing/knowing someone in real life...)

</comment><comment><USER61> Interviewing is a special skill. I would try practicing it with real people (if you haven't already), and to actually implement the algorithms you are struggling with in real-time with your friend that is "interviewing" you. Basic point is that you need to spend some time practicing like crazy where you have the ability to "fail" with friends. I have done a ton of technical interviews, done a qualification exam for my phd (twice :-) ), and its hard. You have to learn how to improve your speaking capabilities, and know the material well enough so that you can speak confidently. Basically if you feel like you are winging it, then you don't know the material well enough. If you feel like you know it, but then "suddenly" forget the info, then that is basically like stage-fright, and you need to practice with people like crazy. Another method is to create like 10 questions that are annoying questions that you can imagine somebody asking you. Then save them someplace. Then on a random Friday afternoon, pull out those questions, get a blank sheet of white paper and sit down and "answer" those questions without looking at a book, and time yourself as you do it. I would not give up, just keep trying.

</comment><comment><USER62> The _combination_ of "I am REALLY bad at algorithm problems and experience serious performance anxiety." and "My current target is a role at one of the "big four" tech companies " seems to be at the root of your troubles. The 'big four' interview processes are heavily focused (for better or worse) on whiteboard algorithmic problem solving. You should change one factor or the other to make progress.

My 2 cents.

</comment><comment><USER9> So what you can't get into the big 4? There are several companies with interesting problems AND a bigger chance for you to actually make a difference.

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

</comment><comment><USER63> It took me 8 years of industry programming (after college) to get a job at a top tech company. But I'm here, and I feel like my skills are a lot better than they were. Don't get down on yourself by getting rejected, and don't invest too much time in interviews. Take 1 or 2 a year, and just concentrate on being a better programmer and person.

1\. No, but you should evaluate how much time you invest in this. (time per year)

2\. I hated every time I got rejected. I never did postmortems myself, but swore I would never interview at another BigCo again. But guess what kept happening.

3\. I never found a mentorship useful. The best way is to find where you're deficient (which is hard, because companies almost never give feedback). I don't think post-mortems is the right way to approach this -- look at different ways companies evaluate someone (tip: it's not always just the code you write), and see where you can do better.

I'd be happy to answer ad-hoc questions you have -- maybe it would be better to provide suggestions by understanding of your particular circumstances.

</comment><comment><USER64> Big companies suck. They stifle you creatively, make it difficult to learn or find a challenge, and tend to surround you with people who have a conservative mindset. You will rarely be exposed to all aspects of a business, rather only to the pigeon-hole you are assigned.

Find something you enjoy, work on it, don't worry what other people think. People that you _want_ to work with tend to care more about your attitude, confidence, personability and capabilities rather than paper or formalisms. As long as you are learning and pushing your boundaries, you are not wasting your time. Keep applying for different smaller businesses in your area or that you may be interested in: also, in many countries employers may let you come on as a 3-month lower-paid intern then up your salary when you prove your skill.

It seems you have reached a point where you are doubting yourself: this is healthy, but give yourself a break! Look at all you have achieved, focus on the parts you enjoy, and worry about planning a career path after a job or three.

<comment><USER65> Well, any company can suck, but I agree -- focusing on "big 4" is probably a mistake. Find a team where you fit in.

</comment></comment><comment><USER66> I have problems with interview anxiety too. Fortunately, you don't need to be good at interviewing or algorithms to be a successful software engineer. I think a lot of the good companies realize good interviewing skills and good programming skills don't go hand in hand. Interview practice can be helpful, but my suggestion is to get into actively developing open source software and add significant code contributions to projects. People care about actual code you have in production, contributing to major open source projects is an easy way to get your code in production and tested across millions of servers. The kinds of companies you ultimately want to work for care far more about what you have actually done code-wise outside of the interview far more than any trivial test they could possibly give you in an interview. If your contributions are significant enough, companies stop asking you to do those lame technical interview tests altogether and just hire you.

</comment><comment><USER67> Interviewing is a skill like all things. The more you practice the better you will get at it. Unfortunately, this process can be slow and the worst part is that when you interview you don't really get any kind of feedback from the company about why they rejected you. I'm working at a startup in this space refdash.com where you could go do a technical interview and get some feedback from the interviewer on how to improve. Perhaps the problem is just that you don't know what the interviewer is looking for or what strategies to use to feel comfortable in an interview.

The other thing I'll say is that the "big four" companies are glamorized a lot, but each have their own issues. I would say focus more on the fit than the name.

Other tools that are nice are leetcode and hackerrank for practicing. They can offer positive reinforcement because you can see how you are able to solve problems and keep track of your success on those.

</comment><comment><USER68> I don't think you are cut out for a job at the big tech companies simply because they do put so much weight on discrete math and puzzle solving.

I say this as a person who is pretty much in the same boat.

</comment><comment><USER69> I feel like algorithmic interviews are starting to be a red herring. When we are reaching a point that people need months of preparation and special interviewing bootcamps, we start to experience something akin to Goodhart's law. Correlation with real world skills get smaller and smaller, as people stop honing their "real world" skills and focus their energy on gaming the artificial metric.

Many companies are starting to value good github profile more than "how quickly are you going to implement the dijkstra algorithm on whiteboard". I believe this trend is better for candidates and companies, so it will continue.

I am speaking it from the point of someone fairly proficient in algorithmic challenges and algorithmic interviews (e.g. top 100 google code jam, worked/interned at 3 out of big 4).

<comment><USER70> > Many companies are starting to value good github profile

Expect an industry to grow around servicing the github accounts of US-based programmers to make it look like they're doing side projects and learning certain skills. In reality, it'll be India-based college grads doing the github updates to a specified schedule -- the same college grads who presently do course assignments and online coursework for US-based students.

<comment><USER69> Maybe with plethora of online info, we could implement reasonable fraud detection?

      - Detect copy-pasta code
      - too inconsistent language style (either code or English)
      - prepare interviews questions about github profile (e.g. What made you choose library X for project Y)

</comment></comment></comment><comment><USER71> 1\. If you love writing software, don't give it up just because you don't fit into the existing mono-culture of "top-tier" tech companies. Recall that WhatsApp's founders were both rejected by Facebook, but still managed to build a game changing company that Facebook later bought for ~$19B.

2\. Find an interview coach or service that suits you and can help you improve by giving you detailed feedback and concrete advice. The cost of professional help is noise compared to developer compensation. Reward yourself for steady, incremental progress, don't beat yourself up for not being at a specific level yet.

3\. Take classes on algorithms and data structures until you can solve problems cold. Master key topics, don't settle for incomplete understanding of your craft. Be curious.

</comment><comment><USER72> Feynman has a really nice quote I think that is encouraging for someone with your experiences

 _"Right. I don't believe in the idea that there are a few peculiar people capable of understanding math, and the rest of the world is normal. Math is a human discovery, and it's no more complicated than humans can understand. I had a calculus book once that said, 'What one fool can do, another can.' What we've been able to work out about nature may look abstract and threatening to someone who hasn't studied it, but it was fools who did it, and in the next generation, all the fools will understand it. There's a tendency to pomposity in all this, to make it deep and profound." – Richard Feynman, Omni 1979_

I agree with the sentiment. There is much pomposity in the software engineering field and the usual interview process is more like a hazing ritual than an interview so being stressed out about software interviews in general is the correct response.

It sounds like you are a persistent and hard working individual though and those characteristics will serve you far better than being good at algorithms and software engineering interviews. My favorite quote about persistence and hard work is from John Ousterhout

 _A little bit of slope makes up for a lot of y-intercept

CS140, 01/13/2012 From a lecture by Professor John Ousterhout_

Do not despair and continue improving. The job part will happen on its own. Trust me, you don't want to end up somewhere that values reciting topics from undergrad CS 101 over the kind of disciplined and hard working attitude that you clearly demonstrate.

The relevant links for where I found the quotes: [http://duncan.mkz.com/what- one-fool-can-do-another-can/](http://duncan.mkz.com/what-one-fool-can-do- another-can/), [https://www.quora.com/What-are-the-most-profound-life- lesson...](https://www.quora.com/What-are-the-most-profound-life-lessons-from- Stanford-Professor-John-Ousterhout)

</comment><comment><USER73> Yes, some people are naturally bad at the big 4 style programming interviews. I know several great engineers who lead leads at startups who have had difficulties in such settings.

I myself had a terrible time with McKinsey style case interviews, which is sort of a cousin to tech interviews.

</comment><comment><USER74> When you're looking for work, you enter the marketplace with a certain set of skills and experiences.

As you interact with the market, you're supposed to be understanding better what sills and experiences you _should have had_. Then you start gaining new skills and experiences to match the market.

If your market is so small as to only consist of a few name-brand companies? Your sample size is way too small. This is a numbers game, and you need to play the numbers -- not try to mold yourself into some candidate some arbitrary set of companies would like. Quite frankly, it sounds like a fool's game.

You're a smart person. Play the game according to your rules, not theirs.

</comment><comment><USER75> I sucked at programming, rejected by google twice. I could finish problems and even finished whiteboard puzzles, but I never enjoyed large infrastructure projects and that showed in the interviews. I had a "kill me now" face as one HR person put it :) OTOH I love loved mathematics and working on complex scientific problems. So I switched to machine learning and scientific computing, and fforward a few years, I won the best employee of the year award in a fortune500 company with over 20K employees and have a couple of algorithms patent pending. Just one more line for you to think about.

</comment><comment><USER76> "\- 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)."

I am a principal engineer at a mid size (~4k employees) tech company (F5 Networks), and if someone asked me to do a bubble sort, or other algorithm from memory I would end the interview there, and have. The CTO at a company I was interviewing at asked me to do bubble sort in less then three minutes, I said no, lets just end the interview loop here. Google almost always asks a pure memory algorithm question, though they have been getting better at remapping the algorithm solution they want to actual work they are doing.

As an interviewee the ability to write out some random algorithm from memory, that I could just google for tells me nothing about the type of work I would be doing, how I might fit with the team, how the team thinks and collaborates.

As an interviewer I never ask this type of question since it does not tell me anything about how you think, work though problems, and collaborate with others. I always try to tie my technical questions back to problems I have had to solve in the past two or three months.

For a Software Engineer of any level your ability to think critically, ask the right questions, and work with others is way more important then your ability to bang on the keyboard in the right order. Syntax and idiosyncrasies of a language can be taught to just about anyone who can think critically and knows how to collaborate with others.

"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"

Not if you enjoy doing it. If you do not enjoy it and find the work a constant struggle that you dread facing every morning, then move on to something you enjoy.

Also "top-tier" is rather subjective. I will never work for Google or Amazon. I would prefer to enjoy what I am doing, be able to have a life outside work, and get paid more (At least compared to Google and Amazons average pay in Seattle for the same role).

</comment><comment><USER77> Hmm, few notes & questions:

\- 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 :)

<comment><AUTHOR> Thanks for taking the time to share some input. Here are your answers:

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.

</comment></comment><comment><USER78> Forget practicing the tech for now. Sure it might be where you "fail" but it Sounds like performance anxiety is what is holding you back; work on your confidence in interview settings. Apply for jobs you'd never take (I mean, non tech jobs where you are sure to get an interview) to give you more practice in these settings.

I see this sort of thing in newer engineers we interview. It's the thing that makes it hard to get to the root of how good someone is.

Right now the sort of challenges the big 4 are setting might not suit you. You might need more experience elsewhere; that's okay, you've got a year as a SE, wirh some good previous background: the future looks bright. It does take a while to get there. I measure myself as successful; at 29 I am a well paid engineering team manager at a largish firm. We do cool tech and I get to promote Devops. 8 years ago I was on a cruddy wage doing very little engineering - but learned loads that set me up for success. Focus on what you can learn right now to make yourself better, add things in increments, don't burn yourself out looking for the shortcut. Most of all don't fall for the hype; there is so much more than the big 4 or a start-up, and they do good engineering too!

</comment><comment><USER79> Having trouble with interviews isn't a big deal, it's just a grinding process. What I do personally is think through issues I had myself while going through the problem. Not necessary but you could also see if with the post-interview results, you can get any possible feedback from the interviewers themselves.

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.

</comment><comment><USER80> I graduated during the first dot.com boom, and decided to transition from Economics to web developer. I got a job at a small company, with minimal programming knowledge. My programming test was explaining how a Perl program I wrote worked.

I certainly wasn't a great engineer, and I have never been a natural programmer. But the company I worked at realized that they didn't need the top 1% to build basic enterprise software. Paying a kid out of college 1/5th the salary of a top 1%er, and who a maniac about learning, was pretty attractive to them.

The barrier for you guys is so much higher now, and it's a shame. We need you. We really, really need you.

I think the real question is: do you like building real applications? Algorithm questions are wonderful intellectual challenges, and useful background knowledge. But most engineers I know spend 90% of their time figuring out why something wont compile, trying to integrate with crazy APIs, or dreaming about how new technology X will fit into the stack. Worrying about whether the hash table Java uses is O(n) or O(1) is very low on my priority list, and something hard to justify to bosses and customers who care about a shipped product more than microseconds of optimization.

Take a break from programming if you can. Get a job in retail, and experience a different form of suffering for a while. Or join the Peace Corps. When your brain gets rested, find an open source project that interests you, and contribute to it. If you can't find one you like, or find that it bores you to tears, consider another profession. There's no shame in that, the world needs doctors, lawyers, chemists, business people and barristas as well.

</comment><comment><USER81> I matured as I get older, don't feel too harsh about yourself because of where you are know.

I think the most important part is if you are interested in software engineering and find coding fun.

Life is long, and you have many, many years to get "successful" still. But there is a large chance you are more successful than you think.

As for tech interviews, it is a skill that can be learned. Things like hackerrank.com, but also just getting more work experience helps.

</comment><comment><USER82> Consider that it can be easier and often more rewarding to be a good software engineer in a non-software field than a good software engineer at Big4 - <USER4> can make major contributions to other fields even as a mediocre software dev because you're not 'competing' with the best of the best. Take up a position as a software dev in a field that has not yet been eaten by software and ride the wave to the top.

</comment><comment><USER83> >\- I am REALLY bad at algorithm problems and experience serious performance anxiety.

For me this is the key sentence here.

Don't worry about feeling like you had to work harder than everybody else during college, that is called imposter syndrome and it's normal.

As for the performance anxiety on technical stuff, I had the same thing. I was even barred from being allowed into programming courses, that I would have to pay a lot of money for, because I failed the aptitude test. I went back in days later and I demanded to retake it after failing and was allowed, and did even worse on the same test.

So I had crippling self doubt. Then given a few years to work on my own stuff, I taught myself C and became the most prolific developer (my work is linked to in other comments I've made on HN if you want to check it) I know churning out loads of awesome software. I even got into kernel hacking in C and stuff. I still don't know if I'm inherently clever or even a good programmer, but I do know I've achieved good results. I think if you're passionate about it you'll find a way to create what is important to you, even if it's very technical.

</comment><comment><USER84> Taking this in a totally different direction...

Have you been evaluated for ADHD? (PsychD with the long paper test & blinky box with clicker, not necessarily MD with the "Ask your Dr about Adult ADHD" screener).

You might not have the stereotypical symptoms of ADHD, but the executive function hit (and unconsciously compensating for it) can lead to symptoms that resemble a lot of the things you mention in your background: feeling like you have to work harder than classmates, having issues with algo problems, performance anxiety, and needing 2x more time on some problems.

I mean, aside from school, you are clearly smart enough if you can do full-on sysadmining (debug and solve problems, not just follow tutorials) and use code to solve project euler problems. Why not make sure you aren't handicapped in a way that's totally treatable?

Of course, this could also just be graduate nervousness and insecurity that can be overcome with practice and experience, but I wish someone had mentioned this to me when I was mid-college so I'm mentioning it.

Disclaimer: I am not a medical professional, this is from personal experience and comparing notes with coworkers with ADHD. YMMV.

</comment><comment><USER85> >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.

You're shooting high and dissatisfied that at 1 year out of college you're not 'there' yet. Regardless of your interview performance or speed with tech challenges, you're still a 'junior' (not a great term as it can seem insulting, but it's what the industry uses) engineer.

Your question is more "Is it possible for someone to not be cut out for super- prestigious software engineering?" Which is much different. If you want it you're going to have to work hard for years. Wanting it for the sake of the prestige (which is the vibe I get from this post, sorry) is not enough.

Why do you have this "if I can't make it there, it's just not worth doing" attitude? Do you have to be heads above most engineers in order to feel ok about yourself? Listen: all around the industry people need software engineers. Serve your purpose as a diligent engineer.

Just: do good work. Then do more of it.

</comment><comment><USER86> I think you already have enough technical skill to be a good engineer. Like others and even yourself have said, the problem is the interview.

What kind of post-mortem are you doing? Are there particular types of questions that give you more trouble, e.g. tree traversal, recursion, bit math, data structures, OOP concepts/design. If you're having a hard time figuring out what algorithm or data structure to use, you may have to get more familiar with common algorithms, like graph traversal, BFS/DFS, recursion, etc. Once you know the basic algos and data structures, they become your tools and building blocks to solve a problem.

If speed is your issue, you'll need to practice solving problems to train your intuition to come up with working solutions quicker. You will start to recognize problem types and the algo and data structure to use.

Also, being familiar with common data structures like lists, arrays, hash maps, trees and graphs is essential. Know their runtime and space complexities, so you can know when to use what.

Sites like hackerrank are good places to get practice questions.

Hope this helps.

</comment><comment><USER87> To me, it looks like you're just having problems with algorithm interviews. I have a solution for you and it's much more effective than textbooks - go to websites like www.spoj.com, projecteuler.net, topcoder.com and many other similar online sites, I suggest www.spoj.com - start with the easiest ones (on most of these sites, problems are tagged by their difficulty level) and solve them - I mean code solutions to them in a language of your choice (But C, C++ and Java are popular in interviews) - these sites have online judges where you can submit your source code, have your code run against a large suite of test cases for each problem and get results back - all in a matter of seconds.

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.

</comment><comment><USER88> Your best shot may be finding the way to use your knowledge in a field you are really passionate about. In fact, it seems to me you are just hanging yourself at some sort of cerebral tree while cutting passion out. That way, you will always work harder than your peers and get less and less satisfaction. Use software engineering as a tool to achieve applied goals.

</comment><comment><USER89> Not everyone is the same, there are a lot of people who come straight out of college to the big companies who end up not being incredible software engineers. And vice versa.

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.

</comment><comment><USER90> Please don't goalify working at one of the behemoth hiveminds. You will become a better hacker by working at a small, scrappy _non-unicorn_ startup -- meaning, an actual startup -- with tons of work to do. It's not for everybody, but where else can you hack on machine learning on the same day you experiment with building infrastructure? There is so much work to do all around that you'll find yourself digging deep and learning tons of new stuff every single day. One year at a startup I think is worth five at a big ass corporation. Going to work for Google, you'll forever be at the behest of naturally- talented CS PhDs that spend all day answering Gmail support tickets. You won't _ever_ get to play with the cool toys at one of those companies. Seriously. That is one thing I've learned after twenty years in this industry.

</comment><comment><USER91> A mentor is a great addition when doing anything new. SSomeone to guide and advise, to answer questions, to be realistic and stop you from jumping early, and perhaps someone to talk to about oblique issues. I'd also recommend (without knowing what you already do) good food at regular intervals, ensure you have and are able to stick to basic routines, don't drink alcohol, minimise bread and pasta intake (no need to stop it completely), walk where you would previously get a ride, plenty of air and water (same as for dogs and cars) and to return to the start, if you can't fin a mentor then try ensure you have people to talk to and with, especially offline.

And don't worry about your speed or performance. I'm as slow as hell and manage successful projects, very hands-on. Find your niche, and don't expect to be good at everything.

</comment><comment><USER92> It sounds like you're trying to go straight from ~zero to Google. Would you torment yourself over being unable to go straight from high school football to NFL superstardom? And have you considered the possibility that NFL superstardom may not be the only way in which you might satisfy your ambition?

</comment><comment><USER93> wow you sure dream big. i would not know anything about joining a big four tech company. but it seems like you went up from system administration to developer. congrats on that. I think you have worked hard and you are doing very well for yourself. Of course learning to get better at interviews is going to yield results sooner or later. So keep doing that. there will be one day when somebody gives you an offer at a higher salary because of this.

I don't know whether joining the creme de la creme of the industry is possible for somebody who has some trouble with algorithms and the like. it seems a pretty essential differentiator. I'm not very quick when problems get harder as well. But you know whatever. i still eat and i own my home.

</comment><comment><USER94> If a decent B.Sc. degree in CS and 1-2 years of real-life experience would be enough to land a job at the "big four" than 99% of academics would work for the "big four".

In my country it is really hard to get a decent job without an M.Sc. I know a lot of people with two M.Sc.s in their pocket (this means at least 1 B.Sc. + 2 M.Sc = 7 years of academic education, like myself) speaking 1-2 foreign languages and having 6+ years of real life experience at the age of 30. And some of them would like to work for the "big four", and maybe in your country. Whether you like it or not you compete with them.

[edit] One of my friends who is IMHO a genius got a job at Google in Zurich and he had a hard time at the beginning.

</comment><comment><USER95> Software engineering covers is an increasingly wide range of skills. For me, it has been critically important to realize the things which I love doing in this field, and the things which I am genuinely particularly good at.

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!

</comment><comment><USER96> At the end of the day "if you do what you love for living you'll never work a day in your life". I'm guessing you do love your career and seeing as you would put in 60-80 hours of work into school each week doesn't mean your lacking any motivation behind it. I look at it as baby steps, keep working at it with the same motivation and you will reach the goals you want. Anyone can who has the passion for it.

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 :).

</comment><comment><USER97> Something people don't talk about much because many people might not even realize it is that after your first job most people find a job though their professional network. It's hit or miss interviewing cold.

</comment><comment><USER98> I know a guy like you who had to work so hard in class, we called him names because of how bad he was at coding. Somehow we ended up great friends. Now it's 10 years later. The guy is a contract Scala programmer and bills $100 an hour and is generally one of the best programmers at the companies he contracts for. Not big four, but regular bread and butter companies that build their own software. He got to where he is by not drinking in his 20s and by studying software before work an hour every single day. He even has a wife and young child... we are 30 btw

</comment><comment><USER99> Do you have problems solving algorithm challenges when you're not in an interview?

If it's just doing interviews I would recommend going to a doctor and maybe getting prescribed some beta-blockers. It should calm your nerves enough you can focus on the problems at hand.

1) Many people live great fulfilling lives not working at AmaGooBookSoft. But 1.5 months 1-3 hours of time isn't a huge commitment. Also consider that you might not be studying well. What types of questions are you being asked and how are you studying?

2) What are the types of things you decided to improve on?

3) Yes

</comment><comment><USER100>
      > I can solve most problems correctly given enough time
      > (usually 2x+ longer than interviews).

That you can solve them at all puts you in a rare and valuable group.

It probably won't get you a "big 4" job, but you might experiment in some future interviews with being transparent about the conditions in which you _can_ solve such problems. E.g., "Give me three hours in a room by myself with paper, pencil, and a disconnected laptop running $MY_DEV_ENVIRONMENT, and I will be able to work it out."

</comment><comment><USER101> How did you get into technology? Did you choose a tech career or did it choose you? Why do you want to work for one of the big four? And what are you passionate about? Happenstance is not a reasonable way to manage a career. And it's probably unrealistic to keep up with those who grew up tinkering with code.

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.

</comment><comment><USER102> "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"

Yup, I'd say if that's your goal, then you're not cut out for it.

That's like saying you want to get into stock car racing because you want to hang out with Danica Patrick. You're doing it for the wrong reasons.

You have to love it for the joy it gives you to learn it and use it. Otherwise you won't spend the necessary time to be truly good at it.

</comment><comment><USER103> Find a mentor (gray beard) someone who has been around in the industry for at least 7-10 years professionally. Ask them questions about everything. Then get them to interview you in person and whiteboard. Everyone hates whiteboards but that's what the big 4 do and they aren't really ever going to stop so the more practice with your mentor the better.

I prefer companies that give code challenges that you work on and then discuss your decisions and thought process on solving the problem.

</comment><comment><USER37> software engineering and the algorithm based interviews, while connected, are 2 different things. The later is an attribute of software engineering industry. So you may be not cut out for the industry, not the engineering itself. Beside the engineering itself, the industry is the people working in it with a lot of tribal superstitions, rituals, "gods" and "saints", etc. A kind of weak version of religion. Not everybody fits well or easy.

</comment><comment><USER104> \- Do you like to make software projects? Can you write software for your projects (slow or fast doesn't matter)?

If you answer one No, then you should move on.

If you can answer Yes/Yes, then you should continue. I suggest that you stop interviewing. Your negative experience is hurting your attitude.

Start with what you know.

\- Does your current company write software? Go help them write their software.

\- Do your friends work on software projects/companies? Go help them write their software.

</comment><comment><USER105> I remember a fun talk by our department chair about the graduate admissions in Computer Science over the years. The chart fluctuated with booms and busts: lots of applicants during hype and profit and a few during gloom and retrenchment. The second line, the surviver (matriculation) numbers over time, was a flat line.

There are many options in life and computer science is not for everyone.

</comment><comment><USER106> Some people will need to spent more time that others on learning the skill, but if you love it, you do it.

Search youtube for Neil deGrasse Tyson on dyslexia

<comment><AUTHOR> That video was great. He spoke at my commencement and it was incredible.

</comment></comment><comment><USER107> I think its worth pointing out to interviewers that you experience performance anxiety. Some might have a solution like letting you do a take home coding exercise. I would also get as much high quality code on github that you can share with interviewers that will show you can write code regardless of your ability to answer questions in real time.

</comment><comment><USER108> There are many, many types of software engineering roles. Perhaps you are just applying to the wrong ones. Maybe you're not a good _programmer_? I can't say. But even if you aren't, that doesn't mean you can't be a good engineer. You mentioned sysadmin experience, so perhaps you could focus on a DevOps or SRE role?

<comment><USER109> DevOps and SRE will still challenge you with bullshit algorithm questions at most companies, and the ones that ask for practical questions based on what you'll actually be doing on the job rather than standard algorithm or trivia questions are few and far between.

<comment><AUTHOR> Can confirm. 50% of the roles I've interviewed for are DevOps, and they definitely ask algorithms questions. Granted, I don't think DevOps is very different from product engineering these days. It's still code.

</comment></comment></comment><comment><USER110> You must, at all costs, find a way to realize your actual ability level is independent of your own mind fucking with you to create anxiety and doubt.

The real question is do you have passion and innate motivation around it? If you can earn a CS degree and you have the passion then relax. You just need some time to get the interviewing figured out.

</comment><comment><USER111> > I can solve most problems correctly given enough time

Have you tried asking in advance of an interview for a few extra hours to do the task(s)? I think this is a totally reasonable request to make ahead of time. Plus, any company that thinks a hard time limit is necessary to evaluate your skills is not going to be worth working for.

</comment><comment><USER112> Of course not everyone can be anything they want.

Practicing basketball for 8 hours a day for 10 years doesn't guarantee you'll get drafted to the NBA.

If you enjoy it, recognize your limitations and try to figure out a way to make money doing it, but don't assume you're going to be a rockstar just because you put in the time.

</comment><comment><USER113> I think you aren't asking yourself the right question.

It's not about whether you are "Cut out" for it or not.

The most important question is: Are you doing what you want with your life? And is your current path helping you get there?

Another user suggested, that you might not even like software engineering. Sit down and seriously ponder that.

</comment><comment><USER114> "Working at one of the Big 4" is not a good way to state your goal. Whatever yor definition of the big 4 is, they are very different companies with different cultures and different products. Find the company (from those four if you want) and product that really excites you and go for that.

</comment><comment><USER115> Have you considered trying an interview boot camp? As awful as the state of the industry is for such a thing to even exist, having feedback and mentoring could be an additional aid over studying and practicing on your own. Interviews are conversations and not solo HackerRank tests, after all.

</comment><comment><USER116> Instead of preparing for interviews do you think it would help if you instead improved your skills with algorithms?

Would knowing that you have it down pat make you more confident?

Do you like this stuff? If you don't, you can always do something else like sysadmin or devops.

</comment><comment><USER117> If you finished a CS degree with a 3.6, you definitely have the aptitude. What makes you so sure you had to work harder than your classmates to get similar results? They could have been burning the midnight oil a lot more than you think.

</comment><comment><USER118> It took me 6-8 months after college to figure out the job search/interview process. Once I figured it out, I had no problem.

It sounds like you are running into problems with performance anxiety in interviews. Fix that.

</comment><comment><USER119> I usually lurk on HN but I just logged into say this because this gets me very worked up...

Mate, fuck what anyone here says, with enough dedication you can do anything you want.

With that out of the way, fuck the big 4s as well. Working there imo is overrated. However, what I would say is you should work on smaller companies and focus on your career path. If you aren't learning at a company then you should be leaving. You can always keep eyes on job posting at those big 4s and develop skills at work or at home that you need to get in.

Just to recap, fuck the big 4s and given enough dedication and hard work anyone can do anything they want. Its not rocket science. heck you can even learn rocket science, there are many resources online. Knowledge is everywhere.

</comment><comment><USER120> Your performance anxiety about failing at algorithms problems is making your fail at algorithm problems. You need to believe. Yeah, maybe you will need to work a bit harder but you can do it.

</comment><comment><USER121> Writing software is _hard_ , and far from everyone can be real good at it.

It also takes time to become good at it. I was pretty useless the first three years of my career.

</comment><comment><USER122> Not only is it possible. but at a previous job I soon realized that every one of these people had decided to get together and take over the company.

</comment><comment><USER123> 1) no one starts at the top.

2) you have done enough prep. Get some real world experience.

3) make them want you. Establish yourself.

</comment><comment><USER124> I'll try to answer your question and provide advice on each of your points but to your broader question, _yes, absolutely_ someone can be not cut out for software engineering. The people I know who were "not cut out for it" usually went to school for CS because "that's where the jobs are" but it wasn't necessarily where their passions were. Several of them ended up in tech, but often on the sales or management side, not in software development. Really, if you enjoy it and want to do it, you can _become_ cut out for it. You'll simply learn what you need to learn to become successful.

 _\- Working harder than others in college._ I don't find this to be a particularly useful guide for anything other than your work ethic. You had a respectable GPA and were willing to spend 60 to 80 hours per week on schoolwork. So what if someone was able to eek by more easily? Maybe they had a leg up on you and got into it earlier. Maybe they wouldn't have put in that time if they needed to.

 _\- Rejected interviews / performance anxiety / bad at algorithms_ I can't speak to working for "the big 4". I haven't had any interest in doing that, myself. There's plenty of great jobs out there at smaller companies (including startups). If you know you're bad at algorithms, start studying. Grab the ones from interviews that you've been bad at and learn them up and down. Write example libraries of each in a few programming languages. _Put them in a GitHub /GitLab/BitBucket repository._ For the languages you're targeting jobs in, find an open source project in the language that has a good community and participate. Find a library you wish you had and write it. _Put them in a repository._

Failing at interviewing at a top-tier company may be an indicator that you're not cut out to work at one of those top-tier companies. This sounds worse than it is. Maybe you wouldn't thrive in that environment as much as you'd like to thrive? Wouldn't you be happier with a job at a smaller outfit where you can grow, or maybe just a _different_ outfit? If Google/Facebook/whomever else you consider top tier is proving too difficult to get in to, look elsewhere.

I mentioned the whole repo thing and this is advice you'll find all over Hacker News and elsewhere. It's not an industry fairy tail ... it works. In your _cover letter_ , specifically mention your experiences with the languages they're looking for and link to relevant projects. In your resume, provide a link to your GitHub ID or relevant ID on another site that has a list of your projects. If you're lucky, they'll have already looked over some of your code. But don't count on it.

Having that available gives you the opportunity to creatively _deflect_ those technical questions. Remember, they're asking you to demonstrate your knowledge. Just because they gave you a whiteboard doesn't mean you can't demonstrate it differently. Three years ago I took an interview[0] and was asked something algorithmic around multi-threading. I had written a library in a private repo that handled message passing between two applications running on the same machine in a thread-safe manner and was directed to the white board. I said "I can do you one better"[1] and mentioned a library I had written for thread-safe in-memory message passing between two applications running on the same machine where I not only had to solve that problem, but had to do so very performantly and had to address a number of other corner cases. The interviewer let me log into my BitBucket account, plugged his laptop into the meeting room's TV and after a quick apology about the code quality (it was actually pretty good, but not perfect which was why it wasn't public, yet), I showed him the solution. The upshot was that the _entire rest of the interview_ was me walking through this code[2]. Why did you use a Mutex there? Why a ManualReset there but an AutoReset there? It was a _lot_ of fun.

 _1)_ Yes. When the benefit of getting into a top tier company outweighs the grief in trying to get there. Maybe you're there, maybe not? Ask yourself _why_ you're focusing on these specific top-tier companies and find out if there's a company not currently in your list that may fit those criteria would be my only advice here.

 _2)_ You're already doing this. Post mortems are a good idea. Another thing you can do is join some meet-up groups that have professionals in the parts of the industry you're trying to get into. After you get to know some people, you'll find folks who do regular interviews. Ask them to help you. I used to give a _lot_ of interviews and I have volunteered for interview prep many times. A lot of anxiety around interviewing comes from social anxieties in general. Joining a meet-up group will give you practice at introducing yourself and making a good first impression. Walking up to random strangers at the super-market and striking up a conversation works, too (I've done this as practice, my self).

 _3)_ My last two answers are my best advice. A mentor would be helpful, but it doesn't have to be such a formal mentor/mentee relationship. Get into some user groups/meetups and meet others in software development who are where you want to be. Make friends and those friends will become your mentors by default if you're willing to seek advice, ask for help, and accept hard observations you may not want to hear.

And, most of all, hang in there. It sounds like you really _like doing this stuff_ and _want to do it_. You're already ahead of most of the people I used to interview. Granted, it wasn't at a top-tier company (though we were a huge internet company) and it wasn't for the sexiest of development jobs (because that kind of attitude would have had you hired pretty easily if you were even close to qualified where I was at).

[0] This interview found me. I wasn't looking at the time but my dad's advice of "never turn down an interesting interview/opportunity" stuck in my head, so I was _very_ casual in this interview. That turned out to work in my favor for whatever reason and I ended up being offered the position at a salary figure I had never expected to get. I didn't take the job because it required moving out of state and that wasn't an option for me at that time.

[1] This sounds really arrogant and I'm embarrassed to say that those were _my exact words_. It could have _easily_ been off-putting to the interviewer and I knew that, but because of the last footnote, I was overly casual and confident (if I didn't get the job offer, who cares, I probably can't take it anyway!). The funny thing was, this group of people went from extremely formal in the beginning to casual by the end. I felt like we were having a discussion like I'd have with other developers over beer, not like I was having my knowledge put to the test and when the "thanks/hand-shakes" happened at the end, one of the guys said something along the lines of "Thanks for your time, I really enjoyed this interview" to me, which stood out since I can't remember an interview experience that equalled it.

[2] I picked a perfect library and I ended up using this library in two other interviews as example code. It was a tricky bit of logic where you had two applications, each in different security domains with both responsible for processing some data and one responsible for requesting and writing the data. They used MemoryMappedFiles to share the data between them and had to manage situations where either side may not be in the position to be able to receive the data, so it covered a number of scenarios neatly in one library and made message passing with these odd requirements a simple matter of a few lines of code wrapped in whatever threading construct one wished to use.

</comment><comment><USER46> _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?_

Maybe, though I don't think you're at that point yet. More specifically, though, you may do better to simply let go of this idea that you need to join a "big four" (or "top-tier" company in any other sense) in order to feel like you've reached your potential (or are on a safe track to it). Why? For one thing a lot of people who "make it" into those companies report back that (apart from the prestige) the experience just wasn't as rewarding or interesting as they thought it would be.

But even more fundamentally: After all, you have to remember that _none of these companies were anything like what our image of them is now, back when they started_. And they certainly weren't "the companies to go work for and make a name for yourself", back in their very early days.

Point being: rather than chasing after the coattails of what other people have done (and which society later deemed to be great), you may do better thinking up something _you can do_ that will great, and make it your goal to bring it into reality. And by definition, its potential greatness may lie in the fact that it just isn't seen as "great" by a critical mass of people yet (or because it simply raw and unfinished, and waiting for someone to come along and provide fresh interpretation and perspective -- someone like you, perchance).

BTW, there's an obliquely related quote from Jamie Zawinski about running after "success", and where you end up as a result:

 _And there 's another factor involved, which is that you can divide our industry into two kinds of people: those who want to go work for a company to make it successful, and those who want to go work for a successful company. Netscape's early success and rapid growth caused us to stop getting the former and start getting the latter._

[https://www.jwz.org/gruntle/nomo.html](https://www.jwz.org/gruntle/nomo.html)

Things are rather different nowadays, and I wouldn't say that working for Google or FB now is anything like working for the ticking time-bomb that was Netscape in 1999. But, existentially, I think there's a similar lesson to be drawn from being obsessed about joining something "great" versus... _doing_ something great.

And what's interesting about JWZ's is that, while he appears to have made out well enough for the years in the tech industry -- where he ultimately succeeded was in defining "success" on his own terms, even if it meant doing something completely different (running a music venue), even if was guaranteed not to make him rich or "influential" as certain other people with whom he also worked at Netscape, and who we hear a lot more about today.

 _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._

Fundamentally, we can only find positive reinforcement from within (and from helping others) -- not from other people's _evaluations_ of us.

But in regard to interviews, it may help to remember that these are largely bullshit. Basically we're in the midst of a long-term speculative bubble in regard to the supposed potential of certain cargo-cult interviewing techniques (hashed out in the past few years in folkloric fashion) to assess people's inner qualities, and predict their potential for "greatness." Which basically seem to operate on the principle of, "Well we asked such-and-such questions before. So let's ask 5x as many, 10x harder. That'll get us people 50x better."

All of which are fundamentally, hopelessly flawed: not (just) because the questions are silly, and increasingly have become tests of rote memorization.

But because you don't do great things by "being" great, or simply by finding "great" people. Great things are accomplished through great _ideas_ , and from the courage (and strength) to pursue them. And because you're pursuing something _you_ believe in -- not some random goal that someone else put in front of you.

Focus on these qualities, and you'll have a much better shot and ending up where you really want to be in this life.

</comment><comment><USER125> Disclaimer: I have never worked for a Big 4 company, and the only interviews I had with them were during college with Amazon, and I've failed both of those, either in the 1st or the 2nd round. So I'm not a success story. That being said, if I were to set this as a goal, I know what I would do.

> Is it possible for someone to not be cut out for software engineering?

The answer to such a question is always 'yes'. But there's a lot of danger in assuming that you are the someone. This is betting against yourself. And there's only one of you in the current reality state. Don't bet against yourself. That is not how you should think.

Definitely don't bet yourself in this instance if you already have experience successfully getting multiple jobs...

What you should investigate instead is what do you want, and how much you want it. Consider the various pros and cons and how they make sense to you. How much do you really want to work for a Big 4 company? How do you feel about some of the potential tradeoffs (i.e., time spent on learning algorithms and interview questions)? Same with the software engineer question. How much do you want to be one? Why? What are the tradeoffs?

[Note: not all tradeoffs are "true" tradeoffs, i.e., that you'll loose something. Learning algorithms may make your mind sharper and help you in other areas. But it also means you can't spend that time on, say, relationships, entertainment/hobby, or even something in the health department. There's nothing wrong with tradeoffs and don't scrutinize them too much but still be aware that nothing you do is free]

The problem with the question of "am I not cut out to be a software engineer / Big 4 employee" is that no one can answer it, including you. You will, most likely, never ever know unless you reach some success point where you can definitively say yes. You can't just base it on things like being rejected by many companies or struggling in college, because that already implies those are reliable proxies and that's a really shaky assumption. I had trouble in college, too. I graduated with a 3.0. It doesn't seem to mean a thing, other than what it literally means.

> 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.

This is neither here nor there. There are a lot of factors that could go into something like this, it could be way too many things. Not enough information. The only thing I'll say is try to develop a model of what kind of companies you are not a good fit for, so that you don't spend too much time on them, and avoid wasting too much time on unlikely pathways unless you really want to work for some specific companies. I would often apply to very few places, get offers from all of them, and then choose among that. Applying to lots of companies indiscriminately was both stressful and yielded nothing. Also, don't be discouraged from applying to places that have requirements you don't meet but are nonetheless interesting to you.

Also, field, location, frameworks, what the company lacks, how the company is doing, etc., all affect your chances.

> performance anxiety

I got rid of my performance anxiety mostly through a major philosophical shift. I don't know if this is a topic that one can give "simple" advice on... in the context of interviews, for any given interview, assume that you will pass it. Just assume this, without making anything depend on it being true. Any time something in the interview goes "wrong", just assume it doesn't matter. Don't think about how you "should" know the answer to some question, just give your best answer or say you don't know and move on and do not assume that this jeopardizes your interview.

Whether you did something "wrong" during the interview, you can figure that after it is over. And, remember, they're just interviews. You do not owe to the world to pass them, they don't say something insidious about you, you're not a worse person for not passing one, nor are you a worse software developer for not passing them. You interviewing for your benefit, not theirs or anyone else's.

> If my goal isn't an impossibility, how can I efficiently progress towards > it? Would a mentor be helpful?

Assuming you do decide that getting into a Big 4 company is a fairly high priority goal for you (and, really, even if it's not), the first thing I would recommend is making sure that you're focusing about progress and results as opposed to time or work. You want the most productive results from the least amount of time and work. All work should be justified.

Essentially, you're trying to learn how to solve algorithms quickly and under pressure. As with any learning tasks, this is a fairly big and complex topic that's not well understood. This is where you want to apply your learning how to learn skills and try to pool whatever intelligence, intuition, and knowledge you currently possess. I can write, well, a lot on this topic so I'll try to keep it relatively short: try to figure out what is needed and what is missing in your head, and try to find a way to process your learning style and what kind of things give you trouble. Grinding on a problem over and over actually probably benefits more brilliant people more than the slow ones among us, since the brilliant people can make their brain form all the connections, we actually need to trace what goes where.

Maybe you have a poor memory and you need to organize the algorithms you're learning. Maybe you're not used to writing code a certain way and you need to do that. Maybe you should take a stab at some weird language to free up your brain from misconceptions. Maybe you should play a video game to see some pattern you've never paid attention to before. Maybe you should get some sleep and stop worrying about things for a week. It's a bit of a strange process at times but it's not entirely hit or miss and if you are very attentive to your brain and you do not waste time shaming and guilting yourself, you can discover a lot of interesting things about how you work, whether or not you'll make it into that Big 4 company.

I can write more about this but it's not going to fit in an HN post.

Just, don't bet against yourself.

</comment><comment><USER126> Is it possible for somebody to not be cut out for software engineering? Absolutely.

Are _you_ not cut out for software engineering? You've already been doing it for 1.3 years, there's no reason for you to think that.

Are you not cut out for being a high-quality professional? That sounds like a yes. But it's all about your mindset, not your skills. Your skills are just fine, but your mindset is much more important.

You need to ask yourself what you want out of your career. I say that rhetorically because It's pretty clear from your writing that what you're looking for is an external perception of status. The thing about status is that the people who chase it above everything else will never, ever get it, and it isn't worth as much as you think. Who exactly are you trying to impress with this status that you're looking for? If you manage to get it (not likely), and these people are actually impressed by it (even less likely), will you feel good about that for more than 5 seconds? I'll let you guess the likelihood of that.

The thing about jobs perceived as high-status is that so many kids are desperate to get them that any one person will have a very hard time getting them, and the people who do get them tend to get treated like dirt, because the companies know very well that there's a line of people down the block ready to replace them if they displease their management in the slightest way.

You're not gonna get that kind of status with your job search. What you can get is a solid, upper-middle class salary, a good work schedule, and respect that you have earned with your productivity from your co-workers and management. If that's enough for you, you can get a job like that very easily.

I never got a CS degree, and have never really gotten good at the fancy algorithm type of problems that some tech companies like to use in interviews, and that you seem to be sweating over. Yet I just finished a job search, got multiple good offers at once, and accepted a good job with a solid company. How? I never bothered trying for any of the big-name companies, and am perfectly open about what my skills are and aren't. There are tons of good jobs out there that want people that can solve real-world problems instead of academic exercises on whiteboards.

And that's where real status comes from. Having a solid job that you're happy and successful at is real status for adults. Just wanting to have Google or Facebook on your business card is for children.

Not that there's anything wrong with working for the Big 4. But do it from a position of strength, i.e. you're already a strong, confident professional with a lot of value on the market, and they better give you a good offer and not jerk you around on the interview process because you have plenty of other potential employers to choose from.

</comment><comment><USER127> Experience can be a replacement for formal education but you need one or the other. I think that anybody can work at a big 4, but it won't be your first job unless you went the formal route.

</comment><comment><USER128> you should check out reddit.com/r/accounting

terminology like "big 4" is quite telling. you are competing with people who do not view this industry as a stepping stone to high social status, and that is why you are losing.</comment>