О программировании
хмурая тучкаПослушай @feks
Матрицу смотрел?... Ты начал просыпаться, буквально как Нео.
У тебя даже есть ментор, который тебе продает какую–то идеологию, прямо как Морфиус. Я не знаю какие у вас с ним отношения и я не хочу создавать в твоей голове лишних конфликтов, поэтому предлагаю тупо идти по тексту. В топике ты начал с того, что будучи коммерчески успешным программистом, ты начал в какой–то момент ощущать фальш происходящего и срочно намереваешься вырваться каким–то образом из корпоративной крысиной гонки, что уже давно не доставляет. Я буду исходить из предположения, что в виду этих обстоятельств, ты теперь будешь пытаться искать смысл, полировать форму, быть начитанным буквально во всех околопрограммистских дискурсах, стремиться максимально комфортно выражать себя в коде. Как человек, хорошо начитанный в программистском дискурсе, я хочу предупредить тебя о том, что вовсе не это должно быть твоей первостепенной целью (sic!) В топике ты пишешь, что хочешь: (а) силой взять всю влиятельную литературу по сабжу за последние 50 лет, (б) пролезть зачем–то академку, наверное чтобы делать науку, как тебе кажется, (в) онлайн–курсы какие–то. Друг, ты дизориентирован, у тебя нет определенного пути, ты не движешься из точки А–Б, ты бежишь. От чего? От макакинга, от культуры невежества и бесконечной механизации ремесла программирования. И что ты делаешь? Решил тупо перечитать все популярные методички? Кнута, SICP, чистый код, CSP алгебру, gang of 4, драгонбук, et al? Без какой–либо системы, без цели или мотивации... Потом ты думаешь вернуться в академическую среду. Ведь где еще они смогут починить твое грустное сердце, кроме как на магистерской программе по computer science? Действительность заключается в том, что наука привлекает только со стороны; если ты не готов коммититься, а ты не можешь быть готов в принципе, т.к. лишен цели как таковой, то не распыляйся рассказывать себе такие сказочные истории, как то, что ты будешь заниматься наукой. Идентифицируй то, что доставляет тебе дискомфорт, поставь цель по "завоеванию" этого, составь план и начни его выполнять. Просто послушай какую хуйню тебе советуют итт: разобраться в слоганах, понять в какой области ты хочешь работать, освоить какие–то языки или Технологии™... это все совершенно мимо кассы, но в этом нет ничего удивительного, ведь это все является по своей сути очень кратким содержанием методичек по макакингу.
Макакинг — это когда решение задачи не имеет значения, а лишь имеет значение то, как она решается. Макакинг — это про интеграцию, про бизнес, масштабирование труда, предсказуемые риски и результаты. Прошу обратить внимание: Я не питаю иллюзий насчет индустрии и не собираюсь продавать тебе какую–то примитивную идеологию, как это делают постеры на хакерньюс, хабрахабре (боже упаси) или где–то в проплаченных Medium постах. Не подумай, я даже не собираюсь делать вид, что тезис по типу "вся коммерческая разработка ПО это макакинг" вообще что–то значит; и дураку понятно, что реальная ситуация значительно нюансированнее. Для начала, попробуй понять две вещи: (а) программный код это фундаментально текст, (б) программирование это дискурсивная практика. Да уж, с текстом еще все понятно, но дискурсивная практика — что это вообще значит? Когда мы говорим о коде или каком–то вычислении, которое мы хотим выполнить, то мы выполняем языковую работу. Программирование — это набор языковых инструментов для этой работы. Мы называем такой набор инструментов дискурсивной практикой, а рабочий процесс — дискурсом. Давай чтобы все было честно.... Моя специальность это programming language design, конструктивная /математическая логика, natural language processing, философия языка. Я могу сейчас начать тебе рассказывать про сиволизм Фреге, изоморфизм пропозициональной и комбинаторной логики, в народе известный как Curry–Howard correspondence, про работу Рассела, Рамзи, Витгенштейна; ты справедливо заметишь, что для такого молотка как я, любой текст — это логический гвоздь. Послушай, единственное, что я прошу тебя постоянно держать в голове, это идею о том, что занимаясь программированием, на фундаментальном уровне, ты выполняешь языковую работу. Ремесло программирования для тебя это синтез структур посредством перевода задачи из естественного языка в предметно–доменный дискурс, а также интерпретации этой структуры (про это написан SICP). Программист — это переводчик. Твоя работа, как программиста, заключается в последовательном переводе техзадания в язык программирования, скрипт. В индустрии есть один закон и это рыночный императив. Бизнес хочет делать вычисления, сфера айти растет, появляется все больше рабочих мест для программистов. Я не буду говорить тебе, что это все просто игра против рынка, где тебе нужно минимально включать мозги и максимизировать собственную компенсацию. Напротив, если рыночный императив на "карте индустрии" образует вертикаль, то по горизонтали на такой карте будет находиться идеология. Бизнес движет нами снизу—вверх от примитивных CRUD задач уровня интернет–магазинов, где макакинг уже давно заменил любую интеллектуальную работу, до утопии в виде skunkworks инженерного искусства, по типу Bell Labs из условных 70–х, которых у нас никогда не было. Мы же движемся слево–направо от программирования–как–ремесла (реального), до программирования–как–искусства (прекрасного). В левом нижнем углу у нас рутинная Excel бухгалтерия, формулы–макросы полный фаршмак, а в правом верхнем — разворачивание распределенных систем интерактивных симуляций в файловой системе Plan9. Ну ты понял, интересные вещи. Внимательный читатель обратит внимание на то, что вертикальное движение "по лестнице" в таком случае тоже имеет идеологическую (корпоративную) функцию, но в рамках этого текста, программирование меня волнует исключительно с позиции программистского труда, а не его карьеры. Почему это важно для твоей ситуации? Потому что обе координаты этой карты связаны между собой: ты не можешь продолжать подниматься наверх, если программирование для тебя будет становиться все больше искусством, нежели ремеслом. Conundrum: Чем быстрее ты хочешь двигаться вправо, тем сильнее рынок сопротивляется твоему движению наверх. Потому что это только в лучшем случае, ты можешь позволить себе взять достаточно ответственности и самому двигаться по вертикали, будучи владельцем производства или его руководителем. В реальности, подавляющее большинство программистов двигаются по вертикали только лишь от руки начальства. А в бизнесе, как мы знаем, все про интеграцию, масштабирование труда, предсказуемые риски и результаты...
То есть ты должен понимать, например, почему Фп сообщество уже долгие годы не может продать бизнесу все бенефиты функциональной методологии разработки программ. Потому что они, грубо говоря, пытаются писать поэзию. Если в художественной литературе мы говорим про индивидуальные переживания опыта, то программирование скорее напоминает мотоспорт. Для хорошего поэта может быть трудно найти своего читателя, но фундаментально говоря, поэт танцует один. В программировании, мы говорим не про переживания, а вычисления. Танец для двоих. Если стих это "вещь в себе", то компьютерная программа ничего не значит в отрыве от среды ее выполнения, компьютера, а интерпретация программы невозможна без знания связанного с ней доменного дискурса. Почему IO в Хаскеле сделан так, как он сделан? Почему без ссылочной прозрачности, символизм в любом "функциональном" языке разваливается? Потому что главным квестом Фп парадигмы является религиозная практика отделения прекрасного (структура, композиции монад) от реального (интерпретация, ввод–вывод). В основе любой идеологии всегда лежит какой–то грязный секрет. Мы знаем про такие секреты в хрисианстве, атеизме, стоицизме. В парадигме Фп это предположение, что в доменном дискурсе реальный мир всегда можно эффективно приблизить посредством формальных методов, см. конструктивную логику. К сожалению, эта пропозиция будет правдива далеко не всегда. Ключевое слово: эффективность. Нет ничего случайного в том, что ооп, далекая от формальности методология, уже долгие годы доминирует в макакинге. Оказалось, что профитов, которые дает ооп символизм, самых по себе уже более, чем достаточно, чтобы удовлетворить большинство потребностей бизнеса. Не прибегая к функциональной парадигме, формальным методам.
Пойми что ты хочешь писать: механизацию или стихи.
Нет ничего плохого, в том, чтобы делать софт, который завтра заменит еще одного рабочего на производстве, ровно как нет ничего плохого в том, чтобы писать стихи. Важно, чтобы тебе не нужно было никуда бежать, чтобы ты находился на своем месте и мог заниматься тем, чего по–настоящему хочешь. Важно именно это, а не Технологии™ и слоганы, которые неудачники из индустрии друг другу рассказывают.
Успехов!