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.'"
First, learn assembly, it teaches you how the machine works. (You should probably also learn electronics and digital logic)
Then learn C, it is the most widely used in both commercial and open source.
Then learn C++, it is a better C.
Then learn Java, it rules the web.
Then learn Python, it has some very clever ideas.
Finally...never stop learning
http://www.alice.org/index.php?page=what_is_alice/what_is_alice
"Alice is an innovative 3D programming environment that makes it easy to create an animation for telling a story, playing an interactive game, or a video to share on the web. Alice is a freely available teaching tool designed to be a student's first exposure to object-oriented programming. It allows students to learn fundamental programming concepts in the context of creating animated movies and simple video games. In Alice, 3-D objects (e.g., people, animals, and vehicles) populate a virtual world and students create a program to animate the objects.
In Alice's interactive interface, students drag and drop graphic tiles to create a program, where the instructions correspond to standard statements in a production oriented programming language, such as Java, C++, and C#. Alice allows students to immediately see how their animation programs run, enabling them to easily understand the relationship between the programming statements and the behavior of objects in their animation. By manipulating the objects in their virtual world, students gain experience with all the programming constructs typically taught in an introductory programming course."
kulakovich
My first year as a CS major I took "symbolic logic" to supplement to required Pascal, Fortran, and Assembly Language courses. After all that, I always thought of the symbolic logic class as the "Latin of programming". Personally, I think any language which is free and gives quick results would be suitable for beginners...Python, for example.
Floating in the black seas of infinity without a paddle.
Its not consistent, its not even well designed I expect, but its a remarkably easy way to learn to manipulate a computer. Learn a bit of HTML first, some CSS, then work on OO PHP and you can accomplish a lot. People will dismiss PHP but there are a lot of very large websites built using it - ones that lots of kids will be familiar with.
Follow it up with a second language once you have gotten the basics down pat - Python is likely a very good choice.
"The first time I got drunk, I got married. The second time I bought a chimpanzee, after that I stayed sober" Arian Seid
One not-so-obvious candidate: JavaScript and HTML.
Pretty much every browser in existence supports JavaScript, so with nothing more than a simple text editor and your browser of choice you can be off and running. As far as beginning programming is concerned, JavaScript easily encompasses any programmatic constructs you'd need.
The best part is that the students can easily display the results of their test programs in HTML, either dynamically generated or just by manipulating some divs, textboxes, tables etc that they've written on their page. Additionally, an instructor could write a 'playground' bit of HTML and JavaScript, so all output variables are bound up and easy to access. At that point the student is free to focus on what really matters, his/her first logic routines. When the student has created his first masterpiece, sharing the accomplishment with parents/peers is as simple as sharing a link to their HTML file.
I think this has the potential to engage students much faster than observing console output or fighting with a front end like windows forms in VB or Swing in Java.
Sauer
Programming in Scratch helps kids
During the directed learning that takes place in a Scratch-oriented curriculum, the teaching team can introduce another programming language to show how syntax-oriented programming languages can perform the same tasks as the graphics-oriented systems. Any programming language can serve as that second language.
I find it a bit ironic that the best language for teaching programming languages isn't a language at all.
I agree that Visual Basic is as bad a choice for a first language as any other complex programming platform.
What made old skool BASIC good was that it was limited in ability. Admitted data structures were limited to arrays, which was a problem. However a medium-complexity basic like Blitz Basic 2 on the Amiga allowed the creative side to be expressed, without having to wade through complex APIs like you would with a modern language.
And the best way to learn programming to a young person (under 16) is to allow their ideas to be expressed and implemented, be that writing your first football league tracking application, to a simple game, to a text adventure, and so on. If that means using BASIC, e.g., RealBasic, then so be it. It needs to be pick-up-able.
I bet there are people saying Haskell and ML on this thread, for some academic reasons. The last thing a young person wants to be doing is learning how to manipulate data structures, functionally, with all the brain-fuckery that involves, and only to get a sorted list at the end. That isn't exciting, it's not even something to be slogged through, it's tedious and will actually put them off, totally.
10 Print "I am god!" : goto 10
run
instant result.
It's sad that computer magazines don't have programming in them any more, unlike the 80s. Game type-ins promised rewards to typing, and learning was osmotic.
Start them with Objects... I had a hard time getting into OO programming because I started with a very low level language.
I started on Fortran. It was horrible. Then I got a home computer with BASIC and advanced to assembly language.
25 years later, I still am at the assembly language stage for programming. But I use different processors and tools. The language is not as important as the tools that support that language. Visual BASIC is great because it gives a simple easy-to-use way to create programs in a Windows environment. Its structural limitations are irrelevant. It is the cost and sophistication of the development tools that is more important.
Now that you can buy a microcontroller for $1.50 that has more power than the original IBM PC, development tools like IDEs are the most important consideration. Computer science was important when computers cost a million dollars: it is meaningless today when they cost a few dollars.
I detest C because I can't debug it on the IDE that controls my $1.50 microcontroller. I can read it and write it fine. I can work with it fine. But I hate it because it's too abstract. I have no idea of what exactly the CPU is doing.
OOP is just science fiction; it's advantages are imaginary. If your application is so advanced and complex that you need OOP to create a program to do it, then it's time to completely rethink the idea of what a computer does.
Computer science is the process of reconfiguring complex concepts to fit into the limitations of the machine. Computer science becomes irreverent when you realize that the more complex the problem, the easier it is to solve by redesigning the computer to fit the problem. Not reducing the problem into small enough processes that will fit into the machine.
It is cheaper and faster to design a custom arrangement of 1000 $1.50 microprocessors to match the needs of complex problem than it is to write and debug the software that will 'solve' the problem on a $5000 standard Von Neumann computer. Microcontroller programmers are cheap and easy to recruit: OOP software development teams are expensive.
This is the new reality of the 21st-century. OOP is the last gasp of the 'big iron' boys.
They are new programmers.
If they want to understand the logic of computers, then they should write pseudo code first.
Do this until they are not new programmers.
This comment is amusing to say the least. I have both a CS degree and an MBA, so I see both sides.
First of all, I agree with the comment about diving in and doing. You can memorize the syntax of a language all day long, and until you apply the language to a problem, its useless.
That (and some of the stuff in your link) is about all we agree on. I read you comment and I know EXACTLY your type. You are bitter because you have barely moved through the chain. You wonder why you work so hard and make "little money", or at least what you consider little money, while men in 3 pc suits, according to your skewed perception, seem to do nothing and make loads and take nice long vacations. When in fact, in alot of CS cases, they have to clean up the confusing messes that many programmers create and make the pallatable for the 99% rest of the population who have to deal with user interfaces designed with some fucked up logic.
The fact is, it has nothing to do with socialism or some society pecking order, or some conspiracy, or being able to do your boss's job. Its your shit attitude and likely awkward personality. You don't think anything is wrong with you, but your boss and his boss and others see you that way, just like I see it in my folks. I assure you that while we manage them, they will never move up from their position until they change, and its likely never, because the problem never lies with them, even as people come in below them and move up past them year after year. Its stupid company policy or my boss is a chimp, or blah blah blah, save it, we don't care. Go get another job if you don't like it.
The other fact is that no matter how clear we make ourselves when we want something built, unless we tell some of our programmers every single fuckin error that is out there, some just dont do it themselves. It is frustrating, and they take the human element out of every program. When programs are written so that even MBAs/PhDs with CS degrees are confused by the logic and user functions of a simple program, that says alot. Instead of putting in error messages with error numbers and creating awkward user interfaces, consider the dumbest person using the software, put yourself in their shoes, and design the thing. Until then, programmers like that will never get respect, deserved or not.
Ok.
nahhh .. in my analogy, the GC is your mom. the programmer is the one with the smelly condoms and the used sneakers.
This is /. after all, so I guess I should have used a car analogy :
You most definitely don't want to learn driving in THAT, but once you're used to the beetle, you'll want something fast, better
okay .. the analogy is probably a massive fail and I'm burning Karma as if there was no tomorow here, still .. I stand to my point : start with something really easy, and when you want to play with the big kids, use a language which keeps the hand-holding to a minimum.
"DRM is like the Ford Pinto: it's a smooth ride, right up the point at which it explodes and ruins your day."-C.Doctorow