понедельник, 28 сентября 2009 г.

[comp.prog.flame] Не могу не процитировать

На RSDN ведутся две дискуссии, на мой взгляд, очень сильно оторванные от проблем производства ПО. Не могу отказать себе в удовольствии процитировать пару высказываний оттуда.

Первый флейм посвящен проблеме разработки ПО без использования IDE: Жизнь без IDE. В нескольких сообщениях там сквозит мысль, что если задача сложная (а не какой-нибудь monkey coding) и если инструмент подходящий (никак не меньше OCaml, в идеале Haskel), то IDE и не нужна вовсе. На что последовал совершенно замечательный ответ:

Ой вей, я вас прОсю.
Представь себе что Хаскел двинул в массы. Ну лет через 15 к примеру. Народ к тому времени будет учить его по книгам Хаскел за 24 часа для чайников.
А где мозгов и книги для чайников не хватит будут юзать performUnsafeIO или как его там. И будут либы написанные такими программистами. Бангалорскими. И во всем этом придется кому-то разбираться. К примеру юноше со взором горящим. Который еще молод и ему не дадут написать свою версию бангалорской библиотеки с гейшами и го. А гуры будут все говорить что ИДЕ оно ненужно. А молодежь будет охреневать. И невдомек ей будет что задачи стоящие перед ними и перед гурами разные. Кому-то писать прототип сложноалгоритмичной мегафичи. А кому-то поддерживать код в который превратилась мегфича после реализации доблестными бангалорцами. И молодешь будет плакать и жрать кактус, а гуры вести просранные разговоры о теплом ламповом звуке(С) аскетичных редакторов. И то что современные ИДЕ высокие частоты не тянут. Иващеблин.

Я вообще к чему. Микросхемки можно паять и на коленках, чего уж там. Но в промышеллном производстве пользуются немного другими технологиями.

Отлично сказано, респект автору. Очень по делу.

Кстати, сам я проблему программирования без IDE (точнее причины, по которым я сам не пользуюсь IDE) осветил уже давно. Добавлю, что по моим наблюдениям, без IDE работают считанные проценты программистов.

Второй флейм под названием “Noop – новый язык для JVM” вообще затронул много разных вопросов, но сейчас в нем очень активно доказывают, что Оберон – это отстой и каменный век. Что студентов обязательно нужно учить самым-самым передовым технологиям – функциональному программированию и, особенно, метапрограммированию. В рамках этой агитации прозвучала фраза (выделение мое):

Мне кажется твоей главное проблемой является научить студентов программированию. Причем научить так, чтобы они выйдя со студенческой скомьи могли бы быстро начать разрабатывать сложный, современный софт. А для этого они должны быть теоретически и практически освоить все современные парадигмы программирования.

Бред. Нельзя студента обучить программированию так, чтобы после окончания он мог быстро начать разрабатывать сложный, современный софт. (Если только речь не будет идти о корифеях типа Кнута и Вирта). И уж тем более в разработке сложного софта не обязательно знать все современные парадигмы программирования.

Плохо то, что подобный бред читают начинающие программисты, которые могут воспринять его за чистую монету. Да и какие-нибудь не сильно искушенные в программировании преподаватели тоже – почитают корифея от программирования VladD2 и решат давать студентам всего и понемногу.

PS. Кстати, еще об IDE и маразмах. В Dr.Dobb недавно была серия статей про внедрение в Nokia инструмента Tasktop. В одной из них, Integrating ALM: Lessons Learned Deploying Tasktop at Nokia, коротко освещается основная задача этого дела: сократить для разработчика время на переключения между задачами. Т.е. сидит человек в IDE, связанной с Tasktop-ом, работает над какой-то задачей (task-ом). Тут ему бах! и приходит распоряжение заняться правкой какого-то важного бага (новый task). Разработчик выполняет этот новый task, после чего хочет вернуться к предыдущему. И тут (фанфары!) Tasktop возвращает его IDE к тому виду, который был при работе над предыдущей задачей. Она какой подход у серьезных шараг – экономия на каждой секунде времени разработчика! :-/

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

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

Не будут "массовые индусы" писать ни на хаскеле ни на окамле по той же причине что не пишут например C++ код на шаблонах. Просто не преодолеют порог вхождения. Если же преодолеют перестанут быть "индусами".

Насчет меньшей важности IDE, на самом деле функциональщина все-таки часто чудовищно сжимает код, я тут с алгоритмом который для C++ оценивал в 1500 - 2000 строк на OCaml'е уложился в 200, при этом в начале был уверен что как минимум будет 500 - 700. Даже по сравнению с питоном есть приличное сжатие, на питоне я оцениваю как раз в эти 500 - 700 строк.

Евгений Охотников комментирует...

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

Ну и, по-моему, ни Haskell-ю, ни OCaml-у мейнстримом не быть. А вот чему-нибудь типа F#/Scala (базирующимся на .NET/JVM) -- вполне-вполне. Поскольку интероп с уже имеющимися мегатоннами кода сейчас, пожалуй, даже важнее фич языка.

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

По моему F# и Scala тоже слишком сложны. "Индусы" по моему и на C# будут использовать только самые простые вещи из уже имеющихся в нем функциональных возможностей. Просто по достаточно приличному опыту изучения гавнокода на C++ такого рода "специалисты" используют минимум возможностей языка. Конечно изредка встречается и говнокод написанный фанатом тех же шаблонов, но на общем фоне его мизерное количество :)

Евгений Охотников комментирует...

Я бы не стал недооценивать желание жить хорошо в странах третьего мира :) В конце-концов, в индустрии разработки ПО мы сами пока такой страной и являемся. И хорошая жизнь программистов в Восточной Европе сейчас достигается не за счет разработки собственных продуктов (коих мизер), сколько за счет аутсорсинга.

А аутсорсинг -- это такая интересная штука...

Допустим, что ФП действительно всех затопчет и применение ФП в разработке сразу же будет давать офигенные конкурентные преимущества. Это значит, что подавляющее количество новых разработок на Западе будет стартовать на всяких Haskell-ях, OCaml-ах, F#-пах и Scala-ах. Новые продукты будут завоевывать рынок. Их будет появляться все больше, конкуренция между ними -- усиливаться. Для снижения издержек доработку и сопровождение будут отдавать в аутсорсинг. Поэтому как индусам, так и белоруссам придется хочешь, не хочешь, но входить в новый мейнстрим. И если раньше бангалоровцы радостно писали в своих резюме C++/C#/COM/J2EE, то сейчас они начнут писать Haskell/Monadic/...

Так что мнение о том, что какой-то язык слишком сложный -- это в большей степени проявление снобизма. Отчасти тот же Haskell сложен потому, что нафиг не упало ломать мозг для его изучения сейчас (как раньше многих ломало изучение ООП). Если его не смогут осваивать миллионы мух, его сместят из фокуса более адаптированные варианты. Пусть не такие крутые и чистые, но дающие изрядную дозу его достоинств. Так что, если в хардкорном ФП действительно что-то есть, то и в Индии (Белоруссии) со временем будут аутсорсить на хардкорных ФП. Зуб даю! ;) Шутка.

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

"Индусы" это иносказательно, я аутсоринг совсем не имел в виду. Имелись в виду низкоквалифицированные специалисты независимо от национальности и месторасположения. Они не могут нормально освоить не только современный FP но и ООП тоже.
Если ООП для таких специалистов дает довольно много, а именно большое количество повторно используемого кода в виде библиотек и фреймворков, то боюсь что ФП им вообще ничего ни даст, максимум разве что локальный сахар, так как сила FP проявляется именно в высоком уровне абстракций и в упрощении сложной логики.

Евгений Охотников комментирует...

А я упомянул аутсорс именно как показатель большого скопления таких вот специалистов. И, мне кажется, что современное развитие средств разработки (включая и IDE) идет в направлении создания максимально комфортных условий именно для них.

Кроме того, есть еще одна проблема (которая так же ярче всего проявляется в аутсорсе) -- первоначально спроектированное и сделанное решение затем попадает на сопровождение совсем другим людям. Не обязательно таким же продвинутым, как автор. Но им придется браться за ФП, иначе никак.

А ситуации, когда в программировании остануться только высококлассные проффи, не будет никогда.

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

Наверно ты тоже прав :)
Вообще шизофрения в средствах и подходах разработки год от года только усугубляется.
С одной стороны высококвалифицированные очень небольшие команды с подходящим им и их задачам инструментарием, с другой "1000 индусов" с простыми языками и навороченными IDE в попытке индустриализации.

Евгений Охотников комментирует...

Имхо, цитата в тему: "Ну а с настоящим монтером и того хуже. Спрос на него сегодня такой, что он уже не боится потерять работу, не дорожит своей репутацией. Людей, владеющих домами, автомобилями, моторными судами и тому подобной техникой, требующей постоянного обслуживания и ремонта, стало столько, что честных и знающих специалистов в этой области хронически не хватает, да и они уже давно предпочитают легкую жизнь, несовместимую с высоким профессионализмом." (http://www.ng.ru/printed/31342)

Слишком большая потребность в программистах, отсюда и такая шизофрения.

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

:))

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

Насчёт того, будут ли индусы писать на гуруланге.
Ещё как будут!

У программиста, как у автомобилиста, есть несколько этапов в жизни.

1 - Чайник. Боится всего, ездит только по проверенному маршруту, кодит по проверенным рецептам.
А поскольку в институте не могут дать рецепты для всех случаев жизни - изобретает свой унылоговнокод и копипастит. Отсюда и берутся монстры
if(ToString(SomeBool).Length()==4)
или
if(x==1) y+=1;
if(x==2) y+=2;
if(x==3) y+=3;
...

2 - Курсант авиационного училища. Думает, что умеет летать, и пробует летать при каждом удобном случае. Особенно, когда он уже "дедушка".
Неоправданно использовать всякие крутые фичи - just for fun, или для прокачки скилла, или чтоб коллегам мозг выклевать, или потому что все остальные пацаны уже прикрутили спарцо, писалки и буст-фьюжен...

2.5 - Джигит. Считает, что он самый умный и любит "срезать по дворам". А потом смотришь на такой обфусканный код и плачешь.

3 - Извощщик. Устал уже самоутверждаться и пишет ровно настолько затейливо, насколько это требуют обстоятельства.

4 - Инструктор. Показывает чудеса джигитовки только для курсантов по их же просьбе, а для себя - не изгаляется, понимая ценность собственных нервов.

Евгений Охотников комментирует...

2Kodt: интересная классификация. Нужно будет на эту тему подумать.

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