Slashdot Mirror


The Best First Language For a Young Programmer

snydeq writes "Fatal Exception's Neil McAllister questions whether Scheme, a dialect of Lisp taught as part of many first-year CS curricula and considered by some to be the 'latin of programming,' is really the best first language for a young programmer. As he sees it, the essentially write-only Scheme requires you to bore down into the source code just to figure out what a Scheme program is trying to do — excellent for teaching programming but 'lousy for a 15-year-old trying to figure out how to make a computer do stuff on his own.' And though the 'hacker ethic' may in fact be harming today's developers, McAllister still suggests we encourage the young to 'develop the innate curiosity and love of programming that lies at the heart of any really brilliant programmer' by simply encouraging them to fool around with whatever produces the most gratifying results. After all, as Jeff Atwood puts it, 'what we do is craftmanship, not engineering,' and inventing effective software solutions takes insight, inspiration, deduction, and often a sprinkling of luck. 'If that means coding in Visual Basic, so be it. Scheme can come later.'"

8 of 634 comments (clear)

  1. From an HCI perspective by williamhb · · Score: 3, Informative

    In my opinion, two issues compound each other. The first is that because functional programming is seen as very pure and simple, there is a myth that Scheme programs do not need much documentation. The second is that Scheme functions do not declare return or argument types. This means that in order to read someone else's code, if structures of any complexity are used, you can have to manually walk the full call depth of each function, possibly many calls deep, just to know what kind of structure it returns in the end. That makes it painful to work with someone else's code, compounding the other well-known problem with computer science education: in the course, you're usually writing your own code from scrach; in the real world you usually have to deal with code your colleagues (or even third party projects) have written.

  2. According to research, its Algol 60 by St.Creed · · Score: 3, Informative

    In Germany, researchers into didactics (teaching) of computer science (Informatik) have done some work on this topic. I recently found it when I was looking into materials for the computer science course in the Netherlands (seeing if I could do better).

    Based on 15 criteria, they ranked 27 languages, ranging from Scheme to Haskell, ADA to Ocaml. The worst language for teaching was, by far, APL (scored a 5, which is the worst), followed closely by Perl. The best language for teaching was Algol 60 (1,50). Second best Python (1,66), 3rd place Ruby (1,88) and scraping in at a 4th spot was Pascal (2,14).

    So to summarize: better dust off your Algol 60 books and compilers :P

    Failing that, Python and Ruby are nice as well for just teaching programming (although if you want to show the distinction between imperative and functional programming I'm not altogether sure that Ruby would be enough).

    ------
    This was found in a (Dutch language) PDF: http://www.utwente.nl/elan/huidige_studenten/overig/OvO/OvO-inf/Eindverslag%20INF.pdf (see page 8 for the German criteria, and page 9 for the results). See the original research (*) here: http://subs.emis.de/LNI/Proceedings/Proceedings22/GI-Proceedings.22-12.pdf (German language document)

    (*): [LH02] I. Linkweiler, L. Humbert. Ergebnisse der Untersuchung zur Eignung einer Programmiersprache fÂur die schnelle Softwareentwicklung â" kann der Informatikunterricht davon
    profitieren?, Didaktik der Informatik, UniversitÃt Dortmund, 2002.

    --
    Therefore, by the (faulty) logic you're using, you're just a cow with a keyboard - osu-neko (2604)
  3. Re:Scheme is the best teaching language by FishWithAHammer · · Score: 4, Informative

    This is very, very true. We lost a ton of kids in my 100-level programming class because they couldn't "get" Scheme.

    That was a fun class. Got to learn a new language and do almost no work that semester...

    --
    "You can either have software quality or you can have pointer arithmetic, but you cannot have both at the same time."
  4. Re:Lisp/Scheme != latin of programming by DrVxD · · Score: 3, Informative

    in fact Lisp itself is built in C

    Errr...no. Lisp originally dates back to the late 1950s; C didn't emerge until the early 1970s. The first working Lisp implementation was writtien in IBM 704 machine language; A Lisp compiler (itself implemented in Lisp) was implemented in 1962 - fully 10 years before the birth of C.

    --
    Not everything that can be measured matters; Not everything that matters can be measured.
  5. Re:Pascal by Hurricane78 · · Score: 3, Informative

    Sorry, but I started with Pascal and then Delphi. And it blocked me. Because I always walked around C/C++, and never really learned it.
    I loved it, back then. But frankly, ObjectPascal, as a language, and Delphi, (as in:) the libraries, are extremely outdated today. After years of Java, PHP, Python and Haskell, I found myself crippled by their lack of features. And only C and C++ beat it in lack of elegance. But C/C++ at least have more features.

    I recommend starting out with Python, and maybe the WebDev area (which is much fun right now, with HTML5, JS, SVG, CSS3, Firebug, etc, in Firefox 3.5).
    And then go straight for the full package:
    C and Java (forget C++, it tries to be C and Java, but fails to beat both) on the practical side, and
    Haskell and Ocaml on the fun and educational side. (With Haskell, you're in for a ride, but it is totally worth it.)

    There is no walking around it, by clinging to simple languages for years. The nice thing is, that when you learn the most advanced languages, you automatically learn to program in a better way in less elegant languages (like using full OOP and functional programming styles in C and JS.)

    --
    Any sufficiently advanced intelligence is indistinguishable from stupidity.
  6. Re:Assembly by MpVpRb · · Score: 3, Informative

    C is not the most widely used commercial language and it certainly does not lead the way in open source

    So...What is Windows written in?

    What is the Linux kernel written in?

    What are KDE and Gnome written in?

    Autocad...Photoshop...MS Office?

    AFIK, they are all C or C++

  7. Re:Pascal by Stealth+Potato · · Score: 3, Informative

    C and Java (forget C++, it tries to be C and Java, but fails to beat both)

    I'll readily agree that C++ is an awkward and complicated language that is absolutely not suitable for beginners, but how can it try to be Java? C++ predates Java by over a decade.

  8. Re:Pseudo Code by Inner_Child · · Score: 3, Informative

    So... you recommend Python?

    --
    Today is red jello day - all workers must eat all of their red jello. Failure to comply will result in five demerits.