What is the similarity between Java and Scheme1?
Well, there are a lot of differences. Java is an imperative language that inspires angry rants about its syntax and lack of power. On the other hand, Scheme is a functional language whose lack of syntax is the subject of doe-eyed Petrachean sonnets. Scheme by virtue of being a functional language doesn't provide effective support for imperative programming styles, and Java--an imperative language--doesn't provide effective support for functional programming styles.
So why is it that Scheme is aLanguage For Smart People, and Java is aLanguage For Masses?
读散文onLFM相对LFSP.we usually come up with a pleasant explanation of the difference:
A LFM was designed to intentionally limit the power of its users because power is too dangerous, whereas a LFSP places no unnecessary limits on its users.
However, looking at this explanation we find some holes.
第一的，Java was designed to be predictable and consistentrather than necessarily limiting its power out of fear of its users. Java is limited to provide a service to its community at large, and is willing to inconvenience its individual users to do so. Universal consistency is being valued above individuals having access to their prefered abstractions and constructs2. Java wants you to build abstractions by writing encapsulated libraries with public APIs. Although we rarely think of Java in these terms, it is a language obcessed with the一个和一种方式mantra popularized by Python3.
The second hole in this summation is that Scheme intentionally restricts its functionality with its laser-like focus on the functional style of programming4. We don't mind because Scheme is a functional language andwe don't expect a functional language to have stellar support for the imperative style of programming.People who don't like functional style stay away from Scheme, but never decry it as a Language For Masses.
将其翻译成Puzzword说话：Scheme isn't arbitrarily limited, its opinionated.
The thing is that Schemeisarbitrarily limited by the opinions baked into its design.
Getting angry at Java for its poor functional support is as ludicrious as complaining about Scheme being an awkward language for imperative programming: these are not flaws, but opinions. We do ourselves a disservice by treating opinions we don't like as something for the unenlightened masses, and opinions that coincide with the current academic fashions as enlightened.
Lets get back to saying what we mean.
Instead of describing Java as a Language for Masses, lets just say "I don't like writing Java because of its emphasis on imperative programming." or "Java's approach to building abstractions places too much value on the community compared to the individual." Instead of smiling about our favorite language being a Language for Smart People, lets just say "I really like functional programming" or "My feelings about macros probablly can't be expressed hiegenically." To do otherwise is to give sway to the spectre of elitism.