Slashdot Mirror


Computer Programming for Everyone

jbc writes "According to Guido, DARPA has accepted an initial version of a proposal called Computer Programming for Everybody. The idea is to use government money to develop and promote a Python-centered curriculum for high schools and colleges. He defends the choice of Python, as opposed to languages like Perl, Tcl, or Visual Basic, because the latter are, in his view, 'too cluttered with idiosyncracies' to be effectively taught to beginners. " This is actually something I've been peripherally involved with. My CS teacher and I have been talking with Guido about this (I go to Yorktown, one of the schools mentioned in the proposal) - I can tell you firsthand that C++ is just too difficult for first-year CS students in high school, whereas Python is quite simple and elegant. Hopefully, this program will serve as a nice intro for students so that they can get started in programming and perhaps move on to other languages as they become more and more accustomed to the practices of programming.

475 comments

  1. stuff I forgot by Anonymous Coward · · Score: 0
    I don't know how I forgot this one. It must be readable, but not just from one assignment to the next. I've got Dbase code from 15 years ago that is immediately understandable. How many of these modern languages can say that? Most of them are like APL, fast and terse, but will it be readable 15 minutes from now?

    My big complaint with PdoxDOS, and most any language is the default variable scope. Everything was global unless declared local. Good grief, did that lead to trouble. Variables should always be local, and declare the one or two, mostly for value passing, that must be local. Who can keep track of them all?

  2. Re:Sounds Good... by Anonymous Coward · · Score: 0

    1) Python also allows coding in OO style (and most Python programs do use OO and the standard classes), it just doesn't enforce it.
    2) Do we really need to start little kiddies with objects?
    3) Python builds things into the language that are a minor pain to deal with in Java, such as lists and hash tables. Yes, every programmer should be able to implement them, but beginning programmers shouldn't have to deal with that stuff straight off!
    4) A good programming course should leave the students able to pick up another language easily, *at least* from the point of syntax. IMO the hardest thing for Java programmers moving to C++ to grasp is probably memory management -- something that Python will also give them headaches about.
    5) Not everyone needs to learn C++ :)
    Daniel

  3. Two languages can be good by margaret · · Score: 1

    Maybe at least exposing students to a second language would be a good idea. That way the students can actually SEE that the first language can be a stepping stone to others. Just telling them that won't necessarily get the point across.

    In my case, I went to two different high schools. At the first one, I took BASIC and "advanced BASIC" during my freshman and sophomore years. Had I stayed there, that might have been as far as I went. Luckily, I was fortunate enough to go on to a state-wide magnet school for math, science and the arts. A semester of pascal was required for graduation, even for the arts students. Because of my BASIC experience, I picked it up reeeeally easily, even though it looked quite different at fist glance. It was really amazing how similar the thinking was, even though the syntax looked so different. I didn't take any more computer classes (even though my teacher kept pestering me to be the only girl in his C class) because by then my schedule had been booked up with all kinds of other cool classes in other areas (this was a great school). However, since then I have found it easy to pick up html (not a real language I know), javascript, and macromedia's lingo language.

    Had I only taken BASIC, I might have believed that I couldn't just "pick up" some foreign computer language, and I would have never tried to. The goal of teaching programming in high school is not solely to create future CS grad students and professionals. Many might end up like me - I'm a student in a completely unrelated field (med school/neuroscience grad school), but I like to fiddle with programming as a hobby (for fun and profit :) Had I not taken both BASIC and pascal, things might not have turned out this way.

    Just my $0.02,
    -margaret

  4. Re:3D engine as _first_ project?! by TheGeek · · Score: 1
    So now we're going to have a bunch of high schoolers (or whatever) running around claiming that they've written games better than quake in a language written for newbies, without even understanding the inner nuts and bolts of the process which goes on.

    You don't perhaps think that when they attempt to build a 3D engine using Python they are going to run into some difficulties and very quickly learn that Python is not the best language for this? I suspect that no 3D Python engine is going to come out of this. This will be a stepping stone for them to learn something much nicer and more effective.

    TheGeek
    http://www.geekrights.org

    --

    TheGeek
    http://www.geekrights.org
    Kill the monkey
  5. Re:No, it isn't (Re:Isn't this stupid?) by jfedor · · Score: 1

    > This isn't talking about teaching
    > programming to CS students. This is
    > talking about teaching programming to
    > the general public, early in high school.

    So I must have misunderstood the original post.

    But then again, it says "C++ is just too difficult for first-year CS students in high school".

    -jfedor

  6. Re:It's stupid not to do so. by jfedor · · Score: 1

    > Programming does not require any extra
    > level of intelligence;

    Well, actually, yes it does.

    As for the rest, you're probably right about the accountants and financial analysts.

    -jfedor

  7. Re:Sounds Good... by Anonymous Coward · · Score: 0
    I've never used python or do I know anything about it but wouldn't Java be a better choice?

    Generally you need more Java code to do the same thing as some Python code (or more Java compared to Lisp, Scheme, Smalltalk, for that matter).
    For instance reading /etc/passwd, parsing it, and then printing the users sorted by uid and printing them also sorted by name, would take about 10 Python lines.
    Challenge: try to do as short with Java.

  8. Re:This is AWESOME!!! by Anonymous Coward · · Score: 0

    Bahh, point is who fucking cares? So what this kid learned a couple programming languages at a young age. Can he really program? Has he done anything?


    Not only that but the kid looks to be a majorly antisocial, talk in C++? Wow that boy needs some education.

  9. Re:Sounds Good... by chiz · · Score: 1

    I'm going to be starting my senior year of high school tomorrow, and that's exactly how they do the programming classes here. BASIC->Pascal->C++
    It seems to work out pretty well for most people.

  10. Re:Why not Ada? by Anonymous Coward · · Score: 0

    well, that's exactly what we are doing in france i started a course of CS today, and (blam!) 4 hours of introduction to ada to start the day, and latter in the year C++ I personally think ada is a great langage. vivien

  11. Re:The use of python. by robbieduncan · · Score: 1

    ML has lazy evaluation too. You just need to know the technique. I've seen a small bit of Haskell, and could understand it easily after ML.

    Facilities like compile-time type checking for all variables/functions is an amazingly powerfull feature, and it forces you into some good practices. Our Uni also talks up ML's module system, with its interface declarations and automatic checking of interface matching, as well as hiding of implementation from other modules. If only it had a standard visual library for GUI's

  12. Has been mentioned by Anonymous Coward · · Score: 0

    Track back to page 1, look for a thread subject titled "Sounds Good". Decent sized thread. At UCSD they use Java as the first CS class for CS majors, and at the beginning they tell students to just accept public class (classname) { as not to think about it so that they don't get confused by OO at start.

  13. Re:Isn't this stupid? by jfedor · · Score: 1

    > But in high school (the Germans call it
    > "gymnasium", or is that primary school?),
    > you don't call yourself a CS student, and
    > that's the environment that we're talking about

    OK.

    (They taught us C/C++ and Pascal in my high school, anyway. :)

    -jfedor

  14. C++ too difficult?!?! Maybe if..... by dulles · · Score: 1

    I seemed to go through CompSci just fine....
    I did QBasic in the 8th grade. Really simple kinda stuff. 9th I did C++. 10th I did AP CompSci AB and got a 5. C++ was very easy after QBasic. Lots of people in my highschool take AP CompSci A as their first ever CompSci course and most of them get 5's on the AP test. (This, btw, was the first year that the AP was in C++. They __finally__ switched from Pascal)
    Of course there's also people who take just a regular ol' CompSci as their first in HS and we used C++. Most of them dropped out.
    IMHO they should teach something simple like QBasic first so that syntax doesn't become a big issue and they can focus on basic algorithms. Past that point, learning C++ is a breeze.

  15. Re:Yahbut [Re:The use of python.] by Anonymous Coward · · Score: 0

    I agree. I absolutely love the language, but the lack of closures drives me crazy, especially since it provides 'lambda', 'map', 'filter', and 'reduce'. Having programs crash with a NameError because 'map(lambda x:self.get_entry(x),lst)' doesn't know about self is no fun :(
    (Usually I call the resulting function 'evilnastyhack()')
    Anyway, though, I don't think beginners are likely to be doing this sort of stuff a whole lot, and they can use weird nasty hacks if they have to :/ Personally I think Scheme is a better language for beginners, but I guess they wanted something with practical applications. (a common mistake IMO)
    Daniel

  16. Re:Programming Not Appropriate as Part of High Sch by aUser · · Score: 1

    Programming is indeed just a very thin layer of practical implementation skills on a well-established basis of numeracy, literacy, analytical and problem solving skills.

    Students who have acquired the basis, through whatever means, by studying whatever subject, will be successful.

    Most people, who are successful in developing software have many more skills than just knowing where to put the commas, braces, and indentation. The latter are just details, that should not even be that important, and, as a matter of fact, are not, in good development environments.

    People, who vociferily advocate C/C++, Java, and that kind of languages, are usually people who have no skills at all, besides where to put the commas, braces, and so on.

  17. Re:Maybe the best choice by Anonymous Coward · · Score: 0

    I've been learning Python under Windows and haven't found anything that wouldn't run unless it was explicitly OS specific and I've found very little of that. That's one of the nice things about Python, it's very portable.

  18. Re:My opinion by SimonK · · Score: 1

    Smalltalk development environments are still the best ever created, and most of the work was done more than 20 years ago now. The language is OK. The lack of typing makes it hard to have much confidence in Smalltalk programs, and the syntax has its good and bad points, but I'd probably still choose Smalltalk over Java.

    Regrettably there's not much choice these days. ObjectShare have gone even further into VB-land and lost the last few really serious projects to use it. Java is good in that it keeps many of the good things about Smalltalk, although I find it hard to understand why so little work has been done bringing the runtimes up to Smalltalk standards. The worst feature of Java is there distinction between reference and primitive types. You simply don't need to do this, the supposed "inefficiency" can be removed by the compiler before it even gets to the runtime.

  19. Re:it already occurs by Anonymous Coward · · Score: 0

    SQL isn't programming. I do SQL, so I know first hand. SQL:DBMS :: Command Line:Linux (sort of) you can do programming LIKE things with both SQL and shell commands. but i wouldn't call it programming. i agree that giving people a greater sense of the power of the typed command is a good thing and that everyone should be taught this in school much like being taught a human language. programming is a TOTALLY different envdevour. think of it this way (i take it you are a DBA?): how many of your now-empowered SQLers would want your job of designing complex databases? how many could actually do it w/out getting completely bored/frustrated/annoyed? interface interaction (SQL, CLI, GUI...) is NOT programming.

  20. Re:BASIC? by iapetus · · Score: 1

    BASIC is exceptionally good for learning all sorts of bad programming habits. Aside from that there doesn't seem to be much point...

    --
    ++ Say to Elrond "Hello.".
    Elrond says "No.". Elrond gives you some lunch.
  21. Dijkstra on BASIC and COBOL by Anonymous Coward · · Score: 0

    It is practically impossible to teach good programming style to students that have had prior exposure to BASIC : as potential programmers they are mentally mutilated beyond hope of regeneration. [E.W. Dijkstra]

    On COBOL:

    The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense.[E.W. Dijkstra]

    AC
    1. Re:Dijkstra on BASIC and COBOL by JonK · · Score: 1

      Yet there's probably more code written in Basic and COBOL than in every other language put together. Go figure. Maybe academic purity of language is orthogonal to that language's utility. After all, I hate to think what Dijkstra makes of Perl...

      Oh and wasn't Edgar Dijkstra also associated with "GOTO considered harmful" - which just goes to show that he either a) never wrote a on-the-metal error handler in his life - setjmp() and longjmp() anyone? or b) was a hypocrite (and yes, I have read GCH - and GCHCH...)
      --
      Cheers

      Jon

      --
      Cheers

      Jon
    2. Re:Dijkstra on BASIC and COBOL by TimoT · · Score: 1

      Oh and wasn't Edgar Dijkstra also associated with "GOTO considered harmful" - which just goes to show that he either a) never wrote on-the-metal error handler in his life - setjmp() and longjmp() anyone? or b) was a hypocrite (and yes, I have read GCH - and GCHCH...)

      It's Edsger, not Edgar. GCH is IMO one of the most influential articles, which brought programming out of the dark ages. You can't deduce anything about the program's state by the position of execution if the program is littered with undisciplined GOTOs. Dijkstra is a theoretician, who wants to create bugless software and he isn't a hypocrite. I've also read "A discipline of programming", where he develops the SVC and WP transformers and the axiomatic method of proving program correctness, and his book in monographs in CS. One of his more famous statements is that "Testing can only show the presence of bugs, not their absence."

      There are structured ways to do error handling. Setjmp and longjmp are just one way to handle errors, C has no other; there are other ways... but maybe not in UNIX.

    3. Re:Dijkstra on BASIC and COBOL by JonK · · Score: 1

      GCH is IMO one of the most influential articles, which brought programming out of the dark ages.

      GCH was certainly influential: it's been argued over passionately for the last thirty years. Brought programming out of the dark ages? Possibly - but at the same time it caused schisms reminiscent of those in the medieval Catholic church.

      Dijkstra was right to argue against the 'unbridled use' of GOTO, but his cause isn't helped by the almost universal inclusion of directives such as 'GOTO will not be used under any circumstances' in programming standards (and yes, I've seen some of these and argued with the writers about them). The argument is often that GOTO doesn't conform to 'structured programming', and hence can offer nothing to the modern programmer. In the spirit of the anonymous pundit who once quipped 'real programmers can write FORTRAN in any language', structured programming isn't concerned with specific language features. GOTO has its place, and anyone who tells you otherwise just hasn't cut enough code to know what he's talking about.

      Sure, SEH is a good thing, but none of the boxes I've ever worked on have offered it in hardware: it's generally provided by either the OS or the programming language used. And quite a lot of real-world programming languages (rather than the My Favourite Toy Languages beloved of CS students, researchers and profs) don't support SEH: the same is true for most OSes. GOTO - or its equivalent (computed COME ... FROMs, anyone?) are present in just about every real language, and should be used when necessary, for fear of something worse happening.

      The proof of correctness stuff, by the way, is one of these fields which I've been following off and on for a while - I just wish that they'd get on and prove something of (at least) interesting complexity. Last time I looked, the bleeding edge appeared to be tools and techniques for analysing programs of the complexity of a four-function calculator. Has the field progressed since?

      Agree wholeheartedly about testing, by the way. It's always cheaper to spend time on the front of a project designing it correctly than on the backend patching the whole mess together with string and gaffer tape. Sadly management like to see their programmers programming, not staring into space, chatting or doodling on sheets of paper. Some time I'm going to write a manager obfuscator: you feed it various key words and tell it a language and it churns out several KLines of code which you can progressively show your PHB to demonstrate your productivity while you've been ... staring into space, chatting, doodling etc. And of course you won't have to work 80-hour weeks in the month before delivery 'cos it'll be designed properly and will run first time....
      --
      Cheers

      Jon

      --
      Cheers

      Jon
  22. Re:The American educational system sucks! by Anonymous Coward · · Score: 0

    well here (in france) we are starting by ada, and later c++

  23. Re:Any book reccomendations? by Anonymous Coward · · Score: 0

    I don't know. These are guidelines you'll encounter almost anywhere that you talk to computer people. IMO, though, it's more of an aesthetic sense than a set of rules; I didn't really get the hang of this stuff (assuming I can be said to have now) until after hearing these many times, going off and doing things my way, and ending up with huge buggy inflexible gobs of code. Trial and error :) I'm sure there must be a shortcut, though.. Daniel

  24. Re:Ok. Rant time. by J.+J.+Ramsey · · Score: 1

    "i wish they'd choose to teach a logic course using psuedocode than any other language."

    I've dabbled in Python. It's been described as "executable psuedocode", and from what I've seen of it, it's an accurate description. You are absolutely right; programming is about logic. Python was chosen as their initial language choice because it's good at illustrating programming logic without a lot of fuss.

  25. Re:Teach SCHEME by Anonymous Coward · · Score: 0

    Shudder...I despised scheme but I guess that was some time ago and now that I look back, it was a very simple language. Here at U.C. Berkeley the introductory course is taught using scheme by Brian Harvey. It's called SICP (Struture and Interpretation of Computer Programs) which was a class named after the book by Abelson and Sussnan and derived an MIT course. I didn't particularly enjoy the experience because I saw nothing but parenthesis and it didn't have much to do with making shrink wrapped software but sure I learned a lot about computer science in general. Having gone through several years in Berkeley CS I think SICP was a very valuable class giving an insight into data structures, running time analysis, functional and data abstraction, recursion, memoization, concurrency, programming languages, and so many things I learned in other classes. As far as pre-college education is concerned, I don't think learning C/C++ is so critical. Most people here picked the language up in 2 weeks after having learned Java. Logo is the language of choice for grade school students. It's just too bad they no longer use Logo as a result of educational CDROM packages which have little or no pedagogic value.

  26. Re:This is AWESOME!!! by funcused · · Score: 1

    OT: How does Python compare to Perl - if you had a fairly simple task, and knew both, when would you choose one over the other?

    Depends on the task of course :)

    I don't know Perl, am slowly learning Python, and was taught some C++ in high school (3 years ago). For me, Python is great. I was having a horrible time writing a program for text processing in C++ and had it licked within a day of picking up Learning Python. I really like the language for its lack of low-level involvment.

    Now if only I can get freeze.py working under Win98. . .

    -funcused

  27. Re:Yahbut [Re:The use of python.] by Anonymous Coward · · Score: 0
    Python has neither. Well, it has lexical binding, but it's "shallow", meaning the variables aren't looked up in surrounding environments. So you can have a closure, but you must explicitly import (via optional arguments, "n=n"!) variables from surrounding scopes. This is No Fun (tm).

    That's why you shouldn't try to write closure-style code in Python. Using explicit imports is then considered as a feature: since you are expected to do this rarely, a big "WARNING WILL ROBINSON DANGER DANGER" in the form of explicit imports is considered helpful.

    FYI, I often use Python, but rarely need explicit import. Most of my code is in objects anyway.

    Perl may have much syntactic ugliness, but at least it gets variable binding right.

    That's one opinion. Another opinion is that Python supports only local variables, and that global variables are accepted as syntaxic sugar (useful for modules and functions defined out of classes). Some people think that allowing only local variables in an otherwise OO language is good.

  28. should be interesting.. by sashae · · Score: 1

    The CS requirements for me in both college and HS were very, very minimal, and I ended up going into SA stuff due to lack of coding knowledge.. It's scary knowing how many kids these days are just growing up with computers and the net, whereas us older folk were just getting PCs in the 80s.

    An iMac in every pot, I suppose.

    -s

    --
    ---- noi non potemo aver perfetta vita senza amici -- Dante
    1. Re:should be interesting.. by Anonymous Coward · · Score: 0

      Obviously, we are not familiar with the concept of clear bongs. :) Translucent blue and white ones are certainly novel. -Chris

    2. Re:should be interesting.. by Uart · · Score: 1

      you''d think that a pc's opaque case would be a better hiding place for your "herbs" than the translucent case of an Imac

      --

      Opinionated Law Student Strikes Again!
    3. Re:should be interesting.. by the_tsi · · Score: 1

      And at some of the more liberal colleges out here, "pot in every imac." But that's a long and sort of messy story, so filling in the blanks is an exercise best left to the reader.

      -Chris

  29. Don't even need to read this thread... by iapetus · · Score: 1
    ...to predict what's going to be in it:

    • Why Python? They should have picked Java (or C, or COBOL, or Reptol, or OPL, or APL, or 6502 assembler...)
    • Great idea. In fact, Python should be made the only programming language anyone's allowed to use because it's so good.
    • python sucks
    • Beginners shouldn't be allowed to use programming languages. Anyone who wants to program a computer should start by contributing to the Linux kernel.
    • Microsoft will take over Python
    • What's Python?
    --
    ++ Say to Elrond "Hello.".
    Elrond says "No.". Elrond gives you some lunch.
  30. Re:X? Java by Anonymous Coward · · Score: 0
    import gtk


    window=gtk.GtkWindow('Hello')
    button=gtk.GtkBut ton('Hello world!')
    window.add(button)
    button.connect('clic ked',gtk.mainquit)
    button.show()
    window.show()
    gtk.mainloop()

  31. Sounds Good... by psilocybe-influence · · Score: 1

    I've never used python or do I know anything about it but wouldn't Java be a better choice?


    1. Re:Sounds Good... by djfiander · · Score: 1

      Java, and most other programming languages that get used for real work (not that Python's not for real work), have too much puntuation. The point of the first language is to get people practicing programming, not syntax checking.

    2. Re:Sounds Good... by scrytch · · Score: 2

      Yes, Java removed multiple inheritance, and replaced them with what? Interfaces. Interfaces that have no protection against stomping on each others namespaces. Interfaces that you must reimplement, from scratch, by hand, on any class that implements them. Interfaces that almost demand you access private class data of the implementing class regardless of whether the interface was meant to know about it.

      All that said, it's possible to write clean interface code, but god knows they aren't intrinsically any better than a mixin class in C++ (a mixin being a non-derived class that is used for MI purposes). Matter of fact, they're basically the *same thing*, only without any kind of namespace protection.

      Now C++'s use of pointers as object identity drives me bats, I won't argue with that.

      "If you deny yourself a useful tool simply because it reminds you uncomfortably of your own mortality, you have uselessly and pointlessly crippled yourself" -- Chairman Sheng-Shi Yang, _Ethics for Tomorrow_

      --
      I've finally had it: until slashdot gets article moderation, I am not coming back.
    3. Re:Sounds Good... by Anonymous Coward · · Score: 0

      Java is taught at my university in first programming courses. It's a perfectly suitable choice. It's a clean, easy to learn modern language. You can do graphics easily on Java without having to worry about system dependent stuff -- kids love that.


    4. Re:Sounds Good... by iapetus · · Score: 2

      Indeed. Which is why you don't start teaching Java that way.

      I've written and taught a number of Java programming courses for a number of types of customer (Postgrad AI students, 4GL junkies, complete beginners, OO gurus), and even those who have never written a line of code in anger have tended to take to Java like a duck to water.

      A few introductory exercises clear up the difficulties with tools (whether it's the command-line tools or an expensive IDE), and the fact that it's difficult to avoid basic OO concepts from the start is a bonus as far as I'm concerned. If I want to teach nasty procedural stuff, there are other languages far better for that.

      Don't get me wrong: I'm not claiming that Java is inherently a better language for teaching to beginners than Python (I don't have the background in teaching Python to make a fair judgement on that, and I don't believe you can make that sort of comparison anyway). But I will say that my experience as a trainer is that Java is a good language to teach to those new to programming.

      One final point: probably more important than the choice of language is the skill of the teacher/trainer. For whatever reasons (lack of skilled staff almost certainly being the foremost), IT appears to be the one subject where schools are happiest to use sub-standard teachers: I don't think any member of my family was ever taught by an IT teacher who knew more than his/her pupils...

      --
      ++ Say to Elrond "Hello.".
      Elrond says "No.". Elrond gives you some lunch.
    5. Re:Sounds Good... by Anonymous Coward · · Score: 0


      - case-sensitivity (unicode-sensitivity, in fact)
      - shadowed variables
      - nested classes
      - casts (though improved)
      - primitive types are not objects
      - bad constructor scheme
      - implementation-exposing distinction between class variables and functions
      - final keyword (like inline)
      - friends
      - complicated exporting
      - putting the type before the identifier in declarations
      - implicit overloading
      - no good assertion and validation system
      - no distinction between procedures and functions
      - = for assignment!!!
      - semicolon as terminator

      Most of this ripped from "C++??", of course.

    6. Re:Sounds Good... by Chandon+Seldon · · Score: 1

      Two problems with basic vs. Python. 1.) Line Numbers, no other current language does that. 2.) Usefullness. Someone might actualy use Python to wright a "Real" program, basic... nah.

      --
      -- The act of censorship is always worse than whatever is being censored. Always.
    7. Re:Sounds Good... by Anonymous Coward · · Score: 0

      Kinda like having an easy transition to COBOL? :)

    8. Re:Sounds Good... by QuoteMstr · · Score: 1

      Those weren't *mandatory* in C++. If you don't like a feature of the language, just don't use it.

    9. Re:Sounds Good... by Luis+Casillas · · Score: 1

      I've never used python or do I know anything about it

      Then schedule a visit one of these day to and see for yourself...

      It is a really nifty language.

      ---

    10. Re:Sounds Good... by TetsuoShima · · Score: 1

      Two problems with basic vs. Python. 1.) Line Numbers, no other current language does that.

      True, but almost every language out there has the potential to use them. This doesn't wholly defend BASIC as a choice, but from QBASIC on, there has been no need for line numbers.
      ( I admit I have no experience with BASIC's under other OS's, but I'm assuming it's no different)


      My own programming experience went BASIC->Pascal->C, which seems like a logicial continuation if it were to be taught in high schools.

      2.) Usefullness. Someone might actualy use Python to wright a "Real" program, basic... nah.

      Maybe no one's still writing things in GWBASICA, true, but the fundamentals of it live on (sad as it may seem) in Visual Basic. Granted, a lot of the functionality of VB comes from importing code written in C/VC, but we're not talking about a professional course here, we're talking about fundamentals, in high school.

    11. Re:Sounds Good... by SimonK · · Score: 1

      Interfaces distinguish between the subtype hierarchy, which should be publicly visible so that users of a package know what objects they can treat in the same way, and the inheritance hierarchy, which is all about things being implemented the same way, which you should not need to know.

      Multiple inheritance of implementation is generally thought to be bad because its actually very rare to find classes you can mix together sensibly. If you want to know that two classes with the same interface fulfill certain rules, then I would say that Eiffel-style conditions are the right way to go. If you want to share implementation, delegate to another object.

      I'm not convinced namespace protection matters. If your classes are that big, I suggest they're too big.

      Nice quote, by the way.


    12. Re:Sounds Good... by SimonK · · Score: 1

      Fine if you are programming bear metal on your own. Not so fine if you're in a team. Especially not fine if you want to reuse code. Most especially not fine if the language is bearly usable without it (templates in C++).

    13. Re:Sounds Good... by scrutty · · Score: 1
      I'm not sure about too much syntax, but I would have thought that java had too many standard classes for newbies to quickly grasp.

      Syntactically java doesn't have a whole lot more than C , and less than C++. The problem with having such a bare bones language implementation is that you need to build up a pretty decent grasp of the available classes before you can do anything , even doing console and file IO requires you to learn a few bundles.

      I know when I was first learning java probably my biggest problem was tying up a few days implementing something that I inevitably then stumbled across in the standard class library somewhere, usually a day or so after I had written it.

      --
      -- Oh Well
    14. Re:Sounds Good... by mong · · Score: 1

      Of course Java is not a better choice, as the vast majority of C++ problems are evident.

      Mong.

      * Paul Madley ...Student, Artist, Techie - Geek *

      --

      *...Slacker, Artist, Techie - Geek *
      Remember: Nothing is Cool.
    15. Re:Sounds Good... by Anonymous Coward · · Score: 2

      I don't think that Java is suitable for teaching to beginners, especially little kids; it is simply too complex. Personally, I'd have sprung for something even simpler, like Scheme, but Python is also fairly easy to learn; its biggest advantage over Java is that you can program outside the class structure, which means that you can introduce people to the most basic concepts ('the computer does one thing after another, this is a variable, you can print values out, ....') without having to explain all of object-oriented programming to them or, worse, give them a 'magic formula' to make things work. Daniel

    16. Re:Sounds Good... by Daniel · · Score: 1

      I disagree. In fact, here at Brown Scheme is being taught as one language in an introductory CS class with no great problems. IMO it has much *less* punctuation than other programming languages (like class JavaLanguage { static void main(String args[]) {System.out.println("No this language has \"no\" punctuation at all");} }
      I think that either Scheme or Python will be ok; I have to admit that I don't especially like Java in general anyway, but I particularly don't think it's good for beginners. (a lot of people in the new intro class that I took last year -- which used Scheme, ML, and Java -- got through Scheme and ML just fine but fell apart trying to learn Java and all the bizarre quirks of the language, although that was partly because the teachers skimmed over Java syntax a little quicker than they should have -- OTOH this is exactly the problem with Java as an intro language. I think the only reason Java was even included in the class was the (misguided) pressure to 'teach students real-world skills')

      Daniel

      --
      Hurry up and jump on the individualist bandwagon!
    17. Re:Sounds Good... by Anonymous Coward · · Score: 0

      As my high school teacher said back then:
      Whoever learned BASIC before, will never write clean code again...

      That may be harsh, but BASIC combines some of the worst 'features': It encourages 'spaghetti' code, without logical structures, or centrol control instances. You *could* do that, but you won't if you haven't learned it that way, mostly in Pascal/Oberon.
      Pascal is heavily structured, the perfect way to learn proper procedural programming. Yet OO is a cludge.

      Python has the advantage that it combines a simple start (see BASIC), with inherent OO architecture. So you (can) learn structured coding in an OO way!

    18. Re:Sounds Good... by Kilzall · · Score: 1

      I just finished my 2nd CS class at GA Tech (it was hell but I got an A) and in retrospect Java seems like a very good language choice. The first CS class used pseudocode to keep us from becoming too dependent on the compiler for development and debugging, and was similar to Java (high-level, OO, some punctuation). Because of this class I am now proficient in Java and am able to read and, to a certain extent, write C++. It's a good language if you want to learn real programming quickly.

      --
      Win98 sux without these 1337 toolz !!
    19. Re:Sounds Good... by Aqua+Regia · · Score: 1
      Java's biggest mistake was using C as a basis for syntax. Sure, C is "familiar," but it basically ignores all useful innovations in readability and consistency made in the last 30 years. Still, we old hands get by. :-)

      C++ is a horrible choice. Not only is it difficult to learn, it takes advanced knowledge to achieve even basic understanding of what the compiler is actually doing. There are few languages less suitable for introductory programming. Perl, maybe. APL, perhaps.

      Python doesn't appear to have made that mistake. All you need in a beginning programming language is consistency, readability, and ablity to do simple tasks without writing 45 lines of code. Python meets these criteria on all counts. Sure it's not "perfect," but it's a good compromise between "designed for beginners" and "well-known."

    20. Re:Sounds Good... by Chandon+Seldon · · Score: 1

      Having to learn both BASIC and Pascal, and then going directly to C++ seems silly. Why learn Pascal at all?

      Wouldn't it make more sense to go BASIC->C->C++ or even Pascal->C->C++

      I personally would think that going Python->C->Perl would make the most sense, but...

      --
      -- The act of censorship is always worse than whatever is being censored. Always.
    21. Re:Sounds Good... by Anonymous Coward · · Score: 0

      So Java is a better choice because it "makes the transition to C++ so much easier"? Yes, and eating only onions makes the transition to a an exclusive diet of garlic easier.

    22. Re:Sounds Good... by shaughran · · Score: 1

      Java Interfaces describe common behaviour or capabilities that may be found in a number of classes throughout a framework. C++ blurs the distinction between shared functionality & implementation and shared behaviour. If you want to avoid writing the same implementation in Java over and over then use an adapter class to provide a default implementation and extend this class. Many of the AWT classes use this pattern to reduce the amount of redundant code written to support interfaces.

    23. Re:Sounds Good... by AMK · · Score: 4
      This project is at least partially inspired by Randy Pausch's use of Python in Alice, a 3D VR system for non-programmers (unfortunately Windows-only, but well worth checking out). Pausch gave an interesting talk at work about Alice, and showed some spectacular demos; it was impressive to see an Akira-inspired motorcycle ride through a cityscape, implemented by people after a single-semester course. Alice is used in a virtual-worlds course at CMU; students with no previous programming experience are expected to present their first VR environment two weeks after the start of the course.

      The Alice developers modified Python in a few way to make it easier for their intended audience. The major changes were:

      • Case-insensitivity: Pausch said that having 'Fred', 'fred', and 'FRED' be different variable names was confusing to their students.
      • Python's numeric types work like C's; 3.0/2 is 1.5, but 3/2 is 1 (because both inputs are integers, therefore the result is also an integer). This is hopelessly confusing, so in Alice 3/2 is 1.5.

      Those are the only changes I can remember from the talk, and it's a remarkably short list. They also avoided using XYZ coordinates, instead using object positions and directions. For example, you can say rabbit.lookAt(copter), after which an Energizer bunny object will always stare at a helicopter, no matter where the copter object is moved. People had no trouble with the idea of objects, but little things like case-sensitivity threw them.

    24. Re:Sounds Good... by haral · · Score: 1

      It always surprises me how every topic on programming languages turns into a battle between Java and C++.

      I would like to remind you all that far more succesfull systems were built in languages other than Java and C++ than in Java and C++ taken together.

      I would conclude that both Java and C++ are obsolete :)

      Have a nice day,
      alex.

    25. Re:Sounds Good... by cookd · · Score: 1

      I like Scheme. But I have a lot of trouble imagining myself teaching it as a first computer language.

      Scheme has too much punctuation (in the (form of (nested (parentheses (that end) up looking) like this))). Functional languages like Scheme and Lisp are nice and simple, but they take a lot of getting used to. From my experience, Scheme is a great language for exploring some advanced CS concepts, and it is a nice clean simple language, but putting everything in parentheses and hiding function declarations as

      (define xplus1 (lambda (x) (+ x 1)))

      is more than simple coding. It's clean, but not simple. The idea doesn't seem to be "teach a clean, ideal functional language," but "teach a simple programming language that students can relate to."

      My 2c.

      --
      Time flies like an arrow. Fruit flies like a banana.
    26. Re:Sounds Good... by cookd · · Score: 1

      One of the problems I have with C++ is that there are 24 different ways to do something, all of which end you up with approximately the same code efficiency. Maybe I don't like a feature of a language, but if the programmer who designed the library I'm using did like the feature, I have to use it anyway. When there are three different ways to achieve a certain effect (for example, the "Interface" can be implemented with multiple inheritance, interfaces in Visual C++, or owning a translator class), it gets confusing (well, this library exports an interface, and this other library exports a translator class, and this other library expects my classes to inherit from their classes, so in the classes that use all three libraries, I'm toast!).

      I liked Modula II better. It wasn't truly object oriented, but you could achieve the same effect, and you could usually only do things one way: the right way. It sure made debugging and interfacing with other people's code much easier.

      I'm not advocating Modula II. I understand its deficiencies. But it was nice working with a simple language where there was an obvious RIGHT way to do things (and then you let the compiler do the optimization), thus allowing your code to actually be READABLE!

      Ok, I'm getting off the soap box now.

      --
      Time flies like an arrow. Fruit flies like a banana.
    27. Re:Sounds Good... by cookd · · Score: 1

      I would leave BASIC out and just go Pascal-->C. Pascal teaches you to think in procdures, if statements, and loops. It isn't any harder to learn to think in terms of if/while as your control statements than it is to learn if/GOTO. Yet GOTO must be subsequently unlearned. So why teach GOTO in the first place?

      --
      Time flies like an arrow. Fruit flies like a banana.
    28. Re:Sounds Good... by Anonymous Coward · · Score: 0

      One final point: probably more important than the choice of language is the skill of the teacher/trainer. For whatever reasons (lack of skilled staff almost certainly being the foremost), IT appears to be the one subject where schools are happiest to use sub-standard teachers: I don't think any member of my family was ever taught by an IT teacher who knew more than his/her pupils...

      No kidding. It's sick. Computers are the wave of the future, yet at my high school they decided to have the math teacher be the computers teacher. She got training on how to operate a VAX (fine, since that is what the school is STILL using). But she didn't know the network worked. She had never heard of Pascal. She didn't realize that programming without goto was possible.

      And, after checking in with my roots, I couldn't believe what my old high school district has done: pulled all computer support staff (the people who know how to connect the keyboard to the back of the computer) out of the elementary schools and put them in the district office. So how do they expect the computer labs to get maintained? In the case of the local elementary school, a teacher asked me to help for a few hours, and afterwards 4 teachers pooled together spare change from their own pockets to "pay" me for my services (not that I asked for it).

    29. Re:Sounds Good... by nch1 · · Score: 1

      Java is a better choice for three reasons: 1. It is similair to C++ in syntax but without all the headaches (pointer arithmatic, memory management(etc. 2. It gets people use to coding in OO fashion, which is good 3. Knowing Java makes the transition to C++ so much easier. Python might be a cool language but I'm an academic java punk through and through. -bobby

    30. Re:Sounds Good... by devoldski · · Score: 1

      This sounds like mods wich will ease the learning of programming. Ppl do have problems with case-sensitivity because of DOS/WIN and their case-insensitive behaviour.
      The numeric changes seemes like a good idea

    31. Re:Sounds Good... by Anonymous Coward · · Score: 0

      Same code in BASIC (much better and designed for beginners) : 10 PRINT "Hello World"

    32. Re:Sounds Good... by cullman · · Score: 1

      I think BASIC is also a reasonable choice
      for a first language, it was the one I
      learned in 4th grade. But, python's nice
      because you can quickly move into OO concepts.

    33. Re:Sounds Good... by cullman · · Score: 2


      Java would be a horrible choice for beginners
      for example, "Hello World" in Java is :

      // Java application hello.java
      //compile: javac hello.java
      // run: java hello
      public class hello {
      public static void main (String[] args) {
      System.out.println("Hello World!\n");
      }// end of main
      }//end of class

      The student has now learned out to output one
      line of text, but is left with the questions:
      "What is a class?", "What is static?", "What is
      void?", "What's the difference between javac and java?" and "What is System.out.println?" An
      awful lot of stuff to try to digest on the
      first day.

      The same code in python :

      #!/usr/bin/python
      print "Hello World!"

      Pretty self explanatory. Also, Java's got plenty
      of wierdness that came from being based on c++.
      For instance, how would you explain the difference
      on and int and Integer to a new student.



      Which leaves the student with the questions

    34. Re:Sounds Good... by Anonymous Coward · · Score: 1

      I would think one of the biggest advantages python has over Java (aside from those already mentioned) is the "interactive" nature of the interpreters. You can fire up a python interpreter, test out a couple statements and tell how well they work without worrying about the edit-compile-test cycle, or even the edit-test cycle. This makes it really easy for beginners to test out ideas with minimal fuss.

    35. Re:Sounds Good... by SimonK · · Score: 1

      Ummm ... Java removes most of the widely-reputed problem areas of C++ (excessive syntax, badly implemented generics, multiple inheritance, operator overloading and pass by value).

      If you know of others, please enlighten us.

  32. computer programming is _not_ for everyone by sesquiped · · Score: 1

    I'm not sure why people are suddenly thinking that comptuter programming is a skill that everyone should learn in high school, like mathematics and history. Everyone should have some background in math and history to function normally in society, so those subjects are taught in high school. Nobody except programmers needs to know how to program. It's like teaching automitive engineering to everyone so they know how to build a car. Sure it's interesting, but everyone doesn't need to know how to build a car. Programming should be left for the programmers, who write operating systems and applications that other people use.
    Basic computer use skills _are_ necessary to function in the modern world, and they should be taught, maybe even required, but programming should not be.

    Additionally, in my experience, most people simply can't program. It's just like higher levels of mathematics. If your brain isn't wired for it, you won't learn it well, no matter how much time you study. In the AP Comp. Sci. class I took in high school, many of the students in the class didn't understand fundamental concepts (such as: statements are executed in sequential order).

    1. Re:computer programming is _not_ for everyone by AmirS · · Score: 1

      Give people a chance to take more power over their computers.

      > Additionally, in my experience, most people simply can't program. It's just like higher levels of mathematics. If your brain isn't wired for it, you won't learn it well, no matter how much time you study.

      I disagree. By teaching poeple, you can 'wire' their brain so they understand computers. The problem is that people believe that 'programming' is an elite skill which they can never learn, but this is untrue, it just takes some effort and understanding, which this program is trying to promote.

  33. Re:The American educational system sucks! by Chandon+Seldon · · Score: 1

    That is outside of the realm of schools, that should be tought by parents, and if not by parents, then by television.

    --
    -- The act of censorship is always worse than whatever is being censored. Always.
  34. Re:My opinion => Too pricy! by RickyRay · · Score: 1

    I would love to see Smalltalk catch on, but IBM's charging $4999 for a single copy of it, plus several thousand more for the matching tools. Meanwhile, they'll almost _give_ you a version of their Java compiler, which, if I remember right, is largely derived from the same code. There's also an expensive version of their Java tools, but it isn't the only option. Nobody will ever take Smalltalk seriously if they have to get a second mortgage to pay for it.

  35. The use of python. by robbieduncan · · Score: 2

    Although Python is elegant, it was not designed as a beginers language. Almost no languages have been designed in this way, with Basic (and Pascal) being the ones I can think of. But I would not advocate the use of these languages.

    My choice would be (although I don't like it for general purpose programming) ML. This has been designed from the ground up to be syntatically and semantically well designed and provide all of the facilities for well formed design and implementation. It can (and is being) be extended to provide a whole specification language with facilities for ensuring that the final code matches the specification. The MLWorks enviroment provides a nice front-end on many platforms. It's also got a really simple syntax, and can be made to do some really powerfull things (like infinite presision arithmetic.)

    1. Re:The use of python. by Fizgig · · Score: 3

      What makes you say it wasn't designed as a beginners language? IIRC, Guido was involved in developing ABC, a programming language specifically designed at beginners. The problem was they tried to get C people to like it too and they didn't buy it. Another problem was trying to make it a little to theoretical (good for teaching). As a result, no one really used it for "real work". Guido took all he learned from this when making Python. It was not designed as a "beginners language", but it was designed by someone who knew what should be in a beginners language and how they could fail. He made a beginners language that was useful. Personally, my first experience with programming was Apple BASIC and Logo :) Talk about useless!

      But Python is used in the real world and is recommended and used by experts and beginners alike. Just like people may be turned off from Pascal because it's rarely used outside of teaching (there are exceptions, of course), people might be against ML for the same reason. Few people take their first computer science class hoping to learn computer science--they want to learn how to program. And while the best goal is arguably to teach them how to learn any programming language, your retention rate and interest level are bound to be higher with something like Python.

      Please correct me if ML is used more than I think it is, or if I got the history of Python wrong.

    2. Re:The use of python. by scrytch · · Score: 2

      "Me too". Count me in as one of the people who are too steamed over python's idea of block structure to bother anymore. Mostly it's the bleating hordes who refuse to think outside the tab-deliniated boxes who have chased me away. I posted something about how python could use some syntax for one-liners, and basically I was burned as a heretic.

      No more.

      --
      I've finally had it: until slashdot gets article moderation, I am not coming back.
    3. Re:The use of python. by scrytch · · Score: 3

      You want flamebait, try this on for size, moron. My default threshold is 2, which means I have something interesting enough to say a fair amount of the time that enough weirdos moderated up my posts. Did you see a comment next to the 2? No. That means no one moderated it up. Learn the damn system, idiot.

      I'm not finished yet, barfbag. Was I talking about fucking make? No. Did I say I liked make? No. Do I think its block structure by indentation makes sense? No. Should python make the same moronic mistakes? No. Jesus H Fucking Christ Perching On A Spin-Fuck Chair and Screaming Blasphemy, do you see what the fuck I mean by the bleating hordes?

      Moderate THIS down.

      --
      I've finally had it: until slashdot gets article moderation, I am not coming back.
    4. Re:The use of python. by RGRistroph · · Score: 1

      I object to the fact that whitespace matters in python.

    5. Re:The use of python. by AmirS · · Score: 1

      The language taught needs to be suitable and easy to use for general purpose programming. It is also a benefit if it can scale up to large projects.

      People should be able to program because computers already form a part of everyone's lives, and just "using" them by pointing and clicking is _not_ sufficient to use them effectively in all cases.

      Knowing an easy programming language would allow the general populace to get much more out of their computers, at work or at home, and would increase productivity, by allowing them to take control of the computer, and to make it do something nearer to what they want, which is a good thing.

      I'd guess most people who use computers have something they'd like to automate, but are forced by the software they use to do it manually, and it's too expensive to have that feature added just for them, so they continue being less productive than they could be with it. If they knew how to program (just some simple basics), _and_ there is a usable language that can be integrated, then it's only a matter of converting what they know into a few lines of code, so they never have to repeat it.

    6. Re:The use of python. by kraig11 · · Score: 1
      When I graduated from high school and moved on to university, I found that my background in Turbo Pascal had prepared me very well for first year university programming courses. (Too well, in fact, I wound up getting bored and skipping class too much, but that's another story.) IMO, it isn't so much the specific language that's taught, so much as the principles you learn.

      At the risk of sounding like a grandfather (if it was good enough for me, it should be good enough for Johnny), I don't see that Pascal is a poor choice for teaching newbies programming - although I must admit that my current field is not programming, and I have fallen way behind the field in terms of what's good and what isn't, etc.

    7. Re:The use of python. by ocie · · Score: 1

      And what about those lists? Seems like insertion onto the head of a list should be O(1) until you run out of memory and have to start swapping. What's up w/ that?

      --
      JET Program: see Japan, meet intere
    8. Re:The use of python. by bgue · · Score: 1

      But do you think that arbitrary precision math is a really important feature in a beginner's language?

    9. Re:The use of python. by jdeisenberg · · Score: 1

      Amen to that, brother! I tried a quick experiment as follows:

      x = -7;
      if x < 0 :
      print "x less than zero"
      print "it is negative"

      with the first "print" tabbed over, and the second line spaced over to line up exactly (in my editor). Python rejected it, of course. Try explaining to Joe Average Student that his indentation is wrong, even though it looks just great. Adding an extra blank on a line can destroy an entire program. And you call this "friendly" and easy for beginners? Get thee to a library and pick up a copy of "Humanized Input" by Gilb and Weinberg. Read the section about "the blank", on pages 59-60.

    10. Re:The use of python. by Anonymous Coward · · Score: 0

      I couldn't agree more. What a colossal blunder. My problem isI have a hard time explaining why this flies in the face of common sense, because to me it just so obvious and self-evident.

    11. Re:The use of python. by William+Tanksley · · Score: 1

      I don't know how this message got a score of two -- it's nothing but flamebait.

      Python don't use tab delimiters. "make" does, and the problems are obvious.

      Python uses block structured code, plain and simple. If Python's structure is offensive, then you should also be complaining about every other language aside from your current favorite. If indentation is bad, then so should BEGIN/END be bad (or open/close braces, if you happen to like BEGIN/END, or END if you happen to like one of the above...).

      A techincal veneer is no disguise for jingoism.

      -Billy

    12. Re:The use of python. by robbieduncan · · Score: 1

      No, but it shows that the language can cope with highly demanding tasks as well as the mundain duties of teaching without resortng to haky solutions like VB.

    13. Re:The use of python. by Anonymous Coward · · Score: 0

      Oooh, you should get together with Tom Christiansen. Unless you are Tom Christiansen. In either case, thank you for not being me. sr PS I'm anonymous because Slashdot never sends me a password. But I did leave my initials. And I stand by them.

    14. Re:The use of python. by SimonK · · Score: 1

      ML is semantically nice, but syntactically its evil. "An undistinguished ALGOL-family syntax" is how one of the standard's author's put it. Trust me on this, I've written an interpreter. The syntax is evil.

      More seriously, ML is one of my favourite programming languages, but you and I were taught ML as a first or second language because we were CS students. It gets you out of nasty imperitive ways of thinking, and gives you a different way of seeing problems.

      Most of the professional computer programmers I know would have trouble understanding the recursive pattern matching style which is typical of ML. It generally takes a good few weeks of teaching before CS students get their heads around it, and some never do.

      The goal of a project like this is to teach people how to do a bit of simple programming, so they can get more out of their hardware, not to start them down the road to a CS PhD.





    15. Re:The use of python. by DocBones · · Score: 1

      I think Python is a great choice! It is a useful language, including for the Internet, and yet it can be quite simple for beginners. It has an internal consistency and clarity. In giving up the efficiencies of C/C++ (what I program in), it is able to ditch a lot of adhoc, illogical baggage.

      I really like its access to its "self," and I think in the long run, intelligent programs will need to be able to read and write their own code. Not because self-reflection is the key to consciousness, but because that's where the logic is kept.

      The Deeper Blue chess program that beat Kasparov would be utterly lost if asked what "game" means. That knowledge is buried in the code.

      OTOH, I do not want a 200 page manual with my next washing machine to produce the perfect suds. My non-programmer friends and neighbors need it even less.

      Doc

    16. Re:The use of python. by zmahk31 · · Score: 2
      Although Python is elegant, it was not designed as a beginers language. Almost no languages have been designed in this way, with Basic (and Pascal) being the ones I can think of. But I would not advocate the use of these languages.

      When I was at high school in Germany during the eighties, we were using a language called ELAN, which was specifically designed as a teaching language. ELAN is probably the most human readable computer language I have seen to this day. It was designed to encourage structured and abstract programming techniques.

      Yet, the language is very powerful and easily exstensible. In fact, it was used to implement all higher level features of an operating system called EUMEL which was running in the early eighties as a true multi-user multi-tasking operating system on a machine with a Z80 processor, 256KB of RAM, 10MB of hard-disk (of which 4 were addressable through the operating system) and 6(!) ASCII terminals.

      It seems that interest in this language has almost ceased, but here is still some web presence (follow the links for a detailed description of the language) at

      http://os.inf.tu-dresden.de/L4/l3elan.html

      I would be happy if the ELAN compiler was ported to Linux (yes, it is a compiled language, but it has also a default "compile and run" feature which produces almost instantaneous output for small programs). IMO it would make a superior teaching language, and is also quite capable as an implementation language for serious work provided one does not need direct access to low level system features.

    17. Re:The use of python. by Anonymous Coward · · Score: 0
      My choice would be (although I don't like it for general purpose programming) ML. This has been designed from the ground up to be syntatically and semantically well designed and provide all of the facilities for well formed design and implementation.

      Well, the syntax of ML is rather similar to Python. I feel a little bit more unconfortable with ML syntax because it isn't as strictly apparent as Python (in Python a statement is always terminated by a newline, a block is always preceded by a dedented statement finished by a ':' before ("if xxx:", "while xxxx:", "class xxx:", "for xxx:" "def xxx(yyy):", etc...)

      For semantics, the dynamic typing can be very nice (lists mixing strings, integers, and objects), and the overall dynamicity of the language as its uses, for instance, incremental programming (you can change a function without having to restart the whole program), or dynamic loading of code (actually I tend to store data as Python code, dynamically evaluated at runtime: no more marshalling/parsing of lists).

      It can (and is being) be extended to provide a whole specification language with facilities for ensuring that the final code matches the specification.

      I don't think that formal proof of programs is what beginners need. The code of beginners is awfully non-sensical ! (I remember mine back in those days...) They can barely manage to implement the logic in cleanly separated entities (functions, classes or modules) ; more often you'll find call to I/O functions in the middle of inversion matrix code, a fair amount of global variables, and one hundred of other little details that betray the newbiness of their author.

      But I do think that formal program proof (and fully functionnal programming), should be tried by any experimented programmer: that's a very good point for ML, but not for beginners IMHO.

      Like infinite presision arithmetic.

      Python can too :-), although you have to convert to long or use "long" constant. (A good thing is that you get an exception in case of overflow of integers, so you can manually switch to longs if necessary).
      Example: >>> 1L 1267650600228229401496703205376L

    18. Re:The use of python. by Ed+Avis · · Score: 1

      For my CS course, we learned Haskell (http://www.haskell.org) as our first programming language. I can't help feeling that if you're going to teach functional programming, do it 'properly' (ie, use a pure functional language). I wouldn't mind using ML, but I would miss lazy evaluation.

      It seems to me that academics are quite keen on strongly typed languages (and I like compile-time checking too). If there were some way to give type declarations in Python (on an optional basis, or maybe with a 'deductive' type system as in Haskell), it would probably be more popular.

      (I don't know much Python; I'm reading Learning Python ATM. So what I said about 'lack of type declarations' may not be 100% correct.)

      --
      -- Ed Avis ed@membled.com
  36. Sounds Good but why use computers first? by FireWhenRady · · Score: 2

    I have been programming for 35 years and have taught several programming courses. One of the best books I ever came across for learning programming was George Polya's "How to Solve It", originally written in the 1940's.
    It didn't have much about coding (since computers weren't around when he wrote it) but it did have a lot about analysis of problems, frameworks, abstraction and most other tools of modern programming.
    In one sense, introductory programming should not need computers at all. Computer programming has two main tasks. The first is developing algorithmns, the second is developing data representations. Each task affects the other but both are neccessary for correct implementations of systems. Developing algorithms for hand implementation (playing computer) helps you understand things much better than trusting any language implementation.
    Drawing diagrams of the relations between data elements is neccesary before declaring any types and objects in a language.

    Only once someone understands iteration, alternation and object properties on paper should the computer become involved. Thus the language should be as close to formalizing natural language descriptions of problems as possible.

    Python is a good language for algorithmic analysis because of a clean clear syntax, although dependence of indenting for blocking can sometimes confuse people.
    It is not such a good language for data type analysis because it allows mistakes in types to stand in programs. Python with a stronger type system would be a good teaching language, especially with the case insensitivity of Alice.

  37. Where you here that? by Anonymous Coward · · Score: 0

    It could be true. netcraft says they're running "unknown" on FreeBSD (high profile poster child for FreeBSD). But is the language really responsible for handling the load? It would seem to me language is almost totally irrelevant. It would just mean python has a good compiler and the people who wrote it knew how to write web server using python. I'm sure you could get some people to put together a webserver in x86 assembler (heh) that would handle load as good or better than a python one.

    But the point still remains (if the claim is true), python IS used in the real world.

  38. Re:Programming Not Appropriate as Part of High Sch by jfunk · · Score: 1

    Some electives like introductory science, history and foreign languages (some that needs much more emphasis in the US due the increasingly global nature of society) are worth dabbling in, too. But computer programming is strictly a vocational topic, much like nursing, accounting, etc. and has no real place in a basic college prep high school program.

    Sorry, I disagree. When I was in high school most students had no "roadmap." They figured that they'd cross that bridge when they got to it, at the end of 1st year university.

    There were people who were simply lazy, and took "easy" electives like environmental science (shudder) or earth science.

    There were also the so-called "prodigies," who always got excellent marks but only through memory rather than understanding.

    Neither of those people *knew* what they would be doing for the rest of their lives.

    I knew what I would be doing. I took a combination of courses suited for electronics/computing. Physics, Chemistry, Advanced microcomputers (electronics/programming/interfacing) and design technology (CAD, problem solving/design). I learned a hell of a lot in all of those courses.

    I was able to test the waters before I wasted money on post-secondary education I may have hated and dropped out of. That wastes money and time.

    "Introductory" science courses tended to teach very little. History is important but not the way it is commonly taught (events are important, dates and complete lists of leaders (a la US, we weren't subjected to that in Canada) are *not*).

    Foreign languages are useful, but mainly if you want to work in the service industry. In Canada, I think other languages are taught way too early. I had a gf who did French immersion, which had two effects: 1) she was arrogant, because everybody labelled her as "prodigal" at an early age and 2) she could understand neither as well as she should have. I sometimes had to define words and rephrase sentences (she was *18*!). So here's a link to programming: you may know the syntax, but you may not be able to communicate well using it.

    With spoken languages, it's hard to teach the theory of communicating thoughts and ideas before a language is known. With programming, it can be done to an extent.

    Just don't delude new programmers with a dozen languages or they may miss the basic concepts of programming. Using a single language the concepts are better taught. Throw other languages at them after they actually know the first one. I think a good indicator of that is when a programmer prefers a reference manual over a tutorial book (like those godawful "learn x in y days" books). The fact that tutorial books heavily outweigh reference books can indicate a lot of things here...

    Kudos to those who are pushing for this. Maybe we will get a similar project here in Canada.

    Maybe a good way to teach programming is to generate an itch that a student wants to scratch. That way they think about it and ask more questions. Actually, that's how most of the programmers I know got into it on their own.

    Ooops, I appear to have gone a bit long in my rant. I apologise, but it's something I've thought long and hard about for many years.

  39. On The Teaching of Programming ... by Hrunting · · Score: 4

    Python's a good choice, but what really needs to be done is to separate the coding aspect from the theory aspect (I know, difficult to do). I went to school at Lehigh University where, among other things, I delved a little into the CS department (I was an architecture major, so it was a bit of a sidestep). I hadn't had any programming experience prior to Lehigh, and I cut my teeth on programming theory using Pascal. The programs are so basic at that level that idiosyncracies don't matter, but learning Pascal itself became the major obstacle. Since then, Lehigh's taken their curriculum and moved it over to C++, but the introductory course teaches neither C++ or Pascal. It uses a pseudocode that is very simple, so the class really becomes about theory and not about coding. Later, you learn C++ as part of coding, and you already have the background to handle the theory part. Because the theory part is so complicated and the coding so simple, they can go into different ideas that may not be available in a certain language. That, I think, is where CS studies should go.

    Personally, I use Perl non-stop and it was very easy for me to pick up, even having only a Pascal background. I learned Perl reading through old source code and reading the man pages. I do think that programming should be taught by Unix admins. The best CS course I ever had at Lehigh was a course called C & Unix which was taught by Lehigh's EECS sysadmin. I learned so much about coding, and it was all stuff that the Windows-based professors didn't seem to think was important.

    *clink* *clink*

    There's my two cents.

    1. Re:On The Teaching of Programming ... by ArcadeNut · · Score: 2

      I agree. The syntax of the languages are easy and in some cases very similar. I can pick up any language, learn the syntax in a few days and actually be productive in the language.

      The things they need to teach in school is Good Object Oriented Desgin, Engineering Ethics (i.e. holding ones self to a higher level of quality than is expected), and Debugging Skills.

      Teach them these skills and the choice of lanugage will be a moot point.

      --
      Visit the Arcade Restoration Workshop @ http://www.arcaderestoration.com
    2. Re:On The Teaching of Programming ... by robbieduncan · · Score: 3

      This is an important point, and one that is often overlooked. If you teach someone how to program, and how to program well, then they can use these skills in any language. If you teach them a language then they will find life hard out there in the real world. Teach them about good constructs, code re-use and in the end efficiency. That way in fifteen years time we might see less of the needless bloat floating around today.

  40. Re:Let's have a poll by RickyRay · · Score: 1

    And many other locations. I had it as a beginner class at the University of Utah (which has a curriculum quite similar to MIT, I believe. Better, in fact ;-). Wonderful language for teaching many beginning concepts (though I wouldn't want to use it in my job).

  41. Maybe the best choice by arivanov · · Score: 1

    This is maybe the most strict elegant and readable language floating around (though being a lazy camel I do not use it). Very good choice.

    The interesting consequence is that the schools will have to deploy *NIX systems for all students.

    --
    Baker's Law: Misery no longer loves company. Nowadays it insists on it
    http://www.sigsegv.cx/
    1. Re:Maybe the best choice by robin_s · · Score: 1

      Why do they need to deploy *NIX in the schools. Python exists under M$-WIN*

      --
      http://www.munich-irish-rovers.de
    2. Re:Maybe the best choice by arivanov · · Score: 1

      It is just like perl - stripped from most of the functionality and barely usable. Open a pipe under Win for example ;-)

      --
      Baker's Law: Misery no longer loves company. Nowadays it insists on it
      http://www.sigsegv.cx/
    3. Re:Maybe the best choice by JustZisGuyYouKnow? · · Score: 1

      I love Python too, and am a fan of *NIX, but
      your conclusion is more than a little bit off;
      Python is available for Windows.

    4. Re:Maybe the best choice by robin_s · · Score: 1

      Under M$-WIN* it might be missing pipes etc but these things are hardly "learn to program" stuff. I dont actually use M$-WIN* stuff when I can get away with it and I have as yet never had the need to program using any of their stuff. The schools dont *NEED* to switch to a *NIX based system, then again maybe they dont *NEED* to switch to M$-WIN* either. :-)

      --
      http://www.munich-irish-rovers.de
    5. Re:Maybe the best choice by Anonymous Coward · · Score: 0
      It is just like perl - stripped from most of the functionality and barely usable. Open a pipe under Win for example

      Well Python support for Windows is more or less ok, for the proportion of Windows users might be higher. Your specific example isn't perfectly true, since http://www.python.org/windows/win32/ says: win32pipe A module that provides popen() functionality (and more!) to work from a win32 GUI process (which os.popen doesnt!). This module also exposes the win32 pipe API, allowing you to create and connect named pipes. More impressive, you can use COM objects from Python (and write COM objects in Python), etc...

    6. Re:Maybe the best choice by arivanov · · Score: 1

      It looks like I have not expressed myself properly. I did not mean now, immediately, on the spot, but rather sooner or later after being frustrtaed by students asking "Why this thing from the book does not work".

      --
      Baker's Law: Misery no longer loves company. Nowadays it insists on it
      http://www.sigsegv.cx/
  42. good ol' Pascal and C++ too difficult by [orb] · · Score: 1

    I don't really see where the difficulty lies with these languages when teaching them to high school students. I took the Pascal AP and C++ AP in high school and passed the AP tests and came out with a decent understanding of how programming works. I don't think its the language that teaches students its the students willing to learn the language.

    --
    [orb]
    1. Re:good ol' Pascal and C++ too difficult by Ender2 · · Score: 1

      Pascal, and C++ are two languages that are often taught in high school. It is my belife that both of these are fine languages to start on IF and that if is all captaialized for a reason. Becouse it's a big if you are in High School. It is my understanding from the article that they are hopeing to incorperate programming into all of education. That would mean not just High Schoolers. For someone that is much younger and lacks the math background to undertand some of the more complex ideas of C++ and Pascal, even something as simple as a varible. I belive that Python which can provided instant output. Ex. you put in 2+2 and it prints 4. Nifty huh. But Python is not the only easy interpated language out there. Also there is good old BASIC which very good for beginners. I mean. Come on. How many of us didn't write "Hello world" in basic while still in grade school or middle school.

  43. This is AWESOME!!! by gspencley · · Score: 1

    This is really cool. I have absolutely CRAP at my high school. There is only one cs course taught in grade 11 and they teach turing .
    As far as teaching C++ as a first language, I guess your right. C was hard for me to learn. I started with gwbasic when I was 7 and learned C at about 9, but I guess I'm a special case too. Not too many kids learn how to code at that age.
    Now at 17 I'm a software developer for Planet-Intra, how cool is that??? Maybe it would have been even earlier if I learned in school.
    (Pizza Pizza losing all their teenage employees???)

    1. Re:This is AWESOME!!! by Anonymous Coward · · Score: 0

      "Not only that but the kid looks to be a majorly antisocial, talk in C++? Wow that boy needs some education." Ah, yes, the grammer in that sentance definately showed that you should be talking about someone else's education.

    2. Re:This is AWESOME!!! by Anonymous Coward · · Score: 0

      Ah, yes, the grammer in that sentance definately showed that you should be talking about someone else's education.

      It's spelled 'grammar', and 'sentence'.


      :)


    3. Re:This is AWESOME!!! by TurkishGeek · · Score: 1

      And "definitely", not "definately". This has to be the most common spelling error in English.

      --
      Zigbee Central: A Zigbee weblog
    4. Re:This is AWESOME!!! by Chandon+Seldon · · Score: 1

      OT: How does Python compare to Perl - if you had a fairly simple task, and knew both, when would you choose one over the other? I'm a Perl zealot, but I think that Perl is a better Second language than first. If you teach someone Perl before they have any knowledge, and they realize how amazingly simple things can be in Perl, they may not be able to handle a more traditional language when they have to learn it. People should learn that things like Auto-typing, and regexps are *special* so that they don't expect them when they try to code in C.

      --
      -- The act of censorship is always worse than whatever is being censored. Always.
    5. Re:This is AWESOME!!! by rcade · · Score: 1

      I'm pretty sure many people reading Slashdot learned how to code around that age, humble myself included. Perhaps working at Pizza Pizza would have been much better for building a real character;

      The kind of character that posts anonymous insults? I don't think this guy was bragging (and I certainly don't think he deserved your hostile response).

      However, he should brag: Any teen who is learning computer languages and working as a software developer is doing something good for himself at an age most of us were sacking groceries or flipping burgers.

      --
      Rogers Cadenhead (Web: http://www.cadenhead.org/workbench)
    6. Re:This is AWESOME!!! by Anonymous Coward · · Score: 2

      Great, now that you've boldly proclaimed your child genius status; do you have any other accomplishments to list? I'm pretty sure many people reading Slashdot learned how to code around that age, humble myself included. Perhaps working at Pizza Pizza would have been much better for building a real character; and perhaps the modesty that usually accompanies real geniuses.

    7. Re:This is AWESOME!!! by cookd · · Score: 1

      Or, to put it differently, putting effort into a long term educational goal while those around him/her are playing. (Probably has more to do with interests than planning, but you have to admit that it takes a lot more effort to learn programming than it does to sit around the house or watch tv.)

      --
      Time flies like an arrow. Fruit flies like a banana.
    8. Re:This is AWESOME!!! by Anonymous Coward · · Score: 1

      Your school probably shouldn't even bother attempting to teach Computer Science when their students have such poor writing skills.

    9. Re:This is AWESOME!!! by Mr.+Mikey · · Score: 1

      Insightful?!?!?!?

      *snort*

      A young programmer shows some enthusiasm, and a bitter AC bashes him. Pathetic. You, Sir, should look to your own character, and modesty, before you criticize another's.

      OT: How does Python compare to Perl - if you had a fairly simple task, and knew both, when would you choose one over the other?

      --
      wants to be the first monkey to touch the monolith
    10. Re:This is AWESOME!!! by Weezul · · Score: 1

      I suspect there are a good many people who learned to program (sorta) before they were 10. My dad claims he started teaching me when I was 6, but i couldn't tell you when I actually understood and retained what the hell a goto did. I think it is good for kids to learn it that young, but I also think they should learn some stuff about the scientific method.. and i mean the bullshit debunking side of the scientific method. I think one of the most importent things about what langauge children use is wether they can see anyhting happen. Maybe if you added some simple game API like sprites or something to Python it would make and even better teaching langauge.

      Second, don't assume real geniuses are modest. they frequently have quite large ego's, but that don't mean that they are obnoxious about it. I am a graduate student in mathematics and I can tell you most of us have huge ego's, but we are still nice people. ex: we pretty much avoid stepping on each other's ego's.

      Jeff

      --
      The Christian religion has been and still is the principal enemy of moral progress in the world. -- Bertrand Russell
  44. Okkay, Perl bigots... by Jay+Maynard · · Score: 0
    How long do you suspect it will be before the Perl bigots flood this thread and drown out other useful discussion?


    FWIW, Python's original name was ABC, as in "as easy as"...one of Guido's design goals was that it should be easy to learn and non-idiosyncratic, good ones to have in a first language. I don't have a lot of heartburn with this choice.
    --

    --
    Disinfect the GNU General Public Virus!
    1. Re:Okkay, Perl bigots... by scrytch · · Score: 1

      Not idiosyncratic? Please. Lists vs. tuples. How about that wacky list slicing syntax, where it's zero-based in the first slot, and 1-based in the second? (or is it -1 based, I don't remember). Guido claims this made it easier to chain slices together, once again where What Is Easy For Guido To Understand must be for everyone, regardless of inconsistency.

      lambda (x, self=self): ... criminy.


      --
      I've finally had it: until slashdot gets article moderation, I am not coming back.
    2. Re:Okkay, Perl bigots... by Evan · · Score: 1

      What *about* lists vs. tuples? Tuples are read-only lists, and exist for performance reasons and to use as hash keys.

      List slicing is based on the gaps between elements, and works the same in either slot.

      Functions and lambdas require all variables to be brought into the namespace explicitly. Lexical scoping may be introduced soon.

      Were you bitten by a Python when you were little, or what?

    3. Re:Okkay, Perl bigots... by Anonymous Coward · · Score: 1


      Mr. Maynard, do you *ever* have anything nice,
      or constructive, or positive to say? Not one
      of your posts I have ever read on slashdot was
      any one of these.

      It's sad. What's your beef?

    4. Re:Okkay, Perl bigots... by Anonymous Coward · · Score: 0

      Well, in spite of your fears, there doesn't seem to have been any Perl bigotry in this thread so far... Maybe a) No Perl programmers bother to react b) Perl programmers are not bigots c) You scared them away before they got started. I kinda hope/expect it's mostly reason b.

    5. Re:Okkay, Perl bigots... by Anonymous Coward · · Score: 0

      ...lexical scoping may be introduced soon.
      And the heavens were opened, and the Blessed One came forth, Saying, "Verily, you may have your lambdas and your scopings. Closured shall be the functions of your creating, and functionally shall they perform."
      And the People rejoiced mightily.

      Ok, a little overdramatic but that's possibly the best news I've had wrt Python in a long time. Where'd you hear it?
      (btw, I don't think we should be too offended by the Perl bigots..the original poster did *ask* for them anyway :) )

      Daniel

    6. Re:Okkay, Perl bigots... by Jay+Maynard · · Score: 1

      Maybe a) No Perl programmers bother to react b) Perl programmers are not bigots c) You scared them away before they got started.

      I hope it's b, as well, but after reading the garbage spewed in the Stevens thread, I rather suspect it's c. My purpose in posting my comment was to act as a lightning rod, hopefully drawing their fire away from the more meaningful discussion.
      --

      --
      Disinfect the GNU General Public Virus!
    7. Re:Okkay, Perl bigots... by Jay+Maynard · · Score: 1

      What's your beef?

      I'm sorry I come across this way. Most of what motivates me to post on Slashdot is reading articles that push my buttons; as with most other folks, articles written with that kind of motivation will come across as less than positive. I do try to be positive, but don't succeed as often as I, and apparently you, would like.

      Such is the case with this thread. I'd read enough of the Stevens thread to be thoroughly sickened by the behavior of the Perl bigots there, and Tom Christiansen's post simply iced the cake. When this article was posted, I saw something those same people would pounce on, and wrote my message in the hope that it would draw whatever nasty comments there were away from the real discussion. As it happens, the nasty comments didn't appear, something for which I'm grateful.
      --

      --
      Disinfect the GNU General Public Virus!
  45. Re:Python use in the market by Taran+Wanderer · · Score: 1


    Yahoo is running Apache over FreeBsd. But in terms of python use, its pretty rampant on the backend of their site. try using one of the yahoo maps and look at the script name ... .py There are quite a few high-profile sites that use python on the backend. Its very clean easily understood code from a language that can be learned quickly. I've been writing web applications in python for the last few months after switching over from perl... and i've been impressed over my increase in productivity and the readability of the code that i produce. Which is huge in terms of other people mantaining... IMO perl's great for quick and dirty stuff and get something to work but it sucks for mantainability in a complex app... which is where python begins to shine...

    --
    Papa Smurf Says "When You Live In A Mushroom Everyone Looks Blue"
  46. Re:Underestimation by kuroineko · · Score: 1

    Well, I think that you slightly missed the point. Noone is going
    to teach programming. They want to teach younger students to 'read and
    understand' a simple code and make minor improvements to it.
    This is more real to achieve and more usefull. Behaviour of today's programs is defined by three parts: code,
    user input and configuration files. Think of configuration files as (Python?) scripts and imagine end
    users able not only pushing buttons but also to fine-tune a program to meet their needs by editing a (relatively) simple
    script. Something like this we already have in *nix: shell interpreters with redirection and pipes.
    Of course, users familiar with Python or whatever programming language will find themselves _empowered_ by pipes and redirection, not confused like click-o-rama addicts. And this will make life for us. programmers, much easier.
    BTW, learnign foreign languages is damn hard. Probably acquiring Dutch for English native speaker is like filling a tax bill, try Japanese then :)
    It's really hard. So programming is.

    --
    KuroiNeko
  47. Re:Before you teach programming... by jflynn · · Score: 1

    Discrete math is good. As you say lots of practical applications and examples. It would lead into statistics and probability quite well. Some study of abstract algebraic structures would also help: groups, rings, modules etc. Also of course, logic, proof, and foundations.

    I wasn't poking fun. Its just that learning to multiply *was* part of the curriculum for her. Lots of math classes *assumed* she had learned them (and didn't allow calculators.) She is totally unprepared to take any math or science in college as a result now. This is keeping her from taking the environmental science classes she is actually interested in. If you haven't learned the prerequisites, you'll be frustrated, not educated.

    I would also agree that memorization is in general a poor way of learning, but there are some things that act like a ROM-BIOS for reasoning that probably should be stored early on. She spells perfectly in English, and conjugates irregular verbs just fine, so it wasn't the memorization that was the problem here, but the boring way multiplication was taught.

  48. Don't choose a language by Ozwald · · Score: 1

    I don't believe that there has to be any one language decided on. Instead they should try to decide on what their goals are: do they want students to be computer literate? do they want students to understand logic? or do they want a huge new group of mediocre programmers?

    Language has nothing to do with any of this. I learned lots of languages that made me the programmer that I am. I learned logic using my Vic20/Basic. I learned algorithms and efficient coding using Assembler and C. And I learned Object Oriented Programming using C++ and applied the knowledge to Borland's Delphi. I could go on but every language is important in its own way.

    If they want students to be computer literate, give them an operating system install CD, a newly formatted hard drive and tell them to write an essay on it. This is probably more useful to the masses. If they want to teach logic, Lego Mindstorms would do just as well. As for a tonne of weenie programmers, we don't need them. We need programmers who are talented, self motivated, and innovative. Linux would not exist if every contributor wasn't all of the above. And schools can't teach this.

    Ozwald

  49. One language can be bad by Stormin · · Score: 1

    I think it also depends on how much the language you learn first is used.

    When I first started as a CS major the department taught everyone Pascal. The TA's admitted that "This is a teaching language and nobody does anything serious with it." The professor pointed out that if we graduated in this program that we'd probably know a lot of languages... he explained that graduates liked to list a lot of languages on their Resume's, because it looked impressive. He explained that once you've learned a few languages , learning a new one basically involved picking up the diffrences of how things that you already knew how to do were expressed in the new one. I found that to be the case as I went on to pick up all kinds of other languages.

    Now, a year after I started they changed the program around. The new freshman that year started right of on C++. ( I think this had to do with helping them recruit people, because they could say that students start with C++ their first semester. Not that it makes the program better, but other people were saying it and implying that it made -their- programs better ) Over my four years I had to work with these people a lot.

    Probably the defining moment when I realized that going straight to C++ was a mistake came in a systems programming class senior year; the class had a mix of people who had started with Pascal and others who had basically used C++ except for their brief forays into Assembly or the AI languages. Well, the systems programming instructor suggested that we use C, not C++, since unix is written in C and we'd be calling unix functions a lot. I was shocked when the juniors in the class complained that they couldn't understand how to use printf(). The professor put up a web page explaining how to use printf. He provided format strings in .h files for us to use. He provided examples. Still these people could not understand how printf worked.

    Now, I've never really used C++ for anything. I've never taken classes with it or had any training on it. But I can figure out how IOStreams work when I read source listings that use them.

    I guess my point is that I don't think starting with something like Python is such a bad idea. Sure, some people won't go any farther. But they weren't meant to be CS people anyway.

    Mike

    1. Re:One language can be bad by Anonymous Coward · · Score: 0

      But what if the systems programming class used NeXT(Open)STEP, JavaOS, or BeOS? Meaning, systems where they are meant to be Object-Oriented? Do you think the experience would have been different? I do.

  50. This is way more difficult than it sounds. by Surak · · Score: 1

    I'm a third year CS student (ok, I'm a professional programmer who's going back to get his degree, but still...)

    Programming is not an easy thing to teach. I just finished a intro to programming class (don't ask, they wouldn't let me test out) and at least 30% of the students could not (and still cannot) understand the concept of a while loop.

    I did a structural walkthrough of my final program (which perfoms an exceedlingly basic task of converting currencies) and I did some nifty extras in my program that were not required (like using functions) and 90% of the class simply could not understand what my code did. At all.

    BTW--IMHO, Pascal would be the teaching language of choice. It was designed by Nicklaus Worth for exactly that reason: it was easy to teach to CS students. Now I don't recommend such a thing for serious, professional programming (with the exception of Delphi which is an awesome RAD tool, IMHO) but the fact that the language has strong type checking and most implementations of the language have builtin checks for common programming pitfalls makes it an excellent teaching language.

    Python is too difficult, IMHO...its more for experienced programmers than for students.

    1. Re:This is way more difficult than it sounds. by Bob+Ince · · Score: 1
      IMHO, Pascal would be the teaching language of choice.

      The first-year programming course where I was was indeed Pascal, and I have to disagree on it being a good teaching language - especially if confined to standard level 0 Pascal.

      I find learning Pascal gives one a very restricted mindset about what programming languages can do, which is very useful in understanding the weaknesses of many languages and how to get around them, but not very good at encouraging one to break down a task into smaller subtasks in the most logical way available, which is the essence of programming. (Not that the former skill isn't also very useful, it's just I don't think it should be the first thing to teach.)

      Python's pretty good, I think, as an introduction to modern-ish languages, as it is a sort of cleaned-up conglomeration of standard language features. But sometimes I think starting with a functional language might be better. (Not convinced that any current functional languages are that great for such a task, but then I've only met a few of 'em.)


      --
  51. Re:having used Python and Java exstensively... by Anonymous Coward · · Score: 0

    Is one class per file really bad? I guess it would be better if you let people have multiple class defs in source, but compileed to separate class files.

    And, do java.util.Hashtable and java.util.Vector count for anything?

  52. Re:My opinion => Too pricy! NOT!!! by Anonymous Coward · · Score: 0

    What about GNU Smalltalk, the educational/non-commercial version of VisualWorks, or, better yet, the open-source Squeak (http://www.squeak.org/)? Sorry, but Smalltalk, at least in an educational setting, isn't any more expensive than any other language.

  53. I say teach 'em brainf*** by Surak · · Score: 1

    Or perhaps befunge? What part of :
    ----- begin beer.bf -----
    v v0\1:\1:\0\0\!:p15-" ekaT">v
    0>>.0"llaw eht no "v"eno"^>0 #"^1^_v
    c1,>51g#^_"ti"^. >vr : $
    "::^" down, pass "^|\*25,052*":dnuor t"vbv:52*".ll"v >,^ fb e
    v"aw eht no r"v
    """ ,: >" ;"^ f ^^"bottle""s"^v"les"^>^" yub ,erots eht ot oG"^
    ------ end beer.bf ------

    Did you not understand? :-)

  54. Re:Programming Not Appropriate as Part of High Sch by Anonymous Coward · · Score: 0

    Actually, my high school programming class did in fact cover recursion, hash tables, trees, and some simple sorting. In fact, that was pretty much all I learned out of the whole year :-(
    BTW - Python is probably not as good as Scheme for beginners, but it's only slightly worse in my opinion.

    Daniel

  55. Everyone's missing the real issue! by RickyRay · · Score: 1

    The real issue isn't the language, it's everything else. The most useful classes and projects I have been in are the ones which focused on how to solve a problem, not how to program it in a particular language. Just like when you're teaching students how to solve math problems you don't teach them how to code it, you teach them how to _solve_ it. You're better off learning how to write down the requirements, specify the assumptions, plan for every condition, and diagram actions/algorithms. Any decent project has more time spent designing than coding. Ideally, the decision on what language to use should come fairly late in the game, when you know which would be most efficient. Far too many coders spend all their time coding first, and trying to make sense out of it later (*see Windows 95, etc.). I'll be forever convinced that Win2000 would have been done and useful ages ago if they had been willing to do a clean start on it and do it right this time instead of trying yet again to insert functionality into code that is already a lost cause. Can't be done! I would bet that truly successful programmers like Carmack at id Software don't try to just keep reusing code, but instead plan ahead for each project and start over when necessary. Carmack, for that reason, probably accomplishes more each day than 1000 programmers combined at many large companies. At my company everyone we ever recruit is someone who knows how to plan, document, coordinate, etc., not just code. And the results from that technique have been wonderful.

    1. Re:Everyone's missing the real issue! by aUser · · Score: 1

      Yep. And this applies in particular to people who are fond of cryptical language. The question is: can you do the job?

  56. Obviously you haven't used ML too much... by Jayson · · Score: 1

    I started using ML for project about 2 years ago
    (OCAML) and found the syntax unwieldy. The distinctions between the two different calling conventions (lists of argument capable of being curried versus pare wise agruments that cannot be curried) is pointless.

    The object syntax has noticeably been grafted on and is convoluted.

    And any language where it is optional to show what procedure is being called on what arguments is flawed in that it makes it unreadable for both humans and compilers (just look at Perl -- if I type 'f g h i' does it get parsed as (also remeber that the operators are left to right associative).

    1) 'f (g (h (i)))'
    2) 'f (g, h, i)'
    3) '(((f (g)) h) i)'
    4) other

    You get the same problems in ML. The language has a some nice ideas, but the overall implementation and ad hoc nature of the features added over time make the lanaguage far from ideal for either teaching or using.

    -jason

    1. Re:Obviously you haven't used ML too much... by joho · · Score: 1

      Huh? There is not "two calling conventions" in ML. There is one calling convention,
      function followed by argument. Of course, the function can be any function-valued expression.

      In the case on an uncurried function, the argument is a tuple. This is no different from using any
      other datastructure as an argument. I.e conceptually there is no difference between

      f (x,y)
      and
      f (Leaf x)

      Of course, the One True Programming Language is not ML, but Haskell. :-)

  57. I have the first edition. by Inoshiro · · Score: 1

    It really is a good book, and it teaches you a lot about just *basic* good habits, besides C. I'm glad to see a fellow voice of reason on this subject ;-)

    Anyways, I learned a bit of programming (not C) from that same book, and became more involved (and learned my earliest) C from a few other books (even a C++ book for some theory at one point). All I can say is, a lot of theory + application in whatever language you are familiar with is the way to learn to think like a programmer (in general). The "thunking" that your mind does between theory and application in (usually BASIC/Pascal/C) is what really can have an effect on how a programmer turns out.

    --
    --
    Internet Explorer (n): Another bug -- that is, a feature that can't be turned off -- in Windows.
  58. Programmers per computer way down by Anonymous Coward · · Score: 0

    It was something like 10 programmers per computer in the 1950s, to about one programmer per 100 [general purpose] computers now. Why make everyone a programmer?

  59. Re:Use of beginner's language by Daverz · · Score: 1

    Python has these features, as do Perl and Tcl.
    Actually, I'm not sure what your point is.

  60. Re:Why WOULD we want more programmers? by Anonymous Coward · · Score: 0

    Well, I think students should be given programming as an "elective". I had no such electives in HS. Maybe there are some people who can't afford a computer, but want to learn how they work, so they take this "elective" in programming. As in, everybody doesn't have to learn to program, but give those who want to a choice. But, we do need good/better teachers, who teach because they WANT to.

    failed for making a program too small? Funny.
    In HS one of my friends helped a student cheat in typing class (sad, isn't it?) because the computers were networked 286's (running the greatest DOS word processor EVER, WordPerfect 5.1, over the network). All he did was put his file in another students directory on the network drive, and the other guy opened it to show the teacher. I dunno if the teacher if knew it was possible.

  61. ASM by Anonymous Coward · · Score: 0

    If they taught Assember as a first language, think of how great our programmers would be....

    1. Re:ASM by Anonymous Coward · · Score: 0

      No..not great. But ASM will get those minds working better. I program the Z80 (8bit...TI-83 :) Being forced to do complex mathematical routines on only 8bit operations (and the occational 16bit rigisters) can really sharpen your algorithim making skills. ASM will only teach you so much before you need a third level language to teach OO, data abstraction, data hiding, and stuff like that. I must say, if I didn't know how to program already Bjarne Strosup's (SP?) _The C++ Programming Language_ __Second Edition__ would teach me alot. The third edition is too big and discouriging. After reading the first few chapters , I learned A LOT of programming concepts (by reading inbetween the lines...)

  62. much like any spokenlanguage... by Uart · · Score: 1

    Computer languages are best leasrned a a younger age than when you are in High School.

    --

    Opinionated Law Student Strikes Again!
  63. Re:Ugh, JavaScript .. by scrytch · · Score: 3

    actually this is why javascript should die as a language:

    operators: =, ==, and ===

    Check this out:

    Boolean x = new Boolean(false); if (x) { y; }

    y will be executed. Every object is true in an identity test, including Boolean false. However:

    x = false; if (x) { y; }

    y will not be evaluated. a literal false is still false, but an instance of it is not. false is true unless it is the True false. my head just exploded at that point.

    --
    I've finally had it: until slashdot gets article moderation, I am not coming back.
  64. Re:3D engine as _first_ project?! by AMK · · Score: 1

    Umm... someone has already done this and called it Alice; take a look at the Alice tutorial. This is one of the inspirations for the CP4E effort, because it's been really successful at letting non-programmers do interesting things.

  65. 6800 Assembler! by Anonymous Coward · · Score: 0

    Start with the basics! Get a feel for the hardware under the software....... Seriously, best class in programing I ever had was a lab that taught 6800 assembler. Ran on a box attached to a Dec Rainbow (LM something). A very clean chip/assembly language for beginners. Great for teaching all sorts of computer concepts. Did a lot more for me than learning buble sorts in basic in 11th grade.....

  66. MIT still uses LISP in Programming 101 by Anonymous Coward · · Score: 0

    More precisely Scheme, an object-oriented LISP in Course 6.001 required of all computer majors (about 1/3 of MIT's enrollment). Most of the other engineering departments teach more "practical" languages such as Java. This debate between pedagogics and practicallity has been going for at least 28 years since I took the course.

  67. Re:What's wrong with C/C++ and why do nerds like i by aUser · · Score: 1

    I don't know what kind of applications you're involved in. I can only tell you that most programmers around are employed by companies to help run their business. You're not going to deny that, are you?

    Well, you are pointing to constructs in VB that are not an essential factor of success or failure of a business app. You are talking about details, that are far away from handling sales orders, invoices, work orders, pay checks, and so on.

    Is your accounts payable module going to fail to deliver usefulness on what you've just named?

    Whatever language/tool you are going to use, you should keep the real issues in mind: M mandays x S daily rate = B, the budget. How much usefulness, that is needed to do the above, are you going to deliver with your strstr() function?

    By the way, I usually have this kind of final field parsing done by the database manager, by using a function in SQL. As far as I'm concerned, I don't need any crap cluttering my vision on the database, the forms, the reports, and the batches that run the business.

  68. Computer literacy has been a joke! Maybe now... by teleny · · Score: 1

    Having started out in ye hoary old PDP days, I find the concept of "computer literacy", as implemented in most school systems, to be the lamest! Mostly, it's been a sop thrown to parents who've already been pressured by computer salesmen to put their newborns in front of the sanctified glow of a Wintel since it's axiomatic that "you need to get them started early, or they won't do well in school." In turn, the school systems turn around and make impressive-sounding pronouncements that "computer literacy" is essential for the job market and computer-trained workers are necessary to make America competitive in the world marketplace. You don't want your kids to have to become servants to the slant-eyed Japs, now, right, moms & dads? Damn straight! (unfurl American flag, show WWII newsreel) Meanwhile, what is it that they're learning? Well, mostly, they go to a "computer room" for an hour or so every week to fiddle around with educational games, perhaps participating in a class project where they get to use the exciting Internet! and send email!! Do they learn such real-world job-market skills as spreadsheet macros or database design? Well...no...I mean, they're only kids, it's more important thay they have fun, right? And look at how much fun they're having -- we're making a web page about the rainforest next week! Oh, so they're learning HTML and Javascript? Well, no, we're using this software...frankly, it's enough work having to wade through their Math essays much less having to learn something like that for just one page. For the whole class? Well...it's not all that good for kids to do individual work...it divides kids and makes the slower kids feel real bad about themselves so we don't do that kind of thing here. So this is kind of like letting them watch TV for an hour, right? Sure, if you put it that way...(giggle)...it's a real help to me, almost like an hour off... Programming might introduce, stealthily, such lost arts as spelling, grammar, logical structure, mathematical rigor, individuality, and creativity. I'm all for it. However, I don't think most Dales (teaching jargon for "good enough" teachers) will have the time, patience, or left-brainedness to learn coding themselves. Old-timers may remember New Math. Nuff said.

    --
    teleny, friend of cats.
  69. Re:Not a great post by Anonymous Coward · · Score: 0
    You're asking if Java would be the better choice even though you know nothing about Python. Rather ignorant.

    Well, if he wasnt ignorant he wouldnt have to ask questions, would he? Why dont you try to answer his question instead being an ass..

  70. Re:What's wrong with C/C++ and why do nerds like i by scrytch · · Score: 3

    Yunno, if the company wants me to deliver a package and gives me a coughing banging studebaker that still starts and barely makes the speed limit, I can do my job. Do I want to be using that tool to do the job? No. Did they teach you that concept in management school?

    --
    I've finally had it: until slashdot gets article moderation, I am not coming back.
  71. You answered yourself. by Anonymous Coward · · Score: 0

    '...most people can change a tire, the oil, even do minor repairs. How many people can rip an engine apart and put it back together?' But no-one is suggesting that they need to be able to write their own operating system or anything. Just that it would be good for them to at least know what a program is, how it works, and so on. Who knows, maybe some of them can even use this stuff -- just yesterday I wrote a program that can serve as an electronic diary. It took relatively little code and nothing particularly advanced -- each entry is stored in its own file. I wrote it in Python; the 'core' of the program is probably a few thousand lines (there are 10000 total, but there's a lot of commenting and extra features that I put in for the heck of it). This might be a stretch for non-CS types -- but I think they could handle it, and it would be useful to them. Even simpler things can be quite useful as well -- even just a script that automatically handles incoming mail (Python's mail-parsing facilities are exceptional) and does stuff with it. Anyway -- I seem to be losing focus here :) Basically I think that it *is* useful for people to have basic competence with stuff like tires and simple programs. Daniel

  72. Re:While C++ is too difficult for beginners ... by Anonymous Coward · · Score: 1
    .. C isn't. While I don't want to knock Python, I feel it is more useful for a beginner to learn a fairly low level language like C first.

    Remember this: typically 40% of the time is wasted doing memory management (malloc,free,new,destroy,tracking references).

    I agree that some CS graduates couldn't grasp real world programming concepts. But I'd rather have a CS student that can write only big slow working code, than fast bug-ridden crash prone code, because he only half understands pointer manipulation (argument passing, array, dynamic allocation). Look, if the CS student was outstanding bright then he would already have hacked on his home Linux, or at least would learn the pragmatics of programming very fast. If he isn't, maybe they are a shortage of programmers, and it is often better to write slow correct code, than incorrect fast code. Only 3% of the business applications are rewritten for performance reasons.

    Programming isn't easy, although languages like Perl and Python can make certain tasks much easier than they were with C. The problem is making the distinction between tasks that should be tackled with tools like Python, and those that should be tackled with C or C++.

    When I was young I always sweared by C/C++ (and by Pascal before), but now I have realize how wasteful they are. A very big amount of the tasked that cannot be tackled by Python/Perl, could be better be tackled by compiled language such as (compiled)Java/Eiffel/Ada/Modula3/Sather/whatever. Any language where you don't have to recyle your garbage, and don't have to do funky pointer passing/manipulation, could be teached to beginners.

    Perhaps it is time that CS degrees were split into systems programming courses and scripting based ones. There is a massive demand for programmers who will rarely need to touch compiled languages like C.

    Hmm... theoritically other compiled languages (with garbage collection and with bounding checks) can be close to C, don't forget it. You don't have to get a x100 penalty for not programming in C :-)

  73. C++ isn't that bad by Anonymous+Bastard · · Score: 1

    I took AP Programming during my sophmore year in high school and it really wasn't that hard. Before that, I had almost no programming experience. Just about everyone could do the basic stuff but once we started moving into OOP people fell behind and the class was really difficult for them.

  74. Re:Why are you teaching them programming? by Daverz · · Score: 1

    "...interesting are the add-ons available, i.e. libs, free code, examples, ability to act as glue, do system calls, etc.. Python might be great for that..."

    It is.

    "I don't know. But the point is, if that is the goal, you can probably kiss a lot of the simplicity goodbye."

    No, the simplicity is still maintained.

    "Further, if writing glue-type programs is the
    primary goal, then perl or C might be better, because of the vast number of add-ons."

    Python does not have as many modules as Perl does, but the simplicity and consistency of its syntax make up for that IMO.

    I do not believe your number 3 is one of the goals. I believe the goal is to empower computer users by making computer programming accessible to a wider audience.

  75. neo-Basic by Anonymous Coward · · Score: 0

    25 years ago Basic was a big step forward and it taught a lot of people how to program. By todays standards it reeks. Someone should start over, take the original goals of Basic, add modern code/data structures and invent a new beginers all purpose programming language.

  76. Who needs 'em by Anonymous Coward · · Score: 0

    Aww, the poor widdle high school students think C++ is too hard...boo hoo. What purpose would it serve to teach everyone in America Python, or any amount of computer programming for that matter. I'm already being told that I'm too late to get a good job as a programmer, because now everyone is switching to CS from other majors. So I busted my ass for four years teaching myself C/C++ from wretched books, and because I was born too late I find my future profession deluged with people who don't know a pointer from a breed of dog. Seriously, this is my fourth semester of CS, and right now they're trying to introduce C++ to these poor souls...I just sit there in class bored to tears and occasionally correcting the professor when he messes up a portion of code. Blech.

    I'm sorry if this sounds rude, but it's the honest truth. I may not be particularly nice, athletic, or socially adept, but I think I can code better than my peers.

    -W.W.

    Posted anonymously due to being locked out of my account and Rob not answering emails.

    http://www.rit.edu/~waw0573

  77. I was about to post the same thing. by Chorizo · · Score: 1

    I too have never used python, but now I'm interested. After learning some basic concepts in C, the first language I can say I studied and developed on is Java. I found it to be an excellent example of what an object oriented language should behave like. The undergraduate program at Cornell University is now completely in Java for their "non CS major how to code" classes (Dylan is used for the CS majors in one class). They switched from C/C++ 4 years ago, and from Pascal a few years before that. Regardless of any media slant that Java is a "web lanugage," I find that as an educational tool, it works well in teaching the basics of inheritance, interfaces, and other oop concepts. Chorizo

  78. Re:Scheme syntax is not the same as C. by Anonymous Coward · · Score: 0
    This has always been one of the main Scheme benefits (and the rest of the Lisp family, too, I guess) is that it's syntax is so incredibly simple that it can't get in the way.

    That's not exact. Turing machines have an even simpler syntax ("0" and "1"), and are clean and consistent. But they are unusable. What you need is a language that where the basic individual steps of your program are easily implemented.

    One pratical example where Scheme syntax is simplistic is OO (in pratice you have to name the class, method and instance at each method call, not fun at all).

    A problem I see with Scheme is that it uses very abtstract concepts such as "lambda" (returning, storing functions in variables, along with apply and map), but maybe 8 year old children can cope with this.

  79. Sorry about the formatting by Anonymous Coward · · Score: 0

    I keep forgetting that /. doesn't default to Plain Ol' Text for AC posts, and that I'm not using my account atm :)

    Daniel (formatting correctly this time!)

  80. Plug: Try Python Scripting in Objirc Chat by pbryant · · Score: 1

    If you are interested in taking a first hand look at python - maybe even using it for a real application - check out http://objexcel.com

    It features Objirc Chat a Java IRC client with Python (and Java) scripting built in.

    I've had several queries from students whose assignment was to 'write a chat client in Java'. It seems to be CS101's most common project. Instead, I'd argue they should be using an existing framework and add something new.

  81. Python as a learning language by ZarkDav · · Score: 1

    From a strict computer science standpoint, I think Python is a very nice language. I like Python and I use it regularly in both personal and professional projects.

    However, I think its syntax and "philosophy" is just far too different from the ubiquitous C/C++ language. I don't know about the curiculum in the US (I'm French, and I left university some time ago), but I think CS students should be able to master the languages used in the industry.

    Java is simple and elegant (if not orthogonal) and its syntax is clearly more C like than Python. Are there any reasons, other than subjective ones ("Java is slow", "Java doesn't work on my computer" or "Java is not OpenSource"), that rule Java out?

  82. Re:What's wrong with C/C++ and why do nerds like i by aUser · · Score: 1

    Hey, hey. I did management school; and as a matter of fact, I'm considered the best coder at my company, because I'm fast and my code is bug free; and it's ready before CS guys even started writing their class headers. That's why THEY are paid peanuts. As long as THEY don't understand that someone is going to pick up the tab, to pay for the cars, the beer and the chicks, they'll continue to gaze at their screen, asking themselves why can they, and why not we? while we're having fun.

  83. Why WOULD we want more programmers? by FunOne · · Score: 1

    I work with windows, which, unlike *NIX has a few more RAD pakages. I personally DONT want HS teaching more CS. They just create idiot programmers with no real skill, who get out and make pitiful utilities in VB or Delphi.

    Remeber, most high school CS teachers are people who COULDN'T get jobs doing REAL programming. They're not going to pass on too much to the newest group of disinterest im-just-here-for-the-credit HS students.

    I personally dont know anyone who EVER learned how to program from CS. They either already knew, or just copied the one guy who did to pass.

    We dont need more technology in school. We need teachers that are good. We need EVERY student to be able to read,write,add, and isolate the variable. Why dont we get THOSE taken care of first before we start sticking more stuff in.

    Personal note, my School-Computer history:
    Middle School - Mandatory Typing class, played SC2k on teachers computer. Teacher did not know how to make a .bat file.
    HS - Computer Science - Old teacher left year before for a JOB, new teacher, tried to teach Pascal. Gave everyone the same grade each 6 weeks. Once failed a paper for making the required program too small.
    FunOne

    --
    FunOne
    1. Re:Why WOULD we want more programmers? by aUser · · Score: 1

      You're right. Let the kids do the basics and have fun. If they like programming as a hobby, fine with me, but don't shove it down anybody's throat.

  84. Re:Use BASIC :) by Anonymous Coward · · Score: 0

    I think it's worth pointing out that "print 1,2,3" will produce the output "1 2 3" in Python :) (note that you can also get more controlled output using sys.stdout.write('1 2 3') but print is a good thing for beginners and quick/dirty debugging outputs :) ) Daniel

  85. Re:Use BASIC :) by Anonymous Coward · · Score: 0

    System.out.println(a, b, c); wont work because the method can only take one arg. But, if you have: int a=1, b=2, c=3; System.out.println(a+b+c); produces the output: 6 But if you do this: System.out.println(""+a+b+c); then you get: 123 Its whats called "syntictally left-associative", aint java fun? :)

  86. Re:Why not Ada? by Anonymous Coward · · Score: 0
    It seems weird that the article makes no mention of Ada95, considering DARPA uses it for many things.

    Well actually Guido is the Python language initial author :-) I guess you won't see often Larry Wall advocating Java, or Bjarne Stroutput(sp?) advocating Lisp...

    Note that many compiled languages are as nice as Ada95 (Eiffel, or even Fortran90 to some point). In fact any compiled OO language should be much easier and comparable to Ada95. For some reason, it is always the worse language that wins (COBOL, FORTRAN, C++).

  87. Scheme or Perl by prodeje · · Score: 1

    Scheme - Great for teaching Object Oriented programming.. Not too pratical tho.

    Perl - Sure there is a steep learning curve, but get them started in a language which they can actually use.

    ...

    --

    Bitchslapped? Give Rob a bitchslap from bitchslapped.com.

  88. Any book reccomendations? by Anonymous Coward · · Score: 0

    ...for us non-coders (read: humanities students) who are looking to break in? What you guys described sounds pretty akin to what I'm looking for....

  89. Why teach everyone how to code? by Anonymous Coward · · Score: 1

    Is there a point? For the vast majority of students it would be a pointless and needlessly difficult waste of time.If the proposal had been Latin and ancient Greek for everyone, the utter nonsense of it would be immediately obvious to everyone. Useful computer knowledge that everyone should have is limited to things like: - Where the ANY key and the START button are located. - What a monitor is, an intellinside, a floppy, a hard disk, a CD-ROM, a keyboard, a printer, a mouse etc. and what they are for. - Evil crackers can't get into your computer if it isn't connected to the internet, and computer viruses are not dangerous for you. - What the difference is between soft- and hardware. - PC software wont work on a MAC and vice versa. IMNSHO any additional information about computers is not really important for most people, and should not be force fed to them.

  90. what about Java? by airfabio · · Score: 2

    it runs on many systems, it's very similar to C++ and pretty easy to code. Also you can do lots of cool stuff with it early (web graphics and so on), which is really important if you want to keep interest of your students.

    1. Re:what about Java? by aUser · · Score: 1

      It's not because you succombed to the hype, along with other masses brainless people, that everyone should do so.

      Listen, we've had it before: now its Ada, or no, Smalltalk, or no, Modula-2, no, Perl, or no, it's my grandma's object-oriented cat!

      Why don't you just learn to program?

    2. Re:what about Java? by Dnigh · · Score: 1

      Yes Java is a good language, but it does not teach programing, it teaches coding. I am CS student and have had to learn java for my courses. I had done some (not much) programming before starting my degree and I found at the end of the semester my programming skills had declined. I could code great applications however.

      Java is a language where everything is done for you, you don't have to think about what your doing so you don't learn the fundamentals of programing.

      I beleive if they really want to teah these kids programming, teach them pseduocode first, then teach them a language.

  91. Re:Before you teach programming... by Anonymous Coward · · Score: 0

    ...Discrete math? It teaches you to think logicaly and EVERY problem you encounter in the class is "real life." My brother took it in HS...stupid charter schools get the best classes... Any way..my local university offers Discrete Math..and I'm going to take it. As for poking fun at people who don't memorize multiplication table...THERE ARE OTHER WAYS OF DOING MULTIPLICATION QUICKLY!! Memorization is crap learning...problem solving and logic is when you really learn.

  92. Re:Anybody give any thought to Java? by Anonymous Coward · · Score: 0
    It's strongly typed. You can argue for or against strongly typed languages once you are an expert, but I think that most people would agree that its good to start with a strongly typed language

    I don't understand why (you probably mean statically typed, you can't add a string and a list in Python either).

    I actually think Python is pretty cool, even though I don't know it very well. I just think that given the capabilities of Java and the role of Java in the marketplace, Java was at least worth mentioning.

    Well that's why there is JPython (a Java implementation of Python), so that among other things, you can test your Java objects in with short edit-test-edit-test cycle. You can write Python code running on most Java implementation and interacting with its objects ! (isn't what C++ is achieving with C ?).

  93. Don't they realize that... by Digital_Fiend · · Score: 1

    Some people don't WANT to learn to program. They seriously want nothing to do with computers, except perhaps surf the Internet occasionally. Where they look at 'N Sync fan sites and Hanson webrings. My middle school was full of them. They haven't discovered Classy Pass.. Ahem..

    -Warren

  94. No! by lars · · Score: 2
    The second option is to access a relational database. Anybody with anything like half a brain will choose this option.

    Of course a relational database is the best option. But there's definitely no reason you can't decouple the framework from the database stuff. The problems you're talking about only happen if you base the design of your application based on the DATA. That's completely the wrong approach. You design your framework based on the application domain. The flexibility to change the way data is accessed should be built into the design. You certainly shouldn't have your database structure duplicatd in your object model. If that's the case, the design isn't even object oriented.

    For example, if a customer can suddenly have more addresses instead of one, the customer object will have read its address from a different table: it's, therefore, broken.

    See, this is a perfect example of the design being wrong. Does a customer know his address? Yes. Does a customer know how to go into your database and store or retrieve his address from your files? I certainly hope not, and I hope you realize why this is wrong.

    1. Re:No! by aUser · · Score: 1

      Well, if your customer object is not going to read its address from the database, something else is. Whatever is reading the customer's address from the database will have to read it from a different table, and therefore it's broken, and will not be able to hand the address to your customer object, and therefore, your customer object will be broken too; until you fix whatever reads the address from the database.

    2. Re:No! by HalJohnson · · Score: 1

      When an object's attribute becomes a collection of attributes (several addresses instead of one), any class using this attribute (using customer.SetAddress()/GetAddress()) will have to cope with the fact that it's a collection now, and that at least a choice has to be made as to which of these attributes is meant to be read or set.

      A real world solution for this particular problem (Customer.Get/Set Address) is simple. You'd simply change the Customer object's Address to be a collection, with the first address as the default. This would in effect allow all the dependant objects to chug along as usual, not knowing that anything has changed. In the meantime, you can update specific dependant objects to enumerate the collection and use the additional information as needed.

      This can also be done in a plain procedural (flat) language in mostly the same way by creating a new set of functions to enumerate the addresses and using the main function as a wrapper to select the default address from said enumeration.

      IMHO, the OO approach is far cleaner and more maintainable.

    3. Re:No! by lars · · Score: 1

      Of course it will have to change somewhere. But how is this different from a "normal", non-OO program? You'd still have to make the change. If anything the OO design is advantageous here, because any changes would only have to be made within a single class. In a non-OO design there's no guarantee the change isn't going to have to be reflected in more than once place.

      Upon reading your original message again, you seem to be talking about querying the tables, fields, etc. and doing things dynamically based on what's there. I have no idea what exactly you're getting at, but there's no reason you couldn't do these types of things with an OO design. You seem to be saying that an OO design must be rigid and static, and tightly coupled with the data the application is using, but that's no more true than it is for a non OO design.

    4. Re:No! by aUser · · Score: 1

      Now we're really getting to the point:

      "...but that's no more true than it is for a non OO design."

      Therefore, we can state that the OO design hasn't done anything to solve the problem, or any other problem inherent to systems which have complex data structures. That's why I say that OO design is completely overrated. It's a hype, that doesn't deliver on its promises, very simply, because complex data structures are the mainstay of real-world business applications.

      You also write: "If anything the OO design is advantageous here, because any changes would only have to be made within a single class. "

      Wrong. The classes that use this class will be broken too, because the methods Set/GetCustomerAddress() have changed. There is more than one addres now.

      If you want to push through the concept of many addresses throughout the system, all the classes that use the member Customer.GetCustomer() (or SetCustomer()) must change the way they handle the addresses of this customer object. You may opt for workarounds, but they won't change the fundamental problem: they will just be that, workarounds.

      Object-oriented designs do not address the real issues in systems that maintain complex data structures, such as business applications. That's why there are no gains in modeling business objects; better even, the more you stay away from them, the more robust your programs will be.

      When I wrote about querying tables, fields etcetera, I basically meant that the you can, to a large extent, avoid to break a system by adding or removing data (table columns), but as soon as you change the relationships between your data, you will break the system. Object-oriented designs will break even more easily, because in such designs there are simply more places in which you have duplicated the underlying assumptions of your system. The database model is already a strong assumption about the reality it's supposed to store data about. The OO design contains the same assumptions, just coded differently. Now, you will break two things instead of one!

    5. Re:No! by Anonymous Coward · · Score: 0

      I really don't follow your reasoning. Are you really saying that if you change your database the OO program classes will need to be fixed (fair enough) while the non-OO program will just magically cope with it???

      What about this example. Your design changes so that the customer addresses come from a totally different database. You can change one class to handle that in a OO program. The code that uses that class will not notice. Now lets look at your non-OO program that fetches the address directly from the database. Now you have to troll through and fix *all* your code that uses that address.

      Please explain.


      -- Simon who doesn't have his passwd handy.

    6. Re:No! by Anonymous Coward · · Score: 0

      Can you hear the deep, sucking sound of a workaround that doesn't work? What is the default address? If you really needed a collection of addresses, it is clear that the appropriate address is different in different circumstances. If every class that queries this Customer class, receives the same address by default, your strategy is defeating the object. Imagine you have an invoice and a shipping address and that you set the default address to be the invoice address. This works fine for the invoicing subsystem. But how do you know that it works fine for other subsystems. For example, most logistical subsystems will require the shipping address and will receive the invoicing address instead. In your solution, the system will not break, but the consequences are even worse: your solution will produce completely wrong data, in which case it's much better to break altogether, and alert the user that something is wrong. I can see you going. The next thing you will say, is that you will send the invoice address as default, unless the requesting object has a name with prefix "LOGS_*". A few months later you will another rule: you will still send the invoice address, overruling the previous rul, if the requesting object has a prefix "LOGS_INV_*". You can see the crap building up and up and up. I can assure you: down that path lies only madness. After mucking around for 6 months, I understand that you've left the project, because you've found another job? I can see people like you moving around from project to project, insisting on using dogmas you don't really understand, of which you hardly understand the consequences, wasting someone else's money, and, when the shit hits the fan you move on to start the same crap again somewhere else.

    7. Re:No! by Simon · · Score: 1

      I'm sorry, but you are speaking bullshit.

      Let's have another look at this. The old program has a Customer class with one address. All the other classes are happy and work fine with this one address customer class. Now we add the ability of extra addresses to the customer class. The GetAddress() method can still return the old/default address just like in the original customer class. While new code that needs the extra addresses can use a new GetAddresses() method. The old GetAddress() method works just like it always did for the old code, and the new GetAddresses() method works for the new code. No problem.

      Extra functionality can be added to a class while maintaining the functionality of the old interface (GetAddress() for example) and the old dependant code. This is a big part of the advantage of OO. Provided GetAddress() returns the customer address, the dependant code doesn't care how the address is stored by the customer class. Hell you could then replace the DB under the customer class with a brain in a jar and still keep the dependant code!

      Hardcoding SQL queries all over the place is it's own punishment.

      -- Simon

    8. Re:No! by SuperKendall · · Score: 1


      When I wrote about querying tables, fields etcetera, I basically meant that the you can, to a large extent, avoid to break a system by adding or removing data (table columns), but as soon as you change the relationships between your data, you will break the system. Object-oriented designs will break even more easily, because in such designs there are simply more places in which you have duplicated the underlying assumptions of your system. The database model is already a strong assumption about the reality it's supposed to store data about. The OO design contains the same assumptions, just coded differently. Now, you will break two things instead of one!


      I choose to respond to your last statement first, as it is the most counfounding of the statements offered. Who on earth would not decouple a the relationship of a complex business object (or set of objects) from any external storage such as a database? Why would you have that assuption in more than one location?

      Indeed, I find that all too often people have put little thought into schema design and thus end up constantly re-arranging the design of the database - in a well done OO system, it is (relativley) easy to adjust for such mistakes in a quicker timeframe than you can in a more procedural language. In fact, you would have to be a fool not to think of schema change as a primary risk and account for it in application design.

      I've seen many non-OO systems where those relationships you speak of exist in a thousand differnet places through out the code. Oh, perhaps you could do it in one place but because it's too hard to share behaviour and all to easy to cut & paste, the reality is that more often than not you see the same relationships scattered through non OO code, a thousand points of failure just waiting for a change to break them.


      If you want to push through the concept of many addresses throughout the system, all the classes that use the member Customer.GetCustomer() (or SetCustomer()) must change the way they handle the addresses of this customer object. You may opt for workarounds, but they won't change the fundamental problem: they will just be that, workarounds.


      You can design an OO system that breaks under these conditions - but you can also design one that would be fine with such a change. In a non-OO system you are in for a lot of work no matter what, at least in the OO system you have a hope at having a system that can handle such an alteration without huge changes to the system.

      When flying in an airline, do you first discard the flotation device and oxygen mask because they offer you undue complexity and may not save you if you fly into a mountain?

      I will keep my seat cushions and OO systems right where they are thanks, and know I face at least a little better chance in the face of peril.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    9. Re:No! by Michael+Doherty · · Score: 1

      Object-oriented designs do not address the real issues in systems that maintain complex data structures, such as business applications. That's why there are no gains in modeling business objects; better even, the more you stay away from them, the more robust your programs will be.

      Wow! I'd be interested if you have any references to back this up. I have been involved in large distributed enterprise app's that rely heavily on OODA. I can't really imagine what you say being true.

      The measure of good OO design is how easily it can evolve and be maintained. Because one thing for sure is known that the requirements will change over time.

      Regarding your example of adding address fields, this can be done, even at run-time, using custom attributes. Check out Allen Holub's visual-proxy architecture at http://www.javaworld.com/javaworld/jw-09-1999/jw-0 9-toolbox.html.

      We're using something similar. When atrributes get added, we don't have to change a line of code, just some properties files.

    10. Re:No! by lars · · Score: 1
      Therefore, we can state that the OO design hasn't done anything to solve the problem, or any other problem inherent to systems which have complex data structures. That's why I say that OO design is completely overrated. It's a hype, that doesn't deliver on its promises, very simply, because complex data structures are the mainstay of real-world business applications.

      You're saying that because an OO design breaks in this situation -- where a non-OO design also breaks -- it's "completely overrated" and "doesn't deliver on it's promises"? What a total non sequitur. OO is designed to be a more accurate way to model large and complex real-world problem domain in software.

      large == requires more than one developer
      complex == multiple mutually exclusive goals

      Such software is almost always long lived, and it usually makes sense to emphasis: understandability, flexibility, reusability, extensibility. These are the areas where OO is most powerful. This is why, for such systems, OO works well if used properly, and in my opinion is the best approach to take if you want to be successful.

      Wrong. The classes that use this class will be broken too, because the methods Set/GetCustomerAddress() have changed. There is more than one addres now.

      If you want to push through the concept of many addresses throughout the system, all the classes that use the member Customer.GetCustomer() (or SetCustomer()) must change the way they handle the addresses of this customer object. You may opt for workarounds, but they won't change the fundamental problem: they will just be that, workarounds.

      Get/Set methods? Another symptom of a poor, data-oriented design. In fact, it has sounded throughout this thread like your concept of OO is actually pseudo-OO, ie. data modeling. A mechanism free, policy free pesudo-OO paradigm is probably even worse than the traditional, non-OO approach, because you end up with a lot of classes that aren't actually very useful by themselves resulting in tight coupling and less flexibility. If that's your idea of what true OO is, then it's no wonder you dislike it.

      For example, why would the customer have a "GetAddress" method? Would a customer just give their address to anyone who asks? Unlikely. The customer might give it's address to another object if it was purchasing an item. You wouldn't have an item sent to two different addresses though, so objects other than the customer would only need to know about the single address.

      Given a fairly standard design which uses the Builder pattern (see Design Patterns), your change to the database might mean changing two classes: the Customer class, and a CustomerReader class. Or something along those lines. The changes would certainly NOT start propagating throughout the system, unless the design was horrendous (in which case there would probably be the aforementioned Get/Set methods all over the place).

      OO designs will break even more easily, because in such designs there are simply more places in which you have duplicated the underlying assumptions of your system.

      No! Again, that's data modeling. What you are saying is the same as saying that OO systems are not flexible, and that's simply the complete opposite of the truth. A true OO design should be mechanism rich, but more general, more policy free than a non-OO design. A direct consequence of this is fewer dependencies amongst classes, and any assumptions about the underlying system being localized. This results in a very flexible architecture.

    11. Re:No! by aUser · · Score: 1

      Both the OO and the non OO program will break, but the OO program will break in several places.

      When an object's attribute becomes a collection of attributes (several addresses instead of one), any class using this attribute (using customer.SetAddress()/GetAddress()) will have to cope with the fact that it's a collection now, and that at least a choice has to be made as to which of these attributes is meant to be read or set.

      In fact, your can consider your classes to be virtual tables, and the attributes of your classes to be the columns in these virtual tables. The way in which classes use each other obviously define the relationsships between your classes. That's why your class framework represents an alternative database schema, on top of your existing database schema. Is this new schema less vulnerable to changes than the existing one? No. Definitely not. Furthermore, you will need, continuously, to keep these two schemas in sync.

      The result is that the forms, reports, and batch processes using your class framework (classes themselves, if you want) will not be more stable.

      Just like the fact that you can't prevent the interface of database schema (tables and columns) to be scattered all over your code, you will be unable to prevent details of your class framework (class interfaces) to be scattered around your final objects: forms, reports, batches, and so on.

      What is the advantage then of a class framework? Furthermore, the object manipulation technology is so much less advanced than the database manipulation language. If one of your reports needs to know how much orders on customer has, it would be rather easy and efficient to query the database using SQL. If your report uses an object framework, you will writing code to loop over customer objects and order objects within the customer objects: a lot of programming to answer a trivial question, and it may be very slow too.

      By using class frameworks, sitting between your final programs and the database, you lose the benefits of SQL, while gaining nothing, but heaps of useless, unmaintainable code.

      My conclusion is that the people who advocate object oriented concepts don't understand what software is being developed in the real world. Just look at the examples and explanations in most textbooks on object orientation: it's all about cats and dogs, being mammals, et cetera, to explain inheritance. Why do these people (Take Grady, Booch, Meyer, Yourdon, ...) choose stupid examples, instead of examples taken from real-world situations, in which we talk about orders, invoices, pay checks, and so on? Because these people simply do not have a clue about the real world! And that's why their technology has nothing to do with reality.

      They didn't look at the real world and try to solve the problems we're having now!

  95. Oh come on... by Anonymous Coward · · Score: 0

    Don't go trying to argue that Python (the language) is "better" simply because it has a better set of basic libraries that make certain tasks easier. The language doesn't make it easy to parse the password file, the helper libraries do. Java could probably do the same. If you're saying that Python is the better choice or more useful because these things are easier BECAUSE of a good base of nice libraries, then say that. But don't give credit to the language because you can call a few functions in 10 lines of code to accomplish some task, when your program is just calling out to great big modules that actually handle all the real work. Not that I don't think Python is a better choice for education. Dynamically typed languages make it infinitely less frustrating for students. Plus, if you have an idea for a program that requires little less than lumping together of other components, Python (and all it's handy modules) is perfect for that.

    1. Re:Oh come on... by Anonymous Coward · · Score: 0
      Don't go trying to argue that Python (the language) is "better" simply because it has a better set of basic libraries that make certain tasks easier. The language doesn't make it easy to parse the password file, the helper libraries do.

      No, I'm not only arguing that Python is "better" simply because it has a better set of basic libraries. I think it is more fundemental than that. First you don't have to worry about static typing and all the declarations, type casting, and homogenous collection, etc.: this can be a relief (the same way that automatic memory management is a relief from C++ to Java) at some possible safety cost. Second its basic types are much more "integrated" in the language than Java. This is particulary true for lists and dictionnaries. In Python, no one will ever hesitate one second to return a list (or a tuple). This is why you have "string.split(aString, anOptionalSeparator)" that can be used to split /etc/passwd lines (returns a list of splitted fields). This is also why you have a file.readlines() method (return the list of lines of a file). Python lists can be very easily manipulated with many convenient operators (a[-1] ; a[x]= ; a[5:7]) and methods (a.sort()). To sort the users by uid, you just create an empty list l, append tuples "l.append( (uid, login fullName) )", then call "l.sort()".

      readlines(), split(), append(), sort() are easy not only because Python has a many modules, but because lists are closely integrated. Polymorphism sure helps lists to be powerful also.

      When I read Java or C++ library documentation, I was amazed by the incredible number of classes, collections and their interfaces ; while at the same time Python has only 3 collections: list, tuples (immutable lists, used instead small structures), dictionnaries. But when I program, I'm constantly frustrated by C++ and Java collections, while in Python every use of list flows naturally.

      I think it all boils down to the fact that lists are a fundemental type (along with integers, strings, structures/objects). And to the fact that C++ and Java made them second class citizen by implementing them in libraries. I guess Lisp got it right 30 years ago.

  96. having used Python and Java exstensively... by tuffy · · Score: 1
    I think the learning edge goes to Python. But not by much.

    Java Pros:

    • strong typing
      When something goes wrong, all the weird syntax errors are caught at compile time, often to the line number with a nice verbose explanation. Trying to pass the result of int foo() to String s will make Java complain. Python's typeless system won't catch that sort of mistake.
    • everything is an object
      This encourages one to think about what sort of objects everything is and how to link them together. Python has much less OO reliance by allowing globally-defined functions and variables. Fortunately the input statement keeps namespaces sane.
    Python pros:
    • ease of use
      Python has no "one class per file" silliness and all that it takes to run a Python program is to make it executable. No "compile-to-bytecode" step (for the end user) or longwinded execution command.
    • strong language
      Java is C-like and provides only the weakest primatives. Python provides strong features like built-in hashes and resizable arrays - also with OO-like design using operator overloading.
    I won't let this degenerate into a silly language war, and I think Java and Python both have uses. But for beginners I think Python is the better first choice.

    Learn all the computer languages you can :)

    --

    Ita erat quando hic adveni.

    1. Re:having used Python and Java exstensively... by tuffy · · Score: 1
      Multiple classes per source would be nice, especially for beginners. Juggling Foo.java and Bar.java is tough for people just getting used to text editing and compiling. Java tends to put entire class groups into a single directory (java.util in the /java/util directory, for example) while Python puts them all in a single file. Given than Java typically winds up being more verbose than Python, the distinction makes sense. But it can get a bit annoying when I wind up with a dozen classes As for Hashtable and Vector, Sun themselves decided they were a bit too messy and have the collections interfaces to replace them in Java(1.)2. The main difference is that both are ever-present in Python by default and use operator overloading to make using them simple. For instance, compare:

      for (int i = 0 ; i < vector.size() ; i++) {
      ((Foo)vector.elementAt(i)).bar();
      }

      in Java to Python's:

      for f in foo:
      f.bar()

      and the difference is striking, especially given how often such a construct occurs. For beginners, the savings in keystrokes is a big headache reliever.

      --

      Ita erat quando hic adveni.

    2. Re:having used Python and Java exstensively... by Michael+Doherty · · Score: 1

      You can have more than one class per file.

  97. Scheme syntax is not the same as C. by Jayson · · Score: 1

    I don't know if you were using the same Scheme that I do, but how can you compare Scheme syntax to that of C?

    How can you say that there is too much? The only syntax in the language is '(' and ')' to denote a function (or macro) call. There is no syntax besides that (some versions have some syntax for arrays, too).

    This has always been one of the main Scheme benefits (and the rest of the Lisp family, too, I guess) is that it's syntax is so incredibly simple that it can't get in the way.

    I would like to see you find a language in which has a cleaner, more consistent syntax than Scheme (I don't know of any).

    A Scheme bigot and proud of it!
    -jason

    1. Re:Scheme syntax is not the same as C. by Anonymous Coward · · Score: 0

      Thanks, you put it better than I could :) Daniel

    2. Re:Scheme syntax is not the same as C. by Jayson · · Score: 1

      One pratical example where Scheme syntax is simplistic is OO (in pratice you have to name the class, method and instance at each method call, not fun at all). First, you are confusing syntax with programming interface. Scheme has no provided OO system, but there are many that you can build on top of it. There is no syntax for objects. Seccond, I don't really know what you are talking about, unless you are trying to think about the SICP version of object as functions returning functions. But then, the interface is just asking the function to give you a function: ((object 'method) arguement) See, no syntax. Yes, these are abstract concepts, but they are the foundation of computers and how they work. That is what you really want to teach people. -jason

    3. Re:Scheme syntax is not the same as C. by Anonymous Coward · · Score: 0
      First, you are confusing syntax with programming interface. Scheme has no provided OO system, but there are many that you can build on top of it. There is no syntax for objects.

      Yes, but that's part of the problem. C also provided no elaborate data-structures ; you are free to implement them yourself. I want a full fludged tested efficient OO system to be built-in. I don't want to implement my own lists, or my own OO system.

      Seccond, I don't really know what you are talking about, unless you are trying to think about the SICP version of object as functions returning functions. But then, the interface is just asking the function to give you a function: ((object 'method) arguement) See, no syntax

      Actually, I made a mistake. When I tried scheme, I wanted to do OO, but I gave up due to the proliferation of incompatible OO systems. I switched to functionnal programming with the "structures" of slib. These were a major pain, because if you have a structure 'point' "(make-record point (x y color))", then everywhere, you have to use (point-x current), (point-color current). I understand that I could have implemented my own structures using for instance "(current :x)", but I do expect that these fundemental entities (structures) to be builtin in the language, so that each library doesn't come with its own incompatible way of doing things.

      That's why I switched to Common Lisp shortly after (which I gave up when I realized that CLOS was not efficiently implemented in freely available CL, and I'm now using a mix of Python and C++).

  98. What's wrong with POINTERS???????????? by Anonymous Coward · · Score: 1

    Maybe it's me, but I find that to be an extremely silly question. :) Ever had a memory leak or a dangling pointer? That's what's wrong with pointers. Or are you Linus/God and write 100% perfect code 100% of the time? :)

  99. Re:Thats how I did it by Anonymous Coward · · Score: 0

    excues me... noone under 18 would be able to understand polymorphism or encapsulation? wtf? gimme a break.... I'm 16... and understand it just fine thank you!!! age isn't everything you know

  100. Which schools HAVE used Java? by Anonymous Coward · · Score: 0

    I know at UCSD, they recently switch the first CS class for CS majors (and EE majors) from C++ to Java. So Java was the first (and only) CS class I took (of course, I had already taught myself the basics of C). I found that Java was a pretty good language to start, but I wasn't a TOTAL beginner. Also, one of the professors (Dr. Savitch) wrote simpler input routines for the class (to go along w/ his book) so students could use simple input into their programs. Thinks I found: Java really makes you think OO. And, all the crazy keywords (like public static void main(String[] args) we were just told to accept and ignore in the beginning, which I had no trouble with.

  101. As a former 1st year CS major in High School... by ToOn · · Score: 1

    C++ wasn't all that dificult, just the matter of learning it. The part of OOP wasn't immensly hard to grasp, just learning Syntax was difficult, but after the first month it started to become routine of learning new ways of doing stuff. Of course this was in a class that started with about 17 people at the beginning of the year, and ended with 5...

    --
    The Secret Government Ego Project
  102. Give Rebol A Try! by Anonymous Coward · · Score: 0

    Here's another new programming language which would is great for both beginners and seasoned professionals. It's called Rebol.

  103. Re:I strongly disagree by QuoteMstr · · Score: 1

    Why are Get/Set methods bad? They are better than public data, anyway, since get/set functions can validate data before it is assigned, preventing things like negative mass.

    Better yet, instead of using get/set functions,
    simply use:

    class MyClass
    {
    public:
    void Variable(int x);
    int Variable();

    private:
    int x;
    };

  104. Python seems like a good choice, but.... by Anonymous Coward · · Score: 0

    From what I've read and from looking at Python,
    it seems like a good choice, except for one detail: the use of indentation to define control structures.

    Indentation is a problem because the tab
    character means different things on different
    systems. Mixing spaces with tab characters can
    thus lead to confusing error messages (if you're
    lucky) and incorrect results without having
    visual indication why. For instance, given:

    f = open ('cookbook.data1')
    LoL = [];
    while (1): """ #3 """
    line = f.readline() """ #4 """
    if not line : break """ #5 """
    LoL.append (string.split (line)) """ #6 """

    printLoL ('read from a file: ', LoL)

    the following results can be seen:
    * the program will work if #3, #4, #5, #6 all use
    tabs or spaces
    * the program will give a strange error if
    effectively (at the compiler's tab settings)
    #4 and #5 are not indented wrt #3 (actually
    we may simply get bad results if we're in a
    nested loop...)
    * the program will give incorrect results if
    #4 and #5 are indented wrt #3 but #6 is not.

    This sort of syntactic/semantic error would
    really confuse the newbie.

    Also, with Perl/C++/Java/Basic, it's possible to
    write a pretty-printer if tabs get out of whack.
    I just don't see how Python can get, uhhh... in
    whack(?) again if people mess up the formatting
    (This is bound to happen if more than one person
    modifies a file).

    1. Re:Python seems like a good choice, but.... by Daniel · · Score: 1

      I just don't see how Python can get, uhhh... in whack(?) again if people mess up the formatting (This is bound to happen if more than one person modifies a file).

      Well, there are a couple of issues here:
      -> Editability. With a Python-aware editor (Emacs in python-mode for example) the indentation is handled laughably easily: Tab indents either to the current indentation or one higher, Backspace at the beginning of a line drops the indentation one level. 4-space indents (I think) so you really see the difference between the levels. No tabs at all are used AFAIK, but it doesn't matter if they are. This is really much much less of a problem than you seem to think; the only times I've ever been bitten by it were when entering complex definitions in the interpreter -- something that you rarely want to do anyway for plenty of other reasons.
      -> Newbie confusion. I don't really see how this (with a decent editor) is more confusing than anything else. Plus it enforces proper style >=)
      -> Maintainence by multiple people. Since they are all using proper editors :) the syntax shouldn't get 'out of whack' -- they will always indent 4 spaces to the left or right of the current block. However, even if they do have differing opinions on the subject, if they are at all competent they will reindent an entire block when they reindent one line. (as a matter of fact, Emacs in python-mode has a function for reindenting blocks) Python doesn't care that every block in the program isn't at the same level, it just needs indentation to be consistent within blocks. And you *could* use a program to make your indentation consistent again as long as the blocks were correct, it would just be highly specialized :) (in fact, I could probably write such a thing in an hour or two..)

      In sum -- it seems to sound really bad to people when they read about it (I also went "Huh?" at first) but it is not a problem when actually using the language. (because all the people who have a problem with it got scared off I guess ;-) ) I find that it actually makes things easier, since I always indent my code consistently anyway; it just means I can stop lining up braces..

      Daniel

      --
      Hurry up and jump on the individualist bandwagon!
  105. Re:Programming Not Appropriate as Part of High Sch by scrytch · · Score: 2

    > High School students should be taught how to read WELL, write WELL and do math WELL.

    AMEN! Programming is the skill of telling a computer what you already know how to conceptualize and structure. It's the formation of concepts and ability to structure it that is foundational to programming, writing, speaking, planning, analysis, and just plain critical thought. I took no CS classes at all all the way through grade school, and my exposure to computers was owning a VIC-20 then a C64 which I wrote trivial BASIC programs on. The most instructive class I ever had was 5th grade grammar: I must have diagrammed hundreds of sentences in that class, which taught me to recognize structure in sentences. This is an invaluable skill in recognizing patterns in programs now.

    --
    I've finally had it: until slashdot gets article moderation, I am not coming back.
  106. Miscellaneous ranting (was: BASIC?) by D'Archangel · · Score: 1

    I am very strongly opposed to this suggestion, for one simple reason: I've tutored students who started with bad habits. I think I frightened them, actually (I can grow very emphatic when disgusted by seeing yet another random jump or meaningless variable name). Pascal (or maybe Scheme) is still my prime choice for a starting language -- sure, it sucks to actually use it for anything, but I've never met a language that teaches better habits. And it's easy enough for ye students to get a grasp on. Since I don't think any languages should be taught the first year anyway (I like the idea of simply working with pseudocode for a year, see below), I'm particularly opposed to teaching them something that will take years to unlearn if they decide to get serious about programming.

    Since I've gotten sucked into this discussion anyway, here's my thought. Learning to program, first of all, is a general skill which actually has applications in other fields. It requires rigorous structured thinking, and does a world of good towards sharpening critical thinking skills. For that reason and the fact that the world is rapidly turning more digital, I'm strongly in favor of making programming concepts a required course.

    Note that I said concepts. The language taught in the first year should be nothing more and nothing less than a vehicle for the concepts being conveyed. I don't know enough about Python (it's on my TODO list, but you know how that goes) to be able to comment on its suitability. I would be happier if it were made practical to not teach using a language at all for at least the first semester. The thing is, picking up a new language once you know how to program is easy. Want to learn perl so you can do cgis? Read some manpages. Want to learn Java? Go read Sun's web pages for about a week. No sweat. But if you start somebody off with bad concepts, everything else will be harder for them.

    This is also why I'm opposed to OOP as part of the first concept-course. OOP is wonderful. When I first discovered the concept, I was stunned by the power thereby implied. Oddly enough, it leaves first-year students cold (I will not go into my rant about CMU at this point, I'll stick to the rant I'm on). The thing is, it's an overwhelming set of ideas to start with. In my mental map of programming stuff, it fits into a cubby marked 'extensions to basic programming concepts'. First, a student learning OOP after learning algorithmic programming will have some idea of what he is seeing and why it is worth learning. This is good. Second, a stundet who starts on OOP will be screwed in a non-OOP environment. Bad. Third, well, I just think the sheer initial learning curve I associate with OOP, added to the learning curve of programming in general, would be evil and dissuasive. So you teach it to second-year students in parallel with their C classes.

    Okay, enough ranting for just now.

    Most of the ideas expressed in this post are its author's; some of them arose out of a discussion on the subject. Any errors in logic or application are my fault, not theirs.

    P.S.: Has anybody considered interCal?

    --
    Sic semper luseris.
  107. Re:Scheme?? I don't think so by Anonymous Coward · · Score: 0

    How can the syntax of Scheme get into the way? It *has* no syntax! Look, here's a quick definition of Scheme (there are a few extended things but this is enough to get you started. Well, maybe not. )
    Basic data types: boolean ("#t" -> true, "#f" -> false), integer, float, string, list (I lie, it's cons, but this is OK), symbol (a variable name), 'special forms'
    Lists consist of two parts: a 'car' and a 'cdr'. 'car' is the first element, 'cdr' is a list with the first element removed (think box-and-pointer..)
    The interpreter proceeds by evaluating expressions. Literals (strings, numbers, and booleans) evaluate to themselves. Symbols are 'bound' to values (like a variable definition); they evalute to their value. Lists are evaluated by first evaluating the first element of a list. If it is a procedure, the remaining elements are evaluated and passed as arguments to the procedure; the value of the list is the procedure's return value. If it is a special form, the action depends on the form:
    -> 'if' - the next element is evaluated; if it is true ('#t') the third element is evaluated and returned. Otherwise the fourth is.
    -> 'define' - the second element, a symbol, is bound in the global namespace to the value of the third element (after evaluation). So '(define a (+ 3 2))' results in a==5.
    -> 'lambda' creates a procedure. (lambda ARGS BODY). ARGS is a list of argument values, BODY is the procedure body (one or more expressions). When the procedure is called, the symbols in ARGS are used as temprary variables and the expressions in BODY are evaluated one by one; the value of the last is returned.
    -> 'quote' takes a single argument and returns it *WITHOUT EVALUATING IT*. This is very important. "(quote (+ 2 3))" evaluates to "(+ 2 3)". This can be abbreviated as '(+ 2 3) -- that is, by putting a single quote in front of the expression to quote.
    Some basic procedures:
    (cons CAR CDR) creates a new list (actually a new cons cell, but often a list) from two values
    (car LST) returns the car of a list
    (cdr LST) returns the cdr of a list

    I think that's the core syntax of Scheme, right in front of your very eyes :) All the parentheses are just list boundaries; not that each special form has its own syntax, but each also just relies on lists, reducing the number of weird syntactic entities.

    Daniel

  108. Re:Off topic, but I'm wondering . . . by Anonymous Coward · · Score: 0

    I doubt that I'm a good example but, I learned at a really, really early age, around age 6.
    my first language was BASIC on a old Texas Instrument that was as old a I was when I got It.

    Infact I had more interest in learning various programming languages then I did in perfecting my
    english, which is still really bad, but on the other hand I can proggram in about 9 different languages now. After all you just did not get
    the same stimulation writing in english as you did programming.

    But as far as a normal child by the time they hit the 5th or 6th grade they should be able to pick
    up a computer language. Infact most kids I know in that age group are very Interested In that sort of thing.

  109. C++ not too difficult for high school by Trepidity · · Score: 2

    My high school offers C++ as the language for first-year CS students, and it doesn't seem to be a major problem. In fact, all high schools wishing to participate in the AP curriculum/tests must offer C++ to their CS students, since the AP CS test is only offered in C++ (changed from Pascal about 2 years ago).

    1. Re:C++ not too difficult for high school by Flambergius · · Score: 1

      I often lounge at a student club frequented by CS majors at my university (TTKK). I have done so for many years and during that time I have had give informal tutoring to many first and second year students that are having real difficulties with C/C++. In my opinion, C/C++ is too hard. Yes, they can learn it, but many have to concentrate on the language so much that they don't actually have even a chance to learn programing.

      -- Flam, who learned to program by diffusion at the said club.

      --
      Computers are useless. They can only give you answers - Pablo Picasso
  110. Shows how much you know. by TummyX · · Score: 1


    VB supports interface inheritance - although i agree implementation inheritance is very useful.

    There is no such thing as MIDSTR$.
    it's called mid or mid$.
    There has been an index & strstr in basic since qb (and probably before).
    ever seen Instr() or Instr$()?

    1. Re:Shows how much you know. by aUser · · Score: 1

      Are your comments relevant to what I said?

      I'm repeating myself, and I'll repeat myself once again for you, until you finally open your ears and then argue to the point.

      Most programmers are involved in automating business procedures. What they need, and the companies that are paying for the services, are tools to better automate business procedures, and faster, that is, cheaper.

      You are writing about midstr$, mid$, and other details that do not matter to the issue. There hasn't been one project in the history of mankind that has failed over the presence or the absence of midstr$.

    2. Re:Shows how much you know. by TummyX · · Score: 1

      I don't really care what you were talking about.
      I only scanned comments for stupid things. I thought you said VB didn't have mid or strstr.
      i was correcting you.

      If you make an arguement - with wrong facts - your arguments should immediately be questioned.

  111. MFC is just brilliant... by joss · · Score: 1

    as a way of discouraging competition. I truly believe MS
    encourages developers to use MFC in order to prevent other
    companies producing worthwhile software.

    MS does not use MFC internally - they're not stupid. Even the designer
    of MFC knew it was terrible - it was created for people who
    wanted to be C++ programmers but couldn't handle it.

    C++ is NOT right for beginners. Even professional C developers with
    3+ years experience shouldn't be allowed to touch a C++ compiler until they've
    read Effective C++ (Scott Meyers)- there are many pitfalls.

    I also think programmers should all be taught assembly at some stage.

    --
    http://rareformnewmedia.com/
  112. Excuse me, DARPA?! by Anonymous Coward · · Score: 0

    Can anyone explain to me why the hell the military should be designing high school curricula? Regardless of the merits of the project itself, why should tax money be spent to fund it? It sounds to me like another post-Cold War budget justification.

    1. Re:Excuse me, DARPA?! by Anonymous Coward · · Score: 0

      It is about the conspiracy. Theu are going to teach the kids Python so that they can brainwash them better with subliminal Python statements on tv and internet. This way they can efficiently program the kids brains with a computer language that even the militaries can learn.

  113. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  114. Should be Interesting ... by BweeDwee · · Score: 2

    As an old man (48 years old) who has made his living programming for a long time now, I will vociferously support ANY effort to teach kids programming. Computer programming is the love of my life, my passion. There's nothing more satifying. Whether it's Python, Perl, C, C++, even COBOL, I'm for it. If taxes need to be raised to get kids into it, I'm for it. I want the next generation to love it as much as I do.

  115. I have an idea... by Graymalkin · · Score: 1

    lets just stop teaching math and english in high school and concentrate on programming and computer science. COmputers solve all our problems. Ok. Theres a funny thing about technology, it self perpetuates an ability for people to take it for granted while never allowing itself to trickle down to be useful to those who could find it useful. While people here on slashdot for the most part have the ability to read and do math, a vast majority of the freshmen in my old high school did not. Math A (basic arithmatic) was the most popular freshman math class, a majority of the freshmen didn't have a reading level comparable to the grade they were in. Before you debate which programming class should be taken in high school why don't you first think of a way to make students literate and able to solve a simple algebraic equation. A classical education is more important than an AA in computer science. Why is this? The US is seriously lacking in it's mathematics and science skills. This means the millions of billions of innovations that we now take for granted won't continue to happen. Without engineers and physists who's going to create the machines that you CS degree lets you program. Hell, even if all you do is work at McDonalds you will find your life so much easier if you can read things more complex than an unemployment pamphlet and have the ability to work out your finances algebraically. It seems as if classical education in the US is being left behind in lieu of a more technological education. Schools will spend thousands upon thousands of dollars on new computers but hardly any money on new english textbooks or history books. Who needs to know about history and english when they can program. We think we're so much smarter as a society than we were two hundred years ago but if I asked the average high school freshman today to recite a line or two of Shakespeare he'd look at me funny, if I asked someone two hundred years ago the same question I'd most likely get more than a line or two. Think about it before you moderate it down.

    --
    I'm a loner Dottie, a Rebel.
  116. Re:Programming Not Appropriate as Part of High Sch by Anonymous Coward · · Score: 0

    you make a good point, however... PE isn't a very helpful class yet they make you take 3 semesters of it (where I am). AND health is a blow off class and you have to take it. So if your gonna have these other classes that really aren't important you might as well have an elective that teaches you SOMETHING useful (i.e. you dont sit in the bleachers the whole period listen'n to yur cd-player and talkin to freinds because your coach gets paid the same amount whether you do something or he just reads the newspaper).

  117. What about LOGO ? by Anonymous Coward · · Score: 0

    I like turtles.

    1. Re:What about LOGO ? by CrudPuppy · · Score: 1

      did anyone every port logo to linux??

      that was a pretty neat program :)

      --
      A year spent in artificial intelligence is enough to make one believe in God.
  118. Smalltalk is better by Anonymous Coward · · Score: 0
    • Smalltalk has been used to teach programming to kids and that works.
    • Smalltalk is pure: *everything* is an object.
    • Smalltalk is available in free, commercial and non-commercial versions (squeak, VisualWorksNC, many more...)
    • Smalltalk comes with an IDE, no stupid edit/compile/test cycle for the entire source, no switching between editor and app, you can even change a Smalltalk program *while it's running*.
      Incremental compilation is a big boon to rapid prototyping, I won't explain, you have to *feel* it.
    • OO companies love to see Smalltalk on your resume.
    • A lot of Smalltalks are binary compatible across platforms.
    • Add-ons commercially supported (OOdb, distributed Smalltalk, versioning systems, connectivity to legacy systems, web connectivity etc. etc,)
    • see also:
    R
    -
  119. Religion vs Reality by Baldrson · · Score: 1

    What happens when religion collides with reality?

  120. Re:good beginning language by merlin94121 · · Score: 1
    robbieduncan wrote:

    >Almost no languages have been designed [as a beginner's language]

    LOGO stands out as the best learning language, IMO. Read papers on educational design or download the software (freeware or commercial) from The Logo Foundation.

    The Logo programming environments have been developed over the past 28 years.

    Some say "oh, its a baby language."
    I disagree. I've taught programming to scores of children in several countries. Kids can understand programming right away by seeing the LOGO turtle respond to
    TELL TURTLE 0 RIGHT 90

    But they also can grow with the language and
    learn debugging, recursion, AI, arrays, stacks, sorting functions, etc...

    I've learned over a dozen computer languages, (LOGO was my fourth). But I really started to enjoy programming one summer when I created my own shoot-em-up game in Logo and helped a 12 year program a Chess game in that 'baby language'.

    python's interactive prompt will be helpful to beginners. It's object and package system is easy to understand. It is less complex than perl. I think its a decent choice and with a good teacher kids can learn in any language. But python is designed to be a clear, object-oriented scripting language, while LOGO has 28 years of depth in education.

    Good luck to this project! TMTOWTE (E is for Educate)
  121. Re:In a perfect world by Anonymous Coward · · Score: 0

    Except you just added a perl regex to your reply, so much for 'everyone should talk in C++'

    ;->

  122. Re:The American educational system sucks! by Anonymous Coward · · Score: 0

    The way you've spelled (or rather mispelled) Yugoslavia makes me agree: The American educational system sucks!

  123. Choice of language by David+A.+Madore · · Score: 1

    This is the sort of topic on which everyone would comment by advocating h(is|er) Favorite Programming Language. Since I am not one not to rush along with the fools, I will do likewise.

    Of course, in theory, the choice of a programming language should be irrelevant, by a weak form of the Church-Turing thesis (``at the bottom'', all programming languages are isomorphic). Teaching how to program should be that, teaching how to program, and not teaching the use of a particular language, be it the hype of the moment. But in fact we don't believe that — if we did we might as well use the Pure Lambda Calculus, or Turing Machines in the teaching, and something tells me that this would be disastrous. There is, as fortune says, no difference between theory and practice — in theory.

    So the ideal programming language should be a high-level one, where the syntactic sugar is kept to a minimum, and where the important concepts are emphasized. And it should be garbage-collected. That obviously rules out C, even more C++, and I don't think Python is such a good choice either. IMHO, the three natural candidates would be:

    • Scheme
    • ML (either SML/NJ or OCAML)
    • Java

    Scheme is probably the best choice if we want to give students good habits from the start: very limited syntactic sugar (no fear of cancer of the semicolon), simple and logical structure, first-class citizenship for almost all objects (so that students can get used to manipulating all sorts of abstractions, without having to climb out of the Turing tar-pit first by wrapping the instruction in needless layers of content-free material). It might be argued that it is too difficult: I really don't think so; the difficulty most people have in dealing with Scheme is more cultural (and acquired) than intrinsic. Scheme's main disadvantage, though, is its lack of a decent (standardized) run-time library. If, however, we really want to teach the students the essentials of programming (i.e. algorithms), and not the bells and whistles of the cute graphics and so, Scheme is the best choice.

    ML is in the same line. Its syntax is not nearly as logical as that of Scheme (rather ad hoc and inelegant), but it does have two features which may be viewed as advantages. One, it is strongly typed; that can be an advantage (teaches good habits) but also an inconvenience (look up ``bondage-and-discipline'' in the Jargon File). Two, it offers the possibility of programming imperatively (which is much harder in Scheme), because it is a relative of Pascal; so students could be shown both styles of programming (functional and imperative) in the same language.

    Java is more of a compromise. It is not nearly as ``mathematical'' as the two other ones (and hence, some would say, not nearly as difficult). It is akin to C, but has the considerable advantage of being GC'ed. (Teaching students how to free() memory themselves is an anachronism, like Knuth teaching us how to bootstrap a computer with a punched card.) It also has a rich run-time library. Data abstraction can be satisfactorily achieved in Java; however, first-class citizenship of all concepts is still far.

  124. How about REBOL (http://www.rebol.com/) by Sprite · · Score: 1

    The syntax of this language actually simplifies itself as you write more code in it. What better way to get beginners going while allowing them to proceed without getting mired in the minutia of programming?

  125. Re:Let's have a poll by Stonehand · · Score: 1

    The language of abstract mathematics and symbolic logic; those who have a good background with manipulating abstract concepts, proof techiques, and rule-based evaluation will have a much better ability to understand programming.

    You might as well distinguish between conceptual programming (determing an algorithm), and pure coding (implementing that algorithm, with full knowledge of all the idiosyncracies of whatever tool you're using).

    As for the coding language of choice, that depends. Do you want them to be able to code quickly, or do you want to enforce structure, or... ? I'm biased towards C or Pascal, but eh.

    --
    Only the dead have seen the end of war.
  126. Isn't this stupid? by jfedor · · Score: 2

    I don't know about US, but in my country if you call yourself a CS student people assume you're smart enough to learn Pascal or C.

    Not that I don't like Python (actually I don't know anything about it).

    -jfedor

    1. Re:Isn't this stupid? by cookd · · Score: 1

      Yeah. Hint to people considering CS as a major: once you get to college, you better be able to figure out how to program on your own. Even if you take a course on Java or C, your professor will only be able to cover so much in class. You'll basically be figuring everything out on your own, and coming to class to clear up questions you had on personal study time.

      --
      Time flies like an arrow. Fruit flies like a banana.
    2. Re:Isn't this stupid? by djfiander · · Score: 1

      But in high school (the Germans call it "gymnasium", or is that primary school?), you don't call yourself a CS student, and that's the environment that we're talking about In _Canada_, if you call yourself a CS student, people expect you to learn a new language without formal instruction

      As in, "Assignments for this class are to be completed in FORTRAN, the first assignment is in two weeks." I had a week to learn FORTRAN and a week to do the assignment.

    3. Re:Isn't this stupid? by Anonymous Coward · · Score: 0

      well at MY cs department they each us C++ NYA! NYA! NYA!

    4. Re:Isn't this stupid? by oliverk · · Score: 1
      Actually, in my country people assume you're smart enough to learn several languages, and then be adept enough to transfer to new languages based on project requirements. The point is that Python is the right choice to convey the fundamental aspects of programming. It won't (and shouldn't) replace C, C++ or Java (or Pascal, TCL, or, unfortunately, Visual*). However, C is a lot easier to pick up after getting through Python first.



      -- started with Lingo, went to Javascript, through Python and now on C. Much like traffic, the reverse commute seemed quicker.

      --
      ---- Please be nice in case my Slashdot karma ~= my real life karma.
  127. Java gives beginners lots of functionality by rcade · · Score: 1

    Give them a strongly typecasted language like java, where every little thing they do causes an error. Where they have to type in 5 lines of code to get a simple thing done.

    Java requires a basic knowledge of class structure to create "Hello World." After that, though, there are many compelling things you can do with Java that would be impossible to tackle with other languages in a beginning course.

    The graphical user interface classes in Java are simple enough for a beginner to tackle during a one-semester course. Remembering back to the time I learned the language, I thought it was immensely satisfying to create functional GUI programs in so little code.

    I don't know enough about Python to compare it to Java as a "programming for everyone" language. However, I'd hate to see the issue boil down to which language handles "Hello World" more easily.

    --
    Rogers Cadenhead (Web: http://www.cadenhead.org/workbench)
  128. Re:Why not Smalltalk? by sourcery · · Score: 1
    Smalltalk was originally designed as a language for use by children. That was the vision of Ingalls, Kay, Goldberg and the whole Xerox PARC team.

    In addition to Squeak, there are several other Smalltalk implementations available for free (some are simply free, others are free for non-commercial use, or free for educational use).

    --
    Cthulhu for President! Why settle for the lesser evil?
  129. Re:What's wrong with C/C++ and why do nerds like i by scrytch · · Score: 2

    > Most /.ers seem to dislike Visual Basic. There can only two reasons for this: a deeply rooted hate for Microsoft, and pure ignorance.

    Just cuz you say so don't make it so. Ignorance, hatred of Microsoft, and let's not forget a vast deep disdain for BASIC. Let's enumerate some of its faults:

    Overloading of = by context. Strictly speaking this wouldn't have been too bad if the use of the LET keyword was enforced, then you're simply asserting a fact. But let's be real, it's just silly as it's used now.

    VB's idea of error handling: ON ERROR GOTO

    VB has no idea of inheritance. None. I've seen some hacks to do it, and wow are they Not Fun.

    Rather laughable string functions like MIDSTR$, lacking really fundamental functions we expect to see to manipulate strings. Last I checked, there wasn't a simple index() function (or strstr() as C would call it)

    --
    I've finally had it: until slashdot gets article moderation, I am not coming back.
  130. Re:Sounds Good... and in smalltalk too! by Sir+Joseph+KCB · · Score: 1

    If Alice interests you, you might want to check out the Squeak implementation, I think it's called Wonderland. Squeak is a free smalltalk-80 (sort of) environment written in smalltalk being developed by Disney, and there is a linux port available from squeak.org. Wonderland comes with the standard image. disclaimer: I have not had a chance to mess around with either the python or squeak implementations so I don't know how they would compare

  131. You are all missing the point.... by Anonymous Coward · · Score: 0

    Hi -- I am from South Africa, so other here is my opinion at face value on US CS education -- it sounds like the US education system as a whole is not teaching people to fish any more, but rather catching their fish for them. It is not important what language you learn to program in, but rather that you learn to take real world problems, creatively find solutions and turn these solutions into algorithms and translate these algorithms into a language that best suits a particular application. I know this is the larger aspect of programming, but in essence, instead of focusing on finding a "computer language" to solve the "grasping of computer languages as a whole", rather focus on the creative problem solving and algorithm creation. If people were not grasping how to speak English in the US, would the US change the official language to French and make that compulsory as a language to understand all other languages implementation simply because it has less idiosyncrasies. But, hey, I am a South African -- what do I know...

    1. Re:You are all missing the point.... by Anonymous Coward · · Score: 0

      Hi, I am Brazilian. Hey, they invented the computers, they must know what they are doing (just kidding :-) ).
      Now, seriously, I agree with you but I think that the main question is about what language to teach first (to _kids_), and to motivate then it would have to be a simple language, with direct interaction and such... then, IF someday they really want to become a computer scientist, they would learn in university all the other languages and how to choose a suitable one, etc.

  132. Off topic, but I'm wondering . . . by Anonymous+Poodle · · Score: 1

    At what age is it *appropriate* to teach programming skills to kids? I teach 5th/6th graders, and while our curriculum does not cover programming I'm wondering if it might not be a useful way to introduce logical and critical thinking skills,as well as seeding an interest in high-tech careers.

    1. Re:Off topic, but I'm wondering . . . by ncc74656 · · Score: 1
      As I'm Scottish I don't really know how old a 5th or 6th grader is...

      Here in the US, it'd usually be ages 10-12, though there's some flexibility at either end to account for people who were either bumped forward a grade or held back a grade. (Personally, I was 9 when I started 5th grade, and there are probably more than a few other people here on /. who did the same.)

      The elementary school I was attending at the time (early 80s) didn't have any computers, but I was learning BASIC on my grandfather's TRS-80 Color Computer. A friend a couple blocks away had an Atari 400, and my parents bought a TI-99/4A halfway through 6th grade. Of those machines, the CoCo was the most powerful and flexible (especially after it was upgraded to 64K and Extended BASIC). I even started to do some really simple stuff in 6809 assembly language on it before heading overseas. With the little bit of 6809 assembly that I picked up, learning 6502 assembly on the Apple IIe that I got in 1985 was a little bit easier. Getting somewhat back on topic, I don't think you'd want to introduce newbies to programming by having them learn assembly language...but it was hella fun on the old 8-bit boxen!

      --
      20 January 2017: the End of an Error.
    2. Re:Off topic, but I'm wondering . . . by Anonymous Coward · · Score: 0

      my brother and I were taught (by our father) the elements of formal logic before we went to school. We were, largely, bored STIFF in school. On the other hand, I'm a sysadmin and researcher and he's a research engineer. We stepped into these roles easily and naturally enough. I don't think being stretched early on hurt us.

    3. Re:Off topic, but I'm wondering . . . by flyingV · · Score: 1

      I hope you don't mind if I speak from a personal perspective for a moment here: my first program was on my friend's Apple IIE in the fourth grade. In my library I found a set of tiny (45-page) books with simple BASIC programs in them and decided to try a few out one day. Now not everyone at such a young age is able to write a program, but things have changed since I was in the fourth grade (about 7 years ago). Today's children are hopefully much more eager about technology, and should be able to handle something like BASIC.

      C or C++ would definitely be too complicated for most, so I guess an interpreted language like QBASIC would be appropriate. QBASIC is more "structured" than older versions of BASIC (like GW-BASIC) and supports separate functions and subroutines (besides the GOSUB kind). And best of all, one doesn't need line numbers and GOTOs in QBASIC programs (and is encouraged to go without them).

      So to answer your question, 5th and 6th graders of today are probably more than willing to learn to write programs, and should be able to handle the task if it is introduced in the right way. They aren't too young.

    4. Re:Off topic, but I'm wondering . . . by Anonymous Coward · · Score: 0

      I'd say as early as possible. I remember after playing around with BASIC programs that would print an arbitrary string an infinite number of times or add 2 to an input, I was able to pick up algebra that much more quickly. And programming was more fun. Learning LOGO at the same time as geometry was helpful too. Programming at an early age gives more relavance to math IMO.

    5. Re:Off topic, but I'm wondering . . . by robbieduncan · · Score: 1

      As I'm Scottish I don't really know how old a 5th or 6th grader is, but at my school we started programming when we took the (optional) computing course in third year of secondary school. This is at about 15. In second year there was some really basic Logo-style stuff. I think this is too old! Programming concepts can be learnt much younger, and are becoming increasingly important. The younger you teach them, the faster they learn, and teaching good programming is so important. Start at 10.

    6. Re:Off topic, but I'm wondering . . . by mtnbkr · · Score: 1

      I was lucky enough to go to an elementary school in Tennessee that was somewhat computer savy (at least for the mid 80s and in rural Tenn). We had a few Apple IIe's. Unfortunately for most students, the only ones who got to spend any real time on the machines were the ones who scored very high on their standardized tests. Out of the whole school, only 10 of us were in that special group (we got to skip our morning class once a week). We played logic games (not computer based, the verbal and prop based ones), learned BASIC, etc. By the end of my 6th grade year (I was part of the pilot that started my 5th grade year), we had written small games in BASIC. It was only 4 pages printed (don't remember the number of lines) and full of GOTOs and other niceties, but it ran. I just wish the JrHigh and first High School I attended were as enlightened. I might have retained more. As it was, I didn't do any programming at all till my Senior year and it was no more advanced than the stuff I did in 6th grade. Oh well, now I'm a SysAdmin...life has hit rock bottom :)

      Chris

    7. Re:Off topic, but I'm wondering . . . by Cerberus7 · · Score: 1
      Incidentally, I don't think that's off-topic...

      Anyhow, from personal experience, I believe 5th grade (age 10) is a good place to start for most children, though a child should be given the choice about when and if they begin to learn programming.

      In my elementary school, the kids with the 15 highest SAT scores were started in a GT program and a computer class in 2nd grade. The GT class was an english/lit. class, and the computer class was mostly logic games and simple graphics on some old Apples. Once we hit 4th grade, the computer class was no longer available because they wanted to use it for the younger kids. During those two years that I was in that class, though, I spent time on my own learning BASIC. Once that class was not a part of my life anymore, I stopped learning programming and focused more on the things my school was teaching me. I didn't see a line of code again until 11th grade, when the first of 2 programming courses was available to me; a BASIC class. The following year was a PASCAL class.

      That's far too late, IMHO, as I look back on it all. They should've been teaching us BASIC in 2nd grade, then PASCAL in 4th grade. We probably would've gotten through C by 7th grade and been able to start doing much more advanced programming with database interraction for that "delinquency tracking system" the high school admins wanted us to write in senior year after only two months of learning PASCAL.

      Yes, kids who are really motivated and are willing to devote gobs of spare time to learning programming can do it all on their own. Others of us, though, may be interested in programming, but not enough to give up the other studies we like or sacrifice valuable childhood time (iow, playing, which is very valuable). We need a guiding force as a part of our curriculum.

      --
      I don't know about you, but my servers run on the power of cotton candy and happy thoughts. -Anonymous Coward
  133. Re:Use of beginner's language by Captain+Teflon · · Score: 1

    The language must have logic (do loops, ifelse),

    OK, this I can accept ...

    user interface (windowing, user programmable buttons), connection to a database, and it MUST include a math package of great accuracy.

    No. Each of these aspects (GUI, DB ... hi precision math?) are IMHO candidates for second phase learning. Start with the command line as interface, learn about basic disk file and filesystem operations, and learn about integers and single and double precision floating point numbers to get a basic inderstanding of computer architecture. Why on earth is hi precision math a requirement?

    None of these come close in popularity to the most widely used database and programming language - it's the Microsoft Excell spreadsheet.

    This may be true (personally I suspect there's MUCH more COBOL code around) but wide usage is no indicator of learning efficacy. Excel macros are now written in VBA which is a mishmash of quasi-OO and VB quirks which IMHO are extraordinarily ill-suited to the beginner. I've had to do occasional work on such VBA "code" written by non-programmers and it's godawful. MS Access falls into this category also.

    Yes, its true. When I need to track a mailing list, do I start a 3 year coding project with php talking to mysql with a py front end? Not on your life, I start banging data into a spreadsheet.

    Yes but the discussion is about learning to program and developing good programming understanding and habits. Banging data into a spreadsheet has nothing to do with that.


    --
    Eagles may soar, but weasels don't get sucked into jet engines.
  134. I don't think you get it by lars · · Score: 3
    Object orientation is another one of these miracle cure-all solutions that almost never work, even though no one will openly admit it. By modeling business apps as objects, you will not only lose a lot of time, but, even worse, make your applications much less maintainable. Why so? Because the complexity of business applications is in their data, and the only thing you will do by modeling business applications as object frameworks, is to replicate this complexity once more in your object classes. And then you will have an extra chunk of code to maintain, when you change your database structures. Next to your database design, your GUIs and your batches that you need to maintain, you will need to maintain the so-called business objects. These business objects "know" your data structure, and, therefore, have to be informed of changes in it. The duplication effort is ridiculous and only pays off in wasted time.

    I don't even want to attempt to try and respond in full to your entire messge, because I could easily spend hours writing a huge essay in response. I'll just focus on the part where you discuss OO, since a pet peeve of mine are all the misconceptions I see about OO, particularly on Slashdot (they seem to be less prevalent in the industry).

    Now, sorry if this comes off like a flame, but the above sounds like it's coming from someone who doesn't understand the real principles behind object oriented programming, and who does not have experience working on large-scale software projects. In my experience I have found the opposite of almost everything you say to be true. The only problem with object oriented development is that most programmers don't know how to do it properly.

    I have seen projects succed and fail, and I am quite convinced that given competent designers, using an object oriented approach is guaranteed to be more successful (in terms of time, money, and risk) in a large project than other methods of design. There is an overwhelming amount of evidence out there that this is the case. Look into some of the research. Read some of the books on software engineering. You are right that an object oriented design will increase the overall complexity of your design. This is a good thing, since it's precisely what gives object oriented designs their inherent flexibility. Flexibility is the most important benefit of an object oriented design. Another consequence of an OO design is that it will drastically decrease the complexibility of the individual and components within your system. Even on the surface this should be obvious if you think about it. Clearly object oriented models better represent their associated real-world systems than other methods like data modelling. I don't see how anyone can argue that. Now, if the inherent complexity of a system is in the overall design, that is where it should stay, is it not? Other techniques only move the complexity elsewhere, which is less natural, and therefore inevitably more expensive to maintain. You have to expend more effort to constantly differentiate between your application domain and your model since they become quite different.

    These business objects "know" your data structure, and, therefore, have to be informed of changes in it.

    NOT TRUE!!! In a proper OO design, you do not have "data structures". You have data, which is distributed throughout the objects in your system and encapsulated by those objects. But you should never have to think about data structures. I suspect you have a lot of experience with bad OO designs where a lot of data is passed around. This happens a lot in practice, but is simply poor design.

    only two reasons for this: a deeply rooted hate for Microsoft, and pure ignorance.

    Actually, in my case it simply doesn't provide the flexibility I need to design complex, large-scale software systems. VB has it's place. I think it is a very good tool for prototyping, and in many cases is appropriate for develping the GUI front-end of an application. I don't use it myself, as I prefer other tools for those purposes, but I can see where it would be useful.

    You may, for example, ask most classes, in code, what their properties are, what their methods are, and what their parent class is, and so on. C/C++ not only lack self-knowledge

    You don't understand; VB is more of a high-level, dynamically typed scripting language. That's why it can do these things. One can debate the merits of static typing vs. dynamic typing, C++ vs. Smalltalk, etc. all day, however with a proper OO design, you should never need to ask a class what it's properties or methods are. There are rare cases where you might want to know if a class supports a certain interface, which is what dynamic_cast is for in C++. But by and large you're doing something wrong if you ever need these capabilities in C++.

    1. Re:I don't think you get it by SuperKendall · · Score: 1

      Object Frameworks DO KNOW THE DATA STRUCTURE of the data they manipulate. That's impossible to deny. For a starters, object frameworks need to store their data; so-called persistency. But now, we're getting to the point. If you want to store your objects, you have no more than two options.

      The frameworks do not nesscarily have to know. Consider a framework in which buisiness objects are analysed at runtime and form-based guis are built around them - for a buisiness object with one address, you might present a form with all the address fields. For an object with more than one address, you might present a tabbed pane of all the addresses...


      The result is that the database structure is scattered in your object model. As a consequence, you cannot alter the database structure without breaking the object model. For example, if a customer can suddenly have more addresses instead of one, the customer object will have read its address from a different table: it's, therefore, broken.


      Of course, you will probably store things in a database (unless you need to share/translate the objects with other more hostile parts of the enterprise, in which case you might select something like XML. You ever try and read customer records directly from a really complex billing database?)

      If you've designed the system right, you will have only one area to change - say an Object->Relational mapping layer, or perhaps a class somewhere. But, it sure beats hunting down SQL scattered around thousands of C++ classes or C files (which I have seen MANY TIMES).


      I can only conclude that people who think object oriented have different applications in mind than the 95% of the applications around, in production with today's companies. They live in a world that doesn't exist, and try to impose a view on software development that has failed for the last 15 years. Everybody knows it, and the emperor has no clothes.


      Apart from having your percentages reversed, you are exactly correct! I have found great success with the projects I've been on, but I've lucked out and worked with very talented people everywhere I've gone. I have also seen C++ and indeed OO projects go awry, but not the ones I've been on... and I've been working on enterprise software the whole time.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    2. Re:I don't think you get it by aUser · · Score: 2

      Object Frameworks DO KNOW THE DATA STRUCTURE of the data they manipulate. That's impossible to deny. For a starters, object frameworks need to store their data; so-called persistency. But now, we're getting to the point. If you want to store your objects, you have no more than two options.

      First, you can serialize your objects into some horrible flat, binary, or for the sake of the argument, XML files. Anybody who understands business applications will be horrified, immediately, at the consequences:
      (1) Only the framework that created the objects can properly read and write to the files;
      (2) the files enforce a primary access order. For example, if you store your customer objects, with their orders and orderlines, you can perfectly well select on customer and its data, but you have to traverse every single customer to add up the number of orders for a particular product. This is a complete denial of Codd, and all advances in databases since 1973. People, who create this kind of crappy applications, with this kind of crappy data storage, should go back to school at once. As a matter of fact, this is how the dogmatic creators of Java betray themselves: object orientation at every price. How do they solve the problems of databases? Well, with the ridiculous idea of "serializable objects".

      The second option is to access a relational database. Anybody with anything like half a brain will choose this option. This is the only way to share data across a large number of users without imposing a particular access strategy to the data: The guy putting in the orders can access the data per customer, and the guy handling the inventory can access the data per product, without either of them being penalised for doing so.

      The result is that the database structure is scattered in your object model. As a consequence, you cannot alter the database structure without breaking the object model. For example, if a customer can suddenly have more addresses instead of one, the customer object will have read its address from a different table: it's, therefore, broken.

      I can only conclude that people who think object oriented have different applications in mind than the 95% of the applications around, in production with today's companies. They live in a world that doesn't exist, and try to impose a view on software development that has failed for the last 15 years. Everybody knows it, and the emperor has no clothes.

  135. X? Java by Anonymous Coward · · Score: 0

    Do you really want to inflict X on beginners? The ONLY graphical programming I've done is w/ java.awt and java.awt.event (that's the 1.1.x). I didn't find it that hard, but my prof said that the java.awt is a LOT easier than other systems he's used (he said the same about the java.lang.Thread class). From what I hear about Xlib/Xt, Java would be a better choice for a platform independent graphics API.

    1. Re:X? Java by Stonehand · · Score: 1

      If you don't mind tying yourself down to X, XForms ain't bad at all -- it includes a good graphical forms layout manager, and lets you specify callbacks and such. Plus, it's pure C.

      Dunno 'bout you, but I found it much easier to use than the AWT's event model. That's largely because I feel a tad too constrained by the OO-ness of Java...

      --
      Only the dead have seen the end of war.
  136. 3D engine as _first_ project?! by Anonymous Coward · · Score: 0

    I don't know how much of that document you guys read (or if you read it at all), but they said that they were planning to create a 3D ENGINE, or at least use some kind of API developed by the project. So now we're going to have a bunch of high schoolers (or whatever) running around claiming that they've written games better than quake in a language written for newbies, without even understanding the inner nuts and bolts of the process which goes on. Programming was not meant to be easy or 'accessable' to everyone. If it was, then just anyone would be doing it right now. I started programming logo in the 2nd grade, and when i was 11 took an all day (excellent) course (9am-9pm) on qbasic for two weeks called ACE. Then my middle school forced us to learn pascal, and after a year of that, i found how much better C was and stuck with that for a year. In the years following, I learned visual basic, c++, java, and perl, and never found them 'hard' to learn. I suppose the bottom line is that I clambered over a bunch of languages in the beginning that were useless. I really much would have spent the time I spent learning logo and qbasic on learning c++ and java. In other words, I would rather have spent 5 years (or whatever) studying c++ and struggling, than wasting 5 years on a bunch of other programming lanugages that were useless (logo, qbasic, etc...). And, now with the advent of this 'new easy language', I think they're simply reinventing the wheel. Qbasic is plenty easy enough for anyone. So where does my frustrations with the 3d engine come into this? It's as if they're trying to use it as a peice of candy to get kids to program! I'm sorry to say it, but programming stems from the intellectual interest in logic and science, and soforth. Not everyone likes it! Programming is not for everyone, as is linux. Linux was not meant for the 'average user', it is meant for those 'few good men' who need its power and can understand it properly, and have the desire to use it. You must endure the difficulties and the struggles that occur with languages like C when you first start. We can't baby our future programmers. that's all folks.

  137. Agreed. (was:Sounds Good...) by theyman · · Score: 2

    The most important thing to learn from a first language is coding style. *grin* You can code dirty later, but you should know how to code clean.

    Most languages have a similar underlying way of looking at the world. Once you've got that you can twig another languages syntax easier, because you know what you're looking for, IMO.
    £0.02

    --
    Well, well, well; three holes in the ground...
  138. Re:Programming Not Appropriate as Part of High Sch by margaret · · Score: 1
    Sure it is!

    But computer programming is strictly a vocational topic, much like nursing, accounting, etc. and has no real place in a basic college prep high school program.

    I disagree. Computer programming doesn't have to be any more "vocational" than science, math or writing. All of these subjects can lead to careers, yet no one will argue that they shouldn't be taught to high school students. And computer skill is becoming more of a "basic" skill as time goes on. I took several programming classes in high school (BASIC and pascal). Although I enjoyed these classes and seemed to be good at it, I chose science/medicine as my vocation. I am, however, grateful to have had experience with programming, and I still use the skills I learned to this day.

    In any case does anyone think that a high school can teach the real meat of computer programming? Tail recursion? Hash Tables? Data Modelling? Not very likely, and without these concepts you are wasting your time.

    That's not the point. The point is to expose students to programming, to teach them how to think in a different way, and for them to see if they think it is something they would want to pursue further. For me at least, the most important thing I learned is how to think logically. I think this helped me a lot in math and science and even in seemingly unrealated areas like comparative literature! Plus it helped me pick up other computer related things like html and javascript, but that's secondary.

    The point I'm trying to make is that teaching programming can be valuable as more than a vocational tool. At least is was to me.

  139. Re:Python use in the market by scrytch · · Score: 2

    Dude... woefully false. That's all I have to say. Yahoo's web server is apache, which is written in C, so sorry.

    --
    I've finally had it: until slashdot gets article moderation, I am not coming back.
  140. Why are you teaching them programming? by ryanr · · Score: 1

    As with anything you try to accomplish, you have to know what your goal is. Is it:

    1.Teaching students a programming language to get them used to programming constructs, with an eye towards them being able to pick up other programming languages?
    2.Teaching students a language that they can write useful programs in from scratch?
    3.Teaching students programming so that they can get jobs as commercial programmers?

    I should start out by saying that I know nothing about Python. I've done C, C++, Scheme, Fortran, BASIC, Pascal, Modula2, perl, sh, and probably others I've forgotten about.

    If the goal is #1, then any of the simpler, syntactically consistent languages are a good choice. If Python was designed with beginners in mind, it may be useful for that.

    If the goal is #2, then there is a potential problem. Any language, no matter how simple, start to get ugly when you have to interact with the rest of the world. By that, I mean the Windows GUI, socket code, X, real-world file formats, etc... For me, the things that makes a language interesting are the add-ons available, i.e. libs, free code, examples, ability to act as glue, do system calls, etc.. Python might be great for that, I don't know. But the point is, if that is the goal, you can probably kiss a lot of the simplicity goodbye. Further, if writing glue-type programs is the primary goal, then perl or C might be better, because of the vast number of add-ons.

    If the goal is #3, well then they should probably just learn C. If you think the existing code base of C is a problem, then yes this feeds it. It is a market reality, though. Note that doing #1 as a way to get to #3 might be a very valid path.

    My feelings? If the kid loves programming, it doesn't matter what language they start with. They'll pick their own language(s) as needed. Do some studies, and see what language tends to spark an interest in kids.

    If you're just trying to get them a marketable skill, teach 'em C, and give them the certificate that says they can program. It will be as useful as the other certifications out there.

    1. Re:Why are you teaching them programming? by ryanr · · Score: 1

      I'm glad to hear that it's good for a lot of the things I find important. I will most likely check it out.

      I'm not surprised that it doesn't have as many add-ons as perl. I don't really know of a language that does... at least, not as well organized as the perl ones so that you would know.

      As for the simplicity question.. My point is that if you take an overly complex set of functions, you can't simply make them simpler with a set of glue code, not without losing functionality. For example, Windows GUI programming is nasty. MS released a set of classes to help, which makes it less nasty. It also lessens the ability to futz with the details. It's messy because of callbacks, type conversions, complex data structures, etc...

      Python wouldn't simply that significantly. It's not Pythons' fault.

      I also don't think number 3 was one of the intended goals. That leaves #1, #2, and whetever options I didn't think of. If #1 or #2 are close to the mark, then Python sounds like it could be a reasonable choice.

      It's not

  141. 3D engine as _first_ project?! by Anonymous Coward · · Score: 0

    I don't know how much of that document you guys read (or if you read it at all), but they said that they were planning to create a 3D ENGINE, or at least use some kind of API developed by the project. So now we're going to have a bunch of high schoolers (or whatever) running around claiming that they've written games better than quake in a language written for newbies, without even understanding the inner nuts and bolts of the process which goes on.
    Programming was not meant to be easy or 'accessable' to everyone. If it was, then just anyone would be doing it right now. I started programming logo in the 2nd grade, and when i was 11 took an all day (excellent) course (9am-9pm) on qbasic for two weeks called ACE. Then my middle school forced us to learn pascal, and after a year of that, i found how much better C was and stuck with that for a year. In the years following, I learned visual basic, c++, java, and perl, and never found them 'hard' to learn.
    I suppose the bottom line is that I clambered over a bunch of languages in the beginning that were useless. I really much would have spent the time I spent learning logo and qbasic on learning c++ and java. In other words, I would rather have spent 5 years (or whatever) studying c++ and struggling, than wasting 5 years on a bunch of other programming lanugages that were useless (logo, qbasic, etc...). And, now with the advent of this 'new easy language', I think they're simply reinventing the wheel. Qbasic is plenty easy enough for anyone.
    So where does my frustrations with the 3d engine come into this? It's as if they're trying to use it as a peice of candy to get kids to program! I'm sorry to say it, but programming stems from the intellectual interest in logic and science, and soforth. Not everyone likes it!
    Programming is not for everyone, as is linux. Linux was not meant for the 'average user', it is meant for those 'few good men' who need its power and can understand it properly, and have the desire to use it.
    You must endure the difficulties and the struggles that occur with languages like C when you first start. We can't baby our future programmers.
    that's all folks.

  142. Use of beginner's language by Anonymous Coward · · Score: 0
    The requirements of a beginner's language are the same as for a business programmer's language.

    The language must have logic (do loops, ifelse), user interface (windowing, user programmable buttons), connection to a database, and it MUST include a math package of great accuracy.

    Beginners can't, and business users don't have time for the UNIX way of doing things. It must all be there.

    Look at the packages that have succeeded. DbaseIII and all of its many clones, Paradox procedural(DOS). Paradox object (Win) was a miserable failure because nobody could get the hang of it. Turbo Pascal wasn't very popular in business because it required too much cobbling.

    None of these come close in popularity to the most widely used database and programming language - it's the Microsoft Excell spreadsheet. Yes, its true. When I need to track a mailing list, do I start a 3 year coding project with php talking to mysql with a py front end? Not on your life, I start banging data into a spreadsheet.

    Think about it.

  143. but why not Perl? by TheGeek · · Score: 1
    I still think (I'm biased here since Perl is just about the only language I know well) that Perl is an excellent choice for teaching beginners. There is no need to start off day 1 with pattern matching and obfuscated Perl, just some nice simple stuff, some nice clean subroutine ideas and they're off writing CGI scripts for their Geocities website :)

    TheGeek
    http://www.geekrights.org

    --

    TheGeek
    http://www.geekrights.org
    Kill the monkey
  144. Re:Languages vs. Programming Languages by Woodlark · · Score: 1

    Ahh, the bubble could have used some bursting. Thanks for the tips, and the books are definitely going onto my reading list. Thanks again!
    Droit devant soi on ne peut pas aller bien loin...

    --
    Droit devant soi on ne peut pas aller bien loin...
    Straight ahead of him, nobody can go very far... -- Le P
  145. Programming does not require extra intelligence by Anonymous Coward · · Score: 0

    Programming does not require extra intelligence, at least according to Psycologists. Just to prove the point (and w/o mentioning names) some of the best programmers I've known are just plain dumb and naive in many other aspects of life. This is not about intelligence or I.Q.. It's about capabilities and tendencies of reasoning. It is well known that some people are capable of reasoning using "big pictures"; they can't handle small details at once. On the other hand, there are others who work better from a bottom-up approach. Computer Scientists and many Mathematicians falls into another category in which the individual is capable of doing a sort of "multi-dimensional" reasoning where they are capable of going back and forth from top to bottom at multiple angles or "views" of the problem at hand. I cannot remember the names of these "reasoning" categories, but somewhere I read that only 1 out 4 (or 5?), is apt to do the last reasoning scheme I mentioned (perhaps was in Scientific American or on a ACM magazine-can someone give me a hand on this one:)

    These different modes of reasoning have no direct dependency with the individual's intelligence, and they appear on individuals working in disparate activities from Math to Business to Music. In fact, "multidimensional reasoning" is not an strict requirement for doing programming at all; it just eases the learning process. An individual's intelligence cannot be measured just based on his/her reasoning mode, but on many other factors. It's not as simple as "I program -> I'm smarter". It doesn't work that way. At least that's what I learn in my Psycology courses (unless of course, Psycology is wrong, and CS intuitive pride is right - just kidding;)

    Luis Espinal.

  146. Delighted! by gwolf · · Score: 1

    I worked at a school for over two years recently, as a coordinator for everything related with computers. We had pretty decent machines, and I was eager to start teaching the kids computing... What goes on inside, and how could they make it. Well, the principals didn't like it - Nor the teachers, who had NO programming experience :(

    After a lot of headaches, I gave up and we taught, over and over again, Office and Internet. :(

    The saddest thing is that 10 years ago kids had much simpler machines, and they DID learn programming - At least Logo (though it may seem useless, as a previous poster noted it, it helps them understand the principles of programming - Think about it, a structured, procedural language, with most bells and whistles you could ask for 10 years ago... With attention-drawing graphics... A hell of a language, IMHO, though not a general-purpose language).

    The best of lucks with the project!

  147. Re:Sigh. More ill-informed bigotry towards VB by Anonymous Coward · · Score: 0

    VB is a compromise that works fine for typical custom apps that manages typical business situations that you will find in the average company. I may remind you of the fact that 95% of the man-hours spent on programming are indeed in this kind of projects. When you use VB for this kind of apps, you can't beat its productivity. Java is a radical dictat consisting of number of irrelevant dogmas about programming, that hold true for a limited number of situations, but mostly not in the situations mentioned above. This langguage was invented by people who have never set foot in the offices of an average company, who are trying to force people around the world to waste substantial amounts of time, by raising issues and conditions that hardly ever apply.

  148. Re:Syntax matters. by Black+Perl · · Score: 1
    No kidding! I have several Perl developers working for me, and the junior ones are *always* making mistakes like this:

    {
    print This line prints
    END_PRINT
    }

    and wondering why it doesn't work correctly. (For those who aren't familiar with Perl, the above is called a "here document" and the END_PRINT is supposed to start in the first column.) It's the only construct in Perl where whitespace makes a difference.

    I can't imagine what kind of headaches I'd have if I had them programming in Python!

    --
    bp
  149. Game Over: JavaScript Wins by Baldrson · · Score: 1
    Sorry, folks. Computer Programming for Everyone has already arrived and its name is "JavaScript".

    The case is air-tight:

    JavaScript is the fastest growing programming language (see table below).

    The product of JavaScript's market share times its growth rate is the highest of any language. (see table below).

    JavaScript source code is inherently "open" for "Everyone" browsing the web. "Everyone" can learn by example at will.

    JavaScript is the most widely deployed interpreter. "Everyone" has a web browser.

    JavaScript's dynamic features, including functions as first class objects with slots, put it in the same level of power as systems like CLOS. CLOS is, arguably, at least as powerful and general as Python. The fact that an appropriate, CLOS-like framework has not yet been widely deployed for JavaScript merely indicates developers are too distracted by immediate profit opportunities to think straight about JavaScript. This is a temporary stupor.

    Back sometime in June, Randall J. Burns took Ted Shieh's figures, later reported by Larry Wall and computed growth rate in demand. We get an interesting picture:

    C++.....Java......VB....Cobol....Perl...JavaScript ...Smalltalk...Python
    -14%....+17%......-4%...-43%.....+18....+51%...... ...+1%.........+23%

    When multiplied by the approximate market share:
    C++.....Java......VB....Cobol....Perl...JavaScript ...Smalltalk...Python
    40%.....25%.......10%...3 1/2%...+10....+10%.........1%..........1/2%

    We get an interesting future dominance metric:
    C++.....Java......VB....Cobol....Perl...JavaScript ...Smalltalk...Python
    -560....340.......-40...-111.....180....510....... ...1...........12

  150. PYTHON IS A BEGINNER'S LANGUAGE! by imneuromancer · · Score: 1

    Sorry to shout, but this needed to be said: Python was orginally designed to be a beginner's scripting langauge that scaled up to other (real world) tasks. Actually, Guido says it best:

    http://www.python.org/cgi-bin/faqw.py?req=search&q uery=history&querytype=an ykeywords&casefold=yes

    So yeah, it wasn't intended to be SOLELY a learning language, but it had enough of Guido's 'learning language' ABC background to make it a synthesis of ease and power. What use, says he, of a leanring langauge that you immediately have to drop using once you understand it?

    So Python IS meant to be a learning language...

    1. Re:PYTHON IS A BEGINNER'S LANGUAGE! by Black+Perl · · Score: 1

      What use, says he, of a leanring langauge that you immediately have to drop using once you understand it?


      I disagree. I think that learning more than one programming language helps one distinguish the concepts from the constructs. Rather than rote memorization of keywords and how they work, you start thinking more abstractly about what you want to accomplish, and _then_ how to implement it. A much better understanding of concepts evolves, particularly for those who haven't had a formal CS education.

      --
      bp
  151. Re:Teach SCHEME (no let's not) by Anonymous Coward · · Score: 0

    I was curious so I looked in on some Scheme sites. To my untrained eye, Scheme looks like LISP. Lisp is a huge pain to program in, no matter how elegant your parentheses matching editor is. The syntax is just too awkward and unforgiving for a rank newbie (dumb) programmer. Maybe it's fine for an MIT first year student, but that's not who this whole article is about. Remember: high school.

  152. Oops, that didn't come out right by Black+Perl · · Score: 1

    The code sample looked good in the preview, but didn't display correctly. Let me try again:

    # example of bad code
    {
    print<<END_PRINT;
    This line prints
    END_PRINT
    }

    --
    bp
  153. Two possible language candidates by Anonymous Coward · · Score: 0

    OK. Let's add javascript and rebol to the list of languages for high school students to learn, too.

  154. Analogies by kuroineko · · Score: 1

    I believe that, in general, this is a good idea.
    However, the example with an 'ordinary' literacy
    is not that good. I'd expand the analogy from
    sesquiped's comment. Think of it as car driving,
    not car engineering. Billions of people can drive
    a car (I can't :), but there's still one and only
    Michael Schumacher.
    Same here. Maybe some day they'll even start to
    issue 'computer licenses' :) Nothing to worry about for pro's
    just less plain lamers on the highway. Speed up! :)

    --
    KuroiNeko
  155. Re:Let's have a poll by PrinceOfChaos · · Score: 1

    I have experience with several of the languages listed above: Pascal, Basic, C, C++ and also Perl,Java and x86 assembler. I started programming at about 10 with Pascal and I'm now 17. At HS's CS classes they were teaching programming using Pascal and I would say it's well suited to learning because of clear syntax and pretty good object-oriented features.

    Perl/C/C++ are not suited for learning but rather for the real work.

    Python's syntax is clear but I don't think it would be _really_ easy to go from Python to more traditional languages.

  156. pascal... pah! by The_Jazzman · · Score: 1

    Hey all,

    I'm currently studying computer science at college and we have to learn Pascal. I can state that I absolutly *hate* the language just for it's incosistancy. People state that the language is highly structured and teaches how to write programs with a structure. That's true, but then why are there so many shortcuts and why are the if statements quite so horrible ?

    Please don't misunderstand me, there are quite a few people in my class who have never programmed before and are finding Pascal to be difficult but learnable. If we were to be taught C or C++ then I can imagine the most of the class falling apart.

    Unfortunatly, I've never seen what Python code looks like, but if it looks better than Pascals, then I say go for it - we can get on to the more complicated stuff later.

  157. What we do at the University of Melbourne by petdr · · Score: 1
    A first programming course should be about algorithms, functional decomposition, abstract data types, recursion, etc. etc. In other words all the concepts of computer science that are the same *NO* matter what language you are using.

    So your the first language taught should allow the student easy access to these concepts without having to deal with the idiosyncracies of explicit memory management, the distinction of pass by reference and pass by value, pointers and so on.

    That is why here we teach Haskell as our first language. We believe that it allows students to grasp these concepts without getting the dreaded seg fault.

    It also helps ensure that when students leave this University they will have learnt to program an imperative language (C), functional (Haskell), OO (C++) and logical (Prolog/Mercury), and will be able to choose the correct tool for the job.

    Personally after seeing trees implemented in Haskell after learning how to implement them in C converted me to functional programming.

  158. ABC's origins by AMK · · Score: 2
    Correction: ABC was a language designed by Steven Pemberton, on which GvR worked as an implementor. ABC's original goal was as a teaching language, and apparently they did actual human-factors research before creating the language, leading to the language's use of whitespace, among other things.

    One lesson GvR took away from ABC was the importance of OS interfaces; in ABC you couldn't walk through directories or open files, though it provided persistent variable storage that was an abstraction on top of files. This made ABC a nice sandbox to play in, but you couldn't get out of it, and ultimately this proved too confining.

    1. Re:ABC's origins by Jay+Maynard · · Score: 1
      Mea culpa... They say the memory is the second thing to go. Nobody can seem to remember the first.


      OTOH, GvR's connection with ABC shows in Python, and that can only help in teaching...
      --

      --
      Disinfect the GNU General Public Virus!
  159. Everyone Programming? by dsaxena · · Score: 1
    I think it's important that we teach kids to be more comfortable with computers at a younger age, so that kids can determine on their own whether or not they are interested in learning more about them by pursueing programming languages and such, but it's wrong to shove the technology down kid's throats. Someone brought up the car analogy already and I will use it again. I know nothing when it comes to fixing my car. I don't even change my own oil. Does that make me less empowered? I don't think so. There are only 24 hours a day, 6-8 of which I like to spend sleeping, the rest I tend to spend on things I am interested in. Generally this means hacking away in fron of my computer. I do this because it's what I like to do. Some people choose to be car mechanics, other programmers...it's called choosing one's own destiny

    I have no problem with forcing kids to take one or two intro programming classes to get some of them interested, but after that point, it should be each child's choice whether or not they pursue the technology further.

    It seems that we geeks tend to forget as a community that there are other things that are other professions that are just as worthwile as sitting in front of a computer and hcaking.


    Deepak Saxena
    Project Director, Linux Demo Day '99

    --
    Deepak Saxena
    "Computers are useless, they can only give you answers" - Picasso
  160. C and X by Anonymous Coward · · Score: 0

    I think that they should get Unix/GNU/Linux/whatever boxes at high schools. These do not prevent learning in an attempt at ease, and students could have far more controls. Graphics could be made fairly platform independent with X.

  161. C is just a higher level assembler, (sorry) by Anonymous Coward · · Score: 0

    C is about the lowest you can go short of asm.

    Pointers, memory management, buffer over runs, pointers, just scream low level to me.

    Compare the output of a C compiler against the C source and you will see how closely the two match. (A decent compiler should be able to output asm with the original C source side by side.)


    --Simon who doesn't have his passwd handy.

    1. Re:C is just a higher level assembler, (sorry) by Anonymous Coward · · Score: 0

      Well, I guess every language is just a higher level assembler if you look at it like that :)

      If you'd ever had to write production code in assembler, you'd see the 'higher level' notions in C quickly enough. Heck, using a pointer as opposed to an indirect addressing mode, and not needing to constantly keep track of how many spare accumulators you have which can do barrel shifts as well as ALU ops is a minor bonus. The main advantage is portability though -- you don't need to 'learn' a new architecture every time you switch chips; just get a new compiler.

  162. Re:Python use in the market by William+Tanksley · · Score: 1

    Not Yahoo -- you're probably thinking of Infoseek.

  163. Ahhh, Pascal? by mabs · · Score: 1


    I'm not sure about the rest of the world, but yer 12 students, and students doing first time programming stuff over here in Aus. are taught pascal, uni is C++/Java...
    Well, at least that's how was when I was at school a few years ago....

    --
    VK3TST
    -- "People aren't stupid. Usually." -- jd
  164. Re:You can't set a standard here. by Anonymous Coward · · Score: 0

    My university teaches what they call a "suedo" code (basically a made up and non-compileable (well... there do exist compilers for it now.. =) ) language just for the cs 1301 students to learn how to think algorithmically and not get so focused on syntax issues. There is a small group that also take 1301 with scheme (me). This is an experimental class to see who does better in the end. The suedo'rs or the scheme'rs. I enjoy scheme as a functional language that forces me to think about the problem in a way that is totally new to me. My vote goes for scheme as the first language.. but i really dont think it matters too much. Fish

  165. CS High School Students + Python = False Hope by nachoman · · Score: 1

    "C++ is just too difficult for first-year CS students in high school" I don't fully understand the concept of a CS student in high school. But you have to admit that if you want to call yourself a CS student, then you will have to learn how to do some real programming. You can't lead students into a false hope that a CS job consists of simple Python scripting. Currently I am in 2nd year CS and know of many people who are in CS and really shouldn't be. They are there because jobs and because they got good marks doing basically nothing in programming courses in high school. I think that they realized this, but I don't think python is the answer. C and C++ should be taught early, even if they have to use simplified libraries to do things. If we are not careful, we will create a generation of Computer Science students that will (if they don't fail miserably when it gets hard) have the degree but not really have the skill nor desire for what they are doing

  166. Re:BASIC? by Profound · · Score: 1

    I goto a

    Evidence why that's not such a good idea!

  167. People should check out Pike by Anonymous Coward · · Score: 0
    I read Guido's essay and was genuinely interested in the chart in there rating usability, teachability, expressiveness, etc of many languages. Python gave probably the best showing and I think it was rather fair. However...I think if Pike were in there it would fare very well. Pike is at http://pike.idonex.se.

    People should check it out...

    1. Re:People should check out Pike by Anonymous Coward · · Score: 0
      No doubt!

      It's faster, has C-like syntax, and has more understandable OO. It's amazing how often it is not mentioned. heh!

  168. Re:Let's have a poll by Anonymous Coward · · Score: 0
    I didn't start coding until I was 17 (which puts me about 15 years behind most slashdotters, it seems ;), but the first language I learned was Perl. Just picked up the llama book and did it.

    The thing about Perl is that it doesn't HAVE to be a complex language at all. You don't need to bother with classes if you don't want to, variable assignment is simple, arrays and hashes just make sense and file manipulation is easy. When most first programming classes basically deal with string and number manipulation and basic logic. I think Perl is perfect for that sort of thing.

    But then I live in Kentucky, where most HS grads can't even read "big" words (like "cat"), so I doubt trying to teach programming is a good idea here...

  169. Re:OO is fundamentally braindamaged by Anonymous Coward · · Score: 0

    If you are relying on a tool/methodology such as UML then yes, you are damaging the ability of OO to be as abstract and versatile as possible. Adding new "attributes" is far from difficult and easily modelled if you step away from canned methodologies created by academics. If you truly understand OO and apply it correctly it can do wonderous things - regardless of the language. There are concepts that are difficult to implement in C++ that are much simpler in an interpreted language ( Smalltalk, Java, Eiffel ) but not impossible. The problem is that people are taught to use the language and never taught how to THINK in OO terms. Without that basic ability one can only be a marginal OO developer, at the very best. People think in OO terms all their lives.. it isn't that difficult to apply it programmatically and develop some workable, efficient models. LM.

  170. Re:Let's have a poll by Anonymous Coward · · Score: 0

    The obvious language left out of this list is REXX. To quote the first line of the Preface of the Rexx "Bible": "The REXX Programming Language has been designed with just one objective; it has been designed to make programming easier..." Rexx has no datatypes, no declarations of variables, decimal arithmetic, no reserved words, no superflous punctuation. It is simple to read, yet powerful enough for most applications.

  171. While C++ is too difficult for beginners ... by LizardKing · · Score: 2

    ... C isn't. While I don't want to knock Python, I feel it is more useful for a beginner to learn a fairly low level language like C first.

    The problem I have noticed with CS graduates who have learnt high level langauges to the exclusion of all else, is that they can't then grasp `real world' programming concepts. This may only be a problem afflicting British CS grads, but it is becoming increasingly hard to find good staff.

    Programming isn't easy, although languages like Perl and Python can make certain tasks much easier than they were with C. The problem is making the distinction between tasks that should be tackled with tools like Python, and those that should be tackled with C or C++.

    Perhaps it is time that CS degrees were split into systems programming courses and scripting based ones. There is a massive demand for programmers who will rarely need to touch compiled languages like C (with its memory allocation and lack of inbuilt dynamic types). So differentiating courses this way could allow a student to focus on one of these two distinct areas.

    Or maybe this is just a refelction of my disgust at the low skillsets of CS grads being produced nowadays ...

    Chris Wareham

    1. Re:While C++ is too difficult for beginners ... by aidan+skinner · · Score: 1

      (User Info) http://killingmiranda.pair.com/

      Oi! Gofffik! Morrrrttttiiiissssshhhhhaaaa

      Sorry, dont know what came over me there... anyway:

      The problem I have noticed with CS graduates who have learnt high level langauges to the exclusion of all else, is that they can't then grasp `real world' programming concepts. This may only be a problem afflicting British CS grads, but it is

      Surely every CS grad will have had to do some assembler at some point? You do it in 1st year here (University of Glasgow, officially best CS dept in the UK), and 2nd year....

      C is a shit language, that requires you to do too much at a low level, in an unsafe manner, that could be better abstracted away.

      There's no inherent difference between a compiled language and an interpreted language (and where to just-in-time compiled languages like Perl fit into this world view?), there are C interpreters and Basic compilers.

      I've got an obvious choice for introducing people to programming, but it's an obvious choice for doing most programming in and i don't want to get into a language flame war.

      - Aidan

    2. Re:While C++ is too difficult for beginners ... by archfiend · · Score: 1

      IMO the big advantage of Python as a teaching language is that it has good support for OO design/ coding. I agree that CS courses should be teaching students what tools (ie. languages) are available and when it is appropriate to use them, but you have to learn to crawl before you can walk. My experience is that students will tend to find their own level. I think there is an advantage to teaching students in a language they are unlikely to have learned on their own -- you can use it as an excuse to teach them good habits. archie (Or maybe everyone should just be taught M68000 as a good solid baseline ;-) It never did me any harm! )

    3. Re:While C++ is too difficult for beginners ... by SimonK · · Score: 1

      Its a shame this article doesn't say what "real world programming concepts" people need to master.

      Its my experience that many otherwise very competent programmers have huge holes in their knowledge, and the primary one seems to be ability to do decent abstract design. Teaching people C emphatically won't help with that. Even if you don't like OO, something like Ada or Standard ML is going to be a lot more use that C.

      If the above is a reference to a lack of knowledge about real algorithm design and implementation, and an overreliance on libraries, then I agree. People need to learn that stuff, or they'll get stuck when the library of choice is missing the function they want. Nonetheless, if you have libraries, you should use them. There's nothing more irritating than programmers who faff around reimplementing stuff thats already in the standard libraries for "efficiency reasons" (not that they've profiled it or anything).

  172. Start with a structured language by calibanDNS · · Score: 1

    Personally, I started my programming experience with C during high school (unless you count programming TI calculaors), and I found it to be an excellent language for a beginner. I think a structured programming language is best to start out with, and OOP should probably saved for the end of the students' high school career or the beginning of their college education. C is a great structured language for beginners because it isn't hard to grasp, allows for low-level programming, and makes the move to OOP in C++ fairly simple.

    Also, Several people have mentioned that the quality of CS educations has gone down, producing students that can't grasp 'real world' concepts. At my school (Winthrop Univeristy) The courses tend to address real world problems as well as theoretical ones, and we have several one hour credit courses that specialize in everything from Ada to COBOL (which isn't THAT bad of a language once you get into it).

    ~Caliban

  173. Re:Teach SCHEME by jjoyce · · Score: 1
    Amen. The syntax of scheme is super easy.

    --

  174. Great idea by ForceOfWill · · Score: 1

    I love the idea of computer users learning to program. I don't know how interested I would be in computers if I couldn't program them. Programming is my favorite part of computing, but Winblows takes that away from people by completely shutting them out from the way the computer really works. This is why I loath it. I like mucking around in C++ and assembly (even though Linux doesn't really let me do anything in assembly :-(, and DOS crashes half the time :-/)

    I haven't really seen anything done in Python yet, so I guess I'll have to search for it. I started out in QBasic (poor me), then moved on up to C++ once I figured out how to do graphics with it (which was mainly what I was using QB for anyway). I took one look at VB and recoiled in disgust.

    Time to go Python hunting...

    --

    --
    Seeing is believing; You wouldn't have seen it if you didn't believe it.
  175. Re:C is not a higher level assembler by Simon · · Score: 1

    That's an interesting observation, and you are right. But in C once you've overflowed the stack or a buffer a few times you quickly learn that you certainly can manipulate code as data. Especially when you don't want to!

    But C really is a higher level asm. Every construct and feature in C maps very closely to an asm analogy(? you know what I'm trying to say?). While features like type checking, array bounds checks, garbage collection and virtual functions and classes from high level languages don't really match anything in the asm world at all.

    I guess it's more a question of how much asm is needed per statement in a high level language than anything else...

  176. Underestimation by Anonymous Coward · · Score: 0

    Seems to me that people who can program always underestimate people that currently cannot program, and that people that cannot program think that programming is very hard (probably because the people that can program like to let them believe that). Imo, programming isn't more difficult than learning a foreign language, solving mathematical problems or filling out a taxform. In fact, it's easier. The thing is, you have to give people the confidence that they can program, that it's easy, that anyone can learn it, and that it is enjoyable, instead of starting out negatively by saying "let's take a simple programming language, because programming is very hard as it is". What's also needed is a good stable environment in which the programming is done. Imo most of the difficulties faced have nothing to do with the actual programming or problem solving, but more with the idiosyncracies of the operating system, the network, and the programming environment. Loz

  177. Re:Off topic... It's NOT offtopic -Mong by mong · · Score: 1

    Agreed, at my University, we teache HOW to program, as in, how to write decent Pseudo Code, how to develop decent test strategies. It's not until about 5 sessions into the course that we actually teach HOW to code a language. In this case, we use Pascal (Borland). It's fairly straightforward, and has an introduction to C-like syntax (Damn that ";"!). Okay, so Uni is more advanced than CS - I'm assuming CS is for 16+ ?

    In a time where programming is becoming "dumbed down", I think we need to maintain an understanding in interested youngsters, of the core traditions/ideals of writing good programs, with good code - irrelvant of the language used.

    I mean, I use FrontPage here (in MS hell) and even HTML creation has become "dumbed down". It's annoying that users are becoming less empowered, more disenfranchised...

    And why not do very basic stuff with a "learning" language such as Pascal, Basic or Python? Once basic proncipals have been taught, then surely it's time to move onto more advanced stuff? Incidentaly, I'm sure Python used to be "123" or "ABC" - or somthing similar... Implying it's a language for learning. A good intro, imho is actually the "Mini Language" JavaScript. Whilst fundamentally used for scripting, it has a simple to learn syntax, that is familiar to a whole host of programmers - plus, it's extremely relevant and useful to todays markt, as it's a now integral part of todays Web.

    Mong.

    * Paul Madley ...Student, Artist, Techie - Geek *

    --

    *...Slacker, Artist, Techie - Geek *
    Remember: Nothing is Cool.
  178. Duh.... Pascal!!! by danwatt · · Score: 1

    I looked at Python. Not that easy of a language (this is coming from a 2nd year CS student, just learning C++, knows lots of Pascal). I was taught pascal in my 1st year of CS, and it confused SOME people, but most could understand it. Python looks to be more confusing (to the beginner) than C++. But I do think that making CS a required course is both good and bad. Yes, computers are becoming much more widely used than anyone ever thought, but too many people dont care about programming, and being forced to take the class would end up hurting their GPA. But, CS is good at teaching problem solving...

  179. Re:Programming Not Appropriate as Part of High Sch by calibanDNS · · Score: 1

    An instructive 5th grade grammar class is one thing, but once a student reaches the high school level I think we should expect more from them than reading, writing, and 'rithmatic. Most high school level CS courses are offered as an elective, and if a student can handle the ideas then let them go for it. Some of the best programmers I've known have been Juniors or Seniors in high school.

    ~Caliban

  180. Re:The American educational system sucks! by eomir · · Score: 1

    maybe you should not rely on others to hold your hand through life and actually do something for yourself...my school offers a decent amount of computer classes but i decided that it would be better to just figure it out myself...you can do the same

  181. Oh my god, you used gdb, you bastard! by Inoshiro · · Score: 1

    Yes, I (drum roll please) debug my fscking code!

    It may not be correct the first time.
    It may not be correct the second time.
    Hell, it may not even be correct after "only a few" thirty-hour debugging sessions.

    But damnit, man, I will not release bad code! :-) This is why I write my code such that I can compile under Djgpp/TCC besides GCC in Linux. This alone found a rather nasty bug in some code I was working on (Linux nicely set memory to zero after I malloced it, DOS did not. I added a memset, and all was good).

    Anyway, off to the land of profilers and debuggers and compilers and (dear lord) standard system libraries. This portability stuff is pretty kinky.

    --
    --
    Internet Explorer (n): Another bug -- that is, a feature that can't be turned off -- in Windows.
  182. The American educational system sucks! by Jonathan+Hamilton · · Score: 2

    I think that this is a great idea. I recently meet a foriegn exchange student from Yogosloviva. He said that in 6th grade you could start taking programing classes their. They first learned pascal and then could goto C. Here in America for at least the Florida Education system you can't have typing classes until 8th grade. And Practical computer skills are tought in 9th. I'm a Senior in high school and we are still using PS2's. The only internet access we have is on Imacs, and their are only like 10 for a school of 1600.

    The American education system sucks. They could have at least taught me how to spell decently.

    1. Re:The American educational system sucks! by ncc74656 · · Score: 1
      That is outside of the realm of schools, that should be tought by parents

      This much is good...

      and if not by parents, then by television.

      ...but you must be kidding about this last part. I'd hate to run across someone whose morality and worldview were entirely derived from the (mostly) drivel that passes for TV. (Yeah, there are a few shows that score reasonably well for character (the various Star Trek series, for instance, or maybe something like JAG or ER if you're not into sci-fi), but imagine what it'd be like if everybody took their moral cues from The Simpsons or from pro wrestling (didn't our Inhaler-in-Chief say once that he liked to watch wrestling?).)

      --
      20 January 2017: the End of an Error.
    2. Re:The American educational system sucks! by Anonymous Coward · · Score: 0

      Ouch!

      I had it slightly easier in Cen. Florida.

      We had a large pool of boxes (Wintendo) in the media center, all with internet connectivity. Of course you couldn't do much, lest you violate your Internet safety contract or whatever we had to sign.

      But, as with your school, we hadn't a programming class in sight. It was pretty pathetic. There was a magnet school 25 minutes away that taught C++ and Pascal (and had *gasp* Unix), but I wasn't slated to attend there.

      -Jason
      jasonb@edseek.com

    3. Re:The American educational system sucks! by Anonymous Coward · · Score: 0

      6th grade... I'm impressed. Just graduated from high school... because our school district was in a rich area, we did have a decent amount of computers... some macs, some pcs, and I learned to type in either 5th or 6th grade. Our school offers programming courses from Basic --> C++ --> AP C++. As far as I could tell, this worked fairly well at our school, and you got a decent command of C++ when you went through the courses. Of course, not all the high schools in the area even have them offered... I don't care incredibly what the language is, but I think american high schools should offer some sort of logic/programming course period. Some may be better than others, but almost anything is better than nothing.

    4. Re:The American educational system sucks! by TurkishGeek · · Score: 1

      I would not be very impressed with the Yugoslavian education system. How good is your educational system if you teach kids C in 6th grade; or give access to Cray machines in 10th grade for that matter; but fail to provide them with tolerance and humanity that could have prevented disasters like Bosnia and Kosovo? Sorry if this sounds off-topic to you; but the world needs tolerant and sane citizens badly, perhaps even more than the hordes of programmers we will need in the 2000s.

      --
      Zigbee Central: A Zigbee weblog
  183. I wish by chris.h · · Score: 1

    I wish that our high school offered any programming classes, like many others I had to teach myself. As it stands now the whole computer cirriculum is governed by the only person that knows anything about computers (which is VERY minimal) and she's an Apple junkie. Our school just ordered 10 iMacs because of her.. bah... But now I have something to ask, i am currently enrolled in my school's only non-Apple computer course. Computer Networking I which is put on by Cisco Systems, now I've only been in the class a few days but the teacher is a moron, he knows how to get into windows, that's about it. Now my question is, has anybody been through this course or know much about it, is it any good, and is it worth sticking through?

    --
    -I didn't just die in Quake2
  184. Simula by Anonymous Coward · · Score: 0

    Why not Simula '67? I've never encountered a better programming language for learning beginners. :)

  185. The problem with only teaching one language by Joe+Groff · · Score: 1

    Think about how everybody learns to read and write in elementary school. They will learn to write in English (or Spanish, French, or whatever the native language is). But how many of those people ever go on to learn to be fluent in a second (or third, or fourth) language? Sure, many high school districts require a couple years of learning a foreign language, but in those two years, few people ever learn or even remeber more than how to say "Hello" and other basic phrases.

    By weaning people on Python or any single language, many people will only use Python for the rest of their lives. Python is a good language, of course, but has its limitations. Also, these people will only be able to modify other Python programs to their needs, and would just shrug their shoulders at the vast majority of code written in C, C++, Perl, and other languages.

    --

    -Joe

    1. Re:The problem with only teaching one language by Anonymous Coward · · Score: 0

      But how many of those people ever go on to learn to be fluent in a second (or third, or fourth) language? How many people would want or need to?

    2. Re:The problem with only teaching one language by Ronin+SpoilSpot · · Score: 1

      By weaning people on Python or any single language, many people will only use Python for the rest of their lives. Python is a good language, of course, but has its limitations. Also, these people will only be able to modify other Python programs to their needs, and would just shrug their shoulders at the vast majority of code written in C, C++, Perl, and other languages


      If this was the case, how come there are so many people out there who knows more than one language?
      I agree that for some it might be that way, but then they will probably never do that much programming anyway.

      Perhaps the problem is the distinciton between learning to program *in* Python and learning to program, using Python. If you are taught well enough, then you learn both, and you will be able to use your ability to program with other languages too. If you only learn to program in Python, then that's all you know, but the choice of language is not what makes the difference. It's the choice of teacher.

      History: When I started studying Computer Science we were taught programming using a small language designed by one of the local professors. It was small, but well designed, and had all the features you would need to teach imperative programming (OO programming was on second year then), including pointers. Because the language was so small and easily learned, with no idiosynchrasies, we could concentrate on learning the concepts of programming.

      I guess I think Python would be a good idea, if what is being said about it is true. Another question, perhaps, is whether the first language should be object oriented or not.

  186. You kids! C is not low level! by Inoshiro · · Score: 1

    Well, damn.
    I'm 18 now, and work regularly on C code and utilties for Linux (moving towards a big release sometime soon, hopefully ;-).

    I read a great deal of theory before sitting down and programming, and I have had decent teachers in the past.

    NOT ONE of them would ever say C is low level. Assembler is low level, C is medium level, and things like BASIC and Pascal are high level. Totally interpreted languages (ie: perl, python, TCL) would likely be "higher than high" level languages as they never go beyond P code in the interpreter.

    If you want intelligent students from nothing try this:
    Grade 9: Intensive computer familiarization. Play with keyboard, encourage good typing skills, introduce to operating systems and misc things.

    Grade 10: Begin/end basic (if you're lucky, you'll have a cool teacher like the one I had in grade 10, she was an ASM programmer who did a lot of theory with us). Teach theory. Encourage good programming practices (commenting, indentation, code standards, peer review).

    Grade 11: Well, time for C, boys and girls.
    Teach them how C sees the operating environment it's in. Teach them also more of the internals of an OS like DOS (simple ones ;-)). Get them to write a text editor that allows editing ala normal dos edit as a class project or similar (they'll learn memory handling, configuration reading, etc, good for client programs).

    Grade 12: Now is an opprotune time to introduce things like: networking theory, Linux OS theory perhaps, internals of MS OSes other than DOS.

    If they make it through that, they can quickly master any university programming courses, as well as easily fork off into perhaps an IS admin, one of the good ones who really understands the systems they work with.

    Anyways, go play with x86 assembler if you really want some mind wrenching stuff. I *LOVE* the power it gives. :-)

    --
    --
    Internet Explorer (n): Another bug -- that is, a feature that can't be turned off -- in Windows.
  187. Why not Java? by jasontromm · · Score: 1

    Why not teach Java as a first programming language? The language is completely machine independent and works well over the Internet. Aren't we wiring all the schools for the Internet. Why not teach a language that lets students take advantage of being wired?

    --
    "Politicians always tell the truth, when they're calling each other liars."
    1. Re:Why not Java? by deeny · · Score: 1

      The reasons for NOT using Java were enumerated by Luby Liao at the Python track of the O'Reilly Open Source conference -- that you simply have to teach too much stuff to even print "hello world" in Java. In other words, the runway is very steep. The point, after all, is to TEACH PROGRAMMING not to alienate students.

      Python is nice because you can teach all the principles as they're required, not in some order arbitrated by the language. For the same reason, I consider Perl, ML, Scheme, Lisp, Prolog, and a whole slew of other languages (which are cool in their uses no doubt) unsuitable as a language for teaching EVERYONE programming principles.

      As a friend said, it's a transparent language (in that you can do just about anything without having the language itself get in your way), which is why it's a good teaching language.

      _Deirdre

  188. Real programmers write in ... by JonK · · Score: 1

    Python? Perl? Java? C++? C? Fortran?

    Whinging whey-faced milksops, the lot of you. Teach them InterCal, Befunge, Malebolge and BrainFuck. If some jobsworth complains that these are of no commercial use, teach them JCL - preferably one of the earlier variants with the really interesting syntax. Or, at a pinch, APL.

    Alternatively, if DARPA are prepared to offer me sufficient money (or two crates of Newcastle Brown Ale), I'll craft them a teaching language like no other: one to make kids' brains dribble out of their ears and their pupils bleed.

    Offers gratefully accepted.
    --
    Cheers

    Jon (who started programming in PET Basic and still bears the scars a dozen languages later)

    --
    Cheers

    Jon
  189. Why do people challenged what they know not? by Anonymous Coward · · Score: 0

    A lot of the thread go on to say how they know very little about pyrhon, then branch off to suggest C++, smalltalk, pascal, C and other langauges. By all means, if you don't know python you should go and read about it, before you blindly make stupid comments. www.python.org. I definitely think python is an appropriate language for this task. I know this because I have coded in BASIC, PASCAL, FORTH, C, C++, various assemblys than you have fingers, YES PERL too! and I am not picking side based on preference, but based on what I see will be more sucessful. If it was a personal thing, I do say go with C. I think 6th-7th graders can grab python. I so envy them.

  190. On Programming Languages by Tom+Christiansen · · Score: 3
    After reading over 400 responses here, I decided that there were far too many to respond to individually, so I'll try to hit the major points. This article is in two parts: the first asks a lot of questions, and the second provides a few answers. However, part 2 doesn't try to answer part 1's questions. You'll have to do that thinking on your own. :-)

    1. Questions

    The most important issue, and one which surprisingly few posters have addressed, is to identify the properties that are desirable in a 1st programming language. Identify also which properties are considered undesirable in that same environment. Once you've done a thorough study of these issues, only then can you analyse existing programming languages for how well they fit these criteria, or to create a new one that better satisfies them than existing languages. But until you know against what metrics these languages are to be judged, you cannot objectively do so.

    Is this ideal beginner-oriented programming language also a language that's good for other focused domains? Will the decisions you've made in designing or selecting this ideal beginner-oriented programming language render it less than optimal for programming that isn't oriented toward non-programmers? Or if you add in properties conducive to non-beginner programming, will this compromise your goals of creating something for beginners?

    Can we leverage our natural cognitive strengths in learning natural languages to learn a programming language? Does this imply that we acquire language more readily when we have lots of easy, contextual examples than we would if presented with sets of rules and axioms? Does this mean learning by a usable subset of a language first, and only adding sophistication if and when it becomes necessary? If so, does this not engender dialectical subsets? Would a beginner (equivalent to a seven-year-old speaker of his native tongue) confronted by a complex piece in the language (say, equivalent to a doctoral thesis) find himself somewhat lost? Would it be better to throw out the language you'd learned until age seven and start a new one so this can't happen, or is it better to learn incrementally?

    Does it make sense to expect the same language that is used for one domain to be equally applicable to an unrelated domain? Aren't domain-specific languages both more powerful and more user-friendly?

    Are we talking about a particular age group, such as ages 9-12, 13-17, or 18-21? Does this affect our criteria? Should a university really be used as nothing but a high-classed tech school as feeders for industry? If so, shouldn't diverse core curricula emphasizing reading, writing, and effective skills get more attention?

    Do we understand the differences between "IT" training and "CS" training? What's a business programmer, and how is that different than a programmer? Is the goal to teach programming, or is it to teach computer science? Or are we just talking about teaching computer use? Since when is a computer science degree required to use a computer, or even administrate it?

    How do you define "readability"? Does resemblance to a natural language suffice? Is this a good thing? Remember one notorious attempt to create a programming language that even non-programmers could use cursed us with Cobol. Wouldn't it be nice to avoid that next time around?

    Is readability culturally biased? Can a language designed to be easy for Unix users to learn be equally easy for non-Unix users? Can a language designed to be easy for non-Unix users to learn be equally easy for Unix users? Think of it this way: Does your knowledge of Greek help you learning Russian? Is it the character sets, or are there more important underlying similarities? Is a language designed to be used by people who know language XXX going to be different than one designed for those ignorant of XXX? Do semantics grow out of syntax (ordering, positioning), or should they be explicitly reinforced by inflection markers (singular vs plural, noun vs verb, etc)?

    Should a programming language require a fancy, hand-holding IDE before it can be used effectively, or should a line editor suffice? How much hand-holding is useful to the beginner but annoying to the expert? Can you make a programming language that's designed to be completely learnable in a very short time that doesn't rule out its use later down the road? Is "user-friendly" well defined? Does "user-friendly" always denote "expert-hostile"? Will software that pleases one set also please the other set? Should it? Are languages designed for short-term use or long-term use? Where then should optimization occur?

    That's certainly plenty to think about, and mostly what I just did is provide important questions that should be thought through. In many of the questions, there is no single right answer, but there are consequences. Try answering the questions in more than one way, and then compare the resulting trade-offs that arise depending on which path you took.

    2. Answers

    I certainly don't have all the answers to those questions. But I do have some comments on the Perl matters. The first is that Perl and Python are actually essentially the same language, and that there are a great deal of other sorts of languages out there that a computer scientist should be exposed to. Much like the warning to beware the man of one book, also be wary of the programmer of just one programming language.

    And before you can begin to compare two languages, you actually have to know them both! Oh, not necessarily with equal fluency, but you actually have to have taken the time and energy to play with them, to sound them out in real situations. Superficial assessments based upon surface appearances are useless.

    The "scripting language" versus "programming language" bigotry is nothing but cultural arrogance borne out of theoretic ignorance. I'm aware of Ousterhout's paper, and I have responded to it before. John is a very bright man, but like all of us, he carries with him his own historical baggage from the past and unfolding agenda for the future.

    In this case, this a false dualism of "scripting" versus "programming" does nothing but harm. It has virtually no basis in theory, and little in practice. The assertion that byte-compiled Perl or Python can't handle certain tasks but that by merit of being compiled to machine language, C or Pascal or Ada or Modula automatically can--well, this is completely ludicrous.

    Rob Kolstad long ago conjectured the following: "The success of a new programming language is directly proportionate to its resemblance to C." Perhaps a more accurate statement would be "The degree to which a new programming language will be embraced by C programmers is directly proportionate to its resemblance to C." And now you can swap in other programming languages in that equation.

    As far as real-world programming goes, I assert that the majority of it gets done using C or a derivative of the same; and yes, I consider Awk, C++, Java, and Perl to be derivatives of C. Now, I'm not trying to claim that this is the best of all possible worlds. I'm simply stating that it's the reality. And given that reality, overcoming the inertia to get existing C-oriented programmers to jump to a completely different programming language, such as Smalltalk, Lisp, ML, or Prolog, is non-trivial at best.

    There was some question of non-Unix support for Perl. As far as non-Unix ports go, Perl runs on so many diverse sorts of systems that it's easy to lose track of them. Not only that, but it also ships (or will ship in the next release) as part of the standard O/S release. Perl in some form ships with, or can ship, with at least some systems from these vendors: Apple, BSDI, Be, Compaq, Data General, Debian, FreeBSD, HP, IBM, Microsoft, Novell, OpenBSD, Red Hat, SCO, SGI, Sequent, Siemens-Nixdorf, Slackware, Stratus, and Sun. Those are just standard systems. The major workstation vendors like SGI, HP, Sun, IBM, and DEC/Compaq are all shipping Perl with their current or upcoming release. That means it's in the standard vendor configuration, which is important to many people.

    Of course, Perl I run on nearly anything, including: 3b1, aix, altos486, amigaos, apollo, aux, beos, bsdos, convexos, cxux, cygwin32, dcosx, dec_osf, dgux, dos_djgpp, dynix, dynixptx, epix, esix4, fps, freebsd, genix, gnu, greenhills, hpux, irix, isc, linux, lynxos, machten, mint, mips, mpc, mpeix, ncr_tower, netbsd, newsos4, next, openbsd, opus, os2, os390, posix-bc, powerux, qnx, rhapsody, sco, solaris, stellar, sunos, svr4, ti1500, titanos, ultrix, umips, unicos, unicosmk, unisysdynix, utekv, uts, uwin, and vmesa.

    On the matter of Microsoft compatabilty for you MIS and IT types, we CS types have tried very hard to make sure that standard Perl programs try very hard to run everywhere. That doesn't mean you can't get at the Unix getpwuid() function or the Microsoft Win32::Process module if you want, but that's not the same as basic functionality that is expected runs everywhere. This includes portable systems programming as well. Basic systems programming functions in Perl like rename() and flock() are not restricted to those systems that support rename(2) and flock(2) syscalls, i.e. kernel traps. We use whatever emulation is necessary to provide the same semantics using whatever your system's primitives provide.

    And we don't stop there. The POSIX fork(2) syscall, that simple, elegant, and incredibly powerful feature that has long formed an essential keystone for systems programmers, and one which Mr Bill has never figured out how to do, will be supported on Microsoft's systems as well. This will show up in the 5.6 release of Perl, which is now in late alpha and imminently passing into beta. That means your traditional multitasking server that calls accept() on a socket and then fork()s off a clone to handle the incoming connection will work even if you're a Prisoner of Bill.

    If you aren't familiar with the wealth of Perl modules out there, or how easy it is to build and install them, you should look at this search engine.

    Perl has seriously different design goals than Python. One of these was to be easy for Unix programmers to learn and use, both simple sh programmers and sophisticated C programmers. Another was to support incremental learning and incremental growth of the language itself. Another was to provide good support for multiple different programming styles (procedural, object oriented, and functional), which goes along with avoiding moral judgments about programming style issues and letting people program the way that comes naturally to them. Python supports both procedural and object-oriented programming reasonably well, but its support for functional programming is clumsy and unsatisfying. Without the nested lexical scoping in anonymous that languages like Perl and Scheme provide, there's only so much you can do. This is not in practice an onerous restriction, however.

    Another was speed of execution; as a result of this design requirement, Perl's compiler is remarkably more clever than Python's, because it does quite a few more optimizations and special-case detection at compile time, so that run-time is more streamlined. This includes string-related issues like pattern matching, but also simple base programming features, such as when identifiers are looked up in symbol tables. Python was never designed to run fast, and by and large, it doesn't.

    Perl was designed to conform itself to the programmer, not to make the programmer conform themself to the language. This is seen in the "do what I mean" (DWIM) principle. Matters such as memory management and strong typing are largely there to help the computer not the programmer. Because of this, you'll see Perl and Python take divergent paths when it comes to these matters. For example, Perl will automatically allocate space for strings, indexed arrays, and associative arrays as they are needed, without requirements of pre-growing the way Python's lists need. Another example is that Perl doesn't distinguish between 3/2 and 3./2 the way Python does. In Perl, a number is just a number, and if the compiler or run-time library needs to perform some promotions behind the curtain to do what the programmer meant, it goes and does it.

    Perl was also intended to support short-cuts for common programming tasks so that expert programmers wouldn't be forever bogged down by spelling things out the long way. In short, it was designed to be expert-friendly, by which I mean that it did not become tedious for those who actually knew how to use it. One example of this is the multiple assignment statement of

    @array[1,5,2,9] = @array[3,2,8,1];
    # or likewise, via indirection
    @idx1 = (1,5,2,9)
    @idx2 = (3,2,8,1);
    @array[@idx1] = @array[@idx2];

    Some of Python's design properties were that explicit is better than implicit, that general cases are better than special ones, and that simple features are better than complicated ones--even when this makes the programmer to put the simple features together in complicated ways. But like any language that actually gets used, these goals are not always followed. Compromises happen. I'm not going to sit here and point out all the warts and knobs in either language. Rest assured that they are there.

    Do not be distracted by Python's whitespace issue nor by Perl's type-markers. These are both red herrings that aren't related to the core of what the language can truly do. Interestingly, both of these features commonly cited as negatives were actually added to ameliorate not to exacerbate legibility.

    Despite Perl and Python starting from different sets of design criteria, they are, in most of the senses that really matter, the same language, just as C and Pascal are really the same language. I strongly encourage anybody who only knows one of them to go out at learn the other as well as you can in a week or two's worth of playing around. Try to write equivalent programs. By and large, you'll find that the final program takes more lines of code in Python than it does in Perl, and that the Perl version runs faster than the Python one. But not usually by a large amount. Usually it's just 20% or 30%.

    But if the problem domain happens to be text manipulation, (and not just sed and awk style either), then the difference can be far more dramatic. It is not at all unheard of to find that Perl requires just 1/3 the code that the Python does, and that the Perl version runs in just 1/10 the execution time. Perl is not just about text processing, and there is no tool that's best for all jobs. But if there's one place where Perl outshines all competitors, this is that place. Even people who are heavy users of Python often turn to Perl for these tasks.

    Learn as much as you can.

    1. Re:On Programming Languages by brianc · · Score: 1
      WOW!! what a holy war this has triggered.


      When I look beyond the surface, beyond all the C, and C++, and Perl
      and BASIC (visual or otherwise), I sense an underlying trend.


      Everyone seems to agree/imply/infer before you can learn PROGRAMMING,
      you need to learn a logical structure, which can then be transferred
      to a programming LANGUAGE.


      Depending on when you joined the ranks of the computer literate, this
      structure (right or wrong) might have been C, Perl, BASIC, LOGO,
      or even COBOL or FORTRAN. Anyone ever program with PILOT?


      Well (insert crotchety old voice here)-


      Why in my day, we didn't even have LANGUAGES! We were taught LOGIC
      and MATHEMATICS! Why, we didn't even get to draw a flowchart until
      the third semester (and we were glad not to)!


      (end sarcasm)


      My first college level computer class was taught by a old logics
      professor. The first exercise we did was to establish the steps
      required to fuel your car.


      Well, the whole class started tossing out statements such as:


      "Go to the gas station"
      "make sure you have money"
      "remove the hose"
      "pull up to the pump"
      "open the hatch"
      "find the car keys"
      "pump the gas"
      "stop when tank is full"


      and on and on for about 10 minutes. Then we spent another 5 or 10
      minutes sorting the statements into somewhat of a sensible sequence.
      Collectively, we were very proud of our 'chalkboard' program and looked
      to the prof. for approval.


      He deflated our bubble by asking simply, "What if you don't need
      any gas?"


      And thus we were introduced to PSEUDO CODE. Not FORTRAN, RPG, or
      COBOL (all current, modern languages at the time). We learned
      to write 'programs' using English language- something most of
      us already had a good grasp on.


      Only after several weeks of refinement and peer review did the first
      pieces of a real PROGRAMMING LANGUAGE enter the picture. Boy it
      was misery! But most of the time the programs were logically sound, and
      once you got past the syntactical errors, actually worked!


      To bring this back on topic, Python looks surprisingly similar to
      how much of my old pseudo code looked. I even tended to indent blocks
      of code.


      I've heard you really don't learn a programming language until
      you start thinking in that language. Because Python can look much
      like English, I can easily see the young students making that leap.


      That, combined with the immediacy of the runtime interpreter, should make it
      good enough for introductory level instruction. And remember,
      the purpose of the funding was to teach at the intro level- whether
      Python is the right tool for the advanced programmer is irrelevant.


      In any case, I applaud any funding directed towards educating the
      next generation of computer enthusiasts. This is something that
      has been missing for many years.


      Edges are for leadin' not bleedin'

      --


      SIGLOST && SIGUNUSED && SIGQUIT
  191. Help! "Teaching programming is stealing" they say! by Anonymous Coward · · Score: 0

    I work at a school here. When i came the computer room was: a 5x86/32Mb RAM/2Gb HDD/Netware 3.12 fileserver, and 15 386-486-5x86/8-16Mb RAM/No HDD/MONO-VGA-1Mb SVGA video/floppy booted PC's, all nicely tied to Win3.1/Office 6.0 and not even one legal license. They were having problems with the BNC coaxial cable network, constant failures, virus problems, etc.

    I proposed replacing all the software with linux, they accepted, based on a witchhunt initiated by the national software antipiracy enforcement agency (Indusoft, akin and alliated with BSA), and not with quality.

    Now, some months later, some legal problems stopped the piratehunting, and they told me to reimplement the disaster again (of course upgrading it to Win95). I said that the teaching of programming would be good for the children, that at least LyX would be better than the WYSYWIG model of wordprocessing and that using nonfree software without paying was bad. But they replied that they won't program when they get out of the school, that all they would see would be MS bloatware and that teaching programming is stealing from them, so "Put windows! is an order!".

    I need the job, but i don't want this disaster to happen. The law is out of the withhunt, so they can get away with this. I don't want a legal battle, but an ideological and moral one. So, i need arguments/strategy/reasons against this madness. I'm thinking on installing windows in the PC's anyway.... Windows 98 with IE5 and Office 97 (remember the hardware specs of the PC's? hehe!), but more ideas, reasons, strategy are welcome.

    As Anonymous Coward (just in case).

  192. what??? by gspencley · · Score: 1

    when did i say i was a genius? I'm no genius, but thankyou for the compliment. I'm sorry if the comment somewhat offended you i was trying to be somewhat funny. the last thing that i try to do is brag about myself. i was just pointing out how learning those kind of skills at a young age can be a real benefit and how teaching them in schools can be even better.
    genius??? yeah right.

  193. Agreed: The American educational system sucks by Dictator+For+Life · · Score: 1
    I recently meet...

    ...foriegn...

    Yogosloviva

    ...you could start taking programing classes their.

    ...then could goto C.

    And Practical computer skills are tought

    ...and their are only...

    They could have at least taught me how to spell decently.

    Is this a troll? :-) Well, even if it isn't, you are certainly right: at the very least they might have taught you how to spell. The system is so badly broken that it's scary.

    --

    DFL

    Never send a human to do a machine's job.

  194. Why immigrants are outperforming residents by gupg · · Score: 1
    I think this is the first step in the US educational system recognizing that a fundamental change has to take place if more computer/IT professionals are to be produced. However, the issue is not about teaching young kids how to program, but instead about teaching them how to solve problems. Basic math skills and analytical thinking needs to be emphasized and this will lead to better programming skills.

    However, let me answer a different question - people always ask me, why is it that so many Indians are good at programming (or atleast employed as such). The reasons are often misunderstood; the Indian high school system lays stress on basic math and analytical skills. Students who take high school math have to do calculus, problem solving and in general, much more competitive math than in the US. Broadly speaking most graduating high school students in India know math equivalent to 1st year math majors in the US.

    This means that the math taught in college (in engineering and science courses) is appropriately advanced. Again, engg schools in India (and I have been told by my German friends, in most of Europe) are teaching students to *think*; given a problem, to develop a methodology of solving it and problems in the same genre.

    Whereas in US engg courses, students are concerned with passing the course and teaching is centered around graduating students so that they can get a job. It is an industry oriented education system. I was a teaching assitant for a digital design class and was constantly being asked whether the material being discussed would be on the "quiz" ... my urgings of "no, but this is fundamental stuff that you need to know" fell on deaf ears.

    In conclusion, I think the problem is more deep rooted; US colleges are producing engineers who can do one type of job well but find it difficult to re-train themselves for new jobs when they come along. Hence, initiatives such as this and more fundamental grass root changes in high school and engg. curriculums are required.

  195. Re:How about Matlab or bash shell by Anonymous Coward · · Score: 0

    Matlab, since it fairly well dominates engineering, seems a good choice. As to cost, use GPL Octave, which runs most all Matlab code.
    I heard a talk by Przemik at National Institute of Standards touting Octave.

    We do not seek that students understand programming in its greatest generality. John Dewey, quintessential philosopher of education, lambasted learning without application. If people merely learn Python because it has the breadth of programming, but market forces keep it from common use, I would teach another language. Matlab, while perhaps not having the breadth of Python, does have tremendous application.

    I would add that we also seek some computer literacy. Isn't the first step to computer literacy working with the operating system? I would seriously consider teaching bash shell programming together with various Unix commands. For example, with mpage and bash, one can write a program to squeeze every character onto a printed page. Surprising for this Slashdot group, people presume that teaching will be done on Microsoft Windows operating systems, so a computer language must be taught under those constraints. Those taught under such constraints will likely go on to merely point and click. On the other hand, those taught bash programming and some powerful unix commands will see the flexibility of unix, plus know how to use "if...then", "here" documents, variable expansion.

    jameson@pressroom.com

  196. Hmm...interesting by RonG · · Score: 1

    This proposal does raise an interesting set of issues in regards to programming curricula. For example, here, the first language taught to all engineers when I started here was Fortran-90 -- the class was an introduction to engineering. IMHO, this wasn't too bad since the focus of our programs was solely on numerics, but that was a long time ago, so my memory is hazy. EE's and CompEng's and CE's moved on to C in the next programming class (Civil/Mechanical/Aero Engineers continue(d) to use Fortran-90 throughout their college career, along with some Matlab).
    Eventually, the CompSci's move on to Scheme to learn functional programming.

    Part of the problem with the curricula is that given X semesters for each major to learn programming, along with industry pressure on graduates to learn C/C++, there isn't enough time it seems to use a simple language like Python in the beginning and later teach C. So the CS majors learn Scheme later down the line while the other engineering disciplines are taught to use the industry language of choice earlier on.

    --
    There are only two kinds of programming languages: those people always bitch about and those nobody uses.
  197. Re:Oberon? Squeak? Python? by Anonymous Coward · · Score: 0

    I've looked at all three. Oberon and Squeak are both 'monolithic', unlike Python, which was designed for gluing other code together (among other things.) They are all good. But you have to pick one, and I picked Python. Neither Oberon nor Squeak provides an OpenGL interface, which I needed for my renderer. I'm going to have to go with Guido on this one. But do look at the others. sr

  198. Moderate original post up please for TeachScheme. by SuperKendall · · Score: 1

    I was going to post the same messgae, with the same helpful links to the TeachScheme project that were offered in a followup post just after.

    In the school I attended (Rice University, also the ones promoting the TeachScheme project which I'll admit is a bias I have) they teach (tought?) Scheme as a first language, as also used it for some much more challenging courses (like theory of computer languages). It was great to have that as a first language (after knowing some Pascal and Basic to start with).

    The reasons I can think of to promote Scheme as a learning language are:

    *) You will never use it in the real world. Thus, you automatically have to know at least two very differnet languages which is helpful in learning how to think about solving problems.

    *) Scheme teaches you to think. You learn a number of simple but powerful concepts - Recursion! Lists! Pointers! Objects! All in a safe environment.

    *) Scheme teaches you how to use Emacs. Its greatest strength, or greatest failing - I don't see how you could program Scheme (or any sort of Lisp) without Emacs. That might be the only thing really standing in the way of widespread teaching of Scheme, is a easily installible and usable version of Emacs for the masses. Paren matching alone is not sufficent, I fear.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  199. Exactly! by Anonymous Coward · · Score: 0

    I completely agree.

    I started to learn Perl during an internship with the county school system's IS department (or lack there of) my senior year in HS.

    I found it to be rediculously easy, with the help of both Learning Perl and Programming Perl by everyone's favorite book publisher.

    I've been using Perl ever since then self teaching myself many of the more complex concepts (LoLs, OO, refs, ect).

    As I've never tried Python (shame on me) I'm not qualified to say which is 'better' for beginners, although I'd wager to guess that the language which is best to teach beginners varies as much as the kinds of people that take programming classes.

    The 'best' beginners language in the world isn't of much help when it comes to concepts if your professor can't teach the material effectively.

    -Jason
    jasonb@edseek.com

  200. C++ is not too hard for high school students. by BasharTeg · · Score: 1

    I would like to disagree with a point made by the author. I do not believe C++ is too difficult of a language for beginnners. When I took the only computer programming class my high school offered, which was C++, I had no trouble grasping the concepts. My little brother, who is 14 and a sophmore in the same high school, is taking the same class, and he hasn't asked me for help once, even though I let him know that I was here for him. C++ is an excellent language for beginners, as long as you aren't going into the more serious topics of object oriented programming, Inheritance, Encapsulation, and Polymorphism. Even these topics aren't *too* difficult. But the way our teacher handled it, is he tought C++ as a procedural language, skipping most oop topics. When I got into college, I understood the syntax of C/C++ so it wasn't difficult to add the other topics onto the language I was already familiar with. The problem with teaching someone a non-C/C++ language is they carry over programming habits and thoughts from the other language. Like when you see someone new to C try to type writeln() in C. You're just creating another forced transition period by forcing them to learn two languages instead of one.

  201. Re:We Need More People Like You by Anonymous Coward · · Score: 0

    Actually, I don't see anything fundamentally wrong with math people (or even physics although it's a stretch) doing CS. The fields are related enough to make it feasible. At my high school the CS teacher was also (or formerly, I'm not sure) a math teacher, but she did pretty will with the introductory CS stuff. She dealt with the advanced students by letting them work on their own projects or by using them as informal TAs. Admittedly she didn't have an extremely broad knowledge of programming (or perhaps even CS), but the class was fine for beginners, and yes even for the AP.

    BTW, what does Perl have to do with CS anyway, or at least what is so critical about it that someone is clearly a moron if they don't know about it? I bet Turing never heard of Perl :)

    Daniel

  202. Starter age for programming by LizardKing · · Score: 1

    I don't think anyone can say what a good age to start programming is. I have seen C and C++ code written by people in their early teens that is simply inspired. On the other hand I have seen code written by adults that made me cringe ...

    Personally, I learnt the rudiments of programming on a Commodore 64 (Basic), and then C. This was between the ages of about 12 - 16. Then I didn't touch a computer again until the age of 22. Five years later I now consider myself to be a pretty good C, C++ and Perl programmer.

    So I don't think age is the issue, but motivation. To a certain extent, an individual can learn quite difficult concepts as long as they have a burning desire to. In my case I didn't want to be stuck in a bank doing data entry for the rest of my working life - the need to always be learning something new is what motivated me.


    Chris Wareham

  203. Re:sounds familiar by Anonymous Coward · · Score: 0

    I disagree.

    I don't care what kind of electronics he has, I want my mechanic to know how to tear apart and rebuild my car's engine with hand tools. Same thing with a computer programmer, either you know how to build it by hand or you're a fucking menace. In my opinion.

  204. Re:Programming Not Appropriate as Part of High Sch by nuggz · · Score: 1

    Basics yes
    My school taught basic accounting, the first part was how to do your own taxes
    First Aid could be basic nursing
    Computer programming can be just advanced computer usage, ever look at some Excel guru sheets?
    HS isn't just littl kids, some people don't go on any further, giving basic knowledge is a good thing.
    Honestly I think that the into level programming I got in HS would be more helpful then the intro level Calculus, at least to those who don't continue in academics after HS

  205. If I were moderating... by iceaxe · · Score: 1

    I simply feel moved by the sincere and and heartfelt emotions expressed by scrytch. I hope that the person who replied to scrytch's original post understands that the love flowing over the net comes from scrytch's deep care for his education and enlightenment. The rest of us also appreciate the poetic terms in which this conversation is couched. It brightens our day, and leaves us with that "fresh as a morning shower" feeling deep down in our souls. Please, someone moderate this sort of posting up even more! We need more such original contributions on /.

    I hope that someday I too can enrich the lives of my fellow slashdotters with such score:4 worthy messages, and teach them that in order to be a default 2 person they should emulate me.

    Meanwhile, I must simply apologize for taking up yet more space in the database with this off-topic reply.

    Thank you,


    --iceaxe

    --
    WALSTIB!
  206. Why not Smalltalk? by Anonymous Coward · · Score: 1

    I'm no expert about Python, but if they really want a beginner's language that's modern, easy to learn, and increasingly in demand, how about Smalltalk? It's extremely object-oriented (everything, and I mean everything, is an object); it allows extremely fast development cycles; it has what I consider to be the most elegant method syntax ever to grace a language ("SomeObject do: something with: somethingElse andStoreResultIn: here." is a lot more readable than "SomeObject.do(codeBlock, &anObject, &here);"); it is far more dynamic than Java; it's now pretty fast (look at VisualAge Smalltalk or VisualWorks 5i); most Smalltalk environments come with WebObjects-like classes for Internet apps (e.g. VisualWave for VisualWorks 5i)... the list goes on and on. True, perhaps it is not the fastest or most practical language, but if the intent here is truly to expose more kids to programming, I can't think of a better solution than Smalltalk.

    1. Re:Why not Smalltalk? by Pray_4_Mojo · · Score: 1

      YES! I've been waiting for someone to meniton smalltalk-80. Schools wouldn't even have to purchase any software...an open source smalltalk-80 environment is availible at www.squeak.org.
      Squeak beats java in functionality and portability (it runs on everything!) its syntax is far, far simpler then any language, and infintely more powerful! You can learn the language in a day. It can update itself over the web, comes with an email client, web browser, IRC client, its own windowing environment, can do 3D stuff via Alice.....
      Squeak has been overlooked, IMHO.

  207. Re:My opinion => Too pricy! Not! by Anonymous Coward · · Score: 0

    There are at least six Smalltalk development environments available free, VisualWorks, Smalltalk Express, Squeak, GNU Smalltalk, Pocket Smalltalk and Dolphin Smalltalk. If your company joins the IBM Solution Developer program, you can pick up a copy of VisualAge for Smalltalk for media cost, CDN$50.00. I don't think price is quite the issue you think it is.

  208. use VBA by yzorderex · · Score: 1

    Visual Basic for Applications
    The advantage is that you can do useful things with the GIU and with real applications like Excel and Word for immediate gratification and a whole lot of little customizing tweaks kids will love.
    Brainier ones can go onto VB and start hacking the desktop and do ASPs
    Real nerds can go onto the higher reaches of Linux and C or Perl.
    The idea here is to give everyone a reasonably useful intro and a look at the inside of apps and computers. Python is nice but I think its better to keep on the mainstream then to get into a new language that *might* become a killer app.
    Personally I started with 360 BAL and think assembler is the best way to start but then I'm wierd.

    --

    Just another perl hacker in Bangkok
  209. Comment removed by account_deleted · · Score: 2

    Comment removed based on user account deletion

  210. VBA by yzorderex · · Score: 1

    Visual Basic for Applications
    Yes they will learn some bad habits. Most of the students won't be going on to be professional programmers anyway so won't matter.
    What you need to go for is that immediate kick of making something that works and is cool without too much hassle.
    I see the issue as *not* tuning up CS students but taking the fear and loathing of the computer insides away from Users, who are the majority.

    --

    Just another perl hacker in Bangkok
  211. Victory for open source by theHippo · · Score: 1
    This is certainly good news. The best part is that students wishing to use the package at home has to pay zilch. It's not only a victory for open source but also for open standards. I hope we don't see the Microsoft-isation or Sun-isation of Python.

    I'll stick to perl as long as I can though...

  212. Oberon? by Mai+Longdong · · Score: 1

    Why doesn't anyone ever mention Oberon? It's a language AND an operating system (free for download). Check: http://www.ssw.uni-linz.ac.at/Oberon.html

    1. Re:Oberon? by Anonymous Coward · · Score: 0

      Or Squeak, an open-source Smalltalk environment that, like Oberon, is also an OS. Try it; you might learn something.

  213. C++ is easy as can be by Anonymous Coward · · Score: 0

    I'm a high school student who took APCS (Advanced Placement Computer Science) last year as a junior having had *0* programming experience. This year the AP board chose to use C++. I found C++ to be a very organized, very structured, very easy to understand language. Not only is it good for theory, it helps teach object oriented program (which IMHO is very important for writing modular programs). I recommend C++ as a standard for teaching beginners. -abe zuckerman

  214. Not a great post by Anonymous Coward · · Score: 0
    I've never used python or do I know anything about it but wouldn't Java be a better choice?

    You're asking if Java would be the better choice even though you know nothing about Python. Rather ignorant.

  215. Ahh! Hear me out :-) by Inoshiro · · Score: 1

    Remember this: typically 40% of the time is wasted doing memory management (malloc,free,new,destroy,tracking references).


    No. C allows you to expose a great deal more of the hardware, so you do have to keep track of things more. However, that doesn't mean it's any slower (those "other" languages have to collect garbage, too, and they're just compilers, not smart human programmers ;-).


    Also, what is your problem with pointers?! Pointers are easy to keep track of as they are just (litteraly) a memory address. C's strings are memory addresses, which are then read forward until a NULL is hit. Ints, etc, are another chunk of memory (but, being fixed size, require no NULL termination ;-). A pointer to an int is (you guesed it) a variable that contains the memory address for that int. If you dereference the address with *, you can use it like the original (this helps stop you from having to pass large armounts of data to functions).




    Now, this may sound dangerous, because it is. The thing is, though, that competent programmers will know how to work with these, and will use them where appropriate. IE: linked list, yes, perfect place for pointers. There are caveats, but that's true with any language.




    Well, just my opinion. I am, perhaps, a little defensive of pointers, because I just used them in a project, and they saved a lot of work :-)

    --
    --
    Internet Explorer (n): Another bug -- that is, a feature that can't be turned off -- in Windows.
    1. Re:Ahh! Hear me out :-) by Anonymous Coward · · Score: 0
      No. C allows you to expose a great deal more of the hardware, so you do have to keep track of things more. However, that doesn't mean it's any slower (those "other" languages have to collect garbage, too, and they're just compilers, not smart human programmers ;-).

      40% of the programmer time is wasted doing memory management (that the computer is perfectly able to do by itself). C programmers waste 40% of their life doing something totally unproductive. (garbage collection adds only about a 20% penalty).

      Also, what is your problem with pointers?! Pointers are easy to keep track of as they are just (litteraly) a memory address. C's strings are memory addresses, which are then read forward until a NULL is hit. Ints, etc, are another chunk of memory (but, being fixed size, require no NULL termination ;-). A pointer to an int is (you guesed it) a variable that contains the memory address for that int. If you dereference the address with *, you can use it like the original (this helps stop you from having to pass large armounts of data to functions).

      I am aware of what pointers are ; heck I was using them in 6502 assembly 15 years ago (through page 0 addressing, the only indirect 16 bit addressing of the 6502 ; not fun) :-) The pointers are much too low level, and this low-levelness is also counter-productive. "Pointers" in Java, Eiffel, Python are just high level enough (they are called "references"). When you pass an object in Java, Eiffel or Python, you pass a reference but you don't have to use everywhere freaking "*". I don't what to constantly tell the compiler how it should translate my program, when it could easily be smart enough to figure it by itself (using pointer, dereferencing).

      Now, this may sound dangerous, because it is. The thing is, though, that competent programmers will know how to work with these, and will use them where appropriate. IE: linked list, yes, perfect place for pointers. There are caveats, but that's true with any language.

      Even to top semi-god programmers have 1 bug every 1000 lines of code. Each time you use memory management, non-bound-checked array, or dubious pointer manipulation, you are increasing the probability to introduce bugs, compared to any decent language. At the end your code will necessary be much more buggy, because you can't walk on a slippery rope for 1000 kilometers.

      Well, just my opinion. I am, perhaps, a little defensive of pointers, because I just used them in a project, and they saved a lot of work :-)

      That's because you are using C. If you were using Java for instance, you will waste less time doing the computer job.

  216. Good points. by Inoshiro · · Score: 1

    Now, this is the kinda post that should be moderated up ;-)

    Anyway, you do have some very good points. The problem is, I have no GJC under Linux, nor do I have a Java-native code compiler under any OS (wouldn't that defeat the purpose of pcode, anyway?). Perhaps D should come about (fully object oriented lang, similar syntax to C++, but integrated garbage collection, memory protection, better class design, GNU compiler for it)...
    Well, I've probably just gone and defined Java. Oh well.

    If I don't have the compiler, I can't write for it ;-) And if it's not standarised (give Java more time), I can't use it. How do you write "ANSI Java"?

    Oh well.

    --
    --
    Internet Explorer (n): Another bug -- that is, a feature that can't be turned off -- in Windows.
  217. Python is great except for the whitespace problem by Anonymous Coward · · Score: 0

    Python is pretty simple to learn, but they really screwed up by having whitespace be significant. People learning to program would be better served learning a language that has a more rational treatment of whitespace.

  218. High-level languages and performance by Anonymous Coward · · Score: 0
    I have to disagree with you that performance is a non-issue. Also, I don't think that Visual Basic can not be regarded as a general purpose language (more like a language for programming relatively small and custom-made applications).

    If you have to think for more than three seconds whether your programming language is feasible for implementing an operating system or not, then you can not call your programming language a general purpose programming language. Sorry. This is what have happened with Java. Java would have overtaken many more lines of code, only if it had generated more efficient programs.

    However, in my opinion, it should not be impossible to create a programming language that combine selected high-level programming features with good performance and low-level programming. Of course, it is difficult, but it should be doable. The problem is, that in the last decades, the design of programming languages have been concentrated to either object orientation or to more high-level-only languages like for example functional programming languages. Simple imperative languages like C and Pascal have been regarded as too non-fancy and ordinary to be interesting to improve (without involving object orientation).

    Okay, but what is the problem with object orientation or languages like Haskell (a lazy functional programming language)?

    Object orientation is usually to ad hoc, and after more than 30 year not yet a simple and proven technology. The number of interpretations of what object orientation really is, are as many as its implementations.

    IMHO, use basic and proven techniques and do it well (like in C and Pascal). Add a number of selected more high-level features like exceptions, templates (parametric polymorphism), overloading, anonymous functions and records, try to make it simple to use high-level data structures (and maybe self-knowledge as you wanted; Python is actually quite good in this respect), and things like that; and you probably get a quite nice and powerful language. If you really want object orientation, then please try to use a more general form of subtyping than just inheritance, and a more general form of run-time overloading than what is used for implementing virtual functions. (I think that Modula 3 is a language that has followed this path at least to some extent.)

    Pure functional languages contains a lot of good and interesting stuff, but the problem is that they usually try to be too pure. This makes it easy to program at a high level, but hard to program at a low level. For example, imperative programming is not impossible in a language like Haskell, but compared to using ordinary assignment statements it is much harder to learn and understand properly.

    1. Re:High-level languages and performance by aUser · · Score: 1

      If you have to think for more than three seconds whether your programming language is feasible for implementing an operating system or not, then you can not call your programming language a general purpose programming language. Yes, you are right and I don't disagree: Visual Basic is not a general purpose language, and you cannot implement operating systems in VB. What we disagree on, is whether the 95% of lines written daily in the world are meant to produce an operating system. In my experience, they are written to serve the organisation that is paying the person writing them. Most people are therefore involved in automating business procedures. I'm only talking about the efficiency that can be gained or lost in automating business procedures. I'm not talking about anything else.

  219. Syntax matters. by Zach+Baker · · Score: 1

    This is in fact the reason I have never seriously considered Python -- I really don't need to worry about my program's whitespace causing syntax errors. I suppose you could say that I'm wary that Python brings new meaning to the phrase "tab damage." The more people say that it's more intuitive, The Right Way, and so on, the more nonplussed I am. I guess it's just a matter of taste. Sorry.

  220. Re:Ok. Rant time. by James+Lanfear · · Score: 1

    Alan Kay (of PARC fame) once said something to the effect that teaching algorithms first is the worst thing you can do to someone learning programming, because they'll never grow past it. His success in teaching ten and twelves year-old children programming by just letting them explore the systems seems to vindicate this, to some extent. That they didn't have any trouble learning algorithms later (some of them later worked at PARC as programmers) indictes that it can't do any harm to put it off.

  221. OO programming... by Danse · · Score: 1

    As a programming novice, I am just now learning about OO programming. Sure, I've read about the concepts behind OO design, but actually designing an OO program is a whole different ballgame for me. After reading your discussion here, I think a lot of what you said makes sense and perhaps I could benefit by getting a better understanding of good OO programming techniques before I end up going down the path of poor OO design. Any good books to recommend? Any tips for beginners?

    --
    It's not enough to bash in heads, you've got to bash in minds. - Captain Hammer
    1. Re:OO programming... by aUser · · Score: 1

      Dive into practice and take a good look at some brilliant oo designs.

      For example, quite a good number of GUI frameworks are absolutely marvellous. I'm talking about wxWindows, QT, and so on.

      Certain problem areas apparently lend themselves easily to oo design. That's probably why you will find oo solutions everybody thinks, with reason, to be marvellous.

      If you are interested in looking at business-oriented software, well, there doesn't seem to be one oo design that has succeeded in attracting admirors in any sizable numbers.

      Regarding well-designed business software, I haven't seen any using oo designs and nobody seems to be able to mention one example.

      Beware of books that mention cats and dogs, being mammals, as an example of inheritance!

  222. OO is fundamentally braindamaged by Anonymous Coward · · Score: 1

    2. It gets people use to coding in OO fashion, which is good.

    OO is not good ! It's just better than structured programming. It forces the people to obey the basic good things about programming like abstraction and modularity. The standard OO has many problems that can't be solved easily. Look at the "Design Patterns"-book, which is filled with examples of workarounds in static OO languages like Java and C++.

    OO isn't the Silver Bullet. The main problem is that the ontological commitment to classes of objects. You can basically have one object belong to multiple classes and the criteria of class division aren't trivial. The classes may not be disjoint. In any given real world modelling tasks there are objects that basically get new superclasses added at run-time or that change class ie. they get new attributes. Like a person joining the military gets a rank and joining a club he may get some sort of club status. Modeling these kinds of temporal changes just not possible in static OO.

    OO is using something that developed pragmatically from the need to abstract _programming_ constructs. Thinking that it can be used to model the real world is buying into to the hype. At least the OO in UML cannot. If OO is going to be taught then it's limitations should also be taught. This is what is often forgotten. I think logic programming is probably a lot better when it comes to modelling real world systems.

    Transition to C++ ? Are you nuts ? Time to move on. C++ is transition technology[1]. Seriously isn't it time for something more reliable for the masses ? You want to have every program crash on you ? Most people should use safe languages, because for most applications robustness and development speed are more important that getting maximum efficiency.

    AC

    [1] Bertrand Meyer, Object-Oriented Software Construction, 2nd ed.

    1. Re:OO is fundamentally braindamaged by haral · · Score: 1

      > You want to have every
      > program crash on you ?

      The problem is not with the language or the method but with the programmer. Many programmers today use a technique I like to call "Programming by tying". That is, they write an initial program. It does not work so they try changing an "i+1" to an "i+2". Works better now. "Let's try calling this function twice here." "OK, now its even better. The program is ready". Later when the program crashes with BSOD, their conclusion is: "Windows sucks!".

      I believe the best introductory course in programming should use a pencil, a paper and a thick book on mathematics. Otherwise "people that can hardly tie their shoes will be able to write Web Browsers using languages like VB or Java"(1). What will happen to our salaries? :)

      haral.

      (1) see the INTERCAL documentation :)

  223. Comment removed by account_deleted · · Score: 2

    Comment removed based on user account deletion

  224. A waste of your hardware by Dwonis · · Score: 1

    Fortunately the rapid improvement in computer speed allows the use of less efficient languages, with the benefit that they are higher-level.

    I really get angry when programmers think this way. When I pay money for new hardware, I buy it so I can do things faster, not so programmers I hire (by buying their software) can be lazy and make inefficient programs.

    I was playing Starcraft recently, but it started acting up, so I installed the old Warcraft II demo, and did it run fast. It was sooo smooth and elegant. Yet Warcraft and Starcraft are essentially the same game engine, but Starcraft was made with the inefficient Windows API, while Warcraft was written for older DOS machines, and therefore had to be more efficient.

    Have you ever noticed that programs that function the same now as they did ten years ago require computers many times faster? Yet the functionality really hasn't changed much, a few extra features, and that's it.

    My Amiga runs at 7 MHz, and can often outperform my IBM PC running at 233 MHz at some tasks. Why? Because Amiga programs are efficient. The average executable is about 1/10 to 1/500 the size of its PC counterpart.

    People who think like you cost me time and money. If programs were written now as they were written ten years ago, your OS would start in 5 seconds, take up 1 MB, and would have a full-fledged GUI and command-line interface.

    C has the portability that assembly lacks, and lacks the inefficiency that higher-level languages have.
    --------
    "I already have all the latest software."

    1. Re:A waste of your hardware by Sanity · · Score: 1
      Your comments about modern software have some truth, but the reality is that most modern software is much more complicated than what was used 10 years ago. In 20 years time do you still want your software written in C? 30 years time? 100 years time? By your argument it should be, yet I somehow doubt it will. It is not about programmers being lazy, it is about getting the job done quickly and reliably. The fastest way to program is in assembly, but nobody does it because 1) The code is very difficult to debug and 2) computers are fast enough that it doesn't matter. If all programmers wrote in assembly language the software we would use would be efficient but primitive. Soon a similar argument will apply to C.

      --

    2. Re:A waste of your hardware by Anonymous Coward · · Score: 0

      I really get angry when programmers think this way. When I pay money for new hardware, I buy it so I can do things faster, not so programmers I hire (by buying their software) can be lazy and make inefficient programs.

      And I as a programmer get really angry when someone suggests that I waste my time on optimization which is not needed for the program to be useful. Tinkering with assembler is nuts. Making good design decisions in algorithmics leads to good programs in any sane language.

      You forget that optimization takes time and if you start to optimize a game for instance, then by the time it is finished it would have run well enough on the current hardware and your competitor already has a game out that looks better and has more features but is less efficient. Business drives game programmers to produce crappy games because they have to release soon, or it'll be obsolete by the time it hits the market.

      C has the portability that assembly lacks, and lacks the inefficiency that higher-level languages have

      Higher-level languages are more efficient than C in producing robust functional applications faster. They usually encourage one to use good data structures (which are a pain to implement in C) and algorithms, as they are easier to implement and high-level languages lead to more dynamic software than static languages like C. The most speed in nontrivial applications comes from the choice of algorithms and data structures, not cheap low-level coding tricks. Granted, games are a special case, they process high volumes of data in a small inner loop so the effect of these tricks is noticeable, but still the data structures and algorithms are the most important part.

      AC
  225. Re:In a perfect world by w3woody · · Score: 1

    int main()
    {
    cout "Talk in C++? Are you bloody nuts?";
    }

    // who notes that only folks who don't get laid probably do this...

  226. To all those who haven't tried Python yet by Scurrilous+Knave · · Score: 1
    I won't even address the concept of trying to teach programming to everyone. Well, yes, I will, if only to say that it's inevitable that our descendants will know more about computers and how to make them work than we do. No, not everyone will be a computer programmer, but nearly everyone will know a bit about programming, enough to get by in the Information Age (whatever that is!)

    Having glibly dismissed that issue, I will now address Python.

    I am far from a beginner at programming. I almost wish I were a newbie again, what with all the weirdness and speed of evolution in the computing world today. But I also try to keep current, so as new languages emerge, I sample them. A few years ago, I became enamored of Perl. I'm now a total hound for Perl--unless the task clearly demands another language for some reason, I will use Perl. I have a ton of add-on gadgets installed on top of my Perl--the Tk (and more recently, Gtk+) bindings, all the libwww stuff, DBI, HTML, Pilot--I've taken the Swiss Army knife and added power, water, and gas. I love me some Perl.

    And still I try new languages whenever I hear about them. Tried REXX (quaint), Rebol (yawn), Icon (cute), Java (ooh, trendy), even ECMA-Script (Java-who?). And while I will certainly use the appropriate language for the task, I keep returning to Perl. (And Ada95, but that's not relevant here.)

    Now for the punch line. Lemme tellya--try Python. No, I'm not going to say that I had an epiphany and am ready to forsake Perl in favor of Python. I had considerable trouble adding on modules to Python--they clearly need something unifying like make-maker. Python is not without its clunky, rough, at times even scary parts. But I keep coming back to it. As much as I love Perl, I must admit that it falls down at a certain size, for certain tasks. So will Python, I'm betting, but it covers a different part of Problem Space than Perl, or even Ada. It's cool. It's spare and lean, with enough muscle to push through the weeds. Once I installed the Gtk+ and OpenGL medules and saw my first 3-D coming out of a Python script, well, I just fell about the place. No, I'm not thinking of giving up Perl. But I'm also not going to give up Python, either, at least not until I learn a lot more about it.

    So if you were on the fence, let The Knave give you a friendly push. Run through the on-line Python tutorial. It's worth making up your own mind about it.

    Oh, and for the record, I fully agree with the others whose advice is to learn as many languages as you can. Programming performance has been shown to correlate much more strongly to breadth of experience than depth. I'd far sooner hire a kid who had five years in the biz and knew ten languages than a veteran of ten years in a VC++-only shop.

  227. BASIC? by justinw · · Score: 1

    While, I am not the biggest BASIC fan (I started with BASH and C), it seems fairly simple for the basic (no pun intended) llama to learn. At my school, we have an Introduction to Programming class which I forced my girlfriend to take, and she seems to be able to grasp onto the concepts although she hates it like no other. I goto a college-prep school/fascist institution and we have programming for every year sort of. We hired a new guy who knows nothing except how to turn on a computer, so he just gives us books to read and tells us to fix the school's network when he crashes it. :-)

    Just a thought...

    --
    Justin W. Williams
  228. Some reasonably WELL-informed bigotry against VB by Anonymous Coward · · Score: 0


    Java is a radical dictat consisting of number of irrelevant dogmas about programming

    WTF is that supposed to mean? You sound like some kind of right-wing and/or libertarian wingnut.


    VB is a compromise that works fine for typical custom apps that manages typical business situations that you will find in the average company. . . . When you use VB for this kind of apps, you can't beat its productivity.

    Actually, you can use a consistent, rationally designed language that allows you to do some real programming while still offering RAD goodies. I don't work for the Borland corporation and I don't own any stock either, but I'm about to start praising Delphi here. Delphi is an excellent example of how VB ought to have been done. I can't see any sense in wrestling with the labyrinthine and arbitrary syntax of VB when I could be enjoying the relatively mild inconveniences of Pascal. It goes beyond mere syntax as well; since Delphi/ObjectPascal supports normal low-level data types and since it's a genuinely compiled language, interacting with the API (sometimes you just have to do that) becomes extremely easy, and much time is saved. Saving time == greater productivity, the last time I checked. Aside from the miserable syntax, the greatest problem with VB is the fact that you're stuck in a padded cell. How easy is it in VB to handle window messages that the framework doesn't handle for you? What about controls that the framework doesn't support? Once you're done fighting against the language itself, VB does indeed provide extremely convenient access to all the goodies that the designers thought you might want -- but it puts monumental barriers in between you and anything that they forgot about, or didn't know about, or that they just thought you wouldn't need. And when you hit that wall, "productivity" becomes a dead issue.

    Delphi isn't perfect by any means, and VB isn't pure evil either. However, I (and a lot of other developers who've used Delphi) have found it to be a technically preferable -- and more productive -- solution to the same problem that VB addresses. At this point in my life, I don't use either. My first programming job was with Delphi, but thankfully a bunch of C++ bigots revolted and they switched all the Delphi projects to C++ Builder (also a very nice tool, for its purpose). Nowadays I do GUI's directly with the API, or else with MFC. I prefer the API, because it's easier and quicker to work with when there's something genuinely interesting to be done. That, of course, is where the rubber hits the road for most people who dislike VB (and this is where I'm going to justify our mutual use of the word "bigotry" in our subject lines :) -- Many of us who sneer at VB are not in that 95% whose "programming" career consists of wiring together components that somebody else wrote in a real language. The "productivity" of VB applies only to mickey-mouse nonsense like writing corporate database front ends. When you have to write serious code to do real, low-level tasks, you use C/C++ because VB simply cannot be used to do any actual programming of a computer. It's clumsy, inefficient, irrational, and impractical. When somebody writes a corporate database GUI in VB, and claims that C and C++ have been rendered irrelevant thereby, he's forgetting that those languages were used to write the DBMS, his IDE, his "compiler", his operating system and its shell, and all of the GUI components he's wiring together. What's left after you've written all the interesting things happening on the computer? Toymaking. Database front-ends. Occupational therapy for failed accountants.


  229. OO, not true by delmoi · · Score: 1

    The first real programming I did was in C++ and Java with much object orientation, it is *NOT* a hard thing to understand in anyway, at all. The only people who have trouble with are people who are stuck in a procedural mindset, and stupid. (and believe me, there are *a lot* of stupid people in computer science).

    Java is a very elegant and intuitive language. Also, I think we should be teaching OO from the start, so people don't have a hard time learning it later on.

    The concepts aren't that hard, and with Java, neither is the coding. (though, going back to C++ from Java for a project was a bitch.)
    "Subtle mind control? Why do all these HTML buttons say 'Submit' ?"

    --

    ReadThe ReflectionEngine, a cyberpunk style n
  230. My opinion by jamesm · · Score: 3

    As someone who has done an undergrad degree in CS and is currently working in the industry for a large company (they don't get much larger), I would say that I strongly endorse Smalltalk as the best language for teaching the fundamentals of OO. If you haven't heard of it, Smalltalk is a language with a very simple english-like syntax; the syntax can be mastered in less than a day. This is very important, because many languages which are touted as great for teaching have such a massively complicated syntax that the only time the entire rules were bound together in one volume, it underwent gravitational collapse and became a black hole (apologies D. Adams). I've seen students get so caught up in the syntax of these languages that they lose sight of the fact that they are supposed to be learning how to PROGRAM, not how to PROGRAM IN (insert language of choice for this year).

    Many of the "new" features of a language such as Java were in fact borrowed from Smalltalk, which has boasted them for over 20 years. These features include Virtual Machine/Bytecode technology and Garbage Collection. However, Smalltalk has many other features that make it ideal for teaching. For example, EVERYTHING is an object: no base types, no "magic" classes that aren't really objects, etc.; Java sacrificed these critical features in the name of efficiency.

    For a time, the university that I attended taught Smalltalk as the first year language (after I had gone through...). Unfortunately, choosing a good language is only half the journey. I saw, much to my dismay, that rather than getting a solid grounding in Object theory, students were learning useless and irrelevant things like how to put pretty buttons on windows. I realize that SOME visible gratification is necessary, but delving right into widgetry before the basis of programming has been drilled in is useless. Such things are implementation dependent, and much more importantly, language dependent. When Java becomes the thing of the past, there will be 200,000 Swing programmers out there who are screwed because the only thing they know how to do is add a component to a panel. They don't understand the deeper issues at hand, and will find it hard to adapt to new technology because they will have to learn it all over again. Given a solid grounding, any new language is simply a variation on principles that you learned in your first year.

    Please don't think that I believe that OO is the solution for everything. I've done my share of C, Assembly, and other non-OO languages. I simply think that OO is a great teaching tool because it mirrors real-life interactions, responsibilities and state of objects. I also know that it is relevant in the workplace, otherwise I wouldn't have a job right now. Even procedural languages can be programmed in an object-oriented manner, although the method of doing so usually overrides the simplicity desired of a teaching language.

    I don't want this to sound like an advertisement, but you can get gnu-smalltalk for just about any unix-like system. VisualAge for Smalltalk is available from IBM on www.software.ibm.com/ad. VisualWorks is available from ObjectShare, formerly ParcPlace, at www.objectshare.com. Squeak is available from www.create.ucsb.edu/squeak.

  231. Let's have a poll by Anonymous Coward · · Score: 0

    Topic: What language woulf you suggest for an intro to programming?

    1. C
    2. C++
    3. Objective-C
    4. Smalltalk
    5. Eiffel
    6. Python
    7. BASIC
    8. Pascal/Object Pascal/Borland-Delphi Pascal
    9. Tcl/Tk
    10. TOM

    I think that covers all the languages that could be practically considered. Did I leave a major one out? (Sorry - as much as I love Perl, there is no way that I think that it would be an acceptable language for an intro to programming. You'd scare off most of your students)

    1. Re:Let's have a poll by Phil-14 · · Score: 1

      You left out scheme. I think it's the beginner's language at MIT and Rice.

      --
      (currently testing something about signatures here)
  232. Everybody?? by Anonymous Coward · · Score: 0

    This sounds a little bit scary to me. Not everybody needs to be using computers. Thus, not everybody needs to learn computer programming.
    They use the analogy to literacy to justify it, but even mass literacy isn't all it's cracked up to be. Literacy isn't really a necessary skill for everybody in a patient society (although a high literacy rate is probably something to be proud of). Plus their 'goals' seem especially frightening to me. They want to turn the our 6th graders into some sort sweat shop for information. Not everybody likes to read and write; not everybody likes to use computers. I can't see the economic (or whatever) gains of an army of hackers as an excuse for making everybody use computers. Newsflash: computers are boring to the vast majority of the public. Gee that would be a real surprise if the drop-out rate rose.
    The trend in society seems to be to require more and more 'advanced' people. Right now, in order to survive (have decent food to eat and a place to sleep), you need to be able to read. In ten years, you'll need to be able to drive. In twenty years, you'll need to be able to use a computer. In a hundred years, you'll need to have genetic enhancements. And the only advantages we're getting are longer work weeks. Python classes are fine. But they are not required learning. I wish people would stop to realise that we can't just keep progressing indefinitely, that our quality of life "in the stone age" (before the mass infiltration of computers, i.e. 1950) was just as good as it is now.
    In conclusion: I just got up and haven't eaten breakfast yet (mind not working). Also, sorry if I misinterpreted their plan. The paper was 77 Lynx-pages long, and from what I read, they wanted to teach computer programming to everybody, like they did with reading and writing. No fun if you ask me. I'd vote for mandatory cooking classes before mandatory computer classes.
    Peace out.

  233. Ugh, JavaScript .. by Hrunting · · Score: 2

    I'm convinced that JavaScript shouldn't even be a language. The ideal is elegant enough, but due to the fact that different implementations exist, and there isn't a suitable consistency to even the most basic of ideas (try working with pull-down menus in forms for what I mean), JavaScript is a pain for even the most hardy of programming veterans to grasp.

    The language isn't what's important. What's important for CS studies is the theory behind the language. Languages come and go (witness Ada, Java, etc), but the fundamentals rarely change.

  234. "Low level baggage"? Oh, my gawd . . . by Anonymous Coward · · Score: 0


    VB allows experts to create apps without the low-level baggage of other languages.

    Could you give an example of "low-level baggage"? I'm trying to imagine what that could be, and I'm drawing a total blank. Low-levelness is a state of lacking baggage, isn't it? High-level languages like VB are huge, lumbering dinosaurs weighted down with arbitrary crap. C is the zippy little mammal that eats their eggs. :) C++ is a zippy little mammal but with giant fangs and claws that sometimes slow it down, but which turn out to be useful anyway. Err, . . . No more metaphors for me, I gotta drive.


    Bigoted programmers still equate VB with novices, which is unfortunate because they themselves could be so much more productive if they only approached VB with an open mind.

    By "productivity", I could (rather rudely and without solid justification, I admit) assume you mean the marketroid/MS definition of the term, as in MS Office: "Productivity" means wasting an hour every day of your life fighting with a tool that wants to do your work for you -- but the trouble is, it has its own ideas about what needs to be done and it doesn't give a damn about your opinions in the matter. Similarly, VB programmers call VB "powerful" because it does things they never told it to do, and because it ignores them when they tell it do do something stupid; C/C++ programmers call C/C++ "powerful" because it does exactly whatever they tell it to do, no more and no less. I've often gotten the impression that the word "productivity" is defined in equally contrasting ways by the two groups.

    Or do you mean productivity in the "lines-of-code written" sense? Ugh, that's even worse. As you say (but I'll say it in a normal tone of voice), "It's the craftsman, not the tool". Anybody who consistently writes 100 lines of code every day (in any language) is either working on meaningless, trivial projects, or else s/he's generating a cloud of bugs and crap that will delay shipping by months when QA finds the train-wreck.


    Honestly, my reaction to the word "productivity" is negative largely because it's a near-meaningless industry buzzword. It has a stink of marketing about it, a stink of quantity-regardless-of-quality. I've never seen it associated with anything useful or worthwhile.

  235. Re:What's wrong with C/C++ and why do nerds like i by aUser · · Score: 1

    Ok. I'll admit my mistake!

    The object-oriented theory is brilliant.

    Unfortunately, nobody has ever been able to apply it right;

    that's why the overwhelming majority of OOD projects have failed to produce any benefits by using OOD.

    We need Einstein to come back to the world!

  236. Pointers RULE, baby! by Anonymous Coward · · Score: 0


    Ever had a memory leak or a dangling pointer? That's what's wrong with pointers.

    That is what's wrong with pointers, true, but it's also what's wrong with inexperienced programmers. Any means of managing dynamically allocated memory is going to lead to memory leaks, unless you do garbage collection; and garbage collection is a serious hassle to implement in an efficient way. It's not a magic bullet. If you really, really need it, it can be implemented in C/C++ anyway. Even not considering dynamic memory allocation, being able to pass addresses around is an enormously powerful and useful thing. It comes with a slight cost in debugging terms, but at the end of the day it's worth it. Heh. I had this code last week that was sort of nibbling on the stack, such that i got to the end of main( ) and crashed 'cause the function in the run-time library that called main( ) lost its stack frame. It was cool. The program was a sort of test harness for some code that's gonna go in a device driver. It's a good thing I found the problem then. :)


    Or are you Linus/God and write 100% perfect code 100% of the time? :)

    Yeah, I see the smiley, and no, of course I don't write 100% perfect code. I doubt that Linus does either, and I doubt that He claims to do so. If he did, that would scare me, 'cause we're all mortal. Every project is gonna have some imperfections; you try to minimize them, and you try like hell to do the best job you can all around. Only God knows where all the bugs are. He'll fill you in when you die. In the meantime, you gotta set some breakpoints.

    1. Re:Pointers RULE, baby! by Anonymous Coward · · Score: 0

      That is what's wrong with pointers, true, but it's also what's wrong with inexperienced programmers. Any means of managing dynamically allocated memory is going to lead to memory leaks, unless you do garbage collection; and garbage collection is a serious hassle to implement in an efficient way. It's not a magic bullet. If you really, really need it, it can be implemented in C/C++ anyway.

      Yup, when I'm writing C++ code I try to use reference counted pointers or "auto" pointers (not auto_ptr though!) as much as possible. Such smart pointer classes can be made very lightweight with almost no overhead.

      Even not considering dynamic memory allocation, being able to pass addresses around is an enormously powerful and useful thing.

      I don't quite agree with this. Being able to pass references around is an enormously powerful and useful thing. In some languages, the only way to pass around references is to use pointers. But in C++, you can and should avoid pointers as much as possible IMHO.

  237. Misconceptions about BASIC by Anonymous Coward · · Score: 0

    This is the classic misconception about BASIC. While BASIC lowers the bar so that poor programers too can write poor code, it also frees good programmers from mundane details so they can write good code. What better platform for teaching good style than one without the intricate details of other languages: puctuation - who cares! preprocessor-schmeprocessor! separate editor/make/compile/link/libary/debug tools - not! Visual Basic, especially, is by far the most productive tool I have used to create Windows applications for a variety of Fortune 500 clients.

  238. Re:What's wrong with C/C++ and why do nerds like i by Anm · · Score: 1

    Object orientation is another one of these miracle cure-all solutions that almost never work, even though no one will openly admit it. By modeling business apps as objects, you will not only lose a lot of time, but, even worse, make your applications much less maintainable. Why so? Because the complexity of business applications is in their data, and the only thing you will do by modeling business applications as object frameworks, is to replicate this complexity once more in your object classes.

    This is exactly what object orientation is suppose to fight, and when used properly it does work. By seperating the implementation from the interface, higher level programs stop worrying about how something happens, reducing the replication. A good object oriented design will abstract the important things, allowing this to happen.

    The problem is there are too many coders out there who know object oriented languages and not object oriented design. And the result is large class with lots of methods throw together, using class as containers.

    This is one of the biggest reasons not to use a procedural language like C (or it's mutant cousin C++) or Visual Basic.

  239. Teach SCHEME by Anonymous Coward · · Score: 0

    It's the perfect first language because:

    Even if you have prior experience in Pascal, C, etc. that's not gonna help you. Everyone starts off on an equal footing.

    Weeds out the folks who are just in CS to learn VB and make a quick buck.

    Perfect for teaching theory. Concepts like recursion are necessary to use the language effectively.



  240. That is just plain stupid by Corndog · · Score: 1

    You are way wrong. Yeah, we sure need another government funded programming language! Hahah! The ONLY people in the world who will truely be programmers are those who want to program. I started with Z80 ASM (I am 20yo). That's hard. C is cake. Even if C is hard, a true programmer will latch on and spend his/her own time to learn it... I am in college and I have to correct my C teacher on a daily basis. This is just pathetic.

    --
    Corndog
  241. VeeBee! by Anonymous Coward · · Score: 0

    <sarcasm>
    why not that wonderful language, VB?
    </sarcasm>

    actually it's sadly true, a lot of young programmers I know are VBers, it's easy, so they learn, then when they try to learn something else, it is to hard cause VB got them used to programming crap. Also, I think VB is the most pirated developer application on earth, it seems everyone has it, but no one ever baught it.

    Speaking of VB, if any of you want to see how VBers act, if you happen to have AOL (yuck), check out PC Dev II it's so funny, all idiot programmers, it's great fun to watch!

  242. Python != Perl by Anonymous Coward · · Score: 0

    I learned Python earlier than Perl, and what everyone says and I verified about Perl is that it is a write-only language (specially at large programs) because it is just too difficult to understand programs written by another person. Because of it, it is bad for Open Sourcing and it is bad for software engineering and real-world applications.

  243. Not too dificult by Woundweavr · · Score: 1

    The current AP test for CS is on C++ (changed for Pascal last year). I took a C++ course 3 years ago and the AP one last year, and its not too dificult. I had ~20 kids in the AP class, 14 took the higher level test, and 4 took the lower test. We had 2 3's, 6 4's, and 10 5's.

    Its definitely learnable, the key is to limit lectures and maximize time actually fiddling with code.

    PERL shouldn't be the first language. If it was Jr. High or younger, I'd say BASIC. I don't know much about Python, so maybe it is easier, but C++ is definitely doable.

  244. Sigh. More ill-informed bigotry towards VB by Anonymous Coward · · Score: 0

    IT IS THE CRAFTSMAN, NOT THE TOOL! VB allows novices to create apps without a huge learning curve imposed by other languages, but novices still produce novice level code. VB allows experts to create apps without the low-level baggage of other languages. In expert handes the level of productivity possible with VB is almost untouchable. Bigoted programmers still equate VB with novices, which is unfortunate because they themselves could be so much more productive if they only approached VB with an open mind.

    1. Re:Sigh. More ill-informed bigotry towards VB by Anonymous Coward · · Score: 0

      I hate BASIC. The language is inelegant and inexpressive. The VB environment may be good, but I'd rather have it in some high-level language, for instance Smalltalk, Prolog, Scheme or Common Lisp.

      In expert handes the level of productivity possible with VB is almost untouchable.

      About the productivity bit... ask Smalltalkers and Lispers about it. The BASIC language is hindering productivity by it's inexpressiveness. Drawing GUIs is nice, but the functionality has to come from somewhere.

      AC
  245. Teach the kids to smoke Pot, not Basic (42!) by el_ted · · Score: 1

    Ya should teach'em to smoke Hemp and to program little things in little computers things like the Conway Game of Life, it is very interesting to little kids ya know, i was fascinated at conway's gol when little kid... about programmings, please just dont teach'em that microsloth stuff caled BASIC oh no, the horror! oh no, the pain! not that! It will make them sick little kids. It will cause'em permanent Brain Damage.
    Ya should teach em the nature, the trees and the rivers. Ya should teach'em what the america indians know. ya should teach'em that computer programming is not about cold mathematics or sick capitalistic economic or stock managing. Ya should teach'em the little Fractals that can come from it, ya should teach em the beauty from little Munching Squares, ya should teach the Schememonsters, and that Computer Programming in an ART!
    Let'em learn the FOO and the BAR, the PHI and the PSI, the YIN and the YANG. Let'em know that they can find answers with it... let them play with 3D... let'em play with Cthugha, let'em play with Music... let'em play with game theory... let'em play with cellular automata and chaos theory...
    Teach'em things like the astounding Demos shown on demo parties around the europe... teach'em that computer shall not complement the real life, it shall SUPLEMENT the real life.
    Go in peace little fellows, for ya i'm telling...

    --
    -- You are in a twisty maze of passages, all alike.
  246. No, it isn't (Re:Isn't this stupid?) by riboflavin · · Score: 1

    Let me preface this comment by saying that I have never used python, I am simply going by what other people have said about it.

    This isn't talking about teaching programming to CS students. This is talking about teaching programming to the general public, early in high school.

    Of course CS students could teach themselves C or Pascal(!?!?!), but neither would be good choices for the general public. The main problem with the two languages you mentioned, aside from the fact that they're a bit complicated, is that neither is object oriented (which seems to be where atleast the education community is moving).

    The two major languages taught in schools today are C++ and Java, however neither of those would a wise choice. C++ wouldn't be a wise choice for a few reasons. The main reason is that there is very little structure in C++. It is quite possible to write good programs in C++, but if you don't start out with a good background in object oriented programming, you won't. The other problem is that at this point in time, there simply aren't any free compilers which fully implement the ANSI C++ standard. GCC has improved greatly, but it's still not there. Would you want every school to have to purchase a few classrooms worth of MSVC licenses?

    Java would be better suited than C++ for the job, as it is a much more structured language, however it too is a bit too complicated. Remember, this is the general public we're talking about. Many of whom don't have computers at home.

    What is needed is a basic computer language which isn't BASIC. From what I've heard about it, I think Python fits that quite nicely.

  247. Monty Pascal's Flying Circus by Anonymous Coward · · Score: 0

    Check the following for a Python example, at the "99 bottles of beer on the wall" site...

    http://www.ionet.net/~timtroyr/funhouse/beer/bee r_n_r.html#python

    That sure looks like ugly code to me. What's wrong with teaching kids a language that might actually be useful? I sorry, I forgot - school isn't supposed to prepare kids for adult life is it? It just crams their heads full of pointless garbage to prove they can pass exams. Bah!

    Any kid who can't cope with BASIC should not be allowed anywhere near a programming editor! (and I suspect would be quite happy about it too)

    +AndyJ+ no account... can't be ****ed

  248. when your that young, C shouldnt be a problem by pixel+fairy · · Score: 1

    python is still probably a better choice,
    but any CS major should learn ansi c.

    im not the only one i know who was programming
    at a young age (i was told 6 maybe 7).

    c++ is complex, but c is simple, and most kids are
    alot smarter than many of you realize. they
    have this amazing ability to pick up stuff and
    learn really fast. we can probably tempt them
    into wanting to write thier own games and stuff...

    The C Programming Language (kernighan & ritche) is
    less than 200 pages without the appendix.

  249. View from a 1988 CS student... by PatDunn · · Score: 1

    When I went to high school back in the mid 80's (1988 graduate), I took a number of computer science courses during high school that taught various languages and databases. When I started college in 1988 we started at CP/M with machine language actually on the 8080 then went forward with assembler/c/pascal on the PC platform when windows was at 2.0x. Since then I've learned a couple of more languages since including Java which is ongoing. The principles I learned from the classes back then helped me learn whatever I want. I think learning languages is great as long as the principles aren't lost. I've now begun to finish for my degree in Information Science and one of my courses this semester is database management. I've worked with databases for a number of years in my job and continue to do so. I will now be able to learn more theory and apply it to the real world, which is all that languages help you do in my opinion, take the theory and apply it to real situations. This semester I am learning database theory and applying it using MS Access as well as Oracle for the clase. I will also be able to apply this to Mysql, postgresql, Star office database, and filemaker pro 3.x which we use at the office. The way to learn is to take the theory and apply it immediately versus later on when you may forget the principles, this will assuredly help you learn. Patrick Dunn Oswego State U - Go Lakers!

    --
    Web Developer
  250. PHB's and the appearance of productivity. by Chris-S · · Score: 1

    You are so right about PHBs favoring busy-work over thoughtful reflection. It's just the age old problem of having highly intelligent people (in this case programmers) often being supervised by less intelligent people (non-programmers, or programmers who got a classic "fuck up, move up" promotion to keep their hands out of the actual code). They don't know any better, so they want to see more "stuff" to think that a project is progressing. I think Steve McConnell nailed it on the head in his book "Code Complete" when he said (paraphrased) that he thinks less of a programmer who endlessly hacks away compared to one who spends much time just sitting and thinking. Programming is an intellectual pursuit and therefore best practiced by thinkers, not busy-bodies. - Chris

  251. Re:What's wrong with C/C++ and why do nerds like i by lars · · Score: 1
    This is more FUD. Many, many projects have benefited a great deal from using object oriented design. The most significant benefits come in maintenance. When you consider how much money is spent maintaining typical non-OO programs, it's obvious that there's a HUGE difference. They did metrics on one of the largest C++ projects ever (it was something at IBM IIRC, a few million lines of code anyway), and discovered that the size of the average method was less than 3 lines of code, and there were something like 4 casts used in the entire system and an order of magnitude reduction in the number of if and switch statements. If you know ANYTHING about programming you should be able to understand the mammoth ramifications of these metrics. You simply don't achieve those kind of results using traditional design methods.

    I do agree with you that if you're not going to use good OO designs, then you may as well not use OO at all. Kind of like if you're going to write 1000 line functions with goto statements everywhere, you may as well not split your code up into functions at all. Just because it's being misapplied so frequently doesn't mean OO is the wrong tool.

    A lot of it is poor management. Companies like to hire these cheap programmers who only know VB, Visual C++ and MFC. Companies like IBM that know what they're doing will hire real, clueful software engineers to be involved with their projects. They know you can't take some typical $50k MFC programmer and give him an important role in designing an OO system. Now, it's unlikely that ANY company will have ONLY experienced object technologists working for them. There just aren't enough good people to go around. But a smart company will have at least one such person working on a particular project as the main architect, overseeing the design.

  252. BASIC doesn't require line numbers by Anonymous Coward · · Score: 0
    Qbasic that came free with MS-DOS long ago (or you could buy a compiling (non interpreter version)) didn't. MS-Visual Basic doesn't.

    Still, it allows the four letter word: GOTO.

  253. Programming is only 25% of commercial product by Anonymous Coward · · Score: 0

    Writing code is only a small fraction of getting a product out and making money off of it. Design, testing, marketing, maintainance consume far more effort. Thus it is amusing to have these HS or college interns think they are hot shots because they've learned a little bit of C++.

  254. C is not a higher level assembler by Anonymous Coward · · Score: 0

    Lisp is. In C code is different from data. You cannot manipulate it as data. In both assembler and Lisp you can.

    AC
  255. C++ is better, and the majority dosen't care by -4 · · Score: 1
    My school has had a C++ program for the past 2 years and while i am not in it i have several friends who are, and all of them do well in it. Why? Because they are nerds, and most people that want to learn programing are nerds.

    This class would have a huge amount of people failing it if it were a requiered course, the majority of the school dosen't care about programing. Thanks to requirements to take the class and the few (around 40) kids who want to take the class they can take on any type of programing.

    This also seems to lead to another point, if he is planning to teach all kids how to program I think that is a mistake, while i advocate bringing out programing into the mainstream this is not the way to do it. Programing appeals to the minority of people that are inventors/builders that want to make something that other people like them enjoy. And trust me, they will come to you, you don't have to go looking for them.

  256. Thats how I did it by Anonymous Coward · · Score: 0

    Not sure how old CS students as I am a Brit, but I know that I was "broken in" with a Procedural language (Modula2), and then we moved on to Python. This was as a first year university degree, but they did take the view that you didn't know anything.

    Personally, I believe that anybody any younger than 18+ may have a bit of a problem getting their head round Ploymophism (Spelling) and Encapsulation etc, but its well worth a go.

  257. why Python? by jetson123 · · Score: 2
    As a programmer, I love Python as a tool: it's a no-fuzz, text-based scripting tool that's very useful for many applications.

    But why start from scratch when it comes to programming environments? Why not build on the decades of experience with other teaching languages, like Logo, Scheme, and Smalltalk?

    And for real-world relevance, the facts of life are that there are hundreds of "little languages" serious computer users need to learn. Rather than pretending that everybody can exist in a little shell, exploring what is out there in the real world might make for a much better introductory CS curriculum.

    And, in fact, even the "little languages" casual computer users encounter teach a lot of interesting concepts: event driven programming (dial-up scripts, game character programming), functional programming (database queries), OOP and message passing (Apple's scripting languages), etc.

    I think it's nice to see more money go to Python, but the proposal really doesn't make that much sense to me. I think the development of a good introductory computer curriculum should start with no preconceived notions of which language to use.

  258. Sounds like Python. :) by st.+augustine · · Score: 1
    BASIC:
    PRINT a, b, c
    -- Or, the way I learned it on the Apple ][ and C64:
    10 PRINT A, B, C
    :)

    Python:

    print a, b, c

    I think Python's a good choice because it is about as simple, syntax-wise, as BASIC, it's somewhat less weird (i.e., less unlike what most of the industry's using) than Lisp, and it's not the industry Flavor Of The Month (unless you're working on RedHat Linux installation scripts). Plus you can use it for real work if you want to.

    --

    -- Some things are to be believed, though not susceptible to rational proof.
  259. Re:What's wrong with C/C++ and why do nerds like i by aUser · · Score: 1

    This is not FUD.

    I'll tell you what the real problem is: some people want to complicate programming to the level that only a handful of specialist can develop a system, where before, millions could produce something useful, with results matching their level, but still solve problems.

    I can guarantee to you that your approach will fail. It's the users who are paying, and they, obviously, don't want what you're selling. If you are still making 50K, kiss your hands, because sooner, rather than later, it may be over.

  260. One True(tm) Language such a good idea? by indigo@dimensional.c · · Score: 1

    I'm not sure if professing a One True(tm) teaching language is such a good idea.

    Remember back when BASIC was the ubiquitous beginner's language? It might have been a good first step toward the fast paced world of FORTRAN programming, but it made it a lot harder for me to grok Pascal and C.

    Most CS students and a disturbing number of professionals seem to think the best tool (language, OS, DB, etc.) by divine providence has to be the tool they know the best. Give them a hammer, and suddenly all the world is a nail. Ever see a beginner write a one line sed command in their pet language? It is not pretty.

    And the danger extends beyond language bigotry. Python is nice, and all, but is it the wave of the future, or yet another dead end? If Python goes one way, and programming trends go another, are we doing the high school kids any great service here?

    Finally, I am not sure Python is the best choice. Even if we stipulate it is the ideal learning language, it is kind of sitting there out on its own branch of the language tree. At least when you learn C (which I am not avocating), you know most of the syntax for C++ and Java, and a goodly chunk of Perl. It is a lot easier to use the right tool for the job when your toolbox is full of tools.

    1. Re:One True(tm) Language such a good idea? by funcused · · Score: 1

      And the danger extends beyond language bigotry. Python is nice, and all, but is it the wave of the future, or yet another dead end? If Python goes one way, and programming trends go another, are we doing the high school kids any great service here?

      Could be just as much of a service if Python were to die (perish the thought). It would force the students to then apply the basic programming principles they learned when writing Python code to other languages. Hopefully this would cause them to think through why they're doing it the way they are leading to better written code.

      I am still in college but won't take another CS course here, it's just not taught well. That and they teach C++ and now Java as intro languages. Ugh.

      -funcused

  261. It's stupid not to do so. by Anonymous Coward · · Score: 0

    Your post doesn't really contribute at all in anything, nor does it have any substance for one to take and reason about.


    > I don't know about US, but in my country if you
    > call yourself a CS student people assume you're
    > smart enough to learn Pascal or C.

    So, what's the point. I can see two things here:
    1) the pervasive "I program, therefore I'm a CS". That's bullcrap! Programming is not restricted to CS only, nor it encapsulates the whole of CS activities.
    2) It is assumed that to learn Pascal or C, one has to be smarter than those who cannot. And this is the stupidest thing ever. Programming does not require any extra level of intelligence; instead it requires a different model of reasoning just as any other discipline.

    The idea of bringing programming to the masses using a simple, non-esoteric language is great. Why should an engineer knows the intrinsic guts of data structures, semantics of programming languages, and stuff like that. To him, a programming language is a tool whose utilization should (must) not be as complex (or more so) than the engineering problem at hand. Why should a financial analyst or accountant be considered a CS person when the only thing he/she wants is to program some analysis macros in Excel? The financial analyst example is even more relevant because it represents (for what I've observed in the "real" world) the majority of non-CS that are doing some programming relevant to their job functions.

    By bringing programming to students prior to entering College, students get a chance to observe what programming looks like, and what it can bring to them. From here, students can determine whether programming is either:
    1) a passion,
    2) something to make a living with,
    3) a tool that complement other "more important" activities (as in the examples I gave), or
    4) some anoying activity one potentially, but not necessarily has to deal with.
    Every and each of these perspectives is a valid one, depending of the students' strenghts, weaknesses and goals. With a simple, small language, students can get an idea of how programming can help (or affect) their jobs. Let the more esoteric languages for later. Whether this may help future CS students is something that remains to be seen; however, this will be extremelly benefitial to those that will pursue a different career path.

    Luis Espinal
    http://www.cs.fiu.edu/~lespin03

  262. Why not Ada? by blogan · · Score: 1

    It seems weird that the article makes no mention of Ada95, considering DARPA uses it for many things. I was taught Ada my freshman year in college, and it seemed eaiser than having to learn both concepts of algorithms and C++.

  263. Re:Yahbut [Re:The use of python.] by ariels · · Score: 1
    Perl may have much syntactic ugliness, but at least it gets variable binding right.

    That's one opinion. Another opinion is that Python supports only local variables, and that global variables are accepted as syntaxic sugar (useful for modules and functions defined out of classes). Some people think that allowing only local variables in an otherwise OO language is good.


    I don't think we're talking about the same thing here. The distinction isn't between local and global variables at all. There are 2 types of local variables, and Python uses a third kind which doesn't really exist.

    Static binding is meant to allow you to write (in Perl, say):


    sub incr {
    my $n = shift;
    sub { $_[0]+$n }
    }


    The python equivalent fails:


    >>> def incr(n):
    ... return lambda x: x+n
    ...
    >>> f=incr(20)
    >>> f(10)
    Traceback (innermost last):
    File "", line 1, in ?
    File "", line 2, in
    NameError: n


    You need to pass n into the lambda explicitly.
    --
    2 dashes and a space, or just 2 dashes?
  264. Use BASIC :) by Anonymous Coward · · Score: 1

    I'm just kidding, or maybe I'm not. I don't know Phyton, nor do I have an idea of what it looks like. However, if it is simpler than C or Java, then it is great. Many educators, specially the most seasoned ones agree that C and Java are terrible tools for education. The whole drive of pushing these languages are based on the following premise:

    1) Use what's used in the industry.

    However, if one is to blindly follow that, schools would end up teaching data structures using VB or PowerBuilder! In my opinion, one should use either some form of pseudocode or a very simple language (Python according to some, or some subset of a QBasic-like language that suppports modularity). What schools are doing is teaching C or Java programming when the whole point is to teach programming using X or Y language. The whole goal is to teach that:
    1) In general, problems can be solved using a step-by-step method,
    2) these methods (which students will later discover are algorithms:) can be more or less implemented the same from one language to another,
    3) there are standard ways to break up a problem so that it can be solved using a program, and
    4) the end goal is not to learn a language, but to learn how to solve a problem.

    These 4 items should be the main objectives on a beginner's level. Once a student knows what's the difference between a while, for, and do-until loop, what's the use of if statements, what flag variables are, and why not to overuse (or use at all) global variables, he/she is ready to tackle more language-specific courses. Universities have to get a grip and understand that shoving whatever language is in vogue just for the heck of it does not benefit anyone. The way the computer industry is, whatever "hot" language a student learn in its 1000 level will most likely be obsolete by the time he/she graduates and dive into the work force.

    Just to make some fun, I say use BASIC. It is a lot simpler and intuitive to say

    PRINT a, b, c

    than
    System.out.println( a, b, c );

    or

    printf( "%d%d%d\n", a, b, c );

    Leave the esoteric crap out, and use it only when it is absolutely necessary:)

    Luis Espinal
    www.cs.fiu.edu/~lespin03

  265. Programming Not Appropriate as Part of High School by the+eric+conspiracy · · Score: 1

    Maybe I am a little old fashioned, but I think that in High School the focus should be on THE BASICS, which if I had to make a list programming would not be on it.

    High School students should be taught how to read WELL, write WELL and do math WELL. This business of including courses like programming in a high school curiculum are a waste of time when the students can't even write a paragraph that clearly expresses an idea.

    Some electives like introductory science, history and foreign languages (some that needs much more emphasis in the US due the increasingly global nature of society) are worth dabbling in, too. But computer programming is strictly a vocational topic, much like nursing, accounting, etc. and has no real place in a basic college prep high school program.

    In any case does anyone think that a high school can teach the real meat of computer programming? Tail recursion? Hash Tables? Data Modelling? Not very likely, and without these concepts you are wasting your time.

    As far as Python goes, I have not evaluated it, so it may be a very good candidate for a introductory course in computer programming. Personally, of the languages I know I would have chosen something like Logo or Scheme. These languages allow one to focus on the real meat of computer programming without getting tied up in syntax issues or implementation specific issues or the warts on the language du jour, especially the horrific BASIC, C, C++ and Perl (C++ delenda est) much to the benefit of the student and the course.



  266. How about Matlab? by Anonymous Coward · · Score: 0

    How about the Matlab programming language? It's easy to learn and flexible, and you can teach students mathematics at the same time.

    Beginners don't have to worry themselves with data types:
    -Everything is just a number. e.g. 3/2 is 1.5, not 1.
    -Indexing an array by say A(1.5*2) is perfectly alright.
    -For loops can be incremented by any amount, not just a number.

    Plus a rich set of mathematical tools and graph plotting functions -- it's a great educational tool.

    1. Re:How about Matlab? by mwillis · · Score: 1

      I like Matlab but it's a great math language, not a great general purpose one. For example: the way it handles strings as arrays is not nice. I haven't got into the 5.x constructs though.

      One thing I always loved about matlab was multiple return values from functions. Are there other languages that do this? (I know, call by reference will do this).

  267. Re:ML would be throwing them in at the deep end by robbieduncan · · Score: 1

    I'm writing this from my workplace, between third and fourth years on this very course. I think that the reason it was difficult to pick up was that it was so different. These kids have no pre-conceptions of how a program looks, or what a normal programming style is. They can fo this easily. In response to its syntax being evil, I can;t really comment, but I've got to use it to implement an Agent-O interpreter next year!

  268. They should use Applesoft BASIC by Jonathan · · Score: 1

    Hey, it worked for me in 1981....

    But seriously, it is interesting how things seem to have gone full circle. In the beginning when computers first entered into schools, "computer literacy" meant programming. Actually, everyone in my school was forced to take a course in BASIC programming. But by the late '80s, "computer literacy" had degenerated to merely being able to use WordPerfect or Visicalc

  269. No need to reinvent the wheel by Anonymous Coward · · Score: 0

    There is already a very good programming language which is very well suited for learning computer science, much more so than Python.

    There are excellent books for learning this language. E.g. "Structure and Interpretation of Computer Programs"

    Yes I mean Scheme.
    See:
    http://www.schemers.org
    The TeachScheme! Project
    comp.lang.scheme FAQ

    1. Re:No need to reinvent the wheel by RGRistroph · · Score: 1

      I agree that scheme is a better first language than Python. That is not to say it would be the language of choice for many tasks; but it would be the language of choice for teaching.

      I recommend the book by Mark Watson, "Programming in Scheme: Learn Scheme Through Artificial Intelligence Programs". (It is not on Amazon right now, but I have seen it in SoftPro and MicroCenter bookstores. You might look at http://www.markwatson.com, but I think that the stuff he used to have there (scheme code from the book) is gone now.) If I were teaching a high school or Junior High level class, I would take this book and the "Structure and Interpretation of Computer Programs" by Harold Ableson, and use a mixture of those two for two to three months.

      Then I would switch to another language. I think you can learn enough scheme fast enough to do interesting things before the semester runs out (the Watson book is just awesome at this), and I think the intellectual stimuli from being forced to the same or similar problems in different languages is just too valuable to pass up.

      I'm not sure what the second language would be. I might let the kids pick for themselves -- either do a small project in a new language, or a larger one in scheme, for a final project.

  270. Re:What's wrong with C/C++ and why do nerds like i by Anonymous Coward · · Score: 0

    Color BASIC, GWBASIC, QuickBASIC have INSTR(). I'd expect the same from VisualBASIC if i'd code for Windows.

  271. Re:What's wrong with C/C++ and why do nerds like i by Anonymous Coward · · Score: 0

    As a software engineer and object technologist with a couple decades of experience, I have to say you're completey off-base in this thread. Have you ever participated in a large project using the OO paradigm? It sure doesn't sound like it. And you're too stubborn to listen to those who have. I have *never* been involved in failed project, and therefore understand what it takes to be successful in large-scale development. The most important thing is that the software be flexible, which is the main goal object oriented technology achieves. You CANNOT achieve this level of flexibility with traditional methods.

  272. Lack of good staff (was Re:Sounds Good...) by rhk · · Score: 1

    I think the lack of good teaching staff in CS stems from the fact that anyone who is at all good at programming can get a better paying job.

  273. 4th grade (thinking and learning skills) by mvk · · Score: 1

    We learned BASIC in 4th grade. By 6th grade, the propeller-heads in my class were programming in assembler on them old Apples. You can start the basic concepts at any age- especially the ideas of object-oriented design and basic algorithms. Add the code later. Programming isn't just about code, and it's not an isolated discipline. Most youth could benefit by learning the types of thinking skills and analysis that are required of a programmer, but useful in many situations. Classification, algorithms, simulation... I believe it's an interesting commentary on the thinking skills required of programmers that some of the most literate people I know, the people who actually read the great works (Shakespeare, Tolstoy, classic poetry) are high-powered programmers (who, BTW, despise M$). -MVK

  274. Introductory Programmming for Non-Programmers by bayinnaung · · Score: 1

    **Many of the people who take introductory programming classes are not going to be programmers.*** The world is now full of engineers, economists, statisticians, linguists, etc. that have programming responsibilities in addition to all the other things they have to do. They need a language for quick solutions and that's what an introductory programming language should teach them how to get quick high-level decisions. Only the people who are going to be computer science majors and write C++ code should worry about shifting around bits and bytes, and three's complement...etc. The programming language taught in introductory programming language classes should allow the student to accomplish a lot, solve difficult problems, create sopphisticated gui interfaces without writing a lot of code. Python with Tkinter, the numerical libraries, the very clear OO programming style, is the best for this IMHO. Extensions in let's say C++/STL also seem easier to make with Perl. It's also less Unix-centric. Python seems to be inheriting the best from Perl while eliminating it's obfuscations. Jon Fernquest ferni@loxinfo.co.th bayinnaung@hotmail.com

  275. It really doesn't matter by Anonymous Coward · · Score: 0

    Once you've programmed three or four languages you start to realize that conceptually most problems are the same and going from language to language only syntax really differs. All languages have their strengths and weaknesses, though I usually find that a choice of Perl or C will encompass most of the problems you could be presented.

  276. millions of people programming? i doubt it. by Anonymous Coward · · Score: 0

    in the proposal they speak of a utopia where everyone, or at least most of the populace, programs.

    ok, lets look at another work horse of the day: the automobile. is everyone a mechanic? does everybody WANT to be a mechanic? most people can change a tire, the oil, even do minor repairs. how many can rip an engine apart and put it back together? exactly.

    to think that teaching everyone to program will promote millions to program and create a new world order of software is rather rediculous.

    programming isn't the sort of thing that most people enjoy doing, not because its "hard" or they "don't know how" or "computers are just so complicated!". its because it involves math (and always will at some level) which isn't a hot ticket item and it involves mildly complex logical thought processes. these are not the pass times of the masses. and there's nothing wrong with that. why must we geeks try and make everyone else like us? we're not the most useful or advanced piece of humanity.

    besides, if everyone's hacking, who'll farm? (the computers? haha... yeah, i see THAT reply coming already...)

    - Aaron J. Seigo (because slashdot doesn't like to give me accounts. *shrug*)

  277. kids and code by jmac · · Score: 1

    The wonderful thing about teaching programming to little kids is the way it offers instant gratification when they do something right, because they made something really real happen on the computer. Compare this to most other stuff kids have to sit through: they write down answers under the little line, and the only thing that happens if they're right is they get a checkmark on their paper. @Whee. Even the simplest computer programs encourage a child to engage in mental play and spontaneous experimentation that's either inappropriate or impossible in more traditional areas of education.

    In my previous job, I got to do a little bit of programming instruction with early elementary school kids. Inspired by books like Mitchel Resnick's "Turtles, Termites, and Trafic Jams", I installed a flavor of Logo on the lab's Macs, and gave the students three lines of code to type in, which would summon a "turtle" (a programmable drawing tool that lies at the heart of Logo) and make it move up the screen a little, drawing a line behind it as it went. The first kid who typed it all in correctly and ran the program saw the results and cried, "My turtle pooped!!" The others, of course, instantly latched on to this agreeable metaphor, and only a moment passed before other children discovered that the length and angle of the poop (despite the fact they probably hadn't yet been taught what an 'angle' was!) changed in certain ways if they typed in bigger or smaller numbers than the ones I provided. And what happened if they added more turtles?

    The class spontaneously broke down into a turtle-poop contest. And thus they all became hackers! Of a sort. :)

    So, really, I support having wee ones learn programming not so they'll know how to code per se (though that certainly is a great benefit), but because it rewards them for thinking and creativity like no other 'ordinary' school activity can!

    --
    jmac
  278. C++ by Signal+11 · · Score: 2
    Just wanted to throw my hat into the ring - C++ is not too hard for first-time programmers. C++ has been my first language that I've actually been serious about (I don't think awk and shell scripting count. *g*). My major problems were making a conceptual leap over pointers, and how to construct classes (hard when there's 50 pages of cruft, and no sample source). It's difficult - but that's what you get for working with such a powerful language like this. Or maybe C++ Primer Plus wasn't a good book to get for a beginner. :)

    I think computer literacy is a prerequisite to programming of any serious type. You need to understand how computers work, how they process data, and the various methods of I/O before you can attempt to program. For people who just discovered that Word has a spell-checker... getting them to learn programming will be about as successful as convincing Microsoft to drop their crummy MFC classes in favor of Java...

    --

    1. Re: C++ by Sanity · · Score: 1
      But then we are right back to where we started! Firstly C++ is too full of legacy junk carried over from C, Java would be better than C++ as they started with a (more or less) clean slate. The problem with C++ is the symbols - you can't deny that for(x=0;x is more intimidating than for x in range(0, 100):. The complexities introduced by pointers add to this visual complexity dramatically. Also, C++ is much less forgiving than Python when you make a mistake (who hasn't used '=' when they wanted '=='). I would expect people to advocate their pet languages for this role, but C++ is taking it a bit far!

      --

    2. Re:C++ by Anonymous Coward · · Score: 0

      Yeah, and differential equations are powerful mathematical tools, perhaps we should teach them to 8 year olds instead of multiplication and fractions.

      Seriously, there is too much going on in the background with OO languages to use them to teach beginners. It's just the wrong way to teach it, you would have to start off telling them 'well I'm not going to explain to you why you need all this stuff, you'll just have to take my word for it.'

      Better to use a less powerful language where you can show them that the computer doesn't do anything they don't tell it to do.

  279. Scheme... by Linus+H. · · Score: 1

    Here at the university of Stockhom we use scheme as the first language. How I would just love if it was Python we used instead. The heavy use of ( and ) are driving me mad. However the book we use ( the structure and interpretatio of computer programs) is very good. It seems like scheme has some really nice features...
    I have what I would claim at least a basic knowledge of C and C++, but scheme drives me mad.
    The only nice thing is that we use emacs and those nice sun workstations =)

    --
    It's called new wave but it's just the same.
  280. Re:Ok. Rant time. by Anonymous Coward · · Score: 0

    right on. Programming is about logic. i wish they'd choose to teach a logic course using psuedocode than any other language. Personally, ive used perl, java (2nd favourite), BASIC (started on GW moved to quick and visual), modula-2 (great language!), C (favourite) and also coded in/on lambda (the moo)...Out of all of them i found lambda/MOO coding to be the most helpful in learning about object oriented stuff.

  281. Object Orientation makes Python a great choice by mvk · · Score: 1

    I don't know much Python, but I know it has fantastic object-oriented faculties, and I know as a Java programmer that OOP is the future of programming. The thinking skills required to be a good OOP programmer can easily be taught in the context of a Python class.

    The local HS's are teaching VB as intro to programming. Hello!?!?!

    -MVK

  282. Hehe...Pascal was made for this... by Anonymous Coward · · Score: 0

    Pascal was designed for a person's FIRST programming language. I learned it at around 11-12 years old. I made a game :) Basic is CS 1, Pascal is CS 2 (my first year was CS2), and CS 3, CS AP* is C++. I find that this line is quite sufficent. After all Python is a scipting language, not programming...theres a difference...a big one. Besides...what difference does it make what language? Computer Science is the study of creating algorithims, not how to program...

  283. Yes Everybody!! by Dominican · · Score: 1

    Given the increase use of computers in most societies it would be helpful for kids to be involved with them.

    Athough I have not read this plan I think it misses one important point. There are still many schools with no computers. There should be first and foremost a plan in trying to have computers available to most kids.

    After most schools have computers even BEFORE they try to teach programming they should theach the basics of using a computer including some sort of suite, specially now that there are a few free ones, in particular word processing, database and a spreadsheet.

    As for programming I agree with others that they should use pseudo code first and teach concepts. Once one knows concepts the rest is just a matter of syntax.

  284. it already occurs by Anonymous Coward · · Score: 0

    As you said, programming is not something most people enjoy; however, I've work with many people that are not CS (or even Sciences) majors, and yet have to program in order to automate a part of their workload. Best example I've encountered are financial analysts, accountants and actuarials. As a matter of fact, in my prev. job, we equiped our fin. analysts with MS Access and MS Query, and then taugh them a little bit of Excel's macro programming and SQL. Why this? Because, we could give them a "dump" of our data every day at 9:00am, and they would query it and disect the data as they pleased. This enhanced productivity since the analysts could query any questions to the data, and report it and slam it into Excel. They would no longer have to wait for us to create an ad-hoc report, nor would we have to spend hours trying to understand what they wanted and implementing those damned but necessary reports. I have the suspition that this is the case in many other places. So don't be surprised if there are millions already programming out there:)

    Luis Espinal
    http://www.cs.fiu.edu/~lespin03

  285. Anybody give any thought to Java? by ogren · · Score: 1

    I would have thought that Java would have been an excellent choice for a first langauage. And yet it's not even mentioned.

    • It's strongly typed. You can argue for or against strongly typed languages once you are an expert, but I think that most people would agree that its good to start with a strongly typed language.
    • Cross-platform. Like most of the other languages, but an important requirement nonetheless in a educational environment.
    • Useful in the real world. This is one of Java's best advantages over Python in my opinion. Java programmers are in great demand right now. Not that there isn't also a market for Python folks, but the Java market is much bigger.
    • Highly flexible. This isn't a language that is tied tightly to any one type of programming. Network programming can be easily taught from a base understanding of Java. So can multithreaded programming. Or UI programming. Or non-interactive programming. Or even database front end programming. I don't think that most of the other languages mentioned are quite as flexible.
    • Availability of third-party tools. Not that I want to raise everybody to be dependent on IDE's, but having good IDE's is critical for some beginning programers. Especially ones that have been raised in a Windows world.

    Please don't take this as a flame against Python or the other languages mentioned. I actually think Python is pretty cool, even though I don't know it very well. I just think that given the capabilities of Java and the role of Java in the marketplace, Java was at least worth mentioning.

  286. Education -> Advancement by zealot · · Score: 1

    I think this is a great thing. I'm a technologist... I'd like to see technology cheap and plentiful for everyone to use. But if this is to happen, if computer technology is going to have such a large impact on people's lives, then I think people need some basic education on computers and programming. Computer knowledge needs to be something for the masses, not the elite few. This way people would be able to have their computers do what they want them to do, and understand the limitations of the devices.

    One reason why this may never happen is because if computer knowledge became common, if everyone could program, and if programming languages were developed to make programming simpler; then jobs with computers and programming wouldn't be high paying and considered "hot" as they are right now, they would be considered menial and low-paying because it would no longer be the job of a specialist (oh sure, there would be a few high paying jobs for the true geniuses, but not many). Current techology companies may claim that technological advancement is their goal, but really profit is. It just so happens that the two coincide... but if their jobs and profits were threatened by consumer education, they'd fight it all the way. From my point of view, the long term goal of the computer industry should be to obsolete itself.

    This education isn't intended for those with an interest in programming, it's intended for those who won't be doing that as a job... it's general education to give you a better understanding of how the things that have an effect on your life work. For example, a friend of mine is a math education major. Last spring she took an intro programming class in C++. With this basic understanding of the mindset it takes to create programs, and the debugging process, and the use of libraries, just last night I was able to give her an explanation that she easily understood about how OS's use dynamically linked libraries, and why her win95 machine has gotten so much slower and more unstable over time after adding many more programs.

    General education is a good thing. Whether you make it your life's work or not, a little extra knowledge is always helpful.

    --
    He said, "You'll be able to tell your grandchildren that you helped assemble the first NT supercomputer," and I cringed.
  287. ML would be throwing them in at the deep end by Sanity · · Score: 1
    I quite like ML having learned it at university (in the department that invented the language, University of Edinburgh, CS dept), however I don't think there is anything that would put kids off faster. Even second year CS students, all of whom knew C, and probably several other languages, found ML extremely difficult to grasp initially. Also, ML's reliance on recursion, while nice for those who appreciate the finer things in computer science, would really baffle many kids.

    --

  288. sounds familiar by Sanity · · Score: 1
    This sounds a little like the old argument assembly language advocates used to make. The reality is that in order for computer science to progress, our tools must grow more sophisticated. Fortunately the rapid improvement in computer speed allows the use of less efficient languages, with the benefit that they are higher-level. To insist that students start with the lowest common denominator would hold back progress.

    --

  289. C++ hard? by supz · · Score: 1

    I can tell you firsthand that C++ is just too difficult for first-year CS students in high school

    I really have to disagree with that. I took Pascal my first year in high school, which is a Junior course in my HS, and I took C++ sophomore year, a senior course. I had absolutely no problems learning either. I don't know much [anything] about Python so I'm not going to talk trash about it, but I think that C++, even though it's hard, should be one of the first languages anyone learns, because it demands that your programming be organized, indented, and aesthetically pleasing. I know a whole bunch of programming languages and C++ has got to be my favorite.

    1. Re:C++ hard? by Anonymous Coward · · Score: 0

      In my first year of high school, I took CS. This was the first year it was C++, not Pascal. I was one of, at most, three people who didn't give up after trying to deal with C++ (then again, I had prior experience with it). Some were computer literate, some were not. Some were eager, but with the few exceptions, all gave up. It was very disappointing.

      Last year (second year of high school), I took AP CS (a class dominated by juniors and seniors). Almost none took the class seriously. Less than 10 of us took the exam at the end of the year.

      At the same time (last year), I did some work on my own, some of which was helping the first-year CS students. My experience was basically the same as my first year, only with lots more Quake :)

  290. Re:In a perfect world by Anonymous Coward · · Score: 0

    Mrp sucks.

  291. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  292. good idea by Hector · · Score: 1

    I think this is a very good idea. Starting out with a programming language like java or c++ is kinda hard to just jump into for beggineres. I personally haven't used python, but ive used perl Which i gather is in someway simliar. And its a nice easy langauge. In addition, i know here at the university Im at the beggingi CS class is taught in scheme for the exact same reason they propose to use python, so it works and its a god idea, but thats just my 2 cents.

  293. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  294. You can't set a standard here. by Stonehead · · Score: 1

    My university first teaches Clean, a functional language, second C++ and third Java. Clean is seen as an easy language to get students starting, however I/O is uneasy and GUI-programming heavily in development. I don't think the teachers would be willing to change to another introductional language; Clean is being developed here and is the status symbol of our theoretic department. More general, I am afraid that you can't set a Programming Language standard. HLLs have always been subject of religious debate. The computer world is dynamic, but teachers will stick to their own favorite language.

  295. Ok. Rant time. by washort · · Score: 2

    Um, pardon me if I come off sounding elitist, but programming is not something that can be taught to your average user without a *lot* of background work. Teaching someone to program without having them understand what the heck is going on inside the machine (as it seems they want to do) is Bad and Wrong.
    Furthermore, the choice of Python because it's "easy on the eyes" and has "simple syntax" is questionable: Python has its own quirks and weirdnesses that make it just as bad as Perl/Tcl/whatever.

    Programming is *not* about languages. Programming is about problem solving and algorithm creation/manipulation. Once you understand these ideas you can learn almost any language and implement them. Granted, there are are a few different programming "styles" available (imperative, applicative, declarative), and learning to translate your solution into those molds is important, but understanding the basic problem-solving and algorithm manipulation *must* be done first, before any actual "coding" begins.

  296. It's not just one language, it's a stepping stone by Woodlark · · Score: 1
    Think about how everybody learns to read and write in elementary school. They will learn to write in English (or Spanish, French, or whatever the native language is). But how many of those people ever go on to learn to be fluent in a second (or third, or fourth) language? Sure, many high school districts require a couple years of learning a foreign language, but in those two years, few people ever learn or even remeber more than how to say "Hello" and other basic phrases.

    I beg to differ, but will present the exception first. When in Elementary school in Saudi Arabia (an American one) we used to have Arabic classes. I was doing quite well in it, but in third grade it got pulled permanently from the curriculum because of parents going to the PTA. My Arabic now consists of a 20-word vocabulary.

    When I was in 6th grade, I started learning French. I was fluent by 11th grade. However, since I'm no longer taking classes in it, it has dropped to a conversational level, even though I'm living in Quebec. The only languages I only remember basic phrases like "Hello" are those I asked friends how to say them in: Russian, Italian, Spanish, Japanese, Cantonese, and so on. I will admit, the Junior High level stuff didn't really stick too well, but the High School stuff stuck like glue.

    By weaning people on Python or any single language, many people will only use Python for the rest of their lives. Python is a good language, of course, but has its limitations. Also, these people will only be able to modify other Python programs to their needs, and would just shrug their shoulders at the vast majority of code written in C, C++, Perl, and other languages.

    I started learning computer languages in University. I took the Intro to CS course over the summer in just two months. We started off with Pascal, and then in the last two weeks learned C. The Pascal was, to put it not too bluntly, very easy to learn -- the hardest part was learning pointers (wasn't until 4 months later that I finally mastered them). Yes, I found the C difficult to learn then, but since I needed it for a class the very next term, I found I was able to cement it in my mind. This next class I've mentioned also taught us MIPS Assembly. I'm now learning C++ and the whole idea of OOP in about three days for another course, and am actually finding it quite workable.

    I don't translate my C/C++ thinking into Pascal just because that's what I first learned. I learn the other languages to the point where I think in them. If anything, I think of my Pascal/C/C++ in terms of Assembly, which I find to be a much healthier approach.

    What I'm saying is: sure, if you're not gonna do a good job teaching any of the other languages, of course the kids'll translate back to Python. But they do need an introduction to the *feel* and *style* of programming. And then, if you do a decent job with the next languages, the kids'll think in terms of them, too. They'll be able to look at a problem and decide which language would be best to solve it, and that's what we're trying to breed here.

    Droit devant soi on ne peut pas aller bien loin...

    --
    Droit devant soi on ne peut pas aller bien loin...
    Straight ahead of him, nobody can go very far... -- Le P
  297. Scheme?? I don't think so by Dominican · · Score: 1

    Maybe so many years of coding have made me biased, but the few times I have had to help some friends with scheme did not made me appreciate it a bit.

    In particular I found the syntax got too much in the way.

    From what I gathered in the comments (have not read the article) this is for intro to programming and most likely won't get too much into complex issues. Syntax can aid or be an obstacle. In the case of scheme and the C family of languages for that matter, syntax seems more of a roadblock than an aid.

  298. What's wrong with C/C++ and why do nerds like it? by aUser · · Score: 5

    I think we should all have understood by now that the criteria by which people assess the quality of a programming language/tool are mostly wrong. The worst of which are: bit-level performance and object orientation.

    Bit-level performance is a non-issue for most programmers. The operative word here is "most". What do most people write anyway? Well, just look at who is paying most programmers: corporations. What do they need from programmers? Programs that run their business, that is, programs that help with order processing, manufacturing, payroll, accounting, and so on. Most of these programs spend 95% of their time in larger frameworks that manage the databases, the GUIs, et cetera. Therefore, your language of choice may be fast or slow, it won't make any difference. If you want speed in these applications, chose a fast database, a fast GUI framework and fast, other supportive components.

    Object orientation is another one of these miracle cure-all solutions that almost never work, even though no one will openly admit it. By modeling business apps as objects, you will not only lose a lot of time, but, even worse, make your applications much less maintainable. Why so? Because the complexity of business applications is in their data, and the only thing you will do by modeling business applications as object frameworks, is to replicate this complexity once more in your object classes. And then you will have an extra chunk of code to maintain, when you change your database structures. Next to your database design, your GUIs and your batches that you need to maintain, you will need to maintain the so-called business objects. These business objects "know" your data structure, and, therefore, have to be informed of changes in it. The duplication effort is ridiculous and only pays off in wasted time.

    The whole concept of business objects is a laughable hype. Quite naturally, the more someone is ignorant and incompetent, the more he will jump from one hype to another, trying to use the latest fad, and miserably fail. This is normal, because the only way incompetent people can judge a technology, is by hyping along with the rest.

    I didn't say that object orientation is a bad idea altogether. I've said that it is of no use in typical business applications, and even dangerous.

    What is a true criterion for quality in a language/tool? Well, as ever. It's definitely not new. Read the classical Greek literature for the source of true wisdom. A language/tool is of high quality if it has a high level of self-knowledge.

    A relational database is a great tool, primarily, because of its self-knowledge. You can ask it what tables it contains, what relationships there are between those tables, what columns they contain, what datatype they have, and so on. You don't need to enumerate all fields in a particular table in your program. You may prefer to work at a more abstract level, and define rules that work in general, and only mention the exceptions to the rule. Therefore, You may manage your code by exceptions, instead of replicating knowledge all over the system, and create potential for inconsistencies.

    Most /.ers seem to dislike Visual Basic. There can only two reasons for this: a deeply rooted hate for Microsoft, and pure ignorance. There may be a lot of things that can be done better in VB. However, VB and Access have quite a large amount of self knowledge. You may, for example, ask most classes, in code, what their properties are, what their methods are, and what their parent class is, and so on. C/C++ not only lack self-knowledge, even worse, these languages require you to code details that are of no interest to problem at hand. C/C++ is for people who don't understand programming. What is programming? It's rather simple: A is the amount of time you have, and B is the result that you need. If you then chose C/C++, you should go and see a shrink.

  299. Re:In a perfect world... by Anders+H�ckersten · · Score: 1

    ...C++ would be the perfect language.

  300. Re:We Need More People Like You by leiz · · Score: 1

    I go to a fairly good school, with about half the kids taking at least 1 AP class and our academic teams going to state / national competitions. Our technology department has a large gov grant and every class room has at least 2 computers and the computer labs have 20 celeron 433s each. (while nearby schools only have 486s)

    Unfortunately, our CS courses here suck like *beep!* CS / CS Honors / AP CS are offered here. CS doesn't actually teach programming and all kids learn to do is make webpages using netscape composer and adding little animation and crap by stealing javascript codes and images from other sites. CS Honors teaches a little bit of C++ to prepare kids for AP CS. But AP CS is a joke and we ended up with 67% of the students failing the AP test. (I got a 5 of course...)

    Anyhow, I blame the teachers for this. None of our teachers are real CS people. The CS/CS Honors teacher used to be a math teacher while the AP CS teacher used to be a physics teacher. Either one of them knows anything about computers and if you ask them what PERL is they'll tell you it came out of an oyster.

    Well, our CS classes are going nowhere, if someone is a real programmer and is willing to teach... perhaps you should come and take over... we have a lovely school and lots of technology waiting for you! :)


    _______________________________________________
    There is no statute of limitation on stupidity.

  301. The Real Purpose of Programming for Everyone by chaos · · Score: 2
    From the Computer Programming for Everyone essay:
    We compare mass ability to read and write software with mass literacy, and predict equally pervasive changes to society. Hardware is now sufficiently fast and cheap to make mass computer education possible: the next big change will happen when most computer users have the knowledge and power to create and modify software.

    The open source movement claims that peer review of software by thousands can greatly improve the quality of software. The success of Linux shows the value of this claim. We believe that the next step, having millions (or billions) of programmers, will cause a change of a different quality--the abundant availability of personalized software.

    Please remember that the point of this proposal is not to churn out programmers who can write CORBA applications, or add to the Linux kernel. This proposal's main purpose is to raise computer literacy, which includes the ability to understand the very basics of how a computer works, and how to make modifications to existing applications. Hopefully this education program will also help future systems programmers and computer scientists get a head start, but I will address that issue later in this comment.

    I believe that having lots of programmers who can modify and extend applications is a good thing. Yes, most people will not be good programmers, but this program, if implemented well, will give people the skills and tools to make real contributions to our software that we might not even be able to conceive of right now.

    Raising computer literacy will also help in discussing and deciding technology issues as a society, especially as government establishes a larger role in privacy, security, and censorship across the internet.

    I have read many posts questioning Python as the choice for a first language. How many of you first learned Basic, then went on to learn C, C++, assembler, and other languages? Did Basic really impede your development as a programmer, and do you really think that Python would be worse as a first language?

    My point is that future hackers will learn to use other languages, even if their first language is not C++ or Java. I learned Basic in high school, then Scheme, C, Lisp, and assembler (MIPS) in college. I somehow doubt that learning assembler was made any harder or easier by learning how to program Basic on a Commodore 64.

    One previous poster made a very good point that high school should be for learning basic skills such as reading and writing, and not for vocational skills. If done properly, learning how to program can teach one how to think logically, communicate effectively, and organize information in a coherent manner. In order to motivate students and give them positive feedback, it may be necessary to give them work that produces something that is useful, or at least works. I know that it was frustating to only be able to print "Hello world" when I was first learning C.

    This is why a user friendly development environment is vital for teaching programming to everybody. On a related note, does anyone have anything to say about the DrScheme? This is a Scheme development environment for beginning students. Is Guile a useful thing for DrScheme, or are the two things irrelevant?
  302. numerical python, Numpy! Re:How about Matlab? by Anonymous Coward · · Score: 0

    matlab is expensive, I'd suggest that numerical python http://www.python.org/topics/scicomp/numpy.html would provide as good a base as matlab for interactive math & linear algebra.

  303. No Everybody!! by Anonymous Coward · · Score: 0

    Hmm I still don't see the benefit of teaching things to people that they hate. I hate to quote RMS (it's a good way to get ignored), but he did have a good insight wrt the educational system: the problem with computer classes is that they're designed for students who don't want to be taking computer classes. Target your classes towards the people who like CS, not the public at large. Getting kids access to computers could be all fine and dandy (I don't want to go off topic), but please leave computer science to people who show some sort of interest in it. I suppose one elementary grade class is an OK idea, since it gives kids a chance to get enough of a taste to see if they're interested, but I wouldn't get too caught up in them actually programming something. As a side note, these "please use my preferred language! It rules over Python!" posts are getting a little old.
    And again, I don't see the trends in society (read "economy") justifying it. I'm in the good position where I actually like programming. But if car mechanics were the "hot" thing, I think I'd rather go hungry than take mandatory courses on car mechanics (or worse, do car mechanics all day at my secretarial job *shudder*).

  304. I strongly disagree by Anonymous Coward · · Score: 1
    Like many Slashdot readers, I started programming when I was about 7. I started out writing script-like programs in BASIC on an Apple ][. Then when I was 11-12, our school had a bunch of Macs, so I started playing with HyperCard -- another scripting language. It wasn't until I was 14 that I started to do any programming at a lower level (I wrote a BBS system in Pascal).

    I'm quite sure that if C was the only language available to me when I was starting out, I would have never become a programmer. As a beginner, there is simply no way that I could have started out if I first had to learn about physical things like memory management, library functions, the preprocessor, include files, and so on. Even having to write "int main..." or run a compiler to get my program to wrok would have hindered me. As a beginner, the focus should be purely on LOGICAL concepts.

    Now, I was only 6 or 7 and couldn't read well enough to understand a programming manual. People beginning at an older age would be able to handle more complexity. But still, even at the high school level, the focus for beginners should be on the logical aspects of programming. A beginning language should allow the student to do useful things with as little overhead as possible. Python from what I've seen of it seems to allow this (Perl, C, and so on certainly do not).

    One of the biggest problems I see in other young programmers in the industry is that they've become TOO aware of things like memory management, C library functions like strcpy(), etc. I think this is at least in part due to the fact that they've ALWAYS had to deal with these things when writing code. At the company I worked for this summer, I saw several older, full-time programmers whose code was littered with mistakes:

    • Their high-level C++ code was littered with new and delete when they had no reason not to use auto or reference counting pointers.
    • They wrote their own linked list implementations when they could easily have used an STL container class.
    • I saw them produce object oriented designs that were basically just procedural designs with the data partitioned into objects. A very expensive mistake.
    • They used inheritance for the sake of code reuse, resulting in improper inheritance.
    • They had Get/Set methods all over the place.
    • They used C-style strings all over the place instead of std::string or some other string class.
    The end result was code that was more complex than even the equivalent non-OO procedural code, and MUCH more complex than a proper OO design. These problems seem to be most common among programmers who were trained as engineers. Computer Science majors usually learn many languages and won't be used to solving the same problem the same way all the time. Engineers at most universities I'm familiar with use C and C++ pretty much exclusively. I think focusing on teaching purely C or C++, especially to beginners, is a huge mistake.
  305. Languages vs. Programming Languages by Anonymous Coward · · Score: 0
    I don't translate my C/C++ thinking into Pascal just because that's what I first learned. I learn the other languages to the point where I think in them.

    I agree. I think if you're truly fluent in a language, you don't need to stop and translate. I don't know for sure, since I have never spoken any languages fluently other than English. But the grammar for a programming language is usually considerably simpler than the "grammar" that would describe a real language. And programming languages are surely more closely related in terms of constructs. For example, Pascal and C are so similar that they may as well be the same language - like American English and British English.

    I'm now learning C++ and the whole idea of OOP in about three days for another course, and am actually finding it quite workable.

    Sorry to burst your bubble, but there is no way you can understand the "whole idea" of object oriented programming in three days. Many programmers spend years writing C++ code using classes, inheritance, and polymorphism, and still produce "OO" designs that are basically just procedural code with the data and functions split up into classes. It takes a significant amount of real experience before you can become a good object oriented designer. Furthermore, learning the C++ language is orthogonal to OO design, and just as difficult. It's not hard to write C++ code, but to truly master the language takes at least a couple of years of experience.

    (Un)fortunately, the majority of people who do object oriented programming in C++ are not competent at what they do. I consider myself competent, but I know that there is still room for me to improve a lot with experience. Just be aware that simply being able to write C++ code that works, and being able to use it's object oriented features does not make you a competent object oriented C++ programmer. Get a lot of experience, study lots of theory, read really good books like Design Patterns, Large Scale C++ Software Design, Rapid Development, etc. That's the minimum it takes to become a good software engineer.

  306. Re:Programming Not Appropriate as Part of High Sch by Jackson · · Score: 1

    I think programming is very appropriate for H.S. H.S. should be a place where you get some exposure to a variety of topics to help you choose a specialization (maybe) later. When you learn programming, theory is nice, but you must be able to produce a few actual programs to get that thrill of having produced a program yourself. If it leaves you cold, or it's only so-so, then that's one thing. If it rings your chimes big-time, you may be off on an important new adventure in your life. H.S seems like a good place for this to me.

  307. Java is poorly designed, and a pain by Anonymous Coward · · Score: 0

    You want to see high school students squeal? Give them a strongly typecasted language like java, where every little thing they do causes an error. Where they have to type in 5 lines of code to get a simple thing done. If the difficulty of C is too much, then don't consider java; OOP is no way to start.

    - Rei

  308. Python use in the market by oliverk · · Score: 1

    Didn't Yahoo write their web server from scratch using Python because it was so effective for handling the load? I've seen a lot of comments about Python's "use in the real world" and it doesn't get much more real than what www.yahoo.com faces.

    --
    ---- Please be nice in case my Slashdot karma ~= my real life karma.
  309. Yahbut [Re:The use of python.] by ariels · · Score: 1

    Python's worst feature, in my opinion, is its half-baked approach to variable binding. Scheme and Lisp programmers have lexical binding (variables are looked up in the defining environment), and even Perl has this (`my' variables). Basic and Emacs Lisp programmers have dynamic binding (variables are looked up on the stack at runtime); Scheme, Lisp and Perl can use this (Perl via `local' variables).

    Python has neither. Well, it has lexical binding, but it's "shallow", meaning the variables aren't looked up in surrounding environments. So you can have a closure, but you must explicitly import (via optional arguments, "n=n"!) variables from surrounding scopes. This is No Fun (tm).

    Perl may have much syntactic ugliness, but at least it gets variable binding right.

    --
    2 dashes and a space, or just 2 dashes?
  310. Before you teach programming... by jflynn · · Score: 1

    I'm sure that it's valuable to teach kids Python, and many will enjoy it greatly. A good thing for sure.

    But I am already awestruck at the horrible lack of foundation many highschool students graduate with. I personally know a college student (senior year) who never learned their multiplication tables. Good thing for calculators! I'm sure the lack of attention to spelling and grammar is also apparent to many slashdot readers.

    The way many primary and secondary schools handle math education is another bar to continuing in either math or computer science. Mathematical fields outside arithmetic, basic algebra, and calculus get very little attention prior to upper division college courses.

    I would like to see a class or series of classes that taught logical thinking, problem reduction, mathematical modeling, and computing in an integrated fashion. As well as programming as a means to solve problems, part of this could be writing documentation (with a word processor, naturally.)

    It's my belief that if you can teach people to think logically, and express themselves clearly, they can pick up any computer language they desire. Even if they don't, those skills will still serve them well in other fields.