Различия между разработкой UNIX и Windows - PullRequest
11 голосов
/ 25 апреля 2009

Я занимаюсь программированием на C и C ++ в Linux около 3 лет, и недавно я был заинтересован в разработке коммерческого программного обеспечения для бизнеса. Допустим, я нашел нишу, в которой я думаю, что смогу добиться успеха, но они используют только Windows. Однако я не имею опыта работы с Windows API. У меня есть несколько вопросов:

Должен ли я изучать .NET?

Нужно ли изучать C #, чтобы использовать .NET, или я могу придерживаться C ++?

Каково мнение о компиляции с использованием GCC под Cygwin с параметром --no-cygwin? Меня интересует переносимость, и я беспокоюсь, что если я начну писать для VC ++, я могу привязаться к Windows.

Где хорошее место, чтобы почитать?

Что еще вы можете рассказать мне о переходе с Linux на Windows-программирование?

Ответы [ 13 ]

13 голосов
/ 25 апреля 2009

Я столкнулся с точно такими же вопросами, и я так счастлив, что попробовал .NET. Я надеюсь, что эта информация поможет вам:

Должен ли я изучать .NET?

Я очень рекомендую это.

Нужно ли изучать C #, чтобы использовать .NET, или я могу придерживаться C ++?

Вы можете придерживаться C ++, но я уверен, что вам понравится изучать C #, пожалуйста, попробуйте. Вы сможете смешать их тоже. Основная задача .NET - изучить все библиотеки, которые могут вам помочь (поэтому вам не нужно изобретать велосипед). Часто используйте msdn и попробуйте получить карту основных классов и сборок .

Это забавный опыт, если вы пришли из C ++, у вас не должно быть серьезных проблем.

Где хорошее место, чтобы почитать?

Я хотел бы начать с чего-то более легкого, проверить бесплатные инструменты, программное обеспечение и примеры Visual Studio здесь , перейти к документации MSDN и скомпилировать некоторые примеры в MSDN (как получить доступ к файлам *) 1026 *, ...). Как вы можете видеть, вы найдете примеры C # и C ++ рядом.

Тогда, конечно, в конечном итоге потребуется прочесть такие книги, как C # через CLR .

Портативность

Убедитесь, что вы запускаете код в Mono и на нескольких платформах.

Будущие инвестиции

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

5 голосов
/ 25 апреля 2009

Должен ли я изучать .Net?

Зависит от того, считаете ли вы, что это будет выгодно для той ниши, на которую вы смотрите. Например, если ваша ниша представляет собой настольное приложение, вероятно, это хорошая идея для начала, потому что, IMHO, гораздо проще разработать WinForms, WPF GUI, чем версию C ++,

Нужно ли изучать C #, чтобы использовать .Net, или я могу придерживаться C ++?

C # не является обязательным требованием, и использование C ++ / CLI позволяет вам использовать преимущества .Net, все еще используя C ++. Тем не менее, я склонен не использовать C ++ / CLI только для компонентов, которые сильно сосредоточены на взаимодействии между управляемым и нативным кодом. Это особенно хорошо в таком развитии. Если вы переключитесь на другие основные приложения, я думаю, вы обнаружите, что C # или VB.Net подойдет вам лучше. Большинство онлайн-примеров ориентированы на эти языки. В частности, значительная часть инструментария в значительной степени ориентирована на эти языки (для начала разработчики WinForms и WPF).

Обеспокоены написанием непереносимого кода и привязкой к VC ++

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

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

3 голосов
/ 25 апреля 2009

Ответ зависит от типа программы, которую вы хотели бы реализовать.

Если вы хотите реализовать какую-то системную утилиту, ответ будет примерно таким же, как в * nx world: вам придется программировать на C для достижения наилучших результатов и очень хорошо знать Win API.

Что касается других вещей, C # - это, вероятно, путь сегодня. Это лучший язык, IMO, из существующих языков dotNet.

Изучение Windows API - определенно хорошая вещь, но я предлагаю использовать некоторые языки сценариев для этого для более быстрого эксперимента (Lua с библиотекой Alien, Python, AutoIt и т. Д.). Хорошо, что вы, вероятно, знаете некоторых из них, происходящих из * nx community.

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

Последний MonoDevelop позволяет вам даже загружать проекты Visual Studio, хотя я никогда не делал этого лично.

2 голосов
/ 27 апреля 2009

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

Вы, вероятно, хотите изучать .NET (эй, вам все равно придется изучать новый фреймворк), и C # не будет трудным в освоении, если вы хорошо разбираетесь в C ++. В настоящее время это стандартная среда разработки, вероятно, по уважительным причинам.

Если вы беспокоитесь о переносимости, напишите серверную часть на C ++ и изолируйте системные компоненты. Если вы собираетесь продавать программное обеспечение Windows для предприятий, оно должно выглядеть как программное обеспечение Windows. Это должно вести себя так, как они ожидают. Не ставьте под угрозу интерфейс для каких-либо преимуществ в кроссплатформенности; вместо этого отделите пользовательский интерфейс логически. Вы всегда можете переписать его позже для других платформ.

Аналогично, продолжайте и используйте Visual Studio. Это хорошая среда, хотя я иногда скучаю по gcc, gdb и make, но, скорее всего, вы будете лучше понимать, что пишете программу для Windows. Если вы используете Cygwin и gcc, вы, скорее всего, не будете думать, как программист Windows, что означает, что это не будет похоже на программу Windows, а это означает, что у ваших потенциальных клиентов будут проблемы с этим, что означает меньше денег и больше шансов на опоздавший захватить рынок.

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

Еще одна вещь: Unix-приложения часто печально известны неуклюжими пользовательскими интерфейсами. Пользователи Unix, как правило, более технические люди, которые не уделяют столько внимания тому, как все выглядит, и гораздо более щадящие уродливые интерфейсы. В мире коммерческого программного обеспечения Windows внешний вид и простота использования имеют значение, и реальными пользователями, скорее всего, будут люди с крайне неточной ментальной моделью компьютера, которые не распознали бы строку кода Python, если она укусила их в лицо .

Вам понадобится достаточно привлекательный пользовательский интерфейс, который может легко использоваться людьми, которые не заботятся о компьютерах как таковых. Это растяжка для многих из нас. Если вы не думаете, что в iPhone есть что-то особенное, вам крайне необходима другая точка зрения. Читайте о пользовательских интерфейсах, найдите кого-то другого с некоторым художественным смыслом и некоторой идеей юзабилити, что угодно. Разработка интерфейса отличается от программирования, и многие люди имеют только один из них (здесь люди, как правило, являются опытными программистами и могут иметь некоторые навыки интерфейса).

2 голосов
/ 25 апреля 2009

Должен ли я изучать .NET?

Да.

Нужно ли изучать C #, чтобы использовать .NET, или я могу придерживаться C ++?

Технически, нет, вам не нужно изучать C # для .NET.

если я начну писать для VC ++, я могу привязаться к Windows.

Это магазин Windows, верно? Кому интересно, переносимы ли программы Windows, , если единственная цель - Windows ?

Где хорошее место, чтобы почитать?

Stackoverflow.

Что еще вы можете рассказать мне о переходе с Linux на Windows-программирование?

Купите Windows-машину и Visual Studio. Не пытайтесь полу-Unix это. Потратьте время и силы на изучение Microsoft Way. Также как есть Путь Unix, есть Путь MS. Оба относятся к своим соответствующим системам.

Удачи и веселья!

1 голос
/ 26 апреля 2009

Многие люди, похоже, игнорируют первоначальный вопрос "Различия между UNIX и Windows-разработкой", и поэтому я немного об этом расскажу.


Что касается изучения C #:

Я думаю, что в какой-то момент вам нужно выучить язык, например C # [1] Вопрос не в том, стоит ли вам это изучать, а в том, когда и когда вы будете изучать это.


Относительно альтернативных языков, подобных C #:

Java - другой язык, очень похожий на C #. Java IMO является отцом C #, и IMO я предпочитаю Java.

Я предлагаю вам метафору, объясняющую мое пристрастие к Java. У Явы был этот сын C #, который видел все успехи своего отца. Сын ревновал и пытался сделать то же, что делал его отец.

В этом случае MS - выскочка, пытающаяся отодвинуть на задний план старшего отца. Однако в выскочке C # отсутствует пара ключевых вещей IMO:

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

[1 - сноска] Когда я говорю «такой язык, как C #», я имею в виду тот факт, что существуют другие языки с аналогичными функциями. В частности, такие функции, как: сборка мусора, 100% объектно-ориентированный с самого начала (против взлома C ++ в ОО), встроенная документация по типу xml (например, javadoc) и гибкость в выполнении множества разных задач.


Что касается изучения .NET:

Я сделал только небольшое / промежуточное количество C #, но из этого небольшого количества я заметил, что .NET в значительной степени требуется, когда вы делаете что-нибудь C #. (Я понимаю, что C # очень инцестуозен с .NET и его трудно отделить.) Как я понимаю, и я могу ошибаться ... большинство / все стандартные основные библиотеки C # - это C #, и поэтому вам нужно иметь .NET если вы делаете C #.


Вернуться к первоначальному вопросу "Различия между разработкой в ​​UNIX и Windows":

  • Windows разработка не столь разнообразна в IMO ... есть только одна среда разработки , и эта среда представляет собой компилятор MS и MS IDE, упакованные как одна в их Visual Студийная линейка продуктов .
  • Windows разработка ориентирована на GUI-управляемые инструменты.
  • Linux разработка более разнообразна с сотнями компиляторов / текстовых редакторов / IDE / и т. Д. (Я говорю, что это разнообразно, но на самом деле большинство разработок Linux на самом деле очень похоже , используя набор общих инструментов: GCC / GDB / GREP / FIND / VIM / EMACS / CTAGS / CSCOPE и некоторый исходный репозиторий на выбор).
  • Linux разработка сосредоточена на инструментах с интерфейсом командной строки .
1 голос
/ 25 апреля 2009

Все зависит. Если вы решите использовать C ++ и разрабатываете приложение с графическим интерфейсом, вы можете выбрать один из нескольких каркасов GUI ( wxWidgets , GTK ), большинство из которых также являются переносимыми для платформы. Если вы просто специально ориентируетесь на Windows, наличие библиотек .NET в качестве зависимостей не является проблемой, и вы не против времени, затрачиваемого на изучение нового (но все еще знакомого) языка, тогда C # может быть лучше в вашем случай.

1 голос
/ 25 апреля 2009

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

Если вы собираетесь использовать Windows, вы можете также изучить C #. C # на самом деле довольно круто; в нем больше возможностей Lisp, чем в C ++. Изучение это прямо вперед. Ваш лучший учебный ресурс - Google, хотя, если вы изучаете книги, купите любую книгу на C #.

1 голос
/ 25 апреля 2009

Вы можете использовать C ++ для разработки .NET, но это будет несколько измененная версия C ++ (C ++ / CLI). Вы могли бы также просто изучить C #, если честно. (Лично я думаю, что C # - прекрасный язык, но мы идем.)

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

Все это все еще проще (IMO), чем изучение нативного API Win32.

Для обязательного чтения я бы порекомендовал "C # 3.0 в двух словах" и "CLR через C #". (Ссылки приходят, когда я не накрываю стол к обеду ...)

0 голосов
/ 04 октября 2012

нет. не учите .NET - учите C # .. как будто все идет на игровую площадку. как только вы освоите его, вы сможете завершить проекты в 1/10 раз ..

но с C # / .NET вы учитесь вредным привычкам. я сейчас вернулся в C ++. у меня было C ++ 12 лет, затем C # 5 лет, сейчас C ++ 6 месяцев.

хотя для выполнения проектов требуется примерно в 6 раз больше времени (6 месяцев против 1 месяца), я чувствую, что код C ++ имеет художественный вид ... в то время как код C # является общим. как BestBuy.

Я полностью против C ++ / CLI или как там его называют. если вам нужно перейти на уровень CLR .. запустить, не возвращайтесь к C ++ ... или вы в конечном итоге потратите все свое время на работу с какой-то произвольной "особенностью" дизайна C #, такой как синхронизация событий ..

моим следующим пунктом назначения может быть .NET Powershell для управления моими приложениями на сервере C ++.

Я перешел с Unix на Windows около 10 лет назад ... я пытался вернуться к FreeBSD или Linux ... Раньше я любил vi ... но VS на сегодняшний день является лучшей IDE на сегодняшний день. просто получите vs2010 pro + reshaper и прочитайте эти 2 книги. Первый - это ядро ​​C #, но это .NET 2.0, что хорошо .. потому что в любом случае проще всего начать писать код в стиле C ++. Следующая книга будет длиться годами.

http://www.amazon.com/2-0-Practical-Guide-Programmers-Guides/dp/0121674517

http://www.amazon.com/gp/reader/0735627045/ref=sib_dp_pt#reader-link

надеюсь, это поможет.

также. нет причин НЕ писать код портала c ++ в 2012 году. cmake + VS2010 + boost + crossroads-io

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