So I recently switched up my approach on leetcode.com to optimize for this naturally.
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.
I've thought about consulting before, and my wife actually thinks it's the "right" thing for me (given my recent anger/frustration over the "online assessments" aka algorithm study).
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.
Well, I'm currently taking the Algorithms 1 (Princeton) course on Coursera, while tackling as many problems on leetcode.com as I can. I purchased a Premium subscription on leetcode.com.
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.
I appreciate the thoughtful post, with links. Definitely one of the feelings I've had as I've approached these algorithms is that I MUST certainly be lacking in either experience, or a way of thinking, or both.
I'm certainly lacking in the experience boat. But, I've figured the "way of thinking" is likely that I am not thinking in an algorithmic / math fashion. I don't "see" the solutions in the same way that someone with a mind for math would. Instead I just see the brute force, "obvious" solution.
Maybe I am being too critical of myself. It's certainly a trait of myself that I'm familiar with.
The problem is often that I don't know what's an acceptable expectation of myself. I've tried to be reasonable when it comes to approaching the study of algorithms, but maybe I've missed the mark?
Two problems in 1 day seems like pretty dismal progress, especially when I'm not exactly memorizing / absorbing these problems as well as I'd like to. Most of that day, is spent distracted out of frustration that I didn't / couldn't solve the first, or second problem, and had to resort to the solution.
I know that there are jobs out there which don't do this style of interviewing, but I have noticed that most of the companies doing interesting work, that pay really well, do. I kind of rationalize it like this: If I'm going to work a job (shit, I'd rather not)... Then it damn well better be maximized for interesting work, and pay:
I'm not sure it matters. The boredom is the problem, not having options.
You could lock me in a room with nothing to do but read a book about thermodynamics, or study algorithms, and as soon as my interest starts to fade... my progress slows DRAMATICALLY.
What am I doing in this locked room, other than reading?? I don't know, probably just staring at the wall thinking about something else. Then realizing I'm wasting time. Start reading again... Lose track, get bored.... Stare at the wall and think about something else... Realize I'm distracted, start reading again... rinse, repeat.
Will get through an entire chapter, and barely remember what I actually read.
> In retrospect, you should ask yourself what specifically caused you to be a C average student.
I appreciate your response.
I'm 32 now, and I've had a long time to think about this question. Here's what I think is the answer:
I lack the focus over time which is required to build a deep knowledge or skill.
In other words, I get bored or frustrated quickly. Once bored, or frustrated, learning tapers off VERY quickly. I'm not a child prodigy, so learning anything takes focussed effort over time. The second it gets hard, or boring, my ability to stay on task diminishes rapidly.
It's not as simple as "grin and bear it", trust me I've tried. In college that's all I did. Grin, and bear the struggle. That's no way to learn. I need to be able to sit, fail, learn, sit, fail, learn, succeed, over and over and over. But for every sit, fail ... a frustration builds. Even the slightest frustration / anger, saps you of focus.
If it's not frustration/anger from struggling that derails me... It's sheer boredom. I can sit and read a boring book, for example. But after a few pages, I'll straight up forget what I was even reading. It's like my brain just goes offline whenever I encounter something boring. I have to stop, and re-read whatever it was I was reading.
That's truly what it comes down to. I can't sustain focus on something long enough (hours, days, weeks) to become really good at it.
For what it's worth - I've been prescribed and have taken adderal. It's a miracle for focus, but I HATE how it makes me feel. My heart rate jumps 10-15 bpm (from ~50 resting, to 60, or 65). I FEEL my heart beating harder, which is not pleasant. Then, hours later once the drug has worn off, I feel down... Depressed, and still my heart feels 'heavy'. Oh and that's on a "small" dose (5-10mg). I can't take the stuff.
> 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.
What are you guys doing for money? Just burning savings?