Coding vs computer science
Recently, there has been a lot of talk about learning computer programming especially with the current wave of programs encouraging kids to learn to code. So it may be worthwhile to look at the difference between coding and computer science.
History
I learned the infamous Logo Turtle at school and BBC BASIC at home. That is learning to code. I followed instructions, copy-typed from books, and made minor adjustments to “personalize” my programs.
At A-Level I started studying “Decision Mathematics”. Rather than esoteric calculus, and prosaic formulas, it looks at how to solve problems logically. It was the perfect primer for learning how to become a programmer and I firmly believe that no conversation about teaching coding in schools is complete without a theoretical understanding of the science behind the code.
An Example
This is an exercise I run through with people wanting to understand the basics of computer science:
Sort the following numbers:
7, 8, 1, 3, 2, 7, 6
Easy enough to do in your head, no?
Ok – explain to me how you did it?
We then talk through what we think the problem is – in what way do we want the numbers sorted? High to low? Low to high? Alphabetical? What, in fact, do we want to do with the sorted numbers?
What series of very simple instructions could we give to an absolute idiot such that they could follow them and get the right answer?
Where are the “gotchas”? If two numbers are the same, how should they be sorted? Does it matter?
Are there more or less efficient ways to sort numbers? Are there times when less efficiency is good?
Hey presto – we’ve begun to explore Computer Science. We can craft algorithms, learn how and why they are important, write out pseudo-code, hunt for bugs. To some, that useful. To others, not so much.
Learning To Code
The above is an introduction to Computer Science. Now let’s look at what learning to code teaches people.
-
sort([7, 8, 1, 3, 2, 7, 6]);
Or, perhaps
-
var numbers = [7, 8, 1, 3, 2, 7, 6];
-
numbers.sort();
What has that taught anyone? Merely syntax.
I learned the BASIC and Pascal languages at school. Who uses those now? No one. Learning to code an iPhone or Android app is great fun – but in 10 years time when those children are adults, the world will have moved on and Objective C will be yet another obsolete language. But so will today’s version of computer science.
Yes, learning the rudiments of one language can be helpful in picking up another – but it’s no substitute for understanding the fundamentals of why you are doing something.
That’s why I’m a big supporter of the Apps For Good initiative. Rather than just teaching kids how to build an Android app, it takes them through the process of design, user research, competitor analysis, testing, monetizing, building a team, and legal / social ramifications of releasing an app. All of which are vital tools to any would-be programmer.
It’s not just about learning which buttons to press in order to make an app – it’s about a deeper understanding.
if ($thou >= $summers_day) {$darling_buds.winds($rough, $shake);}
Let’s put it in language the humanities graduates can understand.
While it’s easy to demean plumbers and electricians for not being architects, and saying that learning to code is merely teaching people to spell, the reality is quite different. Employers hire far more coders than computer scientists. In fact, many most companies will not even consider hiring a computer scientist because they have not learned enough about coding to be proficient.
It also boils down to time and money. Four years and well over $100K to become a computer scientist vs. 3-6 month and $6K-$12K.
If you think becoming a computer scientist is the way to go, please talk to all the PhD computer scientists who are working in other fields because they couldn’t find a job. It’s a career path with disaster written all over it.
NOTE: It’s never too late to learn the fine art of computer programming. Learn more at DaVinciCoders.com.
Photo credit: Slate