Hacker News new | past | comments | ask | show | jobs | submit login

> Name another end-user product for which you are even vaguely aware of what data structures were used.

Unix.

You are operating primarily on a tree of files and streams of text. To operate on these you have a wide array of utilities that perform simple tasks (and a handful that perform complex tasks as well) that, when composed, allow you to perform any transformation you want. You can get a freshman CS student off the ground with Unix like systems in what, one lecture?

Because the (bleedingly simple) data model is the focus when learning Unix, you don't need to memorize every single little edgecase of the system. Knowledge of the data model alone is enough to tell you what sort of things can or cannot be done, and general knowledge of the sort of thing that a few utilities do is enough bootstrap yourself. If you want to list out some files in some particular way, you may not know immediately what exactly to type, but you probably do know that ls or find is a decent place to start looking.




Except there isn't a single version of UNIX, each flavour has its own deviations.


Technically there isn't a single version of Git either, though (thankfully) they can all operate on the same repositories (whereas in UNIX land, you'll find different file systems that the others do not support). They do however have some different capabilities. jGit for instance can push to S3, which is pretty neat.


So I get downvoted by stating the truth. It shows how many HN readers have done portable development across real UNIX systems.


Git and Linux were both invented by Linus Torvalds.


Linus just created a kernel that can be used with a Unix-like system. The difference here isn't academic, what I am talking about above was created before Linus was born. (mildly interestingly, he apparently missed Unix Epoch by only a few days)


After looking at Git I wonder how Linus could ever constraint himself to POSIX? How come linux system calls don't have ten optional parameters each? Some of them actually mandatory, some changing meaning of the whole call?

Why go with boring open, creat, read, write when you can have rerere and prune and annex and reflog?


Not sure what you're getting at here, git developers got to choose their own names for git commands because there was not an existing standard that they were trying to implement.

Do you really think that 'prune' is a worse name than, say, 'fcntl'?

(Also, git-annex is a separate project from git.)




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: