C# też ma masę bajerów i jakoś nie widać, by ktoś narzekał. Są konwersje implicit i metody rozszerzeń, a więc w zależności od użytych importów działanie kodu może się zmieniać. Z drugiej strony, taka wtyczka do obsługi Scali w IntelliJ potrafi pokazać zarówno konwersje implicit jak i parametry implicit i wiadomo co się dzieje.
Wolę skomplikowany kod, który można normalnie prześledzić od skomplikowanego kodu, który jest ukryty i siedzi nie wiadomo gdzie. Weźmy takiego Hibernate - niby klaski są POJO, ale w trakcie odpalanie aplikacji Hibernate wzbogaca je swoim dziadostwem, które nie sposób przeanalizować. Potem nie wiadomo kiedy jest 1 zapytanie, a kiedy N + 1, kiedy jesteśmy w transakcji, a kiedy nie, kiedy mamy świeże dane, a kiedy przestarzałe, itd (wiem, przesadzam, po X latach studiowania Hibernate można mieć to w małym palcu, ale mnie Hibernate nie jara). Wolę mieć wszystko pod kontrolą, nawet jeśli w wielu miejscach są przekazywane implicity.