Qualified and motivated teachers have run into roadblocks for as long as the government education system existed. I believe that in recent decades the entire education system from kindergarten to postdoctoral degrees has devolved to the point where no honest person can claim that a new graduate with any credential is necessarily capable of anything at all.

Within this reality there is still a small percentage of students who are motivated and willing to work; and educators who are qualified and eager to help those students become useful people. In my opinion the students and faculty outside those groups are sadly beyond my ability to improve with the tools I have available.

In this summary I present how I do what I can to help the students who want to begin a professional career in Linux system administration (specifically with the OPS145/245/345 courses). Hereafter unless qualified as “useless”, “student” means a student who has a chance of succeeding.

I work from the premise that a student does not necessarily have any technical knowledge or experience coming into first semester. While it’s fair to question why someone decided all of a sudden to go into a field they never showed interest in before: it is also fair to assume they can find the motivation to learn what it takes to successfully practice in the field.

Useful learning with goals in mind

My teaching style is based on my learning style, my technical professional experience, my teaching experience as a professor, and the outcomes of teaching my own children. I find that the most efficient way solve problems is to always be on the lookout for the best tool for the job. Therefore the type of learning which produces the best problem solving techniques is a combination of:

  1. Just enough concepts to be able to choose the right tool/technique to solve a particular problem, and
  2. A lot of practice using tools related to those concepts, until the tools’ capabilities are internalized.
  3. Moving on to the next level of complexity only after the student had an honest chance of completing (1) and (2).

Given the severe time limitations on a student in one course out of five or six in one semester (10 hours a week maybe): much effort must go into choosing the concepts and tools which are taught. There is no shortage of options available.

For any concept I consider adding to a course, I ask myself:

  1. Is this concept comprehensible for the student at this stage, given their learning to date?
  2. Is this concept useful for solving typical problems in the industry?
  3. Will understanding this concept enable the student to understand more complicated concepts which themselves will be useful for solving typical problems in the industry?

For any tool (or tool’s capability) I consider adding to a course, I ask myself:

  1. Is this specific tool or capability useful in and of itself for solving typical problems in the industry?
  2. What’s the minimum that needs to be drilled into the student’s mind so that the student is ready for the next concept/tool/capability?
  3. How many examples can I come up with to illustrate (1) and help the student achieve (2)?

With so little time available: every minute in a lecture or lab or assignment matters. If I’m not sure whether the thing I’m teaching fits the parameters laid out above: I usually don’t teach it. I’d rather err on the side of spending too much time on a more useful topic than too little time on a less useful topic.

Linux system administration

I am an experienced professional software engineer and Linux system administrator. I’ve worked on nearly every sort of Linux system from embedded devices to regular servers to smartphones. I’ve worked with/on custom and off-the-shelf hardware, kernel modules, boot loaders, system libraries, services, applications, databases, and all those combined into complex systems. Though I’ve not been employed in industry for almost a decade: I’ve based my course development decisions on personal industry experience and analysis of other professionals’ suggestions.

This section is not meant to convey dogma. It is the best I could come up with at the time of writing, and it is expected to change with the evolution of the industry and with input from smart people.

First semester – OPS145

Sample weekly schedule:

The student starts their program knowing next to nothing. Though computers and the internet have been embedded into their life from birth: the technologies have been intentionally dumbed down to the point that noone has any idea what a computer is, how to organize files into folders, or what the difference is between a web application and a regular application. A new student today is no more qualified to learn system administration than a new student was 25 years ago.

Depressing as that is: at this point it is not too late for the students to get on the right track and succeed.

I start the semester with an overview of what it takes to succeed, and some fundamental technical concepts: computers, software, operating systems generally, and Linux specifically. No lab in the first week.

In the next week I start pushing students to use the software they’re going to be learning about, while reminding them about the things I told them in the first week: Virtualisation, installing a Linux workstation in a VM by clicking next a bunch of times, using familiar applications in a graphical interface, and looking at a terminal for the first time in their life.

In the next two weeks students learn the the simplest use of a terminal, get an introduction to paths and symbolic links, and the most obvious commands (pwd, mkdir, tree/find, rm, mv, cp). I show the students the horrible vi editor and the absolute minimum needed to edit a text file.

In the last week of new material before the break students are introduced to two shell wildcards, single and double quotes.

In each of the first 5 weeks (except the first) I will ask the students to practice the basics I showed them over and over again. I will make every effort to avoid introducing other commands, unnecessary arguments, and edge cases requiring knowledge not yet covered.

The sixth week is dedicated to catch-up. It’s intended to make up for sick days, holidays, school IT infrastructure problems, and whatever else always seems to happen. In the unlikely event that nothing needed to get pushed back: the week can be used for review and reinforcement. Even the very simple basics taught so far will be very challenging to students who started the program without any prior experience.

After the useless test and the break: The students will get a week for pipes, a week for binary/permissions/logic, and a week for ssh/scp. Each of these weeks introduces the minimum amount of new material and reinforces the use of previously taught concepts and tools.

The last two weeks of material show the students what a shell script is, and very, very, very simple shell programming.

The course ends with a second catch-up week (with review if catch-up is not needed), and the second useless test.

Second semester – OPS245

Sample weekly schedule:

Even in the most optimistic case a student who made it this far, having done everything they were expected to do, having put the 140 hours into learning Linux: will barely be able to do the simplest things in Linux. But they will be able to do the simplest things, and in OPS245 they will to move on to the next level of complexity.

In the first week the students will get a reminder of how to use local virtualisation in order to set up their workstation for comfortable use for the rest of the semester.

In the next three weeks they install three more virtual machines using different methods, start to use the root user, and follow three common ways to install software. Linux filesystem concepts are reviewed via an overview of common system directories. The vague “user” concept is explored in more depth. Permissions are revisited to include experience with different users and the concept of groups.

Week five introduces students to traditional storage-related concepts on Linux, including device files, partitions, filesystems, and mounting.

The only intention of the assignment in week 6 is to reinforce the learning from the first half of the course.

After the useless test and the break: the much more complex but incredibly useful storage system LVM is introduced.

In week 9 the students are reminded about the critical networking concepts they should have learned in other courses, learn how those basics are configured on a Linux machine, and troubleshoot simple but common networking setup problems.

Week 10 is intended to combine much of the learning from OPS145 and OPS245 in order to introduce some real-world security principles. Public-key encryption and ssh key authentication is also introduced for the first time.

Weeks 11 and 12 are currently scheduled for Python programming, but the idea of teaching a programming language in 4 hours of class is so stupid I’m not going to say any more about it.

More service control mechanisms and working with log files would be a good use for these two weeks.

The second assignment, as the first, is intended to reinforce the learning to date.

Third semester – OPS345

Sample weekly schedule:

At this point in a student’s Linux learning they are ready to take on administering real server software packages and applications, but there are too many such systems to choose from.

Instead the students get an introduction to the cloud. Throwing someone into the deep ocean of incredibly complex solutions offered by cloud providers is pointless in the context of a single course, so in OPS345 the students get to dip their tows in using their knowledge from OPS145/245 as a lifejacket.

The intent is to get the students familiar enough with the AWS concepts that they might be qualified to learn something useful in the cloud in a later course.

In the first three weeks the students repeat their VM deployment and network configuration but this time in AWS. A significant amount of time is spent on firewalls, since these have not been used in previous courses.

In the next two weeks the students set up Apache and MariaDB. They reinforce their learning of VM deployment, software installation, service control and firewalls. They learn just enough about databases to be able to set up a typical web application. The web server is accessible by anyone on the public internet.

The first assignment requires some independent learning about rsync, load balancing, and a different way to deploy customized VM images.

The second half of the course concentrates on internet concepts, as they apply to nearly everything today. This includes managing real DNS records for a real domain and using public key encryption with a trusted certificate authority.

Email server and client software is used as a way to reinforce all prior learning through to the end of OPS345, though another common system with equivalent knowledge requirements could be used in its place with equal effectiveness.


Does this teaching method actually work?

It used to work quite well. Even useless students invariably learned something when they had to satisfy the requirement of answering my questions to my face. Now that online “learning” and “testing” promoted by the schools for years has become the expectation: there is no longer a critical mass of students in a classroom to interact with each other and learn from each other.

In the past (given enough effort) it was possible to push borderline students into the successful group, but now those students don’t even show up to class. And we can’t make them.

So I’d say this method works better than anything else I’ve seen attempted. That should not be taken as an implication that it produces awesome results. It would in an environment where those unwilling to do the work fail, but that environment is gone and is never going to return.

Do tests need to be useless?

The utility of testing has been systematically reduced for a long time, and has dropped to zero when online unproctored testing was declared to be valid. You’re welcome to try and push that dead horse back up the mountain, I have better things to do with my time and energy.

What do you mean, useless students?

Once upon a time those teaching were qualified and authorized to determine which students worked hard enough to move on to the next course, or get their final credential.

Those days are long gone, and lacking a 50% failure rate in the first year: half the students who make it to the second year have no chance at all to become successful; and the teachers have no means at all to fix the knowledge gap from the first year.

Even if you were willing to put up with the bullshit from your bosses and ensured the graduates of your course satisfied your requirements: the students would simply pass that course with another professor next semester. It’s intentionally an unsolvable problem.

I suggest you accept reality and concentrate your efforts on the little bit you have control over: the few students left who still have a chance of accomplishing something in their life.

Everything is not for everyone. Success in anything demands a lot of hard work, and not everyone is willing to put in the work. You’re not going to change that, no matter what you do.

You’re mean, all my students are awesome!

Let me know which planet or dimension you’re from and I’ll leave a note for my great grandchildren to congratulate you when humanity discovers ways to travel there.

What about useless teachers?

There is a range of personalities who end up in a teaching position for the wrong reasons. You’re even less likely to fix useless teachers than you are to fix useless students.

The useless students I just ignore. Useless teachers are harder to ignore because I feel bad for the handful of good students in their courses who could have learned something.

Make your courses easy enough to follow so that a good student can still get the minimum requisite learning on their own, and make yourself available to those students. Interactions with such students feel nice when you have to deal with whining all day every day.

But students need to learn XYZ!

No matter what you mean by XYZ: you must first:

  • Decide how long XYZ takes to learn,
  • What the prerequisites are for learning it,
  • Figure out how long those prerequisites take to learn, and then
  • Find enough material in my schedules to remove because it’s less important than XYZ.

When you figure all that out: please let me know. I’m open to serious discussions about valuable learning.

If you start your plan with “we’ll just add it…” then please don’t bother talking to me at all.

You’re an ass!

I live in the real world with my eyes wide open. Join me, it’s a fascinating place and seeing reality is quite rewarding!