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

кто-нибудь видел недавнее (и довольно сбалансированное) исследование относительных затрат на разработку программного обеспечения с использованием разных языков ? Я бы особенно хотел увидеть относительные затраты Java Vs. C# Vs. Дельфи.

8 ответов


количественные сравнения такого рода было бы очень трудно определить из-за количества усложняющих переменных: опыт разработчиков с языком, пригодность языка к целевому домену, общее качество разработчиков (утверждалось, что неосновные языки привлекают разработчиков более высокого качества), компромиссы с полученным продуктом (является ли приложение 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, и " эмпирическое сравнение семи языков программирования "(по Прехельту, из компьютер IEEE, октябрь 2000 года).

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


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

Общее:

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

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

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

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

все они:

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

отличия:

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

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

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

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

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

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

(*) существует очень надежный факт, что есть больше других языков-разработчиков, которые могут кодировать на C#, чем другие языки-разработчики, которые могут кодировать на Java, что означает, что его легче найти программистов на C#. Возможно это объясняет, почему на многих веб-сайтах( например, на этом) и форумах, которые разрешают многоязычные вопросы, рефакторинги и т. д., Обычно больше вопросов и ответов на C# ( 84k против 50k). Кроме того, так как Java работа лучше всего оплачивается во многих частях мира здравый смысл указывает, что разработчики Java остаются дольше в своей работе, чем C#, что затрудняет поиск разработчиков Java, доступных, чем C#. И, конечно, есть некоторые другие факторы, которые могут быть обсуждалось, но я уверен, что обычно легче найти программиста на C#, чем на Java.


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

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

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

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

Это не формальное исследование, но об этом стоит подумать.


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

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

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

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

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

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

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

и даже тогда результаты исследования не будут адрес:

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

и результаты будут от 3 до 5 лет.


Peopleware (Том Демарко и Тимоти Листер) содержит раздел в восьмой главе о "кодировании военных игр". С 1984 по 1986 год в проекте приняли участие более 600 разработчиков.

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


ВВС США заинтересовались и обнаружили, что Delphi значительно быстрее кодируется. Конкурс C++ каждый год привлекает команды быстрого кодирования к соревнованию. Кодеры Delphi затеняют это соревнование и почти всегда приходят значительно быстрее с требуемым кодом.

после своей карьеры в качестве главы развития ВВС мой бывший босс, Билл Roetzheim написал книгу по оценке затрат на разработку программного обеспечения. Его выбор, голова и плечи превыше всего остального был Дельфи. Это была версия 3/4. Рациональный использовал свой оценочный шаблон. Я все еще использую его, и ничего лучшего не было за все эти годы.

ясность дизайна и сила выражения в коде не сильно меняются по сравнению с версиями. Большую часть времени вы смотрите на визуальные изменения и инкрементное увеличение. По-прежнему применяются основные передовые методы 20-летней давности. Вот что делает архитектуру возможной. Мы знаем, как выглядят лучшие практики, потому что определенный масштаб код должен соответствовать определенному набору стандартных требований, которые не сильно различаются. Вы почти всегда можете сделать его более приятным в использовании или иметь меньше глупых неудобных интерфейсов, но данные, безопасность/фильтрация и системы рабочих процессов, которые заставляют бизнес-системы работать, по-прежнему используют те же шаблоны дизайна из книги шаблонов дизайна GoF. И если маленькие устройства научили нас чему-то, так это тому, что интенсивная ясность и простота заслуживают похвалы. Имеет значение целая куча, насколько проста ваша кодовая база использовать для этой цели. Все основные среды могут довольно хорошо создавать Домены. Скорость работы системы и простота разработки делают Delphi и Node.js мои два предпочтения back end. Но возможности wise C# и Java оба в порядке. Если бы я был обеспокоен безопасностью среды от разработчиков, я бы пошел на C# в некоторых ситуациях, потому что кодерам сложнее нарушать правила. Но когда мне не нужны эти правила, т. е. большую часть времени, я предпочитаю более открытую среду, которая масштабируется. Когда Я не очень забочусь о безопасности, я мог бы предпочесть Node.js, потому что это делается в спешке. Большую часть времени я нахожу слишком легко делать ошибки в узле, и мне нужно полное покрытие тестового кода в конечном итоге. Delphi - мой первый выбор в балансе.


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

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

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

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

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


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

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