Thoughts about the Best Introductory Language

This work is licensed under the Creative Commons Attribution 2.5 License (or at your option a greater version of it).

Revision History
Revision 15622006-08-04shlomif
Forked the template from a previous work and working on it.
Revision 16912007-04-10shlomif
Finished writing the document - about to release.
Revision 18372008-04-25shlomif
Many spelling or phrasing errors corrected, and with some clarifications added.
Revision 18382008-04-25shlomif
Corrected some problems in the new text. 2nd Revision.
Revision 23192009-02-27shlomif
Added missing id’s to footnotes, so they won’t be randomly generated.
Revision 48552011-06-05shlomif
Convert many ASCII single-quotes and double quotes to Unicode ones.

Table of Contents

The Various (Wrong) Approaches to Introductory Programming Languages
Linda McIver’s Thesis Approach
The “Structure and Interpretation of Computer Programs” Approach
The “Teach in C” Approach
The “First Programming Language Should Make Sure You Write Good Code” Fallacy
The “It Should Have a Decent IDE” Fallacy
Some useful relations
A High Level Language Should Come Before C
Perl/Python/etc. should Come before PHP
Perl/Python/etc. should Come before Shell
C should Precede Assembly
The First Language should be Practical
Localised Programming Languages should be Avoided
Java Should be Taught After Perl
My Verdict
Perl, Python or Ruby
Final Verdict
Some Types of Teaching
Other Good Food for Thought about Teaching
“Live as if you were to die tomorrow. Learn as if you were to live forever.”
Three Levels of Learning
Learn as Many Languages as Possible
Learning How to Read Code and Enhance Existing Code


The purpose of this essay is to contemplate what is the best introductory programming language to teach for beginning programmers, or for a beginning programmer to learn on his own.

First, I will mention several approaches taken by other people who discussed this issue before, and try to explain why I disagree with them. Then I will propose and explain some relations (“Language A should be learned before Language B”) that are good to follow. After that, I will propose my verdict, and discuss some orthogonal alternatives. Finally, I will discuss some different types of teaching and how each should be conducted differently.

As for how I started programming myself, I should note that I learned BASIC at the age of 10 (back in 1987), and then learned C when I was 15 years old (in 1992); I later learned Visual Basic for Applications and when I was 19 years old I was introduced to Perl and UNIX at my workplace, which was a web site creation shop (back in 1996, when the Internet started to become popular). I have later learned other languages and technologies and still do to a large extent.

One note that is in order is that you shouldn’t feel bad about having followed a different ordered in the programming languages you’ve learned. By all means, you can still learn things on your own otherwise.