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 prospectacle on Wednesday April 02 2014, @11:51PM
It would be far more useful (and probably faster and easier, after a few weeks) to learn three or four very different languages, at the same time.
First write and run "hello world" in each one. Then progress to a more complicated program (e.g. taking input, doing an operation on that input, presenting some output), again writing the same program in each language. Then gradually increase complexity until the many differences (and commonalities) between the languages become clear.
This has numerous benefits that cannot be attained easily by learning any single language, such as:
- Thinking about the algorithm as distinct from the implementation language.
- Understanding each language better in itself, by seeing how it differs from others.
- Learning how to choose the right tool for the job by learning what each language is good at.
- Being better prepared to learn any other languages.
I would suggest:
- c++
- python
- javascript
These languages are all free and popular, and you would learn a wide variety of:
- Environments (compiled to machine code, command-line interpreter, host-environment (web browser))
- Object models (classes, prototypes)
- Typing (strong typing, duck-typing, no (or implict) typing)
- Areas of usefulness (faster/close to hardware, application and scripting, user interface manipulation).
In addition, each of these can be easily written with just a text editor and an easy to obtain compiler or interpreter.
If you can learn these three, it would be fairly easy to learn almost any other language. They're also useful and in demand, in themselves.
If a plan isn't flexible it isn't realistic
(Score: 2) by hybristic on Thursday April 03 2014, @04:37PM
There is a fairly decent book called Seven Languages in Seven Weeks that uses a similar logic, and I think its very effective. I think the book approaches it a bit better though. You don't really do 7 "hello world" programs, what the author has you do is take a moment to learn the syntax, and then he has you build a completely different program with each language that highlights the power of that specific language. I think this is more effective, as it helps you understand different methods of programming, different ways to approach problems, and understand that each language is built for a purpose. The book teaches you Ruby, Io, Prolog, Scala, Erlang, Clojure, and Haskell, and he details why hes teaching each one. Seven Languages in Seven Weeks [amazon.com]