I am working on a knowledge based system to help users choose a programming language. An issue I have run into is that I can't seem to find a lot of information about the strengths/weaknesses of some of the languages I have not developed in before. I was hoping that someone or preferably more than one someone could give me their two cents about the strengths/weaknesses of any of the languages listed below.
Grouped by paradigm
I am fairly confident about the strengths/weaknesses of the object oriented languages since those are the languages I know best, but any advice or suggestions about any of the other languages would be welcome.
"If the facts don't fit the theory, get new facts" --Albert Einstein
It's hard to define an objective set of strengths/weaknesses for any language, because these depend very much on what you are intending to do with the language.
For example, I regard the need to concern myself with pointers and physical memory management to be a major weakness and source of errors in C++, but if you're writing the kind of code that needs those features, then obviously those are the strengths of C++ for you. So I might regard C/C++ as a poorer choice than Java for many types of development, where there is no intrinsic need for the developer to be responsible for things like physical memory allocation. But a good C/C++ programmer can produce very efficient code that will often outperform equivalent Java code.
Depends on your selection criteria.
Which brings us to...
Not sure if this is in the right category. Firstly, it's essentially an interpreted language, with the database typically providing a SQL scripting environment such as Oracle's SQL*Plus and a "SQL virtual machine" when executing SQL requests e.g. from Java. Secondly, it's not a complete language in the same way as C++, COBOL, Java etc are. Groovy-meister Scott Davis describes SQL as a domain-specific language for databases, which I think is pretty accurate.
So SQL is really good at what it does, but it doesn't do all the things that you can do with other languages because it's not intended to.
Oracle gives you PL/SQL (loosely based on Ada originally, I believe) as a "procedural" extension to SQL, with some support for OOP as well, which results in a complete programming language within the "virtual machine" of the Oracle database. PostgreSQL has its own implementation of PL/SQL, and other RDBMS vendors provide alternatives to meet the same need.
But if you want to talk to a relational database in a sensible, efficient and maintainable fashion, some variation on SQL is the only game in town.
Anyway, here's a few other thoughts from my position of relative ignorance to kick off the discussion:
Java seems a better and more flexible choice for many purposes than C++. Don't know much about C#, except that it looks a lot like Java i.e. it's another C family OO language, and of course it's tied to a particular vendor, and that Microsoft usually offers excellent tools to support development.
Java's VM is a strength as it insulates developers from machine-specific details, which can be a huge advantage for cross-platform development and long term maintainability on many projects. But C++ is probably better for working close to the metal on hardware-specific functionality, precisely because it does not run inside an abstract virtual machine.
C/C++ and Java also have a massive range of high quality libraries to provide extra functionality.
However, I remember reading years ago that a huge proportion of C++ programs were basically just procedural C programs with an OO wrapper i.e. you can make a case that C++ is not really a fully OO language at all. Which also applies to some extent to Java, with its primitive types, while many interpreted languages seem to offer a much cleaner OO approach e.g. Smalltalk of course, but also Groovy, Python and Ruby.
Finally, my recent experience of Java projects is that the JEE platform brings a lot of complexity and thus costs to a project. This may be a strength if you need that complexity, or a weakness if it forces you down an unnecessarily slow and expensive development path. Other people may have similar experiences of C#/.NET for all I know, and this is more a question of the platform rather than the language itself.
PHP is free, very accessible and flexible, but it does not do much to encourage clearly structured maintainable code, and its OO support is essentially an extension to the language, rather than a fundamental aspect of it. There are masses of third party libraries, of hugely varying quality, including some good stuff from Zend e.g. Zend Framework, which provides OO components for web applications. I'd use PHP where an environment demands it e.g. to integrate with an existing application, but not necessarily as a first choice for a new application.
Python is also free, and seems much cleaner in terms of its OO implementation and thus in encouraging structured code. It also seems to be more flexible and robust in my very limited experience, and is increasingly used as a general purpose scripting language in other tools e.g. for GIS. Not sure what kind of external libraries are available in Python-land.
Developer tools for PHP and Python seem to be fairly limited, although Eclipse plug-ins/derivatives exist for both of them.
Scripting languages have a reputation for being slower than compiled languages, but that depends on what you want to use them for e.g. if you can develop something twice as quickly but it runs only 10% slower, you might feel that is a good trade-off.
OK, that's more than enough from me. Over to the wiser heads at JavaRanch!
Think about the dimensions you might want to rate different languages on e.g. ease of learning, cross platform support, availability of additional libraries, development tools (IDEs etc), availability of skills on the job market, easy maintainability of code, licencing costs, future prospects, and so on. Choosing a language is about much more than what happens to be cool this week, and commercial/market considerations play an important part.
subject: Strengths and Weaknesses of various programming languages