Письмо молодому путешественнику, полюбившему Haskell

Это перевод Letter to a Young Haskell Enthusiast.

Примечание: Это письмо не о том, что такого знают бывалые, и не знают новенькие. Напротив, это письмо наполненно советами, которые мы будем учить неоднократно, и так же напоминать себе. Оно о том, что мы чувствуем познав что-то новое, и сложностях связанных с желанием поделиться этим с другими. Я затрону достаточно специализированные аспекты, но лишь для того, что бы лучше донести суть. Но его без больших изменений можно применить и к пониманию алгебраических структур, и к ещё более абстрактным предметам. Здесь то, о чём я хочу себе напомнить, и чем хочу поделиться с тобой. Я могу представить как захочу к нему вернуться и сам, столкнувшись с неподобающим поведеним в интернете.

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

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

Но для тебя важно на самом деле? Помогать людям и делиться всеми потрясающими идеями? Или, может быть, тебе хочется быть лучше других — быть лучшим программистом и знать больше остальных; выступить против большинства что-бы оправдать свой выбор диковинного языка? Конечно первое! Но вероятно что какая-то часть тебя в тайне всё же хочет второго. Я считаю что эта частичка есть у каждого из нас и имя ей — эго. Оно помогает добиваться невероятных высот, и оно же препятсвует нам, заставляя вести себя как негодяи; да и просто мешает общаться с другими.

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

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

Может быть ты считаешь себя умнее другого программиста потому что ты понял что-то. Но как сподвигнуть сделать то же самое твоего друга? Не стоит надеятся на это, говоря что это язык умных людей. Не надо говорить что ты умный потому что пользуешься им. Лучше сказать что строгая типизация (как отличительная черта этого языка) подходит для людей, которые ошибаются, как все мы. Такие языки помогают нам находить и объяснять наши ошибки. Это очень полезно во время, когда программы становятся всё больше, а справляться с ними нам приходится при помощи всё таких же мозгов. Если они утверждают что справляются с ошибками и без типов, тебе стоит признать что они должны быть умнее тебя, потому как тебе без них не обойтись. Но и в таком случае, стоит уточнить что ту энергию, что они тратят на то что бы обходится без типов, можно было бы потратить на реализацию более грандиозных идей если бы они прибегли к помощи компилятора.

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

Это не "более математический" язык, или "для математики", или "о математике". Действительно, программирование это математика. Но если кто-то этому возражает, то не потому что он глупый, плохой или злой. Скорее они так думают потому что им навязали ложное представление о математике. "Математикой" пользуются как предлогом что бы сказать что ты не тянешь, или не можешь учиться, что просто не способен чего-то понять. Это наглая ложь! Математика — это не вычисления, для этого есть компьютеры. Это не просто набор абстрактных символов. Нет необходимости понимать математику что бы понииать Haskell. Если на то пошло, Haskell может для кого-то заинтересовать в изучении математики. Не следует считать что если математика сложна, то сложным должно быть и программирование. Лучше думать что раз программирование может быть интересным, то следовательно интересной может быть и математика. Кто-то скажет что программирвание это не только математика, но и инженерная наука, и творчество, и поиск компромисов. Это может показаться удивительным, но всё это является и неотъемлемой частью занятия математикой, даже если это не упоминается в учебниках.

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

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

Самое же сложное и номер два по важности, это расстаться с гордыней. Если ты хочешь научится кого-то, то тебе нужно понимать и что они думают, и что — чувствуют. Если основная твоя цель это делиться знаниями, то ты обязан постоянно взвешивать, как твои слова и поступки поспособствуют этому. У тебя нет права судить кто прав, а кто нет — это прерогатива твоих учеников. А ты должен им полнстью довериться. Да, я говорил что это сложно. Так что если кто-то считает твоё поведение отталкивающим — это твоё упущение. Если твои слова задели кого-то или вынудили их принять защитную позицию — проблема не в их обидчивости. Ведь дело вовсе не в том, кто и как реагирует, а в том, что у тебя не удалось донести свои идеи, которыми ты хотел поделиться. Поэтому, прими критику в свой адрес, принеси извинения — не только за доставленные неудобства, но из за свои действия, которые их повлекли — и постарайся понять их реакцию, что бы общение впредь проходило более гладко.

Отмечу, что когда ты кого-то задел, они возможно будут не в лучшем расположении духа что бы объяснить что их расстроило, потому как их мнение о тебе уже пошатнулось. Так что не требуй от них разъяснений, хотя вежливо поинтересоваться конечно стоит. Помни — знания не стоят превыше человеческих отношений. Зачастую можно не понимать причин почему кто-то реагирует определённым образом, достаточно лишь знать что они так реагируют и считаться с этим. Если ты замечаешь, что просишь объяснений, подумай — получив их, повлияет ли это на твое поведение и каким образом. А если нет, то не стоит и начинать.

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

Останешься ли ты довольным результатом? Если ты стремишься всё понять и сойтись всем во мнениях, которые в каком то смысле можно считать объективно правильными, то — нет! Если же ты жаждешь самого плодотворного, почтительного, уважительного, всестороннего и весёлого общения среди эинтузиастов Haskell'а, то лучше способа не найти.

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

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

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

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

Знания — это не страшно. Знания — это увлекательно. Любой, располагая временем и жеданием, может его получить. Следует не только делиться им с другими, но и продолжать учиться самому, ведь всегда остаются неисследованные уголки. (В противном случае стало бы крайне грустно, когда не останется ни чего нового.) Учись прислушиваться ко мнению каждого, ибо все они основываются на чьём-то опыте, а опыт — кладезь знаний. Сторонники языков с динамической типизацией подарили нам достижения в JIT подходах. Если тебя интересует оптимизация численных вычислений, то следует обратить внимание на работу сообществ языков C++ и Fortran. Я, так же как и ты, предпочту писать на Haskell'е. Но главное это не инструменты, а идеи, и они могут поджидать нас в самых неожиданных местах.

Не изветсного и не изученного на самом деле настолько много, что мы вынужденны выстраивать мысленные заграждения, объявляя какие-то инструменты, сферы, языки и сообщества за гранью наших интересов. Ни от того что там нет интересных идей, а лишь как уловку, что бы нам не пришлось разрываться между слишком большим колличеством вещей. В этом нет ни чего страшного, наоборот, нам стого необходимо сузить круг интересующих нас знаний, что бы иметь возможность заниматься углублённым изучением определённых предметов. Я могу лишь порадоваться что другие предпочитают исследовать что-то другое! Кто знает что им улыбнётся узнать?

Если кто-то рассказывает в интернете о программировании, это означает что они уже много добились и движимы любопытством. Может ты не согласен с их мнением, но вам всегда есть чему друг у друга поучиться. Может быть это окажется не самым подходящим стечением обстоятельств для плодотворного обмена или обсуждения идей. Это нормально. Будет ещё много случаев. И даже если и не будет — не расстраивайся, нельзя быть другом или учителем для всех. Не следует лишь обзаводиться врагами — ваша энергия слишком ценна что бы разтрачивать её на обиды вместо того что бы учить что-нибудь интересное.

Эти сововеты не теряют своей актуальности со временем. Каждый раз когда мы узнаём что-то новое и хотим этим поделиться, мы каждый раз слышим громкие возгласы, желание всё отвергнуть и чем непрятнее услышанное, тем ожесточённее сопротивление. Но если мы будем внимательными слушателями и заботливыми учителями, то мы не только многому научим и многим поделимся, но и многое узнаем сами и просто получим море удовольствия в процессе. Перефразируя "Письмо молодому поэту" Райнера Марии Рильке — Знание поистинне хорошо тогда, когда продиктованно потребностью. На этом происхождении основывается и его ценность.