What are your recommendations for doing this? I've started getting into some kernel programming and its slowly helping me enjoy programming again, but I very often find myself getting lost in theory and other thing; however, after running some estimations going back to school is too expensive.
Keep in mind that to many programmers programming is a job, not a devotion so they only want to know what they need to get their job done.
High quality libraries and tools are hard to write and are optimised over a long period of time to provide reliable and fast answers within available resources.
Software engineers use these libraries and tools to solve business and other higher level problems. When they do work on data structures and algorithms, it related to the job at hand rather than needlessly duplicating existing good code.
There is just no need for them to worry about low level detail.
It is highly unlikely that a company asking me to implement a data-structure is actually going to use it or is explicitly using it. Unless they want to improve it in a research paper or fund a proof-of-concept that improves the state-of-the-art. My point here is that we as software engineers should know these DS and algorithms, but to companies who ask such questions in a interview, you should be prepared to use them explicitly.
That being said, if you want to get into CS, I recommend getting a textbook or two about computational complexity (big-O notation) and the theory of computation (nondeterministic finite automata and regular expressions, stack machines, and Turing machines). I liked "Theory of Computation" by Michael Sipser for the second topic (didn't like my textbook for the first), though it's very dense so you may want to look into additional material if you want a gentler introduction.
Honestly, you can probably find everything online. The main things to look for are:
- big-O notation (how many steps it takes to solve a problem given some input size) - data structures (linked lists, b-trees, and hash maps are the big ones) - the list of terms above
Work out some proofs until you feel comfortable with the material.
But it really doesn't matter of you just want to do web stuff. Most of the hard problems have been solved by the standard library or database you use, so unless you want to work on those, you can choose to be ignorant of the inner workings. I'm the type that doesn't like to not understand something, but I have plenty of friends who care more about other things than learning CS/EE stuff that isn't practical to their line of work.
Think of all the people that know less about site administration/programming than you. These people would rather spend their time working on their business and pay you to work in it.
It also helps that cost of living in South America/SEA is much lower than the US. I was paying $150/month rent in Medellin, Colombia, for example.
But if I know that "priority queue" is what I'm looking for, I can then totally forget how to implement a priority queue. I can look it up as many times as I'm going to need it in the rest of my career faster than I can memorize it. (And if I need it very many times, I'll memorize it just by using it.)
Last time I checked data structures and algorithms were core CS/SE curriculum at most education levels. Then again, I also have grey hair.
Because nobody would write a SAT solver if they didn't think they could beat the worst case bounds.