The case for Linux for Computer Science Students
The following text was written by Nadav Har'El, on January 2009. Har'el is a Technion graduate and a researcher at IBM's Haifa Research Laboratory.
Some students are are almost saying "I came to the Technion knowing operating system X, and I don't want to learn and use another one". This is a strange attitude to come to school with. I think the students who are saying this simply do not understand all the value and experience they are getting by working on Linux for a change. Here are, for example, some of the added values that they are getting:
By using Linux student will acquire experience in yet another technology needed in the job market. And we're not talking here about some esoteric software that nobody will need in two years, but rather a system, Unix, that has been in constant (and growing) use since the 80s and used to run some of the most exciting servers we all here about on the news.
Software Engineering Methodologies
In using Linux, students are exposed to more software engineering philosophies, operating system design issues, ways of thinking, that simply do not exist in Windows. The shell (command line), scripting and automation of everything, separation of Window system from OS, server processes, configuration files, and much much more. And of course there is the whole free software philosophy and the thriving world of free software development that exists out there.
In addition, if students choose to use the same OS at home, they can get it absolutely free. Last time I checked, students always complain about the lack of money - so I find it hard to understand their desire to pay for Windows and the outrageously-expensive MS-Office.
A typical Linux system has a much bigger variety of software than Windows, simply because on Windows every piece of commercial software (which is the type of software these students are wishing for) costs money. In a software development lab, most likely nobody will purchase software for photo editing, for OCR, for PDF encoding, for speech synthesis, or who knows what a student might need for his or her project or personal interests. On Linux, all of these things come (depending on how/what you installed) already with your OS, absolutely free.
Some things are easier on Linux
When they get to know Linux, they will learn that while there are indeed things that are more convenient on Windows, there are other things that are actually more convenient to do on Linux! Remote login and automation are just two examples.
Access to the Source
And now we come to what I consider the greatest advantage of Linux as a teaching device over any commercial system, be it Windows or Sun or Mac.
I'll start with a personal story.
My first encounter with Unix was a bit over twenty years ago. My father was working in AT&T Bell Labs in New Jersey (where Unix, C, and a lot of other great stuff was invented). He let me - a ten year old boy - play around with the Unix system there from home, and gave me two great books to learn from (Kernighan&Pike's "The Unix Programming Environment" and Kernighen&Ritchie's "The C Programming Language"). But after I learned the basics from the books, one of the best things about learning to program in Bell Labs was that the source code of everything was available: When I wanted to know how some feature of "vi" worked, I could read the code and feel Bill Joy's joy of writing it. When I wanted to improve the Basic interpreter (don't ask ;-)), I just did. When the "new line discipline" was invented circa 1985 (allowing backspace to actually erase the character instead of just moving the cursor :-)), I read the "stty" source code to learn how it can be enabled. And so on, and so on.
This was an amazing learning experience. To learn that on a computer, everything has a reason, and that reason can be traced. If something doesn't work properly, a programmer's recourse isn't to complain, isn't to pray that it will get fixed, but it is to find and fix the bug.
Theoretical Computer Science without A Library
Imagine that you're studying theoretical CS without access to the library. You're told that you can learn what you hear in class, but if you wish to learn more on a certain specific topic, you can't go to the library and pick up a book about it. This is what learning programming on Windows is like: Sure, you can do the exercises you get in class. But what if during these exercises you discover an interesting question about the OS you're using or one of its applications? You can't go to the source code ("the library") and learn from it.
This is, I think, something that the students need to understand. Learning computer programming on Linux is a gift, not a chore. I think that if they seriously love computers (and didn't just come to study CS because it's the fashion) they will be grateful for this gift for the rest of their life. I know that I am.