Advice On Teaching Linux To CS Freshmen? 467
copb.phoenix writes "I'm a sophomore Computer Science student teaching computing labs to a freshman class, getting ready to go over the major ins and outs of the Linux terminal and GUI. While I have my own ideas and the professor over this class to lean on, I've found it difficult to get the few students that I've tried to teach in the past to connect the dots and understand how it relates to what they already know about computers. Does anybody out there have any advice on how to engage and inspire our upcoming class? (Perhaps important: Our machines are running Ubuntu Hardy.)"
Everything and Nothing (Score:4, Insightful)
how i learned to use linux in 4 days (Score:4, Insightful)
as a basement dweller i seriously needed an anime hookup. i spent 4 days straight learning how to compile programs, then mplayer, then what a codec was, via system libraries, the gui, how to compile E16, how torrents and other p2p worked.
figure out something that drives today's youth with the same vigor, from the subdomain of scholastics. figure that out and you're a rich, rich person.
Re:Start by... (Score:4, Insightful)
Teaching the basics of linux use to freshmen (Score:5, Insightful)
I'd start with a two-pronged approach.
1. GUI. Using something like Ubuntu, although I'm generally a CentOS bigot, teach them how to do all the things they know how to do in Windows: download and install software (using apt, for instance) and how to add an icon to the desktop. Teach 'em where to find applications of interest.
2. Start teaching the command line. There are times when a GUI... anyone's GUI... is too cumbersome/restrictive to do things quick and dirty.
2a. introduce them to 'script' and the concept of shell (batch) scripting.
2b. as an addendum to 2a, above, give 'em an overview of the major shells and explain why Tom Christiansen thinks csh is totally unsuited for scripting.
Don't preach about how much better Linux is than Windows... If they continue, they'll understand themselves. If they fall by the wayside, they never would have understood, anyway.
Re:Lol (Score:2, Insightful)
Spot on.
If you want to confuse the poor windows brainwashed dears then try to teach them the Bash Shell and the Linux/Unix command line. That will only turn them off Linux for life.
Switch it around and find things that make you drop into a shell.
regex - very powerful.
parsing OOTB
Command chaining. - the awsome power of 'sed' & 'awk'.
Do stuff that Windows just can't do. Find the USP's for FOSS/Linux etc
Sell that to the poor dears.
Re:They should already know! (Score:0, Insightful)
Re:They should already know! (Score:5, Insightful)
This is a joke, i hope. It sounds elitist and exclusionary. A lot of great hackers are self taught. But, there a many people who learn by seeking the help of of others. There is nothing wrong with that. Who is to say they don't already know what Linux is? Do *you* know what Linux is and how it works? I've been using it for over 12 years, and I sure as heck don't! I still rely on the knowledge of other people to make the best use of the tools I have available. Some might argue that this is what it takes to be "any good".
Comment removed (Score:5, Insightful)
Beat me to it. (Score:2, Insightful)
These are the types who will mostly not graduate beyond "I can admin a server because I know where to point and click" anyways.
Even the simplest of tools, like vi or ssh, are pretty much beyond them.
Well, what DO they already know about computers? (Score:4, Insightful)
You won't get any sound advice if you don't tell us the background of your students. It is the most important thing in any tutoring class. If they have no idea what an OS is, perhaps you should start there. If they know how to use Windows (and understand what an operating system is actually doing), perhaps you could start by making a comparison of the two systems. Oh, and please, do not start with the "on UNIX everything is a file" thing. This has never, ever, helped anyone at that stage. Perhaps you could make a historical review to show, e.g. that in the before time, DOS was the OS and Windows was a GUI. Then tell them that Linux is the OS and Gnome is the GUI. If they get that, then jumping from DOS to Bash will be easy. And some general advice: If possible, do not guide them through a trivial task as a tutorial to show them how "things are done". I have always found such tutorials boring and uninspiring. Instead, give them a book, a manual, an online link or whatever where they can search for stuff and an easy task to perform. Make it like a competition: "let's see who can figure it out fiiiiiirst!" kind of thing. Also, remember that it has to be something that they can accomplish by looking in the material you gave them. The exercise is not for pumping up your own ego when you come to them after two hours with an answer that they could have never found.
First Time Teaching (Score:5, Insightful)
As a teacher, your responsibility is to help them learn. Remember that learning takes place inside the student's head; you can present the information, but if it they don't learn it, it is not a success.
1) Some people have indicated that the students "should" know certain things. I'm assuming that the class has no pre-requisites, so you shouldn't be assuming that they know anything. Many people who do things like that do so to make themselves feel better; these students are the ultimate newbs, and treat them like you'd like to be treated. Remember that they are not stupid, just uneducated, and they are in your class to correct that.
2) When you give an assignment, make sure you have done it yourself, on a box that has nothing more installed on it than what they will have installed on theirs. Nothing is so frustrating for students and embarrassing for instructors as an assignment that can't be done because something silly wasn't set on their boxes, such as path variables.
3) Remember that things that don't take you very long will take them many times longer, probably 3-5x as long. So if the assignment you give them takes you an hour to do,... You may want to give them that much work, but make sure it's because you planned it, not because you didn't think it would take that long. I would also recommend giving an estimated time, which should be for the average student it class, and tell them that if it is taking them longer, they need to get help somewhere.
4) Read through the assignments carefully, making sure that they are unambiguous. Not just to you, with your great wealth of knowledge, but to someone of the students' level.
5) Plan to spend significantly more time than expected on all this. This includes time in class explaining things that you expected them to know or thought were obvious and outside the class preparing your lectures, labs, etc. Until you've taught a class 2-3 times, there are always time sinks that you didn't anticipate.
Good luck!!!
Re:Beat me to it. (Score:4, Insightful)
Pipes and more pipes. (Score:5, Insightful)
ps aux | grep username | grep -v grep | awk '{print "kill -9 "$3}' | bash
is awesome to understand.
Have them do a dpkg -l on a box and make an install script for hundreds of packages. Have them hunt for credit cards #'s using regular expressions, then pipe those through a cc# validator script (yes how to use a computer for evil-- a nice weeklong break of doing bad things).
Teach them how to use Wget to stalk on facebook... heck that will keep them engaged the most, though it does rack up their dark side force points a little too quickly.
Doesn't compute (Score:5, Insightful)
[...] Teaching Linux [...]
Best thing is to not "teach Linux," but to "teach on Linux."
Re:Teaching the basics of linux use to freshmen (Score:5, Insightful)
Another thing that should be teach to them is the disk space organization. This is quite different from Windows and newbies tend to put everything in a single huge filesystem. They should know some basic principles about LVM and all the kind of filesystems available with differences between them. Not an indept review, but a basic review of what is available and what they can do with this stuff.
Filosophy and history (Score:4, Insightful)
Don't forget to talk about the history and the philosophy; while it might seem less important than getting everything in their heads; motivation is key. Because it's hard. Really hard; for them in the beginning. Motivation is everything. Don't waste your time with complicated stuff which can be easier (such as trying to fill their head with vim as joe is there too - if they like Linux, later they'll come back to vim).
Talk about the hippy-like Richard Stallman who got everything started and what the Free Software Foundation is all about; freedom in a digital future and such. And about the 'other side' within the community with the 'OpenSource' people who just think it's very convenient to be able to work together, but not morally wrong to write proprietary software. Whichever you prefer; 'welcome to the opensource community'.
Involve them.
If you can come up with something which can help them to accomplish something; go for it. Whether it's a LAMP box with Dyndns or something completely different. If they think something is 'stupid', point out that it's OpenSource, so they have the freedom to change it and fix it according to their wishes.
And don't forget: 'Have Fun!'
Good luck!
Jasper
Yo, /. geeks pay attention! (Score:2, Insightful)
He is a C.S. student teaching a freshman lab; nothing in his post indicates that the freshmen in question are C.S. students. In fact, since they're freshmen it's pretty likely they're undeclared. Yet already we see tons of condescending answers that are based on the assumption that this is a C.S. class.
University or Trade School ? (Score:5, Insightful)
My undergrad CS was in a unix-based environment(*). Professors in class taught concepts that could be applied in a variety of different environments. Teaching assistants (TA) in study/discussion sessions taught implementation detail like editors, compilers and other tools for the environment provided by the school - which in this case was BSD, vi, cc, lex, yacc,
So if you are a university and your labs are Linux based, great. Your TA's should help students with all the implementation details of getting their assignment going under Linux. However Linux should not appear in the classroom that much, it is just the tool of the day, more of an implementation detail than a core concept. The university classroom should spend most of its time on concepts that transcend the tools of day, regardless of whether that tool of the day is MS Windows, Mac OS X or Linux; or Direct 3D or OpenGL.
(*) FWIW this was a DEC VAX based environment. I would have loved to have had a Linux or FreeBSD running on my PC rather than having to dial in over a modem from home when not on campus.
Re:Beat me to it. (Score:3, Insightful)
If you consider vi simple as opposed to a complex tool, then Linux is pretty much beyond me, also.
The basic commands are VERY easy. Most people get flustered when they accidentally get into "beep mode." (you'll recognize it when it happens).
It's certainly no worse than debug or edlin were, and those helped bootstrap an entire industry.
Re:Start by... (Score:4, Insightful)
What can you do in Slackware that is impossible in Ubuntu?
In Slackware, you learn how to do things on any Linux distro. In Ubuntu, you only learn how to do things in Ubuntu, Debian, and Debian derivatives. I owe to Slackware the fact that I can sit down and work with any Linux distro out there. It doesn't include its own special tools for anything, so you are forced to do everything the "standard Linux way," which is the way that works on every distro (with some special exceptions, like DSL).
Re:First Time Teaching (Score:5, Insightful)
As someone with long time teaching experience let me give my own version of #1 above:
1) Find out what they know. Survey the class to see what computers, systems, computer-like devices etc. they have had experience with and then you can perhaps take a lesson or two to try and get everyone up to about the same general level of understanding as their fellow classmates (as it pertains to the course of course). After your first feedback do a bit of research and try to find them some extra material for the ones who will need to do the most catching up, for them to read/examine on their own time.
Otherwise you will be spending the entire semester with a set of students who will be having fundamentally different problems learning the same material.
Re:Beat me to it. (Score:5, Insightful)
This isn't flamebait. I teach community college IT courses, and I would agree that if someone's a CS major and has to be dragged into checking out Linux, that person would probably ultimately be happier switching majors.
Re:Beat me to it. (Score:5, Insightful)
Re:Beat me to it. (Score:2, Insightful)
Part of why I can't agree with this is lots of kids will be using the family computer until post-secondary school, and maybe they don't get to fuck with that one or (like my family's computer).
Part of why I disagree is that I've just seen a lot of very successful students who never touched Linux before school, and for most or all of their school time still didn't touch it outside of homework.
There's just so much to be interested in that alternative Operating Systems is kind of an arbitrary measure.
I'm glad you weren't my teacher (Score:5, Insightful)
If they haven't already looked at linux, it's because they lack the innate curiosity to find out more about their chosen profession.
These are the types who will mostly not graduate beyond "I can admin a server because I know where to point and click" anyways.
Even the simplest of tools, like vi or ssh, are pretty much beyond them.
Wow, what an arrogant, asinine point of view. These are college freshmen that we're talking about here. Yes, there's a good chance that many of them have had no exposure to Linux, since statistically speaking, most college freshmen probably come from households which have only used Windows or Apple PCs. They're majoring in computer science because they want to learn about computers, not because they already know about them, duh.
I'm glad that I didn't have teachers, parents, or friends with this attitude. When I started out as a computer science major, I knew my Commodore 64 in and out, but I had maybe touched an Intel-based PC a handful of times. I was dumb as dirt too, and I didn't know a damn thing about various Unix- or PC-based editors. I was motivated, though, so I came up to speed. Believe it or not, you were dumb as dirt at one point, too. Back when vi and ssh were beyond you (and I'm 100% sure that at one point, they were), how would you have liked it had someone told you that those simple tools were pretty much beyond you, and that you probably would never graduate beyond "I can admin a server because I know where to point and click"? Such comments are completely non-productive, and irrelevant to the submitter's question.
Maybe some of them will drop out of CS. Maybe some of them really don't understand what they're in for and will leave. But then again, I'll bet that there are quite a few who are going to college to learn about stuff they want to know, not more about stuff they already knew. Some will undoubtedly be part of the next generation of people who will make fun of you someday as one of those old fogies who can't keep up with the stuff they're working on.
Re:Beat me to it. (Score:4, Insightful)
Correct. You don't have to like linux, or want to use it as a computer scientist, but you should have some basic familiarity with what it is and how it works. I'm a PhD student in computer science and my actual work doesn't take me anywhere near linux, but I need to know what it *could* do for me (or more accurately for my workflow) in case that helps.
Ok, I doubt this will be seen, but... (Score:4, Insightful)
My point is, there's actually value in teaching the inner workings of Linux because there's no guarantee anymore that you'll encounter sed, awk, vi or even a command line just because you're using "Linux".
Re:Beat me to it. (Score:5, Insightful)
Linux is one of the potential components of your workflow as a computer scientist, and one of the major potential platforms for any work you may want to do. A mathematician who spends their life working in set theory still needs to know what differential equations are, and what they mean.
Software engineering is a critical component of computer science, because computer science isn't mathematics, they are deeply related and intertwined, but not exactly the same. Computer science is about what you can do with information, that includes how you organize it. Computer science is both more and less than pure math, and different schools emphasize comp sci very differently, some are right on the metal focusing on building from hardware up, others work from pure math down, (and if you're in the area, waterloo starts at pure math and works down, Laurier which is basically in the same place starts with hardware and works up). You cannot actually implement the vast majority of ideas in computer science without some basic skills in software engineering, nor can you communicate effectively with other computer scientists about what ideas they have, or what ideas you have. Computer scientists and physicists aren't engineers, (and I count myself as both a physicist by training and work and a computer scientist by training now), but you need to know some of their tools to do your job. True, a purely theoretical physicist doesn't use a whole lot of electrical engineering. But a experimental physicist uses a lot of engineering materials regularly. A purely theoretical computer scientist, may use relatively little software eng, but a experimental computer scientist may use quite a lot. In that sense computer science is as much math as physics is, but it's something else too, since experimental computer science is concerned very heavily with how you actually store the information everything that comes with that.
There's also a lot of very real research in software engineering processes as done by computer scientists, the big area at my school that I'm aware of (University of Western Ontario) is in automated software testing and performance analysis. Software engineering is a very real field, but until you try and build software involving dozens of people (not all of whom are programmers), and then try and keep it updated and maintained over many years, it's hard to appreciate how there's science there, but there can be quite a lot.
Computer scientists *can* be programmers, they *can* be system operators or administrators, or something else, and or all practical purposes they have to be minimally skilled in programming and system operation. Please don't confuse job training with academic training. We aim to empower students to learn effectively and give them the skills and knowledge they need to be prepared for a general area (computing), what they choose to do with that is up to them. Some, well, the vast majority, will end up programming or
Re:They should already know! (Score:3, Insightful)
That's exactly the approach that makes most people who try Linux give up after a very short time. I personally tried it twice and found any problems I encountered making things work had no simple step by step instructions on how to fix.
Research and independent learning, not everything is going to be spoon fed to you.
Re:University or Trade School ? (Score:4, Insightful)
A Dad wants to know... (Score:4, Insightful)
....why am I paying $20,000 a year (on the low end) for my kid to go to school and study Computer Science just to have a freakin sophomore teach him?
Major WTF?
Re:Beat me to it. (Score:3, Insightful)
Right on. Most CS students are unaware that they have signed on for math, set theory, relational algebra, etc. They mostly think that they're going to learn how to program games and become rich.
There's also the other subset of CS students who are forced to take beginning CS classes due to their major. Bioinformatics for instance. They really don't have the head to figure this stuff out.
I would say that 95% of the CS students I have taught in lab or tutoring were in above their heads and 60% either switched majors or failed. Some of them failed the CS intro to programming 3-4 times before they figured it out.
You may not realize it, but the 90/9/1 principle applies to CS as well. 90% won't get it, 9% will get through it, and 1% will go on to Masters or PhD.
So, the best way to teach CS students about Linux is to wrap it up in a series of lectures that include different OSes such as Windows, Linux, Mac OS, DOS, etc. That's probably the only way to get them interested (most will gravitate towards the pretty ones).