Исследования относительных затрат для разработки на различных языках

Кто-либо видел недавнее (и справедливо балансировался), исследование в относительные затраты для использования разработки программного обеспечения, отличающегося языки? Я был бы конкретный любить видеть относительные затраты на Java По сравнению с C# По сравнению с Delphi.

58
задан skaffman 19 February 2012 в 10:10
поделиться

6 ответов

Количественные сравнения такого рода было бы очень сложно определить из-за большого количества усложняющих переменных: опыт разработчиков с языком, пригодность языка для целевой области, общее состояние разработчиков качество (утверждается, что неосновные языки привлекают разработчиков более высокого уровня), компромиссы с конечным продуктом (является ли приложение Ruby или Python таким же быстрым, как хорошо написанное приложение Delphi или C ++?) и т. д.

В ] Код завершен, 2-е изд. Стив МакКоннелл перечисляет несколько языков с точки зрения их выразительной силы (сколько строк эквивалентного кода C можно выразить в одном выражении для каждого языка). Было высказано предположение, что продуктивность программистов в строках кода относительно постоянна независимо от языка; если это правда, то выразительная сила каждого языка должна дать приблизительную оценку относительной стоимости разработки каждого языка. Из таблицы 4.1, стр. 62:

LANGUAGE       LEVEL RELATIVE TO C
C              1
C++            2.5
Fortran 95     2
Java           2.5
Perl           6
Python         6
Smalltalk      6
Visual Basic   4.5

Он перечисляет несколько источников для этой таблицы: Оценка стоимости программного обеспечения , Оценка стоимости программного обеспечения с помощью Cocomo II и «Эмпирическое сравнение семи языков программирования» "(Prechelt, из IEEE Computer , октябрь 2000 г.).

Цифры, которые приводит МакКоннелл, датируются несколькими годами ранее, но насколько я понимаю, модель Cocomo II смехотворно детализирована, поэтому текущий материал по Cocomo II может содержать текущие цифры по Delphi и C #.

13
ответ дан 24 November 2019 в 18:56
поделиться

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

Общее:

Все они являются лучшими в своих областях:

  • Java - лучший вариант разработки на Java.
  • C# - лучший вариант разработки .NET.
  • Delphi - лучший вариант разработки для Native.

Все они имеют:

  • Мировых сторонних поставщиков, предоставляющих качественные компоненты и библиотеки.
  • Всемирно известные приложения, созданные с их помощью (например, в Delphi более известны: Yahoo Go for TV!, Macromedia Captivate, TotalCommander, MediaMonkey, FinalBuilder, InstallAware, WinLicense, MySQL Administrator и т.д.).

Все они:

  • Высоконадежные технологии с возможностями RAD.
  • Поддерживаются лучшими инструментами помощи в разработке (UML и т.д.).
  • Выпускают крупные обновления своих технологий (Java 7, .NET 4.0 и многоплатформенный Delphi).

Отличия:

3 вещи, в которых C# лучше:

  • Количество доступных разработчиков (по сравнению с Java), которые могут писать на нем (*).
  • Отстает от Microsoft.
  • Более дешевая стоимость разработки с точки зрения заработной платы (обычно).

3 вещи, в которых Java лучше:

  • Количество доступных разработчиков (по сравнению с Delphi), которые могут писать на ней (*).
  • Переносимость.
  • Отстает от Sun.

3 вещи, в которых Delphi лучше:

  • Скорость (лучшая производительность для критических по времени систем).
  • Малый след (компилятор Delphi генерирует действительно маленькие двоичные файлы).
  • Не имеет явных зависимостей (более легкое распространение).

(*) Есть очень достоверный факт, что разработчиков на других языках, которые могут писать на C#, больше, чем разработчиков на других языках, которые могут писать на Java, что означает, что легче найти программистов на C#. Возможно, это объясняет, почему на многих сайтах (таких как этот) и форумах, где разрешены мультиязычные вопросы, рефакторинг и т.д., ОБЯЗАТЕЛЬНО больше вопросов и ответов на C# (84k против 50k). Также, поскольку Java работа лучше всего оплачивается во многих частях мира, здравый смысл указывает на то, что Java разработчики остаются на своих рабочих местах дольше, чем C#, что делает более трудным поиск Java разработчиков, чем C#. Конечно, есть и другие факторы, которые можно обсуждать, но я уверен, что обычно легче найти программиста C#, чем Java.

37
ответ дан 24 November 2019 в 18:56
поделиться

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

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

Причины открыты для интерпретации, но я думаю, что одним из основных факторов, делающих Delphi намного более продуктивным, чем C # (или Java), является внешний вид языка.

Общеизвестно, что на поддержку и отладку современных программ уходит гораздо больше работы, времени и усилий, чем на их первоначальное написание, но этот принцип не всегда доводится до логического завершения. Если больше всего работы требует поддержание программы, то выбор языка на основе того, что на нем легко или быстро писать код, является преждевременной оптимизацией. Вы получите более высокую отдачу от своих инвестиций, если будете использовать язык, который легко читать и поддерживать. Что касается читабельности кода, Pascal (Delphi) безоговорочно превосходит семейство C.

Это не формальное исследование, но над ним стоит задуматься.

33
ответ дан 24 November 2019 в 18:56
поделиться

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

Чтобы сделать это правильно:

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

  • Необходимо сформировать несколько проектных команд, каждая из которых состоит из разработчиков со значительным опытом разработки крупномасштабных приложений на одном из языков.

  • Затем вам нужно будет реализовать каждый проект N раз для каждого языка... чтобы получить статистически значимый результат.

Таким образом, вам потребуются усилия разработчиков, эквивалентные размер проекта * nos-языков * nos-проектов * nos-повторений. Если предположить, что нетривиальный проект занимает 1 человеко-год, что существует 5 проектов и они разрабатываются 5 раз на каждом языке (чтобы получить достаточно большой размер выборки для статистической значимости), то это 25 лет работы опытных разработчиков... скажем, от 2 до 5 млн. долл. НА КАЖДЫЙ ИССЛЕДУЕМЫЙ ЯЗЫК.

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

И даже в этом случае результаты исследования не будут касаться:

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

И результаты будут устаревшими через 3-5 лет.

6
ответ дан 24 November 2019 в 18:56
поделиться

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

--- разглагольствования о "сравнительных исследованиях" компетентности программистов завершены ---

Как уже было сказано, очень трудно, если вообще возможно, дать сравнительную оценку стоимости реализации чего-либо на разных языках, по крайней мере, в качестве общего примера, который можно использовать для всех проектов. Некоторые вещи лучше подходят для .NET, другие - для Java, третьи лучше делать в макросах Excel.

И стоимость разработки обычно составляет лишь малую часть от общей стоимости владения системой, особенно если это что-то вроде многоуровневого приложения, работающего на серверах приложений с базами данных и т. д. Если у заказчика уже есть серверная ферма под управлением IIS с базами данных MS SQL Server в качестве бэкенда, продавать ему приложение Java EE с бэкендом Oracle - значит оказать ему услугу, даже если в противном случае это был бы самый логичный выбор для приложения. Стоимость разработки может быть ниже, но эксплуатационные расходы для клиента будут намного выше.

С другой стороны, веб-сайт для вашего продуктового магазина на углу, который хочет начать принимать заказы через сеть для доставки по району, не должен быть реализован ни на .NET, ни на Java EE. Стоимость решения (особенно хостинга) намного перевесит преимущества. Простая вещь, основанная, например, на php или rails, будет служить этому клиенту гораздо лучше. Стоимость хостинга снижается, не нужно платить дорогостоящие лицензионные отчисления за серверы баз данных и приложений, он может действительно заработать немного денег, используя получившийся сайт.

2
ответ дан 24 November 2019 в 18:56
поделиться

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

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

0
ответ дан 24 November 2019 в 18:56
поделиться