My name is Scott Wegner, and I’m a Computer Science major at the University of Illinois, Urbana-Champaign.
I’ve had Linux installed as my primary OS for about 3 years, and as a computer science major, it’s certainly my environment of choice. Not only does Linux deliver a rich desktop environment, but also the command-line and its vast number of utilities are indespensible for any sort of development. It still suprises me, then, when I see other CS majors at my university who are so unfamiliar with Linux, and who cringe when any programming assignment requires Linux for one reason or another. It got me thinking.
Our computer science department also has a number of computer labs with Linux machines, accessbile remotely and for physical access. There are also a few Windows machines for those who prefer Visual Studio, although these machines are generally inferior when it comes to speed and stability. So why do students still flock to them? I think it’s because the courses at our university only give a terse introduction to Linux and the utilities that the course will require. What we need is something that will really show students the ease and the power of Linux. Maybe a 1-hour tutorial, perhaps a half-day workshop, or even a 1-credit hour introductory course. Yes.
This wouldn’t be the sort of tutorial you see on the internet that praises Ubuntu for it’s robustness and claims that users should never need the terminal. CS majors need to embrace the terminal and its utilities. I asked earlier on identi.ca / twitter what people would talk about, and received a number of great responses. There’s a whole list of tools that students need to be familiar with to really be productive.
- grep, less, head, tail
- vim, emacs
- make
- svn, cvs
- ssh
- man
- awk, sed
- diff, sdiff, colordiff
There’s also a lot of tools that would simply make their experience more pleasant, such as screen, rsync, latex, etc. Having an understanding, or at least a crude familiarity of these utilities would certainly improve a student’s experience on projects which require them. It may even convince them to try the faster Linux machines next time they visit the computer labs.
But how would one structure such a course? I think a 1-hour weekly lab workshop would be the best setting. The course could revolve around some simple in-class project that utilizes each of these tools. Each week could introduce a new command, looking into it’s basic syntax and functionality, as well as providing links and resources to explore its advanced usage. The majority of class time would be spent working on the project, trying each new command and using it to solve some basic problem. The hands-on section would be crucial, as this is will instill the basic familiarity that students will hold with them for later courses. I also think it would be useful to have extra time after class for “install-fests”. This would give students the opportunity to install Linux at home and see if they would like it– either in a virtual machine, via Wubi, or on a physical drive. They should be offered, optionally of course, once at the beginning of the semester, half-way through, and towards the end.
So what do you think– could something like this work? Would it be helpful? Have you heard of a university that provides something similar? And what applications would you add to the list? Let’s hear it in the comments.