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