Перемещение программы на C # на другой язык - PullRequest
4 голосов
/ 26 июня 2009

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

Итак, мой вопрос,

(1) Есть ли простые способы перехода? (Такие языки, как .NET C #)
(2) Вы бы сняли его .NET?
(3) Если да, какой язык вы бы использовали?

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

Ответы [ 15 ]

23 голосов
/ 26 июня 2009

Это будет звучать грубо, и я рискую быть опровергнутым, но простите меня, я буду честен ... вы говорите: "[вы] отвечаете за разработку второй версии программы был создан в Microsoft .NET C # ... не занимался программированием ... [хотел бы] снять его с базы кода .NET ". Вы слышите себя? У вас явно нет никаких знаний или опыта для принятия такого решения, о чем свидетельствуют вопросы 1 и 3. Нет «легких языков» - что это вообще значит? Является ли мощный язык "легким"? Является ли слабый язык "легким"? Как может быть легкий переход к чему-то другому? Даже если у вас есть что-то для автоматического перевода кода, различия во времени выполнения, платформах и библиотеках делают перенос любого нетривиального приложения далеко не простым. Требуется работа и знания. Возможно, легко для кого-то с лотом времени, но не для большинства людей, у которых есть крайние сроки и реальность.

22 голосов
/ 26 июня 2009

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

Вы заявляете, что клиенту нужен .NET. Является ли ваша программа клиент / сервер или веб-приложением? Если это веб-интерфейс, то вы не правы, клиенту не нужен .NET, только браузер.

Если программа клиент / сервер и уже написана на C #, то любой язык, на который вы переходите, также, вероятно, потребует некоторой формы установки во время выполнения. .NET поставляется с каждой новой установкой и пакетом обновлений Windows начиная с XP.

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

Edit:

waiwai933 писал:

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

К сожалению, вам не повезло. Наиболее близким языком к C # является Java, но различия между ними настолько существенны, что вам нужно будет полностью переписать; порт просто не будет работать. Весьма маловероятно, что в вашем коде C # не используются делегаты и события - они вездесущи - и в Java нет аналогичной конструкции. Инфраструктура графического интерфейса WinForms (я предполагаю, что WinForms) настолько отличается от Swing, что none конструкций не будет легко портировать; и это завалено событиями и делегатами.

Вы ожидаете как минимум столько же усилий для переключения платформ, сколько было для первоначальных усилий, возможно, больше. Плюс переход на Java нарушает причину, по которой вы хотите переключиться с C #: Java требует установленной среды выполнения на клиенте.

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

9 голосов
/ 26 июня 2009

Я не могу понять, почему вы захотите выйти из C # и .NET по той единственной причине, что вы не хотите "причинять неудобства" своим клиентам, требуя от них установки .NET Framework.

Например, в наши дни .NET включен в Windows. В XP (текущие пакеты обновлений) вы получаете .NET 2.0. В Vista вы получаете .NET 3.0. Если предположить, что вы на самом деле не используете никаких возможностей .NET 3.5 и не нуждаетесь в каких-либо возможностях C # 3.0, то аргумент «неудобства для клиента» довольно спорный. Им не нужно ничего скачивать или устанавливать что-то еще ... его уже там.

В том случае, если вам действительно требуется .NET 3.5 и / или C # 3.0, создать готовый установщик для ваших клиентов, который позаботится обо всем этом, будет нелегко. Нет никаких реальных "неудобств" для клиентов, потому что они все равно должны установить вашу программу. Одна установка может позаботиться как о вашей программе, так и обо всех ее зависимостях в едином, бесшовном и прозрачном процессе установки. Если вы хотите, чтобы ваши клиенты были еще проще, у вас есть возможность развертывания в один клик с .NET, C # и Visual Studio. Это создаст простой сайт для ваших клиентов, который позволит им легко и быстро загружать и устанавливать ваше приложение, а также обновлять его при публикации будущих обновлений. Этот тип развертывания также обеспечивает загрузку и установку любых зависимостей в клиентскую систему, что необходимо выполнить только один раз (для всех последующих обновлений требуется только загрузить и установить последнюю версию измененных сборок.)

Как уже упоминалось, у C # и .NET есть что предложить. Microsoft создала обширную экосистему для разработки на платформе .NET с огромным количеством ресурсов, инструментов, документации и помощи сообщества. C # - очень чистый, современный, ориентированный на будущее язык, предлагающий множество инструментов, которые помогут вам и вашим разработчикам решать проблемы максимально быстро, просто и эффективно. Переход на C ++ означает, что вы не только потеряете эти полезные достижения, но и унаследуете кошмар ручного управления памятью. Переход на Java означает, что вы теряете эти полезные усовершенствования, но, как правило, тоже не получаете полезных. Вы можете перейти на другие языки .NET, но тогда не решите единственную проблему, о которой вы упомянули: зависимость ваших клиентов от .NET framework.

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

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

7 голосов
/ 26 июня 2009

По каким причинам вы думаете, что-то еще будет лучше, чем C #? Что не так с .NET? Если у вас есть веские причины, препятствующие миссии вашей компании, вам следует подумать о том, чтобы переписать ее.

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

Переписать его на C ++ просто будет кошмаром по управлению памятью / ресурсами, а переход на Java - побочный шаг, который не имеет особого смысла.

Если вы предоставите подробную информацию о том, что такое приложение, клиент, сервер и т. Д., Что оно делает и т. Д., Мы можем быть более конкретными.

Но помни, ТАНСТААФЛ.

Edit:

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

4 голосов
/ 26 июня 2009

(1) Существуют ли простые способы перехода? (Языки как .NET C #)

нет

NO

(2) Вы бы сняли его .NET?

Не без веской причины (не так ли это неудобно для ваших клиентов!)

(3) Если да, то есть ли простые языки?

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

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

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

2 голосов
/ 26 июня 2009

Единственный простой переход с C # - это перевод на другой язык .NET. Кроме того, вы все равно хотите переписать приложение, так как весь синтаксис и библиотеки изменятся.

Могу ли я спросить , почему вы хотите отойти от C #? В духе ссылки на Joel on Software, которую вы предоставили, я надеюсь, что вы увидите выгоду от использования кодовой базы, которая в данный момент работает (для чего она стоит). Есть ли ужасно веская причина для отказа от .NET для этого проекта?

2 голосов
/ 26 июня 2009

Не будет автоматического перевода с C # на что-то отключенное .NET.

Вы можете легко перевести его на Boo, VB.NET или другой язык .NET, но библиотеки (.NET Framework) будут недоступны, если вы, например, будете переводить в C ++ (не-CLI).

Это вызвало бы самую большую головную боль.

1 голос
/ 23 мая 2010

Ответ прост: перенесите ваше приложение в Интернет. Так что клиенту понадобится только браузер.

1 голос
/ 26 июня 2009

Как и ответ на многие вопросы, оно зависит . В своем ответе ниже я предположил, что вы говорите о приложении Windows Forms, поскольку, конечно, все это не будет проблемой, если вы говорите о веб-продукте.

Похоже, вы (почти) приняли решение "снять его" .NET. Я настоятельно рекомендую вам очень тщательно обдумать это решение. В частности, посмотрите на причины. Вы заявили, что причина в том, что вы не хотите, чтобы зависимость .NET во время выполнения вызывала проблемы. Опровержение этому, как представляют некоторые люди, состоит в том, что платформы Windows без времени выполнения стандарта становятся дефицитными. Тем не менее, есть что-то удовлетворяющее в программе «скромный и средний», которая не зависит от загрузки 50 МБ.

В конечном счете, от того, действительно ли то, что вы указали в качестве причины, зависит:

  1. Количество клиентов вашего продукта;
  2. их географическое положение;
  3. типичная платформа, на которой будет установлен ваш продукт (аппаратное и программное обеспечение);
  4. потенциальное влияние неустановки вашего продукта из-за несуществующего времени выполнения;
  5. влияние большой загрузки или громоздкой установки из-за зависимости времени выполнения.

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

Если окажется, после анализа вышеизложенного, что ваши рассуждения верны, то вам следует сравнить стоимость переписывания продукта с прогнозом улучшения удовлетворенности клиентов / продаж продукта в результате переписывания , Чтобы оправдать переписывание, последнее должно быть абсолютно феноменальным. Конечно, я говорю это, не зная всех видов вещей, в том числе:

  1. Размер кодовой базы;
  2. Сложность товара;
  3. Состояние кодовой базы (поддерживается?).

Что касается общего языка программирования / платформы, то вы в значительной степени не можете стать лучше, чем C # / .NET в наши дни, поэтому, если предположить, что после всей должной осмотрительности вы все равно захотите "переместиться", то вам придется выбирать что-то, что не требует времени выполнения - единственно возможный вариант - это C / C ++ или Delphi.

1 голос
/ 26 июня 2009

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

...