Есть ли недостатки использования функций C# 3.0?
Мне нравятся особенности C# 3.0, особенно лямбда-выражения, автоматически реализуемые свойства или в подходящих случаях также неявно типизированные локальные переменные (var
ключевого слова), но когда мой босс обнаружил, что я их использую, он попросил меня не использовать какие-либо функции C# 3.0 в работе. Мне сказали, что эти функции не являются стандартными и вводят в заблуждение большинство разработчиков, и их полезность сомнительна. Я был ограничен в использовании только функций C# 2.0, и он также рассматривает возможность запрета анонимных методов.
Поскольку мы нацелены на.NET Framework 3.5, я не вижу причин для этих ограничений. На мой взгляд, возможно, единственным недостатком является то, что моим нескольким сотрудникам и боссу (также программисту) придется изучить некоторые основы C# 3.0, что не должно быть трудным. Что вы думаете об этом? Мой босс прав, и я что-то упустил? Есть ли веские причины для такого ограничения в компании-разработчике, где C# является основным языком программирования?
10 ответов
У меня был подобный опыт (попросили не использовать Generics, потому что это может сбить с толку моих коллег).
Дело в том, что мы сейчас используем дженерики, и у моих коллег с ними проблемы. Они, возможно, не поняли, как создавать универсальные классы, но они действительно понимают, как их использовать.
Я считаю, что любой разработчик может научиться использовать эти языковые функции. Сначала они могут казаться продвинутыми, но по мере того, как люди к ним привыкают, шок от новизны уменьшается.
Основной аргумент в пользу использования этих функций (или любых новых языковых функций) заключается в том, что это простой и легкий способ помочь моим коллегам повысить свои навыки, а не застаиваться.
Что касается вашей конкретной проблемы - не использовать лямбды. Многие обновления BCL имеют перегрузки, которые принимают делегатов в качестве параметров - во многих случаях их легче всего выразить как лямбды, если не использовать их таким образом, игнорируются некоторые из новых и обновленных вариантов использования BCL.
Что касается проблем, с которыми ваши сверстники не могут изучать лямбды - я обнаружил, что Jon Skeets C# подробно рассматривает то, как они эволюционировали от делегатов, так, чтобы им было легко следить, и это действительно откровение. Я бы порекомендовал вам получить копию для вашего босса и коллег.
Вы, руководитель, должны понимать, что языковые (и другие) улучшения предназначены для того, чтобы дать разработчикам больше возможностей и сделать их более эффективными при выполнении поставленной задачи, и что если он не собирается разрешать их по неизвестным причинам, то:
- Команда разработчиков не работает с максимальным потенциалом.
- Компания не выигрывает от повышения эффективности / производительности.
как и другие говорили, что разработчики не стоят своей соли, если они не могут идти в ногу с некоторыми из последних улучшений в языке, который они используют ежедневно. Я подозреваю, что ваш босс в последнее время не слишком много занимался кодированием, и именно его неспособность понять последние улучшения языка привела к этому решению.
Мне сказали, что эти функции не являются стандартными и вводят в заблуждение большинство разработчиков, и их полезность сомнительна. Я был ограничен в использовании только функций C# 2.0, и он также рассматривает возможность запрета анонимных методов.
Предположительно грубо переводится с вашего босса смысл...
Эти функции сбивают меня с толку, и я не считаю их полезными, потому что я их не понимаю.
Что довольно симптоматично для парадокса Blub (ну или просто явная лень). В любом случае, нет смысла в том, что он говорит, и вы должны начать искать другую работу, если он продолжит идти по этому пути.
Жюри до сих пор не знает долгосрочных последствий некоторых функций, но если их основное обоснование - "это сбивает с толку других разработчиков" или что-то подобное, я бы был обеспокоен качеством таланта.
Если с этого момента проект является строго C# 3+, то вы не нарушите сборку, включив эти элементы. Однако, прежде чем использовать их, вы должны знать следующее:
- Вы не можете использовать их, если руководитель проекта принимает решение и голосует "нет".
- Кроме того, вы должны использовать их там, где это значительно облегчает поддержку кода.
- Вы не должны использовать их способами, которые вводят в заблуждение или являются ненужными в том смысле, что они не значительно улучшают удобство сопровождения кода. Это означает, что вы не должны использовать их там, где код фактически такой же или едва улучшен.
Если Microsoft не определила стандарт, и это были функции, которые они добавили к языку, не принадлежащему Microsoft, я бы сказал, что у вашего босса есть смысл. Однако, поскольку Microsoft определяет язык и использует именно эти функции при реализации значительных частей.NET 3.5 (и 4.0), я бы сказал, что вы будете глупы игнорировать их. Вы не можете использовать некоторые из них - var
например, может быть неприемлемым во всех средах из-за стандартов кодирования, но общая политика отказа от новых функций кажется неразумной.
Самое сложное - это когда начинать использовать новые функции, потому что они могут сбивать с толку и могут задерживать разработку. В общем, я выбираю использовать новые языковые функции и элементы платформы в новых проектах. Я часто избегаю использовать их в проектах, которые в настоящее время находятся в разработке, когда выходит усовершенствование функции / структуры, откладывая до следующего проекта. В длинном проекте я мог бы представить их на значительном этапе, если объем реархитектуры невелик или функция стоит изменений. Как правило, я бы подождал, пока проект все-таки претерпел значительные изменения, а затем оценил бы, оправдан ли рефакторинг на новые функции.
Мне нравятся особенности C# 3.0, особенно лямбда-выражения, автоматически реализуемые свойства или в подходящих случаях также неявно типизированные локальные переменные (ключевое слово var), но когда мой начальник обнаружил, что я их использую, он попросил меня не использовать какие-либо функции C# 3.0 в работе. Мне сказали, что эти функции не являются стандартными и вводят в заблуждение большинство разработчиков, и их полезность сомнительна.
У него есть точка.
Следуя этой мысли, давайте сделаем правило против универсальных коллекций, так как List<T>
не имеет никакого смысла (угловые скобки? wtf?).
Пока мы на этом, давайте исключим все интерфейсы (когда вам когда-нибудь понадобится класс без какой-либо реализации?).
Черт возьми, давайте продолжим устранять наследование, так как в наши дни это так сложно (разве мы не можем быть просто друзьями?).
А использование рекурсии является основанием для увольнения (Foo() вызывает Foo()? Конечно, вы, должно быть, шутите!).
Errrm... вернуться к реальности.
Дело не в том, что функции C# 3.0 вводят в заблуждение программистов, а в том, что эти функции сбивают с толку вашего босса. Он знаком с одной технологии и упорно отказывается расстаться с ним. Вы собираетесь войти в парадокс Сумеречной зоны:
Программисты очень привязаны к своим любимым языкам, и я не хочу никого обижать, поэтому для объяснения этого я собираюсь использовать гипотетический язык под названием Blub. Blub падает прямо в середине континуума абстрактности. Это не самый мощный язык, но он более мощный, чем кобол или машинный язык.
И фактически, наш гипотетический программист Blub не использовал бы ни один из них. Конечно, он не будет программировать на машинном языке. Вот для чего нужны компиляторы. А что касается Кобола, он не знает, как с этим можно что-либо сделать. У него даже нет x (особенность Blub на ваш выбор).
Пока наш гипотетический программист Blub смотрит на энергетический континуум, он знает, что смотрит вниз. Языки менее мощные, чем Blub, очевидно, менее мощные, потому что им не хватает некоторых функций, к которым он привык. Но когда наш гипотетический программист Blub смотрит в другом направлении, вверх по силовой среде, он не понимает, что смотрит вверх. То, что он видит, это просто странные языки. Вероятно, он считает их примерно равными по силе Блюбу, но с учетом всего этого и другого волосатого материала. Blub достаточно хорош для него, потому что он думает в Blub.
Однако, когда мы переключаемся на точку зрения программиста, использующего любой из языков выше энергетического континуума, мы обнаруживаем, что он в свою очередь смотрит на Блуба свысока. Как вы можете сделать что-нибудь в Blub? У него даже нет y.
C# 3.0 не сложно. Конечно, вы можете злоупотреблять этим, но это не сложно и не смущает любого программиста с опытом работы с C# 3.0 более недели. Навыки вашего босса только что отстали, и он хочет довести остальную команду до его уровня. НЕ ПОЗВОЛЯЙТЕ ЕГО!
Продолжайте использовать анонимные функции, ключевое слово var, авто-свойства и то, что вам нравится. Вы не потеряете свою работу из-за этого. Если он разозлится по этому поводу, смейтесь.
Некоторые люди просто боятся перемен, потому что, возможно, вы заставите их всех выглядеть глупо, используя причудливые новые технологии. Также может случиться так, что ваш начальник не хочет, чтобы команда изучала новые вещи, вместо того, чтобы выполнять работу по старому подходу.
var
Ключевым словом, безусловно, можно злоупотреблять, но в большинстве случаев уменьшает избыточный код. LINQ - это главное, что вы хотите от.Net 3.5 из-за огромной экономии времени при написании кода. Ваш босс должен поощрять вас использовать его. Также библиотеки базовых классов теперь принимают делегаты как параметры, так что вы будете сильно ограничивать себя, не используя их. Лямбда - это просто необычный синтаксический сахар, чтобы сделать делегатов чище.
Я бы посоветовал вам эффективно интегрироваться в команды разработчиков программного обеспечения и показывать пример. Две действительно замечательные статьи о том, как бороться с командами, которые боятся перемен.
Возможно, вы можете делать презентацию раз в неделю для каждой функции для всех и привлечь некоторых разработчиков на свою сторону, чтобы убедить руководство в преимуществах.
Недавно я перешел из новейшего C# house в C# house, который работал в основном на dot.Net 1.1 и некоторых проектах 2.0, используя в основном только функции 1.1. К счастью, руководство держится подальше от кода. Большинству разработчиков нравятся все новые функции в новых фреймворках, у них просто нет времени или желания разбираться с ними самостоятельно. Однажды мне удалось показать им, как они могут сделать свою жизнь проще, они начали использовать их сами, и мы перенесли несколько проектов, чтобы получить новые языковые функции и лучшие преимущества инструмента.
Нравится вам это или нет, если вы планируете использовать LINQ в любой ситуации, вам придется использовать некоторые спецификации языка C# 3.0.
Вашему боссу придется согреться с ними, если он хочет использовать наборы функций, которые вы получаете от 3.5, которые многочисленны и стоят вашего времени.
Кроме того, из своего опыта работы в ведущих командах я обнаружил, что использование спецификаций 3.0 на самом деле помогло разработчикам понять и понять основы кода. Разработчик тратит около недели времени на то, чтобы понять, что означает синтаксис, но как только они его получают, они предпочитают новый способ старому.