The Algorithm Design Manual

Category: Programming
Author: Steven S Skiena
All Stack Overflow 7
This Year Hacker News 1
This Month Stack Overflow 1

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.


by andyljones   2019-08-21
Skiena's Algorithm Design Manual:

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.

by bcherny   2019-08-21
I’m a fan of Algorithm Design Manual. It’s also what Google and FB recommend for interview prep.

by Vitate   2019-07-21

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

  • Try not to be intimidated by these tips. Software engineering is something that you take little bites out of. You cannot become an employable developer in one bite, and sometimes the field can be intimidating.
  • Your options right now are self-teaching, a coding bootcamp, or a CS master's degree (might be hard to get into a good program without a bit more relevant experience, tbh.).
  • It's going to be pretty difficult to break into anything other than web development for your first programming job without a CS degree. Titles like Front-end Engineer, Full Stack Engineer, Backend Engineer, and Software Engineer (at a web company) are within reach. More specialized titles probably aren't very realistic.
  • Basic toy projects (i.e., simple HTML/CSS or similar) probably aren't enough to get significant attention. You need things more complex, like full-stack applications built from scratch. This means a working backend, a working database, a modern front-end (using a framework like React, etc.). Here's my portfolio if you're curious about the type of apps I mean.
  • Other types of programming applications outside of web dev are also fine, as long as they are sufficiently complex and interesting.
  • Put your projects on your GitHub no matter what. Learning how to commit code to GitHub is an important industry practice. Having a green GitHub history makes you look better.
  • Try and build a portfolio once you get better at coding. Don't kill yourself making it look amazing, but do try and make it look good. Not everyone will care about your portfolio, but some people will. I got an interview just based on having a nice portfolio.
  • Your university course sounds like a great primer, but you need to go deeper to be competent enough to pass interviews. I took similar courses at my university, but what really helped me was going through a few textbooks (1, 2, 3 -- some suggestions) and watching MIT 6.006 lectures. You will still have gaps in things like web security, scaling systems, networks, and operating systems, but I wouldn't spend a ton of time learning those topics as a new grad. Knowing the basics can be helpful though, because these things do definitely come up in interviews.


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.

by KeepingItClassy11   2019-07-21

I really like The Algorithm Design Manual by Steven Skiena.

by mawattdev   2019-07-21

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.


by roastingapples   2019-07-21

The Algorithm Design Manual was super helpful for me.

by You_NeverKnow   2019-07-21

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.

by karakot   2018-12-02

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.

by mindcrime   2018-11-17
If it were me, I'd probably consult Cracking The Coding Interview[1], and the Robert Sedgewick Algorithms in C++ [2][3] books. That and maybe spend some time practicing on Leetcode, Hacker Rank, Project Euler, etc. Skiena's Algorithm Design Manual[4] could also be good.





by zombieprocess   2018-02-24
Isn't this book too academical for any practical learning of algorithms and data structures?

I would recommend The algorithm design manual for more practical purposes.

by V2hLe0ThslzRaV2   2018-02-17
10 years ago being 2008 - and the second edition also appears to be the most recent edition too; age of the edition though appears to have no impact on its value.

SOURCE: The Algorithm Design Manual 2nd ed. 2008 Edition

by panta   2017-10-11
I can't recommend courses, because I don't have direct experience of any, but given what you say, my suggestion would be to take a bit of a pause from pragmatic problems, and dedicate some time to learn the foundations of computer science, in particular about algorithms and data structures. I'd recommend a couple of books: "The Algorithm Design Manual" by Steven Skiena if you want something not too theoretical, or "Introduction to Algorithms" by Cormen, Leiserson, Rivest, if you want a bit more breadth and theory:

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:

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!

by anonymous   2017-08-20

Algorithm design manual

Algorithms in Java

Also I recommend you to go through this MIT lectures videos.

by anonymous   2017-08-20

My book recommendation is Steve Skiena's "Algorithm Design Manual". There's a nice chapter on graphs.

by anonymous   2017-08-20

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.

by ssurowiec   2017-08-19
For anyone interested in this subject I'd highly recommend the Algorithm Design Manual by Steven Skiena[0]. He goes over this in pretty good detail in the first ~1/4 of the book. This was my first introduction to Algorithm Complexity Analysis and by the end of that section I already found myself looking at my code in a different light.


by vanelsas   2017-08-19
I have just started reading the bible of algorithms:

Not a quick win but a comprehensive, in-depth algorithm book :-)

by unoti   2017-08-19
Here's an often overlooked technique for older, self-taught engineers like me: study. Go get this book, The Algorithm Design Manual by Skienna. Also pick up a whiteboard, and a nice set of dry-erase markers.

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.