Доброе утро, господа!
Наваял вчера небольшое эссе по поводу языков. Интересно услышать ваше мнение.
Последнее время программистский мир довольно сильно трясут т.н. holy wars — священные войны
на тему "Какой язык лучше". Священные — потому что считается, что вроде как оппоненты не имеют
объективных аргументов, а используют лишь собственные убеждения.
Для меня эти войны всё же способны разложиться на объективные составляющие, после чего
спор быстро приходит к развязке.
Фактически, главная причина споров — отсутствие или сознательное зауживание ОБЛАСТИ ПРИМЕНЕНИЯ языков.
Точнее сказать, то, для чего сам программист применяет язык. Скажем, будучи студентом,
для меня не составляло труда написать лабораторку на Прологе или, прости господи, Рефале.
Но перейдя на коммерческие рельсы, я мгновенно обнаружил несостоятельность некоторых языков
для решения "общечеловеческих" задач (мой вариант перевода mainstream). Отсюда простой вопрос
спорящим: какой круг задач и в какой области они решают? Занимаются ли они поддержкой программ?
Сколько человек в их команде? Насколько интенсивно они развивают продукт? Подобные вопросы довольно
быстро отсеивают "теоретиков" и наколенников-одиночек.
Второе — это уведение спора в чисто академические или сильно специфические дебри. Например,
один решает математические задачи и ему Matlab хватает за глаза. Другой, постоянно обрабатывая строки,
пытается показать ущербность всего, что не называется Perl. Глупо опять же. Основная область, где
возникает проблема выбора языка — только mainstream, поэтому и сравнение должно идти в его пределах.
Третье, о чём "забывают" всевозможные маргиналы от программазма — это уровень программирующих.
Он варьируется от ПТУ-шников-самоучек до кибер-теоретиков и математиков-маньяков. Тем не менее,
значительная часть всех их занята ОБЩИМИ задачами. Соответственно, и база для всех них должна быть
(по возможности) общая и достаточно простая — чтобы написанное одним, было легко понимаемо остальными.
Отсюда и получается, что "примитивные" языки вроде Си или Паскаля являются как раз тем "ядром",
"усреднённым инструментом", которое способно объединить (и объединяло!) тысячи "разнокалиберных" разработчиков.
Я не спорю, у этих языков предостаточно проблем,
но решить их можно гораздо проще, чем выдумывать новые парадигмы/виртуальные машины/языки.
Самое главное, что они дают — это простота и понятность. Это важно как для других членов твоей команды,
так и для тех, кто будет программу развивать, скажем, года через два. Безусловно, эти же задачи можно
решить и на функциональных языках, и на объектных (и МОЖЕТ даже в 10 раз быстрее), но мы были и остаёмся
людьми и большинство из нас мыслит ИМПЕРАТИВНО: подготовил, обработал, выдал результат. Неважно, каким
дзэном программинга владеешь ты — важно, каким владеет БОЛЬШИНСТВО. Наверное, именно "индивидуализм"
и чужеродность природному человеческому мышлению оттолкнули от масс таких "зубров" как Смоллток,
Лисп, Хаскель, Пролог, Перл... Все они хороши ПО-СВОЕМУ, но для массовых задач, решаемых массовыми
программистами, каждое "хорошо" натыкалось на широкий класс задач, где оборачивалось неприемлемым "плохо".
Подобная "плоская простота" влекёт ещё одну полезную вещь — более простое реиспользование кода.
Нередко, вместо использования устаревших библиотек, берут лишь их часть и внедряют в новые библиотеки.
Будь это ветвистая ОО библиотека или функциональный кошмар, фокус так просто не прошёл бы.
Кроме того, "плоскость" позволяет "Сям" более просто и широко интегрироваться с другими системами.
Я ещё хочу заметить — не так сложны всякие парадигмы, насколько тщеславны их пользователи. Нет особого труда
написать замысловатый код, решающий всё одной строкой. А вот взять эту программу через годик и быстро изменить
в ней треть кода, когда половина уже была кем-то переписана — вот настоящая работа! И это должен быть способен сделать КАЖДЫЙ,
кто касается программы. Получается, чем проще язык, тем проще жизнь программиста! Что, собственно, и есть
наша цель.