You can write shell scripts in mere seconds, hack the kernel in your sleep and perform other feats of Linux wizardry—but can you teach?
I love teaching Linux. Whether teaching introductory-level courses to people new to Linux or teaching advanced best-practices courses to experienced administrators, I hear common feedback. Most Linux instructors are good, but we can be better. There are common problems with Linux training that most of us have experienced or will experience at some point. I'm convinced that there also are common solutions. After hundreds of hours spent in the classroom, there are a few key concepts I'm convinced will make committed Linux instructors as awesome as the operating system we teach.
If you're interested in taking your practical experience to the classroom or if you already have a role as a mentor or teacher, here are some keys that will help you improve your students' experience.
Linux is no longer a technology for counterculture geeks and hackers working in their parents' basements. Linux professionals, including trainers, must present themselves as real pros. That means taking an interest in all students' successes and engaging them as clients. I do consulting as well as training. No good consultant would think about walking into a client's site, opening a terminal and typing away at random. First, the consultant asks questions about the client's objectives, understands the environment and only then starts working. A good trainer approaches the classroom the same way. We don't just open the book, fire up the slides and go through the motions. Instead, we focus on the students.
Focusing on students means understanding what they need from the course. Why are the students in the course? What are their learning objectives? How can they leave feeling that the course was a valuable expenditure of their time and money? A good instructor finds the answers to those questions and then tailors the course to fulfill the students' expectations.
A trainer also has to look inward. A real professional trainer never appears condescending or detached. The pro trainer fosters an inviting classroom environment that makes all students relaxed and comfortable to ask questions. We've all experienced bad training. The instructor was perhaps more concerned with showing how much he or she knew rather than with transferring the knowledge. Or, the trainer might have just read slides (in monotone...“Bueller, Bueller, Bueller”) for hours.
I've been the student in those situations. In either case, the instructor has forgotten a key element of the classroom experience. What he or she has forgotten is that a classroom environment is designed to be interactive. A good instructor expects to have a conversation about the topic with the students.
An increasing number of enterprises are adopting Linux-based technologies for mission-critical business functions. As they do so, more existing system administrators are transitioning from other operating systems like Windows to Linux. With a growing number of students coming from Windows system administration, we have existing knowledge on which to build. We should use that to our advantage to help students understand the Linux-specific applications of standard system administration practices. If we focus on the common ground we already have with the students who have professional IT experience, we automatically become better instructors.
One of the biggest mistakes made in Linux training is just teaching lists of common commands and options. Teaching that way is boring and ineffective. Teach concepts. An experienced Windows admin knows how to manage users, modify file permissions and schedule automated jobs. So, instead of jumping directly to describing useradd, chmod and cron, speak first about the common concepts involved in accomplishing these tasks in either operating system. Help the students understand the philosophy behind the way things are done in Linux. Only after those discussions, introduce the commands.
The command line is very intimidating for Linux newbies. What makes any subject less intimidating to learn is understanding the patterns involved. By “patterns”, I mean the common concepts that carry throughout any application of a particular topic. For instance, most good Linux courseware starts with an early module discussing the command-option-argument pattern of the Linux command line. A good instructor helps the students apply that to the lab environment. Let's take that idea a step further.
For instance, several potentially destructive file management commands (cp rm, mv) have an option to make them less destructive. The commands have a common option to make them prompt the user before completing a destructive action. The option is -i. Of course, many of us who have used Linux for many years take this simple fact for granted without ever wondering why -i is the option used. Take a look at the man page. It states that -i puts the command in “interactive” mode—thus the prompt.
You might ask, “Why does it matter?” In this example, it matters, because if we're teaching a class of people who are used to being prompted before a file deletion takes place, they will be wondering, “How can I make this command prompt me in case I make a mistake?” By knowing what the -i option stands for, the instructor can explain the reason or pattern for the -i option's behavior. When you know why -i was chosen for an option, it becomes much easier to remember.
The same can be true of using -v to make commands verbose, -h to make file sizes human-readable and so on. Explain what the option means and how to use it, and provide examples as patterns for students to imitate. Demonstrating and explaining the pattern to common command syntax is the first step in transforming the command line. A good instructor transforms an intimidating black terminal with a blinking cursor into a powerful ally of the Linux newbie.
There is a disturbing practice in mainstream IT training. For many technology fields, certification equals experience or know-how—not so in our world. Certification is not how we measure experience in the Linux world. Linux experience is measured more by how many distributions a person can fluently administer, whether or not they are intimidated when they have to compile a binary from source, or if they are able to script repetitive tasks easily.
My point is, it is not uncommon to see trainers for many of the large training companies have a very long list of industry certifications ranging from basic desktop troubleshooting to “security” certifications. Adding a Linux certification to a long list of certifications does not make people experts, nor does it make them qualified to teach. It simply means they were able to pass another test. Even worse, if the exam does not have any practical portion where examinees are challenged to accomplish various administration tasks, it proves only that they are good test-takers.
Real work experience matters more than passing any exam. Although I carry a number of Linux certifications and teach many certification classes, my ability to answer the real-world questions my students have comes from my experience in production environments. Being able to turn slides about scripting into an interesting dialogue about working efficiently in Linux comes from long nights in the data center. Explaining how to use Linux in real development projects comes from working in development labs using Linux.
If you intend to begin teaching Linux, please don't try to know everything required to pass some certification. Instead, become more of whatever you already are. By that, I mean if you are the person who can write complicated iptables chains on the fly, think about how you can teach that to others. Perhaps you're the “go-to” geek for resizing logical volumes or attaching SAN storage. Figure out how to take the experience that has made you valuable in production environments and transfer it to the training center. Sure, there is a necessity for an instructor to be familiar with all the topics of a course; however, the value of the instructor comes from his or her depth in a few topics upon which he or she can expand and make a real impact for the student.
I stepped away from Linux system administration and training for a while to pursue a different business and investment opportunity. When I came back, a few things had changed. Due to package management utilities like apt and yum, dependency hell was a thing of the past for the average user. All the previous courses I taught before my hiatus focused on rpm or dpkg, and I got quite good at showing students how to resolve dependencies. Now, my experience was outdated and not as useful.
This taught me a valuable lesson. Don't let the only time you touch Linux be when you're in the classroom. Don't wait until you're preparing to teach a course. Stay current. The single best way to stay current is to have real work to do. So look for some clients, large or small, that need system administration help. Build a sandbox out of an old PC or a VPS. Try to learn a new programming language on a Linux server. Do whatever it takes to keep your experience fresh.
The result is that you'll understand what students are going through in the real world. For instance, I discovered the change to resolve.conf management in Ubuntu 12.04 the hard way. (Sure, I could have read release notes, but who has time for that?) After editing the resolv.conf file several times with no success, I finally spent some time reading how to use the resolvconf utility. Now, instead of looking at students with a blank stare when they mention this change in the most recent LTS version of Ubuntu, I can speak intelligently about the topic.
Am I up to date on every distribution and every change? Obviously not, but I'm not in the dark either. According to students, training managers and several of my consulting clients, that is what makes a good trainer great. They stay active the field. Sure, you could spend all of your time in the classroom, make good money and keep students relatively happy. But, you'll feel more knowledgeable and be better able to accomplish the previous three keys if you spend time practicing your craft and staying current.
Think back to the first time you sat down at a Linux or UNIX console. Mine was around 1996 in a summer class at a local college—IRIX on an SGI Onyx. I found the unfamiliar interface intimidating. I've now come to love the terminal.
If you felt any measure of trepidation your first time in a Linux or UNIX classroom, remember that when you step in the room to teach others. Be sympathetic. Make the environment relaxed. People don't learn well when they're fearful. Crack a few jokes (not too many, you're not a clown). Bring in some donuts mid-week. Tell one or (an absolute maximum of) two personal stories. Become a real person to the students. Let them see you as a new friend who sincerely wants them to be comfortable in the new operating environment. It helps tremendously if that's how you really feel.
Think back to the worst training experience you ever had in Linux or UNIX. Mine was in 2002 at my first job out of college—IBM Systems Group storage development labs. An engineer I worked with had me type long commands with multiple options, redirectors and pipes...with no explanation of what each fancy symbol did. I did my best to write each one down. I spent hours frustrated, not understanding why I was typing these long commands and experiencing unnecessary failure.
If you've ever asked the question, “What does that command do?” or “Why must that option come last?”, and you didn't get a clear answer, remember that when your students ask you questions. Better yet, be clear enough in helping them understand concepts so they don't need to ask. If teaching a complicated topic, walk them through each step and help them understand what is being done and why. Don't move on until you're satisfied that a majority of the students understand. If the majority are still confused, you didn't explain the concepts well enough and you're not done.
Think back to the most tedious, irritating, monotonous task you ever did only to find out later that it could have been made much easier if you had been properly trained. Mine was working with another engineer who wrote down 60–100 worldwide port names (similar to a MAC address) for several external storage devices then typed each in manually when configuring LVM on HP-UX. He typed a command to get the code from the system, wrote each 16-digit hexadecimal code down on a piece of paper, and then typed back in manually as an argument to another command. If any mistake was made, the command took 1–2 minutes to alert the user to the error.
If you ever realized that the right training could have made you love scripting and learning new Linux utilities after it was too late, and you wasted eight hours of your life doing something the hard way, make that experience different for your students. Many of them already work hard. Help them work smart too.
Instead of manually typing in each 16-digit hexadecimal code for each of the LVM configurations I mentioned earlier, a Marine taught me better. He was former special forces and a disability caused him to return to a lab job. His military training had taught him to work efficiently and not waste effort. When he showed me the right way to accomplish the task with less effort and less human error, I was amazed. It was the first time I saw cut, grep and a for loop used in a practical way. He made me love *NIX. Instantly, I realized how to teach other people. Work on real problems. Show real solutions. Teach concepts.
By engaging the students, teaching concepts and keeping our real-world knowledge fresh, we can be better professionals and better trainers. So if you've been thinking about becoming a trainer or you already have some training responsibilities at your job, follow the keys above. You'll provide quality experiences to those you train and save the next generation of Linux disciples the pain many of us have experienced.