As someone with a Computer Science degree I can say that the only times I have ever used any of the algorithms I learned directly was when writing low level C and GoLang. I'm willing to bet 90% of programmers... even those that right "advanced" programs do not use them day to day.
Every algorithm and data structure worth anything has been abstracted out into easy to use libraries years ago.
Ditto mathematics past roughly Algebra 1. Every now and then I try to brush up on calculus or linear algebra or something, but it takes so much time to keep those skills up when you're not using them at work. Like keeping up foreign language skills while living somewhere you rarely encounter native speakers.
Knowing that a problem at hand requires a certain solution is important.
If the reasonable defaults aren't good enough... you're in the 10%.
Sure, in some situations it might be obvious, but maybe not obvious for others.
And things that are immediately, blindingly obvious to a 5 year experience programmer may not be obvious to a newbie.
Ex: imagine if you didn't know what a hashtable or a dictionary was and just used single variables for everything.
For that matter, the choice of sorting algorithm can have security implications. QuickSort on user-facing data can easily become a DoS vulnerability.
Very few days do I avoid evaluating what kind of/depth of loop (if any at all!) is needed to generate an output.
I'm not talking about implementing my own sorting algorithms every time I need to sort things; I'm talking about recognizing that a particular problem can be efficiently represented by data structure X and solved with algorithm Y. Hopefully I'm writing none of this code myself, but a programmer who doesn't in theory know how it all works is never going to be able to compose pre-written code into an optimal solution. I know, because I've been that programmer.
I don't know what you mean by "advanced" programs. I guess I fall within your 10% by definition, since I can anecdotally say that having and using this knowledge has made a big difference for me. I would say that I use this stuff 5% or less of my time, but for that 5% it can make the difference between run time of under a second vs. multiple days, and between a brittle, defective solution and a rock solid one.
Not to mention that it's extremely handy for getting hired in the first place, and it's just plain fun.
Each "tool" you learn inside and out allows you to build something new. The better you learn them, the more you can build.
Can't help but think of it in literal lego terms.
mylist = ['a','b','c','d'].
if 'd' in mylist:
...
This works just fine, however, the time it takes, to find the item, grows proportional to the number of items in the list. If your list grows to 1000 items, and the item you are searching for is positioned last, python will check 1000 times. This is known as O(N).Now, how does the performance compare, when using a set data structure?
myset = ('a','b','c','d')
if 'd' in myset:
...
Well, underneath the hood, the set stores the data in what's known as a hash. The time it takes to check if an item is (or isn't) in a list does not grow proportional to the number of items in the list—it's always constant: O(1).So the answer is "you will become good at tech interviews and be able to get a job"
in all seriousness, algorithms and data structures are essential to computer science theory. When trying to get a job as a software engineer, technical interviews will mainly be problems about algos and data structures.
Algorithms are recipes or instructions.
Usually it's learning algorithmic techniques for solving various computational problems and implementing algorithmic coding problems in a programming language.
Hope that helps.
Early in my career, actually before my career, I taught myself the available language on our department's mini-computer (don't remember the language or the computer), so I could automate parts of my and my colleagues' job.
I had to sort something, and I innocently "invented" bubble sort to do it. The system administrator visited me the day I first ran it, and told me to stop doing that.
Soon after, I quit and went to school. :)
--------------------------------------------
Also, to add some signal to my noise, Tom Cormen is apparently one of the designers of the course. He wrote the gigantic encyclopedia of algorithms, as well as a shorter, more-entry-level book on the subject. You'd be in good hands to learn the topic.
And the topic is one that teaches you how to reason about your programs in a way that works across languages and disciplines.
A lot will say learn this as it is the "core" of programming, but in industry practice I've seen using pure functions (functions that return the same result when the same parameter is passed in) is becoming more commonplace than having a trickier function that mutates a variable differently during each iteration, making it harder to reason about program state. Algorithmic problem solutions usually involve non-pure functions that are not intuitive until you've seen them before. Front-end UI is better built using several pure functions.
When working with algorithms, you’re trying to solve problems efficiently. Your programs should be fast, the wait for a solution should be short.