« The evil of ARGB 0x00000000... | Main | So you want to be a coder... (Part 1 - Nuts & Bolts) »

09/27/2012

Comments

Feed You can follow this conversation by subscribing to the comment feed for this post.

John

About the drawing with a pencil, did you know you could learn to draw with other tools, such as chalk, paint, or even Photoshop ? The whole point of previous author is about teaching art, without forcing students to use a pencil or a brush... but you seem to have missed this point.
About your opening statement in your conclusion : we don't neither need blogs to be opened to more people intolerant and short minded like you are...

Nicolas

I agree with the general statement, but the tone is a bit harsh.

Anyway, I simply just fail to see how Learnable Programming says anything about programs, because programs are huge (in his example, what about if I want to know what the eclipse function does, or the house function and every related code section), and are very rarely about drawing stuff but mostly about data. If I want to draw, I go to photoshop, gimp or inkscape. When I program I use lists and dictionnaries

I mean, if I stumble upon a bloom filter, seeing what is inside, and it's purpose is going to be hard to draw, in context, everywhere I might want to know what a bloom filter is. I have a dict containing thousands of keys, should you really display it along side my code ?

John

The idea of Learnable Programming is about teaching programs, not about using them in a development environment for huge projects...
I think that's what the author of this blog completely missed : the thing is about teaching programming. Of course, when doing professional development, or advanced programming classes, it is necessary to switch to something different.

Question

One way of reading and summarized this rant is this one :

"I'm a professional programmer, experienced, seasoned.
It took me years (if not decades) to get to my current expertise level.
I can't possibly imagine newbyes fastly reaching an efficiency level uncomfortably close to mine without first going through the same mincer.
I want morons to remain morons, so that i can remain superior to them."

Rude ?
Well, i'm convinced that a lot of people (generally speaking, not in programming business) think exactly this way, protecting their own rank and their guild.

Stephen Nichols

John:

First off, fuck you. You have your head so far up your ass, you must be chewing on polyps for breakfast, lunch and dinner.

I have this habit of reading what people actually write and responding to that. Sadly, you seem incapable of reading and comprehending what Brett actually wrote. He said, plain as day, that this system he was outlining should be applied to both learning and production environments.

He also wrote that learning about pencils is not the same as learning to draw. Sure, if you're drawing with Photoshop then why learn about pencils? But my point still stands unmolested against your pitiful attack. Here's the point again, in tiny words that you can understand: To learn any high level skill requires that you learn the basic skills that undergird it.

Shit, I still used some big words there. I hope you can understand it... or do I?

Stephen Nichols

Nicolas:

You're exactly right! His essay outlines a system that is functionally retarded for use in a real world program. I'd go further and say that those learning to program under such a system would end up with the wrong set of skills for dealing with real world code and live systems of even marginal complexity.

I don't apologize for my tone. I'm kind of an asshole in many cases. :)

Stephen Nichols

Question:

One way I could summarize your comment about my rant is: "I'm a fucking dumb ass." But I'm sure that's not what you intended.

Your comment is wrong for two really simple reasons:

1. Morons, by definition, are intellectually incapable of grasping the intricate details required to write code and debug systems. It's not that I want to keep morons down, it's that they can't get up! You might as well try to teach my dog how to code.

2. Every skill takes thousands of hours of practice to master. Ever hear of the 10,000 hour rule? Go look it up. This puts masterful coding out of the reach of all but the most dedicated. Just like brain surgery, or being a judge, or being a master mechanic or even a master chess player.

No matter how you slice it, code morons can't code. And, if they learn to code, then they aren't morons.

Raph Koster

I think you make the mistake of confusing people whose brains work differently than yours with "morons."

There are plenty of artists, for example, who would benefit from learning to code, but for whom the barrier to entry for regular programming languages is high. Different people have different learning styles *even though they may be equally smart*. Creating a more visual way of seeing code flow would help these people understand what is going on.

Some of the points he makes would make debuggers way nicer; why do we live without those features? Because the people who write debuggers and IDEs are not infoviz or UX specialists and therefore don't even think to have those nice graphical bells and whistles in the debugger. Again, because different brains lean towards different solutions.

"Reading the code" or "reading the manual" is actually a very good example. A very large proportion of the population actually prefers to learn by doing.

Is every idea he suggests a good one? No, not in my opinion. Is the overall idea good? Absolutely. Code literacy is going to be increasingly important. I WANT people who have had trouble learning it to have an easier time.

I especially want future politicians to understand it, before they set up even more silly policies.

Stephen Nichols

Nice points Raph (especially the point on politicians). Although, would them understanding coding guarantee that they'd make better choices? We'd like to hope so. :)

I've seen plenty of domain-specific visual "programming" solutions that help bridge the gap for non-coders. A good example is visual shader creation tools, like the one provided in the Unreal Engine.

I'm all for those kinds of tools. But, I wouldn't go so far as to say that the users of those tools are programmers. Because they aren't.

I also concede that debuggers could be improved. Of course they can. One of my favorite missing features in debuggers these days is instruction playback. That is, at the point of a crash, being able to rewind execution to see what happened leading up to the crash. Interestingly enough, that was available in the now DOA SoftICE. I haven't seen it again.

I don't agree that I'm labeling those different from me as morons. I'm labeling morons as morons. Programming, as I understand it, is a much different affair than what is outlined by these visual crutches. Are the crutches bad? Of course not. Let folks use their domain-specific tools to solve problems all day. That's awesome.

But, that's not coding. It's not programming. It's a valuable skill and necessary for content creation... but it's not programming.

I look forward to the day when we can say: "Computer, create a fully configurable avatar rendering system." And then the computer just shits it out. Man, that'd be sweet. But, that's not programming either.

Thanks for the comment!

Brian H Sharp

I curse like a sailor, man, but your tone and attitude here are really challenging to me - Brett's obviously a smart guy, and you respond to his points without going all ad hominem on his ass.

Also, as a professional programmer, I didn't have trouble "choking down" his essay. I agree with him that we do a poor job of teaching people to program. Where he says it's "not a rote skill" and you say he's wrong, I think the reality's more complicated than that. Programming, like any craft, is both theory and practice.

Making videogames, I work a lot with people who aren't formally programmers but are somewhere on the spectrum, but the spectrum isn't completely gradual - you can't "crossfade" from being a pure artist, say, to being an artist who knows how to program without making one big, discontinuous leap: understanding how you build an algorithm.

Of your entire diatribe the one thing I will say is absurd and I can't believe you wrote it is:

"learning programming is applying your already existing skills of abstraction to an unfamiliar language meant for the alien mind of a computer. Every human already knows about abstraction."

Programming languages are not "unfamiliar languages", because even calling them "languages" is not really right. It's not like C++ is comparable to English. They're not even for the same thing. Programming languages are for issuing direct instructions to a machine that works in a very specific way.

Almost nobody does this on a regular basis. When Brett talks about Logo and the other old programming learning environments, I think his whole point is getting people to think this way. If you claim all people can think this way then you must not work with many non-programmers because this is a HUGE hurdle for lots of people. I know people who have wanted to learn to program and couldn't make the hurdle.

Back when game engines starting incorporating visual programming systems into their tools there was this discussion about it: does this ease designers into being programmers? My experience is, it does for some, but not all. There's still a switch that has to flip in someone's head.

That switch works like this: in the 'off' position, the only model of interaction with a computer that you can understand is like a mixing board, where you have a lot of knobs to fiddle with. You only understand fixed-function systems where you just adjust parameters. Of course you don't even understand that sentence if you're in that position.

When the switch is on, you're the guy who can build a mixing board, the guts of it, do the wiring. You understand how to build algorithms. That's the core of it.

Once you understand building algorithms, then you can understand abstraction and you should learn a few good languages that teach you good habits.

In all of that I think Brett is right on, and I think it's weird that you so vehemently disagree with him.

As far as his extrapolations to "this is how programming should work even for production systems" and "it's a failure if a programmer needs to simulate a computer in his head," I absolutely disagree with him. I think being able to simulate the computer in your head is one of the most critical skills of being able to program in whatever system and whatever language. That's the programmer's version of empathy. Literally.

But I don't understand why you're so angry.

Stephen Nichols

Brian:

:) Don't misunderstand. I'm not angry. I just think that his essay is plain wrong. He's describing something that isn't programming... and calling it programming. Shame on him.

I think you missed my point entirely. Perhaps I didn't make it clearly enough. Let me try to rectify that.

When you quoted me, you missed the most important point of my statement:

"...learning programming is applying your already existing skills of abstraction to an unfamiliar language meant for the alien mind of a computer. Every human already knows about abstraction. It's just the foreign environment that makes conveying your abstractions to the computer more difficult to grasp for beginners."

Programming languages are languages. You can speak them, read them and write them. Hell, there's even the word "language" that's used to describe them.

The problem is that computers don't "think" like people. Right? So, to get a computer to do something, you have to put your instructions into terms that the computer can understand. This is, as you pointed out, a foreign skill for many people.

That's what these simplistic languages do for the human. They help them convert their desired behavior into instructions that the computer can follow. Many people don't think that way. They have a hard time applying the necessary reductionism to build their solutions.

That, of course, is the switch that you talk about in your comment. Some people have the "wiring" for that switch to flip... and some don't. And no amount of domain-specific solutions or hand-holding will make that true.

Until the computer gains enough intelligence to do what a user wants instead of what a user says this utopia of "everyone's a coder" will remain out of reach.

Brian H Sharp

Nah, I think you can flip that switch for people. It's awesome to see when it happens, too. And you CAN'T understand abstraction with code until you understand what it means to build an algorithm, because that's the space in which you abstract. You have to understand that space first. If all you see is a mixing board then "abstraction" means... drawing colored boxes around the related knobs? It's not even clear.

Abstraction only makes sense when you understand how to build things; you only understand how to build things when you understand what a computer is and how it works (or the virtual computer your code is really executing in these days - same thing) and when the light bulb goes on in your head and you go from merely understanding "declarative" and start to understand "imperative."

I think it's a totally teachable skill because I have seen people learn it. And I think that's all Brett's talking about, really.

Stephen Nichols

So, just to make sure I understand you, are you saying that everyone has the ability to learn mapping desired outcome to computer instructions? If so, I see no reason to believe this is true.

Perhaps we disagree on what abstraction is. Human beings are abstraction machines. That's how we accomplish almost everything in our daily lives. We all abstract concrete reality into a personal conceptual model. That's what we do all day every day.

The problem is that the computer is just somewhere else "mentally." Adapting your thinking so that it overlaps with the computer is the central issue in programming.

Meaningful communication requires a shared model of the world between the communicators. Computers have no shared model of reality. The computer has no concepts at all. This puts the budding computer programmer in the difficult situation of learning how to think like a machine (as you pointed out).

Hell, most people have problems talking to each other clearly. Let alone to a foreign mind that has no shared model of reality.

There's just no meeting the programmer half way here.

Abstraction isn't the issue. We all abstract every day. Communicating with the computer IS the issue. Speaking "computer" is the issue. That's what programming is.

Brian H Sharp

Nope, I don't mean everyone. There exists some set of people, a subset of all humans alive, who COULD flip that switch and understand how to build an algorithm, but HAVEN'T flipped the switch yet, and hence don't yet understand that.

Those are the relevant people, and those are the people Brett is talking about. How do you help them flip the switch? It's not like everyone who has the potential to be a programmer is born with that switch flipped and that light bulb on.

So for the people with the ability to make that leap, how do you structure their environment to give them favorable chances of making the leap? I think that's what Brett's talking about, and to that question I think his points are good ones.

Stephen Nichols

Fair enough!

Jetsers

It makes me proud to have called you boss for a time.

Stephen Nichols

I love you too, "Jesters." ;)

Amy

"...I just don't know that many good lady programmers. If this guy is trying to teach ladies to program, that's his first mistake. I kid... I kid? :)"

Haha.

Guess you just don't know many ladies.

Stephen Nichols

I guess not! Pleased to meet you! I assume you're a lady programmer.

At least you got the joke. Some ass hat's can't see that I'm kidding. :)

matt w

Stephen,

It doesn't matter that you think you're kidding. It's still a sexist joke. If you said "I just don't know that many good Jewish programmers. If this guy is trying to teach Jews to program, that's his first mistake," would that be funny or anti-Semitic?

Stephen Nichols

Please, cry more. I like it!

The answer to your question? Both.

The best part is when you made an anti-Semitic joke while you were trying to make a point about my sexist joke. Why do you hate Jews so much?

By the way, did you see how I made fun of retards on another post? Enjoy!

matt w

Ah, OK, so you are in fact acknowledging that your joke was sexist. Too bad you don't have the guts to admit it outside the confines of your own blog. Have a nice day.

Stephen Nichols

Admit it? Are you high? It was obviously a sexist joke and not a statement of fact. Was it a joke about penguins? Perhaps it was a joke about genitals.

Please extract your head from your ass.

Verify your Comment

Previewing your Comment

This is only a preview. Your comment has not yet been posted.

Working...
Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.

Working...

Post a comment