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.
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.
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.
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.
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.
All sarcasm aside, I don't think there is anything "exceptional" about being a programmer, just like how there is nothing exceptional about being a management consultant. I wouldn't say it's the most thankless job, nor would I say it's the job where you get the most praise. It's a spectrum.
Often times, when I have thoughts like these, exuding confidence that my job is the most in any dimension, I realize that they might be more about me than the field of software engineering. Put differently, I'd probably have the same thoughts about welding if I was a welder, or the same thoughts about monetary policy if I worked at the Federal Reserve.
Have you considered getting a software or web dev job in a non tech company? They generally don't put you through the algorithm tests and tend to have interesting problems to solve. Completely different vibe vs tech companies though but may appeal to you more.
Examples:
Warehouse shipping companies that have a need for shipping software, barcoding software, always need reports, etc.
Mail order or e-commerce companies who rely heavily on inbound orders and who need automation/streamlining.
Advertising agencies tend to need web devs too. Pay is generally lower but you get the opportunity to work on all types of projects.
This is an excellent point. I work at one of those companies. Actually, it qualifies as a tech company, but our main revenue source is not software. I think that the pace of work at a multidisciplinary company isn't as frenetic as a pure software shop, just because it can't be. And we don't conduct coding interviews.
I had a conversation with one of our developers recently. He could have been you. He told me that he had interviewed at the big software shops, and had flunked the coding interviews. Yet I know that he's a very bright and productive engineer, who is also a pleasure to work with. I asked him: After those interviews, would you really have wanted to work at one of those shops? He said that he wouldn't.
And I know that I wouldn't survive that atmosphere either. So you're in good company.
But it's possible that you aren't cut out for whatever benchmark/ideal you have in mind for software engineering. If a company is looking for the next Jeff Dean, sure, being not confident in algorithms is going to put you at a severe disadvantage. But there are plenty of valuable and important software engineering jobs -- even within the domain of just programming, nevermind design, planning, management, etc -- that aren't limited to those who can show a mastery of algorithms.
One well-known contemporary example: https://news.ycombinator.com/item?id=9695102
My main job is not software engineering right now, though I do a lot of it on my own (to be better at my actual job). I think I'm similar to you in that I was probably mediocre in comparison to the best of the class, though unlike you, I was probably in self-denial of how mediocre I was. But I eventually got into it much more after working in non-software jobs and understanding how the world works, and that there's plenty of uses for programming beyond the narrow scope of what's taught in CS curriculum. It's equivalent to thinking that you're not cut out to be a writer after feeling mediocre in a journalism news writing class, or technical writing, or poetry.