[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Free GNU/Linux intro class for teens advice? Purchase box? Squeak/Smalltalk programming



On 07/06/2015 08:12 PM, Marc D Ronell wrote:

I am  working toward  teaching a free  introductory class to  teens on
GNU/Linux  and the  philosophy of  free  software at  the Newton  Free
Library in MA this coming September.

For the class, the participants  will need access to GNU/Linux.  After
reviewing   some  options,   including   sdf.org,  virtual   machines,
Chromebooks,  etc.,  I  am  considering just  asking  participants  to
purchase a dedicated  laptop and installing the OS.  I  may be able to
direct students to install fests  in the area before the class starts.
I am  not sure that this is  the best idea, but  it offers significant
advantages including a potentially working  box as part of the results
of the course.

As a test, I purchased  a laptop (Toshiba Satellite C75-B7180) on sale
for $350  at our local Microcenter  in Cambridge and was  able to load
GNU/Linux  for my  son.  I  am  thinking of  working some  programming
assignments in Squeak (Smalltalk), but  maybe C is a better choice for
an OS class?

Has  anyone tried  running a  GNU/Linux  intro class  for teens?   Can
anyone  share their  experiences, thoughts  or  suggestions?  Feedback
based on actual experience would be most helpful, I think, but I would
appreciate any insights.

Thanks for your thoughts,

Marc

Having watched what newbies-- and experienced computer users-- get confused or clueless about, and having designed and taught CS and programming courses at various levels, I guess I could say I've been down this road before.

As concerns hardware, I'm going to assume that the school has a computer lab. You'll need to have a look at it to see what's there. But if at all possible, I'd use a Raspberry Pi as a platform. Installation of the OS is easy. Students can get more than one memory card and so boot up a completely different system just by swapping the card. And of course it's cheap. If students' spending $350 for a laptop for this class is in the realm of possibility, then buying peripherals for home use certainly would be. But it's likely that they already have most, if not all, of the peripherals at home already.

As an alternative to logging into the Pi directly-- and/or in addition to it--, your students could log into their Pi's remotely (even from a Windows or Mac). This in itself would be a good learning experience for them as well as reduce hardware they'd need.

As for course content, I'd emphasize visiting a lot of rudimentary systems work and so then too much of the terminology... in a practical way. The first class, after installing the OS, I would start with the basic unix/linux/gnu commands: ls, cat, less, rm, mkdir, rmdir, file, cd, pwd. They'll need to know some editor they can use in a terminal window; vi is the obvious choice and the most used. So they should at least know what vi is, even if you think it's too quirky of an editor and decide to use something else. So they don't think it's going to *all* command line stuff (though a lot will be) have them launch GUIs for email and web browsing and perhaps other apps they well understand already. Show them too the terminal-friendly mail and web apps. These might be useful later on.

Then explain the client/server and have them set up a web server and mail server and use them-- their own and each other's. These should already be installed and pretty much configured for them. I'd think they'd find it pretty cool to have their own web servers (accessible to others in the class via IP address). If they can send email to themselves, great. Even better if they can send email to each other, again, just using their userid and IP addess.

This will bring up the topic of networking, IP addressing, what a DNS and DHCP are, remote applications, remote login, the notions of local and remote, different network protocols, and commands to look at and exercise these... ping, telnet, ssh, scp, traceroute, nmap, etc. It would be great if the students could routinely have all their machines on one network for this. (If the lab doesn't have a large enough switch-- with enough RJ45s--, the students might need to get a $9 wifi dongle for their RPi's.) They should know a little about the init process, just to see who the system as a whole gets started up, and show them where the log files are and what they look like (a good time for the 'tail' command). This of course will bring out the topic of security, the difference between a regular user and root, groups, and all the permissions and how to set them. Have them set up accounts on each other's machines just so that they know firsthand about remote login. You've already showed them 'ls' at the beginning; now they'll see the importance of 'ls -l'. Have them change httpd.conf to allow the students to create web pages on each others' servers. First they can do a simple text file. Give them five minutes on basic html tags and let them create better formatted web pages. If they could then pull up their web pages from their own and other students' webservers on their phones, I think they would enjoy that a lot.

As for programming, personally I'd show them bash and C. Bash is easy and your students aren't going to get into tricky edge cases the first day... or if they do, they'll learn about error messages, which they should encounter anyway. I pick C and bash because so much of gnu/linux is built from those... also because you can show them the difference between interpreted and compiled languages and the several files which C produces and needs. But I wouldn't spend but a day on programming. It can get very complicated quickly and, IMO, emphasizing networking will be more fruitful. Computing these days *is* networking... more than ever. It's easier to learn than programming, but not often learned. Generally normal users (in this US anyway) are remarkably ignorant about networking. I'd pick C and bash also because they've been around for a long time and will continue to be. On the other hand, I can't count the number of programming languages du jour which have come and gone within five or ten years. Why teach a language which no one will be using by the time they're good at it? Have them do "Hello, world!" in bash and C. Have them download some C source code and compile it. Make sure they encounter error messages so they're not freaked by them and know they need to go back in and fix things. Show them there's tons of docs and tutorials on the web. Let them know that there are dozens of other programming languages. And that's about it. It should take one class period. If they have more interest, they can do that at home, with a local Linux group, or in your next class (devoted specifically to programming).

One other thing you might want to bring up in relation to programming is the gnu/linux ethic. That all the code for all the programs etc. on their machines and millions of others have been written by people who have done it for free and given away for everyone else to use and adapt and learn from. Same for the documentation. I think most kids already know about mailing lists and forums, but these should be mentioned anyway, just in case.

* Obections

Ideally, so the students can practice networking at home, they should be able to connect their Pi's to their home networks. In the controlled environment of your lab, this shouldn't be a problem. But in their separate homes, there will be a lot more variables. Personally, I had no problem doing this myself, but I'm not an intro-level student. I don't even remember doing the network setup, it went so fast (and I set mine up for static IP, not the norm). So they should go home from the first class with instructions to print out their network configuration at home (e.g., at least the IP address, netmask, gateway address, of their home-connected laptop or whatever) to have some clues you can give them for connecting their Pi's at home. Maybe there'll be no problem at all. But like I said, there are many variables involved and you won't be there to help them through it.

This is a lot to cover. But better too much than too little. Your hand-outs will allow them to work/play with everything at home. And intro class of this kind is about exposure, so they realize what's there and are a bit familiar with it. Links to web docs in your handouts will fill in some gaps too. All of what I've mentioned are things everyone-- at least everyone in the upcoming generation-- should know and which most people today don't. This is why there are teachers.


Good luck and keep up posted on how the class goes. Maybe your class will have a group website or blog?


Reply to: