This is always an interesting topic and can generate some very interesting discussions. It is also a topic that I consider a high priority and one I think about all the time. When I say first programming language I am thinking middle school or high school. This language maybe the first, and last, programming language a student may work with. Being the first this language must set the tone for prospective programming students in the sense that if it is a pain to work with (lacks “fun” features, crashes regularly, has a difficult IDE, etc) it will ensure this is the last programming class they will ever sign up for. I teach a lot of beginning programming classes, usually to freshmen or sophomores. These classes are not full of aspiring programmers. The classes are full of kids that could not find another class to take at that time period (one of the handicaps of a small private school) and the kids are sort of a captured, sometimes unwilling, audience. These students do not revel in the pure joy of writing a quicker algorithm and sitting in front of a computer hammering on keys is not their idea of a good hour. I have some students who really enjoy programming and can sit in front of a computer for hours hammering away. They are scarce and, in my experience, are freaks of nature. It is the main stream kids that present the problem of what to use for a first language. My school has two programming teachers; T, who teaches most of the programming classes, and me. T is a business teacher who knows some Visual Basic. His specialty and interest is in the business field, not in the CS education field. He does teach a good intro VB course for freshmen and sophomores, not because he loves VB, but because it is the language he knows and he really does not have the time or interest to research into other languages. I am the school’s computer tech/geek and I pick up the left over CS classes. I have a thing for wanting to write the perfect CS curriculum containing the perfect Programming I course. It is fun to dream so it is a burden I bear. I dabble in several languages for education because I am always looking for a “better way” and I also get bored easily. Since I teach at a private school and can write my own courses I have the opportunity to try different languages with my students without having to through a dozen committees and a lengthy curriculum approval process. I admit I use my students as guinea pigs but so long as I achieve my general target goals for a programming course and the kids learn some programming without despising programming I think I am good to go. I have had a chance to do intro to programming courses using several different languages. The list includes Alice, Scratch, VB, RobotC, NXT-G (Lego robots) and Small Basic. I really do not think I should include Apple Pascal and Apple BASIC in this list even though I used to teach with them back in the Stone Age. I have also taught with C# and Python but not in an intro course. I am definitely not an expert in any of these languages, especially C# and Python. I typically tinker with a language for a while, then give it to the kids to tinker with and observe how well the language goes with them without me giving them detailed daily lectures. If a language tempts a kid to explore on their own then it meets one of the requirements in my fuzzy list of criteria. Here is a list of what I think is required for a language to be good with beginners.
- Has some kind of attractor (turtle, easy to write a simple game, robot, easy graphics of some kind) to get the kids interested. After all, programming is an elective.
- There is decent documentation for beginners.
- The IDE is easy to manipulate.
- The language does not crash on cheap computers.
- Has very little “don’t know what it does but it is needed to make the program run” kind of code.
- The language and/or IDE can be installed by a beginner.
- Can be used for really simple programming projects to reasonably advanced projects.
Stay tuned for my first language critical evaluations in the next blog post.