If you’re trying to learn System Administration, Software Development, or any other complex technical skill, you’re probably going about it in the wrong way: lots of theory study, and very little practical work. In this article, I’ll show you the right way: a faster and more effective way to learn, backed by the latest scientific research on learning.
This is just how most Linux and programming courses are structured. After all, there’s a huge theoretical foundation that you need before you can become an effective professional in those highly technical fields. Why not start with lots of theory right away, to get it out of the way and enable students to understand the concepts which are built on top of those theoretical foundations? Wrong.
Doing it Wrong
The problem that most books and courses have is that they imagine a perfect student who has a never-ending supply of motivation and never just abandons ship when things get boring. This perfect student doesn’t exist, or exists so rarely that optimizing for that student is just silly.
For example, a great way (theoretically) to mint a brand new sysadmin is to
- Start with Linux operating system theory.
- Dive into all the ways to get information out of a running Linux system and learn a solid troubleshooting methodology.
- Memorize the TCP/IP RFCs, along with the RFCs for HTTP, DNS, and a few others.
- Learn Bash, start programming Python, and master configuration management system like Ansible or Puppet.
Following this curriculum, which is a variation on the one usually found in “Intro to Sysadminning” books and courses, is a great recipe for having 95% of the audience simply drop out somewhere in the first few weeks.
Tech people often have a great, narcissistic excuse for this: “Most people just can’t hack it with the complicated technical skillset that I’ve learned.” I think this is egotistical BS and special snowflake thinking, which just serves to hide a bad teaching methodology that’s been accepted as ‘normal’ by the community. It also serves to make ‘insiders’ feel like they are more clever than they really are.
Most students are real people, and have real lives which demand their attention. An existing job, spouse, kids, and other commitments make the perfect, ever-motivated student impossible.
Learning theory (even interesting theory) is often a boring process. There’s a lot of sitting, reading, memorizing. And after spending weeks of their free time on theory, students don’t have much to show for it. This slowly drains the motivation and willpower that people need to come home mentally drained from a crappy job and sit down to study.
Motivation can often be used as a substitute for interest: if you’re really motivated to get something working, you’ll endure a bit of dry reading in order to fix whatever problem you’re dealing with and get on with your project.
Practical Learning Projects
Practical tech projects, done as an intentional learning exercise, are the easiest and fastest way to do almost everything that modern learning research tells us to do. In Make It Stick: The Science of Successful Learning, the authors give a few pointers that make learning insanely fast and effective. Here’s the basic advice from the book, and how it fits well into project-based learning:
- Interpret/Elaborate/Infer from the material you’re reading to improve learning. In a technical project, you’ll generally be researching small problems that crop up and applying the material/theory/StackExchange answers you’re reading to your current problem. This adaptation is a process that supercharges your learning.
- Find the underlying rules/principles in the material you’re studying. The way I’ve started to incorporate this into my own teaching is to introduce topics in a practical way before starting on the theory. For example, in my basic Linux System Administration course on Udemy, I introduce the reason (having a working webserver for our sites) for doing something (configuring the nginx webserver) before starting on the theory (how HTTP works, and what clients and servers are actually sending back and forth when you visit a website). Everyone’s instinct, including mine, is to do this exactly the opposite way, which makes learning and retaining that knowledge much harder.
- Allow yourself to forget some of the information before coming back to it for review. Taking a break for a few days is a great way of doing this. When you’re setting up a WordPress hosting platform, you’re setting up an actual, useful piece of infrastructure that lasts longer than the course. This means that you’ll be forced to do maintenance and troubleshooting at some point after you’re done with the course material (days or weeks later). Since you will have forgotten big chunks of information during this time, your review of the material that you’ve forgotten will be extremely effective. Since you’re solving an actual problem at this point, you also only review the information you’ve forgotten (the other stuff you’ll just know how to do, so you won’t have to look it up).
- Mix different subjects together. This is counter-intuitive. Students often complain about teachers when they do this: “as soon as I feel like I’m finally getting a handle on subject A, we switch to subject B and I’m back to barely keeping up again…” This is actually the most effective way to learn. The temptation is always to avoid this: “First, I’ll start a course on bash and Linux basics. Then I’ll get a book on nginx. Then, I’ll look at some tutorials for setting up php-fpm and PHP. After that, I’ll study automation, security, disaster recovery, etc.” Don’t do this! A project is a great way to mix together 10-20 discrete skills into one delicious melting pot of brain overload and learning.
- Move on to new material before you’ve mastered the old material. This actually helps your brain find connections between topics that you wouldn’t have found otherwise, and improves recall. It feels weird and wrong, but don’t trust your feelings on this. Only trust the results. A project is a natural way of doing this, because there’s no time to stop and master nginx before moving on to configuring the rest of your hosting platform. Projects naturally force you to cycle through different skills, gradually getting deeper into each one as you revisit it.
- Quizzes that test your knowledge cement the information that you’ve learned. They are an essential part of learning and studying material; DO NOT SKIP THEM. Udemy and other online learning platforms are great for this, since they allow for quizzes at the end of a lesson, section, or course.
Mistakes to avoid
Or, things that feel right but are terribly wrong:
- Don’t try to study by re-reading material. This is a waste of time in most cases. The material will feel “familiar,” because your brain recognizes that you’ve seen it before, but it doesn’t actually help with long-term recall.
- The more you feel like you’re struggling while learning, the better it’s probably working.
A Linux Course that puts the Research into Action
I’m trying to apply all this research to the new courses I’m working on. The first one is my Hands-On Linux: Self-Hosted WordPress for Linux Beginners course on Udemy. That course has about 8 hours of video material right now, split into ~70 lessons. Take a look and see what you think (there’s almost an hour’s worth of videos that you can watch for free)!
Let me know if you’ve got other useful learning tips in the comments.