Ответ на пост «Больше его никто не видел»
Я почитал комментарии под этим постом и честно говоря меня разочаровало такое количество задротов не понимающих прелести динамической типизации.
Для начала проведу краткий ликбез:
Статическая типизация с одной стороны увеличивает время разработки так как при внесении каких-либо изменений тайпчекер начинает падать из-за несоответствия типов и вам приходится проходиться по коду и изменять типы во всей цепочке вызовов.
С другой стороны - она уменьшает количество багов, так как тайпчекер гарантирует что переменную типа X используют именно как переменную типа X - вы не сможете скажем случайно запихать строку в переменную где должно быть число или передать числовой ID в функцию которая ожидает объект.
По сути типизация - это такая система предварительной формальной верификации которая позволяет отловить баги во время компайлтайма до того как они протекут в рантайм.
---
А теперь представьте себе галеру где есть два разработчика: Вася который использует язык со статической типизацией и Петя который использует язык с динамической типизацией. Они работают над двумя идентичными проектами и им дают идентичную задачу: Например взять поле куда раньше можно было добавить только число и добавить возможность передавать туда строку.
Вася со своей статической типизацией после добавления возможности принимать строку сразу столкнётся с кучей проблем из-за того что остальные методы в его программе ожидают именно число. Ему придётся проходиться по всей цепочке вызовов куда может попасть значение из исходного поля, менять тип с числового на алгебраический ЧИСЛО|СТРОКА, вполне возможно он заметит логические ошибки связанные с тем что некоторые функции не имеют осмысленного сценария для обработки строк и Васе придётся переписывать часть функционала.
Петя в свою очередь может просто исправить валидацию поля разрешив ему принимать строку и со спокойной душой закрыть таску.
Вы можете возразить: "но ведь он как и Вася может столкнуться с ситуацией когда некоторые функции не имеют осмысленного способа обрабатывать строку и пытаются обработать значение как число!". Безусловно, может. Но Пете из-за отсутствия тайпечекера наличие таких ошибок не помешает выкатить задачу в прод. А из-за того что подобные ошибки зачастую вылезают в модулях которые на первый взгляд с изменениями Пети никак не связаны менеджер не сможет понять что новые баги вызваны именно Петей - в его глазах это будут баги которые появились "сами по себе".
В итоге с точки зрения менеджера:
Вася - ленивый программист который несколько дней делал простейшую таску, а затем стал не нужен потому что программа работает без багов.
Петя - хороший работник который за несколько часов закрыл таску и пошёл закрывать новые таски с багами.
Угадайте кого менеджер повысит, а кого - нет.
---
Именно из-за непонимания таких тонких психологических моментов ботаны Васи дрочат свои программы на C++/Идрисе/Хаскелле в НИИ за 40 тысяч в месяц, а Пети живут в ЛА и пишут новые ЖС фреймворки на деньги лоха-инвестора за 10к долларов в месяц.
Статическая и динамическая типизация наглядно
Ctrl C Ctrl V продолжение
Вид со спутника
Микрорайон Суходольский застройщик ПСК "Дом"
Шедевры тюменских дизайнеров и строителей
Да что вы знаете о типизации?
Как развести срач среди программистов
Разница между JavaScript и TypeScript
До меня сейчас дошла одна забавная аналогия про сравнение чистого JavaScript и TypeScript:
- В чистом JavaScript, для того, чтобы выстрелить себе в ногу, нужно просто нажать на курок.
- В TypeScript для этого необходимо определить сущность патрона, пули, пистолета и курка. Потом вложить именно тот патрон, для которого разрабатывался именно этот пистолет и нажать на курок именно этого пистолета. В таком случае вы будете знать какая именно пуля вылетит из этого пистолета. Вы не попали в себе в ногу? Ну вам тогда еще придется описать направление вылета пули и применить это направление именно к этому пистолету!