The Logic of Code
Some months ago, I downloaded the Kodable app for my 4 year-old, which boasts that it can teach toddlers how to code before they can read. My programming skills are pretty basic, but I like the idea of giving my child a head start.
Many of today’s business and political leaders stress that coding has become an essential skill for the digital age and there’s been an avalanche of new services—from classes and training programs to free online resources like Code Academy and Code.org—to meet the demand.
Yet long tech columnist Kevin Maney disagrees. In a recent piece in Newsweek, he writes that by the time today’s pre-teens reach the job market, they “will find that coding skills are about as valuable as cursive handwriting.” To many tech denizens, that’s apostasy, but he has a point. Preparing for the future will take much more than writing command lines.
What Is A Code?
Thinking about code as a set of logical commands is actually a fairly new phenomenon. At its core, code is a matter of information and complexity. We encode information in order to communicate it. Sometimes, we use codes to simplify, to facilitate efficient decoding and sometimes we add complexity to make communication more stable and secure.
When I first began living in a foreign country, I had serious trouble decoding information. Even as my language skills improved, I still ran into barriers of culture, professional environment and social custom. Small gestures and turns of phrase that were second nature to natives were still opaque to me and that limited my operational effectiveness.
We all use code in our everyday lives to create bridges between levels of complexity. In Poland, a simple hand gesture can be used to signify a hard night out, while marketers use a variety of acronyms to convey fairly complex underlying concepts. Using codes in this way makes communication more efficient, but also indecipherable to outsiders.
And that’s why so many digitally inclined people believe that everyone should learn code. As we become increasingly immersed in a digital environment, we need a certain amount of knowledge in order to interface and communicate effectively. “As Liz Lukas, CEO of digital training company, Decoded, says, “it’s a matter of basic literacy.”
A Short History Of Computer Code
In the mid-19th century an English mathematician named George Boole created a basic logical system that could be encoded into ones and zeros. Nearly a century later, Alan Turing proved this logic could be used to create a universal computer and Claude Shannon showed how to encode that logic into electrical switches called logic gates.
All computer codes today are largely based on the work of those three men, but the first ones, called assembly languages, were cumbersome to work with. So computer scientists compiled the primitive code of assembly languages into higher level languages, like Fortran and COBOL.
Today, Fortran and COBOL are not as widely used. Just as those languages encoded complex commands of assembly code into higher level languages—much like a hand gesture encodes a hangover in Poland—today’s computer languages encode earlier ones. In fact, today’s programming languages include code libraries, to reduce the need to write code.
So you can see Maney’s point. Just as the utility of Fortran and COBOL is greatly diminished today, so our present computer languages will not serve our children well in the future. In fact, as Maney points out, scientists at DARPA are working on a new computer language, called MUSE, which will encode all present libraries into everyday language.
Operating Between Ecosystems
Yet there is a flaw in Maney’s argument. Just because computer languages have a way of becoming obsolete, that doesn’t mean that we don’t need to know how to code. There is an underlying logic to the digital world and we must be capable of operating within that logic in order to function in it.
Take the marketing example I used above. Many people find marketers’ excessive use of acronyms maddening—with good reason—yet those annoying codes signify essential concepts for selling products effectively. In much the same way, using symbols such as “#” and “RT” is indispensable for functioning in a social media environment.
Here’s where Liz Lukas’s point about basic literacy comes in. We no longer operate in silos, but ecosystems. Marketers who operate in social media and digital environments need to be able to express themselves not in terms of marketing code, but in the languages of those particular fields of endeavor.
Yet even more than that, as our professional environments become increasingly technological, we need to have a basic understanding of the underlying logic that computer languages encode. And that is why I downloaded the coding app for my little girl.
Preparing For The Future
As I noted above, Kodable aims to teach toddlers how to code before they can read. It does so by encoding computer logic into fuzzy little characters and a system of arrows, paths and boxes. Children don’t write commands, but drag them into the proper sequence so that their fuzzy friends can successfully complete a maze.
I don’t know if my daughter will ever want to write her own programs, but I can’t help believing that exposing her to the logic of their design is a good idea. As Scott Brinker of Ion Interactive explains, “learning how to build things with code is a pretty good way to gain an understanding of concepts in design and architecture in fun way.”
Grechen Huebner, a founder of Kodable, echoes the same sentiments. “You learn by doing things,” she says. “It’s like math. We now have tools that do a lot of the hard work for us, but everybody will need to have some of the basics of programming logic and problem solving in order to function effectively.”
So while Kevin Maney has a point when he says that “new technology is about to render programming languages about as useful as Latin,” learning how to code is much more than ad hoc.
– Greg
Hi Greg, my view is that coding is stepping into the same sort of place things like projects, theses, or other “hard” work that builds logical thinking, problem solving and persistence skills in children. To some extent these things have been regulated out or “simplified” in much of the “everyone is a winner” approach that seems to rule in schools and our culture for many. It is not the specific of coding, but the task to complete it, the persistence to get through, the thinking required to make more elegant of a solution; all of these are great skill and character builders. Coding seems to be the focus now, but other skills or tasks were there in the past. As someone who has interviewed many for hire, there remains limited basic skills in too many people who come very unprepared for the workplace or a career. If coding helps change this, so much the better.
Thanks Robert. I agree about the lack of basic skills—math skills are especially atrocious—but I think it’s important to recognize that many of the skills needed for the digital age have not historically been considered basic. As I explained in an earlier post, modern computing originated not as an engineering problem, but as one in advanced logic and set theory.
In fact, many of the critical thinking and logical skills that are central to the digital world have long been considered abstractions and been relegated almost exclusively to liberal arts departments. Logic courses—usually offered by philosophy departments—are rarely required or even encouraged in high school or college programs.
As Valdis Krebs of Orgnet put it to me: ““Universities are still stuck on teaching 20th century math for building things rather than 21st century math for understanding things.” He suggests that curriculums focus less on the mathematics of engineering (i.e. calculus) and more on the mathematics of patterns (i.e. set theory, graph theory, etc.).
– Greg
We are on the same page Greg. I am old enough to have studied logic, assembly language, data stacks as I studied what they called then CSEE at Cal in 1970 or so. Yes, the definition of basic skills needs to be altered. In a regime of testing, there is little testing of using skills rather than rote repetition. Coding can be done several ways, so it is a good proxy for thinking it out, but all of that kind of work is what really gives us a workforce ready to go forward. Build a robot, plan an improvement project, organize aid for the needy, these all require coordination, teamwork and thinking skills. Too many have a hard time when challenged, though most can do it if coached. Functional illiteracy is a bane.
Very true. Thanks Robert.
Coding is much easier claimed than accomplished, as well as there is vast difference between good code and bad code, but how do you know? Unless you have experienced a good code, and know why a specific code is good, you can not recognize difference.
Hi Greg,
I’ve really enjoyed reading your blog posts. I wanted to add another value to coding, which is making math more accessible in the right contexts. Ironically, I started off as a computer science major in college and ended up dropping it because I couldn’t handle the theoretical math required for the major (became an English major instead).
Recently, I decided to give software engineering another go and found the statistics and advanced math more accessible in applied Data Science classes. Advanced math made more sense when applied to Bayesian analysis, Monte Carlo simulations, and machine learning problems. Part of what made is so accessible was the relative ease of Python and iPython Notebooks (ex: http://nbviewer.ipython.org/github/cs109/content/blob/master/HW3.ipynb ) as learning platform. I found theoretical math concepts more accessible when I was forced to implement in a real world problem (developing a Yelp recommendation system using linear algebra, Bayes therom, and random distribution sampling).
I think coding will start making math more accessible to students. Learning how to code is becoming easier and easier. The value it’ll provide is framing math as a more practical tool to solve problem. Coding provides immediate feedback and helps students how to think more critically to solve real world problems which makes the learning process more relevant.
That’s a very good point Dhairya. Another interesting facet of big data is that it is shifting statistics from Gaussian to Bayesian methods, which is having a much bigger effect than most people realize. If you’re interested, I wrote about it here.
– Greg
I disagree with the premise of the necessity of coding. For me, learning to code is just another way to teach problem-solving skills. And those are the true essential skills to have. Learning to code is one way to do that, but most definitely not the only way.
Yes, I think that’s true. It’s not a necessity, but still probably a good idea.
– Greg
Coding has become a matter of basic literacy. Today’s codes will one day be obsolete, but their logic will live on.
Second name of logical code
Excuse me for budding in, but I have a question that maybe Greg’s young daughter could’t formulate: it’s simply how to advance – line by line – in code? I’m a retired Surgeon who wants to learn code. I chose Python to start and bought books and use on-line sites. I understand the topics – functions, lists, libraries, etc – but I’m at a loss when faced with a task to test my understanding: when to use a certain function or lists, when and how to call the function, construct the print statement… frankly, I don’t understand how to progress line by line. What I’m missing is the mental agility to “Think it out”. I’m no dummy, given my past career, but this type of reasoning is my “Wall”. I know it, too, can be overcome. Has anyone got a “logic ladder” I could use to get over this hump?