Best computer science books according to Reddit

Reddit mentions of The Algorithm Design Manual

Sentiment score: 33
Reddit mentions: 59

We found 59 Reddit mentions of The Algorithm Design Manual. Here are the top ones.

    Features:
  • More and Improved Homework Problems
  • Self-Motivating Exam Design
  • Take-Home Lessons
  • Links to Programming Challenge Problems
  • More Code, Less Pseudo-code
Specs:
Height9.3 Inches
Length7.3 Inches
Number of items1
Release dateApril 2011
Weight2.3368999772 Pounds
Width1.4 Inches
#13 of 1,900

idea-bulb Interested in what Redditors like? Check out our Shuffle feature

Shuffle: random products popular on Reddit

Found 59 comments on The Algorithm Design Manual:

u/Shuank · 40 pointsr/argentina

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.

u/tenpairsofsocks · 18 pointsr/learnprogramming

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.

u/elliotbot · 13 pointsr/cscareerquestions

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

Nope:

u/nonkeymn · 11 pointsr/learnprogramming

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&qid=1554149281&s=gateway&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

u/aMonkeyRidingABadger · 10 pointsr/learnprogramming

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.

u/last_useful_man · 9 pointsr/learnprogramming

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.

u/0b_101010 · 9 pointsr/learnprogramming

Hi! I recommend the following books:

u/bluecoffee · 9 pointsr/algorithms

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

u/krat · 7 pointsr/compsci

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 lot of 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.

u/fj333 · 7 pointsr/cscareerquestions

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. :-)

u/IWantToBreakFI · 6 pointsr/financialindependence

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.

u/gtani · 5 pointsr/algorithms

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&ASIN=0262018020&linkCode=&nodeID=&tag=

u/10_6 · 5 pointsr/learnprogramming

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

  1. Elements of Programming Interviews

  2. The Algorithm Design Manual

  3. Cracking the Coding Interview

    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.
u/magus517707 · 4 pointsr/learnprogramming

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&qid=1496313668&sr=8-1&pi=AC_SX236_SY340_FMwebp_QL65&keywords=The+Algorithm+Design+Manual&dpPl=1&dpID=41s5pnqOlyL&ref=plSrch

u/knaveofdiamonds · 4 pointsr/programming

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&s=books&qid=1261657117&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.

u/MITranger · 4 pointsr/learnprogramming

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.

u/schala09 · 3 pointsr/Seattle

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.

u/Jollyhrothgar · 3 pointsr/learnpython

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

I highly recommend:

u/Brandonthegeek · 3 pointsr/learnjava

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.

u/comsci-bro · 3 pointsr/Philippines

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.

u/chunky_bacon · 3 pointsr/programming

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

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

u/jama211 · 3 pointsr/AdviceAnimals

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

u/gnuvince · 3 pointsr/programming

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).

u/ethicszen · 2 pointsr/gamedev

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.

u/Seventytvvo · 2 pointsr/personalfinance

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:

  1. Codecademy - I've gone through all the HTML, CSS, and Python lessons. These are extremely valuable in getting a taste for coding; to see how things work in general, and to pick up a bit of syntax. However, these lessons won't necessarily teach you how to code. They're more like a first step. If being a programmer is like being a writer, then these codecademy lessons are like 1st grade grammar.

  2. Stackexchange aka: Learn what resources are available. - The biggest thing about coding is being resourceful. That's #1. Google 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...

  3. The Algorithm Design Manual, 2nd Ed is bad ass. It's really two books in one, though. The first being a basic computer science book, and the second being a quick reference guide to all the most popular and useful algorithms people use. I promise you, that if you learn what's in this book and can implement what it teaches you in code, someone will hire you.

  4. Project Euler - A really neat list of programming challenges, once you have a bit of a handle on a language of your choice. I actually just came across this, and I haven't tried it out yet, but I've looked through some of the challenges, and it seems like you'd gain quite a bit of experience by going through some of them (there's over 500 of them!)

  5. Keeping things in perspective - This is going to be a long, difficult thing if you don't have much technical background or haven't done any coding before. BUT... hundreds of thousands of people all across the world are following a very similar track 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!
u/ItsNotMineISwear · 2 pointsr/programming

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.

u/zelmarvalarion · 2 pointsr/cscareerquestions

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.

u/swankybear · 2 pointsr/SoftwareEngineering

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:

  • code on the side; build skills to learn and dig deep. You'll always be solving things you may not know. The skill of learning is huge. Always be curious.

  • Master an OOP language, a scripting language, and maybe get familiar with CSS/HTML/JavaScript Node if you want to be a modern web Dev.

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

  • read this (recommend to study for Google interviews): https://www.amazon.com/gp/aw/d/1848000693/ref=zg_bs_3870_4?ie=UTF8&psc=1&refRID=70YNX3TJA8F9GXG03Q9F

  • learn about web services . Try to build one from scratch with a REST API and a connection to a database. A lot of good fundamentals here and a lot of companies have devs that do this daily.

  • code some stuff on GitHub; maybe find an open source project to contribute to. Get involved with a Dev community and you'll learn 10x more than paying for a boot camp.

  • If web Dev turns out to not be your thing. Dive into other "programming" domains such as machine learning, big data, embedded systems, etc.


    If any buzzwords here might not make sense, congrats you get your first exercise in digging for answers ;) (no rudeness intended)
u/heres_some_advice23 · 2 pointsr/computerscience

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&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 of algorithms is 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&qid=1503472210&sr=8-1&keywords=algorithms
and
https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/dp/1848000693/ref=sr_1_5?ie=UTF8&qid=1503472210&sr=8-5&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&ie=UTF8&qid=1503471832&sr=1-1&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!

u/nopointers · 2 pointsr/programming

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

u/Feydarkin · 2 pointsr/algorithms

I second The Algorithm Design Manual, very good book.

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

  • Understanding specific algorithms and how they work (theory)

  • Being able to utilize/tweak a specific algorithm to solve a problem

  • Being able to decompose problems and choose relevant algorithms

    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.
u/KLM_SpitFire · 2 pointsr/computerscience

I purchased the following two books:

u/0x6f_ · 2 pointsr/algorithms

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

Checkout:

u/valbaca · 2 pointsr/cscareerquestions

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 #ref for "read for reference". Normal books that should be read cover-to-cover are marked #read


For 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't start 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 book so 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 good Java 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 :)

u/matrixcr · 2 pointsr/Romania

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?

u/cypherpunks · 2 pointsr/compsci

As others have mentioned, if you can afford it, TAoCP is definitely a keeper. How much Knuth will ever finish is unclear (he's something of 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.

u/ShadowWebDeveloper · 2 pointsr/cscareerquestions

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.

u/hsklr · 1 pointr/compsci

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.

u/springy · 1 pointr/algorithms

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

u/drboyfriend · 1 pointr/algorithms

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:

u/empleadoEstatalBot · 1 pointr/argentina

> 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 It as 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”) and Modern Operating Systems are 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 Pieces is 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, and Mac 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 course available 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 Systems by Ramakrishnan and Gehrke. For more advanced students, Jim Gray’s classic Transaction Processing: Concepts and Techniques is worthwhile, but we don’t encourage using this as a first resource.
>

> (continues in next comment)

u/roastingapples · 1 pointr/cscareerquestions

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 that important 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.

u/[deleted] · 1 pointr/computerscience

Read The Algorithm Design Manual by 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.

​

Source: https://teachyourselfcs.com

u/SofaAssassin · 1 pointr/cscareerquestions

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.


  • Become really good at 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).

  • Read Accelerated C++ and/or C++ Primer. These are probably the best books for getting introduced to C++ and starting off in a good place (as in, not learning C++ in the form of C), getting familiar with using the OO system of C++ and using the standard library. Also remember to do the exercises to really reinforce the concepts.

  • Read Effective C++ SUPER COLLECTION - In honesty, you can make do with just Effective C++, Volume 1, but these cover good practices for using C++.

  • Read the C++ FAQ - lots of gotchas there and corner cases of C++.

  • If you want to go beyond those books and resources, there are Herb Sutter's Exceptional C++ books.

  • Understand the machine - this covers the low level component. Helping you to understand the machine itself, how your code runs, how it's executed.
  • Read Randall Hyde's Write Great Code - This is one of my favorite technical books, and is language agnostic.

    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.

  • Read Randall Hyde's Art of Assembly Language - I have only briefly touched upon this book, but it takes a unique approach to introducing you to x86 ASM (by using a higher-level form of ASM).


  • Understand the algorithms and data structures - I took multiple classes in this in college, as well as periodically read CLRS to refresh my knowledge. But CLRS is too mathematically rigorous and theoretical here if you just want to get familiar with algorithms.

  • Skeina's Algorithm Design Manual is a more practical approach to refreshing yourself on algorithms and also learning complexity theory.

  • Skeina's Data Structures Lectures are helpful for data structures. In general, though, know these (I include whatever C++ has as well):
    • Dynamic array - std::vector<T> in C++.
    • Associative structures - std::map and std::unordered_map
    • Sets - std::set and std::unordered_set
    • Linked List - std::list<T> and std::forward_list<T>
    • Stacks and Queues - std::stack and std::queue
    • std::deque - The C++ implementation of a double-ended queue.
    • Trees - binary trees, red-black, heaps, tries (no standard C++ implementations of these, though stuff like std::set is typically implemented with a red-black tree behind the scenes)
    • Graphs

    • Understand the complexities of actions on each data structure (insertion, deletion, modification, searching, etc.)

  • Read the wiki on Pathfinding, because this class of algorithms is very important in game development, as well as network communication.

    -----

    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.
u/michael0x2a · 1 pointr/learnprogramming

> 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:

u/staringhyena · 1 pointr/cscareerquestions

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.

u/yellowstuff · 1 pointr/compsci

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.

u/simcaster · 1 pointr/learnprogramming

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

u/rudedogg · 1 pointr/swift

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

  • Start with Grokking Algorithms. It's the most approachable book on the subject that I know off (disclaimer, I've only read a couple chapters).
  • After that, I'd try The Algorithm Design Manual. It's always highly recommended when people ask for algorithm books.
  • The de-facto book on the subject is Introduction to Algorithms. It's commonly referred to as "CLRS", after the author's last names.

    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.
u/balachthon · 1 pointr/math

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.