# Reddit reviews The Algorithm Design Manual

We found 59 Reddit comments about The Algorithm Design Manual. Here are the top ones, ranked by their Reddit score.

More and Improved Homework ProblemsSelf-Motivating Exam DesignTake-Home LessonsLinks to Programming Challenge ProblemsMore Code, Less Pseudo-code

## 59 Reddit comments about The Algorithm Design Manual:

Creo que mucha gente se confunde ser autodidacta con hacer algun cursito de como hacer una web y darle con eso.

Para llegar a cierto nivel, tenes que aprender computer science, teoria y trabajar en cosas que te permitan aplicar esa teoria.

Tenes que saber ver un algoritmo y poder calcular la complejidad, tenes que entender que son las patrones de diseño y cuando conviene aplicar tal o cual.

Tenes que entender como funciona OOP, pero tambien tenes que aprender algun lenguaje funcional, te va a hacer un programador más rico.

Tenes que entender de Unit Testing, automated testing, Integration testing.

Los dos libros que más me ayudaron cuando empecé en computer science son :

https://www.amazon.es/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693

y

https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612

Y ir codeando mientras vas leyendo y aplicando las cosas es fundamental.

Me parece que la diferencia entre ser autodidacta es que no tenés esa vara minima que te da la facultad, asi que depende de vos que tan crack queres ser y si estas dispuesto a poner el laburo y a aprender cosas constantemente.

La información esta en internet o Amazon, no hay ningún secreto.

Taking a course will definitely help and I have a few book suggestions.

Intro to Algorithm

This is pretty much the holy grail on algorithms, used in many college CS courses.

Skiena's Algorithm Design

My personal favorite. Combines his Ph.D experience with real world problems.

> I was wondering if a DS course was necessary to do well on Leetcode problems

Nope:

Try Leetcode easy problems. Look up new concepts as you encounter them. Repeat.

edit: if you have time, there's also https://www.coursera.org/learn/algorithms-part1

leet code is a great place for practice problems

For algorithms this book is great

https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ref=sr_1_9?keywords=algorithms+book&amp;qid=1554149281&amp;s=gateway&amp;sr=8-9

Also, if you are looking for a software engineering role you will also need to brush up on high level design like this video:

https://www.youtube.com/watch?v=KmAyPUv9gOY

Can't go wrong with Introduction to Algorithms

Another popular algorithm book is Skiena's Algorithm Design Manual

Another one suggested by one of my professors is Algorithms by Robert Sedgwick

I would emphasize the end of /u/razeal113's post. Don't reinvent the wheel. Learn from those who came before you by studying common algorithms.

MIT's algorithms course, 6.006, is a good introduction to the concepts that are important to analyzing and applying algorithms and it also introduces many important algorithms. You can watch the lectures and access the course material for free.

http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/lecture-videos/

If reading is your thing, I like Skiena's Algorithm Design Manual. It's not too dense and has war stories where you can read about how the algorithms have been used to solve real problems.

http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693

Whatever your goal with programming is, there's a good chance that it won't involve inventing new algorithms; instead, nearly everything you do will involve recognizing how to apply and/or adapt an algorithm you already know to the problem you're trying to solve. The more algorithms you already know, and the more comfortable you are with them, the easier it will be to recognize and apply.

Wat? No-one's mentioned careercup.com ('Questions' at the top of the page)? Go there and find Amazon's, and many other companies' interview questions. Research the things you don't know, limber up on the variety. It'll be overwhelming, but it's what you need.

Oh, and one recommendation for an algorithms book is Steve Skiena's Algorithm Design Manual. It covers the basics, but goes into /some/ of the more esoteric data structures (and dynamic programmng) as well.

Hi! I recommend the following books:

You can find other similar books here and here.

One that I especially liked (although closer to an algorithms textbook, but also had very cool "War Stories") is called The Algorithm Design Manual.

Have fun reading! :D

Skiena's Algorithm Design Manual. CLRS is the other typical recommendation, but I found Skiena to be much more readable.

CLRS is obviously a good choice, though I found The Algorithm Design Manual even though less known, very useful.

It's divided in two parts: the former is a discussion of many algorithms and data structures, so it covers the foundations like sorting and complexity analysis, then talks about trees, graphs and related problems like minimum spanning tree, TSP, ... The second part of the book is more like an encyclopedia, indeed there are

a lotof problem sets, each one with an explanation and several questions you should always pose to yourself when facing those problems as well as several possible solutions.Correct! I did not do every question in EPI because there are

a lot. But I did probably at least 1/3 of them evenly distributed throughout the book, following a guide in the front on which ones were most important.Equally important in my prep was The Algorithm Design Manual which I learned of here. It really changed the way I thought about a lot of fundamental data structures and algorithms, and helped me see how many real world problems require graph algorithms to solve.

Finally, I read a LOT of firsthand interview reports from GlassDoor for the company I was targeting.

All in all I spent a couple hours a day for nearly 4 months on interview prep. Before that I'd only had one interview, at a company I didn't care much about, and I bombed it. After those 4 months, I interviewed for my dream job and got it. I don't know that I nailed it, I probably just passed by a hair. But it was enough. Was I overprepared? I dunno. But I was at least prepared enough, which is all that mattered. :-)

Make sure you study algorithms! As a hiring manager the biggest differentiator I see between successful self-taught people and unsuccessful ones is that the successful people care about and learn about algorithm & data structure design.

Sure with a language like Java you'll be dealing with the nitty gritty less because it's managed, but it's still incredibly useful and applicable, and will make you a better developer to work with.

Personally, I love this book: https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693

It also has really great interview prep questions when you're getting to that stage.

That book has reviewed excellent reviews http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/. This is the standard text, CLR or CLRS http://www.amazon.com/Introduction-Algorithms-Thomas-H-Cormen/dp/0262033844/

What you're describing is probably what most people think of as machine learning, data science/mining, and has as much to do with computational efficiencies as it does algorithms' intrinsic behavior.

Also, What programming languages do you know?

Maybe if you look at a cheat sheet http://dlib.net/ml.html and some ML texts (Murphy, Bishop, Barber), those would help (also AIMA by Norvig/Russell)

http://www.amazon.com/review/R32N9EIEOMIPQU/ref=cm_cr_pr_perm?ie=UTF8&amp;ASIN=0262018020&amp;linkCode=&amp;nodeID=&amp;tag=

Some books that could help you practice algorithms and coding challenges are:

If you want some actual practice solving challenges with some guidance and/or help, I'd recommend Coderbyte which provides solutions to the problems along with the ability to view other user solutions so you can learn how others solve the same challenges. This article might help you find some other coding challenge websites as well.

Everyone keeps mentioning programming language resources, but I have yet to see any one mention any algorithm sources. Honestly learn how to develop algorithms, they are language agnostic. And you can practice them on paper. Good luck on your endeavor.

I haven't read this yet, but have heard good things.

https://www.amazon.com/gp/aw/d/1848000693/ref=mp_s_a_1_1?ie=UTF8&amp;qid=1496313668&amp;sr=8-1&amp;pi=AC_SX236_SY340_FMwebp_QL65&amp;keywords=The+Algorithm+Design+Manual&amp;dpPl=1&amp;dpID=41s5pnqOlyL&amp;ref=plSrch

It depends exactly what you're looking for, but I'd strongly recommend The Algorithm Design Manual by Skiena ( http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1261657117&amp;sr=1-1-spell ).

It focuses much more on intuitive explanations rather than spending time on proofs, is very readable and has a solid reference section covering over a hundred different algorithms with further references. See Steve Yegge's writeup of the book at http://steve.yegge.googlepages.com/ten-great-books (number 6).

Cormen et al. is good as well, but a bit dry compared to the above book, and with a much heavier focus on the proof side of things.

I really like /u/razeal113 's comment. That's a good algorithm for finding a good algorithm. Starting out with brute force isn't necessarily bad, as it at least gives you a jumping board to start optimizing. The only thing I would add is to increase your knowledge and toolbelt. You can gain a lot of inspiration and learn "how to think" by learning, analyzing, applying, and modifying all the awesome algorithms already out there. Here are some resources:

MOOCs.Online challenges. There is a pretty good list at 14 Coding Challenges to Help Train Your Brain. From that list, I most liked:Books.Design Patterns. This is personal opinion, and I'm sure many would disagree, but for me, design patterns were the yin to algorithms' yang.---

I think programming comes down to understanding

data structuresandhow to manipulate them(algorithms). Linus Torvalds had it right when he said:> Bad programmers worry about the code. Good programmers worry about data structures and their relationships.

I recommend Grokking Algorithms and The Algorithm Design Manual.

Here's a great article about interviewing at software companies:

http://steve-yegge.blogspot.com/2008/03/get-that-job-at-google.html

I particularly recommend working through the book he recommends:

http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693

Not only is it a great book for the kind of thinking that you're expected to do in these interviews, but it also has a number of sample interview problems. You may even recognize some of them from your past interviews.

I can't recommend this book highly enough.

Just looking for learning, etc? If it's for interview prep, I'd give different recs.

I highly recommend:

These are both general references, I think there are a lot of syntactic python stuff that are unique and awesome, but algorithm stuff and OOP stuff is kinda language independent.

You could go down two routes IMO: learn some algorithms and data structures, or start working with a more complex domain.

For the algorithms and data structures, this would be mostly stuff you'd learn in a second semester CS program course. In fact, you can work through some of these classes that are open, like the one at Berkeley. Another option is to pick up a good book; I personally love the Algorithm Design Manual. This will give you a really firm foundation on computation (not just programming in Java). It's also great practice for jobs since most interview questions revolve around these concepts.

For a new domain, I'd recommend Android development, since it's all done in Java. There's tons of documentation and resources for that, and loads to learn outside of just programming in Java. Not to mention you can carry around your work in your pocket and show off to potential employers. Aside from that, you can volunteer for an open source project. Apache has tons of projects in lots of languages.

Any great places/sites to buy computer science books? I'm looking for the books Introduction to Algorithms and/or The Algorithm Design Manual as supplementary reading for my algo class.

I thought so too, until I discovered The Algorithm Design Manual.

So, what about CLR(S) warrants a new edition?

The algorithm design manual is an incredible resource, check it out!

I like Skienna; short intro to the theory at the beginning and then it delves into actual algorithms. CLRS is good if you need more theory (e.g. solving recurrences).

what are "game algorithms" and why are they specific to games? What any game programmer needs is a grounding or at least an awareness of algorithms in general, as a means to solve problems.

When it comes to books, I'd recommend The Algorithm Design Manual by Steven Skiena it covers sorting and searching, graphs and graph problems, combinatorial problems, computational geometry, set and string problems, all with well written explanations.

Not that I know much about you, but from your post, it seems like your only option is to bootstrap yourself up the ladder. Given the constraints, you're going to have an uphill battle, but it can definitely be done. I'm not in the same situation as you, but I've been trying to teach myself coding on the side, and I'm starting to see a lot of progress! Admittedly, I went to school for electrical engineering, so I did have a class or two of exposure there, but I was far more interested in the hardware stuff.

Anyway, here's the approach I've been using so far:

everything. It's out there... Stackexchange is probably the best overall resource, but there is so much documentation out there it can actually be kind of overwhelming. It will take a while for you to sift through it all, but Rome wasn't built in a day...right now. You're going to want to pull your hair out because of a bug you can't find, but then you're going to feel like superman once you fix it. You're going to doubt your code and doubt yourself, but then realize that you're making your computer do amazing things you had no idea how to do 4 months ago. And it's going to take time... if you want this to be your career, then treat it as such. There's a reason why getting a degree takes multiple years; there's a lot to learn, but you have a great advantage over the Starbucks-slurping "creative-type" at your local university... You're doing this because you want to; because it's a way out of the box you're in; because you can see the light at the end of the tunnel. Ultimately, you'll kick ass because you're doing it for yourself.Ha, sorry that got kind of pep-talk-ish, but I was getting excited. Anyway, maybe this will be of use to you!

Every algorithms textbook I've read starts with a chapter that involves breaking down algorithm runtime into mathematical terms more specific than Big O (for instance, nested for loops turn into nested sums). Then the mathematical terms are simplified as much as possible and you get something like Runtime(n) = n(n-1)/2. Then you apply the definition of Big O to prove that that's O( n^2 ). The concepts and definitions of Big Omega and Big Theta are also usually brought into the mix as well.

If you want a specific book recommendation, I thought Skiena's Algorithm Design Manual was a good read.

Well, first off, focus on describing the problem out loud, and start with what you are planning to do and why, along with what similar other problems you've seen. I would recommend speaking out loud and writing notes even when you are alone, then putting it down in high level pseudocode, then doing the actual coding.

Another thing I would suggest is starting with the "happy case" (e.g. for something that involves recursion into two subproblems, assume that it is a power of two and the only odd that you will have to deal with is the case with 1 element) leaving out the boundary conditions until the end and mention that, always state your assumptions and then you can go back and fill in the edge cases once you have something that works for the simplest case). If you get stuck or realize why your solution won't work, explain out loud why (or more likely, what your runtime is, and what you would have expected your runtime to be and why, e.g. you are doing another extra loop, but maybe you could do something with memoization or dynamic programming to cut that down due to repeating subproblems). In the actual interview, the interviewer is there to slightly guide you too, so you have some extra resources that you wouldn't on leetcode.

I would personally recommend grabbing a copy of Skiena's The Algorithm Design Manual (https://www.amazon.com/dp/1848000693/) and/or Cracking the Coding Interview (https://www.amazon.com/dp/0984782850/), as they walk you through how to approach the problem, not just show you the answer.

Boot camps might help teach certain technologies, but they might not help with the fundamentals. Additionally before you give money away try to complete courses on Udemy or Coursera to see if you can commit to the effort.

Over simplified recipe for building skills to transition:

If any buzzwords here might not make sense, congrats you get your first exercise in digging for answers ;) (no rudeness intended)

Mechanical Keyboards: High quality keyboards with tactile feedback. They have a real impact on your typing speed, and also make programming less boring. They are very commonly used by programmers. Mechanical keyboards have different "switches" that make different tactile sounds. "Blue Switches" are considered the most popular. Here are some examples: https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Daps&amp;field-keywords=mechanical+keyboard.Gaming Mouse: Same usage as keyboards, but not as useful. Its mostly just nice to have.Textbooks: In computer science, there are one or two textbooks per subfield that are considered to be "Bibles" of the subfield because of their importance. If your bf just started cs, he won't have any interests in any subfield. However, the subfield ofalgorithmsis more or less all encompassing. More crucially, knowledge of algorithms is the most important (and arguably only) thing you need to know to get a job. If you want to work at a top CS company like Facebook or Google, you need to know your algorithms very well in order to pass the interviews. There are two books I can recommend for this:https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844/ref=sr_1_1?ie=UTF8&amp;qid=1503472210&amp;sr=8-1&amp;keywords=algorithms

and

https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ref=sr_1_5?ie=UTF8&amp;qid=1503472210&amp;sr=8-5&amp;keywords=algorithms

These are the most prolific algorithms books (imo). Another important book is "Cracking the Coding Interview": https://www.amazon.com/Cracking-Coding-Interview-Programming-Questions/dp/0984782850/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1503471832&amp;sr=1-1&amp;keywords=how+to+crack+the+coding+interview

This is the "Bible" textbook for passing tech interviews. Every computer science student I know at school has at least skimmed through this book once.

Personally, if I were starting in CS, I would appreciate either the mechanical keyboard or the "Cracking the Coding Interview" textbook the most. Good luck!

Check this thread for a reading list. IMO, The Algorithm Design Manual should have made the top too.

I second The Algorithm Design Manual, very good book.

I think that being proficient with algorithms consists of three skills:

And I think that The Algorithm Design Manual is excellent for this, Carmen is more comprehensive but I find it a bit to dry for my taste.

I purchased the following two books:

You usually do see stuff you've never seen before when you're learning something new.

Checkout:

It's going to take some time, so be patient, don't rush yourself. Don't beat yourself up if you aren't learning as fast as you like, it's not a race.

Keep on truck'n!

These are books I actually own and would recommend. Of course there are other great/better books out there, but I'm going to stick with what I've actually bought and read or "read".

I say "read" because several books are NOT meant to be read cover-to-cover. These typically have about 1/3 that you should read like normal, and then skim the rest and know what's in the rest so that you can quickly reference it. These books are no less important, and often even more important. I've marked these kind of books as

#reffor "read for reference". Normal books thatshouldbe read cover-to-cover are marked#readFor learning your first language:This is really the hardest part and unfortunately I don't have any books here I can vouch for. I started with "C++ for Dummies" and am not including a link because it's bad. Your best bet is probably "Learning <language>" by Oreily. I also love the Oreily pocket books because you can carry them and skim while on the bus or the john, but you can just do the same with your smartphone. Pocket Python, Pocket Java, Pocket C++Top Recommendations:Accelerated C++ #read Made for people who already know another language and want to pickup C++. Also great for people who need a refresher on C++. I really like how it

doesn'tstart with OOP but gets you familiar with the imperative parts of C++ before diving into OOP.The Algorithm Design Manual #ref This is my new favorite book and the first I would send back in time to myself if I could. Each algorithm & data structure is given a mathematical breakdown, pseudocode, implementation in very readable C, a picture (

very helpful), and an interesting war story of how it Saved The Day.Cracking the Coding Interview #read I originally avoided this book like the plague because it represented everything I hate about coding interviews, but many interviewers pull questions

straight from this bookso this book can equal getting a job. Put that way, it's ROI is insane.The Pragmatic Programmer #read Must-have for any profressional software engineer that covers best-practices for code and your growth. You can also find the raw tips list here

Head First Design Patterns #read Many prefer the "GoF/Gang of Four" Design Patterns which is more iconic, but Head First is a modern-version using Java to cover actual design patterns used day-to-day by programmers.

For Intermediates:Effective Java or Effective C++ and Effective Modern C++ #read When you're ready to go deep into one language, these books will give you a huge boost to writing

goodJava and C++.Design Patterns #ref You'll want to get this at some point, but early on it's too much for a beginner and many of the patterns are obsolete.

The Art of Computer Programming #ref The programming "bible" but like Design Patterns you should hold off on this iconic book until you've got your basics covered. It would make for a great purchase with your first paycheck or first promotion :)

https://smile.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/

Mersi de raspuns.

Eu ma gandeam ca Unibuc e mai potrivit pt ca la Poli voi face multa electronica si programare low-level si nu cred ca le voi folosi.(btw ce crezi de masterul asta de la unibuc http://fmi.unibuc.ro/ro/pdf/2008/curs_master/informatica/4InteligentaArtificialaEnachescuSite.pdf , e din 2008,nu am gasit o varianta mai buna.Daca voi avea posibilitatea sa fiu acceptat l;a o facultate mai moderna care face cercetare din afara o voi face,dar mai intai trebuie sa capat o diploma din Romania).

Planul meu a fost intotdeauna sa invat singur dar vreau sa fac cercetare/sa fiu angajat asa ca voi face o facultate.

Acum sunt a 10 la intensiv info.Am decis de anul asta ca vreau sa lucrez intr-un fcomp sci field si m-am apucat sa invat dinainte la info,in mare parte C++ si algoritmi ca DivideetImpera.Simt ca programa merge prea incet.Nu stiu nimic despre machine learning(inafara de chestii simple ca si la ce se foloseste) dar mi se pare un field foarte interesant unde contribuirile mele ar putea fi importante.

Va veni vacanta de vara si voi avea mult timp liber si vreau sa ma apuc de machine learning de-acum.Ce crezi de planul asta de invatare?

1-algebra liniara(de la MIT OCW https://www.youtube.com/watch?v=ZK3O402wf1c )

2-Invat despre algoritmi(MIT discrete math si MIT Algorithms sau Algorithms design manual )

3-Invat Python

4-Statitica( de pe KhanAcademy si dupa de pe MIT OCW)

5-Ma apuc de calculus(in a 11-a vom face diferentiale si a 12-a integrale dar ma voi apuca oricum dinainte ca trebuie sa le stiu oricum).Aici nu prea stiu ce va trebui sa invat mai exact.Stiu ca imi trebuie multivariable calculus dar trebuie sa invat integrale si diferentiale inainte?

6-Ma apuc de machine learning-Artificial intelligence:a modern approach si de cursul lui Andrew Ng de la Stanford.

Ce crezi de planul asta?

As others have mentioned, if you can afford it, TAoCP is definitely a keeper. How much Knuth will ever finish is unclear (he's

somethingof a perfectionist), but it's a classic for a very good reason.Slightly lower end, two great books are Hacker's Delight and Steven Skiena's Algorithm Design Manual. The latter is an algorithms book beyond the standard CS textbook, covering more exotic things like approximations to NP-hard problems. It's similar (but not identical, so it won't be boring) subject material to that class you link to.

http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693

Throwaway account because I'd rather not have my current coworkers knowing about this.

About a year ago, I heard about Google Foobar from an article on Hacker News. I had never seen that before but it sounded interesting, and I'd always wanted to work for Google (sent my resume some years ago, heard nothing). Long story short, I found a backdoor way into Foobar, and went through the coding challenges until I got past level 3, at which point they ask if you'd like a Google recruiter to contact you. I said yes and gave them my details.

Fast forward to about two months ago. I finally got an email from an internal Google recruiter asking to talk. I freak out a little bit and start madly researching what a first contact entails (as it turns out, just an informal phone call about your career and what you might want to do at Google). During my research I also looked into what the infamous Google technical interviews might look like, and discovered that I needed to brush up on my algorithms and data structures, and fast. I told the recruiter I needed two to three months to prep (this is apparently not too uncommon, thankfully). She said that when I was ready, I should send her my resume and the jobs I'm interested in (probably in the Pittsburgh office so we can stay close to my wife's family), and she'll get the ball rolling. She also mentioned that it's possible that I could skip the standard video tech screen (since they already had a coding sample in the form of my Foobar submissions) and proceed directly to the onsite interviews.

The thing is, I've been primarily doing PHP web development for ages. I've done a bunch of freelance work previously and I've been working for a great startup for the last few years after immigrating to the US from Canada in 2009. But as far as I know, Google doesn't do much / any PHP, and we all know the general opinion on the language. I have, thankfully, done many other languages throughout my career... Javascript (lots), Java (college / some Android development), C++ (in my college days), C (when I was first teaching myself to program in a real language). But my professional experience has been dominated by PHP.

As far as education goes, I have an associate's degree in programming and about two years of a CS program (interrupted to move to the US). I always thought Google had a hard Bachelor's requirement but that's apparently not the case (you just have to show that you have the aptitude, skills, and experience necessary).

My prep so far has been reading through The Algorithm Design Manual (at least the theory part of the book), and more recently, reading through Cracking The Coding Interview and doing the questions, on paper first, and then verifying on my laptop. I am doing these questions in Python, which was the language that I did Foobar in, and probably the language I will interview in. That said, I learned Python for the first time going through Foobar, so I'm far from an expert in the language. I'm doing this prep while managing my current full time job and caring for a four month old, which I wouldn't even come close to managing without my wife's amazing support.

Doing a search here, I found the MIT Hacking a Google Interview site which seems like a goldmine, and Pramp which also seems like a great resource once I'm done with CtCI. Considering Interview Cake but only if people think it's indispensable ($200).

I have about one month left in the original timeframe I gave the recruiter. I am incredibly excited by the prospect and also incredibly intimidated. Do you have any advice for me on how to maximize my chances?

Also, should I apply as a SWE or a SWE-Frontend? My full stack web development experience seems relevant to SWE-Frontend but I don't want to only end up doing frontend work and I don't want it to be career-limiting; I like the backend stuff as well, and I'm definitely not a designer.

Thanks!

Edit: For those looking for the Foobar backdoor, it no longer works. It was a crossword you could solve that randomly generated (easy) CS and crypto clues, and was accessible from an IP apparently found in promos for The Imitation Game, but the crossword entrance has since been shut down. However, I figured out why I couldn't get in through the main method (searching Java- or Python-related CS queries). You have to both be logged into Google, and, crucially,

you have to have search history enabled. Once I reenabled search history, the Foobar break-in came right up after a couple Python searches.The Complete Idiot's Guide to Music Theory, 2nd Edition

and

The Algorithm Design Manual

These two are my absolute favorites:

The Algorithm Design Manual and Introduction to Algorithms

They have a quite different take on algorithms. I recommend them both, actually. CLRS (the Introduction to Algorithms) is a staple book in most courses. The Algorithm design manual has a more practical view of things, which might be really great to learn alongside the more technical stuff that CLRS teaches.

I will not recommend the Art of Computer Programming to prepare for an algorithms course. I own the books as a collection, but they will be too hard and focused on things that your algorithm course will just jump over. The other books I mentioned here are in my opinion better suited for that. I've never heard of Art of Computer programming being used in an algorithm course, except for small exempts of it. Also, without reading Knuths Concrete Mathematics (great book) or being well versed in the mathematics he uses, it will be extremely hard.

I've heard good stuff about Sedgwick's book as well, which nerga recommended.

This is the one I used in college and I had it lying around, it's served me well.

https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ref=sr_1_7?keywords=Algorithm&amp;qid=1555780009&amp;s=gateway&amp;sr=8-7

I also got this book by a recommendation from a coworker, it has really nice visual displays for different algorithms.

https://www.amazon.com/Grokking-Algorithms-illustrated-programmers-curious/dp/1617292230/ref=sr_1_8?keywords=Algorithm&amp;qid=1555780009&amp;s=gateway&amp;sr=8-8

The Algorithm Design Manual by Skiena

You don't need very much mathematics at all to learn the implementations of various algorithms. Sure, many algorithms books have mathematics in them to analyze the performance of the algorithms, but if you are mostly interested in the details of the implementations of algorithms, rather than analysis of performance then there is nothing to hold you back.

The Algorithms Design Manual, by Steven Skiena would be a great starting point. http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693

Then, if and when your interest in analysis of performance increases you can move on to a more mathematically demanding book, such as Introduction to Algorithms, by Cormen et al. http://www.amazon.com/Introduction-Algorithms-Edition-Thomas-Cormen/dp/0262033844

Introduction to the Design and Analysis of Algorithms, by Levitin, was used at my university and none of us cared for that book and I don't recommend it.

I'm not familiar with #1, but I do recommend:

> For those who prefer video lectures, Skiena generously provides his online. We also really like Tim Roughgarden’s course, available from Stanford’s MOOC platform Lagunita, or on Coursera. Whether you prefer Skiena’s or Roughgarden’s lecture style will be a matter of personal preference.

>

> For practice, our preferred approach is for students to solve problems on Leetcode. These tend to be interesting problems with decent accompanying solutions and discussions. They also help you test progress against questions that are commonly used in technical interviews at the more competitive software companies. We suggest solving around 100 random leetcode problems as part of your studies.

>

> Finally, we strongly recommend

How to Solve Itas an excellent and unique guide to general problem solving; it’s as applicable to computer science as it is to mathematics.>

>

>

> [The Algorithm Design Manual](https://teachyourselfcs.com//skiena.jpg) [How to Solve It](https://teachyourselfcs.com//polya.jpg)> I have only one method that I recommend extensively—it’s called think before you write.

>

> — Richard Hamming

>

>

>

> ### Mathematics for Computer Science

>

> In some ways, computer science is an overgrown branch of applied mathematics. While many software engineers try—and to varying degrees succeed—at ignoring this, we encourage you to embrace it with direct study. Doing so successfully will give you an enormous competitive advantage over those who don’t.

>

> The most relevant area of math for CS is broadly called “discrete mathematics”, where “discrete” is the opposite of “continuous” and is loosely a collection of interesting applied math topics outside of calculus. Given the vague definition, it’s not meaningful to try to cover the entire breadth of “discrete mathematics”. A more realistic goal is to build a working understanding of logic, combinatorics and probability, set theory, graph theory, and a little of the number theory informing cryptography. Linear algebra is an additional worthwhile area of study, given its importance in computer graphics and machine learning.

>

> Our suggested starting point for discrete mathematics is the set of lecture notes by László Lovász. Professor Lovász did a good job of making the content approachable and intuitive, so this serves as a better starting point than more formal texts.

>

> For a more advanced treatment, we suggest

Mathematics for Computer Science, the book-length lecture notes for the MIT course of the same name. That course’s video lectures are also freely available, and are our recommended video lectures for discrete math.>

> For linear algebra, we suggest starting with the Essence of linear algebra video series, followed by Gilbert Strang’s book and video lectures.

>

>

>

> > If people do not believe that mathematics is simple, it is only because they do not realize how complicated life is.

>

> — John von Neumann

>

>

>

> ### Operating Systems

>

>

Operating System Concepts(the “Dinosaur book”) andModern Operating Systemsare the “classic” books on operating systems. Both have attracted criticism for their writing styles, and for being the 1000-page-long type of textbook that gets bits bolted onto it every few years to encourage purchasing of the “latest edition”.>

>

Operating Systems: Three Easy Piecesis a good alternative that’s freely available online. We particularly like the structure of the book and feel that the exercises are well worth doing.>

> After OSTEP, we encourage you to explore the design decisions of specific operating systems, through “{OS name} Internals” style books such as

Lion's commentary on Unix,The Design and Implementation of the FreeBSD Operating System, andMac OS X Internals.>

> A great way to consolidate your understanding of operating systems is to read the code of a small kernel and add features. A great choice is xv6, a port of Unix V6 to ANSI C and x86 maintained for a course at MIT. OSTEP has an appendix of potential xv6 labs full of great ideas for potential projects.

>

>

>

> [Operating Systems: Three Easy Pieces](https://teachyourselfcs.com//ostep.jpeg)

>

>

>

> ### Computer Networking

>

> Given that so much of software engineering is on web servers and clients, one of the most immediately valuable areas of computer science is computer networking. Our self-taught students who methodically study networking find that they finally understand terms, concepts and protocols they’d been surrounded by for years.

>

> Our favorite book on the topic is

Computer Networking: A Top-Down Approach. The small projects and exercises in the book are well worth doing, and we particularly like the “Wireshark labs”, which they have generously provided online.>

> For those who prefer video lectures, we suggest Stanford’s

Introduction to Computer Networking courseavailable on their MOOC platform Lagunita.>

> The study of networking benefits more from projects than it does from small exercises. Some possible projects are: an HTTP server, a UDP-based chat app, a mini TCP stack, a proxy or load balancer, and a distributed hash table.

>

>

>

> > You can’t gaze in the crystal ball and see the future. What the Internet is going to be in the future is what society makes it.

>

> — Bob Kahn

>

> [Computer Networking: A Top-Down Approach](https://teachyourselfcs.com//top-down.jpg)

>

>

>

> ### Databases

>

> It takes more work to self-learn about database systems than it does with most other topics. It’s a relatively new (i.e. post 1970s) field of study with strong commercial incentives for ideas to stay behind closed doors. Additionally, many potentially excellent textbook authors have preferred to join or start companies instead.

>

> Given the circumstances, we encourage self-learners to generally avoid textbooks and start with the Spring 2015 recording of CS 186, Joe Hellerstein’s databases course at Berkeley, and to progress to reading papers after.

>

> One paper particularly worth mentioning for new students is “Architecture of a Database System”, which uniquely provides a high-level view of how relational database management systems (RDBMS) work. This will serve as a useful skeleton for further study.

>

>

Readings in Database Systems, better known as the databases “Red Book”, is a collection of papers compiled and edited by Peter Bailis, Joe Hellerstein and Michael Stonebreaker. For those who have progressed beyond the level of the CS 186 content, the Red Book should be your next stop.>

> If you insist on using an introductory textbook, we suggest

Database Management Systemsby Ramakrishnan and Gehrke. For more advanced students, Jim Gray’s classicTransaction Processing: Concepts and Techniquesis worthwhile, but we don’t encourage using this as a first resource.>

>

(continues in next comment)I personally like Skiena's book

The Algorithm Design Manual

https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693

If you already studied algorithms but need a quick refresher, Algorithms in a Nutshell is good.

https://www.amazon.com/Algorithms-Nutshell-OReilly-George-Heineman/dp/059651624X/ref=sr_1_3?s=books&amp;ie=UTF8&amp;qid=1496051402&amp;sr=1-3&amp;keywords=algorithms+in+a+nutshell

Does anyone know what would be best to prepare me for interviews for new-grad interviews that'll probably open during Fall 2019? I don't think it's

thatimportant to have side projects as I have internships/experience under my belt, so I just want to be studying/enhancing the foundation I have. I currently own CTCI and The Algorithm Design Manual. I'm planning on getting the Gang of Four Design Patterns, but I'm not 100% yet. Anyone know any good resources for System Design? Any feedback on how should approach this preparation? I know it's super early, but better early than late.Read

The Algorithm Design Manualby Steven Skiena, or if you prefer, watch and learn from his video series on youtube.Tim Roughgarden’s course on coursera is also very good.

For practice, solve problems on leetcode.

&#x200B;

Source: https://teachyourselfcs.com

What kind of jobs are you applying for? Low-level stuff is typically applicable for things like engine work, graphics, optimization, networking and audio. Okay, that covers a lot of the game development process, but there are certainly jobs that aren't deep into that, like peripheral tooling (making tools for developers to use) or working on stuff like the webservices that powers the online community.

However, if your goal really is core game development, then you need to be a lot more targeted in how you learn. I have interviewed for and was hired by a game company that worked in C++, and have also worked in distributed, networked military simulations (think of it like boring, more realistic Starcraft), so here is how I gained the various knowledge I had in getting through those types of interviews (including a 90-minute written test for the game company where I had to debug C++ code on paper, answer various gotchas, etc.).

I don't know how far you have covered, but this is how I would approach the learning now, were I to start over again.

really goodat C++ - During my first job, I mostly used Java with Python/C++/Perl/TCL on the side. I learned a lot of C++ in short order to prepare for interviews and move jobs (to simulation).Effective C++, Volume 1, but these cover good practices for using C++.Exceptional C++books.It covers low-level concepts like CPU pipelining, memory, and how code interacts with the machine. I read this years after I started my job building simulations, and it reinforced a lot of what I learned previously and in college. I also recommended this book to a friend of mine who credits it with giving him an edge over his fellow college grads (he's years younger than I am) in low-level knowledge. If you don't know concepts like cache locality, cache lines and how memory is allocated, this book will cover that and more.

`std::vector&lt;T&gt;`

in C++.`std::map`

and`std::unordered_map`

`std::set`

and`std::unordered_set`

`std::list&lt;T&gt;`

and`std::forward_list&lt;T&gt;`

`std::stack`

and`std::queue`

`std::deque`

- The C++ implementation of a double-ended queue.`std::set`

is typically implemented with a red-black tree behind the scenes)-----

The above covers the 'core' stuff you'd have to learn. If you wanted to get into stuff like network programming or graphics programming rather than just core gameplay development, I can expound further.

> I can't think of anything that I can do that can be done with my knowledge in C++/Algorithms

See FAQ - Where can I find practice exercises and projects?.

> And how/where can I start learning about algorithms?

You may want to complete some non-trivial projects in C++ first to make sure you actually understand the language. Then, try one of:

They're written for a variety of different programming languages, but hopefully that shouldn't actually really matter, especially given how algorithms are universal things.

Working on algorithmically tricky problems is also how you end up cementing your knowledge of data structures and algorithms -- see the practice exercises/project ideas link.

Back when I started the first book on algorithms was "Algorithms and Data Structures" by Niklaus Wirth. Now it's freely distributed by the author https://www.inf.ethz.ch/personal/wirth/

I heard good reviews about The Algorithm Design Manual by Steven Skiena, and Algorithms by Robert Sedgewick and Kevin Wayne; but I haven't read them myself.

I've not read that, but The Algorithm Design Manual is a great book. Reading that and Programming Pearls is the best preparation I know of for programming interviews at software companies.

I'm a big fan of The Algorithm Design Manual. It covers a lot of stuff and is pretty readable.

I LOVE shopping online for books, so here are my recommendations:

There are (in my opinion) no good Swift specific algorithm books out. The reviews for the available books are pretty bad.

PS: Grokking Algorithms is available through https://www.safaribooksonline.com/. They have a free 10-day trial.

For algorithms, I would recommend checking out Skiena's "Algorithm Design Manual." One of the cool features are his "War Stories" which give various examples of how the author used and adapted algorithms to solve real-world problems.

For linear algebra, I haven't read it myself but you might try Lay's "Linear Algebra and Its Applications" which probably will have more of a focus on applications than the titles mentioned by KolmogorovTuring.

Read up on algorithms

https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693