Из контролируемых экспериментов только три показывают эффект, достаточно большой, чтобы иметь какое-либо практическое значение. Исследование Prechelt, в котором сравниваются C, C ++, Java, Perl, Python, Rexx и Tcl; исследование Endrikat, сравнивающее Java и Dart; и эксперимент Кули с VHDL и Verilog. К сожалению, у всех них есть проблемы, из-за которых трудно сделать действительно сильный вывод.
В исследовании Prechelt популяции были разными для динамического и типизированного языков, и условия для заданий также были разными. Было проведено последующее исследование, которое проиллюстрировало проблему, предложив Лисперсу придумать свои собственные решения проблемы, которое включало сравнение таких людей, как Дарий Бэкон, со случайными старшекурсниками. Последующие действия в буквальном смысле включают сравнение кода Питера Норвига с кодом случайных студентов колледжа.
В исследовании Endrikat они специально выбрали задачу, в которой они думали, что статическая типизация будет иметь значение, и они выбирали предметы из группы, в которой все посещали занятия, используя язык со статической типизацией. Они не комментируют, имели ли студенты опыт работы с языком с динамической типизацией, но кажется безопасным предположить, что большинство или все имели меньший опыт работы с языком с динамической типизацией.
Эксперимент Кули был одним из немногих, который привлек людей из не студенческого населения, и это здорово. Но, как и во всех других экспериментах, задача была тривиальной игрушечной задачей. Хотя кажется ужасным, что ни один из участников VHDL (статический язык) не смог выполнить задачу вовремя, крайне необычно хотеть завершить проектирование оборудования за 1,5 часа где-нибудь за пределами школьного проекта. Вы можете утверждать, что большая задача может быть разбита на множество мелких задач, но вероятным контраргументом является то, что при использовании VHDL существуют фиксированные затраты, которые можно амортизировать для многих задач.
Что касается остальных экспериментов, основной вывод, который я извлек из них, заключается в том, что при определенных обстоятельствах, описанных в исследованиях, любой эффект, если он вообще существует, является небольшим.
Переходя к тематическим исследованиям, два тематических исследования по выявлению ошибок делают интересным чтение, но на самом деле они не приводят аргументы за или против типов. Один из них показывает, что при транскрипции программ на Python на Haskell будет найдено ненулевое количество ошибок неизвестной степени серьезности, которые могут не быть обнаружены при модульном тестировании, ориентированном на покрытие строк. Пара работ Эрланга показывает, что вы можете найти некоторые ошибки, которые было бы трудно найти при любом виде тестирования, некоторые из которых являются серьезными, используя статический анализ.
Как пользователь, я нахожу удобным, когда мой компилятор выдает мне ошибку перед запуском отдельных инструментов статического анализа, но это незначительно, возможно, даже меньше, чем величина эффекта контролируемых исследований, перечисленных выше.
Я обнаружил, что пример 0install (который сравнивал различные языки с Python и в конечном итоге остановился на Ocaml) был одной из самых интересных вещей, с которыми я столкнулся, но это субъективная вещь, которую все будут интерпретировать по-разному, что можно увидеть, посмотрев ,
Это соответствует моему впечатлению (в моем маленьком уголке мира ACL2, Isabelle / HOL и PVS являются наиболее часто используемыми проверяющими, и есть смысл, что люди предпочитают больше автоматизации при решении проблем в промышленности), но это тоже субъективно.
И затем есть исследования, которые добывают данные из существующих проектов. К сожалению, я не смог найти никого, кто бы что-нибудь сделал для определения причинно-следственной связи (например, найти подходящую инструментальную переменную), поэтому они просто измеряли корреляции. Некоторые из корреляций являются неожиданными, но недостаточно информации, чтобы определить, почему.
Единственное исследование интеллектуального анализа данных, которое представляет данные, которые потенциально интересны без дальнейшего изучения, - это обзор ошибок Python в Smallshire, но не хватает информации о методологии, чтобы понять, что на самом деле означает его исследование, и неясно, почему он намекнул на просмотр данные для других языков без представления данных3.
Некоторые заметные упущения в исследованиях - это всесторонние исследования с использованием опытных программистов, не говоря уже о исследованиях, в которых есть большие группы «хороших» или «плохих» программистов, которые смотрят на что-либо, приближающееся к значительному проекту (в местах, где я работал, трехмесячный проект считаться небольшим, но это на несколько порядков больше, чем любой проект, используемый в контролируемом исследовании), используя «современные» статически типизированные языки, используя постепенную / необязательную типизацию, используя современные основные IDE (такие как VS и Eclipse), используя современные радикальные IDE (например, LightTable), используя старые школьные редакторы (такие как Emacs и vim), выполняя обслуживание нетривиальной кодовой базы, выполняя техническое обслуживание с чем-то похожим на реалистичную среду, выполняя обслуживание кодовой базы, с которой вы уже знакомы, и т. д.
Если вы посмотрите на интернет-комментарии к этим исследованиям, большинство из них будут разосланы, чтобы оправдать ту или иную точку зрения. Изучение Prechelt динамического и статического, а также последующие действия на Лиспе являются постоянными фаворитами сторонников динамического языка, и исследование интеллектуального анализа github недавно стало модным среди функциональных программистов.