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.'"
That way you get access to more texts, more help and need fewer changes to your code to get to a wider market.
I always considered Pascal (or Delphi) a great language for beginners. Powerful enough, structured, type safe and very elegant. From there, jumping to other languages is quite easy.
It's time to realise that Abble's products are the biggest abomination these days. Just say NO to the dumb iAbble way!!
The best first language for a programmer is your favorite language. Duh.
#fuckbeta #iamslashdot #dicemustdie
I learned to program in basic because that is what was bundled with my tandy 1000. I had a lot of fun making games with it. Later on it was easy to learn other languages and I agree let the young ones use whatever they seem to like. There will be plenty of time to complicate things later on.
I personally started out with Pascal in the mid nineties, and it was nice back then (before Delphi came around).
Nowadays I would suggest Python as firs language as it is fairly easy, clean and powerful general purpose scripting language. Then extend it with C/C++.
Just don't start with VB, PHP, Java or C# as it will screw the person up for lifetime.
Turbo Pascal
Does anybody even know what that is anymore? Oh well, it teaches an appreciation of minimalist efficiency, and an appreciation of what's going "under the hood" of other languages. It's also something that you probably won't study unless you make a point of giving it a try.
I think that -- like any other question in pedagogy -- there is no right answer that applies to everyone. But I still find the reasoning in this article absurd.
You have to look at the source code to figure out what a Scheme program is doing? Isn't this true in.... every language? Even if the "source code" consists of little blocks you're dragging and dropping together?
In my opinion you should start ingraining the OO paradigm as soon as possible. I would say Java for its relative simplicity, but Java hides a lot of the nitty gritty details that you get exposed to when dealing with a language like C or C++. So then C++ might be a happy medium. You get exposed to all the object-oriented concepts, but are also forced to learn about memory management, linking, etc. Plus, as a little bonus, its widely used in industry. I think this can be appealing to new programmers in a way that learning a "educational" language isn't. I want to learn something people are actually using. Note that I'm not suggesting C++ is the easiest language to learn or master for new programmer. However, actually doing so might be more rewarding, from a "concepts learned" perspective, compared to the alternatives.
for the professors, that it. By removing all the syntax, etc, you can be introducing functions, lexical scope, binding, etc in the first week. Data structures and recursion in the second.
Result: most students quit by week two, and you are left with a fairly teachable remainder.
This is very similar to some of the strongly typed versus weakly typed language debates that seem to happen all the time. Should ease of use and fun programming come before or after learning about what's going on?
As a fan of both python and C/C++, I believe there needs to be a balance. When teaching a language to students new to CS, you have to gloss over some of the details in order to give them a basic understanding and excitement about what is going on.
My guess is that languages like scheme may inhibit this initial step, so that it is hard for students to catch on.
It teaches you how a computer really works. That way you can become a 'real' programmer instead of an IDE user.
Undetectable Steganography? Yep, there's an app fo
For a 15 year old? Python with the Pygame toolkit. There are other toolkits besides Pygame, but that one works well.
LOGO
It seems like TFS is dealing with the fact that there are at least two distinct, and at times temporarily opposed, aspects of being educationally good.
The one is engagement/excitement/comprehensibility: If somebody is disinterested in, or hugely frustrated by, a subject on first contact, they will have minimal motivation to continue. Unless you simply plan to beat it into them, introductory material needs to grab the audience(this doesn't mean that everybody must be your audience, of course). In many cases, this means a (temporary) sacrifice of rigor or correctness; think of intro physics, where you start with simplified Newtonian scenarios, or math, where you generally start by talking about addition/subtraction/multiplication/division, not sets and number theory.
The second value is that of being correct and rigorous, or at least not impeding later development in completeness and rigor. You obviously cannot learn everything all at once; but there are some simplifications that make it easy to fill in the gaps later and others that actively retard that effort. This can happen either because the simplifications are hugely different than the reality, and harden people in the wrong ways, or because, in an attempt to be "engaging" the intro stuff promises that the subject will be "fun", "relevant", and "exciting" to everyone, every step of the way. Fact is, that isn't true. Most subjects have, at some point or another, patches of sucky grunt work. Promising people that they are precious flowers who will never have to soil their hands with such is a good way to make them drop out when they hit those patches.
You have several tradeoffs and considerations when it comes to learning programming.
Do you want to get on your feet right away? Maybe BASIC, VB, or Pascal is the best choice.
Do you want to really learn about the computer? Probably ASM, but C may be a useful alternative.
Do you want to learn about different ways to think about programming? By all means, stick with LISP and its children.
There is no best language to learn programming. It all depends on what you want to really learn.
I find the insistence on sticking with Scheme to be a bit naive. These days we are either dealing with systems with tons of memory which makes using languages like Java much more productive than Scheme. And on the other end of the spectrum, we are dealing with small devices with limited stack space which simply couldn't handle the amount of recursion that Scheme requires. It's an interesting teaching language like Pascal used to be. But technology has left it behind as a viable implementation language for any real world software.
> After all, as Jeff Atwood puts it, 'what we do is craftmanship, not engineering...'
It would seem that Mr. Atwood has never done any engineering.
Warning: this article may contain humor, sarcasm, parody, and perhaps even irony. Read at your own risk.
http://www.alice.org/
I've seen a few places that teach students alice in order for them to become familiar with looping and conditional constructs before they move to something else. I think with all the visual stuff going on it would appeal more to younger programmers.
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://hacketyhack.net/
Designed to introduce kids to programming using the ruby language, currently being transformed but should be back soon.
Ocaml has an imperative part which is as simple as pascal, but without types, which are inferred. The people I know that started with ocaml in experimental university courses have a mental attitude to clean programming that I've not seen elsewhere.
Admittedly I'm a noop but I've put in 20yrs on PCs and studied most of the structure of PC operating systems and most of the key languages. While I still think BlueJ is an outstanding introduction to the concepts of programming I believe learning the CLI is the best introduction to progamming because it forces the student to interact with the OS while introducing the basic statements of all programming languages. Programming languages tend to either be to low level and demanding an abstruse use of logic or high level while trying to explain how to implement abstruse rules of logic in a way said to be more tractable to 'common sense'. But the CLI uses nearly all the basic concepts and interacts directly with the OS and acts on files. It instructs in the fundamentals of programming languages while adding the benefit of displaying how an OS is structured and functions. I'm probably way off on this but it worked for me, remember I'm a noop, unworthy of being flamed and deserving of at best contemptuous neglect. :)
ideopath @ play
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.
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
20 GOTO 10
Hail Eris, full of mischief...
E pluribus sanguinem
Alan J. Perlis said: "A language that doesn't affect the way you think about programming is not worth knowing". (personally I would remove the 'about programming' bit).
I think the same applies to a first programming language. It has to expand the learner's view of the universe. Getting a language which panders to the learner's universe does not do them any good.
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
I say fortunate because there was nothing in the way; no distractions like GUIs to dilute the experience. Just BASIC on the command line.
It doesn't really matter whether the youngster uses BASIC, Pascal, or XYZ. It should just be a simple language so the concept of logic and process flow is what is learned, rather than getting bogged down in arcane concepts of the language itself (or some pig of a GUI, like "Visual" this, or "Visual" that).
PS. The environment was an interactive "command line" and BASIC interpreter that actually was running as a batch job on an IBM 360 mainframe.
The best first language is anything simple that lets you jump right in and understand the basics like variables, loops, arrays, etc, without getting bogged down in an over complex or restrictive language. It doesn't need to be the worlds best language - it's to get you started. You could do far worse than start with a BASIC interpreter (instant feedback, no compiler/linker to deal with) at a very young age.
Those of use who started out at the beginning of the personal comnputer (not PC) phenomemon in the late 70's started out simple. After putting away your soldering iron, you got out pen and paper and started hand assembling machine code. And we liked it!
At the same time c.1978 a highschool math teacher and a bunch of us took adult education classes at the local university (Durham, UK), where they taught us PL/1, and some of us found a way to hang out at the university after that and started playing with BASIC, then taught ourself C. The big excitement was going from the batch-mode PL/1 class with jobs submitted on punched card decks, with printed green bar fanfold output (maybe just a syntax error) delivered some time later, to being ONLINE sitting in front of a terminal. Whoopee!
Considering taxonomy and etymology of most western languages, that is one of the worst analogies I've ever seen. The analogy would imply that, from Lisp, you gain something else, when in fact Lisp itself is built in C and C was built with assembly (at least originally). Lisp couldn't even be the English of the programming world since its neither widely used nor accepted for *most* real world application... I think the best analogy is that Lisp is the Romanian of the programming world... based off of something important but not widely spoken or understood.
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 are lots of good choices for a first programming language these days, but I thought I'd chime in and suggest Lua for consideration.
Lua is free.
The Lua interactive interpreter makes exploring and learning the language a pleasure (much like the Python interactive interpreter).
There are excellent and up-to-date free tutorials for Lua available online.
Lua integrates easily with C, giving you trivial access to any low level OS features you need.
The language is a pleasure to use. It just feels right.
Give it a shot. You won't be disappointed. :-)
FD 50
RIGHT 90
FD 50
RIGHT 90
FD 50
RIGHT 90
FD 50
There are a number of good and free logo interpreters around. I like FMSLogo (http://fmslogo.sourceforge.net/)
People that knock the hacker ethic are a bunch of MBA drones that could never really build a damned thing themselves.
You learn to program by diving in and doing it. The more you practice and study, the better you get at it. GM was very good at shackling some very brilliant engineers and turning them into process drones. Look at where it got them. Great things are built by individuals and the more steps you have in the way of people being individuals, the worse you will get. Products have to be owned by the engineers that make them and they are personal works of art.
At the end of the day, the managers, bean counters, and all of these other people with their measurements, metrics and fancy charts are so much fluff, a tax on the capable in society... by really a bunch of leaches that could barely feed themselves as they lack the mental self sufficiency to do anything other than to try and ride the labor of others. We condemn socialism in society there's no real difference between the PM in a three piece suit and the lowest of the homeless people. Neither add any real value to society, its just that, the PM knows how to use PowerPoint and the homeless guy does not.
This is my sig.
Buy him a copy of C for Dummies and have done with it. C is kind of like the Latin of programming, except it's easier to learn than Latin.
I would have suggested BASIC around a decade ago, but I can't think of a modern BASIC implementation that's neither horrendously complex for a new programmer or insanely outdated.
Those using pirated Tinysoft signatures(TM) are a real threat to society and should all be thrown in jail.
Instead of lots of /opinions/ on the matter, how about someone do a study to find out which language actually does turn out the highest quality programmer. That's the only way this question will ever get settled.
The reason I exclude the above three attributes is that they lengthen the learning curve to getting a "hello world" program written and working. If a newbie's first exposure to programming is spending hours in a classroom without producing any output, the teacher will start to hear CLICKing noises after the first five minutes as the children switch off (metaphorically speaking). After that, they're lost.
politicians are like babies' nappies: they should both be changed regularly and for the same reasons
http://scratch.mit.edu designed explicitly for this
There is no good answer, I am afraid. It depends a lot on the combination of language plus books plus your "teacher" (if there is anyone teaching you). The language is only one part of the learning process, and not the most importante one, IMHO.
I think that the reason for Scheme plus SICP to be quite popular in the States' universities is that SICP is such a good book. For instance, in Spain, the most popular "learning languages" are C/C++/Java and Pascal. (the first language I was taught was Modula2); however, the books that are used in the Spanish universities are horrific. Does that mean than Scheme is a better language for learning how to program? No, it only means that the sources for in Spanish for learning how to program with C or Pascal are much worse.
At the end of the day, the combination of teacher plus book is much more important than the language itself.
So he can program stuff for his iPhone and impress his friends. Impressing your friends is (in my opinion) the best motivator for learning something difficult.
Pretty good is actually pretty bad.
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
COBOL
Okay seriously I've just run out of pointless things to say.
Having been in the situation of starting to program when I was about 15, I can say that there is almost certainly no 'perfect' language to start aspiring programmers off on. Indeed, I'm still kicking some of the bad habits I learnt from my first language (PHP), and I now do this professionally.
I'd say the best option is probably to try and learn/teach two languages side-by-side - preferably two that have completely different approaches to programming. The first should be something that allows one to easily learn the fundamental Computer-Science stuff - functions, lists, trees and recursion - and languages like Lisp, Scheme or Haskell - by their nature - lend themselves well, although C can also serve at a pinch.
The second should be some sort of practical/pragmatic programming language, that one can learn how actual everyday programming works in. I'd honestly stay away from Java or C for this - C is scary for actually *doing* stuff when you first start to program, and Java is overly complex. Run with something like Ruby or Python, which give you a good grounding in Object Orientation, and allow a newbie to actually accomplish something. You could also use PHP if the kid's into the Web, as a lot are these days (though make sure you still teach them the OO way of doing things, as opposed to purely procedural.
Once you've got those down, you can happily jump into languages like C/C++ and Java, and start making more than just the toys that all newbies make.
I had to laugh at the suggestion of Scheme. . . It's absurd for a whole long list of reasons. But then, I've never been a fan of the ivory tower "comp sci" approach to programming. Furthermore, scheme is NOT the "Latin" of computer languages. That distinction should go to C. (Then Objective C, C++, C#, Java, Vala and the rest of their ilk are the Romance Languages.)
A beginner's language shouldn't be too funky. Scheme is a list-processing language (a variant of LISP, in fact) which makes it fundamentally different from almost every other programming language that you're ever going to use for any practical purpose. As another example, I'd rule out Forth for similar reasons. A beginner should learn a procedural language, which means something from the (very large) family of BASIC/Pascal/C and their many descendents, et cetera.
A beginners language ought to have an editor and IDE that's easy to learn -- preferably buit-in, or installed with the language. Trying to learn with a generic text editor and a command line sucks. An easy API to do some interesting things with (more interesting than outputting ASCII text) is also a big plus. It shouldn't be GUI-oriented, though. That's just a big can of worms that a beginner doesn't need to open up yet.
A beginner's language shouldn't be OOP -- or at least, shouldn't push OOP in the programmer's face, the way Java does. If the OOP features are sort of hidden and won't bother anybody who doesn't want to mess with them, that's OK. But I can't state this strongly enough -- you shouldn't have to grasp the whole OOP concept (which doesn't come easily to many people) in order to start learning to program. It can and should come later. (Structured programming, on the other hand, should be there from day one.)
Despite all the hating on BASIC, it used to be pretty good at what it was designed for -- introducing beginners to programming. I'm excluding the early "sphaghetti code" versions of BASIC here, and I'm also sort of reluctantly excuding the newer GUI-OOP oriented versions of BASIC. BASIC has mutated a bit too much from its original mission.
However, I have very fond memories of GFA Basic on the old Atari ST -- it offered structured flow control (no line numbers) almost like Pascal, as well as a very friendly editor/IDE and inbuilt API -- but no OOP features. It met every one of the criteria that I outlined above, and it was great for learning. It was also a great stepping-stone to C, which was the next logical step in those days. It's just too bad, I don't see anything much like GFA Basic out there today.
I might suggest (as the author of TFA did) Python as the closest counterpart today. It's designed to be easy to learn (like BASIC was), it has OOP features but you can ignore them, and it appears that some pretty good IDEs and APIs (non-GUI!) are available for beginners to play around with. It's a bit of nuisance that you have to locate and install Python, then locate and install your IDE, then locate and install your chosen API. . . And the APIs like SDL and Pygame are more complicated to learn, I think, than doing graphics in GFA Basic ever was. . . But from what I can see, it's just about the closest modern equivalent.
I started with QuickBasic in middleschool, and in highschool I did VB, Pascal, Python, Java, and even some Touring. But it wasn't till I did C in College that a lot of the major concepts sunk in. I really believe C is a great place to start after that experience.
If your goal is to get them going, then a very high level language is a good choice, but if you want them to understand how computers work and how high level languages do the magic then assembly is the best starting point. After all, it's what computers execute, even when the programmer writes LISP, Javascript or C code. It is a steep learning curve and a virtual processor is an advisable learning environment to keep the frustration level acceptable, but once you know what the processor does, high level language concepts are much easier to understand.
Download Game Maker 7. :D
John McCormick (http://www.cs.uni.edu/~mccormic/) has published several papers comparing Ada to other languages and documenting his successes using Ada in undergraduate programming classes. So there are some published studies, and McCormick's results are pretty impressive for first-year programming classes.
Some of the advantages include: * unforgiving syntax - preventing confusions like "=" and "=="; * compile-time type checking; * easy to bring in support components ("packages" in Ada) to provide complex operations (such as I/O formatting) that otherwise would get in the way of the problem at hand; * a concurrency model that is easy to reason about (OK, maybe not for a beginner programmer, but still a huge advantage as we look at a multi-core future...); * a pretty large collection of reusable components; * an integrated exception handling model, so behavior when a runtime problem is detected is a lot easier to understand (particularly with stack traces).
Java has some of these same benefits, particularly the ability to bring in existing packages, but Java is handicapped by its C syntax which makes it easy for beginners to make mistakes, and the type model (particularly weakly-typed scalars) doesn't provide as much compile-time diagnosis.
A big part of Ada's success is the amount of things that the compiler can check for you. It's a lot easier to find and work off compiler errors (even more so when the compiler provides good error messages) than it is to try to debug a program at runtime.
dave
p.s. I really believe learning to read code, and having a language that is easy to read, is really important. I learned more about programming by reading, taking apart and modifying the old "Star Trek" BASIC program (in the mid 70s) than I did in my introductory programming classes.
One of my friends asked me to help his younger brother become acquainted with programming, so I downloaded several "free" language installers (all for Windows), their documentation (as available) and tutorials, burned them all onto a CD and gave it to him. I advised him to install all of them (Python, Perl, Ruby, Java), and play around for a while to see which one(s) interested him the most.
After a few weeks of playing around, reading the tutorials and such, he decided that Python was the language he felt the most comfortable with, and I then bought him the "Learning Python" O'Reilly book, to help him get more of the nuances of the language. I was also available to help him with any questions he might have had, during this learning phase.
Fast forward a couple of years. Said younger brother has now graduated from high school, is going to college part-time, working on a Computer Science degree, and has a full-time job with a software company in the area. He works mainly in Python and Objective-C (for iPhone and iPod Touch development), but is also learning Java, so he can work with the Android SDK.
Is Python the best language to learn programming with? I can't answer that, but I can say it worked wonders in this instance.
No matter where you go... there you are.
I'm pretty sure a 15-year-old isn't going to want to do "scripting", he's much more likely to want to do 3D graphics.
I'd suggest one of the 'game programming' Basics that are out there or even start by doing game mods.
No sig today...
Don't sorry about "ruining" them with a "bad" programming language. If they stick with it at all, they are going to develop all kinds of crazy ideas and bad habits, which they will discard, one by one, if they go on to become good programmers.
Face it, even if you give them the best language and environment possible, most kids are going to get bored with programming, just like piano lessons, karate class, painting, etc. Programming seems cool, and they know it powers video games, but they really *don't* care about variables and functions and scope and types and classes -- and they won't unless they actually decide they want to become programmers.
Give them something fun and rewarding, where they get to play Stairway early on. RealBasic seems to be a good compromise of power, ease of use, user-friendliness, etc. If they want to stick with it, then they will be motivated themselves to learn LISP, python, c, to understand the concepts *behind* what makes the video games work.
Computers are useless. They can only give you answers.
-- Pablo Picasso
I don't associate Scheme with 'the hacker ethic'. I don't strongly associate any language with hacker sensibilities. I do associate Scheme with the intellectual rigor required for a programmer who really has a clue about programming.
I think Scheme is an excellent language to teach college students who think that they know how to program because they managed to smoosh together a bunch of working PHP code and make a website. I think it is a poor language to teach high school students who are learning their first language.
The association of technical knowledge with competence irritates me. A competent painter needs to know about brushes and mixing paint, the difference between oil and acrylic, and a whole host of other technical details. But that's not how you get a good painting.
One of my reasons for feeling that Scheme is a good language for people who think they know how to program is that such people frequently know all about paint but do not have the depth of understanding to be a good painter. Scheme is a language that forces you to think about programming differently than you did before. And if you understand it you are on the path to being a good programmer rather than just a code monkey.
But I would not recommend it as a first language. I would recommend Python for that. Clean, concise, expressive and powerful. It's my favorite language for a reason. :-)
Need a Python, C++, Unix, Linux develop
C# is a modern, multi-paradigm, feature-rich and evolving language. It can be most intriguing for a young programmer because you can play at various levels of abstraction (from unsafe all the way up to LINQ) and express computation in various ways (you may do a Lambda expression for one thing and a method for another). And you can use it as a scripting language, as well. Young programmers running Windows can always get Visual Studio for free via DreamSpark. Young programmers running anything else can get MonoDevelop. There really is no excuse to skip this incredibly productive language. The plus side? migrating from C# to other paradigms should be simple. And the C# user community is just as friendly as any other free language's (minus the "RTFM, N00b!" replies.)
Start with a simple language to learn the basics (Loops, variables ect.) Then let them explore. If they are truly interested in programming a new programmer will move to what interests them. I started with Basic went through the academics of Pascal. But I truly learned the most when I taught myself Forth and Smalltalk. Anyone interested in programming will find their own way.
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)
I'm not sure this is a good idea.. but it might be.
How about trying to expose the main ways of programming, at once?
Assembler = The barebones.
C = Everybody still uses it.
Python = Easy to use, etc.
LISP = Apparantly very important, but I wasn't exposed to it early enough - and still don't get it.
Whether or not to show Perl depends on whether you love it or hate it. :P
"Rune Kristian Viken" - http://www.nwo.no - arca
I don't understand how you people come up with your answers. I have programmed in JS, PHP, Lua, Perl, bash, Ruby, C, Obj-C, Java, Haskell, Fortran, 68K Assembler and some Basic. I started in Haskell. Which I quite like as far as an educational language is concerned.
Firstly, I don't understand the "teach a language people use" bullshit. Programming is not bound to any language. Any half decent programmer can pick up a language in a few days and be productive. Your objective as far a teaching goes, should be to teach concepts, not to teach a language.
Secondly, the people pushing certain scripting languages. Think about what you are about to do. In some scripting languages you can go + and get a number out. And some of them use white space for delimiting blocks. Ugh. The flexibility of scripting languages can be a real pain in the ass.
Thirdly, the people who want to try and teach all the concepts, OO, pointers, memory blah blah blah all at the same time. Yeah, that will not be a boring pain in the ass. No sir.
My money is actually on Java if I had to pick. (Maybe even C#)
- Simple syntax. And the syntax is similar to C.
- Has massive amount of libraries so I can write cool stuff with little effort.
- Don't have to worry bout too much too soon.
- You can run it on pretty much anything.
Nothing says hip more than LOLCODE.
http://99-bottles-of-beer.net/language-lolcode-1544.html
This is probably a surpise to many but java has good structure and has the layout for developing solid OO programming skills. Its not as confusing as C++ and not as retarded as VB C# also does but visual studio does most of the work 4 ya. -s
If the intention is not to put the student through a 'rite of passage'--meaning the agonies of being a C/C++ developer, then I would recommend Java. It's a real language that has a future and huge growth potential. Though I know that's a huge topic now, I have at least done my part by making available, for free, without any ads, ad links or any other such commercial nonsense.
It's just Two Semesters of College-Level Java for Free
I've actually had this experience. I've mentored someone from about 12 - 15. He's going to be one of the best programmers of his generation if he sticks to it.
First, I agree that at this age finding things he wants to do is more important than the specific technology. But I would argue that the technology does matter to some extent. There's a lot of time between 12 and college. Someone who spends a lot of it programming is going to get at least as much experience before college as in college. I'd like to see it go in the right direction. When I taught computer science 111, I sometimes had to tell kids who were self-taught in Basic to forget everything they knew. I'd hate to see that happen to someone who had invested lots of time.
I think it's the job of the mentor to encourage -- with a light enough touch not to discourage -- use of good programming techniques. That means talking about program structure and design, proper data structures, and any other concepts needed for what they're doing. (In my case the kid likes doing multi-threaded network services, so I had to teach him synchronization much earlier than you'd typically do that.)
I haven't programmed in Scheme, so my judgement on it is probably not reliable. I did do a lot of work in Common Lisp. While in many ways I liked Common Lisp more than more recent languages, I think a language like Java or C++ is more likely to push you to think about structure. C++ seems a bit low level. I'd be willing to accept either a high level language like Perl or Python, or something lower level like Java or Visual Basic (using the newer features of the language so that it's essentially the same as Java -- although C# might be a better choice).
For someone who is just going to be playing around there's a lot to be said for Perl/Python. But if they're going to be doing anything big enough where structure matters, I'd probably start with Java or maybe C#. Of course you can certainly start with Python and them move to Java.
In my case, the student I worked with started with Visual Basic, moved into a more structured form of Visual Basic, and then to Java. By now he's also done PHP and C++. It's also all been his choice. And in fact the real answer may be that when working with teenagers unless you want to spoil the fun there's a limit to how much you can or should actually determine what they do. So you may end up supporting them in whatever language they pick. But if someone is likely to be a professional, I'd probably try to get them into a structured language like Java fairly soon for at least some of their work.
Just do Python. They can learn most other languages from there.
Python is better than Perl because for beginners would takes weeks just to learn all the different possibilities of IF branches in Perl. Perl's motto is 'There's More Than One Way To Do It', and while that is cool for the hacker ethic it does damage to people learning programming.
Fact: You don't want to spend most of the time teaching kids a language instead of programming concepts.
Python because it also has OO programming. Not tacked on such as C++, ObjectPascal or Perl. And learners can easily transition from functional to OO.
Python is simple and clean and not bogged down by semantics.
It is not as hard-core as lisp or smalltalk, being much easier to progress.
We do not care about speed, not that that is an issue anyways.
I like all languages, and learners can be made aware of alternatives. To each his own style. Wether it be Perl monks, assembly 4k demo writers, C++ Linux engineers, PHP Web back-end programmers or C# .NET ASP AA++--%% certified engineers.
My personal history:
Vic 20 / C64 BASIC, Microsoft BASIC / 68k assembly on Amiga, Logo, Pascal, LPC (Lars PensjÃ's C for MUDs)
Then there was a shaky transition to OO ... this could have gone smoother and I wish it had.
Object Pascal, C++, Perl, Python, ABAP, C#
Perhaps it was the BASIC that messed me up, but I doubt it.
Is it me, or is it a silly debate... My first language was some FORTAN and COBOL when I was 10 which quickly progressed to BASIC when I was 11. By the time I was 12 I had LOGO under my belt and the teacher had me teaching the Computer Science labs at School.
By the time your 15, you are past your prime and you might as well pack it in.
D.O.U.O.S.V.A.V.V.M.
And that there my friends is the crux of the problem. This is why we are now swimming in code bloat from every angle. Sorry to disagree with your view of the world, but *proper* programming IS engineering.
Now, to get back on topic, how about something like Squeak? Using squeak land, you can 'trick' the kids into learning a real language. Of course i learned by sitting in front of a 8080 i built from scratch from reading intel data books that i wanted to actually do something other then sit there, but i realize that isnt for everyone.
Python is also be a good starting point. Approachable, and 'legit'.
---- Booth was a patriot ----
If you can't read and write English, it is increasingly difficult to work in this global economy--regardless of the computer language you program in.
It sort of came naturally.
I started with Omikron Basic on Atari ST. The amazing thing with the Atari is, that graphics memory and main memory are one thing. Also there was no distinction between graphics-mode and text-mode. The only thing really limiting was the lack of dynamic memory allocation.
Today I can see that newcomers feel clued out because by default they are presented with a window manager and lots of user-friendly software which gets in the way if you are trying to get to the bottom of things.
I teach a course at the North Carolina School of Science and Mathematics that introduces non-programmers to programming. The sole prerequisite is decent algebra and problem-solving skills. All of our students have at least point-and-click proficiency with a GUI.
We use Python. Here are some reasons.
We are entering our seventh year of using Python at NCSSM. It has been a highly successful effort.
It's good to start out simple, with something like VB.Net and then progress onto more complicated things (HTML, Java, C/C++, Ruby).
With VB you get the fundamentals of programming (Data types, If-then-else statements ect.) and a good idea what programmings consists of. It's very easy to self-teach and doesn't take long to get the hang of things.
Also, if you have the resources try to grab onto some old hardware and tinker with it a bit. After a while of fiddling and reading you'll be able to build a computer, and then go onto other stuff such as overclocking.
-P
"The difference between genius and stupidity is that genius has it's limits" - Albert Einstein
No, Visual Basic will ruin them and they'll end up programming in that backwards language their whole lives. And no one seriously writes useful products in Scheme, give me a break. Name one product written in Scheme that actually turns a buck or that anyone uses on a daily basis. Ironically, I can name several VB apps that are in popular demand and regular use, one example is AutoPatcher which has a ridiculously large user base and is not one of the best written pieces of software (for example he doesn't use a thread for the network layer so if you change focus by opening another application or clicking another window while he is grabbing updates, his applications loses the network connection).
The best way to learn to program, is by start learning to define a problem and its solution. A programming language is nothing more than a tool. A tool to tell the computer about the problem and the solution. Learn about, for example, Fitch propositional logic, about how to define a big problem into smaller problems, about iterative and recursive design, etc. The biggest problem with many 'programmers' these days is that they only know how to hack a piece of code in their favorite language, but they don't know how to program. If you want to learn someone how to write computer programs, start by stepping away from the computer and learn how to design a program, not how to actually write one.
It doesn't have to be like this. All we need to do is make sure we keep talking.
I know.. there are lots of downsides to using bash or korn as a first languag, but there are quite a few upsides. For one, it's easy to get started showing what a script/batch file does. You can start with the absolute basics such as putting a few print statements in a file. Then show how scrip programming is not just about putting commands in a file.. Show conditionals, strings, file manipulation, etc.. Then start with functions, parameters. After that, show some of the external tools and then automate something such as sending an email or organizing an mp3 directory.
If I had to name one thing that turned off the most beginning programmers, it's the difficulty of setting up a project that will allow them meaningful graphical output. In C++, just getting the compiler all set to link the right libraries requires a great deal of knowledge. Issues like frame rate regulation, loading images, and initializing windows are insurmountable hurdles to the beginner and it's incredibly frustrating.
Everyone wants to make a game-like project at first. Python has libraries like Pygame (SDL+utility binding) and PyOpenGL (OpenGL binding) that make it VERY attractive to the beginning programmer. Very, very few languages allow windows, image loading, sound loading, and drawing to happen with as little nonsense as Python and Pygame.
My personal preference would be visual basic. I know its not as good as some others, but it is very simple to make something tangible. Trying to teach a young person to program the UI is only going to detract from the art of programming. For this reason i would advise a language with a drag and drop ui. Also my Uni teaches Visual Basic to the IT majors as their first language (so it really cant be very hard).
Python is better than Perl because for beginners would takes weeks just to learn all the different possibilities
You don't need to learn them all - you just need to learn ONE to start with, then others can be added as the newbie's level of competence grows. The biggest barrier to programming is a steep learning curve - too much time spent before something tangible can be produced. Any language that lets someone just type stuff, then press "run" is a good start - maybe even Python.
politicians are like babies' nappies: they should both be changed regularly and for the same reasons
I learnt BASIC first, on the Sinclair ZX-81 and then the Sinclar Spectrum.
Soon after that, I learned to program using Turbo Pascal, and I translated a lot of my BASIC programs to Pascal on my Dad's PC.
At school, I learned to program on a BBC Micro using BASIC and 6502 assembler and a little while after that I learned to how to program using 808[86] assembler.
C++ was the next main language I learned to use but between Turbo C++ and Turbo Pascal, I preferred Turbo Pascal, especially how well it managed dependencies and the sheer speed of compilation. I was a very loyal Borland customer, purchasing nearly every version of Turbo/Borland Pascal for DOS (excluding 5.5)...
And then I went pure 32bit programming in 1994 and left the Borland world behind... Used Watcom C++ and Virtual Pascal. Found the GNU compiler. For the last 10+ years, I have almost exclusively been programming using GNU compiler in C and C++.
To answer the poster's question: I would recommend Pascal as a good learning language for learning structured programming.
But to graduate to C and C++ after the basics are well understood and good practices have been learned.
No sig. Move along - nothing to see here.
The assumption underlying the question is that these 1st-year students are going to become programmers/ developers/ software engineers. In other words, practitioners as opposed to researchers. This is the elephant in the room for computer science today.
Professors tend to teach the pure CS model of programming, i.e. data structures, lexical parsing, algorithms, everything you saw in your 1994 syllabus. They do this because, guess what, they are researchers and pure computer scientists. Rarely do you get a 15 year veteran of software engineering teaching an algorithms class; for one thing, these people are too busy solving real-world problems like schedule slippage and feature creep to manage a graduate-level course load. So why, then, is CS continuing to teach CS when what students want is software engineering? I don't know. I think it's all they can teach.
So, I think Scheme/ Haskell is very good at bringing 1st year SCIENTISTS into programming, if only to get them looking at the basic problems of CS and not necessarily engineering software for a big corporation.
For software engineers, or people who want to ply their trade for a big corp or small firm or for their own benefit, I would say the platform matters more, not the language. Big corps wants J2EE expertise, big-time messaging and integration opportunities there... so learn Java, SQL, and how app servers work. You might try the dot-NET platform if you want to make a living to Microsoft-centered projects; there's tons of work for Sharepoint devs so C# and getting practical experience with the vast dot-NET library will help you immeasurably.
Along the way, though, you'll need to learn how to develop solid, robust code. CS programs don't each this very well, if at all. Self-study is the only practical route, aside from the ultimate teacher of experience. Experience, however, suffers from a chicken-egg scenario: if my feedback loop of experience reinforces bad practice, how will I detect it? This, I think, is the major shortfall of CS/ Engineering programs.
Couple this with the undeniable trend of moving all entry-level programming jobs away form US graduates, and you have almost no way of becoming a 15-yr vet of software engineering, capable of solving a variety of issues on a variety of platforms. You'll never get that chance unless you are willing to live like your outsourced counterparts, wherever they may be. Public companies care about anonymous shareholders more than the citizenry of their incorporated location.
Ah well. I finally managed to put these thoughts together somewhat coherently, so I'm done.
--#
The point of IntroTo Programming courses is to instill a comprehension and sense of awe at the ability to control the actions, operations, and functions of physical machinery by using symbols, that are non-physical. It is by using your brain to amplify your body (robotics) or by using your brain to build and control a machine that can vastly amplify your brain (a pocket calculator).
Intro To Programming needs to skip language and process at the beginning and first teach how electricity can be used to create and manipulate symbols. This is multi-stage process that teaches how to use electricity to represent binary numbers, then using binary numbers to represent decimal numbers, using decimal to represent CPU instructions, using instructions to make programs, and using programs to control machines that amplify the users physical and mental abilities. And finally, how to use the imagination to create new structures of symbols to create programs.
Install the sense of god-like awe at the ability to manipulate physical reality by rearranging symbols, and the mundane details of language structure are of minor importance to both the student and the teacher.
Seriously.
The best way to learn to program is through social interaction about the subject within a culture dedicated to a wide array of programming topics.
Languages like scheme, lisp, haskel, perl, ruby, python... these are often domain-focused, where it would be hard for the budding programmer to get into some areas of programming that might keep them interrested. For example, graphics or sound.
Languages like C# and VB.NET have a more generalized culture, where you could get into just about anything and actualy find other people doing the same stuff via online forums (in the old days it was through BBS's and FidoNet.)
So I recommend a general language, without much meaningfull limitations, that has one or more high traffic public forums online dedicated to it.
"His name was James Damore."
If your young, you probably just want to make games. I'd recommend game maker...it starts out as drag and drop so that you can learn the basics, but easily extends into its coding language, which is similar to Java, but much easier to use!
Haskell
I learned on turbo pascal, and in general, I think it served me pretty well as a first language. These days there's "Free Pascal" http://www.freepascal.org/ which is a cross-platform compiler available on many platforms. The language is pretty rigorous, but has all the facilities you'd want to teach someone for them to function in a modern language. YMMV.
Somebody who only wants to learn one language will most likely not become a great programmer. The problem is that the reason to understand a particular language is only visible to you after you have understood it
* C/C++: understand pointer-arithmetic and the datatypes of the underlying machine
* Java: enjoy the garbage collector while exploring the limits of strict and static typing
* Maxima: feel the power of functional programming and symbolic evaluation
* Lisp: transform code using meta-programming
* Ruby: see how a trade-off between Lisp and Java could look like
* Forth: see how different programming languages can be
* Io: realize that there always will be new languages until we figure out what makes reading and writing programs easy
For me LOGO is obviously best programming language to begin with:
http://en.wikipedia.org/wiki/Logo_%28programming_language%29
I've started using it when I was 12 years old kid. The LOGO interpreter was being run from cartridge on this kind of computer:
http://en.wikipedia.org/wiki/SVI-738
LOGO is a simplified version of Lisp, known mainly for its turtle graphics:
http://en.wikipedia.org/wiki/Turtle_graphics
Thanks to this "turtle graphics" LOGO is very practical and easy even for children.
Kids love to draw fancy images by instructing some friendly turtle...
It is available as KTurtle in many Linux distributions (part of KDE's Kdeedu package) and for Windows as well:
http://edu.kde.org/kturtle/
"KTurtle aims to make programming as easy and touchable as possible, and therefore can be used to teach kids the basics of math, geometry and... programming.
The programming language used in KTurtle is loosly based on Logo. KTurtle allows, just like some implementations of Logo, to translate the
programming language (the commands, the documentation and the error messages) to native language of the programmer."
The KTurtle Handbook:
http://docs.kde.org/development/en/kdeedu/kturtle/
I've heard it said that the best language depends on the job to do.
Obviously, the same applies for the best first language: what is most important for their first program/project ... ?
- quick "whoa" results to generate excitement ?
- doing something useful ?
- fostering some understanding of a CPU, OS, Network... inner workings ?
-
Again, I'd say the language is just a tool to an end. Get a good project idea, then select the right tool to do it quickly and in a fun way. Maybe it's just scripting/macroing a very specific app. Maybe it's a website. Maybe it's a "real" program...
The Cloud - because you don't care if your apps and data are up in the air.
The best first language is bash. If you want to do any programming, linux is the way to go because you wont be spending an arm and a leg on compilers. Before you do anything you should become familiar with the terminal, and writing bash scripts is one of the fastest ways to do that. Even if you are already proficient with linux, then bash scripting will be pretty easy because you already know the syntax. This knowledge can then be applied to writing build scripts when you move on to another language.
Python an Perl are good as well, but require learning the syntax. I think perl is more forgiving but that also increases the likelihood of developing bad habits.
If you want to program in a compiled language, go with C. I think it is much easier to start with C then transition to C++ rather than jump right into C++. Since there are so many similarities you can then learn C++ and be familiar with two languages in about the same amount of time it would take to jump right into C++ and stumble your way through it.
Buy him a copy of C for Dummies and have done with it. C is kind of like the Latin of programming, except it's easier to learn than Latin.
I would have suggested BASIC around a decade ago, but I can't think of a modern BASIC implementation that's neither horrendously complex for a new programmer or insanely outdated.
Actually I think K&R C still an awesome introduction book for a language.
As a language though, I'd start with Python to see if they'll enjoy it, and then go to C second to make sure the important concept of pointers.
While you may not use them much with all the dynamic languages out there nowadays, it's an important concept to understand IMHO.
I have to agree with both.The thing with PHP, although arguably at best a limited programing language (if at all), is the accessibility. You do something, there is instance feedback. I just would not let someone get too hung on just PHP. It will however get at the basic concepts behind programing rapidly.
I remember the most complex thing in learning my first programing language was learning the language of programing. Exactly of what is loop, var, and so on. You are reading these books, documentation, and most would fail to define the terms (or define the terms using the terms) they where using so that someone new to programing could understand the lingo or shoptalk. It was not particularly hard once you figured it out (c, c++, Java), but it was like being frigen anthropologist in the jungle encountering a new tribe. You have to translate the crap in to something common to English culture. Thus, why instance feedback is important to knowing are you doing it something right.
I would have to say PHP documentation is excellent. Lots of easy access definitions, with examples, small snippets of working code, and discussion of pros and cons and recommendations. In fact if other programming languages followed that lead, they would be many more programmers in the World and perhaps a few less bad programmers.
My vote for a second language would be C++. All the more advanced concepts, including going down to the metal (although perhaps not the best way to get there) can be captured in C++. Basically, you can go up and down the food chain fairly rapidly with C++, and the key concepts translate well to just about every other language.
Living in Chile
I think students should learn languages simultaneously, with a focus on getting them writing code they can use as quickly as possible.
I'd pick C/C++, Perl and assembly, with Lithp coming later.
That way, they can start writing the kind of stuff they're going to need and use right away:
* Web apps
* Device drivers
* Cracking software (oops...)
Futurist Traditionalism
You could start them really young (younger than 15) if you present it to them as a game.
Have you heard about Kodu for the XBOX 360? It's a tool to create your own games (a.k.a. programming language) and you get to share your creations with your friends.
Research project behind Kodu at http://research.microsoft.com/en-us/projects/kodu/
Details on the game itself at http://marketplace.xbox.com/en-US/games/media/66acd000-77fe-1000-9115-d8025855024c/
Some classmates and I taught ourselves Fortran when I was 15. It was part of a computer math class but the teacher didn't really know anything about Fortran so we were given copies of the Fortran manuals and access to equipment and we spent lots of time experimenting and teaching each other. This was back in '68, on an IBM/360(I think) using teletypes connected by audio coupled modems.
I would say that the particular language you choose is probably not the most important issue. Access to a development environment that you can spend as much time as you want on. Gobs of online or book references and tutorials. And, a friend or two to exchange ideas with. I would also say that all of this pretty much has to be free because 15 year olds have little access to $$$.
This question comes up in one form or another about once a month. It's getting tedious.
I would have suggested BASIC around a decade ago, but I can't think of a modern BASIC implementation that's neither horrendously complex for a new programmer or insanely outdated.
The other issue is that it is less and less relevant. In the past I would have recommended Basic or Pascal, because they taught what people need to know and then could be used for practical development. In choosing a development language I think it is something that needs to teach and be practical at the same time, this is why I would recommend something like Java and then C++. I could have mentioned other languages but these are both cross-platform.
In fact for the person who has never programmed then LOGO is, IMHO, the best language to start with. There are still implementations and the fact that someone gets visual results from the get go gives them an idea of the logic and rewards them with instant results. Implementations:
http://en.wikipedia.org/wiki/Logo_(programming_language)
Jumpstart the tartan drive.
Is the best first language.
If I go back to when I started programming, my first goal was to create a game. It didn't matter at the time whether I was using some proprietary stuff like VisualBasic or older language like c or pascal. I had a goal in mind, which was to be able to control a simple sprite through a grid and I wanted to do it the simplest way that was possible. I still think the topic of first language is about motivation. You want to do something like you see. You don't necessarily want to learn a bunch of abstract design concepts like OO, design patterns. I needed something trivial and visual, yet extensible enough to allow me to add features I thought cool. VB was an awesome opportunity at the time as I could use drag and drop to manipulate objects and even though I was only manipulating widgets in a simple way, it allowed me to do all I required, even the more complex project ideas that followed.
If I look at today's alternatives, I see squeak that does right that, backed by the great smalltalk language. It is simple and visual, yet offers great flexibility. If I had Squeak as a choice when I started, that's probably what I would have chosen.
But it's all about motivation. Someone needs something of interest to work on and use the right tool for it. Programming is an art. You paint for yourself. And you learn to like painting. Then you try other styles: abstract, sceneries, portraits. And once you master enough your technique you can think about painting for others.
...
Scheme is a good first language for MIT students. All incoming MIT freshmen already have mathematical thinking down cold, or they were filtered out by Admissions early on. So Scheme makes sense to that crowd.
For high school students, I'd start with Python. Python has most of the good ideas in modern programming, it has reasonable aesthetics, and you can do a wide range of things, although somewhat slowly. Perl is too ugly and is bad for young minds. C/C++ forces you to deal too much with memory allocation. Java is OK. The more exotic languages are for later.
There are a few schools that teach Forth, because you get to see the whole range from high level programming down to the hardware level. But it's too limiting, and dated.
Best second language is assembler. To learn to understand what that first language is actually doing.
what we do is craftmanship, not engineering
Sometimes I consider the best programs as works of art too.
This is not the sig you're looking for.
Scheme is my favorite programming language, and it wasn't even the first one I learned. Plus it supports multiple programming paradigms so you won't immediately be locked into one in the beginning as with Java or a c derivtive.
Scheme isn't remotely write-only - instead it changes how one thinks about programming for the better. If you really want to see write-only, let me introduce you to my good friend perl without strictures.
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.
Raise your e-hand if you're a programmer and your first language was BASIC. How did that turn out? Great for me.
You just got troll'd!
n/t
Slashdot users think Linux is awesome.
Indeed. I would probably want to make them learn in an emulator - maybe Blitz Basic 2 or AMOS in UAE (or on a MiniMig), or BASIC on a BBC or CPC emulator (WinAPE also has a nice assembler, for those people that think that's a great idea for some reason).
Sticking them in Visual Studio means a high learning curve - the software itself, and the language, and I also don't think any of the languages on that platform are suitable.
Ooh, it's pub time. tata.
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.
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.
Then learn Java, it rules the web.
Which side of the web does Java rule? Servlets on the server, or applets on the client?
If you are a natural, gifted programmer you will learn never to use it for any real programming later on.
If not, you will have learned all you need to be a successful PHB / financial pogrammer.
Either way, your future is assured.
If you understand one, then you can understand nearly all. http://programphases.com/
Scheme is a good first year programming language for computer science students.
It's not a good first year programming language for people whose main aspiration is to be a programmer. But why would those people waste their time studying computer science?
Bash scripting first; go study this, to learn bash. Then maybe some PHP, depending on what you're doing.
Perl is abstract, hideously ugly, has utterly alien syntax unlike anything you will find anywhere else, and will make your ears bleed. Also don't go anywhere near assembler unless you are a mathematical savant. You also likely won't need to bother with C, either; 98% of what you might want to do in C will generally be done far more easily and painlessly in something else. Read this as well. Most of the hot shot Debian scrubs these days don't bother to, and they should.
You will only need Cobol if you're wanting to do this for a living, and even then, it probably isn't a language which anyone should learn as a new skill these days; still, banks and other similarly eldritch, sadomasochistic institutions can sometimes still want it. With Java, who knows? Some people use that for various things, but ask before you assume people will want you to have it. If you can get away with avoiding it, do so.
Also, do not try to learn to code purely for its' own sake; you won't learn anything that way. Find something you want to do; even if it's only something like setting up a cron job at first, and then do that. Learn vim or Emacs, read the RFCs for the net protocols, and listen to some psytrance while doing all of the above. Have a reason for doing it, and enjoy it while you do it, or you'll never get anywhere.
In the 60s, I would accompany my Dad to the big IBM on campus and he would run (and debug) his FORTRAN programs and to keep us kids busy and out of his hair, he taught us a tiny bit of the language and let us go nuts on the card punchers. Even though it was FORTRAN and I knew no more than simple assignment syntax, it was enough to like computers.
In 1971, a high school sophomore, I was fortunate enough to be included in an extra-curricular course in BASIC over teletype to a time-share. Old-school, number each line, single-letter with optional single digit variable names, Goto infested, Else-lacking BASIC. No matter. You think of something, you translate the ideas into code, you test, you refine, and you revel when it all works and input yields output.
Let me be clear here, though the circumstances of my life meant FORTRAN (which was the language taught to the Math/Science/Engineering students of the 70s at the university I attended) and BASIC (which was taught to the Sociology students) were the first languages I learned, and while there are far better beginner languages available today, I had fun and they did teach me some essential truths about programming and the lessons learned underlie the code I write today, so, generics, yay, parallel semantics, yay, tail-recursion, may we have some please.
The question "what language to learn" requires a follow-up question "Why do you want to learn that language?" If it's to get a job, I say, look in the want ads and go for the most requested language skill. But, to learn concepts, I think one should learn C, because speed and space matter, SmallTalk, for state and message passing, and Scheme, for functional paradigms and to imbibe the heady righteousness of no (or very limited) side-effects. These languages are trivially cross-platform and have excellent college-level texts affiliated with them. Take your pick as to which one first.
You may have other languages which you think are better for OOP or FP. I have better languages, i.e., I get more done and/or I don't feel like I'm molasses jogging when employing them. But the languages I mentioned are, as Hollywood puts it, high-concept and the costs and benefits of the concepts are readily grasped. Languages arise as a critique of a language that preceded it. While everything and the kitchen sink languages provide flexibility and commercially mature libraries, their evolution looks to me as exercises in syntactic sugaring and the bolting-on of semantics, occasionally labored, that import a paradigm from another language. I mention this as apology for not replacing my three "essential" languages with either perl or python. Now mind you, the expansion of semantics is all fine and good when one is experienced in the language and its idioms, has a code base to maintain or extend, and needs to get the job done profitably. Well, I guess that's where I am and look at all that java I write, and, so, generics, yay, parallel semantics, love it, tail-recursion in the jvm, could we have that please..
The cliche, though, is true. My java work got better because I've been doing things with C, Lisp, Scheme, and Haskell this decade. When it comes right down to it, the first language doesn't really matter, either the learner has fun with the problem solving and moves on or doesn't and won't. But let's get some fundamental concepts planted quickly.
Chinese.
War as we knew it was obsolete
Nothing could beat complete denial
- Emily Haines
After all, how can you start programming in another language before you've even got your editor configured?!
Check out the free online coding practice code at http://javabat.com/ such as this cute problem: http://www.javabat.com/prob/p183562 (shameless self promotion)
I think python has become the best choice for a first language.
* It was designed to be easy to learn with first-time programmers in mind.
* It's readable, it promotes good practices without constraining you to one style of programming.
* It's general purpose and there has been convergence on it's use: intro programming classes at MIT and Stanford, configuration and system administration in linux distros.
* It has many libraries which allow you to do high level fun stuff fast: sound, graphics, gaming engines, web development, genetic programming, plots an data analysis, natural language processing, robot control.
As mentioned above, there are many choices, and motivation is more important than language choice, but the chosing the right language does help.
I happen to believe that Python is an excellent language to start many beginners on. I happen to be on the Undergraduate Affairs committee for my University's Computer Science program, which is often tasked with picking the language for many first year classes. Ours used to be in Pascal, but it was decided that Pascal was too out of date, as the latest books on pascal that anyone in a first year class could buy, were published around 12 years ago. Python on the other hand is fairly new, still quite frequently used (including the Google Apps Engine), and had the extra benefit of showing early results so that beginners could actually feel like they are making progress. It also has the benefit of being able to work well in a procedural or object oriented language.
BASIC is usually used because it was designed for beginners.
Yeah we can skip the Visual BASIC because it has become too complex and is locked into Windows. A simpler BASIC is Free BASIC. It is also cross platform between Linux and Windows. Another BASIC is BASIC-256 designed for kids to use.
A more easier and simpler language is Logo which uses a turtle with a pen to draw things and is designed for younger kids to use, but older ones can use it as well.
It is better to start out children and teenagers on the easier and simpler languages so they don't get discouraged and give up. Do you really want to teach them C first and then try to explain the proper use of a semicolon and pointers? You teach them the languages you know later, after they mastered the simpler and easier languages. After mastering BASIC or Logo you can teach them C, C++, Python, Java, PHP, whatever later.
Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
The author of TFA suggests Python... and I would concur if I thought language was really the important thing. But it isn't... what matters much more is HOW you teach programming. Python *is* interesting in that you could re-write SICP ("The Structure and Interpretation of Computer Programs", the Scheme-based MIT intro text) to use Python, or you could teach the "intro to data structures in Pascal" course I took my first year in college (1985) using Python. It's a nice, clean language that adapts well to almost any programming paradigm.
But the real question is, are you going to use the SICP approach or the more typical procedural programming and data structures approach to teach (maybe with some superficial OOP thrown in)? You can do the former in LISP, ML, Python, and many other dynamic languages. You can do the later using basically any major programming language; nowadays Universities tend to use either Java or C++, although the aforementioned dynamic languages could be used as well.
The former will presumably give you better programmers, but a much smaller percentage of entrants will survive the first year. So it's a quality vs. quantity thing, but the answer is by no means clear-cut... many of those who wouldn't make it through a first year of SICP could still become excellent programmers after a few years of a more procedural approach. And many of those who'd excel at an SICP course might get too bored with the tedium of most large scale programming to ever become software engineers, prefering instead to go into academic CS or other sciences.
The bottom line is, it isn't language that matters but how concrete or abstract the concepts that you're learning first are. Do higher levels of abstraction make for better software engineering? Probably, but in a real software project it doesn't help you that the design is beautiful if you can't find enough people who understand it to implement it. Let's be honest... what percentage of working programmers even really groks recursion, never mind anonymous first-order functions or metaobject protocols?
On the flip side there are those (like Paul Graham) that have argued that if you use higher level abstractions and a programming language that can express them, you only need 1/10th as many programmers. But I think only 1/100th of programmers today are capable of it, so that leaves us with a large deficit.
Rambling on, :j
It seems to me that there is an implied comparison between young hackers and CS undergrads. That the two require completely different languages makes this two different questions. The first question that I read is "should young hackers start with the same languages as CS undergrades?" To which I can only answer "maybe." If the hacker is smart enough, has the resources and the desire to learn at a pace like that, and wants to learn the inner details of varying search algos, sure, throw them in the deep end. Scheme, C, assembly, give 'em the tools and let them work. Being a CS graduate student, or worse, is not about programing but research into ways to program for 10 years into the future. So, if that's what they want, let them learn the details they will need later.
If the young hacker-to-be doesn't want that, why throw them into the same muck? Give them a language that does what they want it to do: Processing, Squeek, Pascal, Prolog; Lua, Lisp, Scheme, whatever. If they don't care which search algorithm is best because they plan to use which ever one is built into the libraries they have, there is no overwhelming need to teach that detail. Let them program in ways that are fun to them, and see how different that can be compared to forcing all the young hackers to learn the same way.
The problem with Swiss-army chainsaws like Perl/Python/Ruby is that beginners see that you can do almost everything in them, and conclude that you can do everything in them, and there's no reason to learn anything else.
I would have people start out with something really domain-specific (Javascript, Emacs Lisp, Mathematica) so that you must branch out sooner. The quicker beginners discover that there's always something different available, that it might be better than what they already know, and that they should be open to learning it, the better for their long-term skills.
To a Lisp hacker, XML is S-expressions in drag.
Perl is a fine first language, very accessible in the early going and very powerful as your skills increase. It's free, and has outstanding community support. The slashdot effect that crushes other sites and servers begins with this one, dynamically generated by a bunch of perl.
Warning: This signature may offend some viewers.
I to learned about programming some time ago. After a while, during the Ada uprising, this
came into fairly common use:
Ada is for criminals.
Pascal is for students
PL1 is for adults
C is for consenting adults.
think about what this says about the approach of each language!
At least for some, even if it's not a perfect language, it might be a nice way to get their feet wet by producing things they find interesting
Quack, quack.
If I were teaching an introductory programming course, I'd start by getting them out of the GUI, away from the complexity and distraction of "modern" development environments and languages. I'd set them up in DOS with Turbo C or Turbo Pascal and have the write simple (progressively more complex) text games. This is how I started in programming when I was a kid, and looking back, it really is the best and easiest way to learn.
I remember the most annoying part about learning a language in a course was that I couldn't really make what I considered to be "real programs". For BASIC and Java you have to install interpreters (meh, I guess a VM isn't an interpreter per say). Therefore, you can't really make a program and give it to your mates without going into long details about how to get it to work. Even then, if it's Java then any GUI you make won't look native, so it doesn't look like a "real program". So my suggestion would be to start with something that can make a .exe file for Windows that anybody can run, and teach how to do that.
I am frankly amazed that a large group of (supposedly) logical-minded individuals have not yet defended poor Latin. If something IS in fact the "Latin of programming languages", then for Dog's sake, learn that first.
The Latin of programming languages is the one which forces you to understand why there are such formats and conventions in programming. It is the one which doesn't let you get away with sloppiness. It is the one that has few ways of expressing something, and each way is clearly distinct from the others.
--
C can be good for introductory programming classes at the college level because it also teaches you about how computers work.... but for kids I think a higher level language like python is a good starting point.
I personally don't like python for numerous personal reasons... but I'm teaching my son Python as his first computer language for the simple reason that there's a very good kid's programming book out there, and it uses python: "Hello World! Computer Programming for Kids and Other Beginners"
link: http://www.manning.com/sande/
The link above has some sample chapters to look at.
I've also set him up with Ubuntu to learn with. Ubuntu has a lot of free educational software (with the edUbuntu bundle), runs very well on a cheap netbook, and the unix security model keeps him from installing tons of junk programs off the web that cripples his computer. Though it would be nice if ubuntu had some of the OS X parental controls... especially with email and chat.
There are 10 types of people in this world, those who can count in binary and those who can't.
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.
Stop.
You really think you know my type? You, just like every of your type, have it in your head that everyone has a a great desire to be just like them, or to do what they do.
Honestly, I really don't. I have no desire to be like you at all. Like, I don't need to have people beneath me to affirm myself. I don't need to have power to be satisfied with what I have done. I have myself, my two hands, and my mind, and I do not want what you have and I don't need you.
Its your shit attitude and likely awkward personality.
Stop.
Careerwise, I have no desire to move up any "ladder" at all. With the internet, who really needs a ladder. If I can write a program that sells or a web site that gets hits,
while men in 3 pc suits, according to your skewed perception, seem to do nothing and make loads and take nice long vacation
First off, I have no problem with the guy in the three piece suit that can actually sell a product or a project. Those people are worth their weight in gold, and they deserve every cent. I mean, take a look at Alan Mullaly. This guy was the CEO of Boeing and his job was to walk into a room, press the flesh, wine and dine do whatever it took to convince some other guys to write him a check for billions of dollars for his jet aircraft, over someone elses. Now he is going around to dealers all over the country trying to convince people to buy his cars over everyone else's. Who care if the guy gets paid 50M a year or even a 100M a year when he is one of the handful of people on the planet that can turnaround and sell hundreds of billions of dollars worth of stuff. That's chump change to pay the guy, and there's not that many like him that he is replacable.
But most MBAs can't sell. So.. the whole supposed gift of customer communication that they have is really so much of a distortion. Either you can bring home the contracts, or, you aren't any better at communicating than the developers who work for you, no matter what you wear.
My advice to you would be to always tell the truth, because I don't think people like you do.
By telling the truth, I mean that, in your communications, you convey an accurate impression of a situation to the stakeholders. Spin is lying. Leaving out something, is lying. Communicating one motivation that makes logical sense while pursuing another is lying.
Like, I just had one guy go and explain to the client in an awfully written email just how much work they did in this little area, very self promotional, but left out the very material fact that all of that work was rather a small and unimportant part of a much larger problem that they had not solved... which I did.
consider the dumbest person using the software, put yourself in their shoes, and design the thing
Stop.
The fact of the matter is, most managers do not care about user interfaces or the users at all. Most people like you see projects and consumers as stepping stones, a mountain of people to be walked up as you go up the ladder. Are there programmers that do not care about user interface? Sure, probably are. But, there's as many managers that drive shortcuts, sweep problems under the table, misrepresent the success of a particular user interface design, hide obvious usability problems, and so on, and then turn around and blame the customer.
But again my long term success is based on myself. If I can write something on the internet that people are interested in purchasing, or reading sufficiently, then that's great and I can achieve an independent life. But if not then, I can still contentedly work on as a senior developer knowing that, I gave life my best shot trying to achieve what I wanted to achieve, and maybe I just wasn't good enough. It's the opportunity that I've been given by God and Country that I'm grateful for, and I don't need or expect anything more.
This is my sig.
I wish there were some language like BASIC still around these days. When I started programming a little over 20 years ago (I'm 29) I was able to plug my older brother's Vic-20 right into the TV and start writing code from there. Power on, "3000 bytes free, Ready.", in less than 1 second. You start hammering away with simple BASIC statements and if you want to organize it into a bigger program, prepend line numbers. Everyone can get that.
BASIC's grammar was forgiving and simple. You can turn on a Vic-20 or a Tandy (big at the time) and more or less be greeted with a prompt immediately.
The API (if you can call it that) was simple. You can more or less immediately enter PRINT, DRAW, or PLOT commands and get cool stuff on your screen, and with enough practice you get to know what you're doing. No "import", no complicated Swing/TK APIs with a ton of commands to set up your graphics contexts, etc. No compile steps with confusing messages about how the computer didn't like the organization of your statements / you forgot to link something in. In a few thousand bytes of machine code, the BASIC interpreter worked with you beautifully.
Instant gratification is a great motivator, as pointed out in the article. That's how a youngin' gets started. Eventually if he/she's interested they'll mature (programming-wise) and branch off into C or Java or Python (or in my case, assembler, since my parents didn't want to buy me an expensive C compiler and all I had was DEBUG.EXE and it's "a" command that lets you enter assembler instructions now get off my dang lawn!).
J. www.jsoftware.com . Free, easy to use, powerful. Array based, functional programming, object oriented (optional, mix and match with procedural), built in complex and rational numbers, lots, lots more.
Program to compute mean:
+/ % #
+ = add
/ = adverb "insert" (inputs a verb) outputs a verb
% = divide
# = count
three verbs in a row = fork, creates verb (+/ y) % (# y) where y is the input.
Woooooo, hoooooo!
I first learned BASIC on my own through reading "Programming for Kids" books. But those books really didn't teach me anything about programming, just how to copy code from the book to make computer games and other cool things. The first programming language I formally learned was Scheme in my college introduction to programming class. Our textbook was How to Design Programs and we ran our programs with DrScheme. As Scheme is an interpreted language, we didn't have to worry about compiling our code or creating classes. Since Scheme is a functional language, we had to think about how to define functions and how to call them. Essential programming concepts such as recursion and looping come to life in Scheme, and we had our first taste of various data structures (linked lists) and object-oriented programming. The next quarter, we moved onto Java. I think those of us who took Scheme first before moving to Java did much better than those who began with C++ or with Java.
I started programming in Basic on various calculators. First the Ti-74, which is older than I am, and when I was 13-14, I upgraded to Ti-83+.
It is a great platform creating simple programs in some sort of basic syntax, but using a computer, one may also create programs in assembler.
I would say that Java is a great language to start with, since one can quite eaisily create fun games and useful programs in that language, which I believe is important to keep the audience.
Now since my first few programming languages were = comparitors I slip up on if (x=y) from time to time.
going from c to perl.. I sometimes skip one line mandatory bracing, because it's optional in c. then I scream a homer doh on compile time.
from python to java you dont think about the .isequal() for a string
With java, you hunt an import if you want to deal with a large integer. with python you ignore it, it loves them from the start.
Anyway, start a person on a very clean language python, ruby, or perhaps smallbasic. Personally I'd go ruby, as it is close to the C and java syntactic form. Making the transition quite a bit smoother. ruby has a nice set of object functions that work very well. Ruby gives you a bunch of power, and can keep a person excited..
smallbasic may keep a less interested person interested, as it is a very graphical system.
Python is the change of pace used to dicipline insolent students who lack the good graces to properly indent.
Storm
If you want to teach someone something marketable for first language and there are plenty of .Net jobs out there, C# is much better choice.
Heh. If you want to teach them something that will make them rich, set them up with Objective-C and an iPhone :-)
There are 10 types of people in this world, those who can count in binary and those who can't.
Last year MS released a new language and IDE called Microsoft SmallBasic. It was intended to help teach beginning programmers the basics while giving them a more modern interface and framework. Kids can easily write graphical programs and games.
Assembly, scheme, C, C++ are all great languages in their own right but for a beginning program they will not be enjoyable at all. The whole reason many of us became programmers was because it was fun and rewarding. This is one reason why many people started out with BASIC, it makes it easy to get that reward, that payoff. So many people started with Apple Basic or QBasic. SmallBasic fills that role. In a few lines someone can make a desktop background slideshow of images from flickr or write a program to make a ball run from a mouse. I've already taught a few kids smallbasic and they found it fun and it gave them the desire to learn more and expand their knowledge. If I had started out having to learn assembly I would have ran away fast from the programming world.
I wish I'd learned UML first. Whether I use automated logic or hand-coded implementations, it has always paid off to have a good abstract representation.
You need something that won't bite your bum, but you DO need your next up language to be fairly straighforward.
BASIC to learn how to make loops and so on (and so that you can't trash everything without finding your debugging skills inadequate).
C to teach you how to use your programming CAREFULLY.
Once you have C down pat, you can work on powerful languages from the language standpoint. Python, PERL, Java, whatever. No matter the paradigm, you can almost always get the code done in a C style.
Profanity.
It doesn't matter what language you actually program in, but your productivity and efficiency is greatly impacted by how well versed in profanity you are, especially after getting your compiler errors, and not understanding them.
I don't moderate anymore. Karma penalty for 90% fair mods? Can I mod that unfair?
The GREAT thing about shell scripting is that you can run each step and see what it does and then put them together.
E.g. if you want to get the names of all the files in a directory that have .txt on the end and contain a "#" at the beginning of any lines in it, you can first try finding a test that will make one file go "OK" then write that in a for loop.
But you can run the test you want again and again until you get the right set of checks done.
And THEN worry about how to make a program out of it...
I recall having to learn Scheme and Fortran in first year CS after already knowing Basic & Pascal. Scheme was good for some theory on functional programming and recursion but not very practical for side projects (like web-apps and such). Today I think Python or Java would be a good first language and I think new programmers should be brought up to speed on OOA/OOD/OOP ASAP. PHP might be another good option, which would tie in with HTML. I think young people should be taught a pragmatic language that allows them to get whatever pet project they can dream up off the ground. More and more these pet project would likely be a web-based app.
I think it's misguided to start out focusing on any one language. Using different languages helps you understand what's going on in the larger picture. I think once you can grasp the fundamentals of programming, and you can generally understand a variety of languages, then you might want to try getting more heavily acquainted with whatever language you like. C and Python are both very accessible, and they can help you learn things about each other. C gets you bare metal memory/pointer stuff and static typing, and Python allows you to branch out and do more complicated things more easily. Neither are necessarily my favorite language, but they are very common and reasonable.
Java might also be a good idea, to focus on OO concepts. It's not as easily accessible, though.
Another issue is the amount of flexibility in a lot of languages. C++ especially incorporates so many concepts in complicated in differing ways.
I do think the syntax differences help in grasping what the syntax actually means.
Stupidity is like nuclear power, it can be used for good or evil. And you don't want to get any on you.
For saying this, but the answer is right there is you RTFS....Good old VB6. The VB6 IDE was nothing if not simple, you drag and drop whatever elements you wanted, go "clicky clicky" to bring bring up code view and really butt simple for making little apps. Once the kids have gotten to make their own programs for awhile THEN you can move them up to more complex languages. But nothing excites a kid more than "I made this!" and VB6 is nothing if not simple to make little apps.
And their are plenty of places like vb6.us and a1vbcode and find tons of heavily commented code snippets to show them how to make anything from a little GUI for keeping up with videos to slot machines. And with VB6 it is beyond simple to play with code like that and see what makes it tick.
So while a lot of the "real programmers" will be screaming bloody murder because I dared to bring up old VB6, the simple fact is it is really good at the niches it was designed for. It is really good at cranking off an app quickly and it is really easy to get started with. Both are requisites IMHO for teaching kids programming. After all, if they can't see that they can make the PC "do stuff" pretty quickly they are gonna get bored and not want to continue long before they get to the good stuff. And with VB6 you can have it popping off little message boxes and other little tricks within the first hour of picking it up.
ACs don't waste your time replying, your posts are never seen by me.
Jeff Atwood makes a valid point: writing software is craftsmanship and not engineering. And that's why there's so much crappy, buggy, bloated, nearly unusable software. It SHOULD be engineering. And the most stable software ever written is engineered. And it's never crashed once. It's the flight control software for the Space Shuttle.
I've seen countless discussions on what programming language to start off in, especially when you're younger. People will throw around all sorts of suggestions based on what they wished they started learning about at first; learn Java because it teaches you OOP and you can use it on any system, learn C++ because it's used everywhere, learn Assembly because you'll understand memory and everything completely, learn Pascal because it's easy to understand. But none of this is considering the youth's actual interest in programming; why they want to start programming. Whenever I first started programming around 14 or 15 I wanted to see results. At first I was in a stupor to learn that my program wouldn't be in a GUI automatically and that I'd have to stick my programs in a command line program. Really, this kind of angered me and turned me off of programming at first. I'd say, the best language for a young programmer would be something that can truly get them results, so I'd suggest Python or Perl because of their enormous selection of libraries and modules that give you a simple interface to do so much. If you can get a youth interested by giving them a lot of power that's easy to understand, then they'll learn a lot about programming concepts in ways that interest them and they'll be captivated enough to go further and learn the other languages and concepts. Youth won't be interested in learning how to be software developers, you need to show them a reason to.
Obviously
Nonsense. Just teach the kids some German, telling them to put ( ) in front of all verbs, to use adverbs as parameters inside those brackets, to make assignments by writing this_noun=this_adjective and, finally, tell them that you actually get the bugs out of idiomatic expressions badly-positioned in silly arrays.
For what it's worth, I just gave a nice beginner programmer's book to my younger brother. He never programmed in his life, as his job is all about monitoring and fixing critical server operations for a major French mobile company. So the extend of his development skills are Shell scripts. The book I gave him is one of Oreilly's "Head On" series, and the language is C#. I think it's good to start with an object-oriented language, and C# being simpler than C++ it makes sense. So far he's loving it and he made quite impressive progress. Since he's basically self-learning maybe he's missing a point or two, but overall I think he'll be able to write small apps or website quite quickly. I self-learned programming about 10 years ago, and never made that my main job either. But I picked up PHP after a quick introduction to C/C++, and that gave me a ton of bad habit I wouldn't have picked up with C# or if I stuck to C++.
I think Basic is a nice language because it's probably the closest to english out there, and thus the one likely to be picked up the fastest.
It has a comforting lack of rampant symbol usage (the semicolons, commas, and braces that can look like greek).
Use HTML for a GUI, easy to use and produces VERY pretty results for first timers. Suddenly you've got a very easy environment installed on almost every computer for learning an interpreted (fast to compile and debug) language with C-like syntax. Note: I'm of the totally unbiased opinion that C/C++ programming is *real* programming. Anything lower than that (e.g. ASM) is probably wasting time reinventing the wheel, and anything higher than that (e.g. Java, Python, PHP) is like having the actual work done for you (though this is often a very relaxing bonus, lol).
And though this will be incredibly unpopular, I can only promise it isn't flamebait when I say: I despise PERL's syntax and all the the people who love PERL are well-meaning, sincere and BADLY mistaken, lol.
Censorship is the opposite of education. If neo-darwinism were defensible, people would not need to try and censor ID.
Well, APL was my first programming language. Along with Fortran-66, that is. APL was much easier, however, because it was done at a teletype terminal and used stored workspaces, and its primitives corresponded to useful processing operations. One line of APL could do the work of a lot of lines of Fortran - often hundreds. Fortran involved boxes of punched cards which were run as overnight batches, unless a card jammed or got torn in the reader. The probability of a card reader screw-up approached unity if the number of cards exceeded a whole box (2000); this determined the practical maximum size for a program.
Those who can make you believe absurdities can make you commit atrocities. - Voltaire
Java is a good language to teach someone how to program and it is harder to write really unsafe code, like PHP (which is easy to learn but also easy to fall into bad habits) and if you get them the right books to accompany it, then they'll write superior code and learn algorithms.
Effective Java and beginning Algorithms are two useful books but they'll need to know some Java before delving into those books.
For learning Java, Core Java 1 & 2 are excellent. If you don't want to spend money to start with then you can start with The Java tutorial as that book is also available for free in html form on the sun site.
Definitely Python, as it can both teach regular programming pretty easy and also can teach OOP concepts easily as-well :)
So, learning python can be a start to learn C++/C#/JAVA and help understand it much more. Also, It's quite easy language, you can do pretty much whatever you want, it will help you understand sockets, file parsing, oop, variables a bit less though (it will make a new programmer a bit confuse) but overall it's a great language and I couldn't be thinking how my life would be without python
Read and Comment at my BLOG
!!!
Depending on how young, the Lego Robotics is a great way to combine fun building with fun programming. There may be a modern variant for Apple Logo and turtle graphics to teach control structures and the basic algebra, analysis and logic required to write programs. Here are some Turtle Graphics links I found:
More about Lego Mindstorms: http://en.wikipedia.org/wiki/Lego_Mindstorms
Competition for Middle Schools: http://www.usfirst.org/community/fll/
Please learn both Ruby and Python, and while you're at it, some Javascript/JQuery/Mootools cool stuff too. And do it all using full systems hungarian notation. In vi. On Solaris. Upside down!
AND
If you feel like having some fun, adopt and a silly "langauge" like brainfuck or MS ASML (a quirky state machine language you can do OOP in).
Because of the current economic climate, please do not learn C, C++, Perl or Java. Please do not approach any VHDL gigs either (nb: you'll design some plain awful crap until you've done your advanced systems/digital modules). Please do not learn any programming abstraction methods or useful models - specially via the easy-peasy Java intro to it all at http://www.bluej.org./ Dont learn Qt or STL, and especially avoid OpenMP and Boost. Dont code a transaction engine, but DO make use of obscure SQL calls and extremely long queries with lots of stored proceedures on unnormalized sets. If you know when to use singletons, RAII/smart pointers or observer patterns, or know when to hit someone for telling you how to program, then stop: STOP I said! Forget everything you know and start again. Perhaps you could learn how to code a standards compliant doc type definition spec for the process of eating cheese. If you've learned anything useful, stop and spend time coding an XML parser or i18n input library, or if that's too hard, go and add lots and lots of structured exception handling to your favourite open source library.
In advance, I'd like to thank you for not competing with me and everyone else who's graduated or recently been made redunant.
Cheers,
Matt
You could try learning with revTalk. Its a very high level, English-like language thats easy to learn, read and write. Instead of focusing on esoteric syntax, you can focus on what you're trying to do. Its perfect for beginners because they get to see results very quickly. Yet its powerful enough that you can learn proper principals of software engineering when you're ready. There is a free version available for all platforms http://revmedia.runrev.com/
When I learned programming, back in the dark ages (70s-80s), compilers were expensive and hard to come by, and something like a UNIX system was almost impossible to get time on. PCs were in their infancy and home computers made by Apple, Atari, Commodore, and TRS relied heavily on BASIC and Assembly languages for software development. I learned BASIC first, then some assembly, then Pascal and FORTRAN in school, but I didn't really start learning the important fundamentals of software engineering until I was exposed to C on UNIX. I struggled with C++, coming from a structured way of thinking, but learning Java cured me of that disease and gave me an understanding of advanced OO concepts, patterns, etc. It is these fundamentals that transcend languages and knowing them allows an engineer to be useful with *any* language given a short learning curve. Today UNIX is freely available in various flavors and so are compilers for just about any language. I would strongly suggest learning programming by writing the same program in several different languages. This will allow you to focus on programming fundamentals while learning to make language concerns secondary. C and Java are probably the most comprehensive languages as well as being the most valuable to know. No language is all that easy to learn, but you will be surprised at how fast you get good with practice.
Sequence, selection and loop are the basics of the procedure part of any programming language. So, begin with BASIC language, then move to C for functions, pointers and memory allocation etc., then move to C++. Unfortunately, most of the books do not teach you to crawl, walk and run in the teaching, rather most code shows how the author developed his code. Too much noise (adding all sorts of information) that distract the student as to what should be done at each step.Algorithm design, verification of the algorithm, flow charting, bench testing and tracing before coding is ignored and people start pounding on the machine and try to write code and debug and make a mess both in their life and the company they work for. Learning to program is a well structured effort and one should learn all these aspects. So, the first programming course should start with problem solving and using a simple language like BASIC.
In my opinion, the most important part of starting a computer language is cementing an interest and desire in using it. For the beginner, it is ideal because it is an extremely visual way to work (out of the Flash IDE at least -- you could get a free version using the Flex framework if you wanted but it would be running out of Eclipse). AS3 is easy to use since it can be used as a basic scripting language. It can be used totally as an OOP language as well. The transition of working on the "timeline" and moving to Document Classes offers a lot of practical education. It's in high demand professionally, and once you get really good with it on a OOP basis -- you are well on your way to understanding many other languages.
After reading the TFA I cannot help myself wondering what the purpose is. Is he trying to teach the 15 year-old to program or is he trying to get the 15 year-old make the computer to "do stuff".
He might be better off starting off with a raytracer like Pov-ray, fractal software, L-systems or playing with a game like Mindrover or such to get a feel for how to express oneself in a structured way. If you want to encourage exploratory interest, get him hooked on something he is interested in and then introduce the concept of programming as a means to let him achieve something he is after. At that point the choice of language is either obvious or doesn't matter that much.
Also, I believe that you can introduce more than one language, preferably rather different ones, quite quickly. This to prevent one to get stuck in one mindset. A young mind is malleable and I think can handle this without too much problem.
1st language = Basic
2nd language = Fortran
3rd language = Lisp = nirvana!
AutoIT(http://www.autoitscript.com/) was a good language to start in. It has a great help document that gives examples of every function. Their forum is also full of helpful people.
My intro course was basically a UML course that utilized java for implementation. Afterwards, I took a scheme course, The interaction of those two was about perfect for me, things clicked on both the "abstraction and design" side and on the "fighting it out with the machine" side.
Tcl/Tk has a lot of advantages as a first language:
1. Small language with a simple syntax. :)
2. Interpreted language, so no compiling necessary.
3. Can be used interactively.
4. No silly whitespace/indentation issues like Python.
5. No memory management issues.
6. Built-in GUI library that's easy to use. Creating a window with a button that performs some action when pressed is a one-liner.
7. Not object-oriented. I think starting off with OOP is a bad idea, they can learn objects later.
"what we do is craftmanship, not engineering"
No, it isn't.
Richard Steven Hack - This sig is TOO GODDAMN SHORT TO DO ANYTHING USEFUL WITH! MORONS!
1st programming language should NOT be a progamming language!!
Teach FORMAL LOGIC first!!!
Plenty of programming requires virtually no understanding of the metal. When you program SQL statements, you change your memory allocation patterns, use pointer foo, and use gdb to help?
Assembler skills do not help with Javascript DOM programming. I use tools to help detect memory leaks (in the browser) and performance issues (unpredictable shit - not simple O(n2) problems), and the techniques for avoiding or fixing problems bear no relation to machine code. I do have some basis for my opinions: I started with basic and assembler, and my first job was doing embedded development where knowledge of the internals did matter.
You are presuming that teaching shitty programmers Assembly will teach them to be good programmers. More likely you are a good Assembler programmer, so reflectively assume that "good" programmers must know assembler.
Happy moony
A famous Engineer here in Uruguay wrote "there is only one programming language, and it is English". (We speak spanish natively).
The best advice I can give to CS students is to learn English very well. Then they can understand better most programming languages and of course can tap the resources that are on the internet, mostly in English.
Anyway, as someone wrote, learning to be precise in what you want to program is what I think is most important, that is why I try to teach students to write first the algorithm in their native language, in a structured kind of way.
I have very fond memories of learning to program in True BASIC in high school. It's a logical step up from the TI-83 BASIC that I assume any mathematically inclined high-school student is familiar with these days, and it provides a straightforward IDE to get students up and running in minutes. Most importantly, perhaps, it provides an intuitive library for plotting various lines and shapes and capturing user input, which means you can create games relatively easily (essential for sparking the imagination of a 15 year-old).
Sure, True BASIC was pretty outdated even 10 years ago when I was learning. But to the student who is just beginning, the programs that they write will feel a lot more powerful than the console-only apps they would start with in C++ or Java.
I'm sure people will scoff, but think about it. With SQL you will get logic, types, and structures. It's in basically plain English, so no bizarre lexical structures to get in the way. No compiler necessary, and the tools a student would need are cheap and plentiful. All the school has to do is provide access to a database server.
After all, data is what's at the heart of so many applications.
The point of learning C++ or Java is to get at data in the first place, so that would seem like a logical place to start. Unlike scheme, it also has practical use in the real world.
The system has failed you, don't fail yourself. --Billy Bragg
Nothing about why a kid would want to write programs.
My oldest son started playing on my MAME rig at the age of four, GBC/GBA emus at six. He loved the 8 bit Nintendo games.
By age eight I showed him GameMaker. Community, sprite sheets, people writing fan versions. He loved it.
I mean, I'd show him perl and shell and he'd be like, why? But being able to write your own games, that's a motivator for him.
He still does GM stuff, but spends most of his time in Flash, again because it does what he likes.
The most important thing you can do is make them realise that programming is useful and fun - once they realise this they'll be self motivated to learn and you can introduce them to trickier and more powerful languages so they can really get going. Basic is good for this: it let's them get going with relative ease and produce useful stuff, but they'll soon enough begin chafing against its limitations, providing the requisit motivation to branch out into "serious" languages.
Heh, try being an EE. You'll know how a CPU works inside and out. Will it make you a better programmer? Maybe one that does embedded systems.
Shai Schticks:"You don't make peace with friends, you make peace with enemies"
That the question is poorly defined... I mean "What's the best first programming language" doesn't provide much useful information (even in the article) about what "best" means. What are the "learning outcomes"? - even if you define those kind of informally. The fact that the writer of the article gave an answer without defining the question is the reason he failed to answer the question correctly. QED.
After the idiocy of his "hacker ethic considered harmful" was pointed out, why are we still seeing this guy's junk?
My blog: http://www.seebs.net/log/ --- My iPhone/iPad app: http://www.seebs.net/seebsfrac/
On a several hundred mile road trip with my niece, a high school junior who hadn't ever been exposed to computer programming before, we decided to kill some time by learning on the laptop as the cows and outlet malls rolled by. I fired up Emacs for use as the IDE to Common Lisp. She was editing fine within minutes, and before we got home she was writing her own functions. Did some arithmetic and logic stuff, hashtable usage, strings, symbols, and the result was the beginnings of something like the ANIMAL game.
She found the entire experience to be "Oh Cool!" just plenty.
She can't wait to tell her boyfriend that she did some Lisp programming - he's into computers!
I submit that the "best language" depends on the student and on the experience that the teacher can give them, and that you don't even need any graphical interfaces to excite sharp young minds.
I would venture to say that many entrepreneurial kids these days (myself included) want to learn what they broadly think of as "programming" so that they can build great websites that they can ideally sell later on for lots of money, and get on with their "portfolio career". The barrier to entry for implementing a web-based business model used to be the $30,000 sunk cost of hiring a programmer to build a dynamic website with web 2.0 functionality. Now, CMSes like Wordpress, Drupal, Joomla et al. offer the opportunity to start that business for next to nothing, if you have some web dev skills. If one jumps into wordpress as a, let's call it an environment, one learns things, languages, principles, in a haphazard way but learns them nonetheless (again, if one is going beyond basic blog functionality and a downloaded template). One can come to understand HTML, PHP, MySQL, CSS, Javascript (jQuery library of course) and hence the DOM, can learn their way around a command line, and eventually ... down the line, begin to learn OOP, which actually THEN serves as the spark igniting interest in learning other, more fundamental programming languages.
Does this make any sense to you guys?
I started with PHP and then continued with C/C++. PHP is probably the easiest language to learn and you get used to C syntax.
C++ is everywhere and that won't change overnight.
English.
After that, HTML, then SQL, then PHP or VB.Net. Then wait one year while the replacement for Facebook is written.
l33t. That is, it seems to be the rookie's favorite. Probably they feel it does favors to their coolness. Yeah, sure.
I hadn't the slightest objection to his spending his time planning massacres for the bourgeoisie... (P.G. Wodehouse)
Beginers All purpose Symbolic Instruction Code. Blank screen to "HELLO WORLD" in seconds This gives the instant results that youngsters want.
those were indeed the good old days :)
i personally have happy memories of typing in games printed in magazines into a ti99-4a. i never did it enough to learn enough to program the games myself, but it taught me that computers could be programmed. nowadays unless it has a 3d interface where things fade in and out nobody seems to be interested. it is very sad, the way computing has developed.
If you are training modern day boiler makers, then java or some other "industry ready" language is good.
If you are educating engineers or scientists, then algorithms and concepts are what you need. And a whole gamut of languages are useful (from Lisp to Perl, via C & Java)
-- Butlerian Jihad NOW!
We ran the update once a day on the 40,000-card master file, using the 1,000 card/minute reader. There were a couple of jams each day. Once a wad of cards got caught in the pinch rollers: smoke started billowing out of the car reader. Good times.
Slashdot entertains. Windows pays the mortgage.
The best beginners language? __PSEUDOCODE__! Back when I initially went to school, we started with a class on programming logic, using basic in DOS. It wasn't perfect, but if you want to debate about the 'latin of programming' then you have to go beyond the language to the fundamentals of programming itself: Logic and algorithms. You can write most logic and algorithms in pseudocode that pretty closely mimics 95% of the languages out there, since let's face it, except for a few higher level languages, your loops and logic are pretty much written the same, with a bit of formatting nuances. the rest are language/platform extensions (print, cout, echo, write, etc). For learning actual languages and structure in programming, it was hard to beat COBOL for just hardcore top down structured processing in an easy to read/write manner, and then C for interactivity and grinding logic. I still think that those two languages are important. In modern times, I can see PHP becoming useful as a quick and easy primer for getting into learning to program. You can make it as simple, or as OO-Style convoluted as you want, and achieve the same results. JavaScript is inherently too abstract once you get past making onClick events. getting a good base in the flavors of assembler helps round out the knowledge and helping to understand how things work under the hood and also SECURE programming in ways. How the heck do you know what 'smashing the stack' is until you see the nuts and bolts of how a stack works and why it works? The trick is baby steps, but not such small steps that you're trying to learn to walk with your laces tied firmly together.
We had a guy down in the bowels of the beast who wore a T with the legend "I don't know where the hardware ends and the software starts," so I guess it's all about what your Young Programmer is up to, right? Personally, I was an autodidact on the Apple ][+'s 6502 assembler (Lisa 2.5, IIRC), AppleSoft and the Apple Pascal language card, who soon switched to CP/M and MSC 4.0. just because you had more control over what were doing. After that, Turbo C got me my first paying job, and it took me years to understand I was being hired in order to outsource some CS major's job to my private third world. Hallucinations of grandeur aside, it was fun while it lasted. Some 20 years later, there seems to be a lot more phylogeny to recapitulate in order to bring the pups up to speed. I no longer program at all, frankly, except in the inflated redefinition of the term in which "programming" is pulling acceptable subset behaviors out of the Open Office menu structure.
That said, genius being universal and all, the next CS paradigms will probably come out of some idiosyncratic kid in North Korea, sweep the internet bistros of Cantonese China before anyone knows it, and next decade we'll all be learning SkyNet.
``Tension, apprehension & dissension have begun!'' - Duffy Wyg&, in Alfred Bester's _The Demolished Man_
"People that knock the hacker ethic are a bunch of MBA drones that could never really build a damned thing themselves.
You learn to program by diving in and doing it. The more you practice and study, the better you get at it. GM was very good at shackling some very brilliant engineers and turning them into process drones. Look at where it got them. Great things are built by individuals and the more steps you have in the way of people being individuals, the worse you will get. Products have to be owned by the engineers that make them and they are personal works of art.
At the end of the day, the managers, bean counters, and all of these other people with their measurements, metrics and fancy charts are so much fluff, a tax on the capable in society... by really a bunch of leaches that could barely feed themselves as they lack the mental self sufficiency to do anything other than to try and ride the labor of others. We condemn socialism in society there's no real difference between the PM in a three piece suit and the lowest of the homeless people. Neither add any real value to society, its just that, the PM knows how to use PowerPoint and the homeless guy does not." - by tjstork (137384) on Saturday July 25, @10:58AM (#28818667) Homepage
AMEN, & agreed, 110%, on ALL points you have noted...
APK
P.S.=> This is probably the shortest post I've ever done here, & simply because I have nothing more to say than the above really - as the parent poster, said it as well as it can possibly be said (especially in regards to the "leeches" in society called mgt. (@ least the type that cannot do the job of their subordinates they supervise, because no leader should be of that "ilk", period, & a good leader doesn't ask his troops to do ANYTHING HE CANNOT OR HAS NOT DONE, himself, hands-on & for years to decades professionally - the kinds that have NOT done the job themselves are nothing more than the parent poster described them as, leeches that ride on the work of others & there are PLENTY of them in MIS/IS/IT unfortunately, & they tend to make poor decisions because they have not done the job themselves & rely SOLELY on the advisement of others, others who CAN & DO make mistakes themselves (& w/ mgt. w/ no hands on gained insight? You face this bad possibility, because they aren't well versed enough in this art & science to make decisions themselves or to analyze the advice of others they use for said advisements also), + these "fake-it-till-you-make-it" mgt. types truly are next to useless because they have not, & a good boss can "jump into the trenches" @ project deadline time & help IF HE HAS DONE THE JOB, HIMSELF/HANDS ON, before - effectively in essence, by becoming another "working set of hands" IF & WHEN needed))... apk
"But frankly, ObjectPascal, as a language, and Delphi, (as in:) the libraries, are extremely outdated today" - by Hurricane78 (562437) on Saturday July 25, @01:29PM (#28819901)
How can you say that, when the language & IDE is still being produced & sold by BORLAND?
APK
P.S.=> And, I know 1 thing, for sure, based on results from a COMPETING language's trade rag, VBPJ -> In Visual Basic Programmer's Journal, Sept./Oct. issue 1997, when I was a VB5-6 &/or MSVC++ coder primarily, in the issue entitled "INSIDE THE VB5 COMPILER ENGINE"?
Delphi, oddly considering this was a competing language trade rag, absolutely WHOOPED both VB5 &/or MSVC++ 5 in 7/10 tests performed (to test programmatic speed & efficiency)!
Especially in MATH and STRINGS work, blowing away VB5 in speed here, by MANY ORDERS OF MAGNITUDE no less, & beating even MSVC++, by double (which, mind you, EVERY PROGRAM DOES both strings & math work) literally 'taking me away' from, or rather, replacing my former favs in MSVC++ & VB, as my "weapon of choice" for building programs... apk
When I was a kid I started with Logo. It was pretty good because you got direct visual graphical feedback from your code. Today, I would go with Flash's ActionScript3 for that same reason. You can import graphical resources with a UI and manipulate location, rotation etc., easily with code.
Alas, it is proprietary though.
"How about teaching people to write algorithms ? You know, the kind we used to learn on the 60s-80s, which could be used to program in ANY language (from Assembly to Pascal/Cobol/Fortran), and not today's verbalized Pascal that people call algorithm ?" - by morcego (260031) on Saturday July 25, @01:59PM (#28820139) Homepage
Agreed, 110%, & I am SURPRISED that your post have not been "modded up" to +5 actually (&, IF I could dispense mod points (can't, as I post as "A/C" here), I would mod you up) for its excellent points!
(Data Structures is the BEST coursework for what you describe imo... & I have gone thru each language tool you noted in academia, & later on the job also - languages don't REALLY matter, they're just syntax - CONCEPTS, however, DO (& the most)... so, I cannot say enough in agreement with you here on that note in particular)
----
"That was the first "language" I learned and, having learned 20+ languages after that (including some obscure ones lines Forth and Lua), even today I thank my teacher for giving me such a good understanding of programing without relying on any specific language's concepts." - by morcego (260031) on Saturday July 25, @01:59PM (#28820139) Homepage
You "hit the nail right on the head" perfectly here too... &, we sound like we followed the same pattern, because like yourself? I am around the mark you state in terms of languages used over time both academically & professionally - you had good teachers too, because they did make you see the correct way to go about any of this - CONCEPTUALLY!
APK
P.S.=> Good post, mod parent up +5 people... he has it completely right! apk
Here a personal tip for a begginer's programming languaje:
0. Love for Programming
1. C/C++
2. Python
3. Java
4. Pascal
Forget server-side languages -- Ruby, Perl, Java, PHP, CGI, etc.
All you need for a great programming intro is JavaScript. Results are immediately and graphically visible in the browser. Language is not too complex. And it's flawed enough to spark interesting discussions in a subsequent, advanced class.
Recommended adjunct tools:
* WebDAV for data storage (see LimeBits , and its Axis library)
* Firebug for tracing and debugging
* jQuery for DOM manipulation
Thanks,
--Jonathan, limebits.com
I would suggest that people try some different tools that demonstrate concepts in an interesting way early on. The first thing that popped to mind was Logo. This can be a fun introduction to machine interpretation. There was a Logo I played with once that had mazes along with the blank sheet for making geometric patterns. Fantastic Contraption is another interesting toy.
An important language that hasn't been discussed much from what I have seen is Algebra. Early students of computer science should put as much emphasis on math studies and seeing the symbolic relations between solving for x and the manipulation of variables. Understand binary and change of bases. Substitution and word problems will strengthen problem solving and symbolic logic. Computer science programs require math well past calculus, so math should not be taking a back seat to writing code early on.
As far as specific languages, most high schools probably teach in pascal and basic, which are good languages to start with, but hopefully the kid will be reading through this forum, seeing what everyone writes about the different languages and something will seem particularly interesting, then the self guided exploration of languages will give insights into syntax. I got caught up in Lisp in this way, although being in a class and going through whatever structured program they have is going to educate programming in a most rapid and robust way.
- linux because you learn stuff about the thing (aka. operating system) you write code for
- bash because you get things done
- python because it's beautiful, fast and easy to learn (while remaining a complete OOP language)
- c to get to the essence of 37 years of programming
Of course, if they should become expendable, let them learn Java.
And if you want to lock them into some vendor's cage, give them Visual Studio and C#.
Comment removed based on user account deletion
There are really two choices: MIX or Scheme
What about NI LabVIEW?
Just teach them any high level language (procedural, then OO). If they utterly fail to grasp the concepts, they shouldn't be learning programming in the first place. That in itself is a lesson.
I am 21, and I had an interest in programming from the age of 12. I tried starting with C, VB, and JS. C felt un-intuitive, VB was pretty easy (and I made a fully functional program from it) but it took a large amount of code and an understanding of the IDE to get anything done, and I couldn't get things to work the way I wanted in JS.
So I resorted to an extremely simple, quick, and immediately gratifying alternative - Programming my TI-83+ Graphing Calculator.
The manual is very informative, and the language is incredibly simple. Variables could not be any simpler (they are hard-coded, with the only options being letters A-Z), the commands are chosen from lists of menus (effectively removing misspellings from the list of screw-ups), and the syntax is incredibly simple. You can start with a program that runs Pythagorean Theorem (remember, the kid is 15 and the son/daughter of someone on Slashdot), work up to string manipulation, and eventually make games with moving 'sprites'. The other MAJOR benefit being that if the kid creates something useful, he can give it to his friends (TI Graphing Calculators can transfer programs using a very simple data cable).
So the kid learns the basics of coding, gets the immediate gratification from creating a program, has an all-encompassing manual detailing every command for when they want to try something new, and gets the excitement of having other people use something they created. Not to mention having something productive to do when they are bored in History class.
If I had to teach a 15 year old to code, I would definitely start with a TI-83+.
But clearly you have something better to say...
Common Lisp.
I'm still really new to the language having more than 12 years or so experience programming with the Algol-decendent languages like C, etc. I went the Assembler -> C -> dynamic languages (Perl, Python, etc) route. However once I started delving into it I started realizing that if I had to chance to start over, I'd much prefer to learn CL first. It's much easier to understand my programs and syntax is nearly a non-issue. I find it is a very pleasing language to work with.
The homoiconic structure of the language removes most of the cognitive dissonance between representation and execution. More often when I was starting out I wouldn't catch many errors until I ran the program. Finding optimizations became an exercise in juggling the syntactic representations of language primitives which were different from language to language. As I improved over the years I started creating a divide in my mind between program representation and AST... which is sometimes fun (I had a lot of fun just poking around with Perl early on) but at the same time was a pretty difficult hurdle to overcome.
The prefix notation and minimalist syntax of CL is also pure bliss. My editor takes care of syntax for me. No need to memorize precedence tables or the syntactic differences between statements, definitions, calls, etc. The uniformity of the language means there are far fewer rules, irregularities, and exceptions to keep track of. More mind space for programming and problem solving.
Some people think simplicity is procedural instructions and infix syntax. "Open the file," they say, "read the next line and apply the word count function to it." We're so used to infix notation from elementary mathematics that it's second nature. These sorts of languages usually start with the premise that a program is represented as a series of statements that are executed by the interpreter/compiler/etc. Yet the novice doesn't have to proceed far in their tutelage before exceptions to this rule are introduced (such as a definition, usually a block of statements that are executed in series when the name of the definition is called in another statement... whoa). Further complexities are added by layering the exceptions.
Whereas Lisp's uniformity allows the novice to start with one simple atomic unit of knowledge, the humble list, and evolve complexity as they learn more. Rules learned as one proceeds in learning Lisp are almost never (if ever at all AFAIK) excepted by the addition of new knowledge. One of the first bits of knowledge you learn early on is, "everything in Lisp is a list," tends to remain true throughout. There are only a handful of special forms to be aware of and that's all. I think for a novice this is a much more natural way to learn... start small and grow from there.
Of course choice of language is quite personal. I certainly had a lot of fun (and still do from time to time) working with Perl (sometimes just for the sake of fun). I thought assembler was pretty cool when I started out using the graphics routines in the Lisa assembler on a dusty old Apple II (right when some of my friends were lucky enough to be getting the new 80286s). But in retrospect is was pure curiosity which drove me: something that cannot be taught.
I'm not a coder, but I am trained as one, so I have experience but I'm really not up on trends.
I learned QBASIC when I was around grade 4, and it was only 8 years later in high school that I even started object oriented with C++.
It was great for learning, but I have to wonder - are there any good procedural languages for beginners? Or is it even possible to lay all the basics of OO on a beginner? People sometimes ask me what a good starting point could be for learning to program, but I really learned in a different era before such abstract concepts as OO entails were in any way neccesary.
Personally I tend to recommend modern VB for an easy OO introduction in no small part due to the handiness of the IDE and how forgiving it is of little mistakes. The various ways of passing or referring to variables in C++ is something I would never even consider laying on a newbie, especially when some methods may work in some cases, but not others.
Don't get me wrong. In my younger days I cared a lot about the language. Now, however, I think of myself as the old cynic.
Seriously, F*** the language. What you need to do is teach students paradigms:
Teaching one programming language to new students is in my opinion quite damaging; it can lead to the idea that there is but one way of doing things. Its an old mindset from the days when there weren't as wide a range of options and persists mostly do to teachers being to lazy to properly learn multiple languages themselves.
You don't need to get the students to program proficiently in all these languages. You just need to understand 2 or 3 (Assembly, Python/Ruby, and Clojure/Erlang) from which they can try each of these methods. Whats important is that they understand that there are a lot of ways to program and a lot of information to look at.
when will a decent graphics library finally be part of the standard. standardised graphics routines have never succeeded the vga bios.
for a combination of historical, political, and technical reasons there is no standard way to accelerate graphics. sure there are apis such as directx and opengl.
what i wonder is, was microsoft forced into their decision to develop their own api and to not use opengl ?? or was it their own strategically rooted decision. was opengl encumbered in some way such as being subservent to glacial bureaucratic processes, and possibly also bound to intellectual property which could be used to manipulate or control any adopters.
one factor was that opengl only deals with graphics where as winG and later directx was a more complete solution for games programmers. providing apis for sound, input, networking as well as for graphics.
microsoft succeeded in getting directx adopted and entrenched because they appealed to the developers.. (developers, developers... :)
one way to compete would be to develop an entire opensource solution. all the way from the ide to the api, tools, to the multiplatform distributions.
"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." - by Gravis187 (1605621) on Saturday July 25, @03:00PM (#28820577)
I know exactly YOUR "type" too - you probably cannot code a lick to save your life, hence, why you acquired your MBA. Your statements about "confusing logic" below evidence this clearly enough for anyone, because that is what "step tracing" & compiler IDE debuggers (or, external kernel level ones even such as SoftIce or WinDebug) are for... I mean, ever heard of a "watch window", even? Read on others, I am going to 'pick this apart', from this BLATANT fake:
----
"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." - by Gravis187 (1605621) on Saturday July 25, @03:00PM (#28820577)
Well, looking @ the USA as a whole lately, under "your type's fine leadership"? Beg to differ - the results are NOT fine, and yes, you as our "fearless leaders" are to be held responsible. With greater power comes that greater responsibility, so eat it. Mgt. doesn't do 1/10th of what actual workers do, so please - do NOT try to "fool anyone" with that crap (I've been on BOTH sides of this fence, for years in BOTH mgt. & as a software engineer/network administrator, professionally... & that IS the truth).
----
"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." - by Gravis187 (1605621) on Saturday July 25, @03:00PM (#28820577)
LMAO - don't you mean "logic a dolt like me is unable to comprehend", rather? There are compiler IDE debuggers you know, & watch windows, as well as external debuggers if necessary & needed, to help w/ that much (& yes, they DO work, but expecting a "fake-it-till-you-make-it" type like YOU to understand how to use them? Apparently, THAT is "too much" for your dull brain to 'drink in & digest', period).
----
"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." - by Gravis187 (1605621) on Saturday July 25, @03:00PM (#28820577)
A boss should ONLY BE A BOSS, if they have done the job as long as, or as well as, their subordinates - THIS is the very thing that coders do not like and I have seen TOO MUCH OF IT, over time, in this field, professionally (16++ yrs worth in fact). I've seen the results of their bad decisions, due to lack of actual "hands-on" experience in "the trenches", themselves.
Leadership should be EARNED, & not by a degree or certificate only.
(By the by? Your MBA?? A joke - I have a FULL BLOWN B.S. in Business Administration with a concentration in MIS, which is also topped off by a comp. sci. degree (associates) as well - I know EXACTLY what you know, & far more, via academia, in exactly what YOU profess to be expert in... especially having helped my brother acquire his MBA, & seeing what it was he studied in order to gain one. E.G.-> Knowing how to calculate the par value of a stock "doth not an MIS/IS/IT mgr. make", in short).
----
"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." - by Gravis187 (1605621) on Saturday July 25, @03:00PM (#28820577)
Our "shit attitude"? When 'secret handshake' masons types or others like them take over the reigns, outsource our jobs, & then act as if they KNO