Найти в Дзене

Как я разлюбил динамическую типизацию

В профессиональную разработку я вкатился через PHP 4 версии, который не просто был динамическим языком программирования, он даже языком то мог назвать себя с натяжкой, формально да, но это был такой продвинутый шаблонизатор. Потом был php 5, который вобрал в себя ООП модель Java, что сделало программирование очень похожим по стилю и способу организации программ. На тот момент, да и десяток лет до этого, динамические языки полностью захватили веб. Началось все с Perl, потом PHP и наконец Ruby с Python. Даже сейчас подавляющее большинство сайтов реализовано на PHP. Дешевый хостинг, огромное количество CMS и конечно же фреймворков. Тогда фурор произвели Rails, на котором не только начинались все стартапы, но и он стал прототипом для большинства фреймворков на других языках. В этих условиях вопрос о типизации стоял слабо, кому нужен в вебе типизированный язык, если в нем очень слабая экосистема? Были смельчаки, которые делали проекты например на GWT (шнягя от гугла, которая позволяля пис

Как я разлюбил динамическую типизацию. В профессиональную разработку я вкатился через PHP 4 версии, который не просто был динамическим языком программирования, он даже языком то мог назвать себя с натяжкой, формально да, но это был такой продвинутый шаблонизатор. Потом был php 5, который вобрал в себя ООП модель Java, что сделало программирование очень похожим по стилю и способу организации программ.

На тот момент, да и десяток лет до этого, динамические языки полностью захватили веб. Началось все с Perl, потом PHP и наконец Ruby с Python. Даже сейчас подавляющее большинство сайтов реализовано на PHP. Дешевый хостинг, огромное количество CMS и конечно же фреймворков. Тогда фурор произвели Rails, на котором не только начинались все стартапы, но и он стал прототипом для большинства фреймворков на других языках.

В этих условиях вопрос о типизации стоял слабо, кому нужен в вебе типизированный язык, если в нем очень слабая экосистема? Были смельчаки, которые делали проекты например на GWT (шнягя от гугла, которая позволяля писать фронт полностью на беке, куча их продуктов была так написана), но как и многие Java подходы того времени оно в конце концов отмерло, хотя и породило множество крутых продуктов и сильно опередило свое время. Колесо сансары сделало очередной оборот и сейчас снова начинают писать фронт на своих языках транслируя все это в код для браузера.

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

Где-то там же активно рост jquery и javascript превращался из языка для снежинок, в инструмент добавления интерактивности. Кто не помнит, gmail с его прорывной на тот момент концепцией не перезагружать страницы (это было реализовано через фреймы), очень сильно бустанул все это направление.

Время шло, размеры проектов становились все больше и разработчики стали задумываться о том, что неплохо было бы иметь все тоже самое, но в типизированном окружении или на типизированном языке. Когда в проекте миллионы строк и тысячи программистов, все эти хуякхуяк на js и php становились очень проблематичными. Например фейсбук реализовал язык Hack, типизированное надмножество PHP, который отличался конечно, но им было значительно проще перейти на него, чем переписывать проект. Аналогичный путь выбрал vk, развивая собственные инструменты статического анализа и ограничения поверх PHP. В корпоративном сегменте Java окончательно закрепилась через Spring MVC и позже Spring Boot. В Microsoft-стеке аналогичную роль играл ASP.NET MVC, который активно противопоставлялся скриптовым подходам PHP и Ruby.

Я как и масса разработчиков по всему миру смотрел на это довольно скептически. Мы видели какими монструозными были эти решения, насколько типизация заставляла писать больше шаблонного кода и когда простые задачи превращались во что-то невообразимо сложное. В самих языках не было ни вывода типов, ни алгебраических типов данных (мы про популярные языки) ни других ништяков. В эти годы были популярны батлы и срачи на тему статика vs динамика. Масла в огонь подливали Erlang и Clojure vs Haskell. Хотя писали на них не часто, но зато срались знатно.

Конечно одна из причин, была в том, что далеко не все работали в гигантских проектах. Проекты в которых работал я, ну сотни тысяч строк кода, но не миллионы. До сих пор, многие кто работают с таким объемом не признают статику.

А потом появился TypeScript, который сначала медленно, а потом все быстрее начал захватывать разработку. Для меня это стало переломным моментом, хотя далеко и не сразу. Первый раз для веба, я увидел, что типизация может быть удобной. Сначала мы переписали на TS весь наш JS, потом мы перешли (и щас в процессе) на типизированный Ruby. Теперь динамика в моей жизни осталась только на lua в конфигах вима 🙂

Telegram | YouTube | Сообщество