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:
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.
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.
The article proposes a framework that allows selection of a language of a course to be weighed according to what sort of language you want. You could weigh it to select a more technically challenging language if you desired.
Of course if you just wanted to teach someone something unfriendly and hard you'd just pick assembly or brainfuck and ignore the proposed framework altogether.
"teach someone something unfriendly and hard you'd just pick assembly"
The problem is not setting the goal. The paper talks about educating computer scientists, and then lists criteria for vocational training of IT people. Going a third direction anyone can teach assembly to a EE / Verilog designer a lot easier than trying to hop right from NAND gates directly to Clojure, or even just mere Pascal. I wouldn't advise skipping machine language when hopping from NAND gates to assembly, but I guess you could do worse. At least pick a sensible comprehensible architecture like the PDP-8 had, then you can literally understand the whole simple system from transistor up to OS design, later branching out into other more complicated systems. And no I don't remember today how the wiring worked for the auto-incrementing address range system or all the IO ops, but I did understand them completely once...