Программирование, как и любой вид людской деятельности, заплыло жиром правил, мифов и легенд. Что-то не требует доказательств и принимается сходу («Хороший программист — в равной степени трудяга, художник и инженер»), второе вдалбливают в головы, но его неочевидность всё-таки мешает поверить до конца («Хороший программер обязан быть и хорошим математиком»). Но оптимальнее — чистые заблуждения, в каковые однако верят большинство написателей кода. О самом ярком из них сейчас и отправится обращение. Выбор языка программирования воздействует на уровень качества программы. Так как вы согласны? ??
Заберите дюжина программистов — и восемь из них ответят на данный вопрос утвердительно: все верят, что уровень качества программы напрямую связано с языком, на котором она написана. Классики наподобие Кнута об этом, действительно, практически не писали, но обширный коллективный опыт как словно бы бы разрешает такое утверждать.
Си? Нехорош собственной неприкрытой, некомпенсированной низкоуровневостью, почему легко проморгать страшные места. Ассемблер? Не годится ни на что не считая системного программинга, а ещё очень сложен для чтения, отчего писать на нём громадные долговечные проекты как словно бы бы нереально. BASIC развращает сознание юных программистов наличием абсолютного перехода, что опять-таки отражается на качестве (а чуть раньше то же самое говорили про Фортран). Javascript узок, Pascal стар и громоздок, Java медлительна и т.д. и т.п.
Но сформулированы и, так сообщить, неспециализированные закономерности — рисующие «качественную» кривую для целых классов языков. К примеру, имеется «правило» довольно сильной и не сильный типизации: считается, что языки программирования (ЯП), не требующие строго соответствия типов передаваемых из функций в функцию данных, более склонны к непредсказуемому поведению, другими словами, дают код более низкого качества. Так же и динамическая типизация, якобы, проигрывает статической: в случае если ЯП разрешает определять тип переменной в момент присвоения значения, а не на протяжении её объявления, программа так же может прерваться неожиданно либо выдать непредсказуемый итог. А ещё скриптовые языки хуже процедурных, а ещё различные ЯП по-различному руководят памятью и оттого также разнятся качеством кода, и без того потом и без того потом.
Переубедить человека, принявшего постулат предопределённости качества, тяжело, в случае если вероятно по большому счету: так как идея думается таковой логичной, таковой естественной! Но если не для вторых, то для самих себя именно это постарались сделать пара исследователей из америки (имеется среди них и русское имя). Они не стали апеллировать к логике, разумеется, зная по собственному опыту, что логика тут ненужна: сами айтишники. Вместо этого они обратились к статистике. Пошли на GitHub (наибольшее программистское сообщество в Сети, собственного рода площадка для работы и хранения с исходниками для более чем трёх миллионов человек) и отобрали семь с лишним сотен самых активных проектов (включая и такие большие как Linux, Bitcoin, и т.п.). В общем итоге в поле их зрения попали 80 миллионов строчков, написанных на 17 языках программирования тридцатью тысячами авторов. Уровень качества каждой программы оценивалось по количеству баг-фиксов для неё.
Результаты изучения: кое-какие языки более подвержены определённым неточностям (чёрные сегменты), но в целом отличие через чур мелка, дабы принимать её в расчёт.
И, опуская оговорки довольно математической ценности результатов (простые для научных трудов), выводы оказались неожиданными. В первую очередь, подозрение, что выбор языка отражается на качестве программы, вправду подтвердилось. Программы на ЯП с сильной типизацией были умеренно лучше программ на ЯП с типизацией не сильный. Равняется и статическая типизация продемонстрировала себя умеренно лучше динамической. Позже, функциональные языки статистически дают чуть более качественный код, нежели процедурные. Но! Тут же вскрылось, что распознанная зависимость качества кода от ЯП теряется на фоне вторых факторов — намного, намного сильней воздействующих на итог. В противном случае говоря, принимать её к сведенью ненужно!
Из произведенной работы направляться, что намного сильней на уровень качества программы воздействуют её размер, количество разработчиков, размер «заплаток» — в противном случае говоря, факторы, не имеющие прямого отношения к языку. Помимо этого, кроме того распознанная не сильный зависимость качества от ЯП, возможно, возможно растолкована личными изюминками задействованных в проекте людей: попросту говоря, в случае если конкретный программист предрасположен к языкам программирования определённого типа, на вторых он пишет хуже.
Выводы наделали большое количество шуму на английских технофорумах, приведя к массе скептических откликов. Так, совсем не факт, что много распознанных неточностей эквивалентно низкому качеству кода. Либо — что по сотне свободных программ возможно делать выводы об неспециализированном качестве приложений, написанных на конкретном языке. И однако, учитывая масштабы изучения, его стоит принять как довод в затянувшемся споре относительно связи качества кода и ЯП — и оттолкнуться, дабы двигаться дальше.
Индекс популярности языков программирования TIOBE (www.tiobe.com).
Одно из серьёзных следствий: выбирать язык для будущих задач сейчас возможно и стоит храбрее! Зная, что статистически уровень качества кода зависит более от способностей человека и индивидуальных предпочтений, возможно и необходимо выбирать новый язык ориентируясь больше на персональный вкус, нежели на социальные стереотипы.
Фортран, Кобол? Что ж, и на них ещё пишут! Но, к примеру, на данный момент индустрия программирования переживает волну спроса на статистические ЯП, организованную необходимостью обработки громадных количеств данных. Хороший образчик для того чтобы языка — вольный GNU R, и именно он — вопреки обвинениям в неуклюжести, ограниченности, неоригинальности — набирает пользовательскую массу стремительнее остальных. Равняется и Javascript — до сих пор остающийся номером первым на GitHub — не думает сдавать позиции, за чем также просматривается объективное требования времени.
Второй нужный вывод: не все языки однообразны в смысле лёгкости изучения. То, что ЯП были взаимозаменяемы в смысле качества кода, не отменило правила, что какие-то освоить легче, чем другие. Так что — особенно для новичков — имеется суть затевать с языков несложных. Фаворитом тут Python, но иначе, грех не учесть и фактор новизны: HTML5 только что официально рекомендован к применению консорциумом W3C, рождённый в Гугл Dart вошёл в двадцатку самых востребованных ЯП, организовал аудиторию гугловский же Go, просматривается возможность у Apple Swift.
Другими словами, смотрите шире, выбирайте смелей. Уровень качества не пострадает!