среда, 20 октября 2010 г.

[prog.flame] Проведу параллель между увлечением дартсом и новыми языками программирования

На RSDN развивается небольшой (пока?) флейм под названием “Scala / F# / Nemerle и мейнстрим”. Может из-за того, что я редко читаю RSDN в последнее время, но мне кажется, что в мою бытность RSDN-ером такие флеймы случались почаще :) Впрочем, и тогда они проходили по аналогичному сценарию. Набегало несколько фанатичных Nemerle-истов и приверженцев других маргинальных (по сравнению с мейнстримом) направлений и начинали доказывать, что самые умные и продвинутые сейчас будут использовать Nemerle (Scala, Lisp, OCaml, Erlang, you name it…), получат от этого невообразимые бенефиты и снимут все сливки. А остальные (т.е. либо заросшие мхом старперы, либо настолько тупые, что не могут оценить то, что наиболее по-(про)двинутым уже давно понятно) будут продолжать плакать, но жрать мейнстримовый кактус. Как миллионы мух, которые… ну и далее по тексту.

Сегодня вдруг поймал себя на том, что все это сильно напоминает мне мое увлечение дартсом. Точнее одну его сторону – страсть менять дротики раз в месяц.

Есть у меня такая проблема. Не успеют придти очередной комплект, как я начинаю выбирать себе другой. Пока спасает только ограничение на размер беспошлинных посылок из-за рубежа. А то бы я себе закупал сразу по 4-5 разных :)

И вот в чем фокус. Когда приходят новые дротики, результаты сразу же повышаются. Прямо на глазах.

Что тут же вселяет уверенность в том, что решение их купить было не просто правильным, а архиправильным. И остается только сожалеть, что ты не сделал этого раньше, и о том, что посылка по почте идет так долго.

Однако, этот положительный эффект крайне кратковременен. По-моему, он длится 3-4 дня. После чего результаты ухудшаются и становятся даже хуже, чем до смены дротиков. И требуется неделя (а то и больше), чтобы хотя бы выйти на прежний уровень.

Для себя сделал такой вывод: мне нужны не столько сами дротики, сколько те эмоции, которые я испытываю при выборе новой модели, при ожидании их прибытия, при первой пробе, при первых (пусть и временных) успехах. Т.е. я ловлю кайф от самого процесса смены дротиков.

Аналогичная штука, мне кажется, происходит и в программировании. Только там вместо дротиков языки программирования. И во времени все намного сильнее растянуто. Новый язык нужно освоить, где-то применить, получить первые результаты. На это нужно намного больше времени, чем дождаться посылки из Англии и подойти к мишени.

Но когда первые результаты получены, происходит все тоже самое. Первые успехи, которые сменяются обычной рутиной. Скучной, неинтересной, часто разочаровывающей, до жути однообразной. Нет уже адреналина. Есть повседневные обязанности. Так не интересно.

То ли дело взять вместо наскучившего C++ новый C#… А потом вместо наскучившего C# новый Nemerle… Или Scala вместо Java… Адреналин-то возвращается. Рутина исчезает (на время, но кого это волнует). Жизнь становится лучше, жизнь становится веселее.

Однако, частая смена языков (как и частая смена дротиков) – это всего лишь бег на месте. Потом становится понятно, что для достижения значимого результата нужно остановиться на чем-то одном. По-возможности, максимально для тебя комфортном. И долбить, долбить, долбить. Превозмогая скуку, разочарования, однообразие. Да, медленно, да без адреналина.

Конечно, прогресс не стоит на месте. И Java с C# вытесняют C с C++ом, как в свое время C вытеснял ассемблер. Так же, как вольфрам и полимеры стали мейнстримом в дартсе, вытеснив в прошлое деревянные дротики с натуральными перьями. Только времени на это потребовалось очень и очень не мало. Так что мейнстрим меняется, никуда от этого не спрятаться. Но при любом мейнстриме секрет успеха будет заключаться в том, чтобы долбить, долбить и долбить… А не в ловле кайфа от процесса смены инструмента.

18 комментариев:

Miroslav комментирует...

проблема с программами в том что они перерастают своих авторов. То есть без специальных приемов оно переходит черту пригодности к адаптации и дальше проще писать наново. Собственно для этого и нужны языки - а то и дальше бы долбили на асме.

eao197 комментирует...

Мне кажется, что человеку вообще свойственно браться за задачи, которые находятся на грани его возможностей. А программы изначально были на грани как возможностей человека (вооруженного современными языками и инструментами), так и возможностей техники.

В спорте, в принципе, тоже самое.

Но я говорил о том, что есть активная корогта "early adopter"-ов, которые находят (может быть бессознательно) удовольствие именно в смене инструментов.

имя комментирует...

меня, например, совершенно не радует необходимость спотыкаться на мелочах при программировании на новом языке

и в отличие от дартса, там есть важная деталь -- поддержка старых библиотек

вот примерно то, на что можно было бы перейти с плюсов

1. юзание ПЛЮСОВЫХ библиотек (в т.ч. шаблонных, хотя бы с костылями в некоторых случаях), и использование новых библиотек из плюсов (хотя бы с костылями в некоторых случаях)

2. параметрический полиморфизм, зависимые типы, экзистенциональные типы, концепты

3. более продвинутый вывод типов, но не такой всеобщий как в хаскеле

4. метапрограммирование (в т.ч. расширяемый синтаксис) и возможность использовать альтернативный синатксис

eao197 комментирует...

>меня, например, совершенно не радует необходимость спотыкаться на мелочах при программировании на новом языке

имхо, это вообще свойство программирования как рода деятельности -- спотыкание на мелочах. Слишком велик семантический разрыв.

>поддержка старых библиотек

Как раз поддержка старых библиотек -- это не самая большая проблема. Библиотеки более-менее легко портируются (если только они не сильно зависят от особенностей языка, afaik многие математические библиотеки так и остались fortran-овскими, поскольку в чистой математике fortran дает фору более современным языкам).

А вот поддержка старого прикладного кода -- вот это да, бич. Не зря же COBOL до сих пор не умер.

eao197 комментирует...

>вот примерно то, на что можно было бы перейти с плюсов

не уверен, что я понял и половину упомянутых в списке терминов :)

Сам же я категорически против метапрограммирования.

Свои же хотения я когда-то давно изложил. К этому списку сейчас я бы добавил еще и поддержку константности и иммутабельности. Имхо, это то, что реально императивным языкам не хватает. И что коряво реализовано в C++ и спорно реализуется в D2.

Rustam комментирует...

Я тут чуть пописал на VC 2010 вроде бы auto, decltype и лямбды, мелочь, но написание локального кода сильно упрощают.
Ну и плюс поддержка параллельности (parallel_invoke, parallel_for) и rvalue reference тоже неплохо.

eao197 комментирует...

@Rustam: нужно сказать, что все это в C++ проникало с очень большим трудом и томозами.

Rustam комментирует...

Это да, комитет тормозит :(
Но сейчас похоже может получится (и получается) парадоксальная ситуация новый стандарт все еще не принят, но компиляторы его уже поддерживают, и программисты пишут с его использованием :)

eao197 комментирует...

>новый стандарт все еще не принят, но компиляторы его уже поддерживают, и программисты пишут с его использованием :)

Такая ситуация уже была в начале 90-х, когда некоторые компиляторы уже могли STL поддерживать, но стандарта еще не было.

По последним сведениям, новый стандарт еще далеко не устаканился :(

имя комментирует...

> Библиотеки более-менее легко портируются

Вот практически -- насколько легко SObjectizer спортируется на D2; а потом придется что? развивать оба варината библиотеки? забросить плюсовый вариант, и в старых проектах фиксить только баги в нем? или вообще все свои проекты, включая работоспособные старые, портировать на D2?

Сам по себе D2 лучше с++, но вот такие вопросы.

eao197 комментирует...

>Вот практически -- насколько легко SObjectizer спортируется на D2; а потом придется что? развивать оба варината библиотеки?

Ну да. Если нужны оба варианта, то придется вести оба варианта. Тем более, что за счет сильно разных языков развитие пойдет в разных направлениях.

Разработка библиотек -- это вообще самодостаточная штука. Если библиотека большая и восстребованная, то ее разработчики могут годами заниматься только ее развитием (в том числе и переписыванием на других языка) даже не подозревая, в каком прикладном коде она используется.

Rustam комментирует...

@Евгений

В начале 90-ых я был прововерным фортером и с презрением смотрел на всяких недопрограммистов на сях и паскалях :)

Вообще у меня уже начинает формироваться мнение что жесткий стандарт скорее вреден для C++ чем полезен.

eao197 комментирует...

>В начале 90-ых я был прововерным фортером и с презрением смотрел на всяких недопрограммистов на сях и паскалях :)

Вообще заметно, что у тебя альтернативное воспитание :) Я вот из правоверных Паскалистов в упертые C++ переквалифицировался. Для меня всяки фотреты и лисперы были людьми не от мира сего, слишком умные, слишком себе на уме :)

Rustam комментирует...

Ну ты и обзываешься, ладно меня же не дятлы воспитали обижаться не буду :)
Во всем виноват программируемый калькулятор MK 61 который меня и заразил программазмом, там по сути фортовская система команд, и как увидел форт так сразу и затянуло, да еще и сразу работа на нем подвернулась.

eao197 комментирует...

>Ну ты и обзываешься, ладно меня же не дятлы воспитали обижаться не буду :)

Это у меня с детства привычка осталась, видимо. Была у нас дурацкая забава -- кто кого сильнее обзовет :)))

А вот меня программирование калькуляторов не затронуло. Сначала не было в распоряжении такого калькулятора. А потом он по сравнению с БК-1001 казался каким-то убогим.

Живой фортовец у нас в универе учился на курс младше. Был типичным гиком-хакером. Причем очень умный был человек, и программист один из самых сильных на своем курсе.

имя комментирует...

ну вот я тоже начинал с МК-52; тем не менее -- форт и лисп хороши своим демократизмом, но щас безусловно устарели и реанимации не подлежат

@eao197: а почему ты против метапрограммирования?

и видимо близкий вопрос: в языке без метапрограммирования можно понаделалать кучу непримитивных (т.е. выражающихся через другие) конструкций -- тот же rescue как в eiffel

вот даже те ruby-шные операторы управления циклом, которых нет в перле, меня уже напрягают; а как будет выглядеть язык даже не для начинающих, а для переходящих с другого языка, если в нем будет дохрена непримитивных, неортогональных конструкций, "лучше отражающих намерения программиста"?

имя комментирует...

скажем, уже switch в си смотрится как избыточный -- соптимизировать компилятор должен уметь и цепочку иф-ов; однако если к нему добавить проверку компилятором полноты перебора вариантов, то switch уже кажется оправданным; если его обобщить до паттерн-матчинга -- то совсем оправданным

eao197 комментирует...

@имя:

>а почему ты против метапрограммирования?

У программистов (включая меня) есть очень сильный соблазн написать свой язык, на котором конкретная задача решается (якобы) короче и проще, чем на универсальном.

И если универсальный ЯП предоставляет такие возможности, то ими будут пользоваться и будут создавать свои поддиалекты. А потом все это дело нужно развивать и сопровождать.

Понятное дело, что это очень банальные слова. Но я действительно этого опасаюсь.