The Algorithm Design Manual
About This Book
Most professional programmers that I’ve encountered are not well prepared to tackle algorithm design problems. This is a pity, because the techniques of algorithm design form one of the core practical technologies of computer science. Designing correct, efficient, and implementable algorithms for real-world problems requires access to two distinct bodies of knowledge:
• Techniques – Good algorithm designers understand several fundamental algorithm design techniques, including data structures, dynamic programming, depth first search, backtracking, and heuristics. Perhaps the single most important design technique is modeling, the art of abstracting a messy real-world application into a clean problem suitable for algorithmic attack.
• Resources – Good algorithm designers stand on the shoulders of giants. Rather than laboring from scratch to produce a new algorithm for every task, they can figure out what is known about a particular problem. Rather than re-implementing popular algorithms from scratch, they seek existing implementations to serve as a starting point. They are familiar with many classic algorithmic problems, which provide sufficient source material to model most any application. This book is intended as a manual on algorithm design, providing access to combinatorial algorithm technology for both students and computer professionals.
https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...
Far more readable than the usual text (Cormen), the first half is a guide on how to select and design algorithms for the problems you encounter, and the second half is a whistle-stop tour of hundreds of well-known algorithms. The tour helped me a lot with X->Y esque issues where I was building bad solutions because I didn't know anything better could exist.
Incidentally, there's a lot more to CS theory than algorithms and data structures, but if you're asking on HN for a generic CS theory book, I reckon it's most likely an algorithms and data structures book that you're after.
https://smile.amazon.com/Algorithm-Design-Manual-Steven-Skie...
My Story
Hey pal, I was in a similar boat about 8 months ago. It was my senior year as an Economics major, and after taking a programming class, I instantly fell in love with it. I crammed a few more programming classes in before graduating, but in the end, I sure as hell wasn't employable as a software engineer.
​
I had a choice: become a data analyst (the path I was currently on) or follow the software engineering dream. I chose the latter.
​
I decided to go to a (remote) coding bootcamp after college. The program was 6 months. It taught web development (Node, React) and some very basic CS fundamentals. I spent my free time outside the bootcamp inhaling all the computer science and industry information I could. I did this because I wanted to be a competent programmer. I found it fun.
​
This week I had my second onsite. I expect to receive a full-time software engineer offer (my second offer so far) later today, and I have 4 other onsites in the near future (a big 4 + a few startups). It has been a heck of a lot of work to get here, but if you want it badly enough, it's possible.
​
My Tips
​
Happy to answer any other questions you may have. I'm not an expert or an experienced software engineer yet, but I've walked the path you're considering, so hopefully my tips are helpful.
I really like The Algorithm Design Manual by Steven Skiena.
Sounds like you could use a good foundation in data structures and algorithms. I'd find a book on the subject and dive in.
My recommendation: The Algorithm Design Manual by Skiena.
Link: https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202
The Algorithm Design Manual was super helpful for me.
https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202
I also didn't have a CS background prior to starting grad school in it. I used Steven Skienna's Algorithm Design Manual to cover my bases.
It is incredibly concise, well written, and teaches all the important concepts. I preferred it over the CLRS textbook, linked by other people down here, because it is more of a reference guide than a book you can learn something from on your own.
I bought it and it was a counterfeit book. Pretty sure if you buy it there you will get either a counterfeit book or an international edition which has significantly lower print quality.
[1]: https://www.amazon.com/Cracking-Coding-Interview-Programming...
[2]: https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Str...
[3]: https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/020...
[4]: https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...
I would recommend The algorithm design manual for more practical purposes. https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...
SOURCE: The Algorithm Design Manual 2nd ed. 2008 Edition https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...
https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...
https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...
As a second suggestion, I'd recommend to learn a language somewhat different from JavaScript-like (or C-like) languages, something that challenges your mind to think a little differently and understand and create higher order abstractions. There are many choices, but to avoid confusion and being my favourite, I'll point to one: read the "Structure and Interpretation of Computer Programs" by Abelson and Sussman. It teaches Scheme in a gentle and inspiring way but at the same time it teaches how to become a better programmer:
https://www.amazon.com/Structure-Interpretation-Computer-Pro...
I can't recommend it enough. If you read it, do the exercises, don't limit to read through them.
Maybe it's even better if you start with this, and THEN read the books on algorithms and data structures.
Enjoy your journey!
Algorithm design manual
Algorithms in Java
Also I recommend you to go through this MIT lectures videos.
My book recommendation is Steve Skiena's "Algorithm Design Manual". There's a nice chapter on graphs.
Read a book on algorithms.
Learn OOP and read a book on Design Patterns
Realize that making code readable is often more important than making it as efficient as possible, and most optimization should be left up to your compiler.
[0] http://www.amazon.com/dp/1849967202
http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/...
Not a quick win but a comprehensive, in-depth algorithm book :-)
Read the book, and do whatever exercises you can from the book on the whiteboard. Talk out loud, the way you will in the interviews. After a few weeks and 60 hours of doing this, you'll be ready to blow the minds of the people interviewing you.
When you go to your interview, you will bring your own markers. Then you don't have to deal with the fat, half dried out stuff you encounter during the interview. Also, warm up for an hour or two before you go to the interview, by doing problems from the book on the whiteboard, out loud. This helps you leave nothing to chance, and be ready for whatever they throw at you.
Yeah, it's a waste of time. But you have to play the game. Similarly, when they ask you why you left your last job, lie and tell them you'd accomplished all your goals there, got everything lined up and nailed down, and you're ready to make something happen somewhere else. Don't tell the truth if it's because your managers couldn't care less about doing what's best for the business. If you want to work at the circus, sometimes you gotta jump through some hoops. Big deal, you'll be ok!
Yes, the interview process is broken, but you can actually work at it and do well, even if you're old.
Buy this book even if you're not planning to take my advice and study. Even if you don't study, this should become one of your most treasured books. I myself was amazed at how many things turn out to be graph problems, and had a great time going through this book.
[1] http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/...