Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Problematic post on teaching programming

by Scott7477 (Chaplain)
on Apr 02, 2006 at 22:23 UTC ( #540810=perlmeditation: print w/ replies, xml ) Need Help??

is in my opinion, this: The Perils of JavaSchools. Courtesy of Mr. Joel Spolsky..

His thesis boils down to this statement from the post: "I've seen all kinds of figures for drop-out rates in CS and they're usually between 40% and 70%. The universities tend to see this as a waste; I think it's just a necessary culling of the people who aren't going to be happy or successful in programming careers." The reason for those dropout rates?

"You used to start out in college with a course in data structures, with linked lists and hash tables and whatnot, with extensive use of pointers. Those courses were often used as weedout courses: they were so hard that anyone that couldn't handle the mental challenge of a CS degree would give up, which was a good thing, because if you thought pointers are hard, wait until you try to prove things about fixed point theory."

A sensible course of study in any subject starts with basic concepts and moves by steps to the most difficult topics. The monastic metaphor of perlmonks.org reflects the idea of helping individuals move forward. One makes progress initially by mastering the basics and a process of trial and error. Naturally, more difficult topics are likely to take longer to master. I'd be willing to bet that there are any number of monks who are happy and successful in programming careers who didn't bother with a jaunt through an institution that espouses Spolsky's elitist views on higher education.

In my view, the inability of a student to master a subject can be as much a failing of the teacher as of the student.

Edit by GrandFather - removed gratuitous br tags.

2006-04-03 Retitled by planetscape, as per Monastery guidelines
Original title: 'Worst blog post ever on teaching programmng'

Update: jeffa and dragonchild's comments about the need for colleges to manage class sizes are reasonable. To me, the way to handle the problems they raise can be solved in a different way than making an entire class obscenely difficult. In a lower division physics course that I took, the course materials and routine assignments were doable by anyone who put in the right amount of time. However, the final exam as it was designed presented several problems that had aspects that had not been discussed in class. The result was that you had to use both your class knowledge plus your problem solving skills to complete the exam. I thought that was a fair way to stratify the grading curve and thus provide the faculty with a way to set a cutoff point for admission to the higher division. The point being that the faculty expected that everyone in the class could learn the basic material.

With respect to brian_d_foy's comments, I carefully re-read my phrasing and I want to clarify that I don't think of Spolsky as an elitist generally. I was simply referring to his views on CS education. Plus, after re-reading the blog post, I think it is at least partly tongue-in-cheek.

Spolsky mentions "all-Java" schools. I certainly hope there is no such thing. Students should certainly be exposed to more than one programming language in a degree program.

I have changed the title of this from "Worst blog post ever on teaching programming." I admit, that was a little over the top. Hopefully, the new title is more reasonable.

Comment on Problematic post on teaching programming
Re: Worst blog post ever on teaching programming
by Zaxo (Archbishop) on Apr 02, 2006 at 22:36 UTC

    Successful autodidacts would any of them handle the course material just fine. They may not have got along with a teacher, but a student can always find another teacher.

    One of the advantages of a good education is that it teaches you to autodiddum without believing everything you read. If it doesn't teach that, it's not a good education.

    After Compline,
    Zaxo

      I agree with you. I tend to see teachers ideally as facilitators of learning or as mentors. Raw information can be had from books
      and other sources. A teacher should provide guidance and encouragement.

      The whole concept of introductory courses as "weed-out's" is repellent to me.

        The whole concept of introductory courses as "weed-out's" is repellent to me.

        How about the concept of intermediate courses as "weed-outs?" At some point, you have to separate the ones who are serious about the subject and those who are just there because they don't know what they want to do for a career. Better to find out sooner than later. I was "weeded out" from the accounting major by the time i hit junior level and let me tell you, i am very thankful for that.

        The only thing i find "repellent" about "weed-out" courses is when i am required to take one in my minor field. Other than that, a teacher can only provide so much guidance and encouragement -- they simply cannot be expected to do the work for the student.

        You know what they call weed-out courses in the real world? "You're fired!"

        jeffa

        L-LL-L--L-LL-L--L-LL-L--
        -R--R-RR-R--R-RR-R--R-RR
        B--B--B--B--B--B--B--B--
        H---H---H---H---H---H---
        (the triplet paradiddle with high-hat)
        
Re: Worst blog post ever on teaching programming
by dragonchild (Archbishop) on Apr 02, 2006 at 23:45 UTC
    Whether you agree with this or not, there's a perfectly good reason for this strategy - it keeps the class size down in the junior and senior classes. When you have 4 professors each able to teach 4 classes and you want a class size of 20 or less, that means you can have 80 students per professor, or 320 students total. (The actual number is less than that because many upperclass students take more than one class in the major.) When each of your four freshman classes is 250 students, what are you supposed to do? You can only expect a 30-40% attrition rate due to non-major aspects. you still need to get rid of at least 280 students, if not more.

    In the school I went to, the killer classes were biology and psychology. There, the failure rate was expected to be between 25-30% with no more than 10% being A's. Every school has the killer subjects - these are the subjects the school is known for, so they get a higher proportion of freshmen taking those courses.


    My criteria for good software:
    1. Does it work?
    2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?
Re: Worst blog post ever on teaching programming
by blokhead (Monsignor) on Apr 03, 2006 at 01:43 UTC
    I agree with most of Spolky's points. It's also possible that I'm an just another elitist academic, though ;) Anyway, I think you may be lumping computer science & programming together in the same boat.

    Spolsky is talking about universities teaching computer science instead of teaching a programming language. Computer science is a difficult discipline. It is founded on math & logic, and no one is claiming these are easy. Acquiring the appropriate foundational knowledge requires many difficult conceptual leaps. He argues that we should not abandon them just because they're hard. Or if we do abandon them, we shouldn't pretend it's computer science that we're teaching.

    It's not as if the universities are just throwing irrelevant material at the students just because it's hard, or just to make themselves feel smart. The hard material is relevant and necessary for understanding the main results the field of computer science. A computer science degree should reflect knowledge of computer science, and I don't think that's elitist.

    As for "weeding out", I think that any student who goes into a CS degree program expecting nothing but Java lessons deserves to have a rude awakening, and as early as possible (for everyone's convenience). CS may require a lot more formality and mathematical rigor than a lot of college freshman are expecting.

    I'd be willing to bet that there are any number of monks who are happy and successful in programming careers who didn't bother with a jaunt through an institution that espouses Spolsky's elitist views on higher education.
    Of course. There's nothing being taught in universities that you can't learn on your own. I also don't think that's the point at all.

    blokhead

      It's not as if the universities are just throwing irrelevant material at the students just because it's hard, or just to make themselves feel smart.

      You've never been inside an actual university, have you? :-)

Re: Worst blog post ever on teaching programming
by brian_d_foy (Abbot) on Apr 03, 2006 at 02:00 UTC

    I'd hardly call Joel an elitist. He's not the one designing the curriculum or teaching the classes. He didn't invent the situation. He's just observing it.

    You have to remember, however, that all sorts of people have romantic notions about the work they think they want to do in life, and once confronted with reality find out they don't really like it or don't want that lifestyle. That's really all he is saying.

    Don't pull out a single essay to judge anyone. Take it in light of everything else they've written. I think you'll find Joel to be a lot less elitist than you accuse him of being. It's not like he's Paul Graham, who really is elitist :)

    --
    brian d foy <brian@stonehenge.com>
    Subscribe to The Perl Review
Re: Worst post on criticizing a blog ever
by eric256 (Parson) on Apr 03, 2006 at 04:40 UTC

    I don't know Joel Spolsky or where he stands, but I do know that your little excerpt is maybe 5% of his point.

    He is trying to say that schools only teaching Java are doing a diservice to there students and the profession because Java makes things so easy that people without the critical thinking skills needed for programming can still pass the course.

    Not having a degree, or widespread experience with other programmer i'm probably not qualified to aggree or disagree. However I took plenty of classes where there were students confused by concepts like variable, and "code", not to mention if statments or functions and subs. I would have been thrilled to have taken one of these tough classes to weed out the others so that my own experience would have been more than teaching the other kids in my class how exactly you login to a computer and run pascal. ;)

    But then I'm your regular home brew hacker and think that anyone who needs taught computers probably doesn't realy want to work on them. In my experience programming and logic are things you just have to inherently have and they can't realy be taught (/me sat throw several 'logic' classes and watched many people consistently not get it). Maybe I'm wrong, dunno. Either way your critical analysis of this "worst blog ever" realy sucked and lacked any basis or argument. So, if you insist on posting something with such a title, please back it up with some content and critical thinking of your own.


    ___________
    Eric Hodges
Re: Worst blog post ever on teaching programming
by TedPride (Priest) on Apr 03, 2006 at 04:59 UTC
    I don't know. Some student problems are the fault of the teachers, but on the other hand, many students are just lazy and don't work hard enough on courses they consider "too difficult". And the coursework for a programming degree IS quite difficult, when you consider that many colleges, even community colleges, require up through Calculus 3 and Linear Algebra. What's that all about? Why should programmers have to slog through Calculus 3? Anything after Calculus 1 is basically useless in terms of your career, and I'd think it would be far more useful to spend the same amount of time learning several new programming languages and/or operating systems.

    Bottom line though, I mostly agree with him - introductory programming courses are a good way to weed out the people who aren't commmited to getting a programming degree. What sort of person fails an introductory programming course? The sort of person who should be majoring in something else. Assuming your textbook is reasonably adequate, you have no excuse for failure.

      They all assume you'll be doing wierd, theoretical work, preferably, in CS grad school.

      You see, you might need calculus for non-linear optimization work, and you might need linear algebra and field theory if you decide to go into crytography research. So everyone has to take it.

      And if you decide to just do a job doing boring, practical things like writing programs that work, instead of clever, abstract things like proving neat, theoretical boundries on toy problems for systems that can never actually exist in the real world, you're derided for not being clever and abstract and academic enough.

      I don't know how many young kids I've seen wander out of a CS degree thinking a Turing Machine is Something Important(TM), as applied in the real world. They think that constants are irrelevant, because they learned order notation, but didn't learn quite enough.

      In reality, all those boring little constants in front of your abstract little order notation symbols mean the difference between "highly profitable" and "completely worthless". In the real world, people need constant time speedup: and the difference between running in twenty minutes and running in a hour can make or break a program. In the real world, you worry about the scalablity of your algorithm only after it meets the inital performance requirements to begin with. If the the hardware to make the problem fast is too expensive to do what the business requires, it's a no go, no matter how much nicer your algorithm scales "towards infinity".

      I don't know how many people have tried to use "Turing completeness" as a way to explain what a computer can or can't do, and gibber on and on about halting problems and so forth. It's far simpler than that: any computer you find in the real world will have finite memory, finite run time, and finite amount of cash available to construct and run it. No computer can do more than a finite state machine can, if only for reasons of economics. But finite state machines are boring, and we don't have a neat paradox for them, so I'm left listening to boring undergrads drone on and on about "undecidablity" as if it's a real world problem...

      When they get to the real world, they'll learn that no one else cares about CS theory. No one else cares about whether P=NP. They just want the billing system to run, the accounting ledgers to add up, and the reports to look pretty, with colourful graphs that show the wiggly line going upward. If you do what the rest of the world needs, you get paid; if you don't, you don't.

      Universities are largely in the business of training grad students to become professors; any other education they provide is mostly just incidental.
      --
      Ytrew

        Exactly.

        The most succinct encapsulation I've seen of your oh so eloquant dissertation above, is something I read in someone tag line somewhere. From memory it went something like:

        In theory, theory is enough. In practice, it isn't!

        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.
        Understanding the concept of a Turing machine is actually quite important in real-world programming. A little digression -

        Nearly everyone on this site will be able to point to an experience in their careers where they wrote something in Perl and it took them a couple days. Turned out to be really really useful and the PHB had it rewritten in Java. Took 15 people 6 months and it still doesn't work right.

        Why is that? Perl isn't inherently a better language than Java. In fact, there are many things Java has better support for than Perl. However, Java projects generally take longer than the equivalent Perl projects and generally require more people.

        My feeling is that Perl programmers tend to be more capable than Java programmers, precisely because we tend to have a stronger grasp of the fundamentals. Things like a Turing machine. In fact, I once implemented a Turing machine in production code because it was the correct and cost-effective solution to the requirements. It's easy to deride the theoreticals, but they're extremely useful, just not as presented. You actually have to think about how to apply them. :-p


        My criteria for good software:
        1. Does it work?
        2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?
        When they get to the real world, they'll learn that no one else cares about CS theory. No one else cares about whether P=NP. They just want the billing system to run, the accounting ledgers to add up, and the reports to look pretty, with colourful graphs that show the wiggly line going upward. If you do what the rest of the world needs, you get paid; if you don't, you don't.

        True.

        Of course sometimes knowing about N=NP, big O notation, etc. is exactly what you need to get the job done.

        I've encountered my fair share of fresh CS graduates who think they know everything and are terrible at their job. The thing is I've also encountered my fair share of non-graduates who've been working in the industry for years and think they know everything and are terrible at their job. I think a lot of this has to do with the person - rather than whether they come from an academic or industry background.

        Universities are largely in the business of training grad students to become professors; any other education they provide is mostly just incidental.

        Back when I was at uni I remember being taught tons of purely "academic" content. People I knew who were working in industry told me I'd never use it in the real world. Silly things like object orientation, virtual machines and garbage collection.

        I certainly don't think a university education provides you will all of the skills needed to do the job. I'm actually glad that they don't since I don't think universities should be in the job of just vocational education. They do provide a bunch of useful skills though. IMHO as ever ;-)

      I don't know. Some student problems are the fault of the teachers, but on the other hand, many students are just lazy and don't work hard enough on courses they consider "too difficult".

      You're 100% correct there!

      When I took my first Perl course a few years back, one of the people in the class was balking at figuring out a simple program to calculate the volume of a planet, given the variables needed to do the calculation. And this was one of the first assignments!

      Fortunately, that was an isolated incident and that person dropped from the course within a couple of meetings.

      Useless trivia: In the 2004 Las Vegas phone book there are approximately 28 pages of ads for massage, but almost 200 for lawyers.
Re: Worst blog post ever on teaching programming
by jonadab (Parson) on Apr 03, 2006 at 14:11 UTC

    I take it you would not be keen on my proposed course, "Freshman Diligence Seminar", a mandatory seventeen-hour course (3 hrs Mon-Fri plus 2 hrs Saturday) for first-semester Freshmen, designed to impart the skills needed to succeed in college (e.g., verbatim memorization, good note-taking, library research, the ability to wade through voluminous quantites of collateral reading, and the ability to put down what one has learned in writing in a little blue book on short notice).

    Okay, so I'm not 100% serious with that (albeit, I'm not 100% in jest, either). What I *really* think all college students should be required to take, that most schools unfortunately do not require, is a course in logic.


    Sanity? Oh, yeah, I've got all kinds of sanity. In fact, I've developed whole new kinds of sanity. Why, I've got so much sanity it's driving me crazy.
      What I *really* think all college students should be required to take, that most schools unfortunately do not require, is a course in logic.

      When I was an undergrad at RPI, the Symbolic Logic course was grouped with the Philosophy courses, and so it met the humanities credit distribution requirement. Everyone took symbolic logic. :-)

        Symbolic logic isn't really what I had in mind. I was thinking a traditional logic course, covering inductive and deductive reasonings, components of an argument (premeses, conclusions, and so forth), common logical fallacies, and the like -- basically the ability to distinguish between valid reasoning and nonsense. Though, symbolic logic also would not go amiss.
Re: Worst blog post ever on teaching programming
by bluto (Curate) on Apr 03, 2006 at 20:01 UTC
    In my view, the inability of a student to master a subject can be as much a failing of the teacher as of the student.

    This can be true, but often it is not the current teacher's fault, but a previous teacher the student had. In high school I breezed through math and even took beginning Calculus concurrently at college. I found out that my Trig knowledge was woefully deficient and soon hit a brick wall in the second semester when the two were combined. That wasn't the Calculus teacher's fault, but it was too late by then. I don't think the Calculus teacher should have slowed the class down to my level just because of an inept high school education -- that would have been unfair to the rest of the class.

    I made a personal decision not to be weeded out. I believed that I could indeed handle the mental challenge, I just didn't have a good foundation at the time. Sadly, there *are* people that can't handle the mental challenge, no matter the previous foundation. I believe he's just saying these folks should find something else -- I really doubt he'd say you'd have to get it 100% right the first time.

    I'd be willing to bet that there are any number of monks who are happy and successful in programming careers who didn't bother with a jaunt through an institution that espouses Spolsky's elitist views on higher education.

    I think what you really want to find is monks that are happy and successful that didn't go to school and that don't have the ability to understand C pointers and other fundamental CS concepts even after repeated attempts. I'm not saying these folks don't exist, but I'd like to see an example. Of course I don't think anyone really understands automata theory, for more than 5 minutes at a time ...

Re: Problematic post on teaching programming
by dokkeldepper (Friar) on Apr 05, 2006 at 08:12 UTC
    And thats why we need for perl evaled recursive pointers!
      You can implement that with pack/unpack if you want. (Look for the p/P options.)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlmeditation [id://540810]
Approved by rob_au
Front-paged by Arunbear
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (7)
As of 2014-07-28 23:47 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (210 votes), past polls