Where to Start?

Eli Huebner
5 min readMar 15, 2021

I am sure that my story is nothing new. A young adult, several years into their post university professional life, decides that their chosen career isn’t working. They consider their options, consider their own skill set and the needs of the labor market, and start down a new career path. Also like many others, I decided my new career would be software development. The final piece, and the one most important to this story, is that my former career was as a high school teacher. Again, nothing new, as 40% of us leave the profession within the first 5 years for reasons covered at length by others.

So, I found myself unemployed and needing to retrain in the middle of a global pandemic. As a teacher myself, I was as interested in how people chose to teach coding as I was in what they had to teach. Pedagogy itself is a huge topic on it’s own, one that people rarely understand unless they have been through a teacher prep course, and I don’t want to go into analyzing the educational merits of the programs I took. Instead, I became fascinated with the idea of which language programs decided to teach first.

When the pandemic started, I was a couple months from the end of my final year teaching. I had given my notice at the start of the year, but had to finish out my time. The nature of my courses made them easy to teach asynchronously, with students spending class time reading primary sources and then producing written responses, which I commented on, forming a written dialogue with my students. My time was spent before class prepping materials, and after class assessing and providing feedback on student work, but during class I had nothing to do but sit at my computer waiting for student questions. At this time, Harvard University decided to make many of its online courses free, and I decided to start CS50, their intro to computer science class. That course opted to focus on C, and I spent several months coding exclusively in C. Jump ahead another couple months, and I begin formal training in the Flatiron School Software Development online bootcamp, which starts with Ruby and moves on to JavaScript.

Clearly, we see two very different approached at work. I was intrigued at the time by the choice to go with one language or the other, and now, after graduating from the Flatiron course, I feel like I understand each position.

For a new programmer, all I can say about C is that it was hard. Before you can start coding, you have to #include the libraries you want (so you have to know where your desired function live), you have to worry about typing your variables, and the program cares where in memory variables are held. The language provides a ton of freedom, allowing the user to do basically whatever they want, but it means that commonly used operations like iterating through an array need to be explicitly defined in each program. Don’t even get me started on placing semicolons!

By the time I got to Ruby at the end of the summer, it seemed like a piece of cake. To be fair, I cannot comment on what it is like to learn Ruby as a new programmer. I knew the datatypes and much of the lingo by then, and I am sure that made the process easier. At the same time, all the things I used to worry about in C were simply gone. You want a variable? Great, it can be whatever you need it to be. Common operations? If you use it a bunch, chances are good it is built into the language as it’s own method. The fact that Ruby is open source, with gems easily available to add functionality you want without needing to write it yourself. The best/worst part of learning Ruby was learning how to build something from hand, such as database management with SQL and setting up resource relationships, then showing how the same thing can be done with ActiveRecord, taking code which used to be hours of work and writing it with macros in a couple minutes.

So for a beginner, why start with one or the other? It is an old debate in education: is it more important to have an understanding of the concepts, or to know how to use them? After learning about Jim Crow, should students demonstrate their knowledge on a test, or use their knowledge to tackle parallel current problems? With C, since so much has to be done by hand, students get a deep understanding of what is happening “under the hood”. What is the computer doing in memory when it assigns a variable? creates an array? iterates through that array? Mental effort is spent on the basics, and it may take longer before a student can really get into writing complex programs. After a month of C, every program Harvard wanted me to write was a variant on procedurally looping through an array in response to user input. Programs were a single file and maybe two dozen lines of code. Ruby, on the other hand, is very user friendly. After 3 weeks, I was writing object oriented code, accessing API’s, and building file architectures for files with tens of line of code each.

A teacher needs to have an end goal in mind. What should their student know/be able to do at the end of the course (and for a good course, that goal should align with student goals). C is great if students should leave the course with a strong computer science understanding. Students will focus on how computers think, and how to clearly and purposefully give them instructions. Ruby is great if you want students to make interesting programs quickly.

There are, of course, other considerations. Ruby (and Rails), along with JavaScript (also covered by the Flatiron course along with its React/Redux framework) are great if a student wants to work in web development, while C languages are sought after in basically everything else (thanks to it’s performance options). For me, I am returning to C (actually C++) for my own instruction and to widen the field of jobs I am qualified for. A good programmer doesn’t rest on their laurels, but continues learning new languages, and new ways to use the languages they know. Education is a journey without a final destination, as my education instructors told me.

--

--

Eli Huebner

I taught high school history for 4 years, before pivoting to software development in search of something more creative.