Found in 38 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.

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

mindcrime · 2021-11-22 · Original thread
Maybe Clever Algorithms: Nature-Inspired Programming Recipes[1]. These techniques might not be useful to everybody, all the time, but they can be very handy in places.

Edit:

A couple of other suggestions.

Managing Gigabytes: Compressing and Indexing Documents and Images[2]

Mining of Massive Datasets[3]

Algorithm Design Manual[4]

Network Algorithmics[5]

Neural Network Design[6]

I think all of these fall into the category of "Won't be applicable to everyone, but can be good for those who need this kind of stuff."

[1]: https://github.com/clever-algorithms/CleverAlgorithms

[2]: https://people.eng.unimelb.edu.au/ammoffat/mg/

[3]: http://www.mmds.org/

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

[5]: https://www.amazon.com/Network-Algorithmics-Interdisciplinar...

[6]: https://hagan.okstate.edu/NNDesign.pdf

ioli · 2021-11-14 · Original thread
The Algorithm Design Manual by Steven Skiena

Amazing book. Very readable. I highly recommend it. The book has a section call "War story" at the end of each chapter in which Skiena shares his real life experience of when the contents from that particular chapter came in handy for him.

Go through it. You won't regret

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

andyljones · 2019-08-18 · Original thread
Skiena's Algorithm Design Manual:

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

Far more readable than the usual text (Cormen), the first half is a guide on how to select and design algorithms for the problems you encounter, and the second half is a whistle-stop tour of hundreds of well-known algorithms. The tour helped me a lot with X->Y esque issues where I was building bad solutions because I didn't know anything better could exist.

Incidentally, there's a lot more to CS theory than algorithms and data structures, but if you're asking on HN for a generic CS theory book, I reckon it's most likely an algorithms and data structures book that you're after.

karakot · 2018-11-29 · Original thread
https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...

I bought it and it was a counterfeit book. Pretty sure if you buy it there you will get either a counterfeit book or an international edition which has significantly lower print quality.

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

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

[2]: https://www.amazon.com/Algorithms-Parts-1-4-Fundamentals-Str...

[3]: https://www.amazon.com/Algorithms-Part-Graph-3rd-Pt-5/dp/020...

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

Isn't this book too academical for any practical learning of algorithms and data structures?

I would recommend The algorithm design manual for more practical purposes. https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...

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

SOURCE: The Algorithm Design Manual 2nd ed. 2008 Edition https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...

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!

Apocryphon · 2017-02-16 · Original thread
The Algorithm Design Manual by Skiena is pretty great.

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

It's nearly a third of the length of CLRS, and half of Sedgwick. Much more precise, yet offers more in that it talks about common problem solving uses cases with data structures and algorithms, rather than writing going through the theoretical proofs behind them.

votr · 2016-10-25 · Original thread
I'd say non-programming fundamentals took about two months at about 4-6 hours a day, with the majority of that dedicated to algorithms and data structures.

I took these two OCW courses: https://ocw.mit.edu/courses/electrical-engineering-and-compu...

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

And worked my way through these two books: https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...

https://www.amazon.com/Algorithms-Robert-Sedgewick-ebook/dp/...

I wrote out my solutions on a whiteboard or pen and paper before typing them into a computer.

Outside of A & DS, I spent some time on operating systems and networking in general. A little bit of probability, but no hardcore discrete math.

There are swaths of areas which I now cover at a slower pace as time allows; compilers, AI, etc.

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

thalesfc · 2016-08-17 · Original thread
This is my personal recommendation, please notice that I have read "Introduction to Algorithm by Cormen" about 4 years ago, so for me everything was more a catch up than really learning:

- Skiena algorithm book: https://www.amazon.com/Algorithm-Design-Manual-Steve-Skiena/...

for this book one can focuses on the first 7 chapters (revision)

- Leet code editorial solutions https://leetcode.com/articles/ . They provide with the solution and complexity analysis of a few problems. I suggest you try to solve and give your complexity analysis then compare it with the "official" one.

ninetax · 2015-09-02 · Original thread
Skiena's Algorithm Design Manual is really great, it's pretty comprehensive.

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

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

Read the book, and do whatever exercises you can from the book on the whiteboard. Talk out loud, the way you will in the interviews. After a few weeks and 60 hours of doing this, you'll be ready to blow the minds of the people interviewing you.

When you go to your interview, you will bring your own markers. Then you don't have to deal with the fat, half dried out stuff you encounter during the interview. Also, warm up for an hour or two before you go to the interview, by doing problems from the book on the whiteboard, out loud. This helps you leave nothing to chance, and be ready for whatever they throw at you.

Yeah, it's a waste of time. But you have to play the game. Similarly, when they ask you why you left your last job, lie and tell them you'd accomplished all your goals there, got everything lined up and nailed down, and you're ready to make something happen somewhere else. Don't tell the truth if it's because your managers couldn't care less about doing what's best for the business. If you want to work at the circus, sometimes you gotta jump through some hoops. Big deal, you'll be ok!

Yes, the interview process is broken, but you can actually work at it and do well, even if you're old.

Buy this book even if you're not planning to take my advice and study. Even if you don't study, this should become one of your most treasured books. I myself was amazed at how many things turn out to be graph problems, and had a great time going through this book.

[1] http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/...

avinassh · 2015-01-27 · Original thread
CLRS is quite 'academic' and requires good understanding of mathematics. It's a great book, but not a good one for beginners, imo. It will be difficult as self study for first timers. You can start with Datastructures and Algorithm Analysis in C by M. A. Weiss[0]. One more alternative is The Algorithm Design Manual by S. Skiena[1]. It's also good and focuses more on algorithm, implementation (as opposed to math-y stuff of CLRS). If I were you, I would get both the books and read alternatively. Don't miss out on exercises, they are very important.

I also suggest you to join this Coursera course, Algorithms: Design and Analysis by Tim Roughgarden[2]. Currently the course is open, so you can sign up for classes. The course is offered in two parts[3], complete both of them.

Once you are comfortable with basic concepts start solving questions/puzzles online on sites like SPOJ[4], UVa[5], (YC-funded) HackerRank[6]. You could try TopCoder[7] also, but the questions are bit difficult. Hope this helps.

PS - You should study math, because it is important in Algorithms Analysis. You could try reading required parts of Concrete Mathematics by Knuth[8] or as you come across new concepts, Google and understand them.

[0] - http://www.amazon.com/dp/8177583581

[1] - http://www.amazon.com/dp/1848000693

[2] - https://www.coursera.org/course/algo

[3] - https://www.coursera.org/course/algo2

[4] - http://www.spoj.com

[5] - http://uva.onlinejudge.org

[6] - http://hackerrank.com

[7] - http://www.topcoder.com

[8] - http://www.amazon.com/dp/0201558025

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

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.

m_ke · 2013-09-01 · Original thread
Try Skiena's "Algorithm Design Manual" [0]. Another nice book would be "Programming Pearls" [1].

[0] http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/... [1] http://www.amazon.com/Programming-Pearls-2nd-Edition-Bentley...

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

AnIrishDuck · 2013-02-20 · Original thread
Pathfinding is a much easier problem than circuit routing and can essentially be solved in O(n + k) where n is the number of nodes and k is the number of edges between nodes.

Circuit routing is an entirely different beast. A previously routed "shortest" trace from one node to another can obstruct a much shorter trace between two unrelated nodes. In this way it's similar to the traveling salesman problem, where early "greedy" choices made by the salesman can force him to make much less efficient choices later.

I remember circuit routing was an example in Skeina's Algorithm Design Manual [1], and believe he proved that it was indeed NP-complete, not polynomial like the general pathfinding problem.

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

tazzy531 · 2012-08-31 · Original thread
When I interviewed, I studied this book cover to cover for 3 months prior to the interview. It definitely came in handy: http://www.amazon.com/Algorithm-Design-Manual-Steve-Skiena/d...

There's also lecture videos here: http://www.cs.sunysb.edu/~algorith/video-lectures/

Learning data structures that you don't use often, like bit arrays, come in handy for interviews, especially for when they ask you to optimize your solution. (http://en.wikipedia.org/wiki/Bit_array)

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

[0] http://www.amazon.com/dp/1849967202

dazbradbury · 2012-01-30 · Original thread
You may want to look at some static code analysis tools for 1 and 2:

http://en.wikipedia.org/wiki/List_of_tools_for_static_code_a...

From my very limited understanding, the powerful ones are seemingly only in reach for large enterprises [1].

With regard to number 3, In C# and Java, resharper/IntelliJ has partially automated refactoring tools. I'm sure similar tools exist for other languages.

However, I think going down this route is substantially more work unless you are inheriting a code base. I would aim to learn some of the design patterns basics[2], perhaps read "The Algorithm Design Manual" [3], and aim to have a clear idea of how to design your latest algorithm from the offset.

[1] - http://semmle.com/solutions/what-we-do/index.html

[2] - http://en.wikipedia.org/wiki/Design_Patterns

[3] - http://www.amazon.co.uk/Algorithm-Design-Manual-Steven-Skien...

rdl · 2012-01-24 · Original thread
I'm kind of surprised the Skiena "The Algorithm Design Manual" didn't make it. http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/...
mcantor · 2011-09-26 · Original thread
For anyone trying to buy "The Algorithm Design Manual" (or at least add it to their Amazon wish-list with a dreamy sigh), It seems like the "correct" version is here:

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

I was a bit flummoxed at first because algorist.com doesn't tell you how to buy the thing, and the Kindle edition appears to be out of date (based on the first edition, obsoleted by the second edition from 2010).

vanelsas · 2011-09-19 · Original thread
I have just started reading the bible of algorithms:

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

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

misterbwong · 2011-04-29 · Original thread
If you're interested in glossaries of this type, there's a great one (with pictures!) in the back of The Algorithm Design Manual by Steven Skiena.

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

thejbf · 2011-04-29 · Original thread
This dictionary looks like it's the index of The Algorithm Design Manual by Skiena: http://www.amazon.com/Algorithm-Design-Manual-Steve-Skiena/d...
m3mb3r · 2010-12-16 · Original thread
Looking at the prices of the kindle editions of the below books,

Distributed Algorithms ($100) - http://amzn.to/glJVKv Algorithm Design Manual ($61.72) - http://amzn.to/f9G0KD

They are about $10 less than the physical book. Doesn't it cost them far less to produce, store, transport a digital version? I wonder how much of this goes to the author.

ardit33 · 2010-10-21 · Original thread
This is good advice.

Also to the OP: this book is good, and a must read. It will help you a lot on the fundamentals of CS. http://www.amazon.com/Algorithm-Design-Manual-Steve-Skiena/d...

samdk · 2010-01-25 · Original thread
I'll second Intro to Algorithms, which has been mentioned. It's what I used in my algorithms class and it's quite comprehensive. (It will also take you a while to get through.)

I've also heard The Algorithm Design Manual recommended, although I haven't read it and don't own a copy. http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/...

julsonl · 2009-11-16 · Original thread
I found Skiena's: http://www.amazon.com/Algorithm-Design-Manual-Steve-Skiena/d... to be much more readable, but Cormen's is still considered THE bible algorithms anyway.
pkrumins · 2009-05-19 · Original thread
I recommend Skiena's "The Algorithm Design Manual (2nd ed)": http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/...
zain · 2009-05-15 · Original thread
dschobel · 2009-05-15 · Original thread
This is the single best text I've seen on algorithms in the real-world: http://www.amazon.com/Algorithm-Design-Manual-Steve-Skiena/d...

Can't recommend it enough.

Fresh book recommendations delivered straight to your inbox every Thursday.