Feb 26

Linux For Computer Science Majors

Tag: linux, software, ubuntuScott Wegner @ 12:00 pm

TuxMy 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.

Share:
  • Digg
  • Facebook
  • Reddit
  • StumbleUpon
  • email
  • Twitter

10 Responses to “Linux For Computer Science Majors”

  1. Bert Van de Poel says:

    That’s an awesome idea and you’re so right, every app developer and server admin should know linux basics.
    If all the guys who make computer happen use linux we could perhaps finally move things into the right direction and also it’s just silly to use VS for everything. (.NET is evil !!!!)

  2. Jonas says:

    I think it would be helpful, although I didn’t major in CS.

    My academic career involves theoretical and applied linguistics, and while knowing perl, grep, sed, R, and awk (among other things) are not mandatory it certainly helps (and no, I don’t claim to be an expert…). Sometimes it helps A LOT. And that’s for a non-CS major…the need would, I imagine, be even greater for someone that is aiming for a career within the CS field.

    As far as the cringing aspect goes, I suspect that is at least partially due to the shell-aspect. Still, a CS major should in my opinion be required to have at the very least a basic knowledge of shells (*ix or otherwise).

    While not a CS-major, some of my past work-experience involves maintaining both *ix servers (and desktops) as well as the windows equivalents. As bad as the windows equivalents of a shell can be – at least if you’re not accustomed to the RealThing…, it is never wrong to be able to utilize a computer without the aid of visual metaphors. In my experience, sooner you will have to. No matter what OS you’re running. No, that’s not quite right. I should say that if you want to be efficient in administrating servers, you will have to. Well, unless you like the idea of having to do a lot of maintenance mind-dulling duties manually on a regular basis rather than automating things that is.

    Even Microsoft has acknowledged that – why else would they have made sure their latest server edition can be run without a GUI or have released their shell powertools?

  3. kwacka says:

    You’re 100% right.

    A friend who is a university lecturer tells me that the first year of CS courses are ‘wasted’ as the majority of students are users of Microsoft, and have very little actual knowledge about computers, programming, etc.

    Take a look at the Linux Professional Institute curriculum for ideas – google for LPIC-1, LPIC-2 or LPIC-3

  4. David says:

    Here in ECE everyone is forced to use linux at some point (ECE190, for sure). We need to focus on the hardware and physical system that we’re developing and the open source code for Linux helps us understand our field of work.

    As far software development goes, learning how to use Linux and its various backend “terminal” applications could be useful, but the point of Computer Science is to abstract the machine as much as possible and focus on using software to accomplish tasks by putting functions together. It seems like every tool on your list already exists on windows and could be made easier with a graphical frontend: then CS majors could focus on their code rather than what arguments to add after they type “gcc”. Why dont you develop a frontend for these tools to make Linux easier than Windows to develop on? A good UI is so much more intuitive than searching through man pages.

    Don’t even get me started on how bad of an idea it is to encourage students to mess up their partition tables with Linux installs. It’s better to make them want to do it on their own.

  5. Scott Wegner says:

    @kwacka: Although I wouldn’t say the first year is a *total* waste, I would agree that the curriculum isn’t designed in a way to prepare students for what’s to come.

    I was on course staff for a freshman-level course last semester, and they’re not using Linux at all anymore (they basic Makefiles when I took it previously.) The faculty decided to transition the course entirely to Java and Eclipse, with the belief that the next era of CS majors will be working entirely in IDE’s, and without the shell at all. I disagree.

  6. Rohen Mckinney says:

    thanks for the great open source linux article.

  7. Paul says:

    “So why do students still flock to them?”

    Perhaps because of habit and maybe even because they’ve never learned to type properly. As David said, graphical front ends even for fairly simple CLI-based programs probably would make them easier to use for habitual mousers. Then, even if you show them what’s possible, they’ll find miraculously rich and powerful programs like Emacs too difficult to use or even completely inaccessible. Of course the inefficient point & click / GUI element driven function access habit isn’t an easy habit to break and you’ve got to be motivated to want to break it in the first place. Maybe your uni. could get a guru in to give a demo so that they can see what they are losing out on, then arrange some touch-typing lessons. ;-)

  8. Scott Wegner says:

    @Paul: I would hope that any aspiring programmer have a firm grasp on touch-typing. If not, then that’s a problem which needs to be addressed first.

    I think you nailed it though when you say that GUI interfaces are simpler. It’s true– the command-line is not intuitive for a newcomer, and there’s a steep learning curve before you can really be productive. That’s why a lot of people prefer to point-and-click their way through tasks. However, you’ll notice for tasks that repeat themselves again and again, power users will find the right keyboard shortcut and use it instead of the mouse, because it’s *faster*. And that’s the whole idea behind using the terminal– when your fingers stay near the home-row, you can work much faster. It’s amazing to watch a VIM power-user at work. The editor has so much capability built in, it’s a full-fledged IDE on it’s own. And all without leaving the keyboard.

    In short, I believe users flock to GUI alternatives because they are simple and easy. But if programming is to be your profession, it doesn’t make sense to take the easy way out. Learn the set of tools that allow you to be the most productive. Overcoming the barrier-to-entry will set you apart from your colleagues that opt for what’s easy instead. College is the time to push yourself, and you’ll thank yourself later.

  9. Gavin says:

    As a UIUC CS student, I like your idea for some classes/workshops. An idea would be to video record them for those who would have to miss a week. That is a very good list to start with.

  10. mike says:

    Great Idea, but as a longtime linux user myself, (and a CS major!) I realize that while it might appear that students are afraid of linux itself, in reality I find that they are more afraid of programming outside of VS. What I personally do, especially when programming in VB, I just pop open Sun’s Virtual Box, restore my machine state, and since i run my vm in seamless mode, I get a nice Visual Studio window to pop up. Something i just thought of, is it even remotely possible to program with visual studio through wine? As long as you copied all the DLLs and get .net2.0 (minimum) installed, I can’t see why it wouldn’t work… i Might have to start tinkering…

Leave a Reply