As an alternative, you could pick up “Algorithms Illuminated” by Tim Roughgarden. Get the Part 1 book, read it casually a few times to get a sense of what’s in there, then go back to the beginning and start slogging through the exercises. Don’t hesitate to look for stuff on Google and YouTube when you’re stuck, but keep reviewing as much as necessary until you’ve legit learned the material.
This is the approach I’m taking. Too soon to say if it’s working out yet. I’m thinking long term rather than getting a job offer at X company in Y months. There might be other books that work better for you than the one I recommended. I’m also in my 30s and have a job I’m more or less satisfied with currently.
I'm working through "The algorithmic beauty of seashells" by Hans Meinhardt and it's fantastic. It's been on my list for quite a while, but I only got around to it about 2 months ago. I'm through the first 90%, which means I got through the seashell pattern modeling. I'm reading the last part more slowly, both because it's not building up the model and because I'm building an interactive implementation of the models.
I'm also reading Seveneves by Neal Stephenson. Started less than a month ago, am at p256/867. It's not my 'priority book', but I've been enjoying it when my brain needed a break from the seashells.
I loved "Algorithms to Live By" by Brian Christian and tom Griffiths. It's not quite as focused on the technical side of things as the books you listed, but I still enjoyed it quite a bit.
Algorithmic thinking is a fun read. I will recommend it.
Skiena is also a fun read. I quite enjoyed the anecdotes (real life case studies) in Skiena’s book.
I'm curious about that book (The Master Algorithm): I began reading it, but stopped early because I got the impression it would be too "entry-level" for me, thus a waste of my time. Should I consider keeping on with it, and why?
1.) Go to https://leetcode.com It's a whole community built around algorithms and data structures.
2.) Pick an easy problem.
3.) Code it naively/brute force it just to get it 100% correct.
4.) Check the Discuss tab, sort by Most Posts and read the solutions and comments.
5.) Every time you hit a wall or encounter a new term (like space/time complexity, dynamic programming, binary tree etc) find a video on YouTube that explains it really well. Not enough? Ask community, consult a paper or a book.
6.) Go back to 2.) until you're ready for the next level.
Don't let your own mind sabotage you by telling you that 'this is not real world programming', 'this is for college kids'. Embrace it and you'll find it sort of interesting like solving a hard puzzle in a point & click adventure video game.
Thanks! Currently working through The Algorithm Design Manual, and next on my list is Introduction to Algorithms but I will add your recommendations to my reading list
Really enjoyed that book! It intersperses real world use cases which helps when your motivation starts to wane and has a warmer tone than most algorithm books. That being said, it is still pretty rigorous and will take a lot of work to get through it all.
Whichever resource you choose, make sure it has exercises and do them! Even if you can't 100% figure some of them out just trying to will help your thinking immensely.
While I agree with virtually of what you said, the following statement I do disagree with: You don't need a book; you need a project. (in reference to laerning algo and data structures).
There are too many non-trivial algorithms that you are just likely to not rediscover. Many are the result of some of the best minds in various fields over decades. Dynamic programming isn't something that will likely just show up in your code w/o knowing about it (it may, but probably among the more skilled). Balanced trees almost certainly won't. Heck, even standard binary trees probably aren't obvious to someone who hasn't thought about the problem.
And definitely not things like the Fast Fourier Transform or stability of Gaussian elimination, etc...
Have a project that you're working on too, but don't do it without also learning algorithms and data structures more formally. Otherwise you'll end up finding a lot of poor solutions for problems that have known good solutions.
Edit: why? Because you believe in the leverage algorithms can provide https://www.amazon.com/Algorithms-Live-Computer-Science-Deci...
There are probably a lot of single people here that would benefit from that book as well (the stopping problem)
We all "know" the algos. But reading/hearing how they can be applied and what effect they can have on your life can be enlightening.
reply