Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!


Forgot your password?
Check out the new SourceForge HTML5 internet speed test! No Flash necessary and runs on all devices. ×

Computer Programming for Everyone 475

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.
This discussion has been archived. No new comments can be posted.

Computer Programming for Everyone

Comments Filter:
  • 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,
  • 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.

    http://www.geekrights.org [geekrights.org]

  • > 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".

  • > 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.

  • 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.
  • 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

  • > 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


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

  • 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.
  • 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.
  • 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.
  • BASIC is exceptionally good for learning all sorts of bad programming habits. Aside from that there doesn't seem to be much point...
  • "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.
  • 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. . .

  • 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.

  • ...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?
  • I've never used python or do I know anything about it but wouldn't Java be a better choice?

  • 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).
  • That is outside of the realm of schools, that should be tought by parents, and if not by parents, then by television.

  • 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.
  • 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.
  • 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 [harlequin.com] 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.)

  • 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.
  • 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.
  • by Hrunting ( 2191 ) on Monday September 06, 1999 @02:26AM (#1700634) Homepage
    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.
  • 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).
  • 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.

  • 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 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.
  • 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???)
  • by Fizgig ( 16368 ) on Monday September 06, 1999 @04:48AM (#1700641)
    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.

  • 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...
  • 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.
  • 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.
  • 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.

  • 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.

  • 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.
  • "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.
  • 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? :-)
  • 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...
  • 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.
  • 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.

  • 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.
  • 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.

  • 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.
  • Python has these features, as do Perl and Tcl.
    Actually, I'm not sure what your point is.
  • Computer languages are best leasrned a a younger age than when you are in High School.
  • by scrytch ( 9198 ) <chuck@myrealbox.com> on Monday September 06, 1999 @06:51AM (#1700668)
    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.
  • Umm... someone has already done this and called it Alice [alice.org]; take a look at the Alice tutorial [cmu.edu]. This is one of the inspirations for the CP4E effort, because it's been really successful at letting non-programmers do interesting things.
  • 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
  • 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.
  • 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.
  • 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.
  • 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?
  • .. 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 :-)

  • by scrytch ( 9198 ) <chuck@myrealbox.com> on Monday September 06, 1999 @09:26AM (#1700682)
    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 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.
  • "...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.
  • And "definitely", not "definately". This has to be the most common spelling error in English.
  • 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
  • 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.
  • 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.
  • 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?
  • 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.
  • 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.
  • 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.

  • by Anonymous Coward
    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.
  • 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.
  • 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..

  • by lars ( 72 )
    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.

  • by aUser ( 78754 )
    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.
  • 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 :)

  • Those weren't *mandatory* in C++. If you don't like a feature of the language, just don't use it.
  • > 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.
  • 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).
  • 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.
  • by robbieduncan ( 87240 ) on Monday September 06, 1999 @02:30AM (#1700747) Homepage

    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.

  • 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).

  • > 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)
  • by lars ( 72 ) on Monday September 06, 1999 @07:30AM (#1700773)
    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++.

  • 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.
  • Dude... woefully false. That's all I have to say. Yahoo's web server is apache, which is written in C, so sorry.
  • by Anonymous Coward
    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
  • by Anonymous Coward
    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.
  • Correction: ABC [www.cwi.nl] 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.

  • ... 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
  • 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.
  • 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.

  • by Tom Christiansen ( 54829 ) <tchrist@perl.com> on Tuesday September 07, 1999 @01:52AM (#1700869) Homepage
    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 [cpan.org].

    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.

  • I know quote a few ~11 year olds that can program

    $mrp=~s/mrp/elite god/g;
  • all students, starting from kindergarten will learn C++, forget this english stuff, who needs it? We should all just sit at our PCs and talk in C++ code, never have to waste energy opening our mouths

    now that would be cool!

    $mrp=~s/mrp/elite god/g;
  • by AMK ( 3114 ) on Monday September 06, 1999 @02:57AM (#1700918) Homepage
    This project is at least partially inspired by Randy Pausch's use of Python in Alice [alice.org], 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.

  • by jamesm ( 31089 ) on Monday September 06, 1999 @03:00AM (#1700928)
    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 [ibm.com]. VisualWorks is available from ObjectShare, formerly ParcPlace, at www.objectshare.com [objectshare.com]. Squeak is available from www.create.ucsb.edu/squeak [ucsb.edu].
  • 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.
  • 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.

  • by Signal 11 ( 7608 )
    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...


  • 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 :

    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
  • 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


    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.

  • 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.
  • by aUser ( 78754 ) on Monday September 06, 1999 @03:50AM (#1701047)
    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.
  • 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?

"I have five dollars for each of you." -- Bernhard Goetz