by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
ISBN: 9780262033848
Buy on Amazon
Found in 42 comments on Hacker News
Hermitian909 · 2022-05-07 · Original thread
What are your goals? I don't mean to be snarky when I say that learning to ask a structured question (or being more disciplined about asking them) should be high on your priority list. Book like the pyramid principle about top down communication would probably be helpful.

1. It's probably fine. Based on your self-description, based on your self-description I imagine you're still struggling with syntax and program structure. Programming in either language will improve your abilities in that regard and let you focus more on the underlying ideas in your classes. That said, if you can stick to 1 or 2 languages for most of your CS classes that is preferable.

2. Data Structures and Algorithms is useful, how useful depends on your goals. If you want to make the big bucks you should aim to be fluent in at least a textbook's worth of material. If you don't feel the need to aim for the top, you can get away with less. I would start with Skienna: https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...

If you really want to be a master, you can then go for CLRS: https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...

3. This depends on your goals. If you're aiming to be a top engineer now's one of your few chances to really focus in on lower level system stuff: Operating Systems, Networking, Compilers, or Databases. If you want a decent job fast of college, focus on data structures and algorithms and start trying to deploy code on something like digital ocean. That said you probably also want to do: https://missing.csail.mit.edu/

General advice: Dive deep, understanding a few things really well is better than understanding many things shallowly (you will retain more info over time).

A mistake many people make when reading textbooks is to guess what words mean. In technical texts this usually leads to misunderstandings and ultimately a slower learning process. Take the time to understand the words even if it takes hours (imminent deadlines notwithstanding), you will go faster. (I once took a month to get through a single page of a textbook because it had so many new words and concepts).

Start using version control (preferably git). Try to at least every hour if you have new code.

Try to start writing well structured code now. You probably won't do a great job at first but by trying earlier you'll do better.

Related to above, start writing tests for your code. Code that is testable is usually better structured.

Source: Senior engineer at one of the bigger tech companies and a former educator.

roeles · 2022-03-09 · Original thread
I think a popular book is this one: https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...

However, it was too mathematical for me. I prefer this book that I bought in for a University course on Algorithms, Data structures and complexity: https://www.amazon.com/Computer-Algorithms-Introduction-Desi...

cletus · 2021-12-31 · Original thread
The most important thing here is if you're asking this question right as you finish college and this is your goal, then you're screwed up.

Why? Because resume-building for high-profile employers begins long before graduation. Probably the most important factor: internships. Getting an internship is the highest-probability way of getting an offer bar none. If you don't have 1 or preferably 2 internships under your belt then you've made a mistake.

The second is that passing interview loops is a skill. It's one that can be studied for, learned and practiced. And if you're serious about this then you should do that. Many recommend CLRS [1] as a source for this. Personally, my choice would be Skiena [2]. Go through all the chapters on sorting and searching, lists, trees, graphs and possibly dynamic programming (some employers use this in interviews, some don't). Backtracking is useful but I've never seen it in an interview.

Do the same problems on an actual whiteboard. Don't just think about it. Get comfortable enough with any popular language (eg Javascript, Python, C/C++, Go, Java) such that the syntax and common libraries are second nature.

It's not unsalvageable to do this at the end of college (if that's the case). You just need to commit a few months to it.

Some will ask "why FAANG?" and the answer is obvious: the money can be life-changing but even aside from that it's an opportunity to learn a lot and having that on your resume is amazing social proof that will quickly eclipse the value of going to a top-tier school.

[1]: https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...

[2]: https://www.algorist.com/

gjkood · 2021-12-09 · Original thread
Have you tried some of the old "Graphics Gems" series books yet? [1], [2], [3] They are not CS fundamentals but will help you out with the necessary concepts, math and algorithms for graphics programming and ray-tracing.

As others have mentioned any books on Data Structures & Algorithms are a must. [4], [5], [6]

However in my opinion, trying to understand CS fundamentals without undergoing some sort of formal education is a chore. You won't know what you are missing. Going through an established approved syllabus will give you a fuller understanding. But that is only if you are interested in the long haul.

There are a number of MOOCs that may fit the bill allowing you to slowly gather the knowledge without sacrificing too much time and focus on a day job to keep you going. I feel they are also great value for money for what you get. Some of them are from very reputable names if that is important. [7][8].

Since you have a B.Sc you can do the Masters level but there are also Bachelors level courses. [9]

1. https://www.amazon.com/Graphics-Gems-Andrew-S-Glassner/dp/01...

2. https://www.amazon.com/Graphics-Gems-II-IBM-No/dp/0120644819...

3. https://www.amazon.com/Graphics-Gems-No-3-David-Kirk/dp/0124...

4. https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...

5. https://www.amazon.com/Algorithms-4th-Robert-Sedgewick/dp/03...

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

7. https://www.coursera.org/degrees/master-of-computer-science-...

8. https://www.coursera.org/degrees/mcit-penn

9. https://www.coursera.org/degrees/bachelor-of-science-compute...

jkingsbery · 2020-07-15 · Original thread
Early in my career, I interviewed at Google. One of the interviewer asked me to recite the algorithm for constructing a Convex Hull. Since I hadn't done anything related to convex hulls since my algorithms class as a sophomore in college (several years earlier), I couldn't remember all the details. At some point, I said, I know where in CLRS (https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...) this is. The interviewer didn't like this, so he said "Pretend you're an engineer at Google. You need to have a convex hull. What do you do?" And I said probably the most correct thing I've said in any interview: "I would go look it up." He really didn't like this answer, but we struggled together for an hour, with him frustrated that I couldn't remember the details of an algorithm I last had seen 6 years earlier and couldn't recite in 60 minutes what took our professor 180 minutes of lectures to cover, and me frustrated that would have taken me 30 seconds to look up.

I did not get the job at Google.

I do make sure as a more senior engineer at my current company I use what leverage I have to make sure other interviewers don't ask pointless questions like this.

lancefisher · 2019-12-15 · Original thread
These are great suggestions!

A few years ago I worked through building a spreadsheet in JavaScript. It was a great introduction to interpreters. I read through Writing an Interpreter in Go by Thorsten Ball [1]. Constraining the interpreter to execute formulas in cells was a straight-forward way to approach building one from scratch.

Writing a Pratt parser as part of this forced me to understand how it works. Figuring out how to process a sheet led me into algorithms and structures like directed acyclic graphs (as mentioned in the article). I found myself referencing Introduction to Algorithms and really studying it [2].

In the end I turned it into a talk at Big Sky Dev Con in Montana. The whole thing was a good experience - from researching how to do it, to sticking it out through the implementation, to distilling it to a 45 minute talk. Be sure to check out the recording [3] and code [4] if you're interested.

Any of these suggestions will lead you down a rabbit hole of learning with a clear objective in sight to keep you motivated to dig deeper.

[1] https://interpreterbook.com/

[2] https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...

[3] https://www.youtube.com/watch?v=Sj4h0DcVLL0

[4] https://github.com/lancefisher/cellularjs

joycian · 2019-06-20 · Original thread
Read this book:

https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...

It's all in there. Put away a week of time to really start digging into it, get into the habit of learning from a book. I'd say it's worth it.

CodeSheikh · 2019-01-17 · Original thread
Nice list. Appreciate it. But I see there are a few amazing software books missing from the list such as:

- Clean Code (by "Uncle Bob")) [https://www.amazon.com/Clean-Code-Handbook-Software-Craftsma...]

- Design Patterns (by "Gang of 4") [https://www.amazon.com/Design-Patterns-Elements-Reusable-Obj...]

- Introduction to Algorithms (by "CLRS") [https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...]

liveoneggs · 2018-11-14 · Original thread
there are a few books you can get: https://www.amazon.com/gp/product/1565923987/ https://www.amazon.com/dp/0262033844/

A lot of "classic" problems are so embedded into CS professors that they don't even see them as problems anymore (lazy caterer, pick's theorem, etc) so if you didn't study these classics explicitly in school you have to discover them on your own.

loeg · 2018-11-09 · Original thread
https://en.wikipedia.org/wiki/Big_O_notation

> Big O notation is a mathematical notation that describes the limiting behavior of a function when the argument tends towards a particular value or infinity.

I.e., it's an asymptotic upper bound.

It's also interesting to compare with Ω() (Big Omega ­— asymptotic lower bound) and Θ() (Big Theta) (big-O AND big-Omega): https://en.wikipedia.org/wiki/Big_O_notation#Family_of_Bachm...

A good textbook on this subject is Introduction to Algorithms: https://www.amazon.com/dp/0262033844/ .

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

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

https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...

As a second suggestion, I'd recommend to learn a language somewhat different from JavaScript-like (or C-like) languages, something that challenges your mind to think a little differently and understand and create higher order abstractions. There are many choices, but to avoid confusion and being my favourite, I'll point to one: read the "Structure and Interpretation of Computer Programs" by Abelson and Sussman. It teaches Scheme in a gentle and inspiring way but at the same time it teaches how to become a better programmer:

https://mitpress.mit.edu/sicp/

Or if you want made of dead trees:

https://www.amazon.com/Structure-Interpretation-Computer-Pro...

I can't recommend it enough. If you read it, do the exercises, don't limit to read through them.

Maybe it's even better if you start with this, and THEN read the books on algorithms and data structures.

Enjoy your journey!

This is just my opinion and I'm sure it differs from others...

Roughgarden's class is advance and expects mathematical maturity. You may find his course quite fast and rough if you are a beginner.

Sedgwick's class is much easier. He is a bit boring and tries to use "real life" examples (in some instances) from the physical sciences to make the material relatable. This in my opinion detracts from the material. Also, he doesn't always fully explain where he got some of the big ohs here and there.

My advice? Follow MIT's OCW course (it uses CLRS). Supplement it with Algorithms Unlocked, the Khan Academy link in OP and CLRS. If you use those 4 resources and put in the work you'll understand the material.

All 4 sources have Thomas C's DNA touch to it (he is the C in CLRS). So you'll find it consistent when you read from one source to the other. After reading/hearing the same thing about 4 different times in 4 different ways it'll begin to click.

Order of easiness is probably Khan Academy > Algorithms Unlocked > MIT Algorithms Course > CLRS.

Algorithms Unlocked is like "pre-CLRS" and Khan Academy's version is the TL;DR version of Algorithms Unlocked.

Hope this helps.

Below are the links,

https://www.amazon.com/Algorithms-Unlocked-Press-Thomas-Corm...

https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...

https://www.khanacademy.org/computing/computer-science/algor...

https://ocw.mit.edu/courses/electrical-engineering-and-compu...

As a follow up to this resource I recommend,

Algorithms unlocked: https://www.amazon.com/Algorithms-Unlocked-Press-Thomas-Corm...

CLRS: https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...

Both include the same author as the one in this article (Thomas Cormen).

gressquel · 2016-12-19 · Original thread
Excellent article, I really love algorithm and datastructure. if anyone else is interested like me, I recommend this book https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press...
I recommend learning discrete mathematics, then data structures and algorithms.

I cannot stress enough how important mathematical foundations is. It'll make everything else much easier to learn. I haven't read the book but heard good things about: https://www.amazon.com/Discrete-Mathematics-Applications-Sus... as a beginner text.

Coursera has multiple offerings on Data Structures / Algorithms -- find one that works best for you.

For instance:

https://www.coursera.org/learn/introduction-to-algorithms

https://www.coursera.org/specializations/algorithms

https://www.coursera.org/learn/algorithmic-thinking-1

https://www.coursera.org/learn/algorithmic-toolbox

By doing all of those you'll get a good introductory exposure to the topics.

You should also look at a rigorous course offering of Algorithms. MIT has a few online to view.

Some readings for a beginner are:

https://www.khanacademy.org/computing/computer-science/algor...

https://www.amazon.com/Algorithms-Unlocked-Press-Thomas-Corm...

https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press... (not beginner level but classic)

After all of this you should be fine with diving into interview books. You'll want to whiteboard solutions and be able to do all the difficult problems. Look into sites like leetcode, glassdoor and be able to do the difficult problems posted there.

bra-ket · 2016-10-08 · Original thread
I learned programming without a computer in the 90s with Kernigan & Ritchie "C Programming Language", one of the best coding books ever written:

https://www.amazon.com/Programming-Language-Brian-W-Kernigha...

I'd also learn SICP: https://www.amazon.com/Structure-Interpretation-Computer-Pro...

and algorithms from either CLRS https://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press... or Skiena Algorithm Design https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...

aditya · 2015-10-11 · Original thread
CLR is probably the easiest to get started with: http://www.amazon.com/Introduction-Algorithms-Edition-Thomas...
nostrademons · 2015-04-10 · Original thread
http://www.amazon.com/Introduction-Algorithms-Edition-Thomas...

That's basically your bible of basic data structures & algorithms. There are, of course, many many other domain-specific ones, but that textbook is taught in the vast majority of data structures & algorithms courses, it covers most of what people would expect in an interview or in basic programming, and it teaches you how you might implement them. The book itself uses pseudocode, but if you're a halfway competent programmer you should be able to translate it into your language of choice.

(For a fun exercise, it can be interesting to translate them into a programming platform of choice. For example, how would you implement a priority queue with an SQL database? How would you do reservoir sampling? How do you implement sorting on disk, where the dataset is >>> RAM size? How do you implement a graph algorithm on a cluster of 5000 machines? These are the sort of "Google level" problems that you end up facing in industry, but they require a full understanding - not just familiarity - with what the underlying algorithm is doing.)

jkubicek · 2015-03-08 · Original thread
Also self-taught with an ME degree (also from Rose-Hulman. Hi Keith!).

I'm an engineer at Twitter. Due to the interview process, I have yet to encounter anyone (myself included) who doesn't have a pretty sound understanding of algorithms and data structures. The biggest difference I've noticed between self taught folks and CS majors is comfort level with bit-twiddling. All the high-level stuff I know I've had to learn to do my job. All the algorithm and data structures stuff I've had to learn to pass interviews. Moving bits and bytes around is hard for me because it's so rare for me to encounter it in my day-to-day work.

As for how I learned all this stuff? Read Steve Yegge's Google interview post[1], buy the Algorithms book[2], learn everything Steve suggests you learn.

1: http://steve-yegge.blogspot.ca/2008/03/get-that-job-at-googl... 2: http://www.amazon.com/Introduction-Algorithms-3rd-Thomas-Cor...

mindcrime · 2014-10-30 · Original thread
Through most of my life I always looked at any form of rejection as a form of motivation, and adhered to a sort of "next time, be so damn good they can't ignore you" mindset. I think one can take that too far, to a point where it isn't healthy, but if you channel the emotion the right way it can help you keep moving forward and keep climbing to progressively higher heights.

If you want to take that approach, and say "f%!# it, I'm going to buckle down and work my ass off so I do get the job next time" there are a few concrete steps you can take.

1. Find, read, and do the exercises in two or three of the various popular books on "programming interviews". I'm thinking of books like Cracking the Coding Interview[1], Programming Interviews Exposed[2], Ace the Programming Interview[3], etc.

2. The companies you mentioned are well known for asking lots of detailed questions on fundamental computer sciences concepts. If doing "big o" analysis and talking about algorithms in detail isn't your forte, get a couple of good Algorithms course books and go through them. Personally, I'm a fan of the Robert Sedgwick books[4][5][6][7], and the CLR[8] book is a standard in this area.

3. Look over the many various articles / blogs / etc. written about preparing for Google interviews.

https://www.google.com/search?q=google+interview+preparation

I have never applied to Google myself, so I can't speak to that from first-hand experience, but this Steve Yegge blog post always struck me as being excellent:

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

4. Take as many interesting Coursera, EdX, Udemy, etc. courses as you can find time for.

5. Write code any chance you can. Get involved in, or start, an open source project (or two). Volunteer to code for a non-profit / charity or something in your area. Write an app for yourself, to fill a need of your own.

6. Make sure you broaden your horizons and challenge yourself. If you've always written, say, Java or C++ or Ruby code, then make an effort to learn Go, or Erlang or Haskell or Prolog.

All of that said, as I've gotten older, I probably feel a little bit less of the "I'll show you!" thing. I've developed more of a stoic approach, and almost a bit of a zen mindset. There's a lot to be said for a sort of calm, peaceful acceptance of things, even when they are negative. There's a lot more one could say about this, but I don't want to get too philosophical here. I'll just point out that you applied to two... TWO.... companies. Out of like a BILLION possible companies you could work for. Ok, maybe not a billion, but certainly millions, or thousands, depending on where you live and your willingness / ability to travel.

My point is, don't put too much weight on what happened with Google or Amazon. The whole "dream companies" thing is a crock of shit, IMO, looking back on it with hindsight. I've worked for two companies in my career that I once thought of as my "dream" destinations, and neither experience was anything special (neither was bad either), and not worth getting all worked up over.

Final last bits of advice.

1. Read Nietzsche

2. Read Ayn Rand

3. Get drunk

4. Listen to some Queensryche

5. Profit???

[1]: http://www.amazon.com/Cracking-Coding-Interview-Programming-...

[2]: http://www.amazon.com/Programming-Interviews-Exposed-Secrets...

[3]: http://www.amazon.com/Ace-Programming-Interview-Questions-An...

[4]: http://www.amazon.com/Algorithms-Java-Parts-1-4-Pts-1-4/dp/0...

[5]: http://www.amazon.com/Algorithms-Java-Part-Graph-Edition/dp/...

[6]: http://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Stru...

[7]: http://www.amazon.com/Algorithms-Part-Graph-Edition-Pt-5/dp/...

[8]: http://www.amazon.com/Introduction-Algorithms-Edition-Thomas...

oldbuzzard · 2014-10-17 · Original thread
OK. So Cormen's "Intro to Algorithms"[1] or Knuth[2].., but be prepared to be gobsmacked and have a graduate level math background...

[1] http://www.amazon.com/Introduction-Algorithms-Edition-Thomas...

[2] http://www.amazon.com/Computer-Programming-Volumes-1-4A-Boxe...

philipDS · 2014-09-25 · Original thread
I've felt the same way for a long time... and the only way to get over it is to practice. Buy a whiteboard and practice at home. Buy some books (e.g. http://www.amazon.com/Introduction-Algorithms-Edition-Thomas... and/or http://www.amazon.com/Cracking-Coding-Interview-Programming-...). You can also subscribe to http://codingforinterviews.com/.

Not exactly an answer to your question, I know. Most startups I know in SF/Bay Area at least do a technical test (either coding or just regular questions) on the spot. It is stressful, but as anything, you can learn how to do it.

jpsim · 2014-03-19 · Original thread
If you're Mexican/Canadian, a TN Visa might be a better option than H1B since there's no annual limit.

I'm currently in Silicon Valley from Canada on a 2.5 day trip, with 4 interviews in that timeframe, and it's quite fun yet intense.

I'd also say that if you're a self-taught programmer (I'm an EE), it's worthwhile to read a book like Intro to Algorithms[1] cover to cover before you start doing technical interviews. There are just too many CS101 concepts that you'll never run into even after years of programming.

[1]: http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme...

doorhammer · 2014-03-04 · Original thread
Code Complete 2 [1] was one of the first coding books I've read. As with anything else, it's good to look around (HN is a good place) for people who have problems with the book. I think I learn as much reading the commentary people make about books like that as I do from the book itself.

I think I've listened to every podcast on software engineering radio a few times [2]. The older ones are especially nice because they usually pick a specific topic and cover the high points. I liked that I could listen to it while I was driving, or otherwise not in front of a computer.

It's specific, but Javascript: The Good Parts is probably the most used book I have on my shelf. It has such a perfect amount of usable information in it. It's pretty great. Again, it's definitely worth looking up critiques and counterpoints.

I've also got Introduction to Algorithms, which I use as a reference, sometimes. I switched over to The Algorithm Design Manual [5] after I saw it referenced in an older Steve Yegge post [6]. I read through the intro and it seemed like a book that would be more appropriate from an autodidactic standpoint. I really have no idea if that's going to pan out, since I'm not that far into it, but we'll see, for sure. Doesn't kill me to have an extra algorithms book laying about, though, and I've always got intro to algorithms for cross reference. I've found that I really need to have as many sources available as possible when I'm learning alone. Usually I don't get something until the fifth person describes it from the tenth different angle.

That's most of what I can think of off hand. I really enjoyed The Joy of Clojure [7], though haven't checked out the newer version. Programming Collective Intelligence [8] is a fun book, and is what made me want to go back down the maths route to get more into machine learning.

And of course habitually reading hacker news for an hour or three every night :)

So that's my totally inexpert list of random stuff that I enjoy

[1] http://www.amazon.com/Code-Complete-Practical-Handbook-Const... [2] http://www.se-radio.net/ [3] http://www.amazon.com/JavaScript-Good-Parts-Douglas-Crockfor... [4] http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme... [5] http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/... [6] http://steve-yegge.blogspot.com/2008/03/get-that-job-at-goog... [7] http://www.amazon.com/Joy-Clojure-Michael-Fogus/dp/161729141... [8] http://www.amazon.com/Programming-Collective-Intelligence-Bu...

mikevm · 2013-12-06 · Original thread
What do you want to learn? Programming or CS? CS is more than just programming, and CS theory is more than just Algorithms & Data Structures.

If you want to learn about Algorithms and Data Structures and you have a strong math background, then CLRS is the book to get: http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme...

An undergraduate CS curriculum will mostly cover the parts I-VI of the book (that's around 768 pages) plus a few chapters from the "Selected Topics Chapter" (we covered Linear Programming and String Matching). Mind you, this book is very theoretical, and all algorithms are given in pseudocode, so if you don't know any programming language, you might have to go with a an algorithms textbook that is more practical. In my DS course we had to implement a Red-Black tree and a binomial heap in Java, and in my Algorithms course we only wrote pseudocode.

Maybe Sedgewick's (Knuth was his PhD advisor!) "Algorithms (4th ed)" will be a better choice for a beginner, as it shows you algorithm implementations in Java: http://www.amazon.com/Algorithms-4th-Edition-Robert-Sedgewic... (If you decide to go this route, you might as well take his two Algorithms courses on Coursera, they will really help).

There are also a bunch of Python-based introductions to computer science which have a broader focus than just teaching specific data structures and algorithms. Some of them emphasize proper program design, debugging and problem solving. I haven't read any of them, so I can't vouch for them, but here are a few of the more popular ones:

* http://www.amazon.com/Introduction-Computation-Programming-U...

This book was written to go along with John's edX course: https://www.edx.org/course/mitx/mitx-6-00-1x-introduction-co...

* http://www.amazon.com/Python-Programming-Introduction-Comput...

Oh and btw, there's also the Theory of Computation, which is a major part of CS theory. Here are a few MOOCs and recommended books on the subject:

MOOCS:

* https://www.coursera.org/course/automata

* https://www.udacity.com/course/cs313

Books:

* http://www.amazon.com/Introduction-Theory-Computation-Michae...

Sipser's book is probably the best introduction to the theory of computation, and I believe its last chapter deals with Complexity theory as well.

* http://www.amazon.com/The-Nature-Computation-Cristopher-Moor...

I loved this book very much. It has a very informal and conversational style (don't let it fool you, the problem sets can be HARD).

* http://www.amazon.com/Computational-Complexity-A-Modern-Appr...

Once you are familiar with some computation models, its time to study computational complexity and this is one of the best books on the subjects. It is used both for graduate and undergraduate courses.

alexsb92 · 2013-10-12 · Original thread
As often as this gets recommended, I'd go with Introduction to Algorithms (CLRS)[1]. I'm currently in the process of going through it on my own as I'm taking a semester off, and I find it perfect to study from. It goes in depth, explaining the math behind run times (which some may like about it, while other might not), and it covers a lot of ground. I haven't fully finished it, and I'm only on chapter 6, but so far it's one of my favourite textbooks to study from.

[1] http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme...

jcurbo · 2013-09-19 · Original thread
Same here, I came in to post about that exact book.

There's also Pearls of Functional Algorithm Design which I have yet to read. http://www.amazon.com/Pearls-Functional-Algorithm-Design-Ric...

In general you've got stuff like Introduction to Algorithms (http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme...) and the Algorithm Design Manual (http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/...) both of which I have seen mentioned as good books. I'm in a grad school-level algorithms class that just started using the former (which is language agnostic, but we are doing our implementations in Java) and it looks pretty good to me.

incision · 2013-07-25 · Original thread
>"I recently enrolled in a local Uni as a freshman."

Same here.

>"I was curious what kind of structured plan you have, is it just you daily schedule or something more long term?"

It's mostly longer term on a scale of months to one year or several in the case of the degree.

For example, one goal is working through the entirety of Introduction to Algorithms [0]. I've set out dates by section for reading, completing problem sets and reviews. I've written these dates out along with my reasons for pursuing the goal and how I believe I will benefit from achieving it.

That might sound simple, but taking the time think these things through, and articulate them into something concrete was certainly useful to me.

This isn't the kind of thing I'd have done historically, but I've been trying to stay very open-minded to anything that might help me reach the goals I've set. I follow the same process for any significant new goal.

I make a point to take (hand written) notes on everything I work on. At least once a week, I whiteboard what I've been reading or working on. There are going to gaps or things I completely blank on which become items for further review in the coming week.

I have yet to settle with a calendar or to-do app which I really like, for the moment, all these dates and tasks are either in a notebook I use daily or on my whiteboard for emphasis.

As much as possible, I try to create "artifacts" from the way I'm spending time. This can be notes, a quick summary of what I got from reading a chapter or article or an attempt at implementing something I read about.

I have a solid routine for my days made pretty necessary between my job and small child, but each day isn't entirely planned. I keep a shortlist of things that I work on in the same set of windows (early morning, commute, at work in the gaps, before bed) each day. I've cut out most anything that isn't family, work or study.

One thing I aim to stay strictly consistent about is waking (5:00). This gives me a little "extra" time before I wake my child up.

0: http://www.amazon.com/dp/0262033844/

voltagex_ · 2013-05-06 · Original thread
$81 for http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme...

No legal DRM free option as far as I can see.

Fifth link was a direct to the PDF.

jclos · 2013-03-19 · Original thread
The TAOCP[1] is the reference for all the types of algorithms it covers, the Cormen book[2] is a reference for its breadth and the Algorithm Design Manual[3] is quite nice to learn how to design your own.

[1]: http://www-cs-faculty.stanford.edu/~uno/taocp.html

[2]: http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme...

[3]: http://www.amazon.com/dp/1848000693

poof131 · 2012-11-30 · Original thread
I guess the question is what do you mean by advanced topics? What direction do you want to go in? The latter book you mentioned seems to cover a number of topics and is probably a good bet.

If you are interested in the web, both these books were good: http://www.amazon.com/Python-Web-Programming-Steve-Holden/dp... http://www.amazon.com/The-Definitive-Guide-Django-Developmen...

Here are a few books that cover some "advanced?" topics that I'd like to read when I have time (would also like to hear other peoples' recommendations on them): http://www.amazon.com/Python-Data-Analysis-Wes-McKinney/dp/1... http://www.amazon.com/Twisted-Network-Programming-Essentials... http://www.amazon.com/Foundations-Python-Network-Programming... http://www.amazon.com/Introduction-Tornado-Michael-Dory/dp/1... http://onlinebookplace.com/programming-computer-vision-with-...

I'm not sure on your background or the quality of these books, but an understanding of data structures, algorithms, and object oriented programming could be considered important: http://www.amazon.com/Data-Structures-Algorithms-Using-Pytho... http://www.amazon.com/Python-Algorithms-Mastering-Language-E... http://www.amazon.com/Python-3-Object-Oriented-Programming/d...

Although these and other intermediate to advanced topics tend to be covered better in non-language-specific books such as this shotgun blast to the head. Don't worry, it's just an "introduction": http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme...

asalazar · 2012-10-11 · Original thread
I think the problem is that the "right" way is completely subjective. Is Spring "bad" and Scala "good"? Depends on what you're building and for who.

Overall, the best way to be a great developer (not just a good coder) is to: 1) Build a strong theoretical foundation. The curriculum of any top tier CS program is a good starting point. Check out Intro to Algorithms http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme...

2) Stay on top of new technologies and models. Read Hacker News, Read Reddit, Follow notables on Twitter. Check out @lhazlewood

3) research, debate, practice, implement, review

smanek · 2012-10-08 · Original thread
For algo/datastructures, CLRS (http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme...) is the gold standard.

For OS's, Tanenbaum (http://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenb...) is popular.

'Math' is broad - if I can recommend only one book to cover all of Math I'd probably say 'The Road to Reality' (http://www.amazon.com/The-Road-Reality-Complete-Universe/dp/...). More practically (for the subset of math most programmers are likely to care about), you'll do fine with one good discrete math book and one linear algebra book. Throw in one each on Stats, Abstract Algebra, Calc (up to ~diffeq), and Real Analysis (in roughly that order) if you're a bit more ambitious ;-)

1331 · 2012-07-08 · Original thread
_Concrete Mathematics_ [1] is a good book that is fun to work through. The book can be considered an introduction/prerequisite to Knuth's _The Art of Computer Programming_ series [2], which contains much mathematics. If you would like a book that is not so difficult, _Introduction to Algorithms_ [3] (aka "CLRS") is also highly recommended.

[1] http://www.amazon.com/dp/0201558025/

[2] http://www.amazon.com/dp/0321751043/

[3] http://www.amazon.com/dp/0262033844/

kruk · 2012-07-05 · Original thread
I would recommend the Introduction to Algorithms by Cormen. It covers not only the complexity analysis but also describes the most important algorithms, data structures and classical problems solutions. http://www.amazon.com/dp/0262033844
crop · 2012-04-08 · Original thread
i think more important then learning a specific language is getting a understanding of the algorithmic stuff. try theese two books for example: http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme... http://www.amazon.com/Computational-Geometry-Applications-Ma...

i wish i had these books 10 years earlier..

I'll start out with the classic:

"Introduction to Algorithms" a.k.a. "CLRS" http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme...

I think this is all (and probably more than) you really "need" if you want to know CS for programming, and an enjoyable read too.

doc4t · 2012-03-10 · Original thread
Introduction to Algorithms by Cormen et al would be a good place to start if you're going the theoretical way. Very mathmatical and not so practical - I read this myself at uni and I learned a ton.

http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme...

The_Sponge · 2012-02-11 · Original thread
Go to amazon, search for data structures and algorithms. Those four words should bring up a whole bunch of results. Choose one that's well reviewed that has familiar elements to you.

Also, wikipedia is a great place to start (of course).

Sorry I can't be more specific, but I don't know your educational background or experience. Fwiw I used http://www.amazon.com/PartyTime/dp/0262033844/ . The only thing is that I had a decent, recent math background, and if you haven't done "real" math in a long time, it might be one more barrier to learning what you really want to learn.

chwahoo · 2012-02-08 · Original thread
I find it shocking that "technical/instructive/informative" books are disallowed. I can't begin to fathom a reasonable explanation for that.

To be more helpful, a mathy algorithms text, like CLR (http://www.amazon.com/Introduction-Algorithms-Thomas-H-Corme...) might slip through the censors and be a good option--depending on whether your friend is comfortably enough with thinking about code abstractly.