Живите, динамические языки!

По большинству статей этого сайта можно решить, что я абсолютный фанат тренда статической типизации ™. Но это не совсем так.

Не поймите меня неправильно. Действительно, существует выраженная тенденция использовать по максимуму функциональность, предоставляемую статическими/компилируемыми языкам, и она очень полезна. Она дала нам ряд без преувеличения инновационных и перспективных решений (ну конечно, и не очень инновационных), которые теперь формируют будущее программирования на долгие годы, а может и на десятилетия вперед. Эта тенденция также правит известные ошибки предыдущего поколения языков: чрезмерная шаблонизация, по-византийски витиеватые абстракции и раздутый код.

Но в то же время многие примеры я пишу на Python — наверное, самым ярком представителе противоположной грани динамических языков.

Какой главный аргумент мэйнстрима против динамических языков? Он заключается в том, что якобы Python и ему подобные «хороши для небольших скриптов, и не более того». Вроде как без статически проверяемых типов аргументов любой временный прототип неизбежно превратится в будущем в некоего ужасного программного монстра. И рано или поздно одна неконтролируемая компилятором опечатка в тексте может уничтожить всю систему!.

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

Да, безусловно динамические языки потенциально опаснее статических для крупных проектов. Конечно, степень неопределённости возрастает. Но всё равно стоит уточнить эти крайние мнения с другой точки зрения.
Динамические языки лучше статических, когда:
— вы пишете относительно небольшие скрипты или автономные программы;
— вы — команда талантливых и слаженных людей, и тогда размер проекта роли не играет.

Но, опять таки, в мэйнстриме мы видим ужасающую пропасть между этими двумя позициями. Именно их печальные результаты и порождают упомянутую критику. Это огромное количество коммерческих проектов, которые последовательно усугубляются классическими проблемами: некомпетентное управление, непонятные и часто меняющиеся требования, недооценка своих сил, переутомление, дремучие организационные практики, отсутствие стандартов кодирования, жуткая бюрократия, неопытные разработчики и т. д.

В такой среде действительно практически невозможно извлечь выгоду из сильных сторон динамических языков. Наоборот, управленческий тренд смещается в другую сторону: как защитить проект от ещё более сильных потерь в производительности. Вот тут действительно стандартные языки Java и C# (а также придуманный конкретно вот под такие проблемы Go), будут довольно успешны. Вместо того чтобы двигаться быстро, менеджеры стараются сохранить хотя бы минимальное продвижение.

Да, многие программисты скажут, что «статическая типизация и компиляция — это именно то, что позволяет мне быть продуктивным!». Я не сомневаюсь, что большинство людей, говорящих так, действительно считают, что им лучше программировать на статических языках. Однако, вне зависимости от того, что они думают, нет никаких убедительных доказательств для обоснования таких мнений.

Более того, несмотря на гигантизм ИТ-индустрии, проведено очень мало правильных исследований оптимальных и эффективных подходов к разработке, поэтому любая из так называемых «лучших практик», скорее всего, связана с необоснованными слухами.

Поэтому, лучше найти во всём этом свободу. Откажемся от всех предвзятых суждений о производительности, и будем свободно выбирать (учитывая известные технические ограничения), какой язык лучше всего подходит для нас, нашей команды, наших проектов — вне зависимости от того, статический он или динамический.

В одних случаях это будет Go или Java, в других C# или даже Haskell. В третьем проекте, возможно, лучше всего подойдёт Python или даже JavaScript.

Не будем превращать статическую типизацию в святую корову.

Поделиться статьей ...Share on Facebook0Share on Google+0Tweet about this on TwitterShare on LinkedIn0Share on VKPrint this page

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *