by Steve

David J Malan presenting CS50

How CS50x changed my perspective on coding

In the summer of 2009, I finished off a well-thumbed copy of Fermat’s Last Theorem by Simon Singh. This event was remarkable for one reason — I suck at math. I don’t mean in a general kind of way, or in a modest self-deprecating manner. I mean I truly suck at math. I left school without even a basic GCSE in the subject.

(For my American friends the GCSE is the equivalent of a high school diploma.)

I had only a vague notion of what Calculus or Algebra were. I couldn’t describe a graph or a function if I tried. Hell, at that point, I didn’t even know what “to the power of” even meant.

Despite these huge limitations, I enjoyed that book so much that I immediately embarked on a math-learning rampage. My respect for the subject was renewed.

I quickly became hooked, and I turned to my colleague who’d completed a college math degree. His name was Andrew Cooke, and he was as close as a human being could be to James P. Sullivan from Monsters Inc.

A gifted rugby player, Andrew also had the charming ability to hide his well-educated but hide it behind a barrage of good humor and silly anecdotes. If it ever looked like a subject was heading towards matters of a weighty consideration, he would immediately divert the conversation to the time he dumped Danny Cipriani (famous rugby player) on his head during a rugby match.

He tried to hide it, but I knew that he knew maths. I asked him to teach me and he reluctantly agreed.

But our tutoring sessions soon came to an end. Not because of Andrew’s tutoring skills (which were exceptional), but because of a huge personality flaw that I’ve only just been able to reconcile this week.

The Incessant Need of the Nth Degree

Incessant Need of the Nth Degree is my way of saying that, no matter which subject I am studying, I always feel compelled to go back beyond the baseline to know why something occurs the way it does. It is the need to always ask why and discover the underlying thinking.

Not just peeling back one layer, or two layers, but N layers. Unfortunately, as I discovered, in maths and Computing, such a pursuit is crippling.

I have always been a skilled student in the arts. Particularly English. In artistic subjects the Incessant Need of the Nth Degree is not that much of a burden. In actual fact it can be an enjoyable and leisurely way to expand your familiarity with a subject.

For instance; when presented with a famous Italian renaissance fresco, a student may inquire why the color blue takes such a prominent and revered place in the composition. It’s not that difficult to peel back the historical and cultural connotations here: the pigment Ultramarine is derived from precious stone Lapis Lazuli and creates an immensely deeper and richer hue. The prohibitive expense of the pigment meant it was saved for Virgin Mary, who symbolizes holiness and humility.

Originally developed by the Persians in Afghanistan, Lapis Lazuli was highly prized by Italian artists and the color Ultramarinus — which translates to “beyond the sea” — became synonymous with the Italian psyche. Indeed, the football team is referred to as the Azurris (the Blues) because Lapis Lazuli was the color of Savoia, the ruling house of Italy from 1861 to 1946.

The 15th century artist Cennino Cennini wrote in his famous handbook for painters:

“Ultramarine blue is a color illustrious, beautiful, the most perfect, beyond all other colors; one could not say anything about it, or do anything with it, that its quality would not still surpass.”
Cennino Cennini, The Craftsman’s Handbook (Il Libro dell’ Arte, pg. 36)

You see, in the arts, you can easily trace back the chain of thinking or accomplishments to find the root cause of anthropological, cultural or political events.

You can also engage in a more casual and loose version of the The Incessant Need of the Nth Degree when Wikipedia link-surfing, although ultimately you will always return to the article entitled Philosophy. Anyone who has wiled away an afternoon with 16 wikipedia tabs open will certainly understand this.

A more practical rebuttal of the Incessant Need would be the following maxim Accept what has gone before.

My father, a craftsman by trade who left school at 15, was an extremely practical man. His focus was so absolute that he would question very little, other than how long he had to accomplish the task at hand — whether it was building, tiling, fitting or even his beloved golf. He would often get frustrated at my need to inquire why.

One day, as he was attempting to teach me carpentry, he made the mistake of mentioning the quick carpenters rule ‘3,4,5’ (commonly known as Pythagoras Theorem), only to look at me in incredulity as I asked “Why is that the rule?”

“Because it just is” was the reply, shaking his head.

This was this exasperating attitude that I brought to Andrew in the summer of 2009. Each time he attempted to teach me a fundamental rule of mathematics, I would ask why such a rule existed. What was the underlying principle? Until eventually, we would be left with reductio ad infinitum arriving at basic maths (whole numbers etc.), to which I would extend even further questions.

I will never forget Andrew holding up his hand and saying, We have to stop here. Sometimes you just have to accept what is.”

I considered his statement, and went to reply, but he interjected:

“Steve, there do exist mathematicians that have attempted to question the base order of things; they eventually become delirious. You have to accept 2+2. You have to accept a square root is a square root. Otherwise the whole order simply collapses and you will go mad.”

He looked at me intently and nodded.

“Mad, you understand. Insane.

Unfortunately, I did not heed the advice of Andrew. Instead, I shifted my focus to Computer Science, in which I continuously found myself handicapped by the inability to accept the previous work of those in the field.

When presented with a basic JavaScript module, it was not enough to learn the programming theory and commands. I had to know how a compiler worked. It was not enough to know it converted source code to assembly. I had to know how assembly worked. It was not enough to know how assembly allowed my compiled program to run. I had to know how the electrical charges disseminated within the system. It was not enough to accept that electronic engineering lay at the heart of hardware. I had to know how electrons moved, polarity, amps, currents, gates…and so the cycle never ended.

Reductio Ad Infinitum. The Incessant Need of the Nth Degree.

Within a matter of weeks I had travelled so far on my own tangents that I was hopelessly behind my classmates, and failing in my studies. I had learned nothing about JavaScript really, and certainly nothing about compilers or assembly or electrical engineering, or electrons themselves for that matter. I was lost in a maze of my own mental making.

That is until I started CS50 hosted by EdX. For those of you unaware, CS50 is a Harvard-based Massively Open Online Course (MooC) run by David J. Malan. It teaches the fundamentals of computer programming and computer science. It ultimately also led me to Free Code Camp.

My need for the Incessant Nth Degree finally came to a halt, at the age of 32, during the first week of the online class.

During the Week 0 lecture, David had just introduced the concepts of binary, ASCII, functions, variables, loops, boolean expressions and conditions. He invited the class to use the Scratch programming environment to play and experiment.

It was the next week during the the second lecture that he used the sentence:

“We are going to continue layering on top of those that have come before us…to create something new.”

Let me repeat that.

“We are going to continue layering on top of those that have come before us…to create something new.”

To. Create. Something. New.

That sentence brought sharply into focus why we trust the work of our predecessors. It is to free up the time required to accomplish something new. We avoid the paralysis of needing to know it all by placing trust in the work that has come before us in order to create the next stage of development.

The aim of coding is not to be reflective but to be inventive.

I have no idea why it has taken me so long embrace the concept of trusting the paved road, but it feels refreshing to move forward throwing off the shackles of the Nth Degree.

All it took was a minor adjustment to my world-view, and a whole new perspective of creative freedom has been uncovered. CS50 and an appreciation of Computer Science has stopped me from trying to reinvent the wheel, and gotten me started with layering new knowledge on top of old.

Now I can embrace Free Code Camp the way it should be.

Steven Feeney is an Agile Coach and loves reading, mountaineering and talking startups. He is the founder of Sure Summit Consulting and Slicing Pineapples Creative Agency.

He blogs at stevenfeeney.com and medium. When not speaking in the third person, he can be reached via @steven_feeney, so don’t be a stranger.