The Best First Language For a Young Programmer 634
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.'"
Re:best first language? (Score:5, Funny)
Re:Assembler (Score:5, Funny)
In before old people telling you about punch cards.
Come to think of it, is there a way to do calculations with kids on/off your lawn?
Obvious answer (Score:5, Funny)
The best first language for a young programmer is english with possibly a little bit of boolean logic, because then he could search Slashdot and find one of the Ask Slashdot stories about what the best first language for young programmers is that appear every couple of months or so.
There can be only one (Score:2, Funny)
Re:Assembler (Score:2, Funny)
Re:Python then C/C++ (Score:3, Funny)
Because <my language> is better than <your language>! And here on Slashdot, we need few reasons to enjoy a good language war. So go away with your "reason" and "logic"! We've got a pointless battle to fight!
And for the record:
1) Java and C# suck because they require N levels of nesting before they can type "Hello World".
2) Assembly/C sucks because they're too low-level.
3) C++ sucks because it's horribly byzantine.
4) Scheme/Lisp/Haskell sucks because they're confusing.
5) Python/Perl/Scripting language du jour sucks because they're garbage collected and hide too much from the programmer.
6) Every other language sucks because it's not my favorite language.
Re:Assembler (Score:3, Funny)
This was before lawns were invented.
Re:Assembler (Score:3, Funny)
Then maybe they should start them with Lisp instead? :)
Then we'll have lots of programmerth all over the plathe. As if nerdth didn't thuffer from an image problem as it ith.
Re:Assembler (Score:1, Funny)
Re:Old School (Score:3, Funny)
Turbo Pascal
What a bloody nightmare. I learned Pascal in high school. Two years later when I learned C, I found myself wondering why the fuck anyone would inflict Pascal on people trying to learn programming. I later ended up maintaining a piece of business software written in Turbo Pascal (and later, stuff written in fucking Delphi) and found myself entertaining fantasies of building a time machine and choking Anders Hejlsberg to death in his bed in 1980 before he could inflict his monstrosity on the world.
C++ or Fortran (Score:5, Funny)
Personally I would recommend C++ or Fortran since that should quickly kill their interest in programming. And I really don't want more competition from bright young people.
Obviously Emacs Lisp (Score:2, Funny)
Re:Assembly (Score:3, Funny)
Assembler is great but it's a horrible choice for a first language. It was fine as a first language 30 years ago when people had simple expectations for software. I'm not saying to never learn it, but it's unnecessary as a first language.
C is not the most widely used commercial language and it certainly does not lead the way in open source (the open source movement started with Java). Both those categories belong to Java. As to my first point, look here: http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html [tiobe.com]. That said, there's nothing wrong with learning C but it's hardly the future so I don't really recommend it except for the purpose of getting a background in procedural programming, pointer manipulation and manual memory management.
C++ it utter trash and a disaster of language that nobody should learn or use except to learn what not to do when designing a language.
learning Java and Python are good choices (although Java is getting a little long in the tooth but exposure to the JVM is a good thing).
Re:C++ or Fortran (Score:2, Funny)
1) his brain will melt. problem solved.
2) he'll see the matrix and ascend to a higher plane of existence. With no more motivation left to get a job, he won't be any competition to you. problem solved.
Re:Assembly (Score:5, Funny)
First, learn assembly, it teaches you how the machine works. (You should probably also learn electronics and digital logic)
Better yet, first make them learn Lambda calculus, then make them understand the Church-Turing thesis. Only when they fully grasp the nuances of an Universal Turing Machine should they even *touch* an actual computer and program in Assembly.
Or perhaps teaching "from the bottom-up" isn't such a good idea.
Re:Pascal (Score:4, Funny)
It's a bit like the difference between living in your mom's basement and having her come and clean up you room randomly when you're not at home (or when she thinks you are not, but are in fact, having a good time with your girlfri... I mean, inflatable doll)
Call me perverted, but as a Java programmer, I AM THE MOM, and the program is the permanent teenager. And I don't want that teen to fuck $whoever in the basement, without me knowing - no, without me _asking for it_. Garbage collection is just an automated facility (think of a roomba) to help me control the mess the goddamn kid creates (used condoms and smelly sneakers).
Re:Pascal (Score:3, Funny)
I wrote: And I'm still far from convinced that a functional language is the best way to start. A lot of standard tasks are complicated by the functional approach. Alice at least is based on Standard ML which is not a pure functional language (more along the lines of LISP than, say, Miranda, the language I learned functional programming with), but I'd still avoid it for a few reasons, most notably the fact that the only GUI binding available for it is GTK+ which is a very complicated environment that I would say is not suitable for beginners.
And then I discovered there are two different languages called Alice. Mea culpa.