Есть ли недостатки использования функций C # 3.0? - PullRequest
22 голосов
/ 22 февраля 2010

Мне нравятся особенности C # 3.0, особенно лямбда-выражения, автоматически реализуемые свойства или в подходящих случаях также неявно типизированные локальные переменные (ключевое слово var), но когда мой босс обнаружил, что я их использую, он попросил меня не использовать никакой C # 3.0 функции в работе. Мне сказали, что эти функции не являются стандартными и вводят в заблуждение большинство разработчиков, и их полезность сомнительна. Мне было запрещено использовать только функции C # 2.0, и он также рассматривает возможность запрета анонимных методов.

Поскольку мы нацелены на .NET Framework 3.5, я не вижу причин для этих ограничений. На мой взгляд, возможно, единственным недостатком является то, что моим нескольким сотрудникам и боссу (также программисту) придется изучить некоторые основы C # 3.0, что не должно быть трудным. Что вы думаете об этом? Мой босс прав, и я что-то упустил? Есть ли веские причины для такого ограничения в компании-разработчике, где C # является основным языком программирования?

Ответы [ 10 ]

10 голосов
/ 22 февраля 2010

У меня был похожий опыт (меня попросили не использовать Generics, потому что это может сбить с толку моих коллег).

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

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

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

Что касается вашей конкретной проблемы - не использовать лямбды. Многие обновления BCL имеют перегрузки, которые принимают делегатов в качестве параметров - во многих случаях их легче всего выразить как лямбды, если не использовать их таким образом, игнорируются некоторые из новых и обновленных вариантов использования BCL.

Что касается проблем, связанных с тем, что ваши коллеги не могут изучать лямбды - я обнаружил, что Jon Skeets C # подробно рассматривает то, как они развивались от делегатов, таким образом, чтобы им было легко следить, и это действительно открывает глаза. Я бы порекомендовал вам получить копию для вашего начальника и коллег.

7 голосов
/ 22 февраля 2010

Вам, боссу, нужно будет понять, что языковые (и другие) улучшения предназначены для того, чтобы дать разработчикам больше возможностей и сделать их более эффективными при выполнении поставленной задачи, а также, если он не собирается разрешать их неизвестным причины то:

  • Команда разработчиков не работает с максимальным потенциалом.
  • Компания не выигрывает от повышения эффективности / производительности.

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

4 голосов
/ 22 февраля 2010

Мне сказали, что эти функции не являются стандартными и вводят в заблуждение большинство разработчиков, и их полезность сомнительна. Мне было запрещено использовать только функции C # 2.0, и он также рассматривает возможность запрета анонимных методов.

Предположительно примерно переводится в значение вашего босса ...

Эти функции сбивают меня с толку, и я не считаю их полезными, потому что я их не понимаю.

Что довольно симптоматично для парадокса Blub (ну или просто явная лень). В любом случае, в его словах нет никакого смысла, и вы должны начать искать другую работу, если он продолжит идти по этому пути.

3 голосов
/ 22 февраля 2010

Мне особенно нравятся особенности C # 3.0 лямбда-выражения, реализовано автоматически свойства или в подходящих случаях также неявно типизированные локальные переменные (var ключевое слово), но когда мой босс показал что я использую их, он спросил меня не использовать любые функции C # 3.0 в работе. я было сказано, что эти функции не стандартный и запутанный для большинства разработчики и его полезность Сомнительно.

У него есть точка.

Следуя этой мысли, давайте создадим правило для общих коллекций, поскольку List<T> не имеет никакого смысла (угловые скобки? Wtf?).

Пока мы это делаем, давайте удалим все интерфейсы (когда вам когда-нибудь понадобится класс без какой-либо реализации?).

Черт, давайте продолжим устранять наследование, так как в наши дни это так сложно (разве мы не можем быть просто друзьями?). 1012 *

А использование рекурсии является основанием для увольнения (Foo () вызывает Foo ()? Конечно, вы, должно быть, шутите!).

Errrm ... вернуться к реальности.

Дело не в том, что функции C # 3.0 путают программистов, а в том, что эти функции путают вашего босса . Он знаком с одной технологии и упорно отказывается расстаться с ним. Вы собираетесь войти в Сумеречную зону Blub Paradox :

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

А на самом деле наш гипотетический Блуб программист не будет использовать ни один из их. Конечно, он не будет программировать в машинный язык. Это то что компиляторы для. А что касается Кобола, он не знает, как можно получить что-нибудь сделано с этим. Это даже не иметь х (функция Blub на ваш выбор).

Пока наш гипотетический Blub программист смотрит на власть континуум, он знает, что он смотрит вниз. Языки менее мощные, чем Blub являются очевидно, менее мощный, потому что им не хватает какой-то функции, которую он использовал к. Но когда наш гипотетический Blub программист смотрит в другой направление, до силового континуума, он не понимает, что он смотрит вверх Какие он видит просто странные языки. Он вероятно, считает их о по силе эквивалентен Блю, но с все эти другие волосатые вещи также. Блуб достаточно хорош для него, потому что он думает в Blub.

Когда мы перейдем к точке зрения программист, использующий любой из языки выше власти континуум, однако, мы находим, что он в Поворот смотрит на Блюба. Как ты можешь сделать что-нибудь в Blub? Это не даже у.

C # 3.0 не сложно. Конечно, вы можете злоупотреблять этим, но это не сложно и не смущает любого программиста с опытом работы с C # 3.0 более недели. Навыки вашего босса только что отстали, и он хочет довести остальную команду до его уровня. НЕ ПОЗВОЛЯЙТЕ ЕГО!

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

3 голосов
/ 22 февраля 2010

Жюри все еще не знает о долгосрочных последствиях некоторых функций, но если их основное обоснование - «это сбивает с толку других разработчиков» или что-то подобное, я бы не задумывался о качестве таланта.

3 голосов
/ 22 февраля 2010

Если Microsoft не определила стандарт, и это были функции, которые они добавили в язык, отличный от Microsoft, я бы сказал, что у вашего босса может быть смысл. Однако, поскольку Microsoft определяет язык и использует именно эти функции при реализации значительных частей .NET 3.5 (и 4.0), я бы сказал, что вы будете глупы игнорировать их. Возможно, вы не захотите использовать некоторые из них - например, var может быть неприемлемым во всех средах из-за стандартов кодирования, - но общая политика отказа от новых функций кажется неразумной.

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

3 голосов
/ 22 февраля 2010

Если с сегодняшнего дня проект является строго C # 3+, то вы не нарушите сборку, включив эти элементы. Однако, прежде чем использовать их, вы должны знать следующее:

  • Вы не можете использовать их, если руководитель проекта принимает решение и голосует против.
  • Кроме этого, вы должны использовать их там, где это значительно облегчает поддержку кода.
  • Вы не должны использовать их способами, которые вводят в заблуждение или являются ненужными в том смысле, что они не значительно улучшают удобство сопровождения кода. Это означает, что вы не должны использовать их там, где код фактически такой же или едва улучшен.
2 голосов
/ 23 февраля 2010

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

Недавно я перешел из передового дома C # в дом C #, который работал в основном на dot.Net 1.1 и некоторых проектах 2.0, используя в основном только функции 1.1. К счастью, руководство держится подальше от кода. Большинству разработчиков нравятся все новые функции в новых фреймворках, у них просто нет времени или желания разбираться с ними самостоятельно. Однажды мне удалось показать им, как они могут сделать свою жизнь проще, они начали использовать их сами, и мы перенесли несколько проектов, чтобы получить новые языковые функции и лучшие преимущества инструмента.

2 голосов
/ 22 февраля 2010

Некоторые люди просто боятся перемен, потому что, возможно, вы заставите их всех выглядеть глупо, используя новые необычные технологии. Также может случиться так, что ваш начальник не хочет, чтобы команда изучала новые вещи вместо того, чтобы выполнять работу по старому, модернизированному пути.

Ключевое слово var, безусловно, может использоваться неправильно, но в большинстве случаев уменьшает избыточный код. LINQ - это главное, что вы хотите от .Net 3.5 из-за огромной экономии времени при написании кода. Ваш босс должен поощрять вас использовать его. Также библиотеки базовых классов теперь принимают делегаты как параметры, так что вы будете сильно ограничивать себя, не используя их. Лямбда - это просто необычный синтаксический сахар, который делает делегатов чище.

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

2 голосов
/ 22 февраля 2010

Нравится вам это или нет, если вы планируете использовать LINQ в любой ситуации, вам придется использовать некоторые спецификации языка C # 3.0.

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

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

...