суббота, 26 сентября 2009 г.

[comp.prog.flame] Споры о языках программирования – не могу смолчать

За прошедшую неделю ознакомился с несколькими (почти эпическими) говносрачамисвященными войнами вокруг языков программирования. Если кому-то интересно, то вот ссылки:
Google разрабатывает язык Noop для замены Java
DragonFly BSD 2.4
Хамелеоны быстрые и очень быстрые
Noop - новый язык для JVM
шаблоны С++ и дженерики С#

Ругают, как водится, C/C++ (в основном C++). Доходит до такого:

На С++ без ошибок хрен напишешь.

Но и Java так же перепадает:

Явы не хватает ни для какой задачи, вообще. Если, конечно, имеешь представление о тех же ОКамле с Хаскелем.

Но апофеозом всего этого действа оказалась ссылка на запись в ЖЖ Сергея Зефирова (aka thesz) от 2007-го года:

Языки программирования можно условно разделить на "делаем нужное" и "делаем интересное."
Нужное, обычно, решает какую-то частную проблему, закрывая пластырем ее большую часть и обкладывая заплатками окрестность.
Интересное, обычно, вскрывает целый пласт проблем и дает решение к ним всем, обычно же, без заплаток.
Эрланг, C - это "нужные" языки.
Хаскель, Схема, Камл, Пролог - "интересные."
Нужные языки, безусловно, нужны, но неинтересны. Решив задачу на нужном языке, не проходишь мимо чего-либо интересного.
Интересные языки, безусловно, интересны, но про них существует неправильное мнение, что они не нужны. Типичный вопрос: "Где (как) мне использовать Хаскель?"
А дальше рассуждать мне лень. ;)

Мое отношение ко всему этому: “Я х*ею, дорогая редакция!”

Во-первых, мне интересно, откуда в программистах (не знаю во всех ли или только у гиперактивной их части) такая страсть в обсуждении языков программирования. Даже не столько обсуждения, сколько охаивания. В общем-то, я и сам был этим грешен, хотя и сейчас не могу понять почему. Может быть, из-за того, что язык программирования – это привычный и знакомый всем инструмент? Поэтому каждый мнит себя экспертом и желает отстоять свою точку зрения. А может это вообще свойство человека – хвалить свое, ругать чужое? Вроде бы между владельцами Nikon-ов и Canon-ов (равно как и Mersedes vs BMW) священные войны так же никогда не стихают…

Во-вторых, не понятно, почему столько дерьма выливается на на C++ (а теперь уже и на Java)? Ну да, далеко не образец совершенного дизайна. Но ведь он не один-единственный язык на свете. Были, есть и будут более грамотно спроектированные и красивые языки. Которые почему-то ни фига не используются. Может быть большинство критиков C++ (Java) забывают, что мир вообще не совершенен? И уродливый C++ оказывается к этому миру приспособлен лучше, чем десятки его более “правильных” конкурентов. Не зря все-таки Страуструп сказал, что есть всего два типа языков – те, которые ругают и те, которыми не пользуются. Видимо, ругают именно то, что в жизни оказывается приспособленным к насущным задачам и имеющимся программистам (не нужно забывать, что подавляющее большинство программистов далеко не корифеи в своей области).

В-третьих, не понятно, почему на языках программирования вообще такой акцент делается? Да, одни языки для конкретных задач подходят лучше, чем другие. И постепенное развитие техники все больше и больше позволяет уйти от низкоуровневой оптимизации в сторону высокоуровневых и безопасных языков. Но ведь этот процесс не нов. Еще двадцать лет назад было понятно, что тот же C++ в классе бухгалтерских программ просто ничто по сравнению с Clipper и FoxBase. Так что сейчас-то чего трындеть зазря – выбираете себе язык по вкусу и по задаче – и вперед, на мины! А уж если от C++ (Java, COBOL, …) нет возможности отказаться из-за большой кодовой базы, так опять же, в чем проблема? Если новые языки такие крутые, так чего бы весь этот старый хлам не выбросить? Ан нет, так просто не выбросишь. Потому, что круты не настолько, чтобы раз-раз и переделать все. А раз не переделаешь, зачем катить бочки на то, что было сделано давно и что сейчас дает вам средства на жизнь?

В-четвертых, какое-то странное деление языков на “интересные” и “нужные”. Язык – это инструмент, как молоток. Уместно ли говорить про молотки, что бывают “интересные” и “нужные”?

Так и представляю себе – нужно повесить шкафчик – берем “нужный” молоток. А если блоху подковать, то требуется “интересный”. Наверное, действительно, подковывать блох интереснее.

И, опять же, причем здесь языки? В принципе, можно понять, что тот же thesz оказался в ситуации, где он в одиночку лабает для себя модели процессоров, где у него собственные планы и ограничения. Такой маленький уютный мирок, полностью соответствующий его потребностям. Но есть прорва задач, где т.н. “интересные” языки ни ухом, ни рылом. Поставят вам задачу – сделать систему приема электронных платежей с нагрузкой в 5000 транзакций в секунду и что? Интересные языки здесь будут использованы или нужные C++ с Java?

Наверное сторонникам “интересных” языков такие задачи интересными не кажутся. Ну ёптыть, это же не математические модели на Haskell-е/OCaml-е обсчитывать. Только вот понимают ли они, что в такой задаче язык – это так, один из факторов, далеко не самый важный.

Отдельно я не понимаю утверждения, что нужное решает какую-то частную проблему, обкладывая пластырем общую часть. Например, написанные на C/C++ Web-браузеры (IE, Safari, FireFox, Opera, Chrome) – это все решения частных проблем? А что тогда общая часть?

В-пятых, я не понимаю, почему сейчас так модно стало ругать ООП. Это типа прозрение наступило или просто подрасло новое поколение, для которых ООП – это такая же норма, как структурное программирование в мое время? Или же это вера в серебрянность пули под названием “Функционально программирование”? В прочем, это уже другая история.

Прошу прощение за объем и эмоциональность текста. Наболело.

Таки хотелось бы посмотреть на какой-нибудь большой, полезный и реально эксплуатирующийся проект, который был написан без ошибок… А то сдается мне, что фразу “На C++ без ошибок хрен напишешь” можно адресовать любому языку программирования. А то ведь даже разработчики компилятора Haskell-я ошибки допускают. Куда уж все нам, простым смертным (кстати, не приведи Господь сопровождать тот код, на котором была найдена эта ошибка – пусть это достанется слишком умным товарищам, вроде thesz).

PS. А Java, все-таки must die! ;)

Отправить комментарий