November 5th, 2009

Языки программирования в условиях, приближенных к боевым

Кросс-пост из http://users.livejournal.com/_adept_/99574.html:

Существует классическая статья "Haskell vs. Ada vs. C++ vs. Awk vs. ... An Experiment in Software Prototyping Productivity", написанная в 1994 году. За 15 лет многое изменилось, и, думается, многим было бы интересно прочитать подобную статью про положение дел сегодня.

В связи с этим ищутся:
1) Условия подходящей задачи (критерии см. ниже)
2) Желающие реализовать ее на Haskell/C+/Ocaml/Java/Scala/C#/... с тем, чтобы ваш код был нещадно сравнен с другими и опубликован для всеобщего обозрения.


Q: Зачем все это делается?
A: На других посмотреть, себя показать. В частности, чтобы люди имели возможность посмотреть на решения на других языках, и составить о них какие-то мнение.

Q: Чем не устраивает The Great Language Shootout?
A: Тем, что там отдается предпочтение "быстрым и грязным" решениям, которые всячески "срезают углы". Во-первых, в таком стиле пишется дай бог чтобы 5% от всех программ, во-вторых, людям, не знающим язык X, строго противопоказано смотреть на решения на языке X в Language Shootout — останется превратное впечатление.

Q: Как будут сравниваться решения, чтобы определить победителя?
A: Никак, т.к. победителей не будет. Будут приведена определенная статистика по всем решениям, без выводов.

Q: Какой тогда стимул участвовать?
A: На других посмотреть, себя показать :)

Какой должна быть задача?
1) Не заточенной под конкретную ОС (т.е. "Реализовать компонент, встраеваемый в Word" или "плагин для libpam" — не катит)
2) Не заточенной под конкретный язык/фреймворк/... (т.е. "получить список сигнатур методов всех объектов указанной сборки .Net" — не катит)
3) Если глубокие знания в предметной области дают решающее преимущество — это fail (т.е. "реализовать DES-CBC" — не катит)
4) Чтобы она не была из категории "мне не нужно, чтобы плац был чистый, а нужно, чтобы вы задолбались" (т.е. "распарсить XLS-файл, не пользуясь библиотеками" — не катит)
5) Задача не должна требовать много времени на реализацию (если это будут человеко-недели - никто за нее не возьмется)

Какой должна быть реализация?
1) Чтобы ее было не стыдно показать другим. В частности, чтобы решение на языке X не заплевали бы как кривое и неидиоматичное другие программисты, знающие язык X.
2) Идеально было бы давать две реализации: первую с ориентиром на "красоту", "образцово-показательность" и легкость поддержки/развития кода (т.е. пишем как пример кода, который будет прилагаться к резюме :), а вторую — "грязную и быструю".
3) Т.к. библиотеки — это неотъемлемая часть силы и популярности языка, библиотеками "общего назначения" (контейнеры, парсинг, ...) пользоваться можно и нужно
4) Но! Решение, которое свелось к исключительно к нахождению и использованию какой-то (узкоспециальной) библиотеки никому не интересно и рассматриваться не будет.

Выбирать подходящее условие будет жюри, представляющее апологетов всех течений и направлений, в том числе — включающее тех, кто критически отзывался о материалах, уже вышедших в fprog.ru.

Если у вас есть идея подходящией задачи и вы хотите ей поделится — напишите комментарий, а?

(lionet: Так как исходный пост уже порядком замусорен, я оставляю комментарии открытыми здесь. Может быть, это даст какой-то более позитивный эффект. Если хотите предложить решение — добро пожаловать! Первый уровень комментариев — только по делу: предложения задач. Для того, чтобы поболтать, идите всё-таки в исходный пост.)