«Uncle Bob» Мартин раскритиковал Kotlin

Роберт «Uncle Bob» Мартин — очень заметная фигура (одних только подписчиков в Твиттере у него больше 90 000). И когда JetBrains анонсировали вебинар «Мартин учит TDD на примере Kotlin», это привлекло много внимания. Но теперь оказывается, что если он готов провести вебинар с использованием конкретного языка, это ещё не значит, что язык ему нравится.

Позавчера у Мартина появился твит «I just completed level 1 of Kotlin Koans» — похоже, он толком взялся за язык уже после анонса вебинара. А затем он опубликовал категоричный блог-пост «The Dark Path» о том, что Kotlin и Swift вместе ведут программирование в совершенно неверном направлении. Проблемой он считает то, что они не просто статически типизированные, а излишне стремятся избавиться от всех возможных ошибок, связанных с типами.

Мол, избегать ошибок — ответственность программиста, и эта задача решается тестами. А попытки решить её средствами языка приводят к ограничениям, которые только мешают. Когда в Kotlin необходимо писать «open» перед каждым классом, который собираешься наследовать, это мешает, потому что заранее сам точно не знаешь, что понадобится наследовать. А в итоге, пишет Мартин, люди станут просто лепить open везде «на всякий случай», и в чём тогда смысл защитных мер, если их обходят?

Завершается пост неожиданной аналогией: «вот и катастрофа в Чернобыле произошла, потому что там обошли защитные меры, так что не полагайтесь на них и пишите кучу тестов!» (Тут сложно удержаться от вопроса «Простите, а часовню тоже Kotlin развалил?»)

Реакция на этот пост в Твиттере оказалась бурной и разнообразной. Ретвитов больше сотни, есть реплаи вида «подписываюсь под каждым словом», но появилась и куча возражений: например, «давайте ещё все дорожные ограждения уберём, ведь это ответственность водителя не съезжать в пропасть». Мартин в ответ возражает, что «есть разница между ограждениями и лежачими полицейскими».

Николай Парлог написал: «Пост выглядит странновато. Если я меняю метод, и он выбрасывает исключение или возвращает null, я бы предпочёл, чтобы на необходимые изменения мне указывал компилятор, а не тесты — это безопаснее, проще, меньше менять». А Джейк Уортон заявил, что система типов де-факто и является разновидностью тестов:

Ему вторит Виктор Кланг (Lightbend):

Любопытно теперь будет увидеть вебинар, и любопытно, не сказалась ли на позиции Мартина тема этого вебинара: ведь если изучать язык не для продакшена, а чтобы демонстрировать людям TDD, то чем больше проблем решается тестами, тем лучше. А пока он возмущается встроенной в Kotlin защитой от NullPointerException, на Reddit недавно собрал 50 комментариев пост «может ли в Java появиться null-safety как в Kotlin». В общем, когда годы назад Роман Елизаров, зайдя на огонёк к JetBrains, сказал «nullability, чуваки», он заварил большую кашу!

Tags from the story
, ,