vit_r (vit_r) wrote,
vit_r
vit_r

Categories:

Про ёжика в тумане, зазнайство, языки программирования и вериги

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

Наши специалисты сочувствовали и давали советы. От независимой профессиональной экспертизы и до жалоб в профсоюз. Масса предложений. Полный спектр. И тут являюсь я со своим канделябром...

Короче, опять на меня обиделись смертельно и непримиримо.

Про звездизм и функциональное программирование



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

То, что в мире что-то не так, первый раз понял, когда получил на втором (или третьем) курсе экзамен по физике автоматом. За один вопрос. Заданный на лекции. Просто так, в качестве уточнения.

Как сказал лектор, это был единственный раз в его преподавательской деятельности, когда ему пришлось думать и искать ответ в литературе.

Всё это вызвало глубокий когнитивный диссонанс. Для меня вопрос был естественным, напрямую вытекающим из представленной модели. Чуть ли не обязательным для понимания и применения. Но никого, включая лектора, доктора наук и достаточно приличного учёного, это просто не интересовало.

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

Не то, чтобы похожих людей я не встречал. Просто их было ничтожно мало.

Это ни в коем случае не ум. Скорее, структура мышления и подход к решению проблем.

Возраст и опыт сейчас как раз такие, что пора учить молодёжь жизни, писать книжки, выступать с проповедями...

Но то, что люди хотят услышать, мне не интересно. Интересное мне находится как раз в моём кривом мире, по которому провести обычных нормальных специалистов если и можно, то требует неимоверных усилий. Потому как надо не только построить модель в их терминах, не только доказать зависимости в их системе понятий, но и просто объяснить, почему это важно.

Я, в принципе, могу начать проповедовать о том, что agile спасёт индустрию. Могу выступать с проповедями о том, что это диверсия, призванная индустрию погубить. Причём, и то и другое будет в моём исполнении одинаково эффективно, хотя за второе денег будет меньше, ибо не в моде. Но мне это не интересно. Потому что правы и те и другие. Потому что начинать надо с определения аксиом. С выяснения того, что же такое agile и почему разные люди под этим разное понимают. И куда делись те книжки, которые читали те проповедники, которые умные мысли выдают за свои свежие озарения.

Но это не то, чтобы не принесёт денег, просто никому не интересно. Все, даже самые разумные, хотят разделить мир на «мы» и «они».

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

ИТ сообщество безнадёжно больно звездизмом.

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

Закончу наездом на функциональное программирование.

Ну да, прикольно. В тех областях, для которых применение оправдано и выгодно, даже правильно. Как телефонный Эрланг на обработке огромного количества мелких параллельных запросов. Математика - тоже понятно. Но вот с остальным у меня большие сомнения.

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

От языка, концепции и стиля мне нужны графичность, понятность, стабильность и лёгкость загрузки контекста. Всё остальное вторично.

Графичность позволяет понять программу, не читая.

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

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

Понятность - критерий очень скользкий.

За неограниченное время человек неограниченных возможностей разберётся в любом коде. Вот только основной дефицит отрасли - время и мозги. Их вечно не хватает. И не всегда это относится к тем, которые «они».

Писать просто очень сложно. Даже на нормальном языке. Большинство писанины, производимой инженерами или считающими себя таковыми, совершенно не читабельны.

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

Критериев для программирования просто нет. И не потому, что они не нужны. Просто среди «специалистов» действует правило «мне кажется, что я понимаю, а остальное меня не волнует».

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

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

Давным давно, когда перед Гостиным собирался народ и спорил о политике, на заявление о том, что в экономике может понимать любая кухарка, я просто открыл учебник и показал формулу на пол страницы. После чего оппонент согласился, что кухарка может понимать не всё. В том числе, и экономические зависимости.

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

Стабильность.

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

Преподаватель просто использовал посреди формул прописные эпсилон и кси, не всегда правильно и ясно выписывая хвостики. Или кое-где, при переносе из одного места в другое, загогулинки не заметил.

Уже одна голая скобка в неудачных условиях может привести к нескольким дням жестокого дебаггинга. Простое, но не удачное изменение может породить хитрые ошибки в другом конце программы. Мелкие улучшения поклонника Шивы могут разрушить программу «Hello world!»

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

И я совершенно не представляю, как в эти изящные математические конструкции впишутся имена, типа next_from_cur_verts_hash. Ладно, мои алгоритмы именования не самые удачные и я не очень крут в этом вопросе. Наверно, можно сделать лучше и изящнее. Но это та работа, которая может поглотить любые ресурсы. Кто выбирал имена для детей, меня поймёт.

Лёгкость загрузки контекста для меня важна из-за характера моей работы.

В любой момент я могу получить высокоприоритетное прерывание. И мне надо за минуту - полторы зафиксировать контекст, состояние и направление движения. Чтобы открыв проект на том же месте через час, через день или через год продолжить делать то, что должно быть сделано.

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

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

Звездизм не победим. Впрочем, я с ним и не собирался бороться.

Если будет время, подниму октябрьский черновичок и допишу грустную историю про стрелочки и прямоугольнички, после чего отложу тему.

Copyright

(CC BY-NC-ND 3.0) vit_r, 2012

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.
Перевод на английский запрещён, потому как нефиг портить хорошую вещь.

Tags: agile, fp, it, psychology, qa, quality, ru, se
Subscribe
  • 46 comments
  • 46 comments

Comments for this post were locked by the author