ChShersh

8 октября 2018, Singapore

# Понедельник 87 твитов

Hello, world! На ближайшие 7 дней с вами Дмитрий Коваников (@ChShersh). Я работаю backend разработчиком на Haskell… twitter.com/i/web/status/1…

7:07

Коротко о моем опыте: полгода в Holmusk в области здравоохранения, до этого 2 года занимался Haskell разработкой в… twitter.com/i/web/status/1…

7:07

В свободное занимаюсь опенсорсными проектами в своей пока небольшой организации @kowainik. Помогаю развитию экосист… twitter.com/i/web/status/1…

7:07

План на ближайшую неделю:

Пн: Почему Haskell
Вт: Работа и жизнь в Сингапуре
Ср: Преподавание Haskell
Чт: Экосистем… twitter.com/i/web/status/1…

7:07

Не стесняйтесь задавать любые интересующие вопросы!
Я с радостью поделюсь всеми знаниями и опытом, которые имею 😊

7:07

Однако, из-за различия в таймзонах вечером по MSK я буду спать,
из-за чего отвечать на вопросы в это время будет затруднительно 😴

7:07
@backendsecret Штоа такое монады

Видимо, любой Haskell разработчик должен ответить на этот вопрос 😂
Однако не переживайте, я подготовился к нему зар… twitter.com/i/web/status/1…

7:24

Когда события в @backendsecret развиваются слишком быстро... pic.twitter.com/1nTom59YYE

7:49

Сейчас будет тред о том, почему лично мне нравится Haskell. Я не буду говорить, что абсолютно каждый должен писать… twitter.com/i/web/status/1…

9:06

1. Статическая типизация. Она позволяет предотвращать большой класс ошибок без необходимости писать тесты в режиме… twitter.com/i/web/status/1…

9:06

2. Выразительная система типов. Мало того, что типы есть, они еще и очень мощные. Благодаря этому намного легче сре… twitter.com/i/web/status/1…

9:06

3. GHC — компилятор Haskell. Многие думают, что почти все гарантии безопасности кода в Haskell происходят от типов,… twitter.com/i/web/status/1…

9:06

4. Выразительность и элегантность самого языка. В самом языке очень много удобных и приятных фич. Часто бывает, что… twitter.com/i/web/status/1…

9:06

5. Удовольствие от программирования. Мне просто в кайф использовать Haskell и на работе, и в свободное время. Ценно… twitter.com/i/web/status/1…

9:06

6. Невероятно легкий рефакторинг. Так как GHC бьет по рукам во время компиляции за ошибки, то можно безболезненно и… twitter.com/i/web/status/1…

9:06

Перейти на новую мажорную версию компилятора с ломающими совместимость изменениями и обновить все версии библиотек… twitter.com/i/web/status/1…

9:06

7. Постоянный рост. В Haskell сообществе регулярно происходит что-то новое. Каждую неделю выходят новые блог посты… twitter.com/i/web/status/1…

9:06

Я использую Haskell уже примерно 4 года, и до сих пор есть много всего сделанного и написанного, что можно поисследовать и поизучать.

9:06

У этого эффекта есть и обратная сторона: кажется, что никогда не сможешь выучить Haskell и стать продуктивным. Но н… twitter.com/i/web/status/1…

9:06

8. Декомпозиция как стиль жизни. Суть этого принципа хорошо передает следующая цитата: "Динамическое программирован… twitter.com/i/web/status/1…

9:06

То же самое с декомпозицией большой задачи. Мой опыт показывает, что чем меньше контекста нужно держать в голове дл… twitter.com/i/web/status/1…

9:06

Чистые функции — чтобы не думать о посторонних эффектах. Иммутабельность — чтобы не думать, где переменная могла из… twitter.com/i/web/status/1…

9:06

Разделение контекста и значений на уровне типов — чтобы не думать, какую часть внешнего мира изменит вызов этой фун… twitter.com/i/web/status/1…

9:06

Подытожив, могу сказать, что в Haskell мне больше всего нравится то, что язык сохраняет рассудок, программирование… twitter.com/i/web/status/1…

9:06
@backendsecret Сколько от груди жмешь? Присед? Становая?

К сожалению, я не занимаюсь в тренажерном зале 😞 Пока что нет времени, да и особого желания тоже нет. Или это был к… twitter.com/i/web/status/1…

9:11
@backendsecret пора менять название чатика на разработчик хаскеля. Что в общем прекрасно
9:14
@backendsecret Преподавание, Опенсорс и (особенно) Хаскель - расскажите, пожалуйса, как всё это удаётся совместить… twitter.com/i/web/status/1…

Когда преподавал, то почти не занимался опенсорсом, только в рамках работы. Тогда еще была удаленная работа, и было… twitter.com/i/web/status/1…

9:15
@backendsecret самый большой вопрос резонно стоит на первом месте в агенде.Я пока рассматриваю хаскель в качестве х… twitter.com/i/web/status/1…

Во время production-разработки на Haskell надо уметь находить здравый баланс между использованием самых крутых и мо… twitter.com/i/web/status/1…

9:24
@backendsecret Язык полезный для здоровья, однако. Рак лечит?

Если только рак головного мозга. В таком случае настоятельно рекомендую 👍 twitter.com/DolboebSempai/…

9:30
@backendsecret То есть та статья про монады в википедии в чем-то врет? Вроде все просто и с примерами.

Если ты имеешь в виду эту статью, то нет, не врет. Но есть разница между правильным описанием и полезным (или даже… twitter.com/i/web/status/1…

9:35
@backendsecret А раз так, то зачем все держаться за эти монады? Никто не пробовал найти мощную и в тоже время интуитивную абстракцию?

Так не всегда бывает в жизни. Как по мне, то если выбирать между мощной, но требующей времени для осознания, абстра… twitter.com/i/web/status/1…

10:04
@backendsecret Стоп-стоп, как это открыта? Это же математический объект, а вся математика является результатом синт… twitter.com/i/web/status/1…

Это философский вопрос — является ли математика придуманной, или открытой. Я в лагере тех людей, которые считают, ч… twitter.com/i/web/status/1…

10:29
@backendsecret Process calculus"

Сколько лет прошло с начала обучения до первой работы хаскеллистом ? Какой матема… twitter.com/i/web/status/1…

Я никогда не заканчиваю обучение 😉 А по поводу математического багажа: теорию категорий, к своему глубочайшему сожа… twitter.com/i/web/status/1…

12:21
@backendsecret @dbudyak Что Вы пишете на практике?

Этому будет посвящен целый завтрашний день. Но если коротко, то сейчас на работе пишем бекенд для мобильного прилож… twitter.com/i/web/status/1…

12:25

Многие программисты очень скептически относятся к Haskell. Отчасти из-за этого язык не получил до сих пор такого ши… twitter.com/i/web/status/1…

12:33

Например, один из самых популярных мифов заключается в том, что на этом языке не существует библиотек для решения т… twitter.com/i/web/status/1…

12:33

Конечно, экосистема языка не такая развитая, как у Java или C#. Каких-то библиотек может в принципе не быть, а суще… twitter.com/i/web/status/1…

12:33

Следующее распространенное поверие на деревне, что Haskell — язык для академиков. Мол, только если ты пишешь PhD по… twitter.com/i/web/status/1…

12:33

Тоже бред, конечно. В интерфейсах Haskell используются концепции и идеи из алгебры, теории типов, лямбда исчисления… twitter.com/i/web/status/1…

12:33

Одна из вещей, которая останавливает многих людей начать программировать на Haskell — бедный по сравнению с мейнстр… twitter.com/i/web/status/1…

12:33
@backendsecret А хитрый вопрос. А почему вообще для такой задачи был выбран хаскель?

В основном из-за преимуществ Haskell, о которых я писал в другом треде. Писать на Haskell бекенд для веба — это про… twitter.com/i/web/status/1…

12:37
@backendsecret Но если не понимать глубинно, то зачем все это? Это же карго-культ программирование какое-то.

А разве обязательно уметь реализовывать красно-черное дерево, чтобы использовать тип данных TreeMap в Java? Конечно… twitter.com/i/web/status/1…

12:43
@backendsecret Если честно, то слушать очередную оду хаскеллю совершенно не хочется. Их тут было уже овердофига, и… twitter.com/i/web/status/1…

Какого рода грабли имеются в виду? Например, могу посоветовать, что, если вы собираетесь использовать библиотеку па… twitter.com/i/web/status/1…

12:51

Сегодня день более лайтовый, чтобы дать общую картину. Более подробные технические детали, сопровождающиеся веселым… twitter.com/i/web/status/1…

12:51
А на седьмой день Бог придумал интеграл и дифференциальные уравнения. twitter.com/backendsecret/…
12:57
@backendsecret Неправда, по сравнению с С или Python тулинг гораздо круче

Смотря с какой стороны посмотреть. Для тех, кому очень важны такие фичи как переименовывание функции/типа во всех м… twitter.com/i/web/status/1…

13:01
@backendsecret Вполне развитая, только размером поменьше.
13:02
@backendsecret Реплом и наличием типизации одновременно вообще мало кто похвастаться может. Ок, Ammonite догоняет. А больше и нет никого.
13:17
@AstarothAst @backendsecret это не очень интересно, т.к. толпы читателей выхватят детали и начнут их пихать в интер… twitter.com/i/web/status/1…
13:18
@AstarothAst @backendsecret 4. наличие разнообразных конфликтующих между собой практик, 5. то, что известным людям… twitter.com/i/web/status/1…
13:19
@backendsecret Похоже, все понимают под тулингом разные вещи. Ты упоминаешь только рефакторинг и IDE. Кому-то важне… twitter.com/i/web/status/1…
13:20
@backendsecret Статические бинарники собирали ещё наши деды. Но если гоферы считают это фичей, то у Хаскеля эта фич… twitter.com/i/web/status/1…
13:24
@qnikst @backendsecret backendsecret это то, чем мы его сделаем. Касательно хаскелля - про него тут уже мыто-перемы… twitter.com/i/web/status/1…

Проблема с кишочками в том, что мало людей используют язык профессионально, поэтому многие вещи просто пройдут мимо… twitter.com/i/web/status/1…

13:36

Если хочется кишочков, то я могу сказать, что в нашем проекте мы используем монаду для приложения следующего вида:… twitter.com/i/web/status/1…

13:36

Иногда люди в середину монадического стека добавляют трансформер ExceptT, то есть

newtype App a = App { runApp ::… twitter.com/i/web/status/1…

13:36

К вопросу о монадах. Я не буду пытаться объяснять монады в общих словах. Я работаю с монадами в Haskell, и представ… twitter.com/i/web/status/1…

13:45

Вместо этого я попытаюсь рассказать некоторые идеи, которые стоят за монадой в рамках языка программирования Haskel… twitter.com/i/web/status/1…

13:45

В Haskell монада — это просто интерфейс. Например, вот все могут представить интерфейс для очереди? Что можно делат… twitter.com/i/web/status/1…

13:45

Когда мы изучаем очередь в университете, смотрим на интерфейс очереди или пишем абстрактный интерфейс по работе с о… twitter.com/i/web/status/1…

13:45

Например, простыми реализациями очереди может быть реализация на массиве или на списке. Хоть они и являются довольн… twitter.com/i/web/status/1…

13:45

Они настолько разные, что единственное общее у них — очень абстрактный интерфейс, который может казаться слабо-поня… twitter.com/i/web/status/1…

13:45

Переход от интерфейса очереди к какой-нибудь реализации с последующим использованием довольно короткий. Переход от… twitter.com/i/web/status/1…

13:45

Еще одна вещь, которая мешает пониманию монад: достаточно точно интерфейс монады можно представить только в чистом… twitter.com/i/web/status/1…

13:45
@backendsecret Вот как так получается? Послушаешь тут рассказы про хаскель - прям золото, а не язык! Серебряная пул… twitter.com/i/web/status/1…

Это просто обычный порочный круг. Никто не хочет тратить время на обучение языка, потому что он непопулярный. И он… twitter.com/i/web/status/1…

13:49
@backendsecret Вот Kotlin сейчас улыбнулся :) Да и прочие гошечки и свифтики :) Сдается мне все не так просто... Во… twitter.com/i/web/status/1…

Если знаешь Java, C++, Python или C#, то выучить Kotlin, Go или Swift можно самостоятельно и довольно быстро. Языки… twitter.com/i/web/status/1…

14:05
@backendsecret вакансий на хаскеле на сайтах работы мало, смотрят на это) расскажи, как ты искал работу и вот это всё

Надо просто искать не на сайтах работы 😉 Я вот нашел текущую работу на Reddit. На /r/haskell каждую неделю постят в… twitter.com/i/web/status/1…

14:07
@backendsecret Сколь платят хаскеллистам в сингапуре нынче?

Дудь, разлогинься twitter.com/russianlagman/…

14:31
@backendsecret Про минусы расскажете?
Пока что только воспеваем хвалу - а этого уже было очень много здесь
Моя прос… twitter.com/i/web/status/1…

Это можно. Но хочу отметить, что многие минусы являются не столько минусами языка, сколько экосистемы, и они решаем… twitter.com/i/web/status/1…

14:45

3. В стандартной библиотеке есть популярные частичные функции.

14:45
@backendsecret Хм, а мне кажется это просто снобизм и ignorance хаскель комьюнити. Go и Kotlin имели совсем меленьк… twitter.com/i/web/status/1…

Но за Go и Kotlin также стоят очень большие компании, которые вкладывают огромные суммы денег и очень много людей в… twitter.com/i/web/status/1…

14:46
@backendsecret На сайте сообщества ruhaskell.org/links.html есть ссылки на каналы, посвящённые исключительно поиску работы и работников.
14:46
@backendsecret вот такой вопрос. Верно ли, что есть бизнес задачи более подходящие под ООП и более подходящие под Ф… twitter.com/i/web/status/1…

Я реализовывал на ФП совершенно разные задачи — структуры данных, фреймворки логирования, веб-приложения, компилято… twitter.com/i/web/status/1…

15:41
@backendsecret Что можешь сказать про Rust?

Я на нем ничего не писал. Но писал достаточно на C и C++. То, что я слышал о Rust, меня крайне радует в том плане,… twitter.com/i/web/status/1…

15:44

Кстати, мой хороший друг работает над плагином Rust для @intellijidea, и там прямо очень хороший прогресс. Рекоменд… twitter.com/i/web/status/1…

15:47
@backendsecret Насколько удобно использовать сторонние библиотеки? Насколько удобно их искать? Подробнее про пункты… twitter.com/i/web/status/1…

Хочу отметить, что всегда приятно получать конкретные вопросы, на которые можно дать конструктивные ответы! twitter.com/aarexer/status…

16:19

> Насколько удобно использовать сторонние библиотеки?

Чтобы добавить ее в зависимость, достаточно написать одну ст… twitter.com/i/web/status/1…

16:19

> Насколько удобно их искать?

Довольно-таки удобно! Есть поисковый сервис, в котором можно вбивать названия функци… twitter.com/i/web/status/1…

16:19

Про строки. Стандартный тип String в Haskell — это односвязный список символов UTF-32. Изначальная идея была в том,… twitter.com/i/web/status/1…

16:19

Про частичные функции. В стандартной либе есть функция head со следующим типом:

head :: [a] -> a

Она возвращает п… twitter.com/i/web/status/1…

16:19

Про исключения: в Haskell IO исключения непроверяемые, то есть в сигнатурах функций не отражены. Если документация… twitter.com/i/web/status/1…

16:19

Про туториалы: например, достаточно большое приложение на Haskell трудно написать (чтобы еще и можно было поддержив… twitter.com/i/web/status/1…

16:19
@backendsecret а как же hayoo? hayoo.fh-wedel.de

Он устарел. База данных давно не обновлялась. Hoogle, ссылку на который я скинул, намного быстрей подхватывает изме… twitter.com/i/web/status/1…

16:26
@backendsecret ну скажем есть доменная модель, где прям напрашивается наследование или например будет стейтфул и ну… twitter.com/i/web/status/1…

Я пока с такой доменной моделью не сталкивался 🙂 Наследование через композицию эмулируется без особых проблем. Каса… twitter.com/i/web/status/1…

16:29
@backendsecret По-моему, не UTF-32, а UCS-32.
16:46

Закончить день хочется напоминанием про Hacktoberfest: ежегодное событие, которое призывает людей контрибьютить в о… twitter.com/i/web/status/1…

17:13

В частности, в своей опенсорс организации мы пометили кучу различных beginner-friendly задач в наших Haskell репози… twitter.com/i/web/status/1…

17:13

# Вторник 88 твитов

@backendsecret Нужно ли как-то знать теорию категорий для разработки? Прошёл курс о двух частях на stepik, основные… twitter.com/i/web/status/1…

Нет, теорию категорий знать не нужно! Я уже писал в одном треде, что она не является основным понятием, а ее знание… twitter.com/i/web/status/1…

1:32

Сегодняшний день будет посвящен моей текущей работе, более подробному описанию архитектуры и библиотек, которые мы… twitter.com/i/web/status/1…

4:02
@AstarothAst @backendsecret > "ребята, вот это грабли, имейте ввиду, прыгнуть на них - БОЛЬНО"

Ок. Ребята, ленивая… twitter.com/i/web/status/1…

4:33
@AstarothAst @backendsecret К счастью, существуют техники, препятствующие возникновению space leaks. Кроме того, ес… twitter.com/i/web/status/1…

Более того, на ICFP 2018 недавно представляли доклад про библиотеку StrictCheck, которая позволяет декларативным сп… twitter.com/i/web/status/1…

4:35

Сначала о том, как я попал на работу. Когда я наткнулся на объявление на Reddit, я увидел в этой возможности решени… twitter.com/i/web/status/1…

6:20

Сингапур очень футуристичный город. А еще английский здесь является государственным языком. Поэтому решение о перее… twitter.com/i/web/status/1…

6:20

К тому же, на прошлой работе я начинал сильно выгорать, мне хотелось развиваться в другой области, а заодно выбрать… twitter.com/i/web/status/1…

6:20

Чтобы получить работу, я прошел через 4 интервью:

6:20

Забавный факт: на эту позицию собеседовался человек с PhD, который законтрибьютил одну из продвинутых фич в компиля… twitter.com/i/web/status/1…

6:20

Очень понравился визовый процесс в Сингапур. Он проходит полностью онлайн, а большая часть работы делается компание… twitter.com/i/web/status/1…

6:20

К сожалению, у меня процесс занял месяц, потому что иногда выбирают случайных людей и устраивают дополнительную про… twitter.com/i/web/status/1…

6:20
@backendsecret А вот стоит к примеру мне студенту заканчивающему универ браться за изучение haskell? Или лучше выуч… twitter.com/i/web/status/1…

Сложный вопрос. Я бы порекомендовал начинать изучать Haskell раньше, если есть возможность, потому что с наличием п… twitter.com/i/web/status/1…

6:29
@backendsecret расскажи про culture fit. как это выглядит с их стороны и с твоей?

Если коротко, то спрашивали, выживу ли я в Азии 😅 Имел ли я опыт общения с людьми с другим менталитетом, как я отно… twitter.com/i/web/status/1…

6:48

Это было довольно неформальное интервью в виде диалога. Просто рассказывали, что меня ждет и смотрели на мою реакци… twitter.com/i/web/status/1…

6:48
@backendsecret Выучить haskell, уехать в Сингапур, звучит как неплохой план xD
6:49
@backendsecret Насколько трудно человеку будет влиться в ФП после ООП? У нас на парах преподают ООП и мне после ФП… twitter.com/i/web/status/1…

По опыту могу сказать, что довольно трудно. Надо сильно перестроить мозг и начать думать по-другому. Да и ФП в разн… twitter.com/i/web/status/1…

6:51
@backendsecret без высшего образования возможна релокация?

Мне неизвестно, насколько надо быть крутым, чтобы взяли без диплома. Министерство труда жестко проверяет документы.… twitter.com/i/web/status/1…

6:57
У меня есть вакансии: Solidity developer, UI/UX специалист, SMM специалист, Python + NodeJS разработчик… twitter.com/i/web/status/1…
6:58
@backendsecret А можете рассказать сильно ли бьет по перформансу работа с immutable data structure, когда вместо му… twitter.com/i/web/status/1…

Не сильно. В GHC реализован сборщик мусора, который более оптимизирован для иммутабельных типов данных. Если компил… twitter.com/i/web/status/1…

7:03
@backendsecret Грубо говоря, забудьте даже думать про хаскель, пока у вас зарплата меньше 2k€, а то превратитесь в… twitter.com/i/web/status/1…

Не хочу спорить, но лишь скажу, что я знаю несколько людей с совершенно разным бэкграундом, которые выучили Haskell… twitter.com/i/web/status/1…

7:07
@backendsecret Может пропустила... а кроме Haskell у вас в арсенале какие языки?
Чтобы вы переписали на haskell (т… twitter.com/i/web/status/1…

Кроме Haskell я знаю следующие языки на хорошем уровне: Idris, Java, Kotlin, C, C++
На менее продвинутом: Asm, C#,… twitter.com/i/web/status/1…

7:19

Касательно переписать: я бы хотел операционную систему на Rust, а все остальное уже можно на Haskell 🙂

По поводу п… twitter.com/i/web/status/1…

7:19
@backendsecret Не посоветуете какой-нибудь материал для тех кто переходит например с ООП на Java и C++ на ФП Haskel… twitter.com/i/web/status/1…

Трудно подсказать что-то для изучения чистого ФП. Лично я считаю, что ФП — программирование, где в основной фокус с… twitter.com/i/web/status/1…

7:31

В ООП же в основной фокус ставятся объекты, то есть должно быть просто композировать их. Отсюда и такие специфичные… twitter.com/i/web/status/1…

7:31
@backendsecret Не наскучило за полгода в Сингапуре? Смещение распределения национальностей не раздражает?

Жить в Сингапуре довольно неплохо на самом деле. По началу было неловко. Сингапур — азиатская Америка. Тут очень мн… twitter.com/i/web/status/1…

7:58

Прежде чем описывать архитектуру, расскажу про сам проект. Один из основных продуктов, над которым мы работаем — мо… twitter.com/i/web/status/1…

8:28

Коротко, суть заключается в том, что люди отправляют через приложения измерения веса, данные с Fitbit, глюкозы в кр… twitter.com/i/web/status/1…

8:28

Идея такого подхода в том, что если менять образ жизни резко, то это не сработает в долгосрочной перспективе. Если… twitter.com/i/web/status/1…

8:28

Диетологи же предлагают маленькие шажочки, которым просто следовать. Например, "попробуй в следующий раз положить п… twitter.com/i/web/status/1…

8:28

Вообще, в Сингапуре очень помешаны на здоровом образе жизни. В правительстве коррупции нет, очень много денег идет… twitter.com/i/web/status/1…

8:28
@snpefk @backendsecret В случае если используются иммутабельные структуры, то в GC возможны значительные оптимизаци… twitter.com/i/web/status/1…
8:49
@snpefk @backendsecret так же часто в immutable структурах используются древовидные структуры, позволяющие обновлят… twitter.com/i/web/status/1…
8:50
@snpefk @backendsecret Иногда конечно возволить себе этого нельзя, но для этого есть возможность использовать измен… twitter.com/i/web/status/1…
8:50
@backendsecret Как там в плане безопасности/криминогенности ?

В Сингапуре очень безопасно! Преступности почти нет. Люди тут даже двери в свои дома не запирают, потому что никто… twitter.com/i/web/status/1…

8:51

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

11:02

Наша команда состоит из 5 человек:
• Тимлид, он же CTO, он же DevOps
• Разработчик мобильного приложения
• 2 backen… twitter.com/i/web/status/1…

11:02

Haskell-разработчики были наняты специально для того, чтобы полностью переписать бекенд с Node.js на Haskell. Сейча… twitter.com/i/web/status/1…

11:02

Решение о переписывании старого бекенда с Node.js на Haskell было принято в связи с тем, что приложение становилось… twitter.com/i/web/status/1…

11:02

К тому же на основе этой платформы хотелось реализовать другие различные системы и интеграции с другими сервисами,… twitter.com/i/web/status/1…

11:02

Известно, что Haskell очень хорошо подходит для бекенда, и у текущего CTO был раньше некоторый опыт разработки на H… twitter.com/i/web/status/1…

11:02

Если кого-то интересуют конкретные цифры: предыдущий бекенд, разработанный на Node.js в течении 3 лех был полностью… twitter.com/i/web/status/1…

11:02

Мобильные приложения пишутся на языке программирования Dart при помощи платформы Flutter. Это позволяет писать один… twitter.com/i/web/status/1…

11:02

Раньше была отдельная команда на Swift для iOS и на Java для Android, но кооперировать обе команды было тяжело. В к… twitter.com/i/web/status/1…

11:02

Мобильным приложением пользуются юзеры, а веб-приложением пользуются диетологи. Веб был написан на JavaScript с исп… twitter.com/i/web/status/1…

11:02

Теперь баззворды про архитектуру бекенда:
• БД — PostgreSQL
• Amazon сервисы — SQS, SES и S3
• общение с вебом — J… twitter.com/i/web/status/1…

11:02

Люди присылают фотографии еды, но фотографии не хранятся в PostgreSQL БД. Вместо этого они хранятся на облачном хра… twitter.com/i/web/status/1…

11:02

Раньше они генерировались через шелловский вызов CLI утилиты convert, но сейчас используется Haskell библиотека hip… twitter.com/i/web/status/1…

11:02

Amazon сервис SES используется для отправки электронным писем пользователям. Письма красивые, c HTML. Все шаблоны п… twitter.com/i/web/status/1…

11:02

SQS (это очередь) используется для хранения всех работ и балансировки нагрузки. Например, когда юзер отправляет фот… twitter.com/i/web/status/1…

11:02

Вместо того, чтобы сразу выполнять все эти запросы на бекенде, они просто отправляются в очередь. А затем уже подня… twitter.com/i/web/status/1…

11:02

Это модель хорошо ложится на Haskell, потому что можно представить работы как алгебраический тип данных

data JobTy… twitter.com/i/web/status/1…

11:02

Protobuf был выбран по нескольким причинам. Одна из — можно описать структуру всех сообщений в одном месте, а затем… twitter.com/i/web/status/1…

11:02
@backendsecret Почему Elm? Зачем вообще уходить с JavaScript на клаентсайде?

Есть очевидная причина — Elm статически и строго типизированный и поддерживает классные фичи как параметрический по… twitter.com/i/web/status/1…

12:00
@backendsecret Ещё любопытно про визы, требование диплома по специальности, налоги, особенности, если не трудно. В… twitter.com/i/web/status/1…

Налоги очень низкие. Про требование диплома по специальности не знаю. У меня диплом по специальности. Рабочие визы… twitter.com/i/web/status/1…

12:06
@backendsecret A ReasonML почему не подошёл?

Решение о выборе Elm в качестве фронтенда еще было принято до меня. В пользу этого выбора еще скажу, что на Haskell… twitter.com/i/web/status/1…

12:18
@backendsecret У Вадлера есть еще классный доклад
youtube.com/watch?v=FiflFi…
12:52

Отдельным тредом напишу про Haskell библиотеки, которые мы используем. Чтобы люди из пещеры не думали, будто мы на… twitter.com/i/web/status/1…

13:14

В качестве библиотеки по работе с БД используем postgresql-simple. Никакого ORM, просто пишем сырые запросы на SQL.
hackage.haskell.org/package/postgr…

13:14

В качестве веб-фреймворка используем servant. Это библиотека позволяет задавать все Web API как тип, используя прод… twitter.com/i/web/status/1…

13:14

Для работы с Amazon сервисами — семейство библиотек amazonka
hackage.haskell.org/package/amazon…

13:14

Пуш-нотификации осуществляются при помощи Firebase, а Haskell-библиотека для этого — fcm-client
hackage.haskell.org/package/fcm-cl…

13:14

Для мониторинга состояния сервера используем ekg. Эта библиотека позволяет мониторить потребляемое время и память в… twitter.com/i/web/status/1…

13:14

Для парсинга JSON используем популярную либу aeson
hackage.haskell.org/package/aeson

13:14

Чтобы сделать процесс разработки более удобным, мы, как и любая приличная компания, используем альтернативный Prelu… twitter.com/i/web/status/1…

13:14

Для аутентификации — JWT
hackage.haskell.org/package/jwt

13:14

Для хеширования паролей в БД — bcrypt
hackage.haskell.org/package/bcrypt

13:14

В качестве supervision trees в стиле Erlang — capataz
hackage.haskell.org/package/capataz

13:14

Конфигурация проекта задается в файле в формате TOML, и для этого как раз используется моя библиотека tomland
hackage.haskell.org/package/tomland

13:14

В качестве тестового фреймворка используем фреймворк tasty
hackage.haskell.org/package/tasty

13:14

Для декларативного описания юнит-тестов используем библиотеку hspec
hackage.haskell.org/package/hspec

13:14

А для property-based тестирования используем Hedgehog
hackage.haskell.org/package/hedgeh…

13:14
@aarexer @batyshkaLenin @AstarothAst @backendsecret Вопрос не очень конкретен, но отвечу. Да, Haskell даёт большую… twitter.com/i/web/status/1…
13:38
@backendsecret Например, как это выглядит?
Какой-нибудь пример сервиса, репозитория - как это выглядит на практике?

Репозиторий с продуктом приватный. Но могу поделиться ссылкой на открытый репозиторий, который содержит примерный ш… twitter.com/i/web/status/1…

13:43
@backendsecret А как обстоят дела с транзитивными зависимостями? Как вот у нас в Java есть jar-hell
Как там у вас дела?

Haskell библиотека должна указывать диапазон версий для каждой своей зависимости. Билд тулы стараются найти такой н… twitter.com/i/web/status/1…

13:46
@backendsecret Да как же так? Разрабы на дс стоят как грязь. Их валом везле. Ты хочешь сказать, что основаная причн… twitter.com/i/web/status/1…

Найти могут. Но чтобы поддерживать большой проект на JS надо больше людей, времени и сил, чем на Haskell. При равно… twitter.com/i/web/status/1…

13:51
@dshevchenko_biz @backendsecret @aarexer @batyshkaLenin @AstarothAst А быстро писать можно? Если надо наговнокодить не включая мозг?

Haskell – это именно тот язык, на котором можно быстро кодить, не включая мозг, потому что GHC все глупые ошибки от… twitter.com/i/web/status/1…

13:54
@backendsecret Только эти 10 на жс будут суммарно стоить в два раза дешевле чем те двое на хаскеле.

Например, в Сингапуре это неправда. Тут очень дорого жить. Поэтому 10 разработчиков на JS будут стоить дороже 2 раз… twitter.com/i/web/status/1…

13:57
@backendsecret А почему не QuickCheck? Чем не подошёл? Худше/лучше, etc

У Hedgehog просто восхитительные сообщения об ошибках, когда тест не проходится: показывается строчка кода с контек… twitter.com/i/web/status/1…

14:52

Еще важное преимущество Hedgehog: не просто выдается пример, на котором фейлится тест, но еще автоматически подбира… twitter.com/i/web/status/1…

15:07
@backendsecret а можно поинтересоваться в каких областях кроме бэкенда и теории категорий haskell хорош?

Как раз сегодня опубликовали результата опроса Haskell разработчиков о состоянии экосистемы Haskell в 2018. Приведу… twitter.com/i/web/status/1…

15:23

life sciences, robotics, data repositories, language design, high-performance computing, Web services, OCR, text an… twitter.com/i/web/status/1…

15:23

hardware engineering, software engineering tools, Internet of Things (IOT), education, XML and JSON and other data… twitter.com/i/web/status/1…

15:23
@backendsecret много тестов пишете?

Тестируем основную логику программы. Например, написал эндпоинт, который достает данные и возвращает на сервер — бу… twitter.com/i/web/status/1…

15:31
@backendsecret вопрос по серванту. что нужно знать прежде чем туда суваться. Понимать комбинаторы? Что-то еще?

Да в общем-то ничего особенного. Просто иметь хорошие примеры перед глазами. Тогда можно по ходу дела разбираться.… twitter.com/i/web/status/1…

15:35
@backendsecret Имхо, ещё тут хорошо о статусе готовности экосистемы языка к тем или иным вещам. github.com/Gabriel439/pos…
15:37

Закончу день парой слов про сам Сингапур. Город прям ну очень зеленый, при этом выглядит современно. Тут довольно ж… twitter.com/i/web/status/1…

15:44

Город выглядит суперсовременно, везде довольно чисто и приятно. Центр города является также и бизнес-центром: очень… twitter.com/i/web/status/1…

15:44

Fun fact: даже сам премьер-министр Сингапура на пенсии планирует изучать Haskell, о чем говорил в одной из своих речей.

15:44

# Среда 45 твитов

Сегодняшний день будет посвящен моему опыту преподавания Haskell в университете. Расскажу про трудности преподавани… twitter.com/i/web/status/1…

7:15
@argent_smith @backendsecret Неоптимизированный, правда простой сервис, чуть работы с базами, немного криптографии,… twitter.com/i/web/status/1…
8:04

Начну с небольшого рассказа о том, как я начал преподавать. В конце 4ого @Tis00 предложил мне вести вместе с ним ку… twitter.com/i/web/status/1…

9:24

После обсуждения этого предложения с доцентом нашей кафедры, мы начали готовить материалы. Мы изначально планировал… twitter.com/i/web/status/1…

9:24

Это сложно сделать, потому что именно с Haskell можно уйти очень далеко от реального мира. Можно начать подробно ра… twitter.com/i/web/status/1…

9:24

Я думаю, что со своей стороны я смог сделать практический и полезный курс. И многие люди после этого курса и правда… twitter.com/i/web/status/1…

9:24

Теперь про основные трудности, с которыми столкнулся во время преподавания. Преподавать Haskell — это как быть Hask… twitter.com/i/web/status/1…

11:05

Отчасти это связано со спецификой того места, где я преподавал. Отчасти из-за того, что слишком молодой преподавате… twitter.com/i/web/status/1…

11:05

Очень многие люди при изучении Haskell после императивного языка вроде Java или С++ чувствуют, что вместо узнавания… twitter.com/i/web/status/1…

11:05

И это не связано с тем, что Haskell — сложный язык. Поверьте, я профессионал в плане преподавания Haskell и могу об… twitter.com/i/web/status/1…

11:05

Просто изучение Haskell требует думать в совершенно другом измерении, особенно когда мозг заточился на императивное… twitter.com/i/web/status/1…

11:05

Когда сталкиваешься с чем-то в Haskell, то испытываешь давно забытое чувство, будто не можешь что-то понять, и сраб… twitter.com/i/web/status/1…

11:05

Программисты на Haskell не гениальней программистов на других языках. Просто они побарывали этот рефлекс очень мног… twitter.com/i/web/status/1…

11:05

Другая сложность в преподавании Haskell — не так много хороших ресурсов по разнообразным темам, особенно на русском… twitter.com/i/web/status/1…

11:05

То есть когда у людей трудности в понимании, они не могут самостоятельно найти решение. И не из-за того, что они гл… twitter.com/i/web/status/1…

11:05

Я всегда был открыт к помощи и предлагал людям в случае затруднений свои ответы на их вопросы. Но студентов человек… twitter.com/i/web/status/1…

11:05
@backendsecret есть ли у вас объяснение, почему хаскелем не встают большие компании и не вливают многоденег? похожа… twitter.com/i/web/status/1…

Как по мне, то причина политическая. Если у компании есть деньги, чтобы позволить поддерживать язык, то им выгодней… twitter.com/i/web/status/1…

12:48
@musuk @backendsecret Вопрос ведущему этой недели, какую ide or vim / emacs предпочитаете? Что кошерней и правоверн… twitter.com/i/web/status/1…

Лично я использую для редактирования Spacemacs — vim хоткеи + экосистема Emacs, а для быстрого получения сообщений… twitter.com/i/web/status/1…

12:55

Теперь подробней про сам курс и его формат. Программа курса находится на GitHub. Слайды для презентаций сделаны при… twitter.com/i/web/status/1…

13:44

Он включает в себя 16 лекций — по 4 лекции на 8 пар в месяц в течение 4ех месяцев. Программа рассчитана на плавный… twitter.com/i/web/status/1…

13:44

Идеологически программа разделена на 3 части:
• Научиться писать на Haskell хоть что-нибудь
• Научиться писать на H… twitter.com/i/web/status/1…

13:44

Хочу отметить, что курс сейчас и курс 3 года назад — 2 совершенно разных курса. Каждый семестр я создавал опросы и… twitter.com/i/web/status/1…

13:44

То есть получалось взаимное обучение — я обучал студентов Haskell, а сам при этом на них тренировал свой курс. От э… twitter.com/i/web/status/1…

13:44

Но помимо этого еще и сам Haskell развивается. Если ничего не делать с курсом хотя бы 2 года, он перестанет быть ак… twitter.com/i/web/status/1…

13:44

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

13:44

Когда я начал преподавать Haskell, то еще не использовал его в production. Поэтому было одно видение касательно тог… twitter.com/i/web/status/1…

13:44

Например, в начале преподавания идея рассказывать про производные типов и комонады казалось интересной и полезной,… twitter.com/i/web/status/1…

13:44

Хотя потом выяснилось, что надо было просто подождать не 2 года, а 4, когда комонады в итоге на самом деле пригодились в production.

13:44

Это еще одна проблема с преподаванием Haskell — чтобы курс был очень хорошим и полезным для практики, преподаватель… twitter.com/i/web/status/1…

13:44

C++, Java, Android, Web, Вычислительную геометрию и другие предметы у нас в университете вели программисты с серьез… twitter.com/i/web/status/1…

13:44

Быть хорошим преподавателем очень хлопотно и затратно, требует колоссального объема времени и сил, и это только для… twitter.com/i/web/status/1…

13:44

Под конец расскажу про свое отношение к преподаванию, что я делал во время своего курса, чтобы сделать его самым лу… twitter.com/i/web/status/1…

15:57

Для начала, я считаю, что преподаватель должен гореть страстью к своему предмету, если он хочет учить людей как мож… twitter.com/i/web/status/1…

15:57

Если преподавание — это просто формальность в духе следования заранее установленным критериям оценки и формального… twitter.com/i/web/status/1…

15:57

Только тогда, когда у тебя есть есть страсть к предмету, ты можешь заразить других людей энтузиазмом к нему же и к… twitter.com/i/web/status/1…

15:57

Помню случай, когда для одного из самых первых заданий требовалось написать простейшие тесты любым образом, а один… twitter.com/i/web/status/1…

15:57

Однако у такого отношения к своему предмету есть и обратная сторона — любая критика в сторону курса или игнорирован… twitter.com/i/web/status/1…

15:57

Мне всегда хотелось смотивировать студентов заниматься Haskell, поэтому я был открыт к их разным предложениям сдела… twitter.com/i/web/status/1…

15:57

Каждое домашнее задание я проверял лично у каждого человека. Мне все-таки хотелось каждому помочь, потому что у все… twitter.com/i/web/status/1…

15:57

Да и когда ты сначала сам попробовал сделать задание как можешь, а только потом узнаешь правильное решение и почему… twitter.com/i/web/status/1…

15:57

Все-таки курс рассчитан не на то, чтобы завалить людей, а чтобы помочь им изучить новую и незнакомую область и подт… twitter.com/i/web/status/1…

15:57

Автоматическую систему проверки настроить или создать крайне сложно. К тому же курс Haskell — это не курс решения а… twitter.com/i/web/status/1…

15:57

Когда преподаешь Haskell, то хочется все же научить именно хорошим практикам программирования, чтобы люди могли пис… twitter.com/i/web/status/1…

15:57

Но, опять же, студентов очень много, проверять у каждого ДЗ вживую требует много времени. Когда хочешь сделать что-… twitter.com/i/web/status/1…

15:57

Было грустно заканчивать курс после того, как вложил в него столько сил, времени и души. Но в жизни есть вещи и поважней 🙂

15:57

# Четверг 49 твитов

Сегодня постараюсь рассказать про состояние экосистемы Haskell в данный момент, сообщество и каналы коммуникации. Г… twitter.com/i/web/status/1…

5:35
@backendsecret Интересно насколько на хаскеле вышло выразительнее, т.е. сколько строк кода было на JS и сколько стало после переписывания.

Если кому-то тоже интересны числа:

• Прошлый бекенд на JS: 61000+ строка кода, из которых примерно 39000 – только… twitter.com/i/web/status/1…

6:16

Позавчера я составил тред со списком библиотек, которые мы используем в production, поэтому я надеюсь, что у людей… twitter.com/i/web/status/1…

7:39

Буквально несколько лет назад использовать Haskell для продакшена было бы крайне рисковым занятием. Даже проект с з… twitter.com/i/web/status/1…

7:39

Отчасти это объясняет, почему Haskell не такой популярный сейчас — языку в продакшене не 30 лет, а всего 3 года. То… twitter.com/i/web/status/1…

7:39

У текущих библиотек не всегда отличная документация, но это не всегда проблема. Типы помогают. Они не заменяют доку… twitter.com/i/web/status/1…

7:40

Одна из острых проблем — раскол сообщества. Существуют две основные конкурирующие и враждующие билд тулы для Haskel… twitter.com/i/web/status/1…

7:40

Это, конечно, не очень хорошо, потому что вместо объединения сил над одним инструментом люди враждуют и фиксят одни… twitter.com/i/web/status/1…

7:40

Другая проблема, что порой бывает, когда для решения какой-то задачи существует несколько библиотек, но причем все… twitter.com/i/web/status/1…

7:40

От этого бывает больно. Но также в довольно многих библиотеках мейнтейнеры отвечают на issue меньше чем за день и д… twitter.com/i/web/status/1…

7:40
@backendsecret А как в таких ситуациях выбирать "лучшую" библиотеку? На какие критерии смотреть?

В первую очередь я смотрю, насколько проект мертвый или живой: есть ли недавние комментарии под issue, как давно бы… twitter.com/i/web/status/1…

8:20

Я упоминал раньше, что библиотеки не всегда содержат абсолютно полный арсенал фич, подходящих для решения всех проб… twitter.com/i/web/status/1…

10:06

Для одного из сторонних проектов мы изначально решили использовать SQLite в качестве БД. И мы начали работу над про… twitter.com/i/web/status/1…

10:06

Но в середине работы над продуктом выяснилось, что заказчикам по некоторым причинам важно использовать именно MySQL… twitter.com/i/web/status/1…

10:06

Но поддержка фич у этих библиотек разная. Например, sqlite-simple поддерживает именованные параметры для prepared s… twitter.com/i/web/status/1…

10:06

С другой стороны, в mysql-simple реализованы типы для того, чтобы проверять вхождение элемента в список или вставля… twitter.com/i/web/status/1…

10:06

Так как экосистема в Haskell довольно молодая, то не для всех задач бывают библиотеки. Снова приведу пример, с которым столкнулся на работе.

12:02

Мы работам над двумя проектами, которые являются веб-серверами. И одному из них надо забирать данные с другого. Но… twitter.com/i/web/status/1…

12:02

Но оказалось, что нет библиотеки, которая позволяет клиенту автоматически подписывать каждый исходящий реквест при… twitter.com/i/web/status/1…

12:02

Это было проблемой, но она решилась довольно быстро. Мы с коллегой по работе буквально за пару дней написали такую… twitter.com/i/web/status/1…

12:02

На это ушло не так много времени, но зато в итоге:

12:02

Обычно мы стараемся помогать экосистеме Haskell и опенсорсу: создавать issue, комментировать под релевантными и даж… twitter.com/i/web/status/1…

12:02
@backendsecret Т.е. хаскел в 4 раза выразительнее? А можно примеры кода для сравнения?

Потом, если вы не покрывает… twitter.com/i/web/status/1…

Весь код покрыт тестами. Пример для сравнения: есть такой тип данных с фантомным типом

newtype Id a = Id { unId ::… twitter.com/i/web/status/1…

13:10

Теперь расскажу про сообщество и общение с другими хаскеллистами. Лично я считаю, что ограждать себя от сообщества… twitter.com/i/web/status/1…

14:07

Если хочется читать новости, но не хочется общаться с людьми, то рекомендую подписаться на рассылку Haskell Weekly:
haskellweekly.news

14:07

Второй по значимости и объему точкой соприкосновения с хаскеллистами по всему миру является /r/haskell на Reddit:
reddit.com/r/haskell/

14:07

Там происходят анонсы библиотек, блог-постов, событий в разработке GHC, обсуждение разнообразных тем из мира Haskel… twitter.com/i/web/status/1…

14:07

Если хочется задать какой-то вопрос по Haskell (не компилируется код, не получается решить вот такую проблему таким… twitter.com/i/web/status/1…

14:07

Страница @ruHaskell с ресурсами содержит ссылки на разные чаты: русско- и англоязычные в Telegram, в Gitter, и друг… twitter.com/i/web/status/1…

14:07

Также по-прежнему очень много людей сидит на IRC в каналах #haskell и других. Если вы окей с тем, чтобы пользоватьс… twitter.com/i/web/status/1…

14:07

Много хаскеллистов сидят и пишут в Twitter. Хороший способ найти всех таких хаскеллистов — подписаться на… twitter.com/i/web/status/1…

14:07

Может быть трудно представить, но довольно много людей сидят на StackOverflow. Если у вас возникают вопросы по Hask… twitter.com/i/web/status/1…

14:07

Я привел много источников общения, а существует еще больше. Но хочу сказать, что не обязательно участвовать во всех… twitter.com/i/web/status/1…

14:07

Многие думают, что у хаскеллистов синдром элитаризма и что они смотрят на остальных свысока. Когда читаешь анонсы и… twitter.com/i/web/status/1…

14:07

Но то, что люди обсуждают умные вещи, еще не значит, что эти все вещи надо знать и что все они нужны в production.… twitter.com/i/web/status/1…

14:07

Конечно, и в Haskell сообществе есть не самые милые и приятные люди, как и везде. Но быть хаскеллистом порой тяжело… twitter.com/i/web/status/1…

14:07

Я стараюсь быть в лагере тех, кто дружелюбен к новичкам, старается улучшить экосистему, и не повышать уровень токси… twitter.com/i/web/status/1…

14: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…

15:40

Расскажу одну небольшую веселую, но в то же время поучительную историю из production. Она связана с историей одной… twitter.com/i/web/status/1…

16:14

Несколько лет назад, когда необходимо было выбирать библиотеку, мы выбрали одну, относительно популярную на то врем… twitter.com/i/web/status/1…

16:14

Потом появился новый проект и, как это обычно бывает, мы применили самые лучшие, даже по сегодняшним меркам, способ… twitter.com/i/web/status/1…

16:14

Это было неудобно, поэтому мы решили вынести эти вспомогательные функции в отдельный "утилитный" пакет. Меня с тех… twitter.com/i/web/status/1…

16:14

Потом функций и оберток поверх библиотеки стало еще больше, и было принято решение вынести эти функции в отдельную… twitter.com/i/web/status/1…

16:14

В какой-то момент потребовалось добавить что-то настолько нетривиальное, что уже было невозможно построить поверх и… twitter.com/i/web/status/1…

16:14

Далее долгое время она так и развивалась, причем довольно неплохо. Добавлялись полезные функции, когда требовалось… twitter.com/i/web/status/1…

16:14

Однако некоторые архитектурные решения в этой либе вызывали крайнее недовольство у некоторых людей, поэтому возникл… twitter.com/i/web/status/1…

16:14

А потом в итоге библиотека оказалась заброшена, и работа над ней больше не ведется. И в одном большом проекте, в ко… twitter.com/i/web/status/1…

16:14

Мне очень хотелось сделать хорошую библиотеку логирования, ибо качество текущих меня не устраивает, поэтому после т… twitter.com/i/web/status/1…

16:14

Я думаю, что невозможно было бы прийти к хорошему и удобному дизайну, который на максимум использует возможности Ha… twitter.com/i/web/status/1…

16:14

# Пятница 42 твита

Сегодня расскажу про опенсорс и его состояние в рамках Haskell, зачем может быть полезно им заниматься, как я стара… twitter.com/i/web/status/1…

5:54

Поделюсь своими мыслями по поводу опенсорса. Считаю, что контрибьютить в опенсорсные проекты полезно, но и это надо… twitter.com/i/web/status/1…

9:08

Я вообще всеми руками за то, чтобы исходный код был открытым. Не всегда получается так сделать, но лучше постаратьс… twitter.com/i/web/status/1…

9:08

Это полезно и для самого продукта: сторонние люди могут смотреть, искать и даже фиксить баги, предлагать улучшения,… twitter.com/i/web/status/1…

9:08

И для других людей тоже полезно: они могут изучить примененные подходы к проектированию и разработке, может быть да… twitter.com/i/web/status/1…

9:08

Часто люди просят привести примеры какого-нибудь реального кода (в том числе и читатели @backendsecret), желательно… twitter.com/i/web/status/1…

9:08

Например, в одной из своих библиотек я использовал некоторые нетипичные подходы, но один человек, который контрибью… twitter.com/i/web/status/1…

9:08

Причем, чтобы все получали преимущества опенсорса, недостаточно просто выложить код в публичный доступ, надо еще ак… twitter.com/i/web/status/1…

9:08

Еще пример: недавно, в связи с тем, что Microsoft купила GitHub, очень многие люди перенесли свои репозитории на Gi… twitter.com/i/web/status/1…

9:08

Чтобы просто открыть там issue, надо было зарегистрировать аккаунт именно в их организации на Gitlab. В общем, боль… twitter.com/i/web/status/1…

9:08

Лично я считаю, что чем больше людей вовлечено в разработку проекта, тем он лучше. Как вариант, чтобы привлечь как… twitter.com/i/web/status/1…

9:08

У меня следующие причины тратить много времени на разработку опенсорсных библиотек и приложений:

9:08

Опенсорс — это не столько про улучшения качества кода, сколько про то, чтобы вместе делать мир лучше через совершен… twitter.com/i/web/status/1…

9:08

К сожалению, у контрибьюта в опенсорс есть свой порог входа. Но, к счастью, есть люди, которые помогают другим прео… twitter.com/i/web/status/1…

9:08

Отдельно могу порекомендовать список OSS менторов только для Haskell:
github.com/willbasky/Awes…

9:08

В этом треде расскажу, как лично я и моя небольшая команда энтузиастов Kowainik помогаем экосистеме Haskell и опенс… twitter.com/i/web/status/1…

11:54

Причины для создания организации следующие:

11:54

Очень многие люди держат репозитории проектов, которые они создали, в своих личных аккаунтах на Github. Я считаю, ч… twitter.com/i/web/status/1…

11:54

Если большой и популярный проект окажется заброшенным, то ничего страшного особо не случится — кто-нибудь форкнет р… twitter.com/i/web/status/1…

11:54

А это значит, что если кому-то понадобится такая же библиотека, то большой шанс, что она просто будет написана зано… twitter.com/i/web/status/1…

11:54

Обычно в организации все разработчики лучше осведомлены о коде различных библиотек, разработка ведется более активн… twitter.com/i/web/status/1…

11:54

Многие люди при выборе библиотеки смотрят на имя автора. Чем более хорошая репутация у организации, тем больше шанс… twitter.com/i/web/status/1…

11:54

Причем, если два человека работают над проектами одной организации, пускай и независимо, то популярность организаци… twitter.com/i/web/status/1…

11:54

Поддерживать репозитории в организации еще проще тем, что можно в одном централизованном месте описать все workflow… twitter.com/i/web/status/1…

11:54

Помочь экосистеме Haskell мне хочется не только через написание новых библиотек, но еще через обучение людей. Нам в… twitter.com/i/web/status/1…

11:54

Люди работают над issue в нашей организации, а мы их менторим и помогаем — в обучении Haskell, в работе с git. В ит… twitter.com/i/web/status/1…

11:54

Дам несколько советов для контрибьютеров и мейнтейнеров, которые мне кажутся очень полезными, если хочется, чтобы р… twitter.com/i/web/status/1…

11:54

Контрибьютерам — прежде чем открывать pull request, крайне рекомендую обсудить желание работать над issue под соотв… twitter.com/i/web/status/1…

11:54

Нередко бывают ситуации, когда люди открывают пулл-реквесты, а в итоге подразумевалось не то, или автор библиотеки… twitter.com/i/web/status/1…

11:54

Быть мейнтейнером опенсорсного проекта довольно тяжело, потому что это требует не только технических навыков, но ещ… twitter.com/i/web/status/1…

11:54

На заметку мейнтейнерам:

11:54

1. Документация для проекта: понятный README с описанием проекта, документация для функций, туториалы

11:54

3. Шаблон для PR: не все проверяет CI, поэтому неплохо написать несколько пунктов, которые вы хотите увидеть в кажд… twitter.com/i/web/status/1…

11:54

5. Писать более подробное описание для создаваемых issue и расставлять теги, чтобы людям было лучше понятно, над че… twitter.com/i/web/status/1…

11:54

После того, как я смотивировал всех заниматься опенсорсом, расскажу про состояние опенсорса в Haskell, и, самое гла… twitter.com/i/web/status/1…

14:39

Почти все Haskell репозитории используют систему контроля версий git и хостятся на GitHub. Но сейчас еще можно встр… twitter.com/i/web/status/1…

14:39

Не секрет, что во многих библиотеках на Haskell не самая лучшая документация. Поэтому вклад в виде улучшения докуме… twitter.com/i/web/status/1…

14:39

Вторым по важности вкладом может быть добавление тестов. Это заблуждение, что типы полностью спасают от тестов. Они… twitter.com/i/web/status/1…

14:39

В одном из своих проектов для увеличения корректности кода я использую zero-cost обертки, зависимые типы, доказател… twitter.com/i/web/status/1…

14:39

Еще одним важным улучшением является добавление бенчмарков. Всегда полезно обладать знаниями о перформансе той или… twitter.com/i/web/status/1…

14:39

Обычно в Haskell репозиториях всегда есть, что поделать, ибо нет предела совершенству. Не стесняйтесь открывать нов… twitter.com/i/web/status/1…

14:39

Пользуясь случаем, еще раз напомню, что всегда можно присоединиться к нашим проектам в рамках Hacktoberfest. За пер… twitter.com/i/web/status/1…

14:39

# Суббота 37 твитов

Сегодня постараюсь поделиться источниками информации и материалами, по которым, на мой взгляд, лучше всего изучать… twitter.com/i/web/status/1…

9:07

На данный момент самым эффективным способом выучить и полюбить Haskell является наличие персонального ментора. Не в… twitter.com/i/web/status/1…

10:28

Сразу хочу предупредить, что Haskell нельзя выучить просто читая туториалы или мануалы. Особенно после императивног… twitter.com/i/web/status/1…

10:28

Например, когда я изучал Kotlin 4 года назад, то достаточно было прочитать официальный гайд. После Java язык казалс… twitter.com/i/web/status/1…

10:28

Причем дело не в том, что Haskell сложный. Просто другой. А когда изучаешь что-то новое, то автоматически пытаешься… twitter.com/i/web/status/1…

10:28

Для начала могу порекомендовать свой туториал по билд-тулам, который рассказывает, откуда достать компилятор GHC, к… twitter.com/i/web/status/1…

10:28

Русскоязычному сообществу доступен очень хороший курс от @deniok на Stepik. Есть две части этого курса, для прохожд… twitter.com/i/web/status/1…

10:28

Если же вам удобней заниматься по книжкам, то рекомендую Get Programming with Haskell. Я слышал много положительных… twitter.com/i/web/status/1…

10:28

Альтернативно, в качестве введения в основы Haskell порекомендую вот этот курс. Мне кажется, что он дает оптимальну… twitter.com/i/web/status/1…

10:28

У этого курса есть более новая версия, в которой задания более современные и дается чуть больше, но мне почему-то о… twitter.com/i/web/status/1…

10:28

Чтобы достаточно хорошо подготовиться к пониманию монад, неплохо сначала понимать Higher Kinded Types и конструктор… twitter.com/i/web/status/1…

10:28

Для первичного понимания монад хорошо подойдет другая моя лекция. На одном слайде там аж целых 5 паттернов функцион… twitter.com/i/web/status/1…

10:28

Достаточно важно уметь работать с IO (и даже необязательно понимать, почему это монада). Вот эта глава из Haskell W… twitter.com/i/web/status/1…

10:28

Как я и говорил, недостаточно просто изучать материал, необходимо также решать практические задания. Поэтому поделю… twitter.com/i/web/status/1…

10:28

Вот больше заданий на алгебраические типы данных, свертки и моноиды
hackmd.io/sCEMg7VLRjKwRl…

10:28

Вот практические упражнения на монады Maybe и список
hackmd.io/xCzgYAQ3T-qzRn…

10:28

А вот, как мне кажется, клевые упражнения на монады Reader и State и трансформеры монад
hackmd.io/PonAg-wPQQKExx…

10:28

Важным аспектом реального программирования на Haskell является многопоточное и асинхронное программирование. Для по… twitter.com/i/web/status/1…

10:28

Обычно путь самостоятельного изучения какой-то темы в Haskell происходит следующим образом: гуглишь туториалы по эт… twitter.com/i/web/status/1…

10:28

Ну и снова порекомендую всем общаться с сообществом и не стесняться задавать вопросы! Спрашивайте на StackOverflow,… twitter.com/i/web/status/1…

10:28

Для изучения Haskell полезно решать задачи, но еще полезней, если решения будут проверяться. Посоветую несколько ме… twitter.com/i/web/status/1…

12:58

Самое простое и первое место: TryHaskell. Интерактивный REPL, где можно потыкать самые основы Haskell
tryhaskell.org

12:58

Чтобы попрактиковаться в решении задач совершенно разного уровня сложности, советую обратить внимание на CodeWars.… twitter.com/i/web/status/1…

12:58

Если интересуют задачи с более алгоритмическим уклоном, то можно еще попробовать что-то порешать на HackerRank.
hackerrank.com

12:58

Есть даже сайт с менторами, которые будут просматривать решения и обсуждать их с вами.
exercism.io

12:58
@backendsecret Я начинала изучать Haskell именно с этих домашек (по лекциям ИТМО), и ревью от @ChShersh были очень… twitter.com/i/web/status/1…
13:37

Под конец постараюсь развенчать мифы о том, что работы на Haskell нет, и расскажу про известные мне места для поиск… twitter.com/i/web/status/1…

14:50

Одним из самых основных мест для поиска работы является /r/haskell на Reddit. Каждую неделю там постят несколько ва… twitter.com/i/web/status/1…

14:50

Я и сам на текущую свою работу попал через объявление на Reddit. Почти всегда в вакансиях возможна удаленная работа… twitter.com/i/web/status/1…

14:50

Если нет возможности мониторить Reddit каждый день, то, опять же, можно подписаться на @haskellweekly, там в еженед… twitter.com/i/web/status/1…

14:50

Вторым по значимости ресурсом является @Functionalworks. Там не только Haskell, но еще Scala, Clojure и другие.
functional.works-hub.com

14:50

Отдельным пунктом упомяну курируемый и актуальный список компаний, которые используют Haskell. На данный момент спи… twitter.com/i/web/status/1…

14:50

Как по мне, если захотеть, то найти на Haskell работу даже проще, чем на другом языке. Да, на Java вакансий больше,… twitter.com/i/web/status/1…

14:50

Так как на Haskell вакансий сравнительно меньше, то люди не изучают Haskell специально с целью найти работу. Поэтом… twitter.com/i/web/status/1…

14:50

К тому же, так как люди не учат Haskell для работы, то если человек знает Haskell, это уже много о нем говорит. Зна… twitter.com/i/web/status/1…

14:50
@backendsecret Хочу также добавить, что на /r/haskell можно не только следить за вакансиями, но также писать объявл… twitter.com/i/web/status/1…
16:47
@backendsecret Codewars, кстати, отлично подходит в самом начале — освоиться с синтаксисом.
В отличие от большинств… twitter.com/i/web/status/1…
16:47

# Воскресенье 22 твита

Сегодня последний день, и я расскажу про свой опыт работы удаленно и в офисе. Поскольку надо соблюдать баланс лично… twitter.com/i/web/status/1…

5:04

Тема удаленной работы особенно актуальна в Haskell мире. Специалистов немного и найти их сравнительно трудней, а на… twitter.com/i/web/status/1…

6:57

Трудно сказать, какой вариант работы строго лучше — удаленно или в офисе. У каждого есть свои преимущества и недост… twitter.com/i/web/status/1…

6:57

На работе приходилось трекать время, и трекаешь обычно рабочее время, когда решаешь какую-то задачу. Трекать, пока… twitter.com/i/web/status/1…

6:57

На самом деле это очень тяжело. Когда работаешь в офисе, то из 160 часов ты выдаешь примерно 110 на чистый кодинг.… twitter.com/i/web/status/1…

6:57

Тем более, когда оплата по часам, то у тебя нет большой мотивации и сил заниматься опенсорсом и личными проектами.… twitter.com/i/web/status/1…

6:57

Границы работы и личного времени становятся более размытыми. Но и гибкости при удаленной работе больше. Мне нравило… twitter.com/i/web/status/1…

6:57

Сейчас я считаю, что идеально было бы работать удаленно, но с элементами офисного рабочего процесса. Когда ты кажды… twitter.com/i/web/status/1…

6:57

Однако с удаленной работой не так просто найти способ остаться в другой стране. Почему-то другие страны не очень ра… twitter.com/i/web/status/1…

6:57

Так что если бы работа в офисе была примерно в таком формате, то мотивации ходить на нее было бы намного больше!
9gag.com/gag/aQRqqBd

6:57
@backendsecret Команда разработчиков GitLab работает практически полностью удаленно, при этом принципы их организац… twitter.com/i/web/status/1…
9:32
@backendsecret Недавно видел ссылку на группу в телеграме twitter.com/ruHaskell/stat…
9:32

Дам несколько советов, которые работают для меня, как можно успевать заниматься опенсорсом и личной жизнью во время… twitter.com/i/web/status/1…

9:37

Работа в офисе может выматывать, и от нее в свободное время хочется отдыхать, а не пахать где-то еще за бесплатно.… twitter.com/i/web/status/1…

9:37

Спойлер: если вы работаете полный рабочий день + занимаетесь опенсорсом + есть своя организация + есть личная жизнь… twitter.com/i/web/status/1…

9:37

Мне повезло в плане работы, потому что каждому члену команды дается полдня в неделю на опенсорс и самостоятельное и… twitter.com/i/web/status/1…

9:37

К тому же девушка тоже относится с пониманием к увлечениям и сильно помогает в этом. Думаю, что поддержка со сторон… twitter.com/i/web/status/1…

9:37

Мой недельный график в среднем примерно следующий: просыпаешься в 8 утра и борешься с желанием умереть, завтрак, оф… twitter.com/i/web/status/1…

9:37

Всем спасибо, кто читал меня эту неделю! С вами был Дмитрий Коваников (@ChShersh). Если у кого-то остались вопросы… twitter.com/i/web/status/1…

12:36

Также можно зафолловить мою организацию @kowainik в твиттере или в телеграме, если вам интересно получать новости о… twitter.com/i/web/status/1…

12:36

Под конец хочу сказать, что вести эту неделю было довольно тяжело. Хотелось поделиться большим объемом качественног… twitter.com/i/web/status/1…

12:36

Всю эту неделю я получал много хейта в адрес Haskell и лично в свой адрес, в том числе и в крайне грубых выражениях… twitter.com/i/web/status/1…

12:37

hackage.haskell.org

other