Чтобы оценить общий дизайн ЯП, проще всего рассмотреть его как некий набор фич. Нас должна интересовать полнота этого набора и то, как фичи в нем взаимодействуют между собой.
В плане взаимодействия, есть два наиболее важных аспекта: униформность и ортогональность
Униформность: применимость фичи не должна содержать краевых случаев. Если я могу сделать публичным класс, то должен мочь сделать стракт и инам.
Ортогональность: одновременное применение двух фич не должно вводить краевой случай. Если я могу сделать класс public, а могу final, то я должен мочь сделать его public final и должно это вести себя как public + final.
Например, тот факт, что indirect до сих пор нельзя применять к страктам – пример нарушения униформности.
А то, что мутирующие методы не могут быть забинжены в функциональный объект - нарушение ортогональности.