#52 in Computers & technology books
Use arrows to jump to the previous/next product
Reddit mentions of The Algorithm Design Manual
Sentiment score: 28
Reddit mentions: 39
We found 39 Reddit mentions of The Algorithm Design Manual. Here are the top ones.
Buying options
View on Amazon.comor
Springer
Specs:
Height | 9.25 Inches |
Length | 7.01 Inches |
Number of items | 1 |
Release date | October 2010 |
Weight | 2.86160016076 Pounds |
Width | 1.69 Inches |
What I did a few years ago after graduating from college in CS to brush up on my DS + Algs knowledge was the following:
Eventually when you get a coding problem it will be sort of like a switch going off in your head because you will have had so much practice with different types of algorithms and data structures that you'll be able to reduce the problem into a simpler problem you've done before. This is especially the case with dynamic programming problems. Once you've completed like 50+ DP challenges and understand how they work, you'll be able to solve (practically) any DP problem because they're all very similar.
I don't know how to tell you how code well, because I don't know how to do it myself. I look at John Carmack, Bjarne Stroustrup, Guido van Rossum, Herb Sutter and co. and I realize how poorly I measure. That said, I do know of some things that will certainly help you. I believe to get good at something takes time and dedication. The following is in the order that I thought of it. I'm not sure how you should attempt to learn this material. Hopefully someone else can help you out with that.
Learning how to recognize potential solutions to classes of problems and of course having the basic tools to design a solution.
Understanding the constraints of computing
There are a few exercises that I think would be helpful.
I really like The Algorithm Design Manual by Steven Skiena.
If you want a job at Google, look up Steve Yegges article on how to prep for the interview.
There's no shortcuts from actually knowing your shit. Code, algorithm, design, Big O... Stuff that you actually do on the job.
Don't waste time on questions mentioned in this article.
When I interviewed, I read Skiena's Algorithm Design Manual cover to cover for a couple of months leading up to the interview.
The Algotitms Design Manual by Skienna helped me a lot.
I was also curious about this one.
Also, this site may help :)
Skiena's Algorithm Design Manual - It gives you an overview of what classes of problems exist and how real world problems can be expressed as instances of them. It doesn't always give you the step-by-step directions of how certain algorithms work, but it gives you enough of an overview to understand the problem and points you towards existing implementations.
It's certainly one of the most useful books I used when preparing for interviews (and comes in handy in the real world as well). As an anecdote, in one interview at a big-N company, I was presented with a problem, said "based on these factors I'd treat this as a network flow problem by doing X", and that was the only buzzword needed - rather than watch me try to write a solution to a known problem, we were able to move on to other questions. Without knowing that term, I probably would have spent the remainder of the interview trying to optimize a solution to the problem instead.
I learned most of what I know from Robert Sedgewick, whose prose is exceeded in clarity only by his diagrams:
https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/032157351X
Steve Skiena is also excellent, and writes a bit more accessibly:
https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202
You can usually find these on the shelves of a university library.
I highly, highly, highly recommend reading Skiena:
http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202/ref=sr_1_5?ie=UTF8&qid=1320821047&sr=8-5
It's really readable, and is a really good refresher. I've actually reread it a couple times now (like, actually read like a novel, unlike what you do with CLRS), and each time I've been glad I've done so.
The best way to learn these structures is to simply make a list of the ones you need to know, which can be done via looking at wikipedia and http://xw2k.nist.gov/dads/
One you have that list, take any language you know and program them without copying the code/psudocode from the web/book. You should know the general idea of the structure and be able to implement it. Then have a worker function that populates and tests all of them.
This books is also quite good if you want a book
http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202/ref=sr_1_3?s=books&ie=UTF8&qid=1292699709&sr=1-3
TL;DR Improve yourself, invest in your future, don't worry about the mistakes...read the books listed at bottom, and practice!
Few months ago I royally fucked up an interview at Microsoft. A really simple question. But I had no experience doing coding on paper instead of a computer.
I spent a lot of time studying various books and paper coding to make sure it wouldn't happen again.
I then had an interview for another (in my mind at the time) dream job. I did fine for all the phone interviews and they flew me over to the west coast for an in person interview for the day. I did well for the first bit until they started pulling out dynamic programming and integer programming questions on me and expecting me. Once again something I didn't prepare for, and f'd up. Didn't get this job either. For the longest time I was really hard on myself at fucking up on both these interviews one after another. Especially this second one since a lot more was riding on it than just the job (another story).
But then I decided I didn't want to have this sort of experience again and expected better of myself. I made myself further improve and brush up on all those concepts as well. Did a few mock interviews with friends, spent some time working on interview type questions on both the computer and on paper. A month or two later I started interviewing again. By this point I was an interviewing machine - and I'm now able to do just about anything thrown at me. I've had my choice of employers and until just recently, was in the situation where I had so many offers I didn't know which one I wanted most. I'll be heading to silicon valley soon at one of the top tech companies in the world with a fantastic offer considering I just graduated.
The point is - learn from the mistakes and improve yourself. I realize you don't want to be that guy spending heaps of time coding outside of work or whatever... but this is an investment in yourself and your career. Do it once, and then just brush up on your skills from time to time. Get into the interviewing mindset and just rock them so you can have your choice of job - and then you can go about your thing once you have the job locked. The up front investment will be worth it!
Things that helped me:
Having trouble with Algorithm design/analysis? These are some of the go-to books for that:
I've posted this before but I'll repost it here:
Now in terms of the question that you ask in the title - this is what I recommend:
Job Interview Prep
Junior Software Engineer Reading List
Read This First
Fundementals
Understanding Professional Software Environments
Mentality
History
Mid Level Software Engineer Reading List
Read This First
Fundementals
Software Design
Software Engineering Skill Sets
Databases
User Experience
Mentality
History
Specialist Skills
In spite of the fact that many of these won't apply to your specific job I still recommend reading them for the insight, they'll give you into programming language and technology design.
It's a great course, doing well in it would definitely give you more confidence in taking up more challenging problems in the CS or Software Engineering domain in general. I would recommend you to go through Data Structures chapter in the The Algorithm Design Manual by Steven S. Skiena, also a great book to study about Algorithms. This book is an amazing read and I recommend it to all CS majors.
But if you are looking for an algorithm and data structures book, I found The Algorithm Design Manual the most useful book of all I read in the field of CS. Find it used, but if you can afford it, it is very well worth the price in my opinion.
The Algorithm Design Manual
It's very concise and well organized. I always give this a quick skim before an interview
Yes, working at a big N now after several years of working for startups. You'll need to study up on how to do successful coding interviews (which at large companies are very different than the startup interviews you've probably experienced). Cracking the Coding Interview is a good start. Leetcode is also good practice but make sure you do some whiteboard practice as well since you won't have the advantage of a compiler when doing the actual interviews. If, like me, you didn't have a formal CS background, consider watching the MIT 6.006 Introduction to Algorithms videos and possibly doing the exercises before any of that. They were really helpful when textbooks like the oft-recommended The Algorithm Design Manual came across as super-heavy (but still useful as a reference).
Good luck!
^(Disclaimer: Opinions are my own, not necessarily my employer's.)
A few books that I have been going through: Programming Interviews Exposed, The Algorithm Design Manual, and Designing Data-Intensive Applications.
I've heard good things about The Algorithm Design Manual. I personally really got a lot from Algorithms in a Nutshell. As the name implies, it's a small book, but quite good.
I know you requested data structures, but the two subjects are closely intertwined: a given data structure often exists to support an algorithm and vice versa.
Wow that's awesome! Are you interested in embedded and RTOS systems at all?
If so, I'd highly recommend this and this and picking up a TI TM4C123 board to do some development on.
I also recommend this book for learning more about the practical application of algorithms.
I'd suggest finding a good course and a good book that you can use for reference. Then cementing your skills by doing lots of problems.
The book: this one's easy. Skiena's Algorithm Design Manual is highly regarded, surprisingly readable, and affordable by textbook standards. Don't need to read it cover to cover, but it's great reference, and I'd suggest reading the really critical chapters like graph search and sorting.
The course: You can't really do better than Stanford's course, taught by Tim Roughgarden. I took it a few years ago and have used it to brush up every time I apply for a new job.
The problems: it's important not to dive into this until after you've learned the basic concepts. But Leetcode is the standard, and for good reason -- it has a ton of problems, many of which are leaked from real companies. At first, these problems will seem very difficult -- it make take hours to solve a 'medium' level problem, if you can get it at all. If you simply can't get it, read the solutions and really understand them.
I also recommend the book Elements of Programming Interviews. You'll hear a lot of love for Cracking the Coding Interview on this sub, but it's too easy and outdated for current interview prep. It's a fine intro book, but it won't take you all the way to where you need to be.
In almost every field, you're going to end up dealing with groups of things - lists of contacts, groups of users, categories of billing items, whatever. Having a deep understanding of arrays vs. (hash) sets vs. (hash) maps is huge, by far that's the most common decision I make on a day-to-day basis.
I think it's worthwhile to expose yourself to a bunch of specialized algorithms and data structures. You don't need to study them all super in-depth, but reading about them and maybe hacking them out in Python/Java/C++/whatever is a great learning exercise. I personally like "The Algorithm Design Manual" by Steven Skiena, (EDU PDF, Amazon). It's on the dry side, but it categorizes algorithms into a handful of types (sorting, graphs, combinatoric search, etc) which makes it great reference material for learning.
A handful of useful exercises, maybe useful:
If you plan on self teaching I find these materials to be quite sufficient:
Data Structures and Algorithm Analysis This book also has a C++ version and can be found online for free(legally, from the author). I prefer reading a real book over PDFs so I opt to buy it but your opinion may differ.
The Algorithm Design Manual. This is pretty much the 'go to' book for self learning DS/Algo since it covers a lot of material but does not go that deep into the details beyond a working knowledge.
Introduction to Algorithms. This is the standard text on Algorithms and is used in most undergrad/graduate level courses on the subject. It is very detailed and goes deep into the theory and mathematical proofs of algorithms. It's a much more academic text but still worth mentioning and being aware of.
Edit:
Out of the 3 I think the first is the easiest to read but the second is the best in covering relevant material quickly and sufficiently enough. The last one is only for those who want mastery of the topic or intend to use it for a course.
I'd recommend
If you are a beginner and you have wifi on the plane: https://www.freecodecamp.org/.
For deeper reads:
Thanks! Just to make sure, do you mean these two books?
If so, I'm glad you mentioned those. Both of them are already on my to-read list, but they were further down than Knuth's work. Since, as you say, they might better for starters, I'll check those out first.
By the way, I have also heard some good things about this one:
Have you any experience with that book? It's also on my to-read list.
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.
You don't need to start off with 'Cormen' (CLRS) imo. It has way more complication than you need in a first class, and is so heavy to lug around and painfully clearly written (=> verbose), that you'll dread picking it up. Really, whatever the cheaper class text is, is ok. Skiena's "Algorithm Design Manual" is pretty complete for beginners in the first part, is less heavy on math (but has some) - the book has a practical bent - and the book weighs far less. Plus the guy is a witty writer. It's a bit more terse, so there's room for an algorithm survey in its 2nd half. For this reason the book is a keeper. It's especially great for learning dynamic programming (which you may not do).
This is just my 2 cents, but the first thing you should be asking when learning any language is what problem are you trying to solve with the language?
C# as a language doesn't amount to anything, but it's real potential comes from the frameworks it is associated with.
​
If you're wanting to:
web develop then you would need to look into .NET Core + WebApi + MVC or a front-end framework (Angular, React, Vue).
This is a great course to get you started with. It'll create a basic web application you can modify and play around with from the database to the front-end:
https://www.pluralsight.com/courses/aspdotnetcore-efcore-bootstrap-angular-web-app
​
desktop development then look at Wpf (window presentation forms) or use electron and c#
mobile development then take a look at xamarin
​
from your use of Unity though, it seems as if you are more into game development which I would advise then to go a bit lower and really learn algorithms and good implementations. For this, there are some greats books you can use to help you get started:
Cracking the Coding Interview: 189 Programming Questions and Solutions by Gayle Laakman - Even though this is an interview book it's a great intermediate book to algorithms. The book does assume you have a basic understanding of elementary data structures.
The Algorithm Design Manual by Steven Skiena - This is definitely more advanced and heavy but it's a great book to really dig down into the nitty gritty
A great website for practicing writing algorithms in c# is leetcode.com. It's a site that basically lists a bunch of small questions you can solve with an in browser compiler that includes c#. This way you wouldn't need to download visual studio to practice coding.
if you're up for the challenege, then you can download a framework like SFML.Net and try to develop a game from the ground-up without using an engine like unity. But this is obviously a lot of work ;)
​
Overall it's hard to give really specific advice without knowing where you're trying to head. But it's a good time to get into c# and in general microsoft's development stack. In the past people were shoe horned into using microsoft's technology stack from top to bottom but recently microsoft has made a lot of stride in making there tech more open which is making a lot of people turn heads.
If you are also looking for a more lite-weight ide then I recommend visual studio code or vscodium which is the same but without the trackers :)
Book Link
Jeison Higuita recomienda este libro para algoritmia y competitive programming: Competitive Programming
Esteban Foronda recomienda este libro para algoritmia: The Algorithm Design Manual
It's incredibly expensive as well.
For more affordable resources :
Algorithm Design Manual is great too.
I like The Algorithm Design Manual: http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202
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
You gotta start somewhere! I'm glad that you are taking the programming classes. Programming is fun, and challenging, you'll see. For starts, just go through your course and pay close attention to (a) algorithms and (b) data structures. If you find it hard to understand, just come back here or go r/learnpython. We are here to support you. Also, if you prefer books, i recommend this one - he talks through the concepts from problem solving and steps through psuedo-code before writing a functioning program. If you prefer an online experience, try all the easy problems on leetcode, don't get intimidated if you don't get the solutions, don't be afraid to peek at hints and solutions.
No internships at any point in my college or post-college career. I had a modest amount of projects, mostly relating to my coursework in school. My senior year I designed and programmed a video game with a team of fellow classmates, which was my main project on my resume.
As far as independent study goes, mainly hunting down UC Berkeley / MIT comp sci lecture series videos on youtube and watching them, using resources like hacker rank to work through coding exercises. I also read through the Algorithm Design manual https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202
can confirm, using this book in my MSCS program (my Uni doesn't have undergrad programs); I'm implementing a lot of the algorithms using custom objects in Python, so it's doing wonders for my object oriented game...
The book is also relatively straight forward to read (again, keep in mind I'm a graduate student), but other books such as the Algorithm Design Manual have been known to have easier to understand explanations and not be as theoretically deep.
Also lastly, for when I was testing my toes in the water, I flipped through Grokking Algorithms which for a short summary, and explanations on how things work is a great place to start (but of course you won't see this book in academic environments).
You'll need programming background (basic stuff + data structures) to implement algorithms. You'll need mathematics background (Discrete Math) to analyze the algorithms, and in many cases, understand them.
Nice book: Skiena's The Algorithm Design Manual. These are in many cases pretty generic. Specialized interests come later!
>I highly, highly, highly recommend reading Skiena:
>http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1849967202/ref=sr_1_5?ie=UTF8&qid=1320821047&sr=8-5
>It's really readable, and is a really good refresher. I've actually reread it a couple times now (like, actually read like a novel, unlike what you do with CLRS), and each time I've been glad I've done so.
Just wanted to let you know that I checked this out online thanks to you and it looked good so I just bought it. I'm gonna read through it during my break.
CLRS is an awful book for learning or even gauging interest. Despite its love in AoA classes it is really more of a reference book than an instructional one. Not to mention not all of Computer Science is about algorithm analysis. I'd suggest reading Skiena instead, it is well presented and interesting. It will do much more for gauging his interest in AoA than wading through CLRS will.
In a way CLRS is like telling a kid thinking about going to grad school for Roman History to go read all of "The Decline and Fall of the Roman Empire" first. You are setting him up to be turned off.