From owner-sage-members@usenix.org Tue Feb 17 07:47:56 2004 Received: from usenix.org (voyager.usenix.org [131.106.3.1]) by tiderace.darkuncle.net (8.12.9/8.12.9) with ESMTP id i1HFls7C015621 for ; Tue, 17 Feb 2004 07:47:55 -0800 (PST) Received: from voyager.usenix.org (localhost [127.0.0.1]) by usenix.org (8.12.10/8.12.10) with ESMTP id i1HFtFAr008871 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 17 Feb 2004 07:55:15 -0800 (PST) Received: from localhost (majordomo@localhost) by voyager.usenix.org (8.12.10/8.12.10/Submit) with SMTP id i1HFtFvC008867; Tue, 17 Feb 2004 07:55:15 -0800 (PST) Received: by voyager.usenix.org (bulk_mailer v1.13); Tue, 17 Feb 2004 07:53:30 -0800 Received: from voyager.usenix.org (localhost [127.0.0.1]) by usenix.org (8.12.10/8.12.10) with ESMTP id i1HFrTAr008425 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Tue, 17 Feb 2004 07:53:29 -0800 (PST) Received: (from majordomo@localhost) by voyager.usenix.org (8.12.10/8.12.10/Submit) id i1HFrTDc008424 for sage-members-outgoing; Tue, 17 Feb 2004 07:53:29 -0800 (PST) Received: from front3.chartermi.net (front3.chartermi.net [24.213.60.109]) by usenix.org (8.12.10/8.12.10) with ESMTP id i1HFrPAq008400 for ; Tue, 17 Feb 2004 07:53:26 -0800 (PST) Received: from [24.247.214.232] (HELO lokkur.dexter.mi.us) by front3.chartermi.net (CommuniGate Pro SMTP 4.0.6) with ESMTP id 565827518; Tue, 17 Feb 2004 10:53:24 -0500 Received: from lokkur.dexter.mi.us (localhost [127.0.0.1]) by lokkur.dexter.mi.us (8.12.9p2/8.12.9) with ESMTP id i1HFsWDt056739; Tue, 17 Feb 2004 10:54:32 -0500 (EST) (envelope-from scs@lokkur.dexter.mi.us) Received: (from scs@localhost) by lokkur.dexter.mi.us (8.12.9p2/8.12.9/Submit) id i1HFsWaW056738; Tue, 17 Feb 2004 10:54:32 -0500 (EDT) (envelope-from scs) Date: Tue, 17 Feb 2004 10:54:31 -0500 From: Steve Simmons To: Kenton Brede Cc: sage-members@sage.org Subject: Re: [SAGE] Need help creating Sys Admin major Message-ID: <20040217155431.GA56387@lokkur.dexter.mi.us> References: <20040217143024.GA16545@gravity.nixnotes.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20040217143024.GA16545@gravity.nixnotes.org> User-Agent: Mutt/1.4.1i Sender: owner-sage-members@usenix.org Precedence: bulk Status: RO Content-Length: 7296 Lines: 137 On Tue, Feb 17, 2004 at 08:30:24AM -0600, Kenton Brede wrote: > My manager and I discussed the situation and he is now preparing a > proposal to our University's large computer science program asking > for a specialization or degree program in systems administration. The > idea is that there is an unmet need in our area/nationally/internationally > for qualified systems administrators and that the computer science > program here isn't preparing students for these systems/network > administrator positions. . . . Rather than address your questions directly, I want to say a few things about CS degrees and system administration. And for the record, my background: I have a 'roll your own major' Bachelor of General Studies (aka BGS) from the University of Michigan which is essentially a computer science degree with minors in English and Philosophy, received in 1980. Since then I've primarily worked as a systems administrator with regular forays into programming, usually to build system administration tools. Let's assume for the moment that a BSc in Computer Science is primarily a practical degree, mostly aimed at enabling one to go and and get a job programming rather than going for the theory side of the world. Theory isn't the main thrust of their degree, but some theory ought to be presented. In the 25-odd years I've been doing this, the *theory* that was presented as part of my BGS has been the most useful part of my job. A course in operating systems course was a close second, and assembly language programming was third. Between these three, I got the tools to understand how computers and networks actually work. By contrast, most new programmers I meet understand a lot more about interfacing to abstract objects. As a result, they understand the abstractions quite well, and have learned the exceptions that result when the abstraction doesn't quite work as advertised. And they're pretty good at learning new abstractions, and at developing them. But they don't understand how computers work. I get blank looks when talking about deadly embrace, mutual exclusion locks, or the difference between O(n), O(n^2) and O(2^n). When their nice scripts halt but don't exit, or take an hour per host to run, they're at sea as to how to fix it or even what's wrong. They think the interface or the abstraction represents the computer, and don't have the tools to take that next step. This problem is even worse with the folks who come out of trade school with sysadmin certificates. They can do what is needed as a technician, but they don't have the skills to step up to the next level -- to the level you're talking about, presumably. They've forgotten that connectors corrode and wire insulation abrades. They don't know that motors create magnetic fields, and the interference frequencies that were innocuous for 100baseT might be deadly to 1000 - or vice versa. In my current position, it's important to know that compilers may read and use 10s or even 100s of files to properly describe an interface. Why does it matter? Because the developers are exhausting the AFS caches that work fine for the non-developers. (Heck, the developers sometimes don't know that the compilers are doing that. So they keep asking for faster machines, or local disk that I have to administer.) In an ideal curriculum, you'd address everything from graphing and queuing theory to basic electronics. You'd learn some brutally primitive tools like adb and brutally exhaustive ones like truss. You'd learn scripting languages and be judged on things like your error handling rather than how few lines of perl you can used. Your classes would include lots of hands-on labs with broken systems to fix. And of course, those labs would contain something new and different every year. Maybe every week. I don't see universities producing that kind of curriculum. It requires a tremendous amount of work, and the labs and practical sections would need revision on an annual basis. Nor do I see students lining up to take such curricula. It's going to be a damned hard row to hoe, and the eternal student complaint of "but why would I need to know this" would be especially loud. For the record, it was 15 years after graduation before I needed to use calculus -- but when I needed it, nothing else would do. It took a while to realize it was a calculus problem at heart, but once that was clear the answer followed immediately. But I use the OS theory on a regular basis. Tapes are now as fast as disks once were, and GigE is faster than memory once was. Understanding that there are hierarchies of speed and performance and knowing how to adapt to them in a system are still the same skills that they were in 1980 and 1990. Attracting students to this breadth of disciplines is especially hard when trade schools advertise 'get your WhizzyWimp certification in three weeks' or junior colleges offer 2-year certificates in UNIX system administration. Students get 'just the facts' they need and go off into the work force. Without the theory they will founder and not understand the system, but as long as pushing the reset button work, they'll get by for a few years. System administration is where theory meets practice with a vengeance. Theory without practice is useless, but at least you've got the potential to learn by doing. Practice without theory leads to fragile heaps of computation and network that have to be replaced rather than repaired. And when they're replaced, so are the sysadmins. Gawd, I feel like rewriting an old line from Robert Heinlein. Remember his remark about what a human being ought to be able to do? Well, here's a sysadmin version of it: A systems administrator should be able to read a manual, write a manual, fend off a user, manage technicians and operators, program and burn a prom, both install and use a trouble ticket system, program proficiently in C, assembler, and lisp, debug a program in a language he doesn't know, use a soldering iron, pull cables and then trace them to see where they actually went, write tools that don't break when handled by others, know when to use hammers on disk drives, be able to tap a hole, understand a policy statement, take an integral, cost-justify a purchase, tell the difference between capital and labor expenditures, determine when a vendor is lieing *and about what*, tell lies and truths for the proper purpose, know when to do which, and know who to ask about the ones he doesn't know. No university degree is going to graduate a student with all those skills. But they may be able to give enough grounding in each that they'll get the rest in practice. That necessarily argues for broader work in theory and probably an internship-based program to get the practice. And it's also most of the work for a CS degree, with bits and pieces of an EE and a business degree. I just don't see students signing up for this when the juco or trade school route gives them immediately employability. Perhaps the route to go is a two-year internship-based MSc with a CS or EE or similar as a prerequisite? Whatever the answer is, I'll be interested in seeing what the University does with it. Best, Steve Simmons