Java is the best for other people to understand your abstractions…
- with the exception of poor data-structure initializers.
- but you can get around this pretty easily by writing fclever initializers
- Excessive OOP considered hazardous
- Java's static typing provides an excellent source of computer-checked, always up-to-date documentation.
Lisp is the best for creating new abstractions quickly…
- but lack of static typing means its sometimes difficult to figure out how to properly call code, etc…