This is a story about arcane knowledge, about one reason why computer science classes are hard, and about how a wasted day ended up paying off three and a half years later.
Walking a tightrope
I’d just graduated from high school, and was at home during the summer. Now, mind you, I really wasn’t an outgoing or active kid then, so I spent a surprising amount of time alone at home.
One day, while learning more about this strange and wonderful major called “Computer Science” that I’d chosen for college, I came across a comment written by someone who told me they were an Experienced Software Engineer and that I absolutely should install this thing called “Linux” on my computer and that I should become familiar with the “Terminal” because that would be important for becoming an Experienced Software Engineer just like them.
I searched up some instructions, and replied that it looked pretty hard, and all the guides said it could seriously mess up some of my precious digital memories. Besides, I was perfectly happy with the way my computer worked.
They replied quickly. They said it wasn’t supposed to be easy, but if I was serious about becoming an Experienced Software Engineer I shouldn’t give up at the first obstacle I ran into. And it’d really pay off, they promised.
But the instructions were hard to follow, because most of the tutorials were out of date, or missing steps, or for different laptop models. Half the videos online were taken on cameras so shaky you’d get dizzy by watching too closely and that was if the videos were in a language I could understand.
Eventually, though, I pieced together a plan: all I had to do was download some sketchy-looking tool onto my computer and get my hands on a “bootable ISO” for “Linux” and make a “bootable USB” and “go into the BIOS” and “boot from USB” to install a new operating system and finally I’d pass my first test on the way to becoming an Experienced Software Engineer! Simple enough, right? After all, I messed around with the settings on my computer all the time and figured I knew my way around a laptop. I figured I’d be fine.
It took me an entire day to figure the whole thing out from start to finish.
Booting from USB is straightforward for someone who’s done it before, but there were tons of things that I’d never heard of and the tutorials never mentioned. It can be worrying when your most promising resource is a video with only a hundred and fifty views and no comments. It can be really scary when you see the BIOS for the first time, and then be told you need to configure settings with beginner-friendly names like “Secure Boot” and “UEFI”.
It might look ugly, but one thing the design does well is communicate “BE CAREFUL WITH THIS” extremely clearly.
At multiple points, I wasn’t sure if I’d have a functional computer by the end of it all and just had to hope that I wouldn’t blow things up too badly. It felt like walking a tightrope with no net. It might’ve been the warm summer day or the tension in the air that escalated with every setting I toggled, but I’d sweated through my shirt by the time I’d finished installing a new operating system on my computer.
That night, I took a shower and didn’t even touch the computer again that day. I went to bed hoping that everything I’d gone through to install Linux would pay off.
And pay off it did. Over the next few years, the scraps of knowledge I’d struggled for came in handy in so many unseen ways. Little shortcuts here and there, small boosts and useful knick-knacks. If a degree in computer science is like running a marathon, then my pile of experience acted like a pair of sturdy, comfortable shoes. They won’t do the work for you, but it sure beats having to run in flip-flops.
It’s really easy to forget how much of our knowledge we take for granted. To me, when I first figured out how to install Linux on my laptop, the terminal excited my imagination like nothing computer-related had. It felt like a window into the deepest thoughts of the electrical brain sitting on my desk.
But what about a first-year undergrad, who’s never taken a computer science class in their life? A student whose first programming homework is due in three days, and this is the first time they encounter an unblinking cursor floating alone in an ocean of black.
If you stare into the terminal, the terminal stares back at you.
Quite a lot of people who are familiar with computers are surprised when they hear that many first-time CS students worry if typing the wrong thing will break their computer permanently. It’s possible to mess your computer up, of course, but you have to really go out of your way (and definitely outside the context of an introductory CS class) to do some serious damage. But new students don’t know that! To them, their computer can easily start looking a lot like something that might control a nuclear submarine rather than a safe sandbox to learn the basics of programming. Students might be inexperienced but they aren’t stupid. They’re aware that not all mysterious black boxes are things you dive into head-first.
Students aren’t stupid, but without the giant snowball of random computer knowledge that many of us accumulate over the years, it’s really easy for them to feel like they are.
Three and a half years since I’d first installed a new operating system, well into my time in college majoring in computer science, I encountered an assignment for a cybersecurity class that required us to boot Kali Linux from USB.
I started to notice something really strange: many of the groups working on the project got quite stuck on this step, running into all manner of technical difficulties. On top of needing to figure out the OS part, they also had the challenging assignment to deal with. To make things worse, the assignment was pretty much sequential so they couldn’t start working on anything else before they got the install to work.
For me it was just tapping a few buttons and I was off to the races, but it only came so easily because I’d spent hours on a sweaty summer day, sitting alone in my room, watching video tutorial after video tutorial, trying to get the stupid tutorial to work.
Computer science classes are hard. They’re hard for multiple reasons, and not just because the material taught in class is hard.
Knowing how to boot Kali Linux was useful, but so was being comfortable with the terminal and all sorts of stuff that doesn’t seem to ever get taught in class. In a lot of cases, it’s just assumed that all the students are proficient in little things like being able to move files around, or use SSH, or version control, or know what a server is.
At this point, you might’ve noticed that having a big ball of computer knowledge sounds like having a superpower. If you have the superpower, it seems so natural and you can’t figure out why anyone else struggles with it. If you don’t, the laws of computer world seems like magic beyond your understanding.
But you’ve read the post about superpowers and know that it’s something that only seems magical. It only feels impossible to learn, but in reality it is possible to build up that base of knowledge. It takes time but it’s not impossible. Not everyone starts from the same place, and I’m not claiming that the playing field is level, but the gap is less insurmountable than people think. And strangely, it’s rare to hear someone describe this process explicitly in CS classes. One of the rare exceptions to this is MIT’s Missing Semester class, which is devoted specifically to filling in all these gaps. But classes like these are regrettably rare.
The little details matter. The little details especially matter at the introductory level. It’s brutal to encounter twenty-three package management errors two minutes into learning your first programming language, but that’s the reality many students face.
If you’re majoring in computer science, or maybe majoring in something else and just taking a class or two because you were curious, and you’re struggling because of all sorts of things that seem unrelated to what you’re supposed to be learning, I hope it helps to know that things don’t stay like this forever.