Исследования относительных затрат на разработку на разных языках
кто-нибудь видел недавнее (и довольно сбалансированное) исследование относительных затрат на разработку программного обеспечения с использованием разных языков ? Я бы особенно хотел видеть относительные затраты Ява против. В C# Против. Делфи.
8 ответов:
количественные сравнения такого рода было бы очень трудно определить из-за ряда усложняющих переменных: опыт разработчиков с языком, пригодность языка к целевой области, общее качество разработчиков (утверждалось, что неосновные языки привлекают разработчиков более высокого качества), компромиссы с полученным продуктом (является ли приложение Ruby или Python таким же быстрым, как хорошо написанное приложение Delphi или C++?), прием.
In код завершен, 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# по той или иной причине. Все они заканчиваются примерно одинаково.
причина, по которой они открыты для интерпретации, но я думаю, что одним из основных факторов, который делает 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++ каждый год привлекает команды быстрого кодирования на конкурс. Дельфи-кодеры затеняют эту конкуренцию и почти всегда приходят значительно быстрее с требуемым кодом.
после своей карьеры в качестве главы развития ВВС мой бывший босс, Билл Roetzheim написал книгу по оценке затрат на разработку программного обеспечения. Его выбор, голова и плечи выше всех остальных был Дельфи. Это была версия 3/4. Рациональный использовал свой оценочный паттерн. Я все еще использую его, и ничего лучше не было за все годы, что я это делал.
ясность конструкции и сила выражения в коде не изменяют много над версиями. Большую часть времени вы смотрите на визуальные изменения и постепенное увеличение. Основные передовые практики 20-летней давности все еще применяются. Именно это делает архитектуру возможной. Мы знаем, как выглядят лучшие практики, потому что определенный масштаб код должен соответствовать определенному набору стандартных требований, которые не сильно различаются. Вы почти всегда можете сделать его более приятным в использовании или иметь меньше глупых неудобных интерфейсов, но системы данных, безопасности/фильтрации и рабочих процессов, которые заставляют работать бизнес-системы, по-прежнему используют одни и те же шаблоны проектирования из книги шаблонов проектирования GoF. И если маленькие устройства научили нас чему-то, так это тому, что интенсивная ясность и простота заслуживают похвалы. Это имеет большое значение, насколько легко Ваша база кода использовать по назначению. Все основные среды могут сделать дизайн домена довольно хорошо. Скорость работы системы и простота разработки делают Delphi и Node.js мои два задних предпочтения. Но возможности мудрый C# и Java оба в порядке. Если бы я был обеспокоен безопасностью среды против разработчиков, я бы пошел на C# в некоторых ситуациях, потому что кодерам сложнее нарушать правила. Но когда мне не нужны эти правила, т. е. большую часть времени, я предпочитаю более открытую среду, которая масштабируется. Когда Я не очень забочусь о безопасности, я мог бы предпочесть узел.js потому что это делается в спешке. Большую часть времени я нахожу, что слишком легко ошибаться в узле, и мне нужно полное покрытие тестового кода в конечном итоге. Дельфи - мой первый выбор на балансе.
"качество разработчиков" трудно оценить. Java и (в меньшей степени) C# широко используются в школах и университетах для обучения учащихся основам программирования. Многие из них попадают на форумы поддержки с вопросами о домашних заданиях и каким-то образом считаются программистами (и бедными), использующими этот язык. На самом деле подавляющее большинство из них никогда не напишут ни одной строки кода после завершения этого обязательного вводного курса, а большинство остальных, вероятно, не напишут на этом языке.
--- разглагольствование о "сравнительных исследованиях" о компетентности программиста завершено - - -
Как уже было сказано, очень сложно, если не невозможно, дать оценку сравнения затрат для реализации чего-то на разных языках, по крайней мере, в общем случае, который будет использоваться для всех проектов. Некоторые вещи лучше подходят для .NET, другие для Java, другие снова могут быть лучше всего выполнены в макросах Excel.
и стоимость разработки, как правило, только часть ТСО системы, особенно если это что-то вроде многоуровневых приложений, работающих на серверах приложений с базами данных и т. д. Если у клиента уже есть серверная ферма под управлением IIS с базами данных MS SQL Server в качестве бэкэнда, продажа им приложения Java EE с использованием бэкэнда Oracle оказывает им плохую услугу, даже если это было бы наиболее логичным выбором для приложения в противном случае. Стоимость разработки может быть ниже, но эксплуатационные расходы для клиента будут намного выше.
на другом конце шкалы веб-сайт для вашего углового продуктового магазина, который хочет начать принимать заказы через сеть для доставки по соседству, не должен быть реализован ни в .NET, ни в Java EE. Стоимость решения (особенно хостинга) будет намного перевешивать преимущества. Простая вещь, основанная, например, на php или rails, будет служить этому клиенту намного лучше. Стоимость хостинга снижена, никаких дорогостоящих лицензионных платежей за базы данных и серверы приложений не требуется, он может на самом деле заработать немного денег, используя полученный веб-сайт.
Как говорили другие, нет никаких исследований... потому что никто не заинтересован. Нет никакой измеримой разницы. Возьмите почти любую книгу по управлению проектами, и вы не увидите упоминания языков, за исключением примеров, не полагаясь на конкретные языковые функции. В большинстве случаев любые проблемы, требующие денег в течение жизненного цикла проекта, являются не проблемами кодирования, а архитектурными и организационными.
чтобы положить вещи в перспективе, если вы столкнулись с серьезным недостатком языка и реализуйте некоторые обходные пути-вы потеряете несколько часов. Поддержание человек может потратить еще несколько часов, понимая, что и почему вы сделали там рабочий день или два будут потеряны. Ну а если вы придете на работу не в том настроении, то проиграете в тот же день. Если у вас есть проблемы с пониманием требований или общением с коллегами и руководством, вы легко теряете недели и месяцы.