Tired of staring at a screen for 80% of my awake time and constant puzzle solving. Sick of people in this industry making you feel you're not smart enough, that you're not enough no matter how many times you prove yourself in past work.
Tired of staring at a screen for 80% of my awake time and constant puzzle solving. Sick of people in this industry making you feel you're not smart enough, that you're not enough no matter how many times you prove yourself in past work.
Dealing with this in the heavy right now.
I've built a lot in my 10 years as a programmer. Infinitely, and automatically scaled application server based on load. Hasn't crashed or had a single downtime ever since release.
I've built mobile applications 100% myself being used by thousands still today.
I've learned 7 different programming languages. I've done web, mobile, server, and even bare metal firmware. The only 'domain' I haven't touched yet is ML.
Yet.... I truly feel DUMB. I feel like I'm nothing in this industry when one phone screen call puts you into an 'online assessment' where I can't solve the problem in better than O(N^2) time.
These fucking algorithms are killing me, and making me have a hard realization that maybe I'm just not cut out for this. Yea, I've built shit... but you know what... anyone could. I've plugged together a bunch of work other people did, and wallah, working server. Working app. Working whatever. But I can't write the libraries. I can't code a hyper scalable function that could handle petabytes of data.
The only reason my fucking amazing server hasn't crashed is because it doesn't handle anything close to the scale that many companies need. Hence why these algorithms are so important. But I can't fucking get better at them.
If you’re anything like me, you’ll learn better if someone doesn’t ask you to do the impossible, but instead leads you through enough solutions that you can get an immediate confidence boost from the first few easy ones, then the intermediate ones require more thought, and if you really get stuck, there are discussions about how to solve some of the problems. Usually you have to think algorithmically, not just write code, and some problems might just be harder for you to understand because you haven’t done as much work in that area. I won’t say it’s a complete look at algorithms—there’s a whole other course on strings if I recall, but it’s a good start.
Also, here’s my cheat to pass those employer questions — if they let you use JS, do EVERYTHING you can with ES6 Map and Set classes. Folks rarely look at the code and don’t care if you’re using for loops or advanced classes, but it’s way easier to use a Set than to worry about how many times you have to loop over some result to reduce duplication, or sort things, or what have you. If you need a unique sorted set, there are faster algorithms, but a simple (new Set(arr.sort())) gets the job done, because Set is insertion-ordered by default and any native JS function is generally faster than you writing your own code, so it’s impossible to mark this solution as wrong unless you exclude native functions (but who does that?). A bonus tip, if you need to figure out the difference between sets, just get creative with .filter and .map. There’s not much to memorize beyond that because there’s not much advanced functionality, just building blocks flexible enough to do anything, relatively expressively. https://exploringjs.com/impatient-js/ch_sets.html#missing-se...
If writing SQL as part of a quiz, learn the different joins because usually the question is worded in a way where picking the correct join will deliver huge performance benefits by reducing how much data you’re going through or making things more efficient than looping through multiple subqueries. Left vs Inner vs Right vs Outer vs Cross... remember that the less data the server has to go through (the fewer records in the earliest sub query), the faster everything will run, in these quiz scenarios. Yes, in real life how you store data matters, what you index, but it’s rare you’ve any control over the index or schema in these tests.
The only gripe I have is that at the end of the day, the litmus test for whether or not I'll pass an interview really is leetcode.com
While the coursera course is great, and provides fundamentals I'm clearly lacking ... It's tangential to the actual solving of these riddles.
however, if what you said is generally true, then it's obvious you have some skills gluing stuff together. news flash: this is what a large fraction of people in this industry do on the day to day, it's just that nobody wants to admit it. 90% of my previous software engineering jobs was just figuring out how to get things to talk to each other.
key for you i think will be spinning your skills in a way that makes you attractive.
you'd seem like a good fit as a consultant. clients generally don't care about how you'd write a string matching algorithm from scratch and what the theoretical runtime is in theta notation - they typically appreciate contributions, on deadlines, and clear communication. they pay you to figure out how to make stuff work on a schedule you mutually agree to, and you either give them that and get paid, or don't and don't. put up or shut up, so to speak.
so i'd start there. you have a large pool of knowledge, so just pick whatever interests you the most. then what you think you should get paid per hour, and triple it.
expect 80% to not follow up on leads and 80% to reject your schedule/hourly rate/etc. sort of like interviewing, but at least you're not stooping down to a level of desperation. keep your head up: your skills are worth a large amount of $, so don't take it personally, and don't reduce it just to get scrub-tier work/wages - unless you're legitimately broke, but hopefully after so much working you've got some sort of cushion.
The problem is I'm just not onboard with all the struggles that come with having to find clients, maintain clients, etc. I appreciate (and value) the security and consistency that comes from more-or-less knowing you will have a paycheck next week.
My skillset also lends well (I think?) to a technical manager, or even CTO position at a SMALL company. I certainly know of some great tools, how to glue them all together, and how to do so really quickly. Yet how one makes the jump from "Senior Software Engineer" to fucking CTO is beyond me. I'm not even sure where one would search for CTO jobs. And I'm 32 so, not exactly young but, not quite what you think of when you think of upper management...
The point is - I get your point. Maybe I shouldn't be killing myself with these algorithms. Maybe I should lean into things I'm better at and market myself, gain clients, etc.
I wouldn't get too discouraged about this: they couldn't - not necessarily anything of value anyway.
I've worked enough places now where the product the business is built on was written by somebody who wasn't necessarily a great programmer, yet this "bad"[1] code is the foundation of the company's success and may be the sole reason they're able to pay me.
You can build a really successful business on really "shitty" tech.
[1] Inefficient, non-scalable, hard to follow, poorly architected, spaghetti code - call it what you will.
You can study for technical interviews and get good at doing them. "Cracking the coding interview" is a good start, then there is interviewing.io and other resources.
You can learn to be good at that shit with a bit of practice. You're probably not dumb.
I'm just finding that my progress is SLOW. Like, I look around and it seems like everyone can find all these creative solutions to problems... meanwhile, I'm lucky if I can solve the brute force solution.
There are common patterns to these questions and I’ve found that they get more predictable after having done 50-100 of them, with very careful attentiveness to what your mind is coming up with to solve them. All these questions can only vary so much in how they are asked, and unfortunately we just have to do use repetition by numbers to enforce better pattern recognition.
What I was doing initially was:
I sorted their entire problems database for the most frequently asked questions. Started at the top, and worked my way down.
The problem with this method is that each question can be quite different from the last. Your first question might be an arrays / sliding-window question. The next is a dynamic programming problem. The next stacks. After that, union-find / connected components.
The point is each problem would end up sufficiently different from the previous one that in a given day, or over the course of a few days, you weren't practicing the same (or roughly the same) type of problem.
So as of literally TODAY I've changed my approach to sort the list by TYPE of problem. I will then focus on a specific type (per their categorization) for ~X number of problems (to be determined).
The hope is that by sticking to a specific category of problems, I'll be able to actually learn the commonalities within those problem sets.
IMHO the main reason people feel stupid about algorithms and the like is the progress isn't as clear and as linear. I wasn't good starting out. Coursera is great, and probably the most flexible and least frustrating way to expand your skill set.
I just want to mention that this isn't an industry-wide problem. It is a cultural problem that tends to be concentrated in a few geographic areas and a few specific sectors of the industry.
You might benefit from taking a step back and considering a substantial change without leaving the industry entirely -- to a new geographic area, or a new sector of the industry.
Also, there is quite a lot of very interesting and well-paying dev work in businesses that aren't IT-related. They often have difficulty finding top notch talent, and as a result will pay well and be thrilled to have you.
The single best software dev job I ever had was not working for a software house. It was working in a neurscience lab on applications ranging from software that ran custom experimental equipment all the way through writing software that emulated biological neural networks.
The look on their face as I'm explaining how if I ever quit my job I'll need to put twice as much work into side projects to stay relevant was... enlightening.
edit: clarity
Freelancing gives you the opportunity to do your job, get your money and don't get involved in company policies. As a side-effect you pass interviews and have flexible working hours.
I have about 10-15 hours of real work to do each week at MegaCorp. The rest is idle time at my desk/couch. Thought about moonlighting and doing 2 jobs but freelance sounds better.
What are you guys doing for money? Just burning savings?