An article was recently published that looks at evaluating First Programming Languages (FPL) the language to use for an introductory course of programming.
An existing issue is that formally assessing a programming language isn't really defined, with a lot of evidence being anecdotal. The proposed evaluation framework looks at technical and environmental feature sets. "The technical feature set covers the language theoretical aspects, whereas, the environmental feature set helps evaluating the external factors." These feature sets are covered in table 2 of the article (link to PDF) and consist of the following:
Technical Features
Environmental Features
The article explains each of these points in details, and gives each of the languages being evaluated a rating based on this explanation, followed by a detailed explanation of how the scores of each rating can be compared this includes allowing an evaluator to weigh certain criteria they deem important against the others. As this is for choosing a language to teach someone to program with, different places will have different reasons and goals, so would want to weight things differently.
NCommander adds: lhsi was kind enough to include a summary of the results. I looked through the paper and it seems like a fairly interesting read.As the default weight settings do not conform to the original popularity index of the languages, so there should be a different weighting criterion. However, it is very hard to come up with a generic and correct weighting criterion. Therefore, the scoring function should be customizable and the user should be able to tune the weight of each feature based on her preferences. As an example, consider the fact that Ada holds 3rd position in overall scoring, but is not being considered among highly used FPLs as of now.
Environmental
Overall
(Score: 2) by VLM on Wednesday April 02 2014, @09:56PM
There's an old saying about you can write Fortran in any language. Now a days they probably say PHP. But the point is something like assembly would make someone who refuses to learn functions subroutines modularization unit testing libraries include files, crash and burn real fast, which is awesome for learning. Better to crash and burn at three pages in school than thirty on the job.
I was thinking low level as in a noob who may never take a data structures class might get thru a 101 intro class better without a long discussion of call-by-value vs call-by-reference. Or a noob who might never take a data structure class because thats just not how he rolls, doesn't need a language that can do more than ints/floats. Or no idea what a lambda is, no need for language features like macros or ability to create domain specific languages. If you're working on "what is a flow chart" or "what is the basic concept of procedural programming" then a language with polymorphism is unnecessary.
Crazy as it might sound, one of the toy languages like Scratch might be OK as a first language. Or perhaps javascript? Basic? Some people are baffled by "programming" a spreadsheet so that might be a place to start? Gotta walk before you can run...