Ask HN: What skills do I need before tackling The Algorithm Design Manual?
I’ve been reading a book called “How To Win At College” by Cal Newport of Study Hacks fame. The book is broken up into a series of tips and tricks that are meant to ultimately lead one to greater success as a university student. One of the tips in the book is “Do something better than anyone you know.” I’ve decided that I want this skill to be the ability to solve algorithmic problems by applying algorithm theory to real-world problems and I’ve decided on The Algorithm Design Manual by Skiena as my introduction to algorithms.<p>We all agree that computer science is not programming, but I believe a firm grasp on basic CS concepts can make anyone a better developer. This relationship is similar to that of a journalist who studies English. While a journalist can have a great career without studying English, there is certainly an argument that theory (English) is just as important as application (Journalism). For programmers, this is the difference between studying theoretical computer science (algorithms, data structures, AI, etc) and learning programming languages (Python, C, etc).<p>My goal is to become proficient at engineering optimized algorithms for solving real-world problems. This won’t happen by diving right into a book on algorithms and that is something that I fully understand. My question is this: What do I need to know before I start tackling The Algorithm Design Manual? To be a good algorithm designer one certainly needs to know how to analyze the time complexity of an algorithm. What math skills, specifically, are required to do this well? I’ve heard that going through a book on discrete mathematics would be a good idea. What else would you recommend? Statistics and probability, perhaps?