Эффективно ли развитие C # неотделимо от используемой вами IDE?


41

Я программист на Python, изучающий C #, который пытается перестать беспокоиться и просто любит C # за то, что он есть, вместо того, чтобы постоянно сравнивать его с Python.

Я поймал один момент: отсутствие ясности относительно того, где вещи определены, как подробно описано в этом вопросе переполнения стека . Вкратце: в C # using fooне говорится о том, какие имена fooстановятся доступными, что аналогично from foo import *Python - форма, которая не поощряется в культуре кодирования Python за то, что она неявная, а не более явный подход from foo import bar.

Я был довольно поражен ответами Stack Overflow на этот вопрос от программистов на C #, которые заключались в том, что на практике это отсутствие явности не имеет большого значения, потому что в вашей IDE (предположительно Visual Studio) вы можете просто навести курсор на имя и сказать система, откуда исходит название. Например:

Теперь, в теории, я понимаю, что это означает, что когда вы просматриваете текстовый редактор, вы не можете сказать, откуда берутся типы в C # ... но на практике я не считаю, что это проблема. Как часто вы на самом деле смотрите на код и не можете использовать Visual Studio?

Это откровение для меня. Многие программисты Python предпочитают подход к текстовому редактору для кодирования, используя что-то вроде Sublime Text 2 или vim, где все дело в коде, плюс инструменты командной строки и прямой доступ и манипулирование папками и файлами. Идея зависимости от IDE для понимания кода на таком базовом уровне кажется анафемой. Кажется, культура C # радикально отличается в этом вопросе. И мне интересно, нужно ли мне просто принять и принять это как часть моего изучения C #.

Это приводит меня к моему вопросу: эффективно ли развитие C # неотделимо от используемой вами среды IDE?


7
Python - это динамический язык, статически типизированный в C # (например, Java), поэтому то, как вы кодируете в любом из них, сильно отличается.
Одед

6
@Oded: using MyType = MyNamespace.MyType;?
ПДР

4
Я не знаю, на что это похоже в Python, но в C # вы всегда можете начать с этого global::и продолжить свой путь. usingне делает ничего доступного, чего не было раньше; это только облегчает доступ (как при меньшем наборе текста, необходимом для использования определенного класса).
CVn

5
«Многие программисты Python предпочитают подход к текстовому редактору для кодирования, используя что-то вроде Sublime Text 2 или vim, где все дело в коде, плюс инструменты командной строки и прямой доступ и манипулирование папками и файлами». - Это звучит ужасно неэффективно для меня. IDE - это инструмент, который помогает вам быть более продуктивным. Конечно, вы можете построить дом с помощью молотка и ручной пилы и вырубить деревья самостоятельно, но я думаю, что у вас будет гораздо меньше времени с некоторыми электроинструментами и покупкой предварительно обрезанного пиломатериала.
Энди

2
@ Энди - я вижу, это звучит так. Но эти текстовые редакторы на самом деле очень мощные, предлагая массу инструментов и функций для программистов. Это просто радикально иной способ получения и использования этих инструментов и функций, чем в IDE (и тот, который может быть более или менее подходящим для определенных языков / культур программирования).
Ghopper21

Ответы:


26

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

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

Эффективно ли развитие C # неотделимо от используемой вами IDE?

Теоретически нет, но практически да. Можно писать в C # с помощью текстового редактора и командной строки, но если у вас есть Visual Studio, вы бы никогда этого не сделали. На самом деле очень немногие программисты когда-либо выполняли код C # из командной строки.

Кстати, если вам неудобно using foo, вы можете использовать весь путь при использовании типа.


9
SharpDevelop и MonoDevelop являются альтернативными средами разработки для Visual Studio.
Одед

@ Оде я никогда ими не пользовался, но интересно посмотреть. Спасибо))
суперМ

Спасибо, superM. Можете ли вы дать представление о тех возможностях, которые делают Visual Studio столь необходимой? Я знаю, что у него очень хорошее завершение кода, но что еще? Это более или менее похоже на Eclipse для C #, или есть что-то более конкретное в этом, на что полагаются разработчики C #?
Ghopper21

2
@ Ghopper21: Я хотел бы предложить, что он более сопоставим с IntelliJ, чем с Eclipse (особенно если вы включаете Resharper), за исключением того, что в мире .NET плагины сообщества обычно написаны для Visual Studio.
ПДР

5
+1: я согласен, хотя вы можете писать код в командной строке с помощью блокнота, вы были бы идиотом, чтобы игнорировать инструменты, которые VS или Sharp Develop вносят в таблицу.
Двоичный беспорядок

33

Идея зависимости от IDE для понимания кода на таком базовом уровне кажется анафемой.

Это не вопрос понимания вашего кода: при наличии достаточного времени вы всегда можете найти нужную переменную в обычном текстовом редакторе или даже в распечатке. Что касается понимания кода, зависимость IDE абсолютно не существует.

Эффективный поиск ссылок - это совершенно другая тема: мне нравится находить использование переменных Java в Eclipse так же, как мне нравится находить точки объявления в Visual Studio для C # и C ++. Я предпочитаю тратить свое время на кодирование, а не искать точки декларации вручную. Это похоже на математику: я могу умножать многозначные числа на листе бумаги, но я предпочитаю использовать калькулятор, чтобы сэкономить минуту или две.

Начиная с определенного «критического размера» кода, хорошая IDE становится очень полезной независимо от языка программирования. Размер может варьироваться от языка к языку, но как только вы пересекаете несколько тысяч строк, IDE помогает независимо от вашего языка. Это больше связано с ограничениями человеческого разума, чем с конкретным языком программирования: в какой-то момент ваша кратковременная память ограничена «переполнением».

Существуют приемы, позволяющие увеличить критический размер, когда IDE становится полезным. Например, вы можете следовать соглашению об именах (в какой-то момент венгерские имена были популярны в мире C ++, особенно среди практиков Windows). Другой распространенный трюк - определение переменных экземпляра this.даже в тех случаях, когда такая квалификация не требуется.

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


1
Вероятно, мне следовало бы сказать «быстро прочитать код» ... Для меня совершенно неуместно не иметь все ссылки прямо в одном и том же исходном файле, а вместо этого использовать инструменты для поиска этих ссылок.
Ghopper21

5
Не то, чтобы я не мог выбрать thisидиосинкратическое использование - но кодирование не является изолированным искусством, и я думаю, что лучше следовать (или, по крайней мере, начинать с) нормам культуры кодирования - то есть быть «Pythonic» с Python и каким бы ни был эквивалентный путь C # с C #. Из приведенных здесь ответов и комментариев ясно, что использование хорошей IDE, такой как Visual Studio, занимает центральное место в «пути C #» (если это правильный путь).
Ghopper21

3
@ Ghopper21 С C # вы столкнетесь не с тем, что вы не можете написать его без IDE, а с тем, что подавляющее большинство кода C # написано в IDE, и все разработчики используют эту IDE. Этот факт в сочетании с intellisense приводит к тому, что разработчики попадают в ловушку памяти Google, поскольку исследования говорят о huffingtonpost.com/2011/07/15/… "Согласно результатам исследований, люди, имеющие доступ к огромному веб-индексу Google, с меньшей вероятностью вспомните факт, когда его попросят; однако они помнят, где и как найти этот факт в Интернете »,
Джимми Хоффа,

2
@ Ghopper21 Я не говорю, что эта ловушка памяти плохая , она является источником чрезвычайно повышенной производительности для большинства, поэтому на это жалуются только те, кто долго помнил дни, когда они могли запомнить весь API, с которым они работали. Я просто указываю на это, потому что этот факт напрямую влияет на код C #, который вы читаете, а также на стиль и культуру разработки C #.
Джимми Хоффа

1
Я никогда не спускался до API bios / dos низкого уровня; но моим первым языком / средой был Borland TurboPascal; и я, вероятно, запомнил ~ 90% языка / стандартной библиотеки в один момент. Основные исключения связаны с тем, что не удается понять, о чем должен был быть ОО.
Дэн Нили

8

Многие программисты Python предпочитают подход к текстовому редактору для кодирования, используя что-то вроде Sublime Text 2 или vim, где все дело в коде, плюс инструменты командной строки и прямой доступ и манипулирование папками и файлами.

Это здорово, но это не относится к VS IDE. Смысл среды IDE, такой как VS, - быстрая поддержка разработки с помощью таких мощных инструментов, как рефакторинг и intellisense. VS очень очень хороший редактор для C # код.

Теперь C # позволяет вам кодировать в стиле, который в большей степени зависит от его IDE (вы можете использовать множество varключевых слов и тому подобное). Некоторые люди предпочитают быть более явными, например, используя псевдонимы пространства имен, чтобы понять, к какому пространству имен принадлежит класс (как importв Java или Python). Это больше выбор стиля кодирования, чем особенность языка.

Поскольку C # статически типизирован (хотя с некоторыми динамическими расширениями, начиная с v4), всегда довольно легко узнать, на какие типы ссылаются - если они ошибочны, код не скомпилируется, и VS не единственная IDE с поддержкой C # intellisense. Это, вероятно, лучший, хотя.

Разработка C # без мощной IDE (например, VS) - это все равно, что забивать гвозди руками, когда у вас уже есть верхний гвоздодер - может быть, вам понадобится странное время, но профессионалы используют подходящий инструмент для работы ,

Я бы сказал, что то же самое, вероятно, верно и для Java. Если есть мощная IDE с инструментами intellisense и рефакторинга кода, вам, вероятно, стоит использовать ее.

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

Многие программисты, которые предпочитают подход к текстовому редактору для кодирования, не получают столько же от статически типизированных языков (таких как C # и Java), и поэтому может быть лучше, если они будут придерживаться динамических языков, таких как Python и Javascript.

Я думаю:

  • Динамические языки подходят для легких инструментов (тяжелые среды разработки дают меньше преимуществ здесь)
  • Статические языки подходят для мощных IDE (инструменты могут помочь с кодом за счет гибкости)

+1 за обратную цитату.
fbmd

5

Чтобы ответить на ваш вопрос: хотя среда медленно меняется, среда разработки Microsoft в значительной степени является монокультурой .

Этот подход имеет много положительных и отрицательных сторон, которые можно долго обсуждать (например, рассмотреть плюсы и минусы открытых и закрытых платформ, таких как ПК против Xbox), но в конечном итоге инструменты от Microsoft - это то, что наиболее люди используют. Компания также показала, что их принятие решений часто является своего рода процессом, «приносящим наибольшую пользу большинству наших пользователей», всегда ищущим практические компромиссы (совсем недавно - рассмотрите Typescript ). В общем, я не удивлюсь, обнаружив, что разработка C # была / сделана с учетом инструментов (VS).


Кстати, можно утверждать, что Python - это тоже собственная монокультура, учитывая сильную приверженность к тому, что считается «Pythonic» в стиле и подходе к кодированию, и основополагающий принцип дизайна языка - наличие одного очевидного правильного способа делать вещи. Я склонен думать, что программирование монокультур в этом смысле может быть очень хорошим, поскольку оно создает целостное сообщество и совместный код. Просто (слишком плохо? И / или возможность расширить свой кругозор?), Что культуры Python и C # такие ... разные!
Ghopper21

2
@ Ghopper21 Это очень хороший момент о Python. Я думаю, что версия MS «должен быть единственный очевидный способ сделать это» распространяется на выбор IDE :)
Даниэль Б

4

С одной стороны, C # - это не Python. Существуют разные методологии проектирования.

Теперь, чтобы ответить на ваш вопрос, вполне возможно использовать ваш Python-esque с помощью операторов.

using FooBar=MyName.Foo.FooBar; 

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

Кроме того, C # - это язык, который очень хорошо подходит для использования IDE, чтобы упростить его. Intellisense удивительно прост в реализации, особенно по сравнению с динамическими языками, такими как Ruby и Python. Тем не менее, вам не нужно застрять в вашей IDE. Я слышал о людях, использующих Eclipse. Конечно, есть и MonoDevelop (которым я пользуюсь довольно часто), и вы даже можете работать из командной строки. На моем сервере иногда я буду редактировать C # -файлы с помощью, viа затем использовать xbuildдля его перестройки ... Просто использование IDE значительно упрощает задачу по сравнению с командной строкой в ​​типичных случаях.


4

Кто-нибудь потрудился прочитать здесь?

Подводя итог, я говорю, что чрезвычайно сложная функциональность IDE необходима, и когда-нибудь она (должна) эволюционировать в дзен возвышенного духа ....

Наше программное обеспечение - это 129 проектов, около 2 млн. LOC. Добавьте к этому масштабность платформы .NET, и, учитывая все это, я могу сказать, что IDE жизненно важен, он выходит за рамки мотивации вопроса этого потока.

Понимание кодовой базы

Период. Вы знаете виды функций, о которых мы говорим; за исключением того, что его удобство становится необходимым и необходимым для того вида кода, с которым я имею дело.

Я пишу лучший код из-за IDE. Я всегда добавляю собственные сообщения в свои тесты Nunit, потому что это легко, быстро и точно. Я предпочитаю перечисления над строками, в значительной степени из-за intellisense. Я без колебаний использую описательное / длинное наименование - многострочный оператор составлен быстро и чисто.

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

Помощь в кодировании

Здесь я часто плачу «хватит!». Представьте себе экран, заполненный дюжиной цветов, в основном непонятных, какая-то конкретная переменная, выделенная повсюду, выделение фигурных скобок, скрывающее на самом деле фигурную скобку, повсеместно подчеркивание, потому что «оно» хочет, чтобы я писал литературу, а не код, значки контекстных меню Resharper просто нужно щелкнуть по нему! затем игнорировать его большую часть времени), всплывающее окно с справкой по сигнатурам, занимающее 2/3 экрана по горизонтали, с вертикальным отображением нескольких перегрузок, всплывающее окно из-за того, где вы случайно оставили курсор мыши .... не могу даже увидеть строку & ^!% * s * кода, над которым я работаю!

Vis.Stud. Нужно принять минимализм, чтобы я мог сосредоточиться на кодировании, а не проходить сотни (тысячи, если вы учитываете все настройки цветового кодирования и все эти плагины) настроек в проигрышной битве за восстановление здравомыслия. Ключ " Парето " был бы великолепен.


1
Действительно оценил ваши мысли здесь, поскольку вы, кажется, действительно «поняли» с точки зрения как IDE, так и «Sublime VimNess» подходов к вещам. Я с вами во всем, что вы говорите здесь. Здесь надеемся, что это сбудется.
Ghopper21

3

Эффективно ли развитие C # неотделимо от используемой вами IDE?

Конечно нет. Почему бы вам не импортировать все пространство имен? Выбор использования интегрированной IDE или текстового редактора не имеет к этому никакого отношения. Импорт всего пространства имен не усложняет чтение кода или его использование.

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

Лично я не так часто использую объявления типов. Вместо этого я использую varключевое слово вместо этого по причинам, которые я описываю здесь: http://blog.gauffin.org/2012/08/to-var-or-not-to-var-is-that-really-the-question/


1
Проблема заключается в чтении, а не в написании кода. (Вопрос переполнения стека, на который я ссылаюсь выше, дает пример.) Когда вы читаете код, как вы узнаете, откуда что-то происходит? С Python вы можете искать явный импорт (при условии, что код соответствует строгим соглашениям Python для использования такого импорта). С C # кажется, что единодушным является то, что на практике вы используете IDE, как VS.
Ghopper21

Если вы не знаете, откуда взялся этот класс, вам, скорее всего, придется поискать его, чтобы узнать, как он работает. Просто Google msdn <classname>и нажмите на первую ссылку. Там вы получите пространство имен тоже.
jgauffin

Такой подход иллюстрирует культурные различия. Не то чтобы программисты на Python не гуглили - конечно, они делают - это просто способ думать об этом по-другому.
Ghopper21

Отдельно отметим, что var в C # - это приятное сочетание синтаксиса и компилятора, которое мне нравится, чтобы сделать код менее многословным и повторяющимся. Просто хотелось бы использовать его везде, а не только внутри методов.
Ghopper21

@ Ghopper21: Да, я знаю. Я хочу сказать, что Google очень хорошо индексирует MSDN, и вы получите документацию напрямую. Следовательно, вам не нужно документировать каждый используемый вами класс, включая полный путь к нему.
jgauffin

1

Насколько я понимаю, в Python «все публично» или что-то в этом роде. В C # конструктор модулей решает, что является общедоступным, а что нет, поэтому, когда вы делаете это, importвы все равно получаете только открытый API. Это может быть причиной разницы, которую вы описываете.


Это определенно большая разница между Python и C #, но на самом деле это не помогает мне понять, почему в импорте так мало ясности. Как отметил в своем комментарии @pbr, Java (которая также имеет различие между общественным и частным секторами) похожа на Python в своем культурном предпочтении явного импорта.
Ghopper21

5
@ Ghopper21 - Единственная причина, по которой следует предпочитать явный импорт в Java (и, например, в C ++), - это предотвращение конфликтов имен C # принято решение дизайна для решения этой проблемы путем псевдонимами импорта / типа, так как они лучше ручки , когда вы на самом деле есть имя столкновения вместе с выгодой , не имея кучу импорта шаблонных загромождают ваш источник.
Теластин

1

Эффективно ли развитие C # неотделимо от используемой вами IDE?

На моей предыдущей работе я в основном использовал vim для кодирования на таких языках, как C #, JavaScript, Powershell, Perl, C ++, и довольно много разработчиков делали что-то подобное. Проект был слишком большим для Visual Studio.

Тем не менее, большинство разработчиков на C # имеют дело с гораздо меньшими проектами и очень рады использовать VS.


0

Это интересный взгляд на разработку C #. То, что вы спрашиваете, выходит за рамки C #, если вы спрашиваете об IDE.

Как вы говорите, в Python вы можете использовать различные редакторы для написания своего кода. Вы можете сделать это с помощью .NET Framework тоже. Есть и другие инструменты IDE, которые вы можете использовать, такие как SharpDevelop. Visual Studio тесно связан с платформой .NET и является относительно дорогим. Такие инструменты, как SharpDevelop и «Экспресс» версии VS, существуют, чтобы побудить больше разработчиков использовать .NET. По сути, все, что IDE делает для вас, - это предоставляет организованную среду, обычно с intellisense, надстройками для повышения производительности и «помощником» для сборки, которая может в конечном итоге оказаться очень пугающей командной строкой для передачи вашему компилятору. То же самое относится и к Java, такие инструменты, как Eclipse, просто обеспечивают нам повышение эффективности организации и производительности. Под капотом ничего волшебного не случится, пока вы не создадите или не скомпилируете свой проект и это уважение,

Когда вы говорите об «использовании» в C # и сравниваете его с Python, это не совсем то же самое, что происходит под капотом. Операторы using используются компилятором, чтобы помочь его усилиям по преобразованию кода C # в MSIL. В MSIL нет директивы «импортировать все эти классы из этого пространства имен». К тому времени, когда код находится на уровне MSIL, все классы были помечены их полностью определенными именами. Эти выражения «использование» и «импорт» предназначены для удобства чтения человеком. Они не являются командами оптимизации компилятора. После того, как все это начальное «тегирование полностью определенных имен» продолжилось, может быть что-то вроде низкоуровневого «минимизации» для FQN, но это должно помочь компилятору / интерпретатору выполняться быстрее.

Последнее заключительное фундаментальное различие между всеми этими языками, упомянутыми здесь, состоит в том, что некоторые из них интерпретируются виртуальными машинами, некоторые интерпретируются в стиле JIT, а некоторые полностью компилируются. То, как эти директивы использования реализованы в этих компиляторах и интерпретаторах, сильно отличается.

НТН.


«Эти выражения« использование »и« импорт »предназначены для удобства чтения человеком». - Да, это ключевая философская разница на работе здесь. Читаемость на текстовом уровне является ключевым принципом дизайна Python первого порядка. C # не нуждается строго, но практически полагается на хорошую IDE, такую ​​как VS, чтобы быть «читабельной». Кстати, «импорт» в Python - это больше, чем просто читабельность, в отличие от «использования» в C #.
Ghopper21

0

Я думаю, что исторически ответ на этот вопрос в значительной степени, да, - разработка и эффективная разработка C # во всем, кроме Visual Studio, Xamarin или SharpDevelop, была слишком неприятным опытом.

Но в последнее время появилось много проектов, которые делают это проще, например:

OmniSharp предоставляет основу для intellisense и рефакторинга, наряду с плагинами vim, emacs, atom и sublime. Я на самом деле не использовал его, поэтому не знаю, насколько хорошо он работает, но выглядит многообещающе.

Yeoman ASP.NET MVC генераторы , помогают запустить новый проект MVC (возможно, существуют другие генераторы).

Пакет , альтернатива NuGet, где вы можете добавлять пакеты NuGet в свой проект из командной строки и обновлять файлы .csproj (хотя был инструмент командной строки NuGet, фактически обновление проектов для использования пакетов было частью IDE интеграция, а не инструменты командной строки).

Пакет подразумевает, что вы должны адаптировать свой исходный код к его использованию - поэтому, если вы сидите как один участник в команде и хотите использовать текстовый редактор для кодирования, а все остальные используют Visual Studio, вам придется убедить всех еще, чтобы адаптировать решение к вашим потребностям :(

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


-1

Уже нет:

http://www.omnisharp.net/

OmniSharp - это семейство проектов с открытым исходным кодом, каждый из которых преследует одну цель - обеспечить отличную разработку .NET в ВАШЕМ редакторе.

Интересно сказать, кроссплатформенность .NET. Но разумно ли для кого-то разрабатывать .NET без Visual Studio и Windows?

Весело ли делать .NET на Mac в Sublime? Убунту и Emacs? Windows и Атом? Вы можете использовать свой редактор PLUS Get, чтобы использовать замечательные функции, такие как Intellisense (не только автозаполнение), Добавить ссылку, Формат документа и многое другое. Разрабатывайте где угодно, разверните где угодно (и в Azure!)

Я проверил это с subime3 и osx

Больше образцов на

http://blog.jonathanchannon.com/2014/11/12/csharp-first-class-citizen-sublime-text/


Omnisharp позволяет использовать C # с текстовыми редакторами, такими как sublime и emacs. Так почему же проголосовали?
mamcx
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.