Я был фанатом статически типизированных языков много лет. Я усвоил урок на собственном горьком опыте, используя C. Слишком много систем ломались из-за глупых ошибок типизации. Когда C++ вышел, я был заядлым приверженцем и яростным адептом строгой типизации. Я насмехался над smalltalk'ерами, кто ныл о потери гибкости. Надежность, в конце концов, была гораздо более важна, чем гибкость. И кроме того, мы могли поддерживать наше ПО гибким И статически типизированным, если просто следовать хорошим принципам управления зависимостями.
Четыре года назад приобщился к XP (методология Extreme Programming). Я полюбил акцент на практичности, который она добавила к разработке ПО. Мне также понравился упор на тестирование. С тех пор я заразился идеей тестирования. Я не могу более представлять себе создания кода без использования TDD (test driven development). Не могу вообразить даже, чтобы не иметь полное покрытие тестами, чтобы мои разработки были в сохранности.
Около двух лет назад я кое-что заметил. Я стал все меньше и меньше зависеть от типизации в плане надежности. Мои юнит-тесты предохраняли меня от совершения ошибок, связанных с типизацией. Чем больше я зависел от юнит-тестов, тем меньше я зависел от надежности на основе типизации в Java или C++ (мои языки).
Я думал, что эксперимент прошел удачно. Так, я попытался написать некоторые приложения на Питоне, и затем на Руби (очень известные динамически типизированные язык). Я не был очень удивлен, когда я обнаружил, что ошибки типизации просто никогда не возникали. Мои юнит-тесты позволяли держать мои код строгим и не отклоняющимся от правил. Мне просто не была нужна статическая типизация, от которой я зависел так много лет.
Я также осознал, что гибкость динамически типизированных языков делает написание кода значительно легче. Модули легче писать и легче изменить. Нет существует вопросов, связанных со сборкой. Жизнь в мире динамической типизации фундаментально проще.
Сейчас я снова программирую на Java, потом что проекты, над которыми я работаю, просят ее. Но я не могу не признать, что я чувствую тягу динамически типизированных языков. Я бы хотел программировать на Руби или Питоне, или даже Smalltalk'е
Кто-нибудь еще чувствует нечто подобное? По мере того, как все больше и больше людей будут применять TDD (что, как я считаю, неизбежно), будут ли они чувствовать тоже, что и я? Будем ли мы все программировать на динамически типизированных языках к 2010 году?
26 апреля, 2003 г
Роберт Мартин, выдающийся разработчик ПО,
Автор «манифеста Agile», автор принципов SOLID,
В совершенстве матерится на C++ и Java :)
Автор: Cord