Pull to refresh

Семь кругов ада для новых элементов языка

Reading time 3 min
Views 1.1K
Original author: Phil Haack
image
Мой последний пост о новом элементе «dynamic» вызвал волну отзывов, которые не обычны для обсуждения новых элементов или особенностей языка. Многие были взволнованы и рады, но были и те, кто огорчился, что их язык «женится» с новым элементом.

У C# эта ситуация была для элемента var в прошлом и повторяется сейчас для dynamic. Не знаю, может, существуют семь кругов ада, когда их любимый язык программирования получает новые возможности. (Оговорка: Фактически, всю эту чепуху создаю я)


1. Шок и отрицание


С добавлением нового элемента, наблюдаются реакции шока и отрицания.
«Зачем они добавили эти лямбды? Я только-только с делегатами разобрался!»
«Бредовый синтаксис. Я забью на него»
«Генерики никогда не будут рулить! Запомните мои слова»

2. Тени забытых предков


Даже до появления нового функционала, разработчики начинают ностальгировать по прошлому, которого никогда не было.
«Я любил язык X 10 лет назад, когда он не был таким раздутым»

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

3. Злость и опасение, неуверенность и сомнение


Позже, ностальгия переходи в злость и опасение, неуверенность и сомнения.
Посмотрите на реакцию добавления «goto» в PHP
«Это проблема. Серьезно, PHP всегда был без goto, зачем превращать язык в публичную угрозу?»

«Да Робин, PHP — угроза, терроризирующая Готэм. Быстро Бетмобиль!»

Dynamic получил похожу долю злости:
«C# был прекрасным статическим языком. Если мне нужен динамический язык, я буду пользоваться чем-нибудь другим!»

Или
«Я никогда не буду пользоваться этим функционалом»

Незадолго до того, злость превращается в опасение, неуверенность и сомнение. var в C# прямое тому доказательство. Многие разработчики ошибочно писали, что код более не будет строго типизированным, все это ведет прямиком в ад.
«Мой друг использовал var в своей программе, которую озарило и она самостоятельно отформатировало его жесткий диск, а также стала виной недавнего экономического кризиса. Крест на пузе»

Они не знали, dynamic уже был тогда в разработке, и он действительно выполнил бы эти обещания ;)
Новый функционал уничтожит все живое на планете.

4. Депрессия, размышления и гадания о производительности


«Вздох. Я знаю, что должен выучить новый фичу, но интересно как она влияет на производительность?»

Это добивает меня. Практически всегда я вижу первый вопрос от разработчиков о новой особенности языка. «Оно быстро работает?»

Я думаю, размышления на эту тему – бессмысленная трата времени. Для вашего сайта, у которого 100 посетителей в день, да, производительности хватает.

Лучше задать вопрос по-другому – «Достаточно ли быстро работает приложение для моих требований?». И если нет, тогда следует искать узкие места и оптимизировать их. Ваши проблемы с производительностью никак не связаны с особенностями языка, а с ошибками на более высшем уровне, например как проблема Select N+1

5. Свет в конце туннеля


«О, использование нового элемента не отформатировало мой жесткий диск. Может оно не так и плохо»

Теперь разработчик начинает понимать, что новый функционал не ест котят на завтрак и не воплощение дьявола. Эй! Оно даже имеет право на законное использование.

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

6. Код стал сумасшедшим


Я думаю, что мы все проходим через эту фазу время от времени. В какой-то момент ты понимаешь, что новый функционал – это круто и ты рад как слон. В твоих руках оказывается Молот Тора и каждая строчка кода выглядит как гвоздь, готовый к забиванию.

Многие вещи могут стать уродливыми на данном этапе в приступе волнения. Внезапно каждый объект — анонимный, каждый callback – лямбда-выражение и каждый метод – генерик, в любом случае, где нужно и не нужно.

Наверное, хорошая идея сопротивляться этому, но в один прекрасный момент ты даешь себе свободу и наслаждаешься новой особенностью языка. Запомните лишь одну команду.

svn revert –R

Или другую альтернативную команду вашей любимой системы контроля версий.

7. Одобрение и забывчивость.


На данном этапе, разработчик наконец-то принял новые особенности в языке как любую другую часть языка, как элементы class или public. Уже нет нужды беспричинно использовать или наоборот, везде где только можно. Разработчик начинает использовать функционал только там, где это действительно нужно.
Tags:
Hubs:
+30
Comments 78
Comments Comments 78

Articles