In January 2014, my husband, Kevin, and I started a new together project: Harvard’s MOOC CS50. This wildly popular, college-freshman-level course is supposed to be a beginner’s guide to computer science principles and coding using the programming language C. Generally, it is a well-planned program, with lecture videos, tutorials, walk-throughs, etc. It even has its own Roku channel, where you can watch the lectures from the comfort of your couch when you get tired of staring at your computer screen.
As a college graduate interested in learning to code, I thought, “Surely I can handle a freshman-level course!”
Spoiler alert: I couldn’t.
The first week or two were fine, but it bothered me that the lectures were major stage productions. The instructor would strut around the stage like an off-Broadway actor, filmed at several angles by multiple cameras that made sure to show off not only the decadent theater hall that, had I not known better, could have been the site of Abraham Lincoln’s infamous murder but also the hundreds of eager students who took notes furiously and laughed at the appropriate times — just like a studio audience. These issues — among a few others that, were I to list them, would make me sound like an even worse person for judging a free class from an Ivy-league university — clouded, rather than enhanced, my learning experience.
The other thing that detracted from my learning experience was the fact that CS50 uses C as its base programming language.
In programming, languages are sort of separated into two families: low-level and high-level languages. Low-level languages provide little or no abstraction between the language and the computer’s instruction set architecture (i.e., machine code, assembly). The language’s commands map closely to the machine’s language. By contrast, high-level languages are very abstract compared to the machine’s language. Generally, high-level languages (e.g., Python, Visual Basic, PHP, Ruby) are easier to use and tend to automate or mask more important functions of computing, like memory management, ameliorating the development process.
In the 1960s, C was considered a high-level language. Now, as programming languages continue to be more and more of an abstraction of machine code, C is arguably a low-level language, or at least a high-level language with more access to low-level programming functions than most high-level languages. Perhaps it is safest to say it lies somewhere in between — a medium-level language.
Arguably, because C is lower on the scale, it is more difficult to learn — at least, I thought it was. In quick succession, I was learning memory management as well as programming logic as well as C syntax. Some people argue that C is one of the better languages in which to learn programming because of these things. For me, however, it was a lot to take in, especially since I had only ever dabbled in simple HTML commands to improve the look of my LiveJournal.
So I did something really uncharacteristic for me: I gave up.
Admitting I couldn’t do CS50 was really hard for me. I’ve never had to quit something that was intellectually challenging. From calculus to physics, I’ve always done well (albeit not without some struggle) in my math and science classes. Granted, I’d never taken an online class AND taken a class while working full-time. While these seemed like good reasons to lose interest in CS50, the truth was that I just thought I couldn’t hack it (no pun intended).
And thus began my multi-year dread of programming. For me, attempting to learn programming again represented another opportunity to fail. I had tried it once, it didn’t work out, and that was it. I was just going to have to find something else computer-related to put my mind to.
In August 2015, I started working toward my master’s degree in Information Systems and Operations Management at the University of Florida. For this degree, students choose one of three tracks to follow: IT (i.e., programming), supply chain, or business intelligence. For the sake of dodging as many programming classes as I could, I chose supply chain, even though it wouldn’t matter what I chose until my third and final year.
While I put all of my efforts into avoiding programming, Kevin put all of his into learning programming. It seemed like, overnight, he was making little programs: sitting in the dark of our home office, blasting avant-garde techno from his Gemini headphones, spending many hours debating the merits of a for-loop versus a while-loop, and yelling at anyone who dared interrupt his thoughts. I admired him; he stuck with something I couldn’t.
During this time, Kevin found a programming aptitude test online and decided to give it to me. It goes something like this:
a = 10
b = 20
a = b
b = 5
What is the value of a?
Sadly, I failed. (Looking back, I don’t know how I failed, but I failed.) I threw myself upon my bed dramatically, feigning tears but taking this as a sign that I was, in fact, not destined for programming glory. Kevin gently explained where I went wrong and that, since I understood his explanation, I could still be a programmer. Apparently, some people never understand this assignment problem, even after hearing the explanation.
With each passing month, Kevin encouraged me to learn programming. But between working full-time and my hectic school schedule, I didn’t have the time. And while programming continued to frighten me, I had no problem choosing and then crushing the hardest business electives in my program: two semesters each of Accounting and Finance.
It wasn’t until January 2017 that the tides started to turn in my relationship with programming. First, Kevin, after studying programming for only a year and a half, had earned a great job as a software engineer. I was very motivated by the fact that, if I worked equally as hard, this could be my future too. Plus — let’s be honest — employers are always looking to diversify their rather male programming workforce.
Second, I knew my own programming classes were approaching (here’s lookin’ at you, Fall 2017), and I didn’t want to go in on Day 1 not having written anything more than a print statement.
And, after discussing my programming blockage with my close friend, James, he sent me the following message:
Hi! I just wanted to encourage you to check out the programming side of things. I’m confident you’d be good at it.
When you hear your parents and husband tell you you’ll be good at something, it’s hard to believe them because they love you and think you’re good at everything. When you hear friends encourage you, knowing they have no ulterior motive to do so, it’s more eye-opening and believable. Thus, James’ words inspired me to give programming another — and much better — try.
Through edx.org, I enrolled in another free programming MOOC: Georgia Tech’s Introduction to Computing Using Python. Using a higher-level language than C, this course is taught at a slower pace, with more modest, digestible video lectures and shorter exercises that helped reinforce the material. I found Python to be very accessible and, compared to C, a much better start to learning the basics of coding.
Feeling a renewed sense of interest in programming, I emailed my advisor at UF and informed her that I was changing my focus from the supply-chain track to the IT track. I figured if I’m going to do this programming thing, I might as well challenge myself to the fullest. (#YOLO)
Around March, I received an email from Kevin entitled “Stop being a code wuss” with a link to HackerRank’s 30 Days of Code. Taught in and geared toward Java, I was nervous about learning two languages at once, but I discovered that Java is relatively straightforward too, and I’ve really enjoyed 30DoC.
While I’m still a very baby programmer, I feel more motivated to learn programming than ever before. The challenges in 30DoC have been mixed — some really simple, others quite difficult — but the experience is very rewarding and has taught me so much in such a short time. I plan to spend the summer finishing the Python class, keeping up with this blog, and embarking on other challenges on HackerRank. Coding is still slightly elusive and scary to me, but I at least have a little more confidence that I can handle the challenges that lie ahead.
I’m sure I’m not the only person in the world who has tried programming only to find it intimidating and terrifying. To anyone else who has had a similar experience, I encourage you to try programming courses in several languages, with a few different instructors, before giving up completely. Use free resources like edx, Coursera, Khan Academy, Code Academy, and HackerRank. With the plethora of free resources available, there is bound to be something that speaks to your unique way of learning. You can do it!