CS pedagogy

Pages: 123
Hey that's cool! Thanks, helios!
I agree - you can be taught the theory of programming, but the practice of it requires experience. The best experience comes in the form of serving some kind of apprenticeship or mentoring programme. Certainly 99.9% of people who pass a course in programming are totally useless to any meaningful project. In that respect I think that it's the same as any other skill.

I could be overcomplicating it, though - as the saying goes: "Anyone who can throw coal into a furnace can learn how to program, for God's sake"
Norm Gunderson wrote:
Anyone who can throw coal into a furnace can learn how to program

LOL, not sure if that's quite true, but I think I see your point.

I absolutely agree with you, it is best to learn with an apprenticeship or a mentoring program. That's not how I learned, unfortunately, but several of my friends at work learned that way and they are very good– much better than I could hope to be (of course, I could probably get better if I wasn't juggling a job and kids at the same time ;)

Although, you can get pretty good by just practicing a lot, or teaching yourself like my dad did. But I will say that teaching yourself takes longer.
Last edited on
@agent max

Oh that's just a quote from a certain politician, which was widely ridiculed, although it didn't harm his chances for both nomination & election. Yeah, it's not true at all, like most things that politicians say. (Andrew Yang's response was a pretty good burn, though :D)

Kudos to you and your father for self-learning. There's a lot of frustration that goes into learning programming (especially debugging) - having people around who could point me in the right direction and show me various tips & tricks really helped.
It's not possible to teach how to program. Programming is something that is learned.

You could same the same thing for any subject.

Some other random thoughts:

Somewhere I read an article by a long-time college CS professor who said that, after several decades and just about every teaching method and technology that he could find, he'd come to the conclusion that some people just don't get programming.

On the other hand, I'm a trustee at a school for kids with language based learning disabilities. The teachers are highly trained in ways to reach these kids and they can work miracles. In one case, when the a kid came to the school, the public school was saying that the best he could hope for was to memorize how to read "safety words" like "stop," "yield," "danger" etc. When our teachers were done, he went to college.

The point is that with really good training and really good teachers, it's possible to teach people who seemed unteachable.
You could same the same thing for any subject.
I don't think so. Take for example metalworking. Yes, part of the skill cannot be taught and has to be learned by practice. For example, how to strike the metal accurately and consistently; that's basically muscle memory. But a lot of it comes down to just having the right techniques to treat and manipulate the metal to achieve the desired effect.

Somewhere I read an article by a long-time college CS professor who said that, after several decades and just about every teaching method and technology that he could find, he'd come to the conclusion that some people just don't get programming.
Just to be clear, I'm saying something different. I'm not saying some people just cannot program, period. I'm saying no one can be taught how to program. You either have an intuitive notion of how to do it already, or you don't. Furthermore, there are no pedagogical techniques (that I know of, at least) to bring a student from not having that intuition to having it. If I'm wrong, I would love to hear about one.

I would almost liken it to being taught how to walk. You can have the biomechanics of walking and the neurological details of how the brain communicates with the muscles explained to you, and you may very well understand the explanation and how it would apply to your body, but if the best you can get your legs to do is flail about with no coordination you're just not going to walk.
Obviously the analogy isn't perfect because translation of intention into movement is a basic neurological function, while programming is, IMO, mostly a matter of structuring thought in a particular way. They're similar in that they're not "knowledge-based" functions, so to speak. Knowing how to program is not like knowing how to bake, I'd say.

EDIT: Actually, it's interesting to compare programming to speaking a second language. While learning a second language, the student goes through two distinct stages. The first one is when he knows the grammar and some vocabulary or the language, but needs to expend conscious effort in order to use it, both to understand and to express himself. The second one is when the language has been "acquired" and the effort happens unconsciously and automatically. The first stage is what I would call "knowledge-based". The second one is what I would call "intuitive", and happens only after new networks have developed in the brain. Come to think of it, the distinction is somewhat analogous to software and hardware.
Last edited on
@helios
I have another analogy: chess. The rules of chess are simple, they can be taught / learnt easily. However, implementing a strategy that can win a game is an entirely different matter. I will explain why I italicised the word learnt a little later.

If we apply the chess analogy to programming - where learning the rules means the basics of the C language say (C is a small language) ; and playing chess to win means C++ with classes, STL, templates, suitable algorithms & data structures and all the other things that professional coding has. The trouble is that some fail at the former, but I think that is mainly due to lack of effort on their part. I believe that one can learn all the different aspects of coding, but the trick is to have the intelligence to put it all together.

In the early days of computing, applicants for jobs were asked if they were good at maths and chess. In maths/physics, one can learn lots of formulae, proofs, procedures and rules: but to be good at it takes intelligence to see that for example a formula needs rearranging; then substituted into another; perhaps with something like a trig substitution along the way; followed by integration. With chess, the intelligence required to win a game is an obvious thing in my mind.

This intelligence is what I am guessing you mean by an "intuitive notion of how to do it" .

Just like maths, in CS there is a tremendous amount of knowledge to be acquired - the more you can remember the easier it will be. But the real geniuses are the ones that do new things - like implementing new C++ standards, or figuring out the latest information in astrophysics - that definitely takes intelligence IMO.
I don't know. Would you say intelligence is something you can gain, like knowledge, rather than something that's relatively unchanging, like height?

If I had to define what I mean by "intuition" here, I'd have to say it's that knowledge that can't be put into words.

But the real geniuses are the ones that do new things - like implementing new C++ standards, or figuring out the latest information in astrophysics - that definitely takes intelligence IMO.
I wouldn't say I don't believe geniuses exist, but I don't think it takes especially gifted people to do those things you say. I think it mostly takes being in the right place at the right time to learn from others how to do them. Do you think the people working on, say, one of the data processing projects at CERN are much smarter than, rather than having the specific domain knowledge required to do whatever it is they do? Do you think you wouldn't be able to do their job after a few months there?
@helios

I am agreeing with what you are saying, but perhaps expressing it differently.

Perhaps the word genius was too much, maybe if I downgrade that to those with enough intelligence to solve new problems?

I don't think intelligence is something that is gained or learnt, but domain knowledge is different - one can learn that. Of course the more domain knowledge one has, the easier it's going to be to deal with problems that come along.

The key point about the smart people, is that they figure out new things: where there is no existing procedure or formulae or model - they create new ones from the data they have. I guess this applies to those who are on the forefront of science, whether they are at CERN or elsewhere. I am sure there are plenty of people at CERN whose job involves existing procedures, but what about the people who designed and built the hardware at CERN; and those who interpreted the new data concerning Higgs Boson?

Also, intelligence also applies to those early in their learning (the learning never stops, as we all know), for example solving problems in Project Euler. It takes some skill and intelligence to research a problem that one may know little about initially; then come up with an elegant solution.

The key point about the smart people, is that they figure out new things: where there is no existing procedure or formulae or model - they create new ones from the data they have.
Oh, yeah. I see what you mean now. Just to put a word on it, let's call the ability to figure out entirely new things (at least entirely unknown to you) "inventiveness". It's difficult to say whether it's an aspect of intelligence or an independent skill that can be honed, but it's for sure true that no one can teach it.
It's not possible to teach how to program. Programming is something that is learned.

A lot of pointless effort has been spent so far in chasing this absurd assertion which is further complicated by an equally ridiculous point claiming intuition is some sort of an alternative answer.
Of course programming can be taught - it's done every day with a wide spectrum of success and achievement as a result of any acquired learning by the taught resulting from, among others, the skill of the teacher, the subject being taught and teaching methodology, along with the aptitude, interest, encouragement and application of those being taught.
While the ability and urge to learn (anything) might be, and probably is, evolutionary-innate, what we learn depends on what we are taught as a primary and fundamental starting point for 'expertise' in any discipline.
What everyone is trying to say is that you can't teach experience. You can teach how to program, e.g. what to do in Situation A, but you can't teach the programmer experience. They have to earn that themselves. And the experience will allow them to apply what they learned for Situation A to Situation B without being taught how.

At least, that is my understanding of it.
Aside from the fact that is not what it says, of course experience can be taught.
A student learns from the experience of being taught which in turn adds to their experience. The teacher is able to draw on their own experience of their learning, research, work/life experience and communicate or demonstrate it to the student, just as happens on this forum.
Experience is clearly teachable and learnable and goes way beyond an employment diary.
It's pointless responding to againtry, max. He'll either pretend not to understand your point no matter how you explain it, or resort to childish insults when he doesn't want to bother with even that anymore. He's burned pretty much every bridge there was to burn here.

You can teach how to program, e.g. what to do in Situation A
That's not teaching how, though, is it? That's teaching what. Ideally one would want to teach something that would be applicable even in completely novel situations.

but you can't teach the programmer experience. They have to earn that themselves. And the experience will allow them to apply what they learned for Situation A to Situation B without being taught how.
"Experience" is generally used interchangeably with "knowledge", but strictly speaking they're different, and in fact experience can have negative knowledge value if it's approached from invalid assumptions.
For example, if a student tries to learn which constructs lead to undefined behavior in C and C++ by simply trying out code in their compiler and seeing what it does, they'll reach completely incorrect conclusions. What's worse, they'll be convinced that they're entirely correct simply because they've never been proven wrong. In a professional setting, if someone doesn't catch them they might make a lot of damage before the code finally blows up.
So now programming, including experience, can in fact be taught, and the previous totally-by-intuition theory can be thrown out. I’m glad there’s agreement on that, complete with the supporting example. It was a long road but it needed to be travelled.
something moronic some doofus babbled
Ah, the 'sound' of silence.

Been seeing that a lot lately.
againtry wrote:
of course experience can be taught

Experience is not something that can be taught. It can be gained throughout the course of being taught, but it itself cannot be taught. How do I explain this...

For example, you can teach a kid the basics of programming, but can you teach him experience in using them?

Wikipedia wrote:
Empirical evidence is the information received by means of the senses, particularly by observation and documentation of patterns and behavior through experimentation.

Generic, but it works.

"Empirical evidence" is the fancy term for "experience," the way I was using it.

You can't teach something like that. You can help someone "receive information" that gives them "experience," but you cannot teach experience itself.

@helios,
It's fine if @againtry wants to do that, he'll just run up into a brick wall with me though. I love a good debate, especially if it's a totally pointless one ;)

That's not teaching how, though, is it?

Oops! I did not mean how, I meant something like the methods or the basics of programming.

In a professional setting, if someone doesn't catch them they might make a lot of damage before the code finally blows up.

LOL, why do you think they only hire experienced developers? It's so they don't have that kind of thing happening. Experienced developers won't make those kinds of mistakes unless they're working with something completely new.

by simply trying out code in their compiler and seeing what it does

Heaven help us if people start learning programming that way. I self-taught myself, but I used a book, VHS tapes, and floppy disks with programs stored on them. I did occasionally try stuff out, but only when I had a pretty damn good idea of what it was going to do. I sincerely hope people who are that stupid never make it onto forums like these (tongue in cheek).

This debate is finally getting interesting! "Interesting," meaning pointless.
Experience is not something that can be taught.

Experience can't be taught ... but, but experience is 'generally' the same as 'knowledge' as we have found out after the side trip to Higgs boson and back.
So, knowledge can't be taught. There's a novel idea.
What's left to be taught? Intuition perhaps? I don't know, I think I'm lost for words, because there are no words to describe 'it'. That's probably why 'it' can't be taught.
The debate goes full circle - without points.

I self-taught myself
As if someone else would be involved in self-teaching notwithstanding the impossible nature of being taught anything.
"Empirical evidence" is the fancy term for "experience," the way I was using it."

And then we have Lewis Carroll:
"When I use a word," Humpty Dumpty said, in rather a scornful tone, "it means just what I choose it to mean—neither more nor less."
"The question is," said Alice, "whether you can make words mean so many different things."
"The question is," said Humpty Dumpty, "which is to be master—that's all."


You can't teach something like that. You can help someone "receive information" that gives them "experience," but you cannot teach experience itself.
So we can't train our senses or even be assisted in that by a teacher? Tell that to a wine-tasting class getting their 'yuk' turned into 'yum' by someone expert in what to look/taste for and share the experience - even to the point of empirically-scientifically tested for evidence of drunkeness.
Experience is basically knowledge gained over time through experimentation. So, you're partially right. It can be taught, but it generally isn't because the length of time involved is usually quite long– maybe even a lifetime.

It's kind of like "A square is a rectangle but a rectangle is not necessarily a square."

Do you see what I mean?

Experience is knowledge (kind of), but knowledge isn't necessarily experience.

I hope I'm getting my point across. If not, I've about reached the end of my rope.
Pages: 123