# Понедельник 87 твитов
Hello, world! На ближайшие 7 дней с вами Дмитрий Коваников (@ChShersh). Я работаю backend разработчиком на Haskell… twitter.com/i/web/status/1…
10:07Коротко о моем опыте: полгода в Holmusk в области здравоохранения, до этого 2 года занимался Haskell разработкой в… twitter.com/i/web/status/1…
10:07В свободное занимаюсь опенсорсными проектами в своей пока небольшой организации @kowainik. Помогаю развитию экосист… twitter.com/i/web/status/1…
10:07План на ближайшую неделю:
Пн: Почему Haskell
Вт: Работа и жизнь в Сингапуре
Ср: Преподавание Haskell
Чт: Экосистем… twitter.com/i/web/status/1…
Не стесняйтесь задавать любые интересующие вопросы!
Я с радостью поделюсь всеми знаниями и опытом, которые имею 😊
Однако, из-за различия в таймзонах вечером по MSK я буду спать,
из-за чего отвечать на вопросы в это время будет затруднительно 😴
@backendsecret Штоа такое монады
Видимо, любой Haskell разработчик должен ответить на этот вопрос 😂
Однако не переживайте, я подготовился к нему зар… twitter.com/i/web/status/1…
Когда события в @backendsecret развиваются слишком быстро... pic.twitter.com/1nTom59YYE
10:49Сейчас будет тред о том, почему лично мне нравится Haskell. Я не буду говорить, что абсолютно каждый должен писать… twitter.com/i/web/status/1…
12:061. Статическая типизация. Она позволяет предотвращать большой класс ошибок без необходимости писать тесты в режиме… twitter.com/i/web/status/1…
12:062. Выразительная система типов. Мало того, что типы есть, они еще и очень мощные. Благодаря этому намного легче сре… twitter.com/i/web/status/1…
12:063. GHC — компилятор Haskell. Многие думают, что почти все гарантии безопасности кода в Haskell происходят от типов,… twitter.com/i/web/status/1…
12:064. Выразительность и элегантность самого языка. В самом языке очень много удобных и приятных фич. Часто бывает, что… twitter.com/i/web/status/1…
12:065. Удовольствие от программирования. Мне просто в кайф использовать Haskell и на работе, и в свободное время. Ценно… twitter.com/i/web/status/1…
12:066. Невероятно легкий рефакторинг. Так как GHC бьет по рукам во время компиляции за ошибки, то можно безболезненно и… twitter.com/i/web/status/1…
12:06Перейти на новую мажорную версию компилятора с ломающими совместимость изменениями и обновить все версии библиотек… twitter.com/i/web/status/1…
12:067. Постоянный рост. В Haskell сообществе регулярно происходит что-то новое. Каждую неделю выходят новые блог посты… twitter.com/i/web/status/1…
12:06Я использую Haskell уже примерно 4 года, и до сих пор есть много всего сделанного и написанного, что можно поисследовать и поизучать.
12:06У этого эффекта есть и обратная сторона: кажется, что никогда не сможешь выучить Haskell и стать продуктивным. Но н… twitter.com/i/web/status/1…
12:068. Декомпозиция как стиль жизни. Суть этого принципа хорошо передает следующая цитата: "Динамическое программирован… twitter.com/i/web/status/1…
12:06То же самое с декомпозицией большой задачи. Мой опыт показывает, что чем меньше контекста нужно держать в голове дл… twitter.com/i/web/status/1…
12:06Чистые функции — чтобы не думать о посторонних эффектах. Иммутабельность — чтобы не думать, где переменная могла из… twitter.com/i/web/status/1…
12:06Разделение контекста и значений на уровне типов — чтобы не думать, какую часть внешнего мира изменит вызов этой фун… twitter.com/i/web/status/1…
12:06Подытожив, могу сказать, что в Haskell мне больше всего нравится то, что язык сохраняет рассудок, программирование… twitter.com/i/web/status/1…
12:06@backendsecret Сколько от груди жмешь? Присед? Становая?
К сожалению, я не занимаюсь в тренажерном зале 😞 Пока что нет времени, да и особого желания тоже нет. Или это был к… twitter.com/i/web/status/1…
12:11@backendsecret пора менять название чатика на разработчик хаскеля. Что в общем прекрасно12:14
@backendsecret Преподавание, Опенсорс и (особенно) Хаскель - расскажите, пожалуйса, как всё это удаётся совместить… twitter.com/i/web/status/1…
Когда преподавал, то почти не занимался опенсорсом, только в рамках работы. Тогда еще была удаленная работа, и было… twitter.com/i/web/status/1…
12:15@backendsecret самый большой вопрос резонно стоит на первом месте в агенде.Я пока рассматриваю хаскель в качестве х… twitter.com/i/web/status/1…
Во время production-разработки на Haskell надо уметь находить здравый баланс между использованием самых крутых и мо… twitter.com/i/web/status/1…
12:24@backendsecret Язык полезный для здоровья, однако. Рак лечит?
Если только рак головного мозга. В таком случае настоятельно рекомендую 👍 twitter.com/DolboebSempai/…
12:30@backendsecret То есть та статья про монады в википедии в чем-то врет? Вроде все просто и с примерами.
Если ты имеешь в виду эту статью, то нет, не врет. Но есть разница между правильным описанием и полезным (или даже… twitter.com/i/web/status/1…
12:35@backendsecret А раз так, то зачем все держаться за эти монады? Никто не пробовал найти мощную и в тоже время интуитивную абстракцию?
Так не всегда бывает в жизни. Как по мне, то если выбирать между мощной, но требующей времени для осознания, абстра… twitter.com/i/web/status/1…
13:04@backendsecret Стоп-стоп, как это открыта? Это же математический объект, а вся математика является результатом синт… twitter.com/i/web/status/1…
Это философский вопрос — является ли математика придуманной, или открытой. Я в лагере тех людей, которые считают, ч… twitter.com/i/web/status/1…
13:29@backendsecret Process calculus"Сколько лет прошло с начала обучения до первой работы хаскеллистом ? Какой матема… twitter.com/i/web/status/1…
Я никогда не заканчиваю обучение 😉 А по поводу математического багажа: теорию категорий, к своему глубочайшему сожа… twitter.com/i/web/status/1…
15:21@backendsecret @dbudyak Что Вы пишете на практике?
Этому будет посвящен целый завтрашний день. Но если коротко, то сейчас на работе пишем бекенд для мобильного прилож… twitter.com/i/web/status/1…
15:25Многие программисты очень скептически относятся к Haskell. Отчасти из-за этого язык не получил до сих пор такого ши… twitter.com/i/web/status/1…
15:33Например, один из самых популярных мифов заключается в том, что на этом языке не существует библиотек для решения т… twitter.com/i/web/status/1…
15:33Конечно, экосистема языка не такая развитая, как у Java или C#. Каких-то библиотек может в принципе не быть, а суще… twitter.com/i/web/status/1…
15:33Следующее распространенное поверие на деревне, что Haskell — язык для академиков. Мол, только если ты пишешь PhD по… twitter.com/i/web/status/1…
15:33Тоже бред, конечно. В интерфейсах Haskell используются концепции и идеи из алгебры, теории типов, лямбда исчисления… twitter.com/i/web/status/1…
15:33Одна из вещей, которая останавливает многих людей начать программировать на Haskell — бедный по сравнению с мейнстр… twitter.com/i/web/status/1…
15:33@backendsecret А хитрый вопрос. А почему вообще для такой задачи был выбран хаскель?
В основном из-за преимуществ Haskell, о которых я писал в другом треде. Писать на Haskell бекенд для веба — это про… twitter.com/i/web/status/1…
15:37@backendsecret Но если не понимать глубинно, то зачем все это? Это же карго-культ программирование какое-то.
А разве обязательно уметь реализовывать красно-черное дерево, чтобы использовать тип данных TreeMap в Java? Конечно… twitter.com/i/web/status/1…
15:43@backendsecret Если честно, то слушать очередную оду хаскеллю совершенно не хочется. Их тут было уже овердофига, и… twitter.com/i/web/status/1…
Какого рода грабли имеются в виду? Например, могу посоветовать, что, если вы собираетесь использовать библиотеку па… twitter.com/i/web/status/1…
15:51Сегодня день более лайтовый, чтобы дать общую картину. Более подробные технические детали, сопровождающиеся веселым… twitter.com/i/web/status/1…
15:51А на седьмой день Бог придумал интеграл и дифференциальные уравнения. twitter.com/backendsecret/…15:57
@backendsecret Неправда, по сравнению с С или Python тулинг гораздо круче
Смотря с какой стороны посмотреть. Для тех, кому очень важны такие фичи как переименовывание функции/типа во всех м… twitter.com/i/web/status/1…
16:01@backendsecret Вполне развитая, только размером поменьше.16:02
@backendsecret Реплом и наличием типизации одновременно вообще мало кто похвастаться может. Ок, Ammonite догоняет. А больше и нет никого.16:17
@AstarothAst @backendsecret это не очень интересно, т.к. толпы читателей выхватят детали и начнут их пихать в интер… twitter.com/i/web/status/1…16:18
@AstarothAst @backendsecret 4. наличие разнообразных конфликтующих между собой практик, 5. то, что известным людям… twitter.com/i/web/status/1…16:19
@backendsecret Похоже, все понимают под тулингом разные вещи. Ты упоминаешь только рефакторинг и IDE. Кому-то важне… twitter.com/i/web/status/1…16:20
@backendsecret Статические бинарники собирали ещё наши деды. Но если гоферы считают это фичей, то у Хаскеля эта фич… twitter.com/i/web/status/1…16:24
@qnikst @backendsecret backendsecret это то, чем мы его сделаем. Касательно хаскелля - про него тут уже мыто-перемы… twitter.com/i/web/status/1…
Проблема с кишочками в том, что мало людей используют язык профессионально, поэтому многие вещи просто пройдут мимо… twitter.com/i/web/status/1…
16:36Если хочется кишочков, то я могу сказать, что в нашем проекте мы используем монаду для приложения следующего вида:… twitter.com/i/web/status/1…
16:36Иногда люди в середину монадического стека добавляют трансформер ExceptT, то есть
newtype App a = App { runApp ::… twitter.com/i/web/status/1…
16:36К вопросу о монадах. Я не буду пытаться объяснять монады в общих словах. Я работаю с монадами в Haskell, и представ… twitter.com/i/web/status/1…
16:45Вместо этого я попытаюсь рассказать некоторые идеи, которые стоят за монадой в рамках языка программирования Haskel… twitter.com/i/web/status/1…
16:45В Haskell монада — это просто интерфейс. Например, вот все могут представить интерфейс для очереди? Что можно делат… twitter.com/i/web/status/1…
16:45Когда мы изучаем очередь в университете, смотрим на интерфейс очереди или пишем абстрактный интерфейс по работе с о… twitter.com/i/web/status/1…
16:45Например, простыми реализациями очереди может быть реализация на массиве или на списке. Хоть они и являются довольн… twitter.com/i/web/status/1…
16:45Они настолько разные, что единственное общее у них — очень абстрактный интерфейс, который может казаться слабо-поня… twitter.com/i/web/status/1…
16:45Переход от интерфейса очереди к какой-нибудь реализации с последующим использованием довольно короткий. Переход от… twitter.com/i/web/status/1…
16:45Еще одна вещь, которая мешает пониманию монад: достаточно точно интерфейс монады можно представить только в чистом… twitter.com/i/web/status/1…
16:45@backendsecret Вот как так получается? Послушаешь тут рассказы про хаскель - прям золото, а не язык! Серебряная пул… twitter.com/i/web/status/1…
Это просто обычный порочный круг. Никто не хочет тратить время на обучение языка, потому что он непопулярный. И он… twitter.com/i/web/status/1…
16:49@backendsecret Вот Kotlin сейчас улыбнулся :) Да и прочие гошечки и свифтики :) Сдается мне все не так просто... Во… twitter.com/i/web/status/1…
Если знаешь Java, C++, Python или C#, то выучить Kotlin, Go или Swift можно самостоятельно и довольно быстро. Языки… twitter.com/i/web/status/1…
17:05@backendsecret вакансий на хаскеле на сайтах работы мало, смотрят на это) расскажи, как ты искал работу и вот это всё
Надо просто искать не на сайтах работы 😉 Я вот нашел текущую работу на Reddit. На /r/haskell каждую неделю постят в… twitter.com/i/web/status/1…
17:07@backendsecret Сколь платят хаскеллистам в сингапуре нынче?
Дудь, разлогинься twitter.com/russianlagman/…
17:31@backendsecret Про минусы расскажете?
Пока что только воспеваем хвалу - а этого уже было очень много здесь
Моя прос… twitter.com/i/web/status/1…
Это можно. Но хочу отметить, что многие минусы являются не столько минусами языка, сколько экосистемы, и они решаем… twitter.com/i/web/status/1…
17:453. В стандартной библиотеке есть популярные частичные функции.
17:45@backendsecret Хм, а мне кажется это просто снобизм и ignorance хаскель комьюнити. Go и Kotlin имели совсем меленьк… twitter.com/i/web/status/1…
Но за Go и Kotlin также стоят очень большие компании, которые вкладывают огромные суммы денег и очень много людей в… twitter.com/i/web/status/1…
17:46@backendsecret На сайте сообщества ruhaskell.org/links.html есть ссылки на каналы, посвящённые исключительно поиску работы и работников.17:46
@backendsecret вот такой вопрос. Верно ли, что есть бизнес задачи более подходящие под ООП и более подходящие под Ф… twitter.com/i/web/status/1…
Я реализовывал на ФП совершенно разные задачи — структуры данных, фреймворки логирования, веб-приложения, компилято… twitter.com/i/web/status/1…
18:41@backendsecret Что можешь сказать про Rust?
Я на нем ничего не писал. Но писал достаточно на C и C++. То, что я слышал о Rust, меня крайне радует в том плане,… twitter.com/i/web/status/1…
18:44Кстати, мой хороший друг работает над плагином Rust для @intellijidea, и там прямо очень хороший прогресс. Рекоменд… twitter.com/i/web/status/1…
18:47@backendsecret Насколько удобно использовать сторонние библиотеки? Насколько удобно их искать? Подробнее про пункты… twitter.com/i/web/status/1…
Хочу отметить, что всегда приятно получать конкретные вопросы, на которые можно дать конструктивные ответы! twitter.com/aarexer/status…
19:19> Насколько удобно использовать сторонние библиотеки?
Чтобы добавить ее в зависимость, достаточно написать одну ст… twitter.com/i/web/status/1…
19:19> Насколько удобно их искать?
Довольно-таки удобно! Есть поисковый сервис, в котором можно вбивать названия функци… twitter.com/i/web/status/1…
19:19Про строки. Стандартный тип String в Haskell — это односвязный список символов UTF-32. Изначальная идея была в том,… twitter.com/i/web/status/1…
19:19Про частичные функции. В стандартной либе есть функция head со следующим типом:
head :: [a] -> a
Она возвращает п… twitter.com/i/web/status/1…
19:19Про исключения: в Haskell IO исключения непроверяемые, то есть в сигнатурах функций не отражены. Если документация… twitter.com/i/web/status/1…
19:19Про туториалы: например, достаточно большое приложение на Haskell трудно написать (чтобы еще и можно было поддержив… twitter.com/i/web/status/1…
19:19@backendsecret а как же hayoo? hayoo.fh-wedel.de
Он устарел. База данных давно не обновлялась. Hoogle, ссылку на который я скинул, намного быстрей подхватывает изме… twitter.com/i/web/status/1…
19:26@backendsecret ну скажем есть доменная модель, где прям напрашивается наследование или например будет стейтфул и ну… twitter.com/i/web/status/1…
Я пока с такой доменной моделью не сталкивался 🙂 Наследование через композицию эмулируется без особых проблем. Каса… twitter.com/i/web/status/1…
19:29@backendsecret По-моему, не UTF-32, а UCS-32.19:46
Закончить день хочется напоминанием про Hacktoberfest: ежегодное событие, которое призывает людей контрибьютить в о… twitter.com/i/web/status/1…
20:13В частности, в своей опенсорс организации мы пометили кучу различных beginner-friendly задач в наших Haskell репози… twitter.com/i/web/status/1…
20:13People don't change20:32
# Вторник 88 твитов
@backendsecret Нужно ли как-то знать теорию категорий для разработки? Прошёл курс о двух частях на stepik, основные… twitter.com/i/web/status/1…
Нет, теорию категорий знать не нужно! Я уже писал в одном треде, что она не является основным понятием, а ее знание… twitter.com/i/web/status/1…
4:32Сегодняшний день будет посвящен моей текущей работе, более подробному описанию архитектуры и библиотек, которые мы… twitter.com/i/web/status/1…
7:02@AstarothAst @backendsecret > "ребята, вот это грабли, имейте ввиду, прыгнуть на них - БОЛЬНО"7:33Ок. Ребята, ленивая… twitter.com/i/web/status/1…
@AstarothAst @backendsecret К счастью, существуют техники, препятствующие возникновению space leaks. Кроме того, ес… twitter.com/i/web/status/1…
Более того, на ICFP 2018 недавно представляли доклад про библиотеку StrictCheck, которая позволяет декларативным сп… twitter.com/i/web/status/1…
7:35Сначала о том, как я попал на работу. Когда я наткнулся на объявление на Reddit, я увидел в этой возможности решени… twitter.com/i/web/status/1…
9:20Сингапур очень футуристичный город. А еще английский здесь является государственным языком. Поэтому решение о перее… twitter.com/i/web/status/1…
9:20К тому же, на прошлой работе я начинал сильно выгорать, мне хотелось развиваться в другой области, а заодно выбрать… twitter.com/i/web/status/1…
9:20Чтобы получить работу, я прошел через 4 интервью:
9:20Забавный факт: на эту позицию собеседовался человек с PhD, который законтрибьютил одну из продвинутых фич в компиля… twitter.com/i/web/status/1…
9:20Очень понравился визовый процесс в Сингапур. Он проходит полностью онлайн, а большая часть работы делается компание… twitter.com/i/web/status/1…
9:20К сожалению, у меня процесс занял месяц, потому что иногда выбирают случайных людей и устраивают дополнительную про… twitter.com/i/web/status/1…
9:20@backendsecret А вот стоит к примеру мне студенту заканчивающему универ браться за изучение haskell? Или лучше выуч… twitter.com/i/web/status/1…
Сложный вопрос. Я бы порекомендовал начинать изучать Haskell раньше, если есть возможность, потому что с наличием п… twitter.com/i/web/status/1…
9:29@backendsecret расскажи про culture fit. как это выглядит с их стороны и с твоей?
Если коротко, то спрашивали, выживу ли я в Азии 😅 Имел ли я опыт общения с людьми с другим менталитетом, как я отно… twitter.com/i/web/status/1…
9:48Это было довольно неформальное интервью в виде диалога. Просто рассказывали, что меня ждет и смотрели на мою реакци… twitter.com/i/web/status/1…
9:48@backendsecret Выучить haskell, уехать в Сингапур, звучит как неплохой план xD9:49
@backendsecret Насколько трудно человеку будет влиться в ФП после ООП? У нас на парах преподают ООП и мне после ФП… twitter.com/i/web/status/1…
По опыту могу сказать, что довольно трудно. Надо сильно перестроить мозг и начать думать по-другому. Да и ФП в разн… twitter.com/i/web/status/1…
9:51@backendsecret без высшего образования возможна релокация?
Мне неизвестно, насколько надо быть крутым, чтобы взяли без диплома. Министерство труда жестко проверяет документы.… twitter.com/i/web/status/1…
9:57У меня есть вакансии: Solidity developer, UI/UX специалист, SMM специалист, Python + NodeJS разработчик… twitter.com/i/web/status/1…9:58
@backendsecret А можете рассказать сильно ли бьет по перформансу работа с immutable data structure, когда вместо му… twitter.com/i/web/status/1…
Не сильно. В GHC реализован сборщик мусора, который более оптимизирован для иммутабельных типов данных. Если компил… twitter.com/i/web/status/1…
10:03@backendsecret Грубо говоря, забудьте даже думать про хаскель, пока у вас зарплата меньше 2k€, а то превратитесь в… twitter.com/i/web/status/1…
Не хочу спорить, но лишь скажу, что я знаю несколько людей с совершенно разным бэкграундом, которые выучили Haskell… twitter.com/i/web/status/1…
10:07@backendsecret Может пропустила... а кроме Haskell у вас в арсенале какие языки?
Чтобы вы переписали на haskell (т… twitter.com/i/web/status/1…
Кроме Haskell я знаю следующие языки на хорошем уровне: Idris, Java, Kotlin, C, C++
На менее продвинутом: Asm, C#,… twitter.com/i/web/status/1…
Касательно переписать: я бы хотел операционную систему на Rust, а все остальное уже можно на Haskell 🙂
По поводу п… twitter.com/i/web/status/1…
10:19@backendsecret Не посоветуете какой-нибудь материал для тех кто переходит например с ООП на Java и C++ на ФП Haskel… twitter.com/i/web/status/1…
Трудно подсказать что-то для изучения чистого ФП. Лично я считаю, что ФП — программирование, где в основной фокус с… twitter.com/i/web/status/1…
10:31В ООП же в основной фокус ставятся объекты, то есть должно быть просто композировать их. Отсюда и такие специфичные… twitter.com/i/web/status/1…
10:31@backendsecret Не наскучило за полгода в Сингапуре? Смещение распределения национальностей не раздражает?
Жить в Сингапуре довольно неплохо на самом деле. По началу было неловко. Сингапур — азиатская Америка. Тут очень мн… twitter.com/i/web/status/1…
10:58Прежде чем описывать архитектуру, расскажу про сам проект. Один из основных продуктов, над которым мы работаем — мо… twitter.com/i/web/status/1…
11:28Коротко, суть заключается в том, что люди отправляют через приложения измерения веса, данные с Fitbit, глюкозы в кр… twitter.com/i/web/status/1…
11:28Идея такого подхода в том, что если менять образ жизни резко, то это не сработает в долгосрочной перспективе. Если… twitter.com/i/web/status/1…
11:28Диетологи же предлагают маленькие шажочки, которым просто следовать. Например, "попробуй в следующий раз положить п… twitter.com/i/web/status/1…
11:28Вообще, в Сингапуре очень помешаны на здоровом образе жизни. В правительстве коррупции нет, очень много денег идет… twitter.com/i/web/status/1…
11:28@snpefk @backendsecret В случае если используются иммутабельные структуры, то в GC возможны значительные оптимизаци… twitter.com/i/web/status/1…11:49
@snpefk @backendsecret так же часто в immutable структурах используются древовидные структуры, позволяющие обновлят… twitter.com/i/web/status/1…11:50
@snpefk @backendsecret Иногда конечно возволить себе этого нельзя, но для этого есть возможность использовать измен… twitter.com/i/web/status/1…11:50
@backendsecret Как там в плане безопасности/криминогенности ?
В Сингапуре очень безопасно! Преступности почти нет. Люди тут даже двери в свои дома не запирают, потому что никто… twitter.com/i/web/status/1…
11:51Сейчас будет долгожданный и очень большой тред про то, какие технологии мы используем в разработке GlycoLeap.
14:02Наша команда состоит из 5 человек:
• Тимлид, он же CTO, он же DevOps
• Разработчик мобильного приложения
• 2 backen… twitter.com/i/web/status/1…
Haskell-разработчики были наняты специально для того, чтобы полностью переписать бекенд с Node.js на Haskell. Сейча… twitter.com/i/web/status/1…
14:02Решение о переписывании старого бекенда с Node.js на Haskell было принято в связи с тем, что приложение становилось… twitter.com/i/web/status/1…
14:02К тому же на основе этой платформы хотелось реализовать другие различные системы и интеграции с другими сервисами,… twitter.com/i/web/status/1…
14:02Известно, что Haskell очень хорошо подходит для бекенда, и у текущего CTO был раньше некоторый опыт разработки на H… twitter.com/i/web/status/1…
14:02Если кого-то интересуют конкретные цифры: предыдущий бекенд, разработанный на Node.js в течении 3 лех был полностью… twitter.com/i/web/status/1…
14:02Мобильные приложения пишутся на языке программирования Dart при помощи платформы Flutter. Это позволяет писать один… twitter.com/i/web/status/1…
14:02Раньше была отдельная команда на Swift для iOS и на Java для Android, но кооперировать обе команды было тяжело. В к… twitter.com/i/web/status/1…
14:02Мобильным приложением пользуются юзеры, а веб-приложением пользуются диетологи. Веб был написан на JavaScript с исп… twitter.com/i/web/status/1…
14:02Теперь баззворды про архитектуру бекенда:
• БД — PostgreSQL
• Amazon сервисы — SQS, SES и S3
• общение с вебом — J… twitter.com/i/web/status/1…
Люди присылают фотографии еды, но фотографии не хранятся в PostgreSQL БД. Вместо этого они хранятся на облачном хра… twitter.com/i/web/status/1…
14:02Раньше они генерировались через шелловский вызов CLI утилиты convert, но сейчас используется Haskell библиотека hip… twitter.com/i/web/status/1…
14:02Amazon сервис SES используется для отправки электронным писем пользователям. Письма красивые, c HTML. Все шаблоны п… twitter.com/i/web/status/1…
14:02SQS (это очередь) используется для хранения всех работ и балансировки нагрузки. Например, когда юзер отправляет фот… twitter.com/i/web/status/1…
14:02Вместо того, чтобы сразу выполнять все эти запросы на бекенде, они просто отправляются в очередь. А затем уже подня… twitter.com/i/web/status/1…
14:02Это модель хорошо ложится на Haskell, потому что можно представить работы как алгебраический тип данных
data JobTy… twitter.com/i/web/status/1…
14:02Protobuf был выбран по нескольким причинам. Одна из — можно описать структуру всех сообщений в одном месте, а затем… twitter.com/i/web/status/1…
14:02@backendsecret Почему Elm? Зачем вообще уходить с JavaScript на клаентсайде?
Есть очевидная причина — Elm статически и строго типизированный и поддерживает классные фичи как параметрический по… twitter.com/i/web/status/1…
15:00@backendsecret Ещё любопытно про визы, требование диплома по специальности, налоги, особенности, если не трудно. В… twitter.com/i/web/status/1…
Налоги очень низкие. Про требование диплома по специальности не знаю. У меня диплом по специальности. Рабочие визы… twitter.com/i/web/status/1…
15:06@backendsecret A ReasonML почему не подошёл?
Решение о выборе Elm в качестве фронтенда еще было принято до меня. В пользу этого выбора еще скажу, что на Haskell… twitter.com/i/web/status/1…
15:18@backendsecret У Вадлера есть еще классный доклад15:52
youtube.com/watch?v=FiflFi…
Отдельным тредом напишу про Haskell библиотеки, которые мы используем. Чтобы люди из пещеры не думали, будто мы на… twitter.com/i/web/status/1…
16:14В качестве библиотеки по работе с БД используем postgresql-simple. Никакого ORM, просто пишем сырые запросы на SQL.
hackage.haskell.org/package/postgr…
В качестве веб-фреймворка используем servant. Это библиотека позволяет задавать все Web API как тип, используя прод… twitter.com/i/web/status/1…
16:14Для работы с Amazon сервисами — семейство библиотек amazonka
hackage.haskell.org/package/amazon…
Пуш-нотификации осуществляются при помощи Firebase, а Haskell-библиотека для этого — fcm-client
hackage.haskell.org/package/fcm-cl…
Для мониторинга состояния сервера используем ekg. Эта библиотека позволяет мониторить потребляемое время и память в… twitter.com/i/web/status/1…
16:14Для парсинга JSON используем популярную либу aeson
hackage.haskell.org/package/aeson
Чтобы сделать процесс разработки более удобным, мы, как и любая приличная компания, используем альтернативный Prelu… twitter.com/i/web/status/1…
16:14Для аутентификации — JWT
hackage.haskell.org/package/jwt
Для хеширования паролей в БД — bcrypt
hackage.haskell.org/package/bcrypt
В качестве supervision trees в стиле Erlang — capataz
hackage.haskell.org/package/capataz
Конфигурация проекта задается в файле в формате TOML, и для этого как раз используется моя библиотека tomland
hackage.haskell.org/package/tomland
В качестве тестового фреймворка используем фреймворк tasty
hackage.haskell.org/package/tasty
Для декларативного описания юнит-тестов используем библиотеку hspec
hackage.haskell.org/package/hspec
А для property-based тестирования используем Hedgehog
hackage.haskell.org/package/hedgeh…
@aarexer @batyshkaLenin @AstarothAst @backendsecret Вопрос не очень конкретен, но отвечу. Да, Haskell даёт большую… twitter.com/i/web/status/1…16:38
@backendsecret Например, как это выглядит?
Какой-нибудь пример сервиса, репозитория - как это выглядит на практике?
Репозиторий с продуктом приватный. Но могу поделиться ссылкой на открытый репозиторий, который содержит примерный ш… twitter.com/i/web/status/1…
16:43@backendsecret А как обстоят дела с транзитивными зависимостями? Как вот у нас в Java есть jar-hell
Как там у вас дела?
Haskell библиотека должна указывать диапазон версий для каждой своей зависимости. Билд тулы стараются найти такой н… twitter.com/i/web/status/1…
16:46@backendsecret Да как же так? Разрабы на дс стоят как грязь. Их валом везле. Ты хочешь сказать, что основаная причн… twitter.com/i/web/status/1…
Найти могут. Но чтобы поддерживать большой проект на JS надо больше людей, времени и сил, чем на Haskell. При равно… twitter.com/i/web/status/1…
16:51@dshevchenko_biz @backendsecret @aarexer @batyshkaLenin @AstarothAst А быстро писать можно? Если надо наговнокодить не включая мозг?
Haskell – это именно тот язык, на котором можно быстро кодить, не включая мозг, потому что GHC все глупые ошибки от… twitter.com/i/web/status/1…
16:54@backendsecret Только эти 10 на жс будут суммарно стоить в два раза дешевле чем те двое на хаскеле.
Например, в Сингапуре это неправда. Тут очень дорого жить. Поэтому 10 разработчиков на JS будут стоить дороже 2 раз… twitter.com/i/web/status/1…
16:57@backendsecret А почему не QuickCheck? Чем не подошёл? Худше/лучше, etc
У Hedgehog просто восхитительные сообщения об ошибках, когда тест не проходится: показывается строчка кода с контек… twitter.com/i/web/status/1…
17:52Еще важное преимущество Hedgehog: не просто выдается пример, на котором фейлится тест, но еще автоматически подбира… twitter.com/i/web/status/1…
18:07@backendsecret а можно поинтересоваться в каких областях кроме бэкенда и теории категорий haskell хорош?
Как раз сегодня опубликовали результата опроса Haskell разработчиков о состоянии экосистемы Haskell в 2018. Приведу… twitter.com/i/web/status/1…
18:23life sciences, robotics, data repositories, language design, high-performance computing, Web services, OCR, text an… twitter.com/i/web/status/1…
18:23hardware engineering, software engineering tools, Internet of Things (IOT), education, XML and JSON and other data… twitter.com/i/web/status/1…
18:23@backendsecret много тестов пишете?
Тестируем основную логику программы. Например, написал эндпоинт, который достает данные и возвращает на сервер — бу… twitter.com/i/web/status/1…
18:31@backendsecret вопрос по серванту. что нужно знать прежде чем туда суваться. Понимать комбинаторы? Что-то еще?
Да в общем-то ничего особенного. Просто иметь хорошие примеры перед глазами. Тогда можно по ходу дела разбираться.… twitter.com/i/web/status/1…
18:35@backendsecret Имхо, ещё тут хорошо о статусе готовности экосистемы языка к тем или иным вещам. github.com/Gabriel439/pos…18:37
Закончу день парой слов про сам Сингапур. Город прям ну очень зеленый, при этом выглядит современно. Тут довольно ж… twitter.com/i/web/status/1…
18:44Город выглядит суперсовременно, везде довольно чисто и приятно. Центр города является также и бизнес-центром: очень… twitter.com/i/web/status/1…
18:44Fun fact: даже сам премьер-министр Сингапура на пенсии планирует изучать Haskell, о чем говорил в одной из своих речей.
18:44# Среда 45 твитов
Сегодняшний день будет посвящен моему опыту преподавания Haskell в университете. Расскажу про трудности преподавани… twitter.com/i/web/status/1…
10:15@argent_smith @backendsecret Неоптимизированный, правда простой сервис, чуть работы с базами, немного криптографии,… twitter.com/i/web/status/1…11:04
Начну с небольшого рассказа о том, как я начал преподавать. В конце 4ого @Tis00 предложил мне вести вместе с ним ку… twitter.com/i/web/status/1…
12:24После обсуждения этого предложения с доцентом нашей кафедры, мы начали готовить материалы. Мы изначально планировал… twitter.com/i/web/status/1…
12:24Это сложно сделать, потому что именно с Haskell можно уйти очень далеко от реального мира. Можно начать подробно ра… twitter.com/i/web/status/1…
12:24Я думаю, что со своей стороны я смог сделать практический и полезный курс. И многие люди после этого курса и правда… twitter.com/i/web/status/1…
12:24Теперь про основные трудности, с которыми столкнулся во время преподавания. Преподавать Haskell — это как быть Hask… twitter.com/i/web/status/1…
14:05Отчасти это связано со спецификой того места, где я преподавал. Отчасти из-за того, что слишком молодой преподавате… twitter.com/i/web/status/1…
14:05Очень многие люди при изучении Haskell после императивного языка вроде Java или С++ чувствуют, что вместо узнавания… twitter.com/i/web/status/1…
14:05И это не связано с тем, что Haskell — сложный язык. Поверьте, я профессионал в плане преподавания Haskell и могу об… twitter.com/i/web/status/1…
14:05Просто изучение Haskell требует думать в совершенно другом измерении, особенно когда мозг заточился на императивное… twitter.com/i/web/status/1…
14:05Когда сталкиваешься с чем-то в Haskell, то испытываешь давно забытое чувство, будто не можешь что-то понять, и сраб… twitter.com/i/web/status/1…
14:05Программисты на Haskell не гениальней программистов на других языках. Просто они побарывали этот рефлекс очень мног… twitter.com/i/web/status/1…
14:05Другая сложность в преподавании Haskell — не так много хороших ресурсов по разнообразным темам, особенно на русском… twitter.com/i/web/status/1…
14:05То есть когда у людей трудности в понимании, они не могут самостоятельно найти решение. И не из-за того, что они гл… twitter.com/i/web/status/1…
14:05Я всегда был открыт к помощи и предлагал людям в случае затруднений свои ответы на их вопросы. Но студентов человек… twitter.com/i/web/status/1…
14:05@backendsecret есть ли у вас объяснение, почему хаскелем не встают большие компании и не вливают многоденег? похожа… twitter.com/i/web/status/1…
Как по мне, то причина политическая. Если у компании есть деньги, чтобы позволить поддерживать язык, то им выгодней… twitter.com/i/web/status/1…
15:48@musuk @backendsecret Вопрос ведущему этой недели, какую ide or vim / emacs предпочитаете? Что кошерней и правоверн… twitter.com/i/web/status/1…
Лично я использую для редактирования Spacemacs — vim хоткеи + экосистема Emacs, а для быстрого получения сообщений… twitter.com/i/web/status/1…
15:55Теперь подробней про сам курс и его формат. Программа курса находится на GitHub. Слайды для презентаций сделаны при… twitter.com/i/web/status/1…
16:44Он включает в себя 16 лекций — по 4 лекции на 8 пар в месяц в течение 4ех месяцев. Программа рассчитана на плавный… twitter.com/i/web/status/1…
16:44Идеологически программа разделена на 3 части:
• Научиться писать на Haskell хоть что-нибудь
• Научиться писать на H… twitter.com/i/web/status/1…
Хочу отметить, что курс сейчас и курс 3 года назад — 2 совершенно разных курса. Каждый семестр я создавал опросы и… twitter.com/i/web/status/1…
16:44То есть получалось взаимное обучение — я обучал студентов Haskell, а сам при этом на них тренировал свой курс. От э… twitter.com/i/web/status/1…
16:44Но помимо этого еще и сам Haskell развивается. Если ничего не делать с курсом хотя бы 2 года, он перестанет быть ак… twitter.com/i/web/status/1…
16:44Не изменяется только базовое ядро языка, но только базового ядра недостаточно для серьезного программирования.
16:44Когда я начал преподавать Haskell, то еще не использовал его в production. Поэтому было одно видение касательно тог… twitter.com/i/web/status/1…
16:44Например, в начале преподавания идея рассказывать про производные типов и комонады казалось интересной и полезной,… twitter.com/i/web/status/1…
16:44Хотя потом выяснилось, что надо было просто подождать не 2 года, а 4, когда комонады в итоге на самом деле пригодились в production.
16:44Это еще одна проблема с преподаванием Haskell — чтобы курс был очень хорошим и полезным для практики, преподаватель… twitter.com/i/web/status/1…
16:44C++, Java, Android, Web, Вычислительную геометрию и другие предметы у нас в университете вели программисты с серьез… twitter.com/i/web/status/1…
16:44Быть хорошим преподавателем очень хлопотно и затратно, требует колоссального объема времени и сил, и это только для… twitter.com/i/web/status/1…
16:44Под конец расскажу про свое отношение к преподаванию, что я делал во время своего курса, чтобы сделать его самым лу… twitter.com/i/web/status/1…
18:57Для начала, я считаю, что преподаватель должен гореть страстью к своему предмету, если он хочет учить людей как мож… twitter.com/i/web/status/1…
18:57Если преподавание — это просто формальность в духе следования заранее установленным критериям оценки и формального… twitter.com/i/web/status/1…
18:57Только тогда, когда у тебя есть есть страсть к предмету, ты можешь заразить других людей энтузиазмом к нему же и к… twitter.com/i/web/status/1…
18:57Помню случай, когда для одного из самых первых заданий требовалось написать простейшие тесты любым образом, а один… twitter.com/i/web/status/1…
18:57Однако у такого отношения к своему предмету есть и обратная сторона — любая критика в сторону курса или игнорирован… twitter.com/i/web/status/1…
18:57Мне всегда хотелось смотивировать студентов заниматься Haskell, поэтому я был открыт к их разным предложениям сдела… twitter.com/i/web/status/1…
18:57Каждое домашнее задание я проверял лично у каждого человека. Мне все-таки хотелось каждому помочь, потому что у все… twitter.com/i/web/status/1…
18:57Да и когда ты сначала сам попробовал сделать задание как можешь, а только потом узнаешь правильное решение и почему… twitter.com/i/web/status/1…
18:57Все-таки курс рассчитан не на то, чтобы завалить людей, а чтобы помочь им изучить новую и незнакомую область и подт… twitter.com/i/web/status/1…
18:57Автоматическую систему проверки настроить или создать крайне сложно. К тому же курс Haskell — это не курс решения а… twitter.com/i/web/status/1…
18:57Когда преподаешь Haskell, то хочется все же научить именно хорошим практикам программирования, чтобы люди могли пис… twitter.com/i/web/status/1…
18:57Но, опять же, студентов очень много, проверять у каждого ДЗ вживую требует много времени. Когда хочешь сделать что-… twitter.com/i/web/status/1…
18:57Было грустно заканчивать курс после того, как вложил в него столько сил, времени и души. Но в жизни есть вещи и поважней 🙂
18:57# Четверг 49 твитов
Сегодня постараюсь рассказать про состояние экосистемы Haskell в данный момент, сообщество и каналы коммуникации. Г… twitter.com/i/web/status/1…
8:35@backendsecret Интересно насколько на хаскеле вышло выразительнее, т.е. сколько строк кода было на JS и сколько стало после переписывания.
Если кому-то тоже интересны числа:
• Прошлый бекенд на JS: 61000+ строка кода, из которых примерно 39000 – только… twitter.com/i/web/status/1…
9:16Позавчера я составил тред со списком библиотек, которые мы используем в production, поэтому я надеюсь, что у людей… twitter.com/i/web/status/1…
10:39Буквально несколько лет назад использовать Haskell для продакшена было бы крайне рисковым занятием. Даже проект с з… twitter.com/i/web/status/1…
10:39Отчасти это объясняет, почему Haskell не такой популярный сейчас — языку в продакшене не 30 лет, а всего 3 года. То… twitter.com/i/web/status/1…
10:39У текущих библиотек не всегда отличная документация, но это не всегда проблема. Типы помогают. Они не заменяют доку… twitter.com/i/web/status/1…
10:40Одна из острых проблем — раскол сообщества. Существуют две основные конкурирующие и враждующие билд тулы для Haskel… twitter.com/i/web/status/1…
10:40Это, конечно, не очень хорошо, потому что вместо объединения сил над одним инструментом люди враждуют и фиксят одни… twitter.com/i/web/status/1…
10:40Другая проблема, что порой бывает, когда для решения какой-то задачи существует несколько библиотек, но причем все… twitter.com/i/web/status/1…
10:40От этого бывает больно. Но также в довольно многих библиотеках мейнтейнеры отвечают на issue меньше чем за день и д… twitter.com/i/web/status/1…
10:40@backendsecret А как в таких ситуациях выбирать "лучшую" библиотеку? На какие критерии смотреть?
В первую очередь я смотрю, насколько проект мертвый или живой: есть ли недавние комментарии под issue, как давно бы… twitter.com/i/web/status/1…
11:20Я упоминал раньше, что библиотеки не всегда содержат абсолютно полный арсенал фич, подходящих для решения всех проб… twitter.com/i/web/status/1…
13:06Для одного из сторонних проектов мы изначально решили использовать SQLite в качестве БД. И мы начали работу над про… twitter.com/i/web/status/1…
13:06Но в середине работы над продуктом выяснилось, что заказчикам по некоторым причинам важно использовать именно MySQL… twitter.com/i/web/status/1…
13:06Но поддержка фич у этих библиотек разная. Например, sqlite-simple поддерживает именованные параметры для prepared s… twitter.com/i/web/status/1…
13:06С другой стороны, в mysql-simple реализованы типы для того, чтобы проверять вхождение элемента в список или вставля… twitter.com/i/web/status/1…
13:06Так как экосистема в Haskell довольно молодая, то не для всех задач бывают библиотеки. Снова приведу пример, с которым столкнулся на работе.
15:02Мы работам над двумя проектами, которые являются веб-серверами. И одному из них надо забирать данные с другого. Но… twitter.com/i/web/status/1…
15:02Но оказалось, что нет библиотеки, которая позволяет клиенту автоматически подписывать каждый исходящий реквест при… twitter.com/i/web/status/1…
15:02Это было проблемой, но она решилась довольно быстро. Мы с коллегой по работе буквально за пару дней написали такую… twitter.com/i/web/status/1…
15:02На это ушло не так много времени, но зато в итоге:
15:02Обычно мы стараемся помогать экосистеме Haskell и опенсорсу: создавать issue, комментировать под релевантными и даж… twitter.com/i/web/status/1…
15:02@backendsecret Т.е. хаскел в 4 раза выразительнее? А можно примеры кода для сравнения?Потом, если вы не покрывает… twitter.com/i/web/status/1…
Весь код покрыт тестами. Пример для сравнения: есть такой тип данных с фантомным типом
newtype Id a = Id { unId ::… twitter.com/i/web/status/1…
16:10Теперь расскажу про сообщество и общение с другими хаскеллистами. Лично я считаю, что ограждать себя от сообщества… twitter.com/i/web/status/1…
17:07Если хочется читать новости, но не хочется общаться с людьми, то рекомендую подписаться на рассылку Haskell Weekly:
haskellweekly.news
Второй по значимости и объему точкой соприкосновения с хаскеллистами по всему миру является /r/haskell на Reddit:
reddit.com/r/haskell/
Там происходят анонсы библиотек, блог-постов, событий в разработке GHC, обсуждение разнообразных тем из мира Haskel… twitter.com/i/web/status/1…
17:07Если хочется задать какой-то вопрос по Haskell (не компилируется код, не получается решить вот такую проблему таким… twitter.com/i/web/status/1…
17:07Страница @ruHaskell с ресурсами содержит ссылки на разные чаты: русско- и англоязычные в Telegram, в Gitter, и друг… twitter.com/i/web/status/1…
17:07Также по-прежнему очень много людей сидит на IRC в каналах #haskell и других. Если вы окей с тем, чтобы пользоватьс… twitter.com/i/web/status/1…
17:07Много хаскеллистов сидят и пишут в Twitter. Хороший способ найти всех таких хаскеллистов — подписаться на… twitter.com/i/web/status/1…
17:07Может быть трудно представить, но довольно много людей сидят на StackOverflow. Если у вас возникают вопросы по Hask… twitter.com/i/web/status/1…
17:07Я привел много источников общения, а существует еще больше. Но хочу сказать, что не обязательно участвовать во всех… twitter.com/i/web/status/1…
17:07Многие думают, что у хаскеллистов синдром элитаризма и что они смотрят на остальных свысока. Когда читаешь анонсы и… twitter.com/i/web/status/1…
17:07Но то, что люди обсуждают умные вещи, еще не значит, что эти все вещи надо знать и что все они нужны в production.… twitter.com/i/web/status/1…
17:07Конечно, и в Haskell сообществе есть не самые милые и приятные люди, как и везде. Но быть хаскеллистом порой тяжело… twitter.com/i/web/status/1…
17:07Я стараюсь быть в лагере тех, кто дружелюбен к новичкам, старается улучшить экосистему, и не повышать уровень токси… twitter.com/i/web/status/1…
17:07🌊 Issue 128 of #Haskell Weekly is out now! It features content from @qnikst, @wtfunctional, @GabrielG439,… twitter.com/i/web/status/1…
Как раз вышел новый выпуск @haskellweekly. Если кому интересно, что произошло и было актуально за последнюю неделю… twitter.com/i/web/status/1…
18:40Расскажу одну небольшую веселую, но в то же время поучительную историю из production. Она связана с историей одной… twitter.com/i/web/status/1…
19:14Несколько лет назад, когда необходимо было выбирать библиотеку, мы выбрали одну, относительно популярную на то врем… twitter.com/i/web/status/1…
19:14Потом появился новый проект и, как это обычно бывает, мы применили самые лучшие, даже по сегодняшним меркам, способ… twitter.com/i/web/status/1…
19:14Это было неудобно, поэтому мы решили вынести эти вспомогательные функции в отдельный "утилитный" пакет. Меня с тех… twitter.com/i/web/status/1…
19:14Потом функций и оберток поверх библиотеки стало еще больше, и было принято решение вынести эти функции в отдельную… twitter.com/i/web/status/1…
19:14В какой-то момент потребовалось добавить что-то настолько нетривиальное, что уже было невозможно построить поверх и… twitter.com/i/web/status/1…
19:14Далее долгое время она так и развивалась, причем довольно неплохо. Добавлялись полезные функции, когда требовалось… twitter.com/i/web/status/1…
19:14Однако некоторые архитектурные решения в этой либе вызывали крайнее недовольство у некоторых людей, поэтому возникл… twitter.com/i/web/status/1…
19:14А потом в итоге библиотека оказалась заброшена, и работа над ней больше не ведется. И в одном большом проекте, в ко… twitter.com/i/web/status/1…
19:14Мне очень хотелось сделать хорошую библиотеку логирования, ибо качество текущих меня не устраивает, поэтому после т… twitter.com/i/web/status/1…
19:14Я думаю, что невозможно было бы прийти к хорошему и удобному дизайну, который на максимум использует возможности Ha… twitter.com/i/web/status/1…
19:14# Пятница 42 твита
Сегодня расскажу про опенсорс и его состояние в рамках Haskell, зачем может быть полезно им заниматься, как я стара… twitter.com/i/web/status/1…
8:54Поделюсь своими мыслями по поводу опенсорса. Считаю, что контрибьютить в опенсорсные проекты полезно, но и это надо… twitter.com/i/web/status/1…
12:08Я вообще всеми руками за то, чтобы исходный код был открытым. Не всегда получается так сделать, но лучше постаратьс… twitter.com/i/web/status/1…
12:08Это полезно и для самого продукта: сторонние люди могут смотреть, искать и даже фиксить баги, предлагать улучшения,… twitter.com/i/web/status/1…
12:08И для других людей тоже полезно: они могут изучить примененные подходы к проектированию и разработке, может быть да… twitter.com/i/web/status/1…
12:08Часто люди просят привести примеры какого-нибудь реального кода (в том числе и читатели @backendsecret), желательно… twitter.com/i/web/status/1…
12:08Например, в одной из своих библиотек я использовал некоторые нетипичные подходы, но один человек, который контрибью… twitter.com/i/web/status/1…
12:08Причем, чтобы все получали преимущества опенсорса, недостаточно просто выложить код в публичный доступ, надо еще ак… twitter.com/i/web/status/1…
12:08Еще пример: недавно, в связи с тем, что Microsoft купила GitHub, очень многие люди перенесли свои репозитории на Gi… twitter.com/i/web/status/1…
12:08Чтобы просто открыть там issue, надо было зарегистрировать аккаунт именно в их организации на Gitlab. В общем, боль… twitter.com/i/web/status/1…
12:08Лично я считаю, что чем больше людей вовлечено в разработку проекта, тем он лучше. Как вариант, чтобы привлечь как… twitter.com/i/web/status/1…
12:08У меня следующие причины тратить много времени на разработку опенсорсных библиотек и приложений:
12:08Опенсорс — это не столько про улучшения качества кода, сколько про то, чтобы вместе делать мир лучше через совершен… twitter.com/i/web/status/1…
12:08К сожалению, у контрибьюта в опенсорс есть свой порог входа. Но, к счастью, есть люди, которые помогают другим прео… twitter.com/i/web/status/1…
12:08Отдельно могу порекомендовать список OSS менторов только для Haskell:
github.com/willbasky/Awes…
В этом треде расскажу, как лично я и моя небольшая команда энтузиастов Kowainik помогаем экосистеме Haskell и опенс… twitter.com/i/web/status/1…
14:54Причины для создания организации следующие:
14:54Очень многие люди держат репозитории проектов, которые они создали, в своих личных аккаунтах на Github. Я считаю, ч… twitter.com/i/web/status/1…
14:54Если большой и популярный проект окажется заброшенным, то ничего страшного особо не случится — кто-нибудь форкнет р… twitter.com/i/web/status/1…
14:54А это значит, что если кому-то понадобится такая же библиотека, то большой шанс, что она просто будет написана зано… twitter.com/i/web/status/1…
14:54Обычно в организации все разработчики лучше осведомлены о коде различных библиотек, разработка ведется более активн… twitter.com/i/web/status/1…
14:54Многие люди при выборе библиотеки смотрят на имя автора. Чем более хорошая репутация у организации, тем больше шанс… twitter.com/i/web/status/1…
14:54Причем, если два человека работают над проектами одной организации, пускай и независимо, то популярность организаци… twitter.com/i/web/status/1…
14:54Поддерживать репозитории в организации еще проще тем, что можно в одном централизованном месте описать все workflow… twitter.com/i/web/status/1…
14:54Помочь экосистеме Haskell мне хочется не только через написание новых библиотек, но еще через обучение людей. Нам в… twitter.com/i/web/status/1…
14:54Люди работают над issue в нашей организации, а мы их менторим и помогаем — в обучении Haskell, в работе с git. В ит… twitter.com/i/web/status/1…
14:54Дам несколько советов для контрибьютеров и мейнтейнеров, которые мне кажутся очень полезными, если хочется, чтобы р… twitter.com/i/web/status/1…
14:54Контрибьютерам — прежде чем открывать pull request, крайне рекомендую обсудить желание работать над issue под соотв… twitter.com/i/web/status/1…
14:54Нередко бывают ситуации, когда люди открывают пулл-реквесты, а в итоге подразумевалось не то, или автор библиотеки… twitter.com/i/web/status/1…
14:54Быть мейнтейнером опенсорсного проекта довольно тяжело, потому что это требует не только технических навыков, но ещ… twitter.com/i/web/status/1…
14:54На заметку мейнтейнерам:
14:541. Документация для проекта: понятный README с описанием проекта, документация для функций, туториалы
14:543. Шаблон для PR: не все проверяет CI, поэтому неплохо написать несколько пунктов, которые вы хотите увидеть в кажд… twitter.com/i/web/status/1…
14:545. Писать более подробное описание для создаваемых issue и расставлять теги, чтобы людям было лучше понятно, над че… twitter.com/i/web/status/1…
14:54После того, как я смотивировал всех заниматься опенсорсом, расскажу про состояние опенсорса в Haskell, и, самое гла… twitter.com/i/web/status/1…
17:39Почти все Haskell репозитории используют систему контроля версий git и хостятся на GitHub. Но сейчас еще можно встр… twitter.com/i/web/status/1…
17:39Не секрет, что во многих библиотеках на Haskell не самая лучшая документация. Поэтому вклад в виде улучшения докуме… twitter.com/i/web/status/1…
17:39Вторым по важности вкладом может быть добавление тестов. Это заблуждение, что типы полностью спасают от тестов. Они… twitter.com/i/web/status/1…
17:39В одном из своих проектов для увеличения корректности кода я использую zero-cost обертки, зависимые типы, доказател… twitter.com/i/web/status/1…
17:39Еще одним важным улучшением является добавление бенчмарков. Всегда полезно обладать знаниями о перформансе той или… twitter.com/i/web/status/1…
17:39Обычно в Haskell репозиториях всегда есть, что поделать, ибо нет предела совершенству. Не стесняйтесь открывать нов… twitter.com/i/web/status/1…
17:39Пользуясь случаем, еще раз напомню, что всегда можно присоединиться к нашим проектам в рамках Hacktoberfest. За пер… twitter.com/i/web/status/1…
17:39# Суббота 37 твитов
Сегодня постараюсь поделиться источниками информации и материалами, по которым, на мой взгляд, лучше всего изучать… twitter.com/i/web/status/1…
12:07На данный момент самым эффективным способом выучить и полюбить Haskell является наличие персонального ментора. Не в… twitter.com/i/web/status/1…
13:28Сразу хочу предупредить, что Haskell нельзя выучить просто читая туториалы или мануалы. Особенно после императивног… twitter.com/i/web/status/1…
13:28Например, когда я изучал Kotlin 4 года назад, то достаточно было прочитать официальный гайд. После Java язык казалс… twitter.com/i/web/status/1…
13:28Причем дело не в том, что Haskell сложный. Просто другой. А когда изучаешь что-то новое, то автоматически пытаешься… twitter.com/i/web/status/1…
13:28Для начала могу порекомендовать свой туториал по билд-тулам, который рассказывает, откуда достать компилятор GHC, к… twitter.com/i/web/status/1…
13:28Русскоязычному сообществу доступен очень хороший курс от @deniok на Stepik. Есть две части этого курса, для прохожд… twitter.com/i/web/status/1…
13:28Если же вам удобней заниматься по книжкам, то рекомендую Get Programming with Haskell. Я слышал много положительных… twitter.com/i/web/status/1…
13:28Альтернативно, в качестве введения в основы Haskell порекомендую вот этот курс. Мне кажется, что он дает оптимальну… twitter.com/i/web/status/1…
13:28У этого курса есть более новая версия, в которой задания более современные и дается чуть больше, но мне почему-то о… twitter.com/i/web/status/1…
13:28Чтобы достаточно хорошо подготовиться к пониманию монад, неплохо сначала понимать Higher Kinded Types и конструктор… twitter.com/i/web/status/1…
13:28Для первичного понимания монад хорошо подойдет другая моя лекция. На одном слайде там аж целых 5 паттернов функцион… twitter.com/i/web/status/1…
13:28Достаточно важно уметь работать с IO (и даже необязательно понимать, почему это монада). Вот эта глава из Haskell W… twitter.com/i/web/status/1…
13:28Как я и говорил, недостаточно просто изучать материал, необходимо также решать практические задания. Поэтому поделю… twitter.com/i/web/status/1…
13:28Вот больше заданий на алгебраические типы данных, свертки и моноиды
hackmd.io/sCEMg7VLRjKwRl…
Вот практические упражнения на монады Maybe и список
hackmd.io/xCzgYAQ3T-qzRn…
А вот, как мне кажется, клевые упражнения на монады Reader и State и трансформеры монад
hackmd.io/PonAg-wPQQKExx…
Важным аспектом реального программирования на Haskell является многопоточное и асинхронное программирование. Для по… twitter.com/i/web/status/1…
13:28Обычно путь самостоятельного изучения какой-то темы в Haskell происходит следующим образом: гуглишь туториалы по эт… twitter.com/i/web/status/1…
13:28Ну и снова порекомендую всем общаться с сообществом и не стесняться задавать вопросы! Спрашивайте на StackOverflow,… twitter.com/i/web/status/1…
13:28Для изучения Haskell полезно решать задачи, но еще полезней, если решения будут проверяться. Посоветую несколько ме… twitter.com/i/web/status/1…
15:58Самое простое и первое место: TryHaskell. Интерактивный REPL, где можно потыкать самые основы Haskell
tryhaskell.org
Чтобы попрактиковаться в решении задач совершенно разного уровня сложности, советую обратить внимание на CodeWars.… twitter.com/i/web/status/1…
15:58Если интересуют задачи с более алгоритмическим уклоном, то можно еще попробовать что-то порешать на HackerRank.
hackerrank.com
Есть даже сайт с менторами, которые будут просматривать решения и обсуждать их с вами.
exercism.io
@backendsecret Я начинала изучать Haskell именно с этих домашек (по лекциям ИТМО), и ревью от @ChShersh были очень… twitter.com/i/web/status/1…16:37
Под конец постараюсь развенчать мифы о том, что работы на Haskell нет, и расскажу про известные мне места для поиск… twitter.com/i/web/status/1…
17:50Одним из самых основных мест для поиска работы является /r/haskell на Reddit. Каждую неделю там постят несколько ва… twitter.com/i/web/status/1…
17:50Я и сам на текущую свою работу попал через объявление на Reddit. Почти всегда в вакансиях возможна удаленная работа… twitter.com/i/web/status/1…
17:50Если нет возможности мониторить Reddit каждый день, то, опять же, можно подписаться на @haskellweekly, там в еженед… twitter.com/i/web/status/1…
17:50Вторым по значимости ресурсом является @Functionalworks. Там не только Haskell, но еще Scala, Clojure и другие.
functional.works-hub.com
Отдельным пунктом упомяну курируемый и актуальный список компаний, которые используют Haskell. На данный момент спи… twitter.com/i/web/status/1…
17:50Как по мне, если захотеть, то найти на Haskell работу даже проще, чем на другом языке. Да, на Java вакансий больше,… twitter.com/i/web/status/1…
17:50Так как на Haskell вакансий сравнительно меньше, то люди не изучают Haskell специально с целью найти работу. Поэтом… twitter.com/i/web/status/1…
17:50К тому же, так как люди не учат Haskell для работы, то если человек знает Haskell, это уже много о нем говорит. Зна… twitter.com/i/web/status/1…
17:50@backendsecret Хочу также добавить, что на /r/haskell можно не только следить за вакансиями, но также писать объявл… twitter.com/i/web/status/1…19:47
@backendsecret Codewars, кстати, отлично подходит в самом начале — освоиться с синтаксисом.19:47
В отличие от большинств… twitter.com/i/web/status/1…
# Воскресенье 22 твита
Сегодня последний день, и я расскажу про свой опыт работы удаленно и в офисе. Поскольку надо соблюдать баланс лично… twitter.com/i/web/status/1…
8:04Тема удаленной работы особенно актуальна в Haskell мире. Специалистов немного и найти их сравнительно трудней, а на… twitter.com/i/web/status/1…
9:57Трудно сказать, какой вариант работы строго лучше — удаленно или в офисе. У каждого есть свои преимущества и недост… twitter.com/i/web/status/1…
9:57На работе приходилось трекать время, и трекаешь обычно рабочее время, когда решаешь какую-то задачу. Трекать, пока… twitter.com/i/web/status/1…
9:57На самом деле это очень тяжело. Когда работаешь в офисе, то из 160 часов ты выдаешь примерно 110 на чистый кодинг.… twitter.com/i/web/status/1…
9:57Тем более, когда оплата по часам, то у тебя нет большой мотивации и сил заниматься опенсорсом и личными проектами.… twitter.com/i/web/status/1…
9:57Границы работы и личного времени становятся более размытыми. Но и гибкости при удаленной работе больше. Мне нравило… twitter.com/i/web/status/1…
9:57Сейчас я считаю, что идеально было бы работать удаленно, но с элементами офисного рабочего процесса. Когда ты кажды… twitter.com/i/web/status/1…
9:57Однако с удаленной работой не так просто найти способ остаться в другой стране. Почему-то другие страны не очень ра… twitter.com/i/web/status/1…
9:57Так что если бы работа в офисе была примерно в таком формате, то мотивации ходить на нее было бы намного больше!
9gag.com/gag/aQRqqBd
@backendsecret Команда разработчиков GitLab работает практически полностью удаленно, при этом принципы их организац… twitter.com/i/web/status/1…12:32
@backendsecret Недавно видел ссылку на группу в телеграме twitter.com/ruHaskell/stat…12:32
Дам несколько советов, которые работают для меня, как можно успевать заниматься опенсорсом и личной жизнью во время… twitter.com/i/web/status/1…
12:37Работа в офисе может выматывать, и от нее в свободное время хочется отдыхать, а не пахать где-то еще за бесплатно.… twitter.com/i/web/status/1…
12:37Спойлер: если вы работаете полный рабочий день + занимаетесь опенсорсом + есть своя организация + есть личная жизнь… twitter.com/i/web/status/1…
12:37Мне повезло в плане работы, потому что каждому члену команды дается полдня в неделю на опенсорс и самостоятельное и… twitter.com/i/web/status/1…
12:37К тому же девушка тоже относится с пониманием к увлечениям и сильно помогает в этом. Думаю, что поддержка со сторон… twitter.com/i/web/status/1…
12:37Мой недельный график в среднем примерно следующий: просыпаешься в 8 утра и борешься с желанием умереть, завтрак, оф… twitter.com/i/web/status/1…
12:37Всем спасибо, кто читал меня эту неделю! С вами был Дмитрий Коваников (@ChShersh). Если у кого-то остались вопросы… twitter.com/i/web/status/1…
15:36Также можно зафолловить мою организацию @kowainik в твиттере или в телеграме, если вам интересно получать новости о… twitter.com/i/web/status/1…
15:36Под конец хочу сказать, что вести эту неделю было довольно тяжело. Хотелось поделиться большим объемом качественног… twitter.com/i/web/status/1…
15:36Всю эту неделю я получал много хейта в адрес Haskell и лично в свой адрес, в том числе и в крайне грубых выражениях… twitter.com/i/web/status/1…
15:37# Ссылки
hackage.haskell.org
- http://hackage.haskell.org/package/postgresql-simple
- http://hackage.haskell.org/package/amazonka
- https://hackage.haskell.org/package/fcm-client
- http://hackage.haskell.org/package/aeson
- http://hackage.haskell.org/package/jwt
- http://hackage.haskell.org/package/bcrypt
- http://hackage.haskell.org/package/capataz
- http://hackage.haskell.org/package/tomland
- https://hackage.haskell.org/package/tasty
- https://hackage.haskell.org/package/hspec
- https://hackage.haskell.org/package/hedgehog
other
- https://ruhaskell.org/links.html
- https://rakhim.org/honestly-undefined/8/
- https://www.youtube.com/watch?v=FiflFiZ6pPI
- https://github.com/Gabriel439/post-rfc/blob/master/sotu.md
- https://github.com/paul-rouse/mysql-simple/issues/49
- https://github.com/willbasky/Awesome-list-of-Haskell-mentors
- https://www.fpcomplete.com/blog/2018-haskell-survey-results
- http://www.haskellforall.com/2013/05/program-imperatively-using-haskell.html
- https://haskellweekly.news/
- https://www.reddit.com/r/haskell/
- https://hackmd.io/sCEMg7VLRjKwRlhQDYt4iA
- https://hackmd.io/xCzgYAQ3T-qzRnPdi6NWHw
- https://hackmd.io/PonAg-wPQQKExxHYzfstyA
- https://www.tryhaskell.org/
- https://www.hackerrank.com/
- https://exercism.io/
- https://functional.works-hub.com/
- https://9gag.com/gag/aQRqqBd