The Computer Science Handbook: First Draft [pdf]
thecshandbook.com
thecshandbook.com
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.
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).
I don't think that math should be considered filler though - it was very fundamental to my degree! In fact the first year of my comp. sci. degree was /exactly/ the same as the first year engineering curriculum. It was almost entirely math, with basic programming (just pascal) which the engineers also needed for their degree.
As such I'd say that math is still very prominent in most comp sci degrees
edit: in fact as chance has it I was just today going over some old lecture notes from my 3rd degree year, and even the programming courses were extremely heavy in inductive reasoning to demonstrate how, for example, Big(O) notation worked with different algorithms (i.e., actual formal proofs)
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 ).
Choosing any language means that you are pigeonholed into using the DS that the language supports and have to think about things from the language's perspective. But just the ease of writing and experimenting with Python code makes it a great language for writing algorithms.
Am I missing your point?
You don't have to worry about memory management, pointers and the like, and can just focus on the algorithms.
All that stuff it super important to also know, but probably easier to learn about them separately.
Personal story. I started programming with C. The day I picked up Python (many years later) I knew that this was the language that any university should have used to get students started with programming/algorithms.
If you could choose, looking back, which language would you prefer to know better: C or Python?
On the same note of employment however, C opens up a completely different line of work in robotics and electronics related stuff which is something I really want to get into.
I wish there was a book on algorithms that would display both C and Python code side by side!
> 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"
Strange - not a single citation/reference?
Computer Science is a big field that spans many areas of programming, theory and research.
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).
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.
I do appreciate accessible text though - worth looking into.
I think there's an error here:
string[1..3] = ’abc’ string[1..1] = ’’
http://www.amazon.com/Manga-Guide-Databases-Mana-Takahashi/d...
I wonder if you could re-format your book in that manner?
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.