What programming language should be learned first? And what was your first programming language?
Some articles on the topic
- Introductory Computer Programming Education by Philip Guo. The proposed curriculum is: Python and Unix command line, then Java within the Eclipse IDE, and then C and Scheme.
- Thoughts about the Best Introductory Language by Shlomi Fish. The author advocates teaching Perl as the first language. At the same time, he admits that Perl is hard to learn.
- LOGO. The programming language created for teaching. Procedures and recursion can be learned in a graphical environment (see sample programs). Papert's book includes several success stories, e.g. the history of Logo in Russia.
- Alice is a 3D programming environment for novices. The programming language supports loops, conditions, and some OOP stuff (objects, properties, methods, events). 3D animations and even simple 3D games can be made with Alice. The program is written by dragging properties and selecting methods/arguments from menu. Should be attractive for the kids who dream of creating their own 3D game!
- Ruby – best introductory programming language by Tony Targonski.
- Seven Deadly Sins of Introductory Programming Language Design by Linda McIver and Damian Conway. The paper also contains recommendations for choosing a more "teachable" language.
- Teaching programming to kids. Discussion on Reddit.
- Just Let BASIC Die by Albert Sweigart. The author argues for using Python as a modern introductory language.
Questions
What are the criteria for choosing the first programming language? What language would you use if you wanted to teach programming to your kid? Why? And what was your own first programming language?
Your feedback is welcomed. Please use the comment form below.
35 comments
Ten recent comments are shown below. Show all comments
The responses that cite an easy to use development environment that explains syntax errors and catches the various "beginner" programming errors sounds good, but ... Having learned to program using FORTRAN on punch cards, and with limited resources such that I only had about 14 attempts to get an assignment correct, I quickly learned to be meticulous and thorough. I don't see that in the junior programmers today.
IMHO, I think a first language should be one that is available on ALL platforms and has tools available through the public domain. It is a serious career error to become locked into an architecture or operating system. A good software engineer (differentiated from "programmer") will look at the programming language as a carpenter does his tools, as an artist does their brushes and paints.
My choice for "best" first language -- pick the worst (hardest, complicated, etc.) one there is. If you can learn that one and still want more, send me your resume. Otherwise, go get an MBA.
Recommended first language: Erlang because it has lightweight processes and encourages you to write parallel code, it is also concise, clear, and useful for real world tasks. It also has some great virtues that can positively influence the way you write code in other languages: no globals, single assignment of variables, etc.
No beginner should ever be asked to learn a language that does not have parallel processes as part of the language. We will never get away from the dumb calculator approach that most of us were taught if we don't start taking parallel processing, multiprocessing, multitasking, distributed computing, cooperative sequential processes, etc., seriously.
If people start to lose their interests when learning these languages and saying they're too hard. Then they should stop and do something else instead because programming isn't easy. Either they're going to know that soon or soon enough.
TCL. TCL starts with a stunningly simple syntax. Originally, everything was a string. Hello World is incredibly simple to write. Ditto for the basic console apps you start off with when learning just about any language. However, from there you can go in some very interesting directions:
* Since source code is data, you can do lots of the cool things Lispers can do, without all the annoying parentheses.
* TCL makes a great scripting language, especially when you consider expect.
* TCL has an easy to learn GUI library (Tk) included which runs on all operating systems.
* TCL is a dead enough language that its features are stable. If you write a TCL example in a textbook, it is still likely work ten years from now.
* And if you want speed later, you can hook TCL up to C or C++.
* And though it is a mostly dead language, it is easy to extend, either using C/C++ or within TCL itself to build your own domain specific language.
* Ousterhout's original book on TCL was wonderful. Haven't seen the later edition.
If you are doing a lot of mathematics, then TCL's need for expr can be annoying, but it is far less annoying than Lisp's bizarre syntax, or that of any stack based language.
Programming is never easy.
Learn the most complex high level language.
then go for most complex low level language.
Simplicity never precedes complexity.
Lua, by a wide margin. (www.lua.org). I taught the language to undergrads in an African country in a week. The most readable scripting language, and the fastest, too (www.luajit.org!). And, importantly, a language operating by the principle of 'least surprise'.
My first language was Basic V2 (C=64), then C=64 asm, short time QB then TP. Still mostly Delphi programmer, but I do C/C++ too.
Given that history, my suggestion is predictable, but admitted, depends on target.
Testing a young kid's interest in programming? Then something scripting and visually appealing.
However once it goes in the direction of a more formal CS education, I like Pascal. (and then a procedural one). Simple syntax, string management and little boilerplate code
for a minimal program. Easy upgrade to C/C++ later.
My first was Python. It's actually still my favorite(along with C++).
Pascal was my first programming language.
Instead of focusing on programming languages (religions), let's talk about programming (spirituality).