Hacker News Comments on
The Algorithm Design Manual
·
14
HN comments
- This course is unranked · view top recommended courses
Hacker News Stories and Comments
All the comments and stories posted to Hacker News that reference this book.> Also, adding to the fact that I am entirely self taught I sometimes wonder maybe I am missing out on a lot of theoretical stuff they teach in a CS degree.A CS degree is useful for a software engineer, but most of what you learn is only tangential to software engineering. Many of the best engineers are self taught.
That said, some of the basic stuff from CS is pretty useful. I'd definitely encourage you to learn data structures and algorithms. Just pick up a good textbook and go through it! (I like to recommend this one: https://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena...).
Another suggestion I have is to seriously think about why you want to do work in lower level stuff. The large majority of jobs are in web development right now, so trying to avoid that really limits your options. There's really nothing more sophisticated or interesting going on at the low levels. I've seen a lot of people come into a software engineering career with preconceptions about exactly what sort of work they want to do, and at the end of the day, I don't think those preconceptions have made any of them happy.
⬐ whoami_nrAgain, I didn't start pursuing CS in college to get employed. I started learning more about computers, learnt to code websites and then went back to figuring out how a computer works. However, I haven't figured out which area of the stack to develop an expertise in.I will definitely check that book out. Thanks
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.
⬐ chillaxdudeI really love the war problems.
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.
⬐ slingerThank you for your reply. I'm currently studying CS fundamentals as well. I'm taking an excellent operating system class from https://www.ops-class.org and I recommend to everyone that wants to learn this stuff.⬐ fslothWhat makes you categorize algorithms as non-programming? Isn't it like saying rhythm and melody are non-musical concepts?⬐ mpwoz⬐ questionrNot OP, but maybe "coding" is a better term: they are language-agnostic fundamentals that don't change as quickly as the tools and frameworks we use daily as "programmers"just to confirm, you completed BOTH MIT algorithm courses and BOTH algorithm books, in the span of 2-months, including completing all the exercises/algorithms?that seems like an incredibly short amount of time given the content. But if true, congrats! and please let me know your secret!
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...
⬐ corysamaAlong with SICP, The Little Schemer would be a great book to work through on paper. https://mitpress.mit.edu/books/little-schemerOnce that is worked through, Godel, Escher, Bach would be an especially entertaining and enlightening read.
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
⬐ brudgersI would also recommend Roughgarden's Coursera classes, however, I would strongly recommend waiting for a live session.A book I think is informative from a practical perspective is Algorithms in a Nutshell from O'Reilly Press. As always with Amazon I would look for a used copy.
⬐ avinasshBut no need to wait at this moment, as class is live. However I also agree that live session is recommended and actually fun. Some of the Community TAs are really good, which one will miss if attended non-live version of class.
It looks like Amazon UK does have a "look inside" preview:
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...
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...
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...
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...
I'm kind of surprised the Skiena "The Algorithm Design Manual" didn't make it. http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/...
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/...
I recommend Skiena's "The Algorithm Design Manual (2nd ed)": http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/...
Here's the second edition from 2008: http://www.amazon.com/Algorithm-Design-Manual-Steven-Skiena/...
⬐ pkruminsThanks! I did not know there was the 2nd edition!