Git for Computer Scientists
eagain.net
eagain.net
I'd especially draw the line at DAG. At that point, we're talking abstract mathematics, not programming.
For example, let's say you were a student of Weird Science and thus were a weird scientist. You would probably instantly recognize:
1. space-time continuum
2. Cthulhu
3. zombies
4. fembot
5. mind control lasers
6. Tesla coils
7. flying monkeys
8. dead matter reanimationI have to use git/svn/mercurial from time to time, saying the internals of each vcs is essential knowledge is making quite a lot of assumptions about my time and how these tools are used.
people use thousands of tools every day, you can make the same argument "you know know the internals so you can use them properly" for each one, which sounds like a pretty surefire way of never getting anything done.
This is why git is so annoying to learn and I'm reluctant to recommend it. Unlike, say, a filesystem where you can understand it at the POSIX level and there's no reason to understand disk sectors, the internals of git are exposed and there's no simpler model of how it works. Many of the commands don't make sense unless you start to understand the internals.
It's not like it's rocket science either; git's internals are remarkably straightforward considering what it can do. By having a rudimentary understanding of what git actually is, even supposedly "advanced" features like rebasing and partial commits (git add --patch) make perfect sense.
Git is a tool that will be used constantly. It pays to learn it thoroughly.
The UI of the command line tool is sometimes iffy (git rm --cached?), but that I think is a separate issue. The other VCS systems, being so "user-friendly", don't seem to encourage one to actually learn them. Mercurial's branches still don't make sense to me (bookmarks are better), and SVN I can use almost solely because I've learned some magic incantations that work for what I need to do.
I feel that presenting a bunch of DAGs does tie it in to Computer Science for sure. Graphs are an integral part of Computer Science, and to present it from that perspective does make it more "Computer Science-y".
I agree that to assume that only Computer Scientists (or people who have majored in Computer Science degree) understand what a DAG is, is elitist.
Perhaps not, but CS students / graduates are more likely to be familiar with them from the often f^#kin crappy textbooks we have to wade through, which seem to think everything is better with DAGs / pages of near-identical diagrams for you to play "what's different?" with. I don't see that many who haven't gone through the education-machine would subject themselves to such things willingly to be efficient enough at it to make something like this worthwhile.