I think you kind of just made the point. Why would I pay for something that isn’t practical?
I think you kind of just made the point. Why would I pay for something that isn’t practical?
And because what counts as “practicality” changes as people progress through their careers, but the foundations required to meet each new standard of what counts as practical often remain the same (or change less).
Most of us are working to increase business value for companies - either by making them money or by saving them money. They could care less about “Cracking the Code” and LeetCode.
Most developers won’t be doing that these days.
As my career has progressed, it’s moved further away and at higher levels of abstractions. These days even hardware is abstracted behind an API with cloud providers.
I assume what the parent meant was a "data structures and algorithms" course, compared with say, "How to code in Java using the standard library".
The latter is "practical" - you can take what you learn and churn out code in Java.
The former is "non-practical" - you can't make the theories you now understand function without a practical implementation. But you can recognize the implementation in any environment, and understand its implications.
The general assertion is that an understanding of the "non-practical" will serve you longer than a purely "practical" education. I tend to agree.
A concrete example: My firewall rule is set to deny all incoming TCP connections except those originating from port 80, and destined for port 80. Why is it blocking all my HTTP connection attempts?
If you understand TCP, you'll understanding that we shouldn't be filtering on source port at all. If you have only the vague sort of understanding that comes from using a technology in practice but never having properly studied it, you might have no idea.
And yet I'd still count that as 'non-practical knowledge'. It isn't something you're ever going to apply 'directly', unless you're one of the handful of people implementing their own TCP stack.
There's similar value in studying complexity theory (why does this seemingly simple code take so long?), operating system fundamentals (aren't containers and VMs roughly the same though?), and compilers (for a deeper appreciation of programming in general, and, my personal favourite, to instil a due sense of terror regarding undefined behaviour in C-family languages).