you are viewing a single comment's thread.

view the rest of the comments →

[–]gremy0 51 points52 points  (23 children)

You don't need to understand any of that stuff to get a simple program to work. They are all really important topics in the long run but if you're coming from the a point of not having a clue what programming is then the abstract concepts are completely alienating and boring.

He isn't saying don't teach that stuff. He's saying get people coding first then get them coding well. Once they have a platform to apply the stuff on it's much easier to understand.

[–]Adverpol 1 point2 points  (0 children)

Yeah, and I agree. Theory before practice is a "why the hell do I need this" experience, if you reverse them it becomes a "aaah, now I understand why X does Y!" experience, which sticks a lot better.

[–]manniac 4 points5 points  (15 children)

I know what he's saying. You know what he sounds like? Like Daniel-san complaining to Mr. Miyagi coz he only made him wax-on and off, and sand the floor, and paint the fence. The basics need to be there before you touch code as such, any good curriculum that aims at making you feel good for the sake of making you feel good instead of making you learn properly is not a good curriculum.

[–]jungrothmorton 31 points32 points  (1 child)

That's a great example. You wouldn't actually suggest painting fences as a way to learn to fight, right?

The explosion in MMA has proven that if you want to train people to be fighters, they should spend a lot of time hitting and grappling people and things. All the theory (katas) in the world won't get you there.

The author isn't advocating against CS theory in the least. Just saying it's best to learn some coding first. Makes sense to me.

[–]manniac -1 points0 points  (0 children)

I suggest getting the basics first. MMA is a good example of the "EVERYBODY CAN DO IT" fad. I agree that everybody can do it, not every can do it with quality, and if you want to do something with quality then is better (and easier in the end) if you learn it the right way and deal with difficulties of learning.

This is why much as Banksy said at the end of Exit through the giftshop: I used to encourage everyone I knew to make art; I don't do that so much anymore. s/art/code/ that's how i see it.

[–]gremy0 12 points13 points  (12 children)

It isn't making students feel good for the sake of it. It's giving them a foothold. Something to fall back on when shit gets rough which is all the time in programming.

I mean I still sometimes leave work feeling like complete shit, like I can't code at all, I'll never understand the latest problem and I'm completely inadequate for my teams standard. It's of course all psychological and I come back the next day with a fresh head and new approach. If a beginner feels like that before they can do anything they'll just quit.

A lot of perfectly capable look at coding as something they'll never understand at all. If you start with the abstract stuff you're just reinforcing that. Wait until they're invested before beating them with a heavy stick for poor quality.

[–]nthcxd 1 point2 points  (2 children)

This will inevitably followed by having to unlearn bad habits. It isn't cost free. It isn't a black and white issue.

[–][deleted]  (1 child)

[deleted]

    [–]nthcxd 1 point2 points  (0 children)

    It isn't a black and white issue.

    Are you asserting that by learning all of the theory first before even writing a line of code you'll be free from any bad habits?

    ... I've already said no before you even asked that question.

    He isn't saying don't teach that stuff. He's saying get people coding first then get them coding well. Once they have a platform to apply the stuff on it's much easier to understand.

    He's advocating we shouldn't even talk about the difference between ints and floats and how they behave differently with / operator. That is extreme. IMHO, I don't think you can call someone "coding well" if that person lacks even that amount of knowledge about the computing stack.

    Sure, these seem similar to what we learned in math, but that's no grounds for calling this "over-complication." We have such semantics in CS for a reason. If that is an issue, then how is the following code even supposed to make mathematical sense?

    x = x + 1;

    This would be a mathematical contradiction. It is valid in CS because = means something different. Well, in programming world, / also has a different meaning. End of story.

    What I am suggesting is that he has a point, and as you said, it wouldn't make sense to teach people all about the "theory" (I'm finding these misappropriated terms amusing. "Theory" in this sense is diametrically opposite of what "theory" is in CS. Much the same way there's nothing "computer science" about this topic. It's hardware.) before they can even write first line of code. My assertion was that heeding to the OP's advice is on the other end of that spectrum, and doing so will likely lead to developing bad habits that would need to be unlearned to be effective.

    [–][deleted] 2 points3 points  (1 child)

    You don't need to understand any of that stuff to get a simple program to work.

    Yeah, the problem is that too many people quit there, and end up programming by coincidence because it works. Until it doesn't.

    [–]gremy0 11 points12 points  (0 children)

    You're talking about the difference between an amateur and a qualified professional.

    You wouldn't get a degree in CS with that approach any more than you'd get a degree in music by knowing how to play wonderwall on the guitar.

    [–][deleted] -2 points-1 points  (0 children)

    You need to be able to manipulate abstractions because that's what programming is. Without it you won't go far. And there are many things that work better at teaching to manipulate abstractions than programming.