[Python, Программирование, .NET, Scala] Вы просто не знаете зачем нужны языки с динамической типизацией
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Вы просто не знаете зачем нужны языки с динамической типизацией
Пока некоторые незрелые личности бомбят от языков с динамической типизацией, хотелось бы сказать и показать, что многие разработчики просто не понимают необыкновенной свободы этих языков.
Я, конечно же, я верю в статическую типизацию. Я убежден что она захватит (и уже захватывает) мир. Люди, бросавшие мне в лицо: "нам не нужны все эти ваши типы" с таким же фанатизмом рукоплескали добавлению различных типов в их любимые языки с динамической типизацией (классы в JavaScript, аннотации типов вместе с mypy в python). Мне не нужны извинения за их недальновидность и невежество. Они вели себя радикально лет 10-15 назад и проиграли. То, во что превратилась экосистема их любимых языков — это лучшее наказание, а их поведение обязательно должно быть наказано. Пока питонисты решают на каком питоне писать: 2.7, 3.8 или подождать 4-ку — по сути теперь есть три разных питона. JavaScript-еров справедливо ненавидят подростки освоившие статически типизированный TypeScript — точно с таким же пренебрежением JavaScript'еры смотрели на корпоративных программистов на Java в свое время.
Однако, в языках со статической типизацией существует серьезная проблема. Проблема не в том, что типы надо указывать и соблюдать. Настоящая проблема: отсутствие свободы и принуждение к весьма посредственному дизайну языка. Давайте я приведу несколько примеров.
Диктатура
Java сопротивлялась добавлению "синтаксического сахара" около 10-ти лет (условно где-то 2002-2012). Наконец-то в нее добавляют все то, что должно быть в хорошем языке программирования — даже лень приводить полный перечень, потому что это будут буквально все фичи нормальных языков. Это не было каким-то вынужденным 10-ти летним простоем в дизайне языка, во время которого переписывали компилятор или решали другие объективные проблемы развития. Просто Sun и Oracle предпочитали нанимать юристов, а не разработчиков. Да, они за это поплатились — туда им и дорога, но это не отменяет того факта, что множество программистов было вынуждено писать на убогом языке по милости каких-то мутных управленцев с сомнительной экспертизой.
В C# только что добавили тип данных запись (record type), это заняло всего лишь 9 лет — отсчитывая от релиза другого языка F# 2.0 (2010), в котором уже была очевидна полезность этих типов. Оба языка разрабатывались под одной и той же крышей Microsoft — трудно предположить, что в команде C# не заметили возможностей F#. Просто они решили не торопиться. Возможно года через 3-4 мы получим именованные объединения (tagged union или discriminated union) в C#. Почему так долго? А нет никаких причин — просто дизайнерам языка так захотелось.
Программисты на Scala надменно ухмыляются — у них-то нет этих проблем. Нет проблем, как и нет нормального перечисляемого типа (enum). 14 лет выходили новые релизы этого языка начиная с 2006 года (релиз 2.0) ломая обратную совместимость компилятора на минорных релизах, но во всем этом бардаке не нашлось места перечисляемым типам. Есть enumeratum, но в Dotty одна из новых фич языка — это enum, прямо новое ключевое слово. Существующие до сих пор костыли никуда не годятся настолько, что требуется новое ключевое слово. Если бы только мы не должны были ждать Dotty 3+ лет. Хотя, это ничто по сравнению с 14 годами без enum'ов.
Мой посыл, я думаю, понятен: когда вы пишите на языках со статической типизацией вы отдаете свою профессиональную жизнь на милость диктатуре. Диктатуре Гослинга, Хейлсберга, Одерского, Бреслава. От их настроения в день принятия решения будет зависеть, получите ли вы какую-то фичу в этом году или лет через 10. В языках с динамической типизацией это не так — в них больше свободы, если тебе чего-то не хватает создай это сам и для этого есть все удобства и инструменты. Конечно же будет меньше безопасности. Но ведь не все люди готовы жертвовать свободой ради безопасности.
А что народ?
Раз уж я сравнил главных дизайнеров языков с диктаторами, теперь придется доводить аналогию до конца. Программисты предпочитающие конкретный язык со статической типизацией — это народ. Учитывая, что народ многочислинен и подразумевается, что умён, как так получается, что диктатура настолько успешна?
Случалось ли вам встречать Java-программиста эмоционально утверждающего, что "синтаксический сахар" не нужен, более того — он вреден? "Не надо нам как в C# — это недоязык от мелкомягких". Целые орды высококлассных специалистов объясняющие в книгах и на ресурсах вроде Stackoverflow, как текущее положение абсолютно прекрасно и исчерпывающе достаточно.
Видели ли вы когда-либо в книге уровня "Философия Java" (Брюса Эккеля) раздел хотя бы на пару страниц, в котором обсуждались бы возможные улучшения в языке? Хотя бы одним глазком посмотреть: как может быть или (не дай Бог) как должно быть. Были ли лямбда-функции такой уж инновационной концепцией, что сложно было предположить как это могло бы выглядеть в Java? Только диктатор может предлагать, остальные только соглашаются и доказывают друг другу насколько хороши все принятые решения.
Особенность работы программиста в том, что он создает нечто гибкое, что можно дополнять, масштабировать, применять в различных сценариях, крутить и вертеть как захочется. Software — от слова soft — мягкий, гибкий. Однако вся гибкость исчезает, как только программисты начинают говорить о языках программирования со статической типизацией. Любая новая возможность воспринимается как "противоречащая идеологии языка" или, в крайнем случае, "излишне сложная и избыточная".
Программисты на статически типизируемых языках все время ждут, когда им привезут фич в их язык. Они никогда не добавляют их самостоятельно, это не совсем возможно. И все что остается — годами ждать, производя очевидно глупый многословный код и надеяться на милость диктатора.
Никогда вы не увидите такого поведения толпы в сообществах, пишущих на динамически типизируемых языках.
Свобода
Свобода динамически типизированных языков очевидна на примере JavaScript. Этим людям дали скобки () {} и точку . и на этом они построили такое, что в какой-то момент времени JavaScript считался функциональным языком программирования (при живом-то Haskell). Там программисты создали себе все: от классов до прототипов.
Очевидно, что дизайн решений в JavaScript оставляет желать лучшего и едва ли этот опыт можно назвать успешным, но хотя бы у программистов была свобода. Это другой менталитет. Здесь нет авторитетов и диктаторов. Если чего-то не хватает, то это можно разработать. Никто не будет сидеть сложа руки 14 лет, пока Одерский прдпочитает заниматься алгебраическими типами данных вместо простых перечисляемых типов. Никто не будет ждать, когда команда C# наиграется с переписыванием компилятора и интеграцией его в свою посредственную IDE и наконец-то обратит внимание на то, что языку нужны современные фичи.
Меня же на все эти мысли натолкнул мой опыт с python. Мне понадобился новый тип — именованное объединение (tagged union или discriminated union), который проверял бы типы своих кейсов во время исполнения кода. Зачем понадобился — я, возможно, расскажу в будущей статье. Я вспомнил, что класс данных (record type) добавлен в стандартную библиотеку питона через декоратор @dataclass — это не дополнительная возможность языка, и не ключевое слово, класс данных реализован на стандартных возможностях питона в виде библиотеки. Без особых проблем я смог реализовать @tagged_union. Вся реализация занимает 120 строк кода и один вечер. Код на КДПВ как раз использует мой микромодуль.
Со мной можно пообщаться в неформальной обстановке в чате который вдохновил меня на эту статью.
===========
Источник:
habr.com
===========
Похожие новости:
- [Python] Проверка скорости интернета библиотекой Requests в мультипроцессинге
- [Облачные сервисы, Программирование, Разработка веб-сайтов] Serverless и полтора программиста
- [Python, Программирование, Отладка] 8 продвинутых возможностей модуля logging в Python, которые вы не должны пропустить (перевод)
- [.NET, C#] Интеграция с «Госуслугами». Место СМЭВ в общей картине (часть I)
- [Системное программирование, Программирование микроконтроллеров, Компьютерное железо] Неожиданные детали работы Windows Firewall, настроенного по умолчанию. И эксперименты по перенастройке
- [Python, Алгоритмы, Обработка изображений, Машинное обучение] Нет времени объяснять, сделай автопилот
- [Криптография, Python] Дешифровка текста методом частотного анализа
- [Python, JavaScript, Программирование] Разбор статьи из журнала «Код» (Яндекс Практикум)
- [Python, Алгоритмы, GitHub, Веб-аналитика] Как проанализировать рынок фотостудий с помощью Python (3/3). Аналитика
- [Python, Алгоритмы] Идеальный график отпусков. Естественные алгоритмы. Поведение роя пчёл
Теги для поиска: #_python, #_programmirovanie (Программирование), #_.net, #_scala, #_svoboda (свобода), #_tipizatsija (типизация), #_python, #_python, #_programmirovanie (
Программирование
), #_.net, #_scala
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 17:58
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Вы просто не знаете зачем нужны языки с динамической типизацией Пока некоторые незрелые личности бомбят от языков с динамической типизацией, хотелось бы сказать и показать, что многие разработчики просто не понимают необыкновенной свободы этих языков. Я, конечно же, я верю в статическую типизацию. Я убежден что она захватит (и уже захватывает) мир. Люди, бросавшие мне в лицо: "нам не нужны все эти ваши типы" с таким же фанатизмом рукоплескали добавлению различных типов в их любимые языки с динамической типизацией (классы в JavaScript, аннотации типов вместе с mypy в python). Мне не нужны извинения за их недальновидность и невежество. Они вели себя радикально лет 10-15 назад и проиграли. То, во что превратилась экосистема их любимых языков — это лучшее наказание, а их поведение обязательно должно быть наказано. Пока питонисты решают на каком питоне писать: 2.7, 3.8 или подождать 4-ку — по сути теперь есть три разных питона. JavaScript-еров справедливо ненавидят подростки освоившие статически типизированный TypeScript — точно с таким же пренебрежением JavaScript'еры смотрели на корпоративных программистов на Java в свое время. Однако, в языках со статической типизацией существует серьезная проблема. Проблема не в том, что типы надо указывать и соблюдать. Настоящая проблема: отсутствие свободы и принуждение к весьма посредственному дизайну языка. Давайте я приведу несколько примеров. Диктатура Java сопротивлялась добавлению "синтаксического сахара" около 10-ти лет (условно где-то 2002-2012). Наконец-то в нее добавляют все то, что должно быть в хорошем языке программирования — даже лень приводить полный перечень, потому что это будут буквально все фичи нормальных языков. Это не было каким-то вынужденным 10-ти летним простоем в дизайне языка, во время которого переписывали компилятор или решали другие объективные проблемы развития. Просто Sun и Oracle предпочитали нанимать юристов, а не разработчиков. Да, они за это поплатились — туда им и дорога, но это не отменяет того факта, что множество программистов было вынуждено писать на убогом языке по милости каких-то мутных управленцев с сомнительной экспертизой. В C# только что добавили тип данных запись (record type), это заняло всего лишь 9 лет — отсчитывая от релиза другого языка F# 2.0 (2010), в котором уже была очевидна полезность этих типов. Оба языка разрабатывались под одной и той же крышей Microsoft — трудно предположить, что в команде C# не заметили возможностей F#. Просто они решили не торопиться. Возможно года через 3-4 мы получим именованные объединения (tagged union или discriminated union) в C#. Почему так долго? А нет никаких причин — просто дизайнерам языка так захотелось. Программисты на Scala надменно ухмыляются — у них-то нет этих проблем. Нет проблем, как и нет нормального перечисляемого типа (enum). 14 лет выходили новые релизы этого языка начиная с 2006 года (релиз 2.0) ломая обратную совместимость компилятора на минорных релизах, но во всем этом бардаке не нашлось места перечисляемым типам. Есть enumeratum, но в Dotty одна из новых фич языка — это enum, прямо новое ключевое слово. Существующие до сих пор костыли никуда не годятся настолько, что требуется новое ключевое слово. Если бы только мы не должны были ждать Dotty 3+ лет. Хотя, это ничто по сравнению с 14 годами без enum'ов. Мой посыл, я думаю, понятен: когда вы пишите на языках со статической типизацией вы отдаете свою профессиональную жизнь на милость диктатуре. Диктатуре Гослинга, Хейлсберга, Одерского, Бреслава. От их настроения в день принятия решения будет зависеть, получите ли вы какую-то фичу в этом году или лет через 10. В языках с динамической типизацией это не так — в них больше свободы, если тебе чего-то не хватает создай это сам и для этого есть все удобства и инструменты. Конечно же будет меньше безопасности. Но ведь не все люди готовы жертвовать свободой ради безопасности. А что народ? Раз уж я сравнил главных дизайнеров языков с диктаторами, теперь придется доводить аналогию до конца. Программисты предпочитающие конкретный язык со статической типизацией — это народ. Учитывая, что народ многочислинен и подразумевается, что умён, как так получается, что диктатура настолько успешна? Случалось ли вам встречать Java-программиста эмоционально утверждающего, что "синтаксический сахар" не нужен, более того — он вреден? "Не надо нам как в C# — это недоязык от мелкомягких". Целые орды высококлассных специалистов объясняющие в книгах и на ресурсах вроде Stackoverflow, как текущее положение абсолютно прекрасно и исчерпывающе достаточно. Видели ли вы когда-либо в книге уровня "Философия Java" (Брюса Эккеля) раздел хотя бы на пару страниц, в котором обсуждались бы возможные улучшения в языке? Хотя бы одним глазком посмотреть: как может быть или (не дай Бог) как должно быть. Были ли лямбда-функции такой уж инновационной концепцией, что сложно было предположить как это могло бы выглядеть в Java? Только диктатор может предлагать, остальные только соглашаются и доказывают друг другу насколько хороши все принятые решения. Особенность работы программиста в том, что он создает нечто гибкое, что можно дополнять, масштабировать, применять в различных сценариях, крутить и вертеть как захочется. Software — от слова soft — мягкий, гибкий. Однако вся гибкость исчезает, как только программисты начинают говорить о языках программирования со статической типизацией. Любая новая возможность воспринимается как "противоречащая идеологии языка" или, в крайнем случае, "излишне сложная и избыточная". Программисты на статически типизируемых языках все время ждут, когда им привезут фич в их язык. Они никогда не добавляют их самостоятельно, это не совсем возможно. И все что остается — годами ждать, производя очевидно глупый многословный код и надеяться на милость диктатора. Никогда вы не увидите такого поведения толпы в сообществах, пишущих на динамически типизируемых языках. Свобода Свобода динамически типизированных языков очевидна на примере JavaScript. Этим людям дали скобки () {} и точку . и на этом они построили такое, что в какой-то момент времени JavaScript считался функциональным языком программирования (при живом-то Haskell). Там программисты создали себе все: от классов до прототипов. Очевидно, что дизайн решений в JavaScript оставляет желать лучшего и едва ли этот опыт можно назвать успешным, но хотя бы у программистов была свобода. Это другой менталитет. Здесь нет авторитетов и диктаторов. Если чего-то не хватает, то это можно разработать. Никто не будет сидеть сложа руки 14 лет, пока Одерский прдпочитает заниматься алгебраическими типами данных вместо простых перечисляемых типов. Никто не будет ждать, когда команда C# наиграется с переписыванием компилятора и интеграцией его в свою посредственную IDE и наконец-то обратит внимание на то, что языку нужны современные фичи. Меня же на все эти мысли натолкнул мой опыт с python. Мне понадобился новый тип — именованное объединение (tagged union или discriminated union), который проверял бы типы своих кейсов во время исполнения кода. Зачем понадобился — я, возможно, расскажу в будущей статье. Я вспомнил, что класс данных (record type) добавлен в стандартную библиотеку питона через декоратор @dataclass — это не дополнительная возможность языка, и не ключевое слово, класс данных реализован на стандартных возможностях питона в виде библиотеки. Без особых проблем я смог реализовать @tagged_union. Вся реализация занимает 120 строк кода и один вечер. Код на КДПВ как раз использует мой микромодуль. Со мной можно пообщаться в неформальной обстановке в чате который вдохновил меня на эту статью. =========== Источник: habr.com =========== Похожие новости:
Программирование ), #_.net, #_scala |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 17:58
Часовой пояс: UTC + 5