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.
Based on your criteria, what would YOUR suggestions be for a 1st and 2nd language?
Unfortunately I'm a bit out of touch with current programming languages. It's been a while that I've done some serious programming. I don't even really have enough time to learn everything I need for my job, so there's very little time left for really learning new programming languages, although there are quite a few I'd like to learn because I feel they'd bring something on the table which extends my understanding.
Anyway, the fact that you've already learned quite a few languages means that anything you'll learn will not be your first language. I mean that not just pedantically: Although you may not remember the details, you should have the basic structures still in your brain, although possibly dormant; you can simply fill them with the constructs you learn, no matter whether you re-learn a language you've forgotten, or learn a new language. Through Java and C++, you probably are also familiar with the basics of OOP. What seems to be missing is experience with functional programming, so if I were in your situation, I'd look at languages which are strong in this regard. Those languages also tend to be sufficiently different that in some sense it really would be almost like learning your first language: You'll have to relearn all your concepts. But afterwards, you'll have a deeper understanding of programming (and wonder why Google's MapReduce was all the rage, given that it's just the parallelization of a natural combination of two fundamental functional programming paradigms). And as bonus, you'll not be terrified if you encounter template metaprogramming in C++, which basically consists of functional programs written in horribly complicated syntax and run at compile time. ;-)