Live data from Hacker News

Coding Horror: Separating Programming Sheep from Non-Programming Goats

codinghorror.com

11–20 of 140 posts

Re: Coding Horror: Separating Programming Sheep from Non-Programming Goats

#11
From the article: >To write a computer program you have to come to terms with this, to accept that whatever you might want the program to mean, the machine will blindly follow its meaningless rules and come to some meaningless conclusion.

I guess it is reasonable that people have a hard time with this. They've grown up their whole lives dealing with people and animals and themselves. These act according to wants and gloss over minor errors, a fuzzy world full of fuzzy actors. Heck, even our species has lived and evolved mostly dealing with such. It doesn't make much sense to them that one typo could cause a super powerful computer or expensive device to keel over and be useless and do nothing.

Re: Coding Horror: Separating Programming Sheep from Non-Programming Goats

#12

Jeff closes with the following words IN BOLD: “The act of programming seems literally unteachable to a sizable subset of incoming computer science students” There is, of course, an alternate explanation: “We in Universities seem literally incapable of teaching programming to a sizable subset of incoming computer science students” Experiments going back to the 1980s with teaching children how to program using Lego blo…

This article seems to touch on the explanation a bit more.

http://www.bricklin.com/wontprogram.htm

It's not that Johnny can't program, it's just that he won't.

Re: Coding Horror: Separating Programming Sheep from Non-Programming Goats

#13
I see this largely as a failure of education. You see this issue in many areas and much earlier on like teaching mathematics. In schools there tends to be one method used and that method doesn't suit everybody.

I see this at work. I've known programmers who, when they get a new hire, will basically let them flounder. I guess the basic idea is that if you're "good" you'll "figure it out" (with minimal time investment to boot). And that will work with some people. My own philosophy is that there are a significant number of people who need direction. Don't overwhelm them with "everything". Give them small, structured tasks to learn processes, small parts of the system, build confidence and give some measure of progress.

That all being said, I honestly don't know how I learnt to program at all. I can teach people who know how to program (the basics) more. But I can't teach someone who doesn't know how to program how to program.

I've come around to thinking that Zed Shaw (as just one example) is right about this. With his "Learn X the Hard Way" books he starts out by basically saying "just type this in" (and don't copy and paste). Don't worry what it does. You'll figure that out later.

I see people (in many different areas) who are under the mistaken impression they need to know "everything" before they can do anything (or even in games, make a decision of any kind). They feel the need to weigh up all the options and consider all the consequences. That's not actually how people learn (IMHO).

Children don't know any better so can just learn this way. Adults often let self-doubt, fear of embarrassment or fear of "what might happen" get in the way such that they won't allow themselves to learn.

So perhaps what universities should do is separate students who already know how to program from those that don't. Those that don't don't take ANY theory at all until they do an introductory course that starts with "just type this in". If you lack the ability (and willingness) to turn a thought into a program, no matter how simple, you're doomed to failure. This, I believe, is something that can be taught.

The ability to just try stuff and see what happens in a key element in continual learning (IMHO) and something that needs to be ingrained in programmers (to be) from day one.

I'd really love to see the outcome of this approach versus more traditional approaches.

Re: Coding Horror: Separating Programming Sheep from Non-Programming Goats

#14
Teaching is hard.

I understand the impetus to filter out students that are less naturally inclined to it, and if your goal is to establish something of a programming conservatory, then administering a test like this would be an effective barrier. However, I think perhaps more advantageous reading of these results would be to recognize that the ability for students to construct these mental models is the single most important foundation in their education.

Anecdotally, I have had some experience teaching non-programmers basic programming skills at the university level, and it's absolutely the case that some kids, even bright ones, struggle greatly with these constructs at first. They look at the symbols and freeze, intimidated by the arcane expressions, and control flow is often non-intuitive to them. To me at least, that's a pedagogical challenge, not a lost cause. You should have seen the exclamations of wonder and excitement when some of them finally got it, once a particular way of illustrating it stuck for them.

Re: Coding Horror: Separating Programming Sheep from Non-Programming Goats

#15
post #3

It's really all about how you teach programming. My first exposure to programming was in high school where a math teacher who had never coded a day in her life was thrown into the position for some extra cash. I witnessed the dichotomy first hand here--and I was clearly in the wrong bell-curve. But that summer, I attended a summer program where it was taught properly. First explaining the context and history of progr…

Similarly, my first exposure to programming was in a high school AP (advanced placement/college credit) class taught by a math teacher. The teacher would give us an assignment and then leave the room for the rest of the period. As a group we would come up with an answer in about 5 minutes and then spend the rest of the time playing games on the class computers. His teaching method wasn't exactly effective for me, and needless to say I didn't learn a whole lot. I ended up getting a 1 (on a scale of 1-5, 1 being terrible) on the exam. The way I ended up learning and becoming infatuated with programming was with my TI-82 calculator. By trial and error I would write programs for games, class notes (hi-tech cheat sheets) and animations. In college I began taking "real" programming classes, but found the teaching to be both dated and lacking real-world application. I kept learning through side projects though and now, 12 years later, I realize that in this vocation, there is never an end to learning and that people can learn in so many different ways.

I think the misconception some teachers have is that if a student is struggling, he or she is either incapable of learning the material or just not trying. The reality is that it could just be a reflection of how effective the teacher's methods are for that particular student.

Re: Coding Horror: Separating Programming Sheep from Non-Programming Goats

#16
I studied to become a computer science teacher. I have not finished my certification for various reasons but I have some limited field work under my belt along with numerous discussions and readings. And, of course, my anecdotal but legitimate experience in public schooling.

Let's get one thing straight: the problem is bad teachers. My mentor once said it kind of sucks that UTeach was only available to UT students and by extension those who statistically succeeded in traditional schooling because they are usually the least acquainted with the system's failures.

That "test" they show inside is bullshit, first of all. If they showed that to me as a completely green 11 year old without explaining the syntax or semantics of what was going on, I'd probably have to ask some clarifying questions. And, I think it goes without saying, if the professor is the type of teacher to go into a class with the expectation that half the class will fail, I'd probably have shaky confidence and would hesitate to ask questions since everyone is quickly cast into a mold of either "have" or "have not." I've taken math courses before by these people.

Many so-called "gifted" math students (and we're all students) are great with applied math but are just as stumped by theory as everyone else (anecdotal). Testosterone and typical youthful arrogance turns classrooms into settings hostile to people aren't extremely competitive and who are somewhat unsure of themselves. Combine this with a teacher who was once one of the cocky ones and a few snide remarks about how some students "just don't get it" and what you have is a self-fulfilling prophecy.

If your students fail to learn, it means you did not teach them adequately. Learning is the product of the work of learners: you have to give them the proper resources to work with. Humans are exceptionally capable. Children are extremely inquisitive and interested in so many mundane things; they can be taught math. This is beaten out of them as they get older and they're told there is a cap to what they can accomplish.

Bah. Humbug.

A good set of resources for anyone looking to teach programming and/or computer science is CS Unplugged (http://csunplugged.org/). No computers. Much of it relies on human interaction. It's fun, it's versatile, and most importantly it distills the important parts of computer science while shedding the stuff that gets in the way: confusing, advanced user interfaces; arcane terminology and confusing history; and the stigma that a computer brings to those who've never worked with them before.

Re: Coding Horror: Separating Programming Sheep from Non-Programming Goats

#17
post #8

That article is positively drenched in fixed mindset ( http://www.scientificamerican.com/article.cfm?id=the-secret-... ). Those prophecies tend to be self-fulfilling. But as raganwald says, the only evidence is that universities fail to teach a sizable fraction of the population. Maybe the trick is not to play with IDEs or whatever else they claimed to have tried, but to get rid of the computer and focus on what prog…

I bet pretty much everyone would have a correct mental model of assignment if the problem was stated like that.

Try this experiment with five people at a public place, say exactly what you said, and give them exactly one try at the correct answer. I'll give $10 to charity for each one that getes it right. If all five of them get it wrong, you owe me an upvote.

(Fair warning, the terms of this bet are ridiculously unfair to you.)

Re: Coding Horror: Separating Programming Sheep from Non-Programming Goats

#18
post #16

I studied to become a computer science teacher. I have not finished my certification for various reasons but I have some limited field work under my belt along with numerous discussions and readings. And, of course, my anecdotal but legitimate experience in public schooling. Let's get one thing straight: the problem is bad teachers. My mentor once said it kind of sucks that UTeach was only available to UT students an…

[deleted]

Re: Coding Horror: Separating Programming Sheep from Non-Programming Goats

#19
post #16

I studied to become a computer science teacher. I have not finished my certification for various reasons but I have some limited field work under my belt along with numerous discussions and readings. And, of course, my anecdotal but legitimate experience in public schooling. Let's get one thing straight: the problem is bad teachers. My mentor once said it kind of sucks that UTeach was only available to UT students an…

As a followup tangent, I would say that the strength of a teacher can be measured by how attentive they are to the work their students are doing. For example: a student might come up with a hideously convoluted but verifiably correct algorithm to perform multiplication. An arrogant teacher expecting the normal answers might throw it out. A patient and attentive one might very well try out the algorithm and see if it's actually kind of close.

The test they mention only detects one kind of mental model for programming. What if some kid is unsure about the side-effects of `=`? Do we fail that kid for having an intuitive understanding of something most of us are introduced to as undergrads?

Re: Coding Horror: Separating Programming Sheep from Non-Programming Goats

#20
As I recall, people have attempted to replicate the results this blog post is based on and the result was debatable. Which is to say, not that they were completely unreplicable, but that under further investigation debate has intensified. It isn't clear that this methodology actually works, but it also was not conclusively destroyed. It's probably not a good scientific base to draw a lot of conclusions on right now.
Post reply on HN