As someone who graduated recently and is going through this process right now - I always thought I would be set because I'm a decent problem solver, aced all my algorithms and data structures classes and generally could solve most interview style problems I came across. I've learned that this is not enough. An organic problem solving process might involve trying several promising approaches, or starting with a suboptimal algorithm and realising improvements to it, and then you might figure out an optimal solution. In many of these interviews the time constraints can be absurd, you basically have to have done the questions or variants of them recently to be able to write down the optimal solution in your first iteration.
Today my friend had a first round online screening from Atlassian - 5 questions in 90 minutes, and none of them were trivial warm up level questions. Compound this with the fact that it's often harder to solve problems and think creatively when you're under time pressure in an interview, and you realise that your only option is to do 200+ Leetcode problems and just hope your interview overlaps with those problems.
Also you get a better house if the architect who designed it also builds it.
And eventually the house builder gets enough experience to become a much more useful architect because they know what's actually possible and what is purely academic.
Most businesses only care about making money. Unless your unique algorithmn costs less to implement and can make money right away, you are out of luck.
Hell, all the stuff you learn at school about algorithms and faster ways of doing work, has been negated by hardware advances that mask poor coding practices.
Go get an information systems degree, learn to code, and make money. The world is going to need coders and IT people for a very long time.
Well, that or getting acquired....
Sometimes it isn’t, and we end up with Electron on the desktop :(
What I did on hackthebox.eu recently was:
<technobabble>
reverse engineering x64 assembly into C (silly, I should've used Ghidra instead). Then I started exploiting the heap by poisoning the t-cache, with that I could overwrite the GOT (getting an arbitrary read/write). Leak libc's base address bypassing ASLR, then using return to libc to exploit the thing (a ROP technique).
</technobabble>
Most of these things I learned during my CS master and it's apparently overkill for something like OSCP. More importantly, not all skills overlap. Dodging rabbit holes is not something you learn well. Understanding how to reverse engineer a binary has not much merit when it comes to finding a CVE and using metasploit, or some script on Github. Dodging rabbit holes and being fast at finding the right CVE's and using them properly to exploit a target are skills in their own right.
I felt like I went from a forward looking, enlightening major - to become where you end up in the details worrying about semantics. CS is mind expanding; coding is specialist mind numbing boredom.
Sure, you can get the knowledge in other ways, and sure, some of the houses built by people who haven't studied architecture are great too.
Some aren't though, and their builders could have benefitted from a bit of theory ahead of time.
It's almost more like the relationship between materials science and hoise building - it can enable you to do a better job.
For those saying you've never been helped by your CS degree, I think you either took a bad degree or you'be been stuck in un-taxing work. You've seriously never bothered thinking about, say, algorithmic complexity? Or other topics that should have been covered?
There are lots of successful working programmers that will never need to deal with "algorithmic complexity" because "programming" encompasses a very wide spectrum of skills. I attempted to explain a rough categorization of 2 groups:
https://news.ycombinator.com/item?id=12079697
So yes, a programmer in group 1 -- let's say a 30-year veteran of COBOL -- can conceivably never have to make a decision about designing an algorithm & data structure to be O(n) vs O(log n) because he works at a higher abstraction level using COBOL. His domain of work doesn't need to deal with low-level things like raw pointers to linked-lists in C/C++ where Big-O complexity is considered when engineering a custom b-tree from scratch.
The programmers in group 1 are not any "worse" than group 2. They just do a different type of programming.
The point is during a degree you are lead to some topics and guided through them.
That would be around the era of the Intel 80486 processor. All of us cared a hell of a lot about both algorithmic and data structure efficiency back then since computers were so feeble compared to today's systems; people who didn't couldn't produce programs that functioned properly.
In the ancient 1990s, A COBOL programmer writing "green screen" terminal apps to hit a database on an IBM 360 mainframe doesn't deploy to 80486 desktop pcs.
Even today, if you type "COBOL programmer" into monster.com to search for jobs, most of the results will be programming work for mainframe environments instead of targeting consumer computers like iOS/Android/Windows/macOS/etc.
I ran into a guy responsible for roof repair for company buildings on a flight. He said, "the greater the architect; the worse the roof leaks."