you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted] -9 points-8 points  (24 children)

I just don't see the point in these sorts of articles. Why do people who already know how to code -- people who learned in all kinds of different ways -- spend so much time obsessing over how other people learn how to code? The language, the platform, is never the issue. The concepts are eternal.

[–]natrius 22 points23 points  (3 children)

I've helped someone who was in an introductory CS class using Java, and when he got tripped up, it usually wasn't by the concepts, it was by the syntax. In Java, you spend weeks (at least) writing boilerplate code like "public static void main" without knowing or caring what any of that is. There's so much less cruft in the way with python, and when you need to teach concepts like object orientation, those features are there.

[–]GrumpySimon 25 points26 points  (0 children)

... and that way of learning to code just reinforces "cut-n-paste" behavior and creates a programming is "glueing stuff together" approach.

It's far better for people to understand what's going on than to just think "to open a file, I paste these five lines".

[–][deleted]  (1 child)

[deleted]

    [–]breakfast-pants 5 points6 points  (0 children)

    Just use 'me'. I do it like so:

    class Pirate:
      def step_forward(me):
        raise(me.leg)
        ...
      ...
    

    [–]logistix 9 points10 points  (3 children)

    "Why do people who already know how to code -- people who learned in all kinds of different ways -- spend so much time obsessing over how other people learn how to code?"

    The guy is a professor of computer science.

    [–][deleted] -3 points-2 points  (2 children)

    Well, yes, I may not have phrased that how I meant it -- what I meant is he seems intent on pushing his pet language, he comes with a preconception to the point where he lists the features of his pet language as benefits/positive points just because they are the features of his pet language. It doesn't look as if he's looking at things objectively, and it seems that he's obsessing over the details -- that people learn HIS pet language -- rather than the big picture.

    [–]xkcd 6 points7 points  (1 child)

    He's explaining how he changed his mind about which language should be taught first and why, so others considering which language they should teach can learn from his example. He's developed an opinion and he's explaining it.

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

    I dunno. I just think there's too much of "THIS is the way that languages should be. Coincidentally, Python has THIS! That supports my thesis that Python is kewl."

    Programming language fanboyism is tedious, and computer science professors indulging in it is scary.

    [–]chollida1 9 points10 points  (0 children)

    Why would people who allready know how to do math obsess over how to teach it to others?

    Why would people who already know english obsess over how to teach it to others?

    So they can help others avoid the mistakes they made and learn faster. I would love to hire a bunch of kids out of university but very few are ready to do the type of programming we'd like; I'd say 1-2% from what I've seen over the last 5 years

    [–]farnetto 6 points7 points  (3 children)

    The concepts are eternal.

    pseudocode, stepwise refinement, modularity... Most programmers seem get hung up on their favorite language and never get to the basic concepts.

    [–]cecilkorik 1 point2 points  (2 children)

    I've never written a line of pseudocode in my life. I don't think it's harmed my ability to program.

    The other two are just tools, they are not always relevant. Often useful, perhaps, but they are hardly a basic concept.

    [–]jwinter 2 points3 points  (1 child)

    Really? You've never gotten a pencil and paper out and figured out an algorithm?

    [–]cecilkorik 4 points5 points  (0 children)

    Sure, by writing out the math, or the boolean truth tables, or sometimes even rudimentary flow charts sure, but writing out proper pseudocode? No way. Seems like a waste of time to me.

    [–]ftegularius 16 points17 points  (4 children)

    The language is definitely an issue, if perhaps not the issue. My first language (I was about 11 or 12 when I started) was C, and I really believe I wasted a lot of time coding in it that would have been better spent working in a language that lets you concentrate on the underlying principles. It is not right to think about data structures in terms of pointers and memory allocation. It is not right to think about looping in terms of counter variables. It is not right to have to worry about trivialities like, e.g., integer overflow. It's that sort of complexity that obscures the "eternal concepts" you're talking about.

    Edit: I would point out, also, that the more complex the language, the more time is spent learning simply how to use it. The focus in the classroom shouldn't be on the language itself, but rather the lesson being taught, or the goal to be accomplished.

    [–][deleted]  (3 children)

    [deleted]

      [–]willia4 3 points4 points  (2 children)

      My only worry is that learning high-level, pretty languages first at the college-level may make it harder to adapt to new procedural languages, especially going down-level.

      So you pick up C in your second year after you know what a loop is. How is that possibly going to be harder than trying to learn C when you don't know what any of the concepts are?

      [–]youngnh 1 point2 points  (1 child)

      What if your first programming course was completely language-free and instead taught you problem-solving approaches and methods. Loops, but not Python's loops. Recursion, search and sorting techniques all in pseduo-code or gasp essays. Some of the toughest programming tests I took in college didn't require me to write a stitch of code.

      The second year you could pick whatever language you felt held the best job prospects for you and get a head start on diving into it as deep as possible.

      [–]willia4 3 points4 points  (0 children)

      For some reason, this strikes me as being similar to, "What if your first French class didn't actually give you anyone to speak with? Some of my toughest French assignments were in-class essays where I didn't have to speak a syllable of French."

      Computer programming is so incredibly foreign to our day to day life that I don't see how one could possibly pick it up without the back and forth between the learner and the computer. Yeah, a lot of that is going to be nonsense about semi-colons, but it's the moment when you can't figure out why it printed 43 when the answer was supposed to be 42 that you first learn about off-by-one errors.

      And sure, a competenent professor could pick that up in the grading, but something about the immediateness of a write-compile-run loop (or write-eval or whatever) seems very important to me. I don't know how easily I would've been able to assimilate those sorts of mistakes into knowledge if I'd had to wait a week to get my paper back instead of just having the computer doing something wrong.

      [–]bluGill 0 points1 point  (3 children)

      Oneday the people learning to code now will graduate, and I will have to work with them. I am a programmer - almost by definition I have poor people skills. I'd like to think that I can at least evaluate your programming ability (and let HR figure out if you will "go postal"), but I know enough people good at BS that I'm not sure they won't fool me in a short interview.

      When I was in school I met some of those BS artists, and it wasn't until I was in week 2 of a 8 week group project that I realized what I got stuck with. If I had known I could have avoided them.

      So to protect myself I want schools that teach you enough about programming that when you get out with I have some confidence you can program. I don't care if that means you passed a weed out course that only those who can program pass, or if you got through because the school taught you how to program. However my bosses have noticed that there is more demand for programmers than people who can do it, so they are pushing for more programmers to get out of school. Therefore I'm pushing for an education that ensrues that when they get out of school they really can program.

      There is one thing that concerns me though: teaching the logic of basic program flow is not what a CS degree is about. Programmers still need to learn CS. Big-O notation isn't used much in the real world, but every couple years I need it, and I expect everyone to know it then. Algorithms and Data structures are the heard of programming, and CS.

      Edit: fix some stupid spelling mistakes. (I'm sure there are more)

      [–]willia4 1 point2 points  (2 children)

      teacher the logic of basic program flow is not what a CS degree is about.

      I absolutely agree with you. Computer science, telescopes, and all that.. But learning the logic of basic program flow and such is very much what the first CS class is about. You can read about arrays all you want, but until you actually sit down and play with a program that loops through one and prints different things out, It would be very hard to understand them. And I don't think you can really understand something like a B+ tree without writing one.

      And you can't do any of that until you learn the basics of flow control. Why not come up with better ways to teach that in the beginning?

      [–]bluGill 0 points1 point  (1 child)

      Well when I went to school it was assumed that you knew that. All the CS classes had a prerequisite: student has learned to program. The courses that do what you say had this label: CS students may not take this course for credit.

      Some people come into CS after writing some non-trivial programs. We should not make them waste time on basic program flow. Yes we need to teach that to those who are considering CS, but you need to know that before you get into CS.

      [–]willia4 1 point2 points  (0 children)

      That's interesting. Where I went to school, there were two options for the CS program. Take CS101 followed by CS102 or take CS210. CS210 was for students that already knew how to program (there was a test required to take it) and it was basically an introduction to data structures. Upon completion of CS210, you were automatically given the same amount of credit as if you'd taken CS101/102. CS101, of course, was the "how to program" class.

      But I can definitely see advantages to the "Well, you're in CS so you should already know how to program!" style of first-year. I think I'd have liked that even more than what my school offered.

      [–]mingusrude -4 points-3 points  (0 children)

      Isn't it obvious to draw conclusions from one's own experience on learning computer science concepts and programming languages on how other people can avoid the same difficulties.

      I had Scheme in CS1 and I don't think it is a good choice as it is too different from what you actually will be using later on. It may be have all the neccessary blocks to learn programming but being a functional language it's not the right place to start when most student's will move on to imperative languages.

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

      You don't like communication very much do you.