Hacker News new | past | comments | ask | show | jobs | submit login
Don't learn to code. Learn to think (brikis98.blogspot.com)
60 points by akbarnama on May 24, 2014 | hide | past | favorite | 17 comments



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.


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


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.


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...

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.


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... [2]: http://en.wikipedia.org/wiki/DNA_computing


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.


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 ;)


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.

[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 ... ]


Yes, but teaching them protocols and network infrastructure? I can't think of a worse way to get them excited.

That being said, I think Quick Sort is a lousy sorting algorithm for teaching. Mergesort and Treesort are much better.


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.


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.


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


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.


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


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.


You should also learn to code


Great post, thumbs up!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: