The Source for Java Technology Collaboration
User: Password:



John Reynolds

John Reynolds's Blog

Remedial Programming Classes?

Posted by johnreynolds on April 19, 2005 at 07:06 AM | Comments (18)

I came across a disturbing factoid this morning: "U.S. students earlier this month made their worst showing in the 29-year history of the ACM International Collegiate Programming Contest."



By pure coincidence, I had a chat last week with a friend who is an adjunct professor at a well known university. For some reason the topic drifted towards discussing the relevancy of computer science curriculums.

It has been a long time since I finished my Master’s thesis, but even then I had qualms about the relevancy of my coursework. Many of the courses that I took in college were taught by brilliant men who were lousy teachers. My general feeling was that I was being taught by a bunch of well-meaning PhD’s whose secondary objective was to get me to earn a PhD (the primary objective of my professors was always to get grant money for their own research projects). Presumably, once I earned a PhD, I could then go on to teach other students so that they could earn their own PhDs.

I’ve lost touch with academia, but my friend (the adjunct professor) tells me that many universities are actively shunning relevancy in their computer science curriculums (they don't want to be confused with vocational schools).
I was surprised to learn that my own undergraduate alma-mater now mandates Lisp (actually Scheme) as its Lingua Franca. Apparently this will insure that under-grads don’t confuse learning a programming language with learning how to program. I grok their intent, but this approach conjures images of cap-and-gown clad men reciting Latin prose while smoking cigars and sipping brandy.

Unfortunately, I am functionally uni-lingual (You’ve doubtless heard the joke:”If you speak 3 languages you are tri-lingual; If you speak 2 languages you are bi-lingual; If you speak 1 language, you are an American”). I can understand a bit of Spanish, but if I want to have a conversation I have to use English.

Perhaps if all of my college courses had all been taught in Latin (the root of western languages like Portuguese), I would now be multi-lingual; able to fluently converse in myriad tongues. Perhaps, but more likely I would be limited to basic communications (“I need this” “I want that” etc.) in eleven different languages.

Precise thought requires precise language. Nuance requires mastery of an extensive vocabulary. Nuance and precision are hallmarks of successful programmers.

So should my alma-mater dump Lisp and adopt Java? Java may just be a flash-in-the-pan fad (like COBOL and FORTRAN). Languages promote patterns of thought and preferred approaches to solving problems… Would Java’s Object Oriented approach taint young minds and sour them on Aspect Oriented Programming? Maybe AspectJ is the future? Maybe Ruby is a better choice? It appears that Lisp has Latin’s advantage: it is a dead language***. The University doesn’t have to pick a winner from the pack of contenders; they can pick a legacy language and be done with it.

I don't know if any of this is responsible for the decline in U.S. programming skills. It's great that other countries have made dramatic improvements.. but something's wrong back here in the U.S.A.


***Please note that I don't hate Lisp. My Masters project involved optimizing processor designs to execute Lisp.

To be fair, universities aren't advocating exclusive use of Scheme, they are using Scheme for introductory classes.

Here's a good link to one university's proposal for introducing Scheme before Java: The proposal is well thought out, but I have to highlight the following snippet: "The possible drawbacks include entry-point confusion, perceived irrelevance of the language, difficulty in moving between sequences, awkwardness in language transition, and diversity issues in upper-year courses"




Update: Norm Matloff has authored a rebuttal to the artice that first caught my attention: "Johnny can so program".


Bookmark blog post: del.icio.us del.icio.us Digg Digg DZone DZone Furl Furl Reddit Reddit
Comments
Comments are listed in date ascending order (oldest first) | Post Comment

  • Which university is using Lisp, and do you mean Scheme or Common Lisp or some other dialect? (repy from John... it's actually Scheme, and my undergrad alma-mater is Rice University)

    Posted by: ralphc on April 19, 2005 at 07:54 AM

  • I graduated in 2000, from a private school that was fairly up to date on development tools in its curriculum. Sadly, Powerbuilder was a requirement. It was a dying language at the time, and now is quite defunct. Our industry is always in flux, but to make the best graduates I think that the most recent development languages should at least be offered, if not required. Otherwise it's akin to turning out engineering graduates without experience on Catia...oh wait universities already do that! Maybe there's simply a problem with the professors on tenure not wishing to learn nor teach a new skill.(reply from John... I added a link to Catia. I'd never heard of it before. Thanks)

    Posted by: phlogistic on April 19, 2005 at 10:20 AM

  • I think both camps are correct. The universities are right to worry that their very expensive degrees could be perceived as interchangable with a much cheaper vocational degree.

    Of course, we all know that learning to program and learning computer science are two very different things. But, then, riddle me this: why do so many schools have their computer science department within the school of engineering? It's not engineering. It's mathematical theory.

    Carnegie Mellon has two different tracks: a computer science track and a "computer engineering" track (which, in their case, means computer hardware engineer).

    I think we need a software engineering curriculum. It should require courses in the computer science department, but the focus of the degree is to turn out good software engineers. This is a very different skillset than what you need to be a PhD-bound computer scientist. It's also very different than what you'd learn in a vocational school, just as learning to be a machinist at DeVry is not the same as a Mechanical Engineering degree from MIT.

    It would include courses in design patterns, system architecture, tech writing and QA theory, in addition to a grounding in algorithms, data structures, and automata.

    Posted by: richunger on April 19, 2005 at 12:15 PM

  • richhunger is a genius.reply from John... I agree with bugmenot147

    Posted by: bugmenot147 on April 19, 2005 at 12:53 PM

  • "Java’s Object Oriented approach" - What an oxymoron!

    Personally I think Scheme, Lisp, and Smalltalk, should be the staple of all "Computer Scientists".

    Universities should not be doing _any_ vocational training in languages such as Java and C#... Lisp is hardly a dead language anyway. However, Lisp has been around for over 40 years, and will probably be around for another 40.

    However I imagine there will be a geat need for Java programmers in the future: To maintain all of the Java code that's out there. Much like cobol, and VB....

    If I went to uni, and they tried to teach me "Object Oriented" programming via Java. I would be upset. Then again, I probably wouldn't know any better...

    reply from John... Latin isn't really dead either. I'm sure that it will be around as long as the Pope is Catholic (And where would Emacs be without it?)

    Posted by: malby on April 19, 2005 at 08:29 PM

  • "It would include courses in design patterns, system architecture, tech writing and QA theory, in addition to a grounding in algorithms, data structures, and automata."
    richhungers comments sound like he's been reading our proposed curiculum. At Swinburne, where I teach as a lowly academic (who isn't even thinking about a PhD), we have been teaching OOP using Java for a number of years. Some of the research I have done indicates that this is failing students badly. Now we are talking about a new curiculum based on exactly what richhunger suggests.
    And our first teaching lanugage?
    Pascal.
    reply from John... I can easily grasp why it's a bad idea to introduce OOP in introductory classes, but couldn't you use the Java language to introduce "funtional programming". Admittedly, there probably aren't any Java books that don't dive right in to classes and objects, but you could always write one ;-) It's been a long time since I've actively used Pascal (remember Modula2?), but I don't remember any language constructs that Java doesn't have. Just a thought...

    Posted by: nedlud on April 20, 2005 at 02:42 AM

  • Excellent problem John. Remembering my undergrad and grad days. Ah, the difficulty of waking up by 10.

    I think the real problem is that languages like Java and .NET separate you too much from the computer hardware. C++ and C are much closer to the hardware and require a better understanding of strong data structures and alogorithms. Not to say I think C/C++ programmers are better but abstraction is dangerous w/o understanding the consequences. Our current model for teamwork can allow a naive programmer to make assumptions that the full deployment can't support.

    I also know few undergrad who could truely appreciate J2EE and all the problems it solves. Most professors are not that interested in persistence problems so not sure the Java space really matches what computer science tends to handle.

    In my programming school we covered the following: perl, c, c++, java, ML, some LISP, assembly, pascal, unix script, and even had to make some of our own. I have to question a computer science individual who only knows one language or always reaches for one tool to solve all problems. Just like in real languages, often it's not just a new set of symbols but a different way of thinking: abstract, emotional, reactive,...

    Often I see posts complaining about the difficulty in Java for date transformation or mathmatical functions. If that slows you down enough, use something else.

    Posted by: smartinumcp on April 20, 2005 at 07:13 AM

  • Assembly, the one true language of computers. Teach it and that will help filter out the script kiddies, leaving the cream instead of the dregs. If American schools would stop lowering the standards and make it a struggle/challenge instead of a big frat party then we might see more talent.

    IMHO YMMV

    Posted by: sfitzjava on April 20, 2005 at 07:48 AM

  • I think you're echoing a common complaint (suggestion?), which is that universities should split "computer science" and "software engineering" into distinct - albeit related - fields. The analogy for me would be physics vs. mechanical engineering. The two fields have different goals, and should therefore have different curriculae, at least during the 3rd and 4th years.

    In any case, however, I don't think programming competitions are the best barometer of how well a nation's universities are teaching the next generation of programmers. Someone from a vocational school may be able to whack Java code 10% faster than me, but I'll take a university grad with a Lisp background any day of the week over another Java monkey who can't tell me the difference between the heap and the stack.

    Posted by: actionboy on April 20, 2005 at 08:22 AM

  • Patterson is correct where he says

    "In the last couple of years, the echoes of the dot-com bust and then this outsourcing stuff has really affected high school seniors' decisions."


    I can't blame them. I don't see young recent grads being hired. The intelligent people, the ones that would drive the score higher, act in their own best interests. It bothers me a bit when lagging tech leadership is blamed on high school students choosing the best options available to them. They aren't the ones driving the outsourcing boom...and all the indicators are that companies are telling us to expect less compensation wise...which is fine, but high school seniors don't have to walk into that game of diminishing returns voluntarily, do they?

    The scores may also be lower because recent graduates may not be able to solve problems alone...without out their pair programming buddy that is.

    Posted by: tcowan on April 20, 2005 at 11:04 AM

  • What happened to all the posts that were here?
    reply from John... The link on the java.net home page is to an archived conversation. I have no idea what happened, but no comments were really lost

    Posted by: smartinumcp on April 20, 2005 at 11:06 AM

  • It is a common trap to confuse language with the ideas of a discourse..

    Posted by: felipegaucho on April 20, 2005 at 11:52 AM

  • Of course, not all are the same, but my overall impression of the "strategic" view of the universities is that they still look at the software engineering as an extension to Mathematics.

    Simple fact: please, take a look at the scientific journals on Computer Science - what subjects do they cover. Most of them are mathematical algorithms of this or that. Try submitting a programming pattern to them and see what kind of reply you will get - I bet, they will say that the theme of the paper is irrelevant to their publication. Most of the theory that enterprise developers use every day - is irrelevant to them. How come?

    Compare the titles of Java Developer's Journal or JavaPro to the journals published by academia. You will get a feeling of what's going on.

    There's a _huge_ disjoint between the academia and the industry. I find it quite ridiculous. I do not think Software Engineering is a Fundamental Science (like Physics - where research may be done for the sake of research itself), I rather think it is a practical form of science and universities should be producing professionals for the industry, not some abstract bunch of Ph.Ds, mostly unable to design the simplest of enterprise applications.

    Software Engineering IS NOT about running mathematical algorithms on computers. No, no and again - no.

    Posted by: irakli on April 20, 2005 at 12:30 PM

  • Based on numbers from IEEE, the number of people programming have declined. In addition, the IEEE salary survey for 2002-2003 showed the first decline since the survey started 1973. I’m sure this had a direct impact on the number in CS.


    Posted by: malcolmdavis on April 20, 2005 at 01:27 PM

  • There's a _huge_ disjoint between the academia and the industry. I find it quite ridiculous. - irakli

    I couldn't agree more. I don't have a computer science degree - I have a Bachelor's of Business Administration With a Focus in Information Technology.
    So I'm a programmer, but I didn't take the X amount of required curriculum of pre-calc, calc, or assembly. Instead I took three accounting classes.
    But here I sit with my peers programming away, so...what was the point of of Calc, Accounting, or Assembly for any of us? I've used none since graduation.

    I think the disjoints hit hardest with rapidly changing hard knowledge fields. So if you're in advertising, HR, accounting, it isn't such a large
    transition to the workforce as it is if you are in computer science, engineering, or mechanics. Its why I mentioned my friend who graduated with an
    engineering degree...he was refused hiring at two firms because he had no experience on Catia. Dealerships are hard pressed to find mechanics qualified
    to use the tools and software used to diagnose / fix automobile problems, and associate degrees from colleges aren't teaching what's needed. Your car
    has flash rom too. I think the million dollar question is: how does a potential or current student know if their university teaches the latest and greatest
    hard knowledges pertanent to their field? Even then, who's to guarantee the university keeps up with the most current tools 3 - 4 years down the road?

    I don't see young recent grads being hired. - tcowan

    I don't see it either. I've been working in the IT field since 1996 (before my university graduation) and I've been the youngest developer at several jobs
    ...since 1996. That bothers me...where have all the recent grads gone? They have to be SOMEWHERE! Maybe they all leave the Detroit area.

    Posted by: phlogistic on April 20, 2005 at 01:37 PM

  • Here is a analogy that explains my position:

    Java Application development in the current industry is like picking up canned beans, pre-packaged Tortillas and a salsa bottle from a department store and concoct a Burrito or Enchilada by heating and a bit of mixing. In other words, anybody can do with a bit of exposure and experience.

    Universities should rather focus on teaching fundamentals: How to prepare the tortilla, salsa and get'em right.

    The two tracks have to be separate. After all it is the knoweldge of preparing the tortilla, salsa and more importantly adding preservatives enables the rest to pick them off the shelf anyway and concoct their enchilada and burrito.

    Posted by: srikanth on April 21, 2005 at 03:02 PM

  • Here is a analogy that explains my position

    Java Application development in the current industry is like picking up canned beans, pre-packaged Tortillas and a salsa bottle from a department store and concoct a Burrito or Enchilada by heating and a bit of mixing. In other words, anybody can do with a bit of exposure and experience.

    Universities should rather focus on teaching fundamentals, How to prepare the tortilla, salsa and get them right.

    The two tracks have to be separate. After all it is the knoweldge of preparing the tortilla, salsa and more importantly adding preservatives enables the rest to pick them off the shelf anyway and concoct their enchilada and burrito.

    Posted by: srikanth on April 21, 2005 at 03:02 PM

  • To further elaborate on my analogy

    Choosing the right tortilla and right sauce (chipotle, verde, caliente) is like choosing the application architecture (EJB, POJO, Asynchronous, etc..) for the given user requirements (eaters taste)


    The correct proportion of mixing the sauce, spices, grilled veggies are equivalent to design patterns and best practices


    The correct plate (paper, plastic - thick thin) is equivalent to selcting the J2EE application server, network hardware and bandwidth.

    Posted by: srikanth on April 21, 2005 at 03:30 PM





Powered by
Movable Type 3.01D
 Feed java.net RSS Feeds