Интересная статья. В защиту Kotlin:
1) Java код из Kotlin правда часто приводит к NPE, но для сравнения [JS и TypeScript], [ObjectiveC и Swift] имеют похожие проблемы, и там сложнее использовать interop.
Плюс анализ Intellij IDEA помогает расставлять Nullable/NotNull аннотации в Java коде.
2) Функция '''
@Synchronized suspend fun''' мне кажется плохим сочетанием. Хорошо бы в IDEA добавить такое как Warning.
Также в корутинах для синхронизации есть Channel-ы (и функции select, actor и т.д. из библиотеки kotlinx.coroutines).
3) Согласен что getter-ы могут иногда плохо влиять на производительность. Но если нужна хорошая производительность, то нужно её тестировать и замерять деградацию. Getter-ы легко поймать профилировщиком. Ну и избитая фраза - преждевременная оптимизация может быть вредной.
4) Различные способы объявления функций и лямбды дают нам много полезного. Да, надо к этому привыкнуть. Тут помагают явные типы, которые можно указывать, чтобы не ловить подобных проблем.
Но вообще статья классная. Почитать полезно.