The Surface Area to Functionality Ratio is my formula for evaluating APIs and computer languages - both general purpose programming languages and special purpose languages (AKA DSLs), where:
Surface Area = how many new concepts, syntax, keywords, etc. to learn. IOW, what is the learning curve.
Functionality = how many cool things can you do with the language. How general is it. How many problems does it solve.
The best way to illustrate this concept is with a few counter examples. The two all time losers based on this principal are XSLT and JavaFX.
- Surface area: about the same as Haskell or C++. I read a 1300 page book in order to learn XSLT.
- Functionality: transform one xml document into another
- Surface area: about 30% greater than Java. JavaFX is mostly a superset of Java.
- Functionality: Build Swing UI's