I just finished reading "The Dream Machine"
and getting a very cool look at some early history of computing including the birth of Multics and it's spin off and almost more interesting the birth of tools like email and ftp as a way to actually do something with the ARPANET that was being built. A great read for anyone interested in how we collectively have arrived at where we are today in computing. And as it happens, I'm also currently challenging a course on Unix which as part of the challenge requires that I complete a project before I can write the final exam.
The project itself is great fun actually. I've been in the world of Microsoft for so long at work that I've completely forgotten about the old days of living in vi on Solaris as part of my 9-5 work. (CATI programming back then) More than anything about Unix I love the power and flexibility of combining these small well written tools like awk, sed, grep etc. These are incredible tools and it's easy to forget how powerful a fully text driven system really is.
I remember being completely stoked about Microsoft's powershell
project a few years ago. On the surface it seemed to take everything exciting about a Unix environment and add a layer of object orientation across it so that not only could you fully embracing piping and redirection with the help of some impressive shell programming capabilities but you also had the full .net framework at your fingertips and the ability to use reflection to "discover" a system at run time. This discover-ability aspect is key, and the importance of "man" to rusty or newbie Unix users can let you appreciate the value in being able to query objects to ask what they can do. The simplest example of where powershell is so powerful is to just imagine good ole ls
, but where each element output from ls was an actual file or directory object. If you do nothing then those are simply iterated by ls and essentially .FileName.ToString() gets called for each... but if you pipe that output to your own iterator you can all of a sudden do some really amazing things with very little effort.
Having said that though I never truly fell into powershell like I have unix in the past. In my opinion it's about the eco-system. The set of utilities in unix work because everything in unix plain old text, meaning the same tools can be strung together to do any countless numbers of tasks without additional support. Compare this to powershell which really loses it's value where .NET doesn't exist. True, there are some amazing providers that bridge gaps into SQL Server, WMI, etc etc. But just the fact that you are now talking about .NET development to create those new bridges means we're half a step behind the accessibility and simplicity of a text file. I do think that powershell will only get better with age, but for now unix as a whole is still king for me even if powershell is sexier.
Anyway, this project I'm working on is just a series of clever questions that force you to construct chains of tools to elegantly (or inelegantly) solve a problem. It's extremely fun and in the course of a couple weeks I've reinstalled cygwin at work, gotten ssh access to my mac at home and have had terminal open for pretty much a week straight on my iMac. It's hard to keep this up without an actual task - and considering I'm still doing 95% .NET development i don't expect this will continue for too long but it's a good reminder.