
Don't learn to code. Learn to think - akbarnama
http://brikis98.blogspot.com/2014/05/dont-learn-to-code-learn-to-think.html
======
bthornbury
I feel I must disagree with this. In my personal experience, a computer
science education will teach you algorithms, yes. You will learn how a
computer operates a a low level. You will even learn logic.

However, for the vast majority of people, this is not enough to build the
mental models of how computation and logic really operate. You see this in the
sheer number of people who graduate and don't know how to code. We learn best
from tight feedback loops which an algorithms text book simply cannot offer.
Writing that code, on the other hand, will give you a deep insight into how it
really works and build a lasting mental model.

It is coding which ultimately changes the way you approach a problem and think
through it.

~~~
MarcScott
Could not agree more, and I teach CS at a secondary school.

------
vezzy-fnord
The main sin of many "learn to code" proponents is their treatment of "code"
as the end itself, rather than the means to it. Code is almost meaningless
without understanding the countless abstractions and protocols that humans
have crafted around software and hardware. Comprehending the tangled web is
something that takes personal passion and self-education.

------
MarcScott
The idea that we should be teaching Computational Thinking, imho is nonsense,
and I've blogged about it here

[http://coding2learn.org/blog/2013/10/10/computing-is-much-
mo...](http://coding2learn.org/blog/2013/10/10/computing-is-much-more-than-
coding/)

I struggle to find a simple example of where CT applies to everyday life,
outside of the sphere of programming. Kids should experience code first, and
then realise how it can simplify their lives as they begin to understand CT.

~~~
j2kun
I support you in full for taking a critical mind to the topic. But I take
issue; I think your perspective is overly narrow.

You say

> We’re teaching programming, network infrastructure, databases, communication
> protocols, markup. We’re teaching these things because these technologies
> are so ubiquitous and important, that it will benefit everyone to have a
> little understanding of them.

I don't know what your computer science education was, but the fundamental
idea in mine was "learning how to take an idea in your head and turn it into a
program." The principles were not networks, databases, and protocols, but
rather modularization, reuse, clarity, and algorithm analysis. You think
refining these tools is not important?

You give an example:

> If I was to shuffle a pack of fifty-two playing cards and hand them to you,
> then asked you to sort them, you’d do what any sensible person on the planet
> would do. You’d sort them into suit order first, then into value order.

The point of computational thinking is that you can concretely analyze _how
good_ this method is and compare it with others (I'm sure you know the
tradeoffs involved in sorting!). Of course everyone knows how to naturally
decompose things, but reasoning about it and handling adversarial cases,
that's where computational thinking comes in.

Computational thinking (forget the Popular Title, just the idea of applying
computational ideas elsewhere in life) is _extremely valuable_ , and I'll give
you two prominent examples: the first in the design of fair markets, which has
revolutionized more than one industry [1], and the design of new computers,
such as quantum computers and DNA computing [2]. I can continue: computational
thinking is applied in designing fun games (not just in programming them!),
art and product design, literally every optimization problem in every
industry, cognitive psychology, the study of evolution, political analysis,
information and security, and so on. I can give you references and examples if
you want.

You would rather call Computer Science "what it is" and omit these
opportunities for people who don't want to be software engineers their entire
life? It sounds more like you're in a bubble where the only thing to aspire to
is Steve Wozniak and browser design and "realistic flag fluttering" in games.
The truth is that computational systems are everywhere in life, and being able
to recognize, formalize, and analyze them are what makes computational
thinking useful. It's not just about writing programs.

Maybe your point is that we should separate the two fields: instead of one big
Computer Science degree we should have Software Engineering which is just
about programming and Theoretical Computer Science which is just about the
mathematics and Applied Computer Science which is about the other stuff. I
wouldn't be opposed to that, but your argument rather suggests we throw
everything out but protocols and databases, and if someone told me I were
going to get that and only that from a computer science education, I'd have
run far far away.

[1]: [http://jeremykun.com/2014/04/02/stable-marriages-and-
designi...](http://jeremykun.com/2014/04/02/stable-marriages-and-designing-
markets/) [2]:
[http://en.wikipedia.org/wiki/DNA_computing](http://en.wikipedia.org/wiki/DNA_computing)

~~~
MarcScott
I agree that I am in bubble, in that I teach in a UK secondary school. My job
is to get kids excited about computing and for them to see what an amazing
subject computer science can be. The way I tackle this is to show them how
through code, they can take a complicated problem and make it trivial to
solve.

As an arbitrary example, take Quick Sort. Trying to explain the algorithm to
someone who doesn't know how to code is exceptionally difficult. Once they
practically understand recursion, then it becomes simple.

I completely agree with you that CT is exceptionally valuable. My issue is
with the timeline. I personally feel (and I am completely open to the idea
that I might be wrong, given my inexperience), that we should be teaching kids
to code first and then CT afterwards. CT, without the benefit a knowledge of
programming or University level mathematics, is a little pointless.

~~~
jacquesm
If you want kids to learn how to code make games with them. It's by far the
most approachable subject and it doesn't take long until a game of any
complexity allows you to slowly introduce more serious material. I'm pretty
sure there were only two phases in my career when I jumped a level (or two) up
in capabilities in a very short time, the first was when I was a professional
games programmer, the second when I wrote an operating system.

I would strongly recommend against the second ;)

~~~
pbhjpbhj
Except you have to call them stories, just in case some girls might be put off
... eg
[http://kata.coderdojo.com/wiki/How_to_encourage_girls](http://kata.coderdojo.com/wiki/How_to_encourage_girls).

[It's relevant because all the "communities" mentioned in the post promote
girls as deserving special treatment that is not offered to boys. Either
overtly or less conspicuously - code.org and coderdojo make special notes on
how to encourage girls but no special notes on how to encourage boys that I
can find (please correct me).

I'm not saying you shouldn't consider that some children might prefer a story-
based approach (boys and girls); a specific active/physical approach might be
preferred by some children, or ... ]

------
rabino
Learning to code gives you a good framework to learn to think. By all means,
it's not the only one. But it's one that also gives you a good shot at a good
salary.

------
jds375
It's completely true. The most valuable part of my CS education has been the
general design and problem solving skills. The ability to modularize problems
and solve them incrementally, as well as implement correct and efficient
solutions is applicable in every aspect in life. People often think coding is
just about the language.. That's really the least important part.

------
lumelet
but coding is one of the best ways to introduce people to computer science

------
danbruc
You should neither learn coding nor computer science unless it is to become
your profession or hobby. This is almost the equivalent of suggesting that
everybody should learn to do a heart surgery, fly a plane or design a sky
scraper just because it may come in handy some day. I am of course aware that
some knowledge around computers is much more likely to help you out in some
situation than being able to do a heart surgery but that is unimportant -
important is the complexity of the thing suggested to learn. There is just no
way you can learn anything interesting within an amount of time that is so
short that it makes sense to suggest that everybody should just do it - not
for doing heart surgeries, not for flying planes, not for designing sky
scrapers, not for doing computer science, not for programming. And even if you
could learn something interesting in say 100 hours, the equivalent of a dance
course of two times two hours per week for six months, neither computer
sciences nor programming would be a good suggestion. What people really
encounter and ask there friends working in IT to fix are typical system and
network administration problems - malware, crashes, network issues,
(un)installing software, driver problems, configuration problems and so on.

------
pasbesoin
To paraphrase:

 _Some people, when confronted with a problem, think "I know, I'll use a
computer." Now they have two problems._ [1]

If you don't understand the problem, you're going to have a hard time "coding
it".

\--

[1]
[http://regex.info/blog/2006-09-15/247](http://regex.info/blog/2006-09-15/247)

------
bnolsen
the world needs more systems engineers with the ability to identify problems
and suggest real solutions. the computer is just one tool for doing this.

i run into so many situations where people want to identify their task, put
their heads down and do it regardless of whethertheir task is actually
bringing real effective value to the process.

and more situations where people refuse to change the way they do things even
when its proven to them that theres a better way to do things. PHDs tend to be
the absolute worst about this.

------
tomasien
You should also learn to code

------
hellbreakslose
Great post, thumbs up!

