This is algorithms, which while useful is not even the majority part of a computer science education, as I understand it.
My CS degree involved image processing, graphics, operating systems, systems programming (low level programming), programming language theory, discrete math, linear algebra and statistics, just off the top of my head.
Interestingly programming is actually not a big part of a degree (again, as I understand it.) It takes many years to become a good programmer, and it would be a waste to dedicate an entire 4 year degree to just that.
This was also my experience. Years 1 and 2 covered general programming concepts like data structures and algorithms. Years 3 and 4 transitioned into lower level topics like compiler design, some embedded work, lots of math. However, as most CS depts at the time we're relatively young, they had gaps to fill, which usually meant adding on more math courses to the curriculum to fill credit requirements.
I am sure these days CS depts are far more comprehensive than 15, 20 years ago and can offer many more courses in advanced programming topics (for example big data, enterprise, security, distributed, project management, mobile, etc).
The title is much broader than what's listed in the table of contents, which is primarily what you'd find in one course (algorithms) from a CS undergrad course of study.
> easy to read without any math or computer science background
> you are already familiar with Java or C++ syntax
not sure you will have too much success hitting your target demographic of "people who are ignorant of computer science, yet are experienced programmers"
Not sure if OP is author, but this seems like a decent start at a useful compilation. It's obviously highly focused on data structures and algorithms, so the title is a bit misleading.
Pretty average content and not academically strong enough. It lacks the depth of proof and detailed technical explanations. I wouldn't call it a computer science book - it seems like a data structure and alg concise guide. There are tons of books if you're serious about Algorithms or Data Structures alone and that won't make you a computer scientist.
Computer Science is a big field that spans many areas of programming, theory and research.
The treatment of Big O notation is not only misleading (and poorly conveyed) but wrong in several ways. Big O is an upper bound that does not need to be tight. The table displaying the "limit of N for 1 second (standard processor)" and the accompanying note that the chart will eventually become outdated is manifestly wrong and misleading. Big O ignores constant factors and so no such comparisons can be made. For any particular duration of time (or for any particular number of elements), an algorithm with complexity `O(f(N))` may be faster than one with complexity `O(g(N))` regardless of `f` and `g`. Big O is not something that can obsolesce.
Also, it is not necessary that there be a base case for recursion (only well-founded recursion). For instance, the Haskell definition
repeat :: a -> [a]
repeat x = x : repeat x
is a recursive definition but it has no base case. Of course, there can also be multiple base cases or other more complicated structures.
Saying unconditionally that all operations for a hash set or hash map are O(1) is wrong.
Opening quotation in LaTeX is accomplished by "``".
I also think that the comparison between the human brain and CPU is completely unjustified. Given that most people could not remember the sequence of results of 32 coin tosses, why shouldn't I say they have no greater than 4 bytes of memory? (For myself, I think the most appropriate unit of memory is "10 seconds of commonly spoken English language").
There are already so many terrific sources for learning algorithms that I don't understand why the author created this book. It is not only inaccurate, but more difficult to understand than other resources I have come across (e.g., Coursera).
I like it. It's written by students so it's pretty easy to read. This seems like it could evolve into a students' version of 'Foundations of Computer Science' by Aho, Ullman - http://infolab.stanford.edu/~ullman/focs.html
This theory + a tutorial about testing best practices + 20 weekend projects would be a really good way to learn how to code.
Thinking about stacks, trees, and graphs can go a long way to build up learners' ability to simulate what the computer will do, e.g., getting the steps right for breadth first search in a graph is a rite of passage.
Looks good so far. I would have loved this as an intro. before starting my CS degree; it might've even been useful for my UK A-level course (age 17-18).
You should really consider something other than LaTeX as a publishing platform, or make it look better, when taking it from draft format to publishing format.
This doesn't communicate that algorithms are fun. An algorithm book, should be like a Magicians show, really. With fun problems to apply the algorithms on.
I also note that there aren't any links for backreferences to topics, and that at least one topic is missing, heaps.
I am actually very fond of Robert M. Sedgewicks books (Second Edition), and Donald E. Knuths monumental accomplishment.
Those books are fun, most books concerning algorithms are not as fun as they should be.
I am picky I guess, I want fun excercises, or presentations, but also accurate details, and minituous explanations.
[+] [-] cechner|11 years ago|reply
My CS degree involved image processing, graphics, operating systems, systems programming (low level programming), programming language theory, discrete math, linear algebra and statistics, just off the top of my head.
Interestingly programming is actually not a big part of a degree (again, as I understand it.) It takes many years to become a good programmer, and it would be a waste to dedicate an entire 4 year degree to just that.
[+] [-] mtbcoder|11 years ago|reply
I am sure these days CS depts are far more comprehensive than 15, 20 years ago and can offer many more courses in advanced programming topics (for example big data, enterprise, security, distributed, project management, mobile, etc).
[+] [-] jimmahoney|11 years ago|reply
For an online text that covers similar stuff, see http://interactivepython.org/runestone/static/pythonds/index... .
The last "interview" chapter is about getting a job, not about CS itself.
A good starting spot for the topics in "computer science", at least at the undergrad level, is the ACM curriculum ( http://www.acm.org/education/CS2013-final-report.pdf ).
[+] [-] p1esk|11 years ago|reply
[+] [-] xyclos|11 years ago|reply
> you are already familiar with Java or C++ syntax
not sure you will have too much success hitting your target demographic of "people who are ignorant of computer science, yet are experienced programmers"
[+] [-] rufustherag|11 years ago|reply
[+] [-] unknown|11 years ago|reply
[deleted]
[+] [-] jsalit|11 years ago|reply
Strange - not a single citation/reference?
[+] [-] suyash|11 years ago|reply
Computer Science is a big field that spans many areas of programming, theory and research.
[+] [-] rufustherag|11 years ago|reply
[+] [-] thetwiceler|11 years ago|reply
Also, it is not necessary that there be a base case for recursion (only well-founded recursion). For instance, the Haskell definition
is a recursive definition but it has no base case. Of course, there can also be multiple base cases or other more complicated structures.Saying unconditionally that all operations for a hash set or hash map are O(1) is wrong.
Opening quotation in LaTeX is accomplished by "``".
I also think that the comparison between the human brain and CPU is completely unjustified. Given that most people could not remember the sequence of results of 32 coin tosses, why shouldn't I say they have no greater than 4 bytes of memory? (For myself, I think the most appropriate unit of memory is "10 seconds of commonly spoken English language").
There are already so many terrific sources for learning algorithms that I don't understand why the author created this book. It is not only inaccurate, but more difficult to understand than other resources I have come across (e.g., Coursera).
[+] [-] teddyh|11 years ago|reply
[+] [-] thirdtruck|11 years ago|reply
[+] [-] journeeman|11 years ago|reply
[+] [-] ivansavz|11 years ago|reply
Thinking about stacks, trees, and graphs can go a long way to build up learners' ability to simulate what the computer will do, e.g., getting the steps right for breadth first search in a graph is a rite of passage.
[+] [-] GroSacASacs|11 years ago|reply
[+] [-] rustyconover|11 years ago|reply
[+] [-] csstudnt|11 years ago|reply
[+] [-] acbart|11 years ago|reply
http://algoviz.org/OpenDSA/
I do appreciate accessible text though - worth looking into.
[+] [-] vishalzone2002|11 years ago|reply
[+] [-] oneeyedpigeon|11 years ago|reply
I think there's an error here:
string[1..3] = ’abc’ string[1..1] = ’’
[+] [-] oneeyedpigeon|11 years ago|reply
[+] [-] CharlesMerriam2|11 years ago|reply
[+] [-] thirdtruck|11 years ago|reply
[+] [-] unknown|11 years ago|reply
[deleted]
[+] [-] dcgoss|11 years ago|reply
[+] [-] chrys|11 years ago|reply
I wonder if you could re-format your book in that manner?
[+] [-] McUsr|11 years ago|reply
This doesn't communicate that algorithms are fun. An algorithm book, should be like a Magicians show, really. With fun problems to apply the algorithms on.
I also note that there aren't any links for backreferences to topics, and that at least one topic is missing, heaps.
I am actually very fond of Robert M. Sedgewicks books (Second Edition), and Donald E. Knuths monumental accomplishment. Those books are fun, most books concerning algorithms are not as fun as they should be.
I am picky I guess, I want fun excercises, or presentations, but also accurate details, and minituous explanations.