# Понедельник 127 твитов
Привет!
На этой неделе у микрофона Саша @bespoyasov.
Работаю в DRIVE2. Пришёл туда как фронтендер, потом писал б… twitter.com/i/web/status/1…
7:50В основном пишу на TS, иногда на Python и C#. В разное время писал на PHP и C++, не зашло ни то, ни то 😃
Пробовал L… twitter.com/i/web/status/1…
На эту неделю хочу предложить вам вот такой план:
В понедельник поговорим об архитектуре. День начнём с наброса —… twitter.com/i/web/status/1…
7:53Во вторник набросим ещё больше и обсудим ООП и современный фронт.
Кто они: «хорошие друзья» или «заклятые враги»?… twitter.com/i/web/status/1…
7:55В среду поговорим о чистоте кода и обсудим, как сделать его читаемым и тестируемым.
Начнём с нейминга, закончим пр… twitter.com/i/web/status/1…
7:55В четверг поговорим о том, где и как набраться опыта в разработке.
Что эффективнее: университет, галеры, опен-сорс… twitter.com/i/web/status/1…
7:55В пятницу поговорим на несколько отвлечённую тему: зачем вести технический (или вообще какой угодно) блог.
Поделим… twitter.com/i/web/status/1…
7:56В субботу обсудим, кто и как относится к пет-проектам. Не стали ли они завышенным требованием от разработчиков.
(А… twitter.com/i/web/status/1…
7:56В воскресенье поболтаем о том, кто и как любит отвлекаться от работы и отдыхать. Какие у кого хобби, как получается… twitter.com/i/web/status/1…
7:56@jsunderhood Говоришшш, реакт любишшш... pic.twitter.com/WiyGgRtICi
jQuery я тоже люблю! 😃
Один из любимых хуков вот! 😅
github.com/latviancoder/u…
@jsunderhood Говоришшш, реакт любишшш... pic.twitter.com/WiyGgRtICi
7:58
Сейчас закончу своё дейли, и начнём ^_^
7:59@jsunderhood Я вот думаю так. Чистая архитектура, код – строгие правила. Они помогают тем, кто не ориентируется, д… twitter.com/i/web/status/1…
Второй абзац — это то, к чему я постараюсь подвести в конце, но предпосылки (первый абзац) у меня немного другие 🙂
@jsunderhood Я вот думаю так. Чистая архитектура, код – строгие правила. Они помогают тем, кто не ориентируется, д… twitter.com/i/web/status/1…
8:03
Как и обещал, начнём с наброса 😃
Что такое чистая архитектура, зачем нужна, плюсы, издержки.
Если вы работали c y… twitter.com/i/web/status/1…
8:26В общих чертах: весь код поделен на слои.
Центральный слой (домен) — ядро приложения, максимально независим и отве… twitter.com/i/web/status/1…
8:28Адаптеры и порты — это связь со внешним миром: БД, UI, вот это всё.
Если хочется узнать побольше, то вот пара ссыл… twitter.com/i/web/status/1…
8:28Когда я начал постить в блоге (о фронтенде) конспекты книг и статьи об архитектуре, мне стали прилетать вопросы тип… twitter.com/i/web/status/1…
8:29Я отчасти понимаю природу этих вопросов.
Кажется, что архитектура это что-то далёкое от фронтенда: мы же просто ф… twitter.com/i/web/status/1…
8:29Вот нафига мне выделять «слои» в приложении, если _всё_ моё приложение — это небольшое PWA с парой кнопочек?
Есть… twitter.com/i/web/status/1…
8:31Да чтобы просто _нарисовать_ схему приложения по такой архитектуре у меня времени уйдёт больше, чем на то, чтобы на… twitter.com/i/web/status/1…
8:31Я предлагаю начать с того, что архитектура — это прежде всего инструмент.
У любого инструмента есть область применения и ограничения.
8:31@jsunderhood Реквестирую тред про интервью по системному дизайну и архитектуре. У меня завтра собеседование, а инф… twitter.com/i/web/status/1…
О! Я сам на таких интервью не бывал, но подозреваю, какие могут быть вопросы 🙂
Предлагаю вернуться к этому в сере… twitter.com/i/web/status/1…
@jsunderhood Реквестирую тред про интервью по системному дизайну и архитектуре. У меня завтра собеседование, а инф… twitter.com/i/web/status/1…
8:33
@jsunderhood >... максимально независим...От чего?
Если коротко, ото всего, кроме языка, на котором пишем.
То есть, домен не должен ссылаться на фреймворки, на UI,… twitter.com/i/web/status/1…
@jsunderhood >... максимально независим...
От чего?
8:37
Например, у нас есть приложение на TS для веба и для React Native. Домен должен описывать такие сущности и правила,… twitter.com/i/web/status/1…
8:37А в адаптерах и портах — всё, специфичное для конкретной платформы.
8:37Я, пожалуй, не стану покупать шуруповёрт, чтобы вкрутить один саморез.
Но если саморезов 1000, то я уже подумаю:… twitter.com/i/web/status/1…
8:38Архитектура, как и шуруповёрт, стоит ресурсов.
Поддержка сложного проекта с лапше-кодом, как и артрит, — тоже сто… twitter.com/i/web/status/1…
8:38Свой первый вывод я сделал для себя, когда сравнил маленький и простой проект с навороченной архитектурой и большой… twitter.com/i/web/status/1…
8:39Дело было так: я однажды попал в сложный проект на PHP с кучей легаси и запутанным кодом.
Ни о какой архитектуре… twitter.com/i/web/status/1…
8:39Тогда я только-только начинал знакомиться с хорошими практиками в разработке софта, книжки там читать начал, всё та… twitter.com/i/web/status/1…
8:39Работать было невозможно, потому что добавишь чё-нибудь-куда-нибудь, где-нибудь-что-то-ещё отвалится.
— Так напис… twitter.com/i/web/status/1…
8:39Не писались там тесты, как бы мы ни старались 😃
Код был написан так, что чтобы протестировать какой-то модуль, при… twitter.com/i/web/status/1…
Поддерживать этот комбайн было трудно. И не только потому, что тестировать было неудобно — было трудно даже понять,… twitter.com/i/web/status/1…
8:42Всё было намешано в кучу.
Держать в голове даже один модуль было трудно: модуль мог и за шаблонизацию отвечать, и… twitter.com/i/web/status/1…
8:45Как и куда направлены зависимости тоже ясно не было. (Циклические зависимости себя не заставили долго ждать 😅)
8:45Теперь контр-пример: прототип приложения на React.
Надо быстро, поддерживать будет, скорее всего, не нужно. А есл… twitter.com/i/web/status/1…
8:59Страдая от, кхм, ПТСР с прошлого опыта, я накрутил туда архитектуры по всем правилам: вот тебе и домен, вот тебе пр… twitter.com/i/web/status/1…
8:59Вместо того, чтобы проверить гипотезу, приложив минимум усилий, я вбухал кучу ресурсов.
Ладно хоть писал сам, а т… twitter.com/i/web/status/1…
8:59И вот мой первый тогдашний вывод:
== Издержки должны быть меньше выгоды ==
Да, вот так очевидно 😃
9:00После того проекта я решил порефлексировать на него.
Что бы произошло, если бы всё-таки прототип пришлось перепис… twitter.com/i/web/status/1…
9:00*Сейчас пойду поработаю, а после расскажу:
9:03Кто-то уже мог догадаться, что я клоню к домену.
Домен — это самое главное, что есть в приложении. Та функциональ… twitter.com/i/web/status/1…
10:37То, что мне точно пришлось бы перенести из прототипа в продукт — именно домен.
Да, вероятно, с изменениями, возмо… twitter.com/i/web/status/1…
10:37Второй вывод:
=== Стоит начать с домена ===
Сперва можно и не городить оставшиеся слои, не писать адаптеры к библ… twitter.com/i/web/status/1…
10:38Я это называю, кхм, «прагматичной архитектурой» 😃
Это как правило 20/80, только про дизайн систем.
ru.wikipedia.org/wiki/Закон_Пар…
Без выделенного домена очень сложно вообще понять, что происходит.
Так было в запутанном проекте из первого приме… twitter.com/i/web/status/1…
10:39Имей мы на руках функции и модули конкретных сущностей, мы бы уже знали, как они себя ведут и что с ними можно дела… twitter.com/i/web/status/1…
10:39— Ок, допустим. Но вот я читаю книжки об архитектуре, там сплошное ООП. А я не хочу в свой проект его тащить.
Пони… twitter.com/i/web/status/1…
10:41Ну то есть понятно, что большая часть книг написана с примерами на ОО-языках, но это не значит, что нам нельзя взят… twitter.com/i/web/status/1…
10:41Домен можно вообще писать как хочется. Главное, чтобы код был понятным и независимым.
Я, если пишу не в ОО-стиле,… twitter.com/i/web/status/1…
10:41Профит в том, что если проект выстрелит и начнёт быстро расти, вам будет проще накрутить мяса вокруг самого важного… twitter.com/i/web/status/1…
10:42Чем проще и прямолинейнее домен, тем очевиднее, что в системе можно вытворять, а что нет.
А чем очевиднее правила… twitter.com/i/web/status/1…
10:42— Ладно, это всё, конечно, круто, но ты кажется забыл, что мы тут вс же на JS пишем. Какие нафиг типы? 😃
Отсутств… twitter.com/i/web/status/1…
10:48Ну то есть да, статичная типизация помогает проектировать, но и без неё можно справиться.
Ну там JSDoc, объекты-ст… twitter.com/i/web/status/1…
10:48(Без интерфейсов сложно сконцентрироваться на взаимодействии между сущностями.
Труднее выделять публичное API, аб… twitter.com/i/web/status/1…
10:48Я для прототипов тесты, например, не пишу.
Но как только становится понятно, что из прототипа надо делать продукт… twitter.com/i/web/status/1…
10:48В целом считаю, что выделенный домен — это то самое минимальное необходимое количество ресурсов, которое стоит выде… twitter.com/i/web/status/1…
10:48— Окей, ладно. С доменом разобрались, допустим. Но вот зачем остальные слои? Они нужны?
Короткий ответ: не всегда.… twitter.com/i/web/status/1…
10:52И это правда, перебраться с него на какой-то другой шаблонизатор сложно. У него богатая экосистема, куча уже написа… twitter.com/i/web/status/1…
10:52Кто-то наверняка задумывался о том, чтобы сменить стейт-менеджер.
Кто-то, наверное, даже успешно его менял на как… twitter.com/i/web/status/1…
10:53Он обычно затрагивает много кода: хранилище, события всякие, привязка к UI.
Вместе со всем этим кодом надо и тесты… twitter.com/i/web/status/1…
10:53@jsunderhood Можно попросить привести более конкретный пример для типового веб приложения? Скажем, для фронт энда о… twitter.com/i/web/status/1…
Да! ^_^
Недавно меня уже спрашивали в Твитере, что-куда-и-как можно вынести.
Я ответил на примере приложения с… twitter.com/i/web/status/1…
@jsunderhood Можно попросить привести более конкретный пример для типового веб приложения? Скажем, для фронт энда о… twitter.com/i/web/status/1…
11:11
Сейчас в дополнение к котикам сделаем онлайн-магазин печенек! 🍪
11:11Допустим, наш магазин продаёт разные виды печенек. У каждой печеньки есть цена, состав и срок изготовления.
Пользо… twitter.com/i/web/status/1…
11:11В доменный слой я бы вынес следующее.
11:11Дальше, слой адаптеров и портов. (Да, сейчас поговорим о самом внешнем слое, я в конце покажу, почему именно так: б… twitter.com/i/web/status/1…
11:15Задача адаптера — сделать интерфейс стороннего сервиса совместимым с тем, который _хочет наше приложение_.
Это зна… twitter.com/i/web/status/1…
11:15Порт — спецификация, как сторонние сервис _может_ общаться с нашим приложением, или как наше приложение _хочет_, чт… twitter.com/i/web/status/1…
11:15Это всё был внешний слой.
Прикладной слой (между доменом и портами/адаптерами) — описывает сценарии, конкретно это… twitter.com/i/web/status/1…
11:16Тогда прикладной слой магазина будет содержать:
11:16При этом ту часть, например, оплаты, которая использует внешний сервис (допустим, PayPal), мы вынесем в адаптер.… twitter.com/i/web/status/1…
11:16С адаптером для стейт-менеджера переезд попроще 🙂
Слой адаптеров — это барьер, который говорит, где заканчивается… twitter.com/i/web/status/1…
11:20Адаптеры и порты делят внешний мир от нашего приложения как мембрана клетки отделяет её от окружающей среды.
И вс… twitter.com/i/web/status/1…
11:20Адаптеры как бы ограничивают распространение изменений. Мы пишем такие «переходники», которые делают внешний мир бо… twitter.com/i/web/status/1…
11:20Из-за этого и API _приложения_ меняется редко. Адаптеры же можно написать (в идеале) для любой сущности, с которой… twitter.com/i/web/status/1…
11:20Это, кстати, ещё и ограничивает распространение ошибок 🙂
Об этом писал Ганмер в «Паттернах отказоустойчивых прило… twitter.com/i/web/status/1…
11:20Кроме ошибок, это ещё и помогает рефакторить код.
Разделение по слоям — идеальный «шов», как называет его Физерс в… twitter.com/i/web/status/1…
11:20Итак, к этому моменту:
11:23...Но если это очень дорого и бессмысленно (проект точно не доживёт до момента, когда мы захотим поменять React на… twitter.com/i/web/status/1…
11:23Хорошо, вот мы поняли, что нашему проекту на Реакте _нужна_ суровая масштабируемость, и одним выделением доменного… twitter.com/i/web/status/1…
11:25@jsunderhood У нас в компании юзается Mobx, и там просто гигантский стор, в котором и ui данные, и данные сервера.… twitter.com/i/web/status/1…
Кстати, да!
Забегая вперёд (к рефакторингу и тестируемости): место, где всречаются серверные и клиентские данные… twitter.com/i/web/status/1…
@jsunderhood У нас в компании юзается Mobx, и там просто гигантский стор, в котором и ui данные, и данные сервера.… twitter.com/i/web/status/1…
11:28
@jsunderhood Реквестирую тред про интервью по системному дизайну и архитектуре. У меня завтра собеседование, а инф… twitter.com/i/web/status/1…
Теперь немного о собственно проектировании.
Допустим, мы знаем, что нашему проекту _нужна_ суровая масштабируемос… twitter.com/i/web/status/1…
@jsunderhood Реквестирую тред про интервью по системному дизайну и архитектуре. У меня завтра собеседование, а инф… twitter.com/i/web/status/1…
11:30
Мы (люди) плохо умеем прогнозировать будущее. Проектирование систем — это прогнозирование будущего.
Чем больше исх… twitter.com/i/web/status/1…
11:30(О соотношении карты и территории: ru.wikipedia.org/wiki/Соотношен…)
11:32Что нам необходимо знать?
11:36Чего мы хотим добиться:
11:36Я недавно писал пост о дизайне системы с помощью слоёв и DDD:
bespoyasov.ru/blog/generatin…
Давайте используем его как п… twitter.com/i/web/status/1…
11:37Так-с, обед закончился 😅
Ответим на вопросы после работы!
Продолжим 🙂
На какие вопросы мы ищем ответы? В первую очередь — какие перед нами стоят задачи. Потому что ответ н… twitter.com/i/web/status/1…
13:53Кроме этого — какое решение мы посчитаем достаточным, какая требуется глубина проработки.
Если мы делаем приложени… twitter.com/i/web/status/1…
13:53В первом случае мы можем не прорабатывать слой адаптеров так уж тщательно, потому что переиспользовать какой-то код… twitter.com/i/web/status/1…
13:53Узнаём ограничения: временные, технологические и т. д., потому что они тоже могут влиять на глубину проработки.
Ту… twitter.com/i/web/status/1…
13:53Невозможно проработать систему на 100%. Всегда останется что-нибудь, что можно улучшить.
Это стоит иметь в виду,… twitter.com/i/web/status/1…
13:53При непосредственно дизайне я люблю сперва проектировать домен. Обычно я беру бумажку с ручкой и рисую квадратики с… twitter.com/i/web/status/1…
13:53В стрелочках я указываю публичное API, возможно, абстрактно формат сообщений, которыми сущности будут обмениваться.… twitter.com/i/web/status/1…
13:53Обычно получается нечто вроде такой диаграммы (из поста с деревьями): pic.twitter.com/o32dDa4TPH
13:54Я не стал упарываться, покрывая веб-платформу адаптерами с ног до головы, так как был уверен, что мне это не понадо… twitter.com/i/web/status/1…
13:54Также помогает выделить Driver (управляющие), и Driven (управляемые) адаптеры: pic.twitter.com/F4bK9UnJrZ
13:55(На эту тему ещё раз посоветую эту статью herbertograca.com/2017/11/16/exp…)
13:56Диаграмма помогает не писать сразу код, а сперва приметиться на бумаге — «а оно вообще поедет?».
Иногда диаграммы… twitter.com/i/web/status/1…
13:59Теперь немного о собственно проектировании.Допустим, мы знаем, что нашему проекту _нужна_ суровая масштабируемос… twitter.com/i/web/status/1…
Да! ^_^Недавно меня уже спрашивали в Твитере, что-куда-и-как можно вынести.
Я ответил на примере приложения с… twitter.com/i/web/status/1…
Архитектура — это не только возможность масштабироваться, но ещё и увеличенный порог входа. Возможно, будет нужен о… twitter.com/i/web/status/1…
14:087. Стараемся не плодить абстракций сверх меры.
Слои нам нужны, чтобы не смешивать зоны ответственности модулей.
14:11@jsunderhood А как ты относишься к идее совы?
github.com/feature-sliced
У меня есть смутное подозрение, что это именно то, что в статье “How I put it all together” называют компонентом.… twitter.com/i/web/status/1…
@jsunderhood А как ты относишься к идее совы?
14:13
github.com/feature-sliced
То есть там конечно есть особенности, и оно не «точь в точь такое же», но кажется, будто бы идея где-то очень близко.
14:14Кстати!
Структура папок никак не влияет на архитектуру и не отражает её 😃
То есть мы можем поделить приложение н… twitter.com/i/web/status/1…
14:15А вообще идея разделения файлов/папок на фичи мне больше нравится, чем разделение их на те же «слои».
Кажется, что… twitter.com/i/web/status/1…
14:16@jsunderhood Будет вообще интересно поговорить о том, что такое чистая арихтектура и что конкретно это на фронте. Л… twitter.com/i/web/status/1…
Теперь немного ссылок на Гитхабы!
Есть несколько шаблончиков для Реакта:
@jsunderhood Будет вообще интересно поговорить о том, что такое чистая арихтектура и что конкретно это на фронте. Л… twitter.com/i/web/status/1…
14:24
Есть и без Реакта!
Вот я писал недавно пост об архитектуре, есть репозиторий для с исходниками:
-… twitter.com/i/web/status/1…
Структура файлов в двух последних репозиториях не отражает слои, но из поведение — вполне.
Кстати, репозиторий с с… twitter.com/i/web/status/1…
14:24Без ссылок на Гитхаб — Тяжеловато:
fuckgrechka.ru/tzlvt/
Писал в блоге, почему и как я его переписал. Там даже д… twitter.com/i/web/status/1…
14:27За диаграмму особо не ругайте, он старая, я тогда ещё не умел рисовать нормально и стрелки в нужные стороны направлять :–/
14:28И вот мой первый тогдашний вывод:
== Издержки должны быть меньше выгоды ==Да, вот так очевидно 😃
Плохо умею в треды, продолжение вот тут, простите 😅
И вот мой первый тогдашний вывод:
== Издержки должны быть меньше выгоды ==Да, вот так очевидно 😃
14:38
@_olegkusov Ты правильно заметил, что там в основном отображение.Я дашборда не видел, поэтому сложно советовать,… twitter.com/i/web/status/1…
Приложение с котиками тут:
twitter.com/bespoyasov/sta…
@_olegkusov Ты правильно заметил, что там в основном отображение.
Я дашборда не видел, поэтому сложно советовать,… twitter.com/i/web/status/1…
14:52
@jsunderhood Так вот такие штуки можно и НУЖНО пихать в домен или shared kernel.Они позволяют куда эффективней о… twitter.com/i/web/status/1…
Про домен не соглашусь, shared kernel — да, тоже может быть. Главное не переусердствовать!
@jsunderhood Так вот такие штуки можно и НУЖНО пихать в домен или shared kernel.
Они позволяют куда эффективней о… twitter.com/i/web/status/1…
14:54
@jsunderhood А можно вообще найти весь тред про архитектуру в виде какой-нибудь статьи? Формат твитов не очень подх… twitter.com/i/web/status/1…
В самую первую очередь советую вот эту статью!
herbertograca.com/2017/11/16/exp…
@jsunderhood А можно вообще найти весь тред про архитектуру в виде какой-нибудь статьи? Формат твитов не очень подх… twitter.com/i/web/status/1…
15:39
Потом ещё DDD:
ddd.fed.wiki.org/view/welcome-v…
Спасибо всем, кто отвечал и задавал вопросы сегодня! ^_^
Ухожу спать. Завтра продолжим и подкинем в костёр несколько ООП-дровишек 😃
17:56# Вторник 81 твит
Доброе утро! Сегодня вторник, а значит поговорим об ООП на фронте.
Пока я заливаю в себя кофе, давайте проведём оп… twitter.com/i/web/status/1…
6:24А пока идёт голосование, обсудим, чем ООП плохо и хорошо, а что его не любят и наоборот.
Начнём с хейта 😃
7:12Сразу начну с того, что не каждому проекту ООП нужно.
Иногда гораздо проще написать пару функций с объектами, и н… twitter.com/i/web/status/1…
7:12Во-вторых, насколько я вижу, ООП прочно ассоциируется с мутацией данных, а это сейчас немодно.
Я подозреваю откуд… twitter.com/i/web/status/1…
7:12Я согласен, что иммутабельные структуры данных — это круто и надёжно. Но сам лично не считаю мутации чем-то плохим,… twitter.com/i/web/status/1…
7:12Но беспорядочные мутации — это не проблема ООП, это проблема плохо написанного кода 😃
Запутанный код можно написат… twitter.com/i/web/status/1…
7:12Для управления мутациями давно уже придумали много способов работы, тот же CQS:
7:12С ним, кстати, вполне реально выстроить как 1-way, так и 2-ways data-flow, он достаточно универсален, чтобы быть удобным в обоих случаях.
7:17Так вот, тот ООП энтерпрайз, который следовал CQS, был вполне себе понятным ¯\_(ツ)_/¯
Так что, возможно, дело не в… twitter.com/i/web/status/1…
Но опять, это не проблема самого ООП 😃
Да, среди принципов SOLID есть SRP, single responsibility principle. Он гов… twitter.com/i/web/status/1…
7:17Может, дело просто в самой его сложности?
Ну… ООП сложный, но не сложнее настоящей™ функциональщины.
Теорию групп… twitter.com/i/web/status/1…
7:17Хотя я даже работал на проекте, где это использовалось.
Очень оказалось полезно как раз для ООП. Проще стало пони… twitter.com/i/web/status/1…
7:17Мне кажется, весь хейт в том, что ООП на фронте с JS просто не удобен.
Использовать его по-настоящему не получаетс… twitter.com/i/web/status/1…
7:19Но есть TypeScript 🙂
Он всё ещё страдает от JS-райнтайма, но у него уже достаточное API, чтобы писать нормальный™… twitter.com/i/web/status/1…
7:19Другое дело, что это опять-таки не всем проектам нужно 🙂
7:19Парадигма программирования, как и архитектура, — это инструмент для укрощения сложности. И, как с архитектурой, нам… twitter.com/i/web/status/1…
7:22Взять те же принципы SOLID.
ota-solid.now.sh
Мы можем (хоть с оговоркой и не все) использовать их в отрыв… twitter.com/i/web/status/1…
7:22В коде Тяжеловато даже классов нет 😃
Я вообще считаю, что ООП — это больше не про классы, а про отношения между су… twitter.com/i/web/status/1…
7:22В простейших случаях можно обойтись и объектом с парой функций.
Но вот то, как эти объекты будут друг с другом вза… twitter.com/i/web/status/1…
7:22Я причём не говорю, что интерфейсы и реализации — это строго лишь ООП, нет.
Просто как их использовать для проекти… twitter.com/i/web/status/1…
7:22— Ладно, вот простой вопрос: можно ли вообще писать в ООП-стиле фронтовый код? Не бекенд, а фронт?
Да. (Но нужен TypeScript 😃)
7:23Есть ошибочное мнение, что фронт — типа ненастоящее программирование.
Но современный фронт сложный ¯\_(ツ)_/¯
А с… twitter.com/i/web/status/1…
Со сложностью надо как-то справляться.
У нас есть фреймворки и библиотеки, это хорошая помощь, но они решают толь… twitter.com/i/web/status/1…
7:24И вот тут ООП может помочь:
7:24Из всего, что я пробовал у ООП наиболее богатый инструментарий и словарь для проектирования систем ¯\_(ツ)_/¯
Крут… twitter.com/i/web/status/1…
7:24Кстати, ООП не запрещает использовать преимущества ФП! 🙂
Мы можем продолжать использовать чистые функции, иммутаб… twitter.com/i/web/status/1…
7:29У Марка Симанна есть отличная статья на эту тему, очень советую:
blog.ploeh.dk/2020/03/02/imp… pic.twitter.com/pAj2w117dE
Мне в целом воинствующее разделение на ООП / ФП не нравится. Для меня срачи на тему парадигмы выглядят вот так 😅 pic.twitter.com/OXPoRmEByq
7:31Но я немного отступил от темы. Можно ли писать нормальный ООП-код на фронте?
Я недавно написал пост о том, как сов… twitter.com/i/web/status/1…
7:33Внутри ссылаюсь на офигенную статью @hgraca
herbertograca.com/2017/11/16/exp…
там настолько круто всё разжёвано!
Я перечи… twitter.com/i/web/status/1…
7:33Для Реакта вон люди тоже придумали стартовые шаблоны:
7:39Но опять же, тащить огромную инфраструктуру в небольшой проект я не стану — научен горьким опытом 🙂
Сейчас я стар… twitter.com/i/web/status/1…
7:39Обычно всё начинается с домена, внутри которого лежит пара функций да типы. Применяю S, O, I, а L и D на полшишечки… twitter.com/i/web/status/1…
7:39Как и обещал, начнём с наброса 😃
Что такое чистая архитектура, зачем нужна, плюсы, издержки.Если вы работали c y… twitter.com/i/web/status/1…
Именно поэтому мы вчера столько времени уделяли проектированию:
twitter.com/jsunderhood/st…
Мы не хотим засорять код с… twitter.com/i/web/status/1…
Как и обещал, начнём с наброса 😃
Что такое чистая архитектура, зачем нужна, плюсы, издержки.Если вы работали c y… twitter.com/i/web/status/1…
7:39
(В Тяжеловато, например, я так и сделал: у меня есть пространство для манёвра с новыми инструментами, но самих инст… twitter.com/i/web/status/1…
7:41Отследить, в какой момент пора наращивать инструментарий мне помогает ощущение «Чё-та сложна».
Иду по индукции с… twitter.com/i/web/status/1…
7:41Мне ещё иногда кажется, проблема и преимущество JS в том, что «нам не объяснили, как на нём писать правильно».
По… twitter.com/i/web/status/1…
7:41Так-с, ухожу работать!
Потом продолжим 🙂
Продолжим 🙂
Чем ООП полезен?
Мне очень нравится, как ООП помогает делать мой код масштабируемым и тестируемым.
9:37Под масштабирумеостью я понимаю возможность дописать, переписать, удалить какой-то модуль _без необходимости перепи… twitter.com/i/web/status/1…
9:37Пример.
Я как-то писал пост о DI:
bespoyasov.ru/blog/di-ts-in-…
В нём был логгер. Давайте рассмотрим, как он устроен.
9:38В типах я описываю публичный интерфейс:
github.com/bespoyasov/di-…
Интерфейс — это контракт на поведение, он говорит,… twitter.com/i/web/status/1…
9:38Реализация интерфейса описана классом:
github.com/bespoyasov/di-…
Реализация _инкапсулирует_ в себе детали, которые в… twitter.com/i/web/status/1…
9:38Обратим внимание, что интерфейс называется более абстрактно, чем реализация.
Нам важно сохранять инкапсуляцию и в… twitter.com/i/web/status/1…
9:38Затем я в DI-контейнере указываю, какой именно класс реализует интерфейс `Logger`:
github.com/bespoyasov/di-…
Таким о… twitter.com/i/web/status/1…
9:38В сущности, которой требуется логер, я указываю _интерфейс_ как зависимость:
github.com/bespoyasov/di-…
То есть мне з… twitter.com/i/web/status/1…
9:38Это значит, что если я решу заменить консольный логер на какой-то другой, то единственное, что надо будет заменить:… twitter.com/i/web/status/1…
9:44А чтобы протестировать модуль, который использует этот модуль как зависимость, мне надо замокать интерфейс Logger: pic.twitter.com/H0UU6LjkaZ
9:44Этот мок я «подсуну» в регистрацию при тестировании: pic.twitter.com/wqw2Ee1Y6v
9:44И ничего другого не поменялось!
9:44Если мы ещё не будем забывать о LSP и OCP, то масштабировать будет ещё легче.
9:46Теперь поговорим о том, чем ООП неудобен 🙂
Расскажите о своём опыте тоже? пробовали ли? что не понравилось?
9:48DI, за который я сейчас топлю, когда-то был для меня непреодолимым барьером 😃
Я помню, пришёл в проект на первом А… twitter.com/i/web/status/1…
9:53Поэтому для меня основное неудобство — это в первую очередь порог входа.
Перед тем, как затащить какой-то доп. ин… twitter.com/i/web/status/1…
9:53@jsunderhood Ну самый очевидный это многословность, интерфейсы, абстрактные классы, дочерние классы, дочерние дочер… twitter.com/i/web/status/1…
Ещё, как правильно заметили в комментариях, иногда — избыточная многословность:
twitter.com/zavodnoyapl/st…
Я видел пр… twitter.com/i/web/status/1…
@jsunderhood Ну самый очевидный это многословность, интерфейсы, абстрактные классы, дочерние классы, дочерние дочер… twitter.com/i/web/status/1…
9:55
Нужно постоянно лавировать между «кучей сущностей» и «дырявыми абстракциями» :–/
У меня есть подозрение, что навы… twitter.com/i/web/status/1…
9:56А проблема с насмотренностью в том, что не весь код, который мы видим каждый день — понятный.
Мы начинаем думать,… twitter.com/i/web/status/1…
9:58Я пока лишь могу порекомендовать читать книжки:
bespoyasov.ru/tag/books/
...и пробовать руками.
Ещё хочется пореко… twitter.com/i/web/status/1…
10:02Дальше, не очень понятно, как это применять к нынешнему фронтенду — React, Vue, вот это всё.
Есть шаблоны:
-… twitter.com/i/web/status/1…
Теперь немного о собственно проектировании.Допустим, мы знаем, что нашему проекту _нужна_ суровая масштабируемос… twitter.com/i/web/status/1…
Это и правда требует больше времени и ресурсов.
Но мы помним, что при проектировании мы уже взвешивали издержки и… twitter.com/i/web/status/1…
Теперь немного о собственно проектировании.
Допустим, мы знаем, что нашему проекту _нужна_ суровая масштабируемос… twitter.com/i/web/status/1…
10:07
Сейчас уйду ещё поработать, а потом обсудим, почему строить грамотную архитектуру проще, но не обязательно с ООП.
10:15ООП в своих принципах подразумевает деление сложного на части.
Инкапсуляция, например — размещение данных и методо… twitter.com/i/web/status/1…
12:30Полиморфизм тоже абстрагирует от деталей, позволяя использовать один механизм для работы с разными сущностями.… twitter.com/i/web/status/1…
12:30В принципах SOLID также заложено разделение сложного на части, а ещё — барьеры на распространение изменений:
ota-solid.vercel.app
Например, SRP и ISP требуют, чтобы модуль занимался только одной задачей.
OCP и LSP ограничивает изменения «коробо… twitter.com/i/web/status/1…
12:30LSP и DIP обращают внимание на зависимости модулей и их направление.
Всё это — какие-то части проектирования.
У… twitter.com/i/web/status/1…
12:30А теперь — о том, почему наследование как концепт должно умереть 😃
12:38Наследование классов — это прямой путь к антипаттерну God-Object.
Проблема наследования в том, что будущее нельзя… twitter.com/i/web/status/1…
12:38Нам стоит, наоборот, собирать сложное из простого — использовать композицию.
Давайте на примере воспользуемся насл… twitter.com/i/web/status/1…
12:38Допустим, мы пишем приложение, в котором описываем живые организмы.
Что нам нужно, чтобы описать человека, использ… twitter.com/i/web/status/1…
12:46Что нам нужно, чтобы описать человека, используя композицию интерфейсов?
Собрать те свойства и методы, которые на… twitter.com/i/web/status/1…
12:46Ну окей, пока выглядит одинаково.
...До тех пор пока не приходит задача научить человека летать.
Пусть в нашем… twitter.com/i/web/status/1…
12:46Животные →
Летающие животные?
Летающие приматы?
Суперчеловек?
Человек.
Нипанятна. Нам в какой-то момент придётся… twitter.com/i/web/status/1…
12:46В композиции мы добавим дополнительные интерфейсы:
Супергерой = <...Интерфейсы человека> + LaserShooter + Flyable.
12:46Я, кстати, сейчас не говорю об абстрактных классах. Там несколько другое поведение, и используются они иначе. Сейча… twitter.com/i/web/status/1…
12:46Как защититься от наследования? 😅
12:48Кстати, а накидайте, пожалуйста, случаев, когда без наследования никак не обойтись?
Я что-то пытался сейчас вспом… twitter.com/i/web/status/1…
12:51@jsunderhood На ум приходит только когда надо переопределить метод в вендорах (понимаю надо форк или делать что то… twitter.com/i/web/status/1…
Да, я совсем забыл, что мы живём в реальном мире 😃
@jsunderhood На ум приходит только когда надо переопределить метод в вендорах (понимаю надо форк или делать что то… twitter.com/i/web/status/1…
13:18
Доброе утро! Сегодня вторник, а значит поговорим об ООП на фронте.Пока я заливаю в себя кофе, давайте проведём оп… twitter.com/i/web/status/1…
В сегодняшнем треде об ООП:
twitter.com/jsunderhood/st…
...мы уже немного затронули тестируемость :–)
Завтра поговор… twitter.com/i/web/status/1…
Доброе утро! Сегодня вторник, а значит поговорим об ООП на фронте.
Пока я заливаю в себя кофе, давайте проведём оп… twitter.com/i/web/status/1…
15:40
Поговорим, как упростить тесты и найти на них время, обсудим причём тут TDD и парное программирование.
А, да! И ещ… twitter.com/i/web/status/1…
15:40@jsunderhood - Изменение поведения/композиции стороннего объекта.
Первый пункт сегодня упоминали, второй — прям хорошо.
(Не уверен, что актуально для фронта, но забывать об этом вс… twitter.com/i/web/status/1…
@jsunderhood - Изменение поведения/композиции стороннего объекта.
19:28
# Среда 115 твитов
По результатам вчерашнего голосования фронтенд и ООП скорее хорошие друзья, чем заклятые враги, но большинство пред… twitter.com/i/web/status/1…
6:48А сегодня поговорим о том, как сделать код читаемым и тестируемым ^_^
Расскажите о своих приёмах, как вы улучшаете… twitter.com/i/web/status/1…
6:50Самое простое (и одновременно сложное 😃) — это нейминг.
Хорошие и внятные имена для переменных и функций — это оч… twitter.com/i/web/status/1…
6:51Хорошее имя для сущности: короткое, но полное и описательное.
На Гитхабе есть классный чеклист по неймингу сущност… twitter.com/i/web/status/1…
6:52Я люблю проверять имена всех экспортируемых сущностей на понятность со стороны пользователя.
«Если я буду импорти… twitter.com/i/web/status/1…
6:53Например, внутри модуля пользователя функция `create` выглядит органично, не дублирует контекст, короткая, описывае… twitter.com/i/web/status/1…
6:53Но если функцию импортировать и начать использовать, то уже не так очевидно: pic.twitter.com/BR5u7SlaNB
6:53А вот тут — наоборот: pic.twitter.com/RvAt00Fu1X
6:53Годный шаблон для названий можно вот тут посмотреть:
github.com/kettanaito/nam…
@jsunderhood А что на счет бэма? Еще актуально?
Знаю проект, где всё ещё используется облегчённая версия БЭМ.
Хотя в личных проектах я всё чаще CSS-модули исполь… twitter.com/i/web/status/1…
@jsunderhood А что на счет бэма? Еще актуально?
6:55
Шаблон A/HC/LC:
prefix? + action (A) + high context (HC) + low context? (LC)
В идеале по названию переменной долж… twitter.com/i/web/status/1…
6:56Для булевых значений можно использовать префиксы:
should, is, has, will, did.
Для функций — первым словом лучше п… twitter.com/i/web/status/1…
6:56Иногда (редко) от шаблона можно отойти, если двусмысленность получается исключить:
`let mounted = false` — тут сло… twitter.com/i/web/status/1…
6:56@jsunderhood Расскажи, в чём там суть?
Я для себя понял, что по части улучшения нейминга хорошо работает работает g… twitter.com/i/web/status/1…
Если прям совсем коротко, то в коде должно быть ровно столько информации, сколько необходимо для правильного его по… twitter.com/i/web/status/1…
@jsunderhood Расскажи, в чём там суть?
7:02
Я для себя понял, что по части улучшения нейминга хорошо работает работает g… twitter.com/i/web/status/1…
Много о том, как делать так, чтобы было удобно читать:
7:02@jsunderhood Расскажите что там с БЭМом, я его уже года 3 не видел нигде. Он умер? Если да, то почему?
Живёт и здравствует! 😅
Он чем-то на jQuery похож: мы сейчас им можем не пользоваться, но этот инструмент настолько… twitter.com/i/web/status/1…
@jsunderhood Расскажите что там с БЭМом, я его уже года 3 не видел нигде. Он умер? Если да, то почему?
7:05
Мне кажется, если он и умрёт (что вряд ли), то только в настоящем™ сложном виде.
Основная идея (об изоляции стилей… twitter.com/i/web/status/1…
7:05Guys!! I just found out that /usr/ does NOT stand for "user", but is actually "universal system resources"! This ma… twitter.com/i/web/status/1…
Моё любимое — не используйте аббревиатуры, пожалуйста 😃
(А если используете, обязательно документируйте.)
Guys!! I just found out that /usr/ does NOT stand for "user", but is actually "universal system resources"! This ma… twitter.com/i/web/status/1…
7:11
Всё настраиваемое лучше сразу выносить в конфиги. Пусть даже по началу это будет объект в том же файле.
Это и чит… twitter.com/i/web/status/1…
7:11Используйте паттерны проектирования.
Есть замечательная подборка паттернов на том же Гитхабе, очень советую посмот… twitter.com/i/web/status/1…
7:11Как правило, большую часть наших задач уже решили за нас до нас 😃
Такие решения называются паттернами. Их польза н… twitter.com/i/web/status/1…
7:11Паттерны удобно использовать в связке с SOLID. Некоторые из принципов прямо подразумевают какой-то из паттернов.
М… twitter.com/i/web/status/1…
7:11Чаще рефакторите код, но без фанатизма ¯\_(ツ)_/¯
7:14Писать код и рефакторить — это как «писать» и «редактировать статью», сложно делать одновременно.
Если кусок кода… twitter.com/i/web/status/1…
7:14А ещё (самое сложное для меня) надо купировать перфекционизм 😅
Отрефакторить до идеала сложно, а чаще всего не нуж… twitter.com/i/web/status/1…
7:14Чтобы рефакторить безопасно, пишите тесты.
Физерс в «Эффективной работе с легаси» писал о том, как можно рефактори… twitter.com/i/web/status/1…
7:18Он предлагает искать швы — места, в которых можно относительно безопасно «распилить» комбайн на части.
Покрыть швы… twitter.com/i/web/status/1…
7:18Как найти хороший шов?
Обычно шов — это место, где мы можем заменить одно поведение другим: месте соединения модул… twitter.com/i/web/status/1…
7:18Представьте, где именно вы бы разделили систему на несколько частей (по смыслу, по поведению, по зависимостям) — там и будет шов.
7:18В книжке много техник, как работать с кодом, когда вы уже определились со швом.
Типа, как заменить зависимость:
-… twitter.com/i/web/status/1…
Раз уж мы о книгах заговорили, то ещё «Чистый код» Мартина могу посоветовать:
bespoyasov.ru/blog/clean-cod…
Хотя и счита… twitter.com/i/web/status/1…
7:22Ещё офигенная и практичная книга — “Debug it!” («Отдебажь это!», простите за кустарный перевод):… twitter.com/i/web/status/1…
7:26Там даже содержание — это уже рецепт! 😃
Глава 1 — Исследовать обстановку
Глава 2 — Воспроизвести проблему
3 — Опр… twitter.com/i/web/status/1…
Внутри каждой главы есть списки действий под ситуацию. Короче, рекомендую.
7:27От читаемости к тестированию! 🦸
Используйте TDD 🙂
TDD мне экономит кучу времени. К нему надо привыкнуть, потому что сперва приходится «вывернуть мозги», но он быстро окупается.
7:33С ним:
7:33Как упростить тесты при работе по TDD:
7:33С TDD можно искать пахнущий код. Код пахнет, если:
7:33Там же я рассказываю, как помочь увидеть пользу от TDD (и тестов вообще) руководству.
Коротко: говорим только об… twitter.com/i/web/status/1…
7:33Я ещё когда-то написал книжку с примером разработки крестиков-ноликов: bespoyasov.ru/ttt-tdd/
Там показываю, как… twitter.com/i/web/status/1…
7:34TDD можно использовать и при работе с React тоже.
Недавно я проводил воркшоп об использовании TDD при разработке R… twitter.com/i/web/status/1…
7:38Так-с, пора работать!
Продолжим во время обеда 😃
@jsunderhood Основное правило для меня (для читаемости и понимаемости) — не заставлять мозг скакать вверх-вниз по у… twitter.com/i/web/status/1…
Наглядный пример соблюдения SRP и места, где можно провести шов по зависимостям, если вдруг вы обнаружите у себя та… twitter.com/i/web/status/1…
@jsunderhood Основное правило для меня (для читаемости и понимаемости) — не заставлять мозг скакать вверх-вниз по у… twitter.com/i/web/status/1…
8:43
Продолжим!
Чем же так хорош TDD для тестируемости и читаемости?
Он сразу поставит нас в ситуацию, когда сперва п… twitter.com/i/web/status/1…
9:20Напомню стандартный цикл разработки по TDD. В нём 3 этапа:
9:20Когда мы пишем сперва тест, мы автоматически следим за тем, чтобы вызывать функцию было удобно.
Под этим я подраз… twitter.com/i/web/status/1…
9:20Чем больше приходится готовить зависимостей, тем выше вероятность, что модуль делает слишком много — а это нарушение SRP и запах кода.
9:20Когда мы проверяем, с какой причиной падает тест, он становится таким, которому можно доверять.
(Если мы видим, чт… twitter.com/i/web/status/1…
9:20Правильные тесты сразу же закрывают написанную функциональность.
Рефакторить код становится безопасно: если мы чт… twitter.com/i/web/status/1…
9:21А ещё TDD — это единственный способ безопасно (или даже вообще хоть как-то) отрефакторить легаси 😃
9:21Кроме TDD тестируемость улучшит Dependency Injection.
Вместо того, чтобы мокать всё подряд, можно использовать DI… twitter.com/i/web/status/1…
9:25DI — это не обязательно контейнеры и всё такое страшное, можно использовать кустарный DI через объект с зависимостя… twitter.com/i/web/status/1…
9:25@jsunderhood линтер. хук. пайплайн. .editorconfig
Автоматизация рутинной работы — тоже полезная штука, особенно в том, что касается форматирования и выделения ошибок… twitter.com/i/web/status/1…
@jsunderhood линтер. хук. пайплайн. .editorconfig
9:29
Сообщения о комитах — тоже часть кодовой базы.
Мне на больших проектах нравится использовать conventional commits… twitter.com/i/web/status/1…
9:29@jsunderhood Из простого — удаляю старый код и убираю дубликаты.
Копипаста, кстати, не всегда однозначное зло:
bespoyasov.ru/blog/copy-past…
@jsunderhood Из простого — удаляю старый код и убираю дубликаты.
9:33
Дублирование кода _на ранних этапах_ может показать, как всё на самом деле работает, и какие паттерны мы ещё не уви… twitter.com/i/web/status/1…
9:33Чтобы не потерять места с копипастой, помечаю их коммент-флагом `DUPLICATE`.
После самого флага пишу, какую функци… twitter.com/i/web/status/1…
9:33Оно немного противоречит DRY:
ru.wikipedia.org/wiki/Don’t_repeat_yourself
...но экономит время в будущем.
Проще вы… twitter.com/i/web/status/1…
9:33@jsunderhood А можешь рассказать, как это должно работать? Я поняла концепт TDD, когда работаешь с нуля, а вот как… twitter.com/i/web/status/1…
Да ^_^
Если приходится писать тесты для махрового легаси, которое писали до вас, то советую посмотреть на книжку… twitter.com/i/web/status/1…
@jsunderhood А можешь рассказать, как это должно работать? Я поняла концепт TDD, когда работаешь с нуля, а вот как… twitter.com/i/web/status/1…
9:39
Он предлагает искать швы — места, в которых можно относительно безопасно «распилить» комбайн на части.
Покрыть швы… twitter.com/i/web/status/1…
9:39В хорошо написанном коде такие места выделены явно, потому что модули слабо зацеплены.
Представьте, где именно вы… twitter.com/i/web/status/1…
9:39В книжке много техник, как работать с кодом, когда вы уже определились со швом.
Типа, как заменить зависимость:
-… twitter.com/i/web/status/1…
@jsunderhood Dry вообще переоценён
Как и со всеми инструментами, перед применением стоит сравнить выгоды и издержки в каждой конкретной ситуации ^_^
@jsunderhood Dry вообще переоценён
9:41
Кстати, какие вы используете настройки для ESLint? 😃
9:42Ещё, кстати, в TypeScript я стараюсь описывать тип-аргументы в дженериках не одной буквой, а нормальными названиями… twitter.com/i/web/status/1…
9:46А вот старый код — действительно зло. Он отвлекает, а иногда и вводит в заблуждение.
Если я подозреваю, что код м… twitter.com/i/web/status/1…
9:51Тогда я смогу найти удалённое по истории и восстановить.
Это потребует каких-то ресурсов, но зато код будет чище… twitter.com/i/web/status/1…
9:51То же могу сказать и про закомментированный код. Он как бы удалён, но как бы нет.
А когда и как его использовать… twitter.com/i/web/status/1…
9:52Я люблю проверять имена всех экспортируемых сущностей на понятность со стороны пользователя.«Если я буду импорти… twitter.com/i/web/status/1…
Часть треда снова ускакала не туда, простите :–/
Я люблю проверять имена всех экспортируемых сущностей на понятность со стороны пользователя.
«Если я буду импорти… twitter.com/i/web/status/1…
9:59
@jsunderhood Documentation first!
Но если более приземленно, то я выработал привычку перед написанием класса, метод… twitter.com/i/web/status/1…
Тоже описываю API до начала реализации.
Помогает раньше найти ошибки на предыдущем этапе проектирования, если они… twitter.com/i/web/status/1…
@jsunderhood Documentation first!
10:29
Но если более приземленно, то я выработал привычку перед написанием класса, метод… twitter.com/i/web/status/1…
Дальше, чтобы код был понятнее, его должно быть как можно меньше 😃
Всё, что можно может сделать браузер, лучше отд… twitter.com/i/web/status/1…
10:52Нужно сериализовать форму?
Используем FormData:
developer.mozilla.org/en-US/docs/Web…
Там есть конечно трудности со всякими кас… twitter.com/i/web/status/1…
10:52Нужно сделать ленивую загрузку картинок?
Испольуем `loading="lazy"`:
developer.mozilla.org/en-US/docs/Web…
Опять же, полифилим т… twitter.com/i/web/status/1…
10:52Ну вы поняли 😃
Кнопки — кнопками, короче.
Непонятное стороннее API лучше прятать за фасадом, чтобы намерение было выразительнее:
github.com/kamranahmedse/…
Если язык позволяет, то для выбора из нескольких вариантов используйте pattern matching:
10:52Снова перерыв на работу 🙂
Вечером продолжим!
@jsunderhood А ещё есть proposal на pattern matching в js, надеюсь, когда-нибудь мы его увидим)
github.com/tc39/proposal-…
🔥
@jsunderhood А ещё есть proposal на pattern matching в js, надеюсь, когда-нибудь мы его увидим)
13:01
github.com/tc39/proposal-…
Запрос — функция, которая возвращает результат и не имеет сайд-эффектов.
Команда — функция, которая меняет состоя… twitter.com/i/web/status/1…
13:39На чтение такого кода уходит меньше сил, потому что ожидания при чтении оправдываются, и мы можем строить прогнозы… twitter.com/i/web/status/1…
13:39Ещё один приём рефакторинга, который улучшает читаемость — вынесение деталей в метод или функцию:
-… twitter.com/i/web/status/1…
В этом случае мы как бы прячем детали за названием функции.
Плюс в том, что нам не требуется больше прыгать по ра… twitter.com/i/web/status/1…
13:43Ещё одна важная часть читаемого кода — это ошибки и стек-трейс.
За сообщениями об ошибках тоже надо следить, пото… twitter.com/i/web/status/1…
13:44Чем чище и понятнее ошибки, тем проще дебажить код ¯\_(ツ)_/¯
13:44Кстати, вот мы говорили про вынесение кода в функцию или метод.
Можно делать это не руками, а встроенными инструм… twitter.com/i/web/status/1…
13:50Ну и конечно — документация!
В ней нам стоит описывать не «как оно работает», а «почему оно работает именно так».… twitter.com/i/web/status/1…
13:52А на вопрос «как оно работает», считаю, должны отвечать тесты 🙂
13:52Давайте теперь поговорим о том, когда можно продать часть читаемости взамен на производительность 😃
13:59У меня за всё время работы таких случаев не было вообще. Обычно мне хватает оптимизаций при сборке.
Но вдруг и с J… twitter.com/i/web/status/1…
14:00Случаи из не-JS мира тоже приветствуются! 😃
14:01@jsunderhood Иногда встречаются ситуации, когда приходится делать не React-Way, например, чтоб всё не тормозило без… twitter.com/i/web/status/1…14:28
Как и обещал, начнём с наброса 😃
Что такое чистая архитектура, зачем нужна, плюсы, издержки.Если вы работали c y… twitter.com/i/web/status/1…
Что происходило на неделе / Понедельник:
Архитектура, проектирование, зачем это всё, как подружить DDD и чистую ар… twitter.com/i/web/status/1…
Как и обещал, начнём с наброса 😃
Что такое чистая архитектура, зачем нужна, плюсы, издержки.Если вы работали c y… twitter.com/i/web/status/1…
14:58
Да! ^_^Недавно меня уже спрашивали в Твитере, что-куда-и-как можно вынести.
Я ответил на примере приложения с… twitter.com/i/web/status/1…
Спроектировали магазин печенек по всем канонам ЧА и DDD:
Да! ^_^
Недавно меня уже спрашивали в Твитере, что-куда-и-как можно вынести.
Я ответил на примере приложения с… twitter.com/i/web/status/1…
14:58
Теперь немного о собственно проектировании.Допустим, мы знаем, что нашему проекту _нужна_ суровая масштабируемос… twitter.com/i/web/status/1…
Обсудили практические аспекты проектирования:
Теперь немного о собственно проектировании.
Допустим, мы знаем, что нашему проекту _нужна_ суровая масштабируемос… twitter.com/i/web/status/1…
14:58
Доброе утро! Сегодня вторник, а значит поговорим об ООП на фронте.Пока я заливаю в себя кофе, давайте проведём оп… twitter.com/i/web/status/1…
Вторник: ООП, надо ли его использовать во фронтенде, как это делать, как это делать проще.
Доброе утро! Сегодня вторник, а значит поговорим об ООП на фронте.
Пока я заливаю в себя кофе, давайте проведём оп… twitter.com/i/web/status/1…
14:58
Парадигма программирования, как и архитектура, — это инструмент для укрощения сложности. И, как с архитектурой, нам… twitter.com/i/web/status/1…
Обсудили, почему проектировать удобнее в терминах ООП, но не обязательно в них:
Парадигма программирования, как и архитектура, — это инструмент для укрощения сложности. И, как с архитектурой, нам… twitter.com/i/web/status/1…
14:58
Продолжим 🙂
Чем ООП полезен?Мне очень нравится, как ООП помогает делать мой код масштабируемым и тестируемым.
Чем ООП полезно:
Продолжим 🙂
Чем ООП полезен?Мне очень нравится, как ООП помогает делать мой код масштабируемым и тестируемым.
14:58
Теперь поговорим о том, чем ООП неудобен 🙂Расскажите о своём опыте тоже? пробовали ли? что не понравилось?
Чем ООП неудобно:
Теперь поговорим о том, чем ООП неудобен 🙂
Расскажите о своём опыте тоже? пробовали ли? что не понравилось?
14:58
А теперь — о том, почему наследование как концепт должно умереть 😃
Composition over inheritance:
А теперь — о том, почему наследование как концепт должно умереть 😃
14:58
А сегодня поговорим о том, как сделать код читаемым и тестируемым ^_^Расскажите о своих приёмах, как вы улучшаете… twitter.com/i/web/status/1…
Среда: как сделать код читаемым и тестируемым.
А сегодня поговорим о том, как сделать код читаемым и тестируемым ^_^
Расскажите о своих приёмах, как вы улучшаете… twitter.com/i/web/status/1…
14:58
Шаблон A/HC/LC:
prefix? + action (A) + high context (HC) + low context? (LC)В идеале по названию переменной долж… twitter.com/i/web/status/1…
Шаблон для нейминга сущностей:
Шаблон A/HC/LC:
prefix? + action (A) + high context (HC) + low context? (LC)В идеале по названию переменной долж… twitter.com/i/web/status/1…
14:58
Используйте паттерны проектирования.Есть замечательная подборка паттернов на том же Гитхабе, очень советую посмот… twitter.com/i/web/status/1…
Паттерны проектирования:
Используйте паттерны проектирования.
Есть замечательная подборка паттернов на том же Гитхабе, очень советую посмот… twitter.com/i/web/status/1…
14:58
От читаемости к тестированию! 🦸
Используйте TDD 🙂
Как и зачем использовать TDD:
От читаемости к тестированию! 🦸
14:58
Используйте TDD 🙂
Продолжим!Ещё один приём, который улучшает читаемость — CQS, command-query separation.
Приёмы и эвристики для улучшения читаемости:
Продолжим!
Ещё один приём, который улучшает читаемость — CQS, command-query separation.
14:58
Да ^_^Если приходится писать тесты для махрового легаси, которое писали до вас, то советую посмотреть на книжку… twitter.com/i/web/status/1…
Что делать с махровым легаси:
Да ^_^
Если приходится писать тесты для махрового легаси, которое писали до вас, то советую посмотреть на книжку… twitter.com/i/web/status/1…
14:58
Копипаста, кстати, не всегда однозначное зло:
bespoyasov.ru/blog/copy-past… twitter.com/myjsalterego/s…
Копипаста — не всегда однозначное зло:
Копипаста, кстати, не всегда однозначное зло:
14:58
bespoyasov.ru/blog/copy-past… twitter.com/myjsalterego/s…
Подведём итоги за сегодня 🙂
16:33Завтра поговорим о том, как расти в разработке. Обсудим, что лучше:
16:36@jsunderhood Товарищ ошибается, и usr - это не аббревиатура :-) /usr означает "user", но со временем пользовательск… twitter.com/i/web/status/1…
Я скорее тут хочу подсветить, сколько недопонимания это имя вызывает 🙂
В ядре Линукса, думаю, хватает ограничений,… twitter.com/i/web/status/1…
@jsunderhood Товарищ ошибается, и usr - это не аббревиатура :-) /usr означает "user", но со временем пользовательск… twitter.com/i/web/status/1…
17:42
# Четверг 86 твитов
Доброе утро четверга! ^_^
Чем ближе конце недели, тем больше мы уходим от хард-скилов 😃
Сегодня поговорим о том,… twitter.com/i/web/status/1…
6:28На самом деле понятно, что пункты не взаимоисключающие, в жизни их можно сочетать 🙂
Я попробовал всё, кроме, пожал… twitter.com/i/web/status/1…
6:28За весь свой опыт я помню 3 случая, когда рост был взрывным — и все 3 случая были на работе под присмотром ментора 😃
6:28Верстать я начал ещё в школе, но там у меня под рукой лишь были курсы Попова и много свободного времени 😃
Показат… twitter.com/i/web/status/1…
6:28С программированием было прям совсем худо.
Гугл не особо помогал, потому что я ещё не умел нормально гуглить вопр… twitter.com/i/web/status/1…
6:28Первый значительный скачок произошёл году в 2010, на первом большом проекте. Писали на пару с чуваком из, кажется,… twitter.com/i/web/status/1…
6:28Я тогда узнал про Ноду, прокачался во взаимодействии между сервером и браузером, анимации поднатаскал, даже какое-т… twitter.com/i/web/status/1…
6:28Я бы не сказал, что он был прям ментором, но на ошибки указывал, хорошие решения подсказывал.
Забавно, что всё это… twitter.com/i/web/status/1…
6:28Второй скачок был в команде, где я написал CRM
bespoyasov.ru/projects/reque…
Там познакомился с Реактом, написал первый… twitter.com/i/web/status/1…
6:28Там и поуправлять другими разработчиками получилось немного, и блог переосмыслить (хотя и к тому времени пока что н… twitter.com/i/web/status/1…
6:28Третий скачок был в D2. Тут техдир открыл мне дорогу в «настоящее программирование™» 😅
Я пописал на шарпе и .net,… twitter.com/i/web/status/1…
6:28Ну и сейчас я вот занимаюсь R&D проектами всякого около-ML толка. Учусь реализовывать алгоритмы, которые нахожу в р… twitter.com/i/web/status/1…
6:28Надо было, чтобы кто-то разжевал что с чем складывать, чтобы оно работало.
К некоторым книгам я возвращаюсь время… twitter.com/i/web/status/1…
6:28Университет, пожалуй, был самым малополезным из всех перечисленных пунктов.
Ну то есть, там были попытки привить… twitter.com/i/web/status/1…
6:30Хотя не, помню!
Сети с администрированием полезными оказались и плюсы немножко.
Мне, правда, было больше по кайф… twitter.com/i/web/status/1…
6:30И вот сейчас смотря на это всё я думаю, что «ментор на работе» — это прям самое эффективное сочетание для роста 😃
А что думаете вы?
6:30Доброе утро четверга! ^_^Чем ближе конце недели, тем больше мы уходим от хард-скилов 😃
Сегодня поговорим о том,… twitter.com/i/web/status/1…
Четверг: как расти разработчикам, как расти эффективнее.
Доброе утро четверга! ^_^
Чем ближе конце недели, тем больше мы уходим от хард-скилов 😃
Сегодня поговорим о том,… twitter.com/i/web/status/1…
6:31
Сейчас я доберусь до завтрака и поговорим о плюсах и минусах каждого из пунктов 🙂
6:33@jsunderhood Да. Но это очень редко происходит. Тут надо чтобы звёзды совпали: попался хороший ментор, пока ты джун.
По моему опыту хороший ментор мне нужен не только, когда я был джуном.
Проблема в том, что чем выше я уже вырос, т… twitter.com/i/web/status/1…
@jsunderhood Да. Но это очень редко происходит. Тут надо чтобы звёзды совпали: попался хороший ментор, пока ты джун.
7:18
Мне ещё очень нравится вот эта заметка о росте, не могу не поделиться:
7:38Мне сейчас повезло: я попал в команду, откуда можно опыт тоннами выкачивать — чем и занимаюсь 😃
7:40Давайте начнём с университета ¯\_(ツ)_/¯
Я понимаю, что не мне с моим дипломом Уфимского технического говорить об у… twitter.com/i/web/status/1…
7:47Из плюсов я сейчас вижу, пожалуй, нетворкинг. Это именно то, чем я не занимался в университете 😅
Университет — это… twitter.com/i/web/status/1…
7:47Ещё один плюс — могут научить действительно полезным вещам, если попасть в правильный ВУЗ и на правильную специальн… twitter.com/i/web/status/1…
7:47Ещё плюс: отсрочка и военная кафедра ¯\_(ツ)_/¯
Я при поступлении уже работал, знал, где хочу развиваться и куда р… twitter.com/i/web/status/1…
7:47Из минусов — образовательные программы по большей части не успевают за рынком.
У нас в программе нейронные сети сч… twitter.com/i/web/status/1…
7:52Офлайн-лекции.
Мне нравилось ходить только на лекции по матану — преподаватель делал из лекции шоу.
Он всегда чи… twitter.com/i/web/status/1…
7:52Одна единственная специальность.
В 17 лет мне надо выбрать то, чем я буду заниматься ближайшие 5 лет, а то и всю ж… twitter.com/i/web/status/1…
7:52Преподаватели, которым не хочется учить / хочется утвердиться.
Таких я не помню, чтобы встречал, но слышал рассказ… twitter.com/i/web/status/1…
7:55В общем, всё сильно зависит от ВУЗа, но я больше склоняюсь ко мнению, что мне он оказался почти бесполезен.
Исключ… twitter.com/i/web/status/1…
7:58Курсы! 😃
Я проходил какие-то курсы на Udemy и где-то ещё.
Тут могу сказать, что любые новые знания с курсов надо… twitter.com/i/web/status/1…
8:05В курсах, мне кажется, самое полезное и важное — обратная связь и сообщество.
Потому что учиться надо на ошибках,… twitter.com/i/web/status/1…
8:05Курсы без обратной связи тоже имеют право на жизнь, но и стоить они тогда должны совсем копейки или быть бесплатными.
8:05+: курсов огромное количество.
–: а чёрт поймёт, какого они качества 😃
+: можно (хоть и трудно) найти качественную… twitter.com/i/web/status/1…
8:05Несомненный жирнейший плюс — это настоящий рабочий опыт, которым можно светить в резюме.
Да, даже если это была га… twitter.com/i/web/status/1…
8:11Новичкам в боевой разработке трудно определить, они в хорошую компанию вот попали или нет? То, как устроены процесс… twitter.com/i/web/status/1…
8:11Другой плюс боевой разработки: нет романтического флёра IT, который иногда продают курсы. Просто ещё одно ремесло.… twitter.com/i/web/status/1…
8:17Минус — это может отпугнуть, если попасть не туда 😞
8:17@jsunderhood Если бы в вузе можно было бы купить изучение одного предмета как курс, было бы топ
Да! Я бы «сети» как раз и купил 😅
@jsunderhood Если бы в вузе можно было бы купить изучение одного предмета как курс, было бы топ
8:23
Ещё один плюс боевой разработки: она помогает бороться с перфекционизмом.
Он мне постоянно мешает, особенно в пет-… twitter.com/i/web/status/1…
8:25А если попасть в хорошую команду, то можно найти людей, у которых перенимать опыт.
8:25Что в боевой разработке было для меня сложным: бывали моменты, когда я занимался одним и тем же, не развиваясь вооб… twitter.com/i/web/status/1…
8:49Особенно отчётливо это было на фрилансе и на галере 😃
Нужно было много работать, чтобы были деньги, но делать прих… twitter.com/i/web/status/1…
8:49Зато я научился многое автоматизировать.
Придумал себе, кхм, «веб-компоненты» 😅
bespoyasov.ru/blog/templates/
Это были такие папки с «компонентами». Каждый компонент состоял из HTML-шаблона, каких-то скелетных стилей и скрипт… twitter.com/i/web/status/1…
8:49Я их подключал, конечно, не одним импортом, а тремя (разметка, стили и скрипты), но работали они независимо друг от друга и от контекста 😃
8:49Там же пришлось научиться и «прогрессивному джипегу» в вёрстке:
bespoyasov.ru/blog/time/
Типа страница готова в люб… twitter.com/i/web/status/1…
8:49А вот work-life баланс найти на фрилансе трудно. Для этого, кажется, нужна культура и команда.
8:49Чуть позже поговорим о менторстве 🙂
8:50@jsunderhood Идеально иметь такое комбо:боевая разработка + ментор в том же контексте (старший коллега, которому… twitter.com/i/web/status/1…
Да, если ментор где-то «на стороне», много контекста задачи может потеряться при коммуникации.
Окружение и команда… twitter.com/i/web/status/1…
@jsunderhood Идеально иметь такое комбо:
боевая разработка + ментор в том же контексте (старший коллега, которому… twitter.com/i/web/status/1…
10:23
@jsunderhood Можно прийти к состоянию, когда работа превращается в профессиональный спорт. А это ещё хуже.Но само… twitter.com/i/web/status/1…
❗️
@jsunderhood Можно прийти к состоянию, когда работа превращается в профессиональный спорт. А это ещё хуже.
Но само… twitter.com/i/web/status/1…
10:31
Продолжим!
Расскажу, почему я считаю, что ментор нужен, почему не только джунам и почему боевая разработка без менторства растит медленнее.
10:44Ментор, как мне кажется, — это не учитель.
Возможно, у меня искажение, но при слове «учитель» я сразу представляю… twitter.com/i/web/status/1…
10:44Для меня ментор — это как кто-то кто переехал в другую страну до меня, насобирал шишек и теперь может предупредить… twitter.com/i/web/status/1…
10:44Причём, _хорошие_ менторы в состоянии определить, о каких ошибках они могут предупредить меня заранее, а какие — мн… twitter.com/i/web/status/1…
10:44Объясню: очень сложно передать какой-то опыт словами.
Слова — это код, модель. (Карта, если хотите.) Они не могут… twitter.com/i/web/status/1…
10:44Хороший ментор в состоянии оценить мой уровень и сделать вывод о том, какие вещи я смогу понять, просто обсудив их, а какие — пока нет.
10:44И вот тут хочется сказать, почему я считаю, что ментор нужен не только джунам.
Мидлы и сеньоры могут сталкиваться… twitter.com/i/web/status/1…
10:44Такие задачи ставят в ступор и могут привести к параличу анализа, когда принять решение вообще не получается:
ru.wikipedia.org/wiki/Аналитиче…
Менторы, как более опытные разработчики, могут поделиться опытом решения подобных задач.
Прекрасно — если они уже… twitter.com/i/web/status/1…
10:45Но даже если нет, чем больше разнообразного релевантного опыта, тем больше шансов выбрать оптимальное решение для задачи.
10:45Особенно это полезно, когда мы подходим к более философским задачам:
10:50Мне кажется, на более поздних этапах менторы уже скорее идейные вдохновители что ли. Сложно сформулировать 🤔
Они… twitter.com/i/web/status/1…
10:50Для джунов, как по мне, ментор — это вообще обязательно.
Я вот жалею, что у меня было мало возможностей учиться на… twitter.com/i/web/status/1…
10:53Кстати! Как вы считаете, какими навыками должен обладать хороший ментор?
Понятно, что уметь разжёвывать сложное пр… twitter.com/i/web/status/1…
10:53Скоро закончу с задачами на работе и вернусь, чтобы обсудить опен-сорс 😃
12:33Ну теперь давайте поговорим и об опен-сорсе!
У меня опыта в трушном™ опен-сорсе нет. Весь мой Гитхаб — это пара не… twitter.com/i/web/status/1…
14:43И я, если честно, не очень понимаю, как эффективно расти через опен-сорс, особенно если я новичок.
Я когда был джу… twitter.com/i/web/status/1…
14:43Просить объяснить я не могу, потому что просто так буду отнимать у людей время — они же занимаются опен-сорсом в св… twitter.com/i/web/status/1…
14:43Просто присылать пул-реквесты — тоже нутакое.
Мейнтейнерам придётся не только отвлечься, но ещё и накатать какой-… twitter.com/i/web/status/1…
14:43Остаётся — делать какие-то библиотечки и пакетики, которые будут кому-то полезны.
Первым у меня был `groontograf`… twitter.com/i/web/status/1…
14:43Было ещё приложеньице для конвертации дат в таймштампы и обратно. Кому-то вроде даже было полезно.
Но опять-таки,… twitter.com/i/web/status/1…
14:43Из каких-то более полезных вещей:
Букмарк, скриптик для навигации по странице
Прокрутчи… twitter.com/i/web/status/1…
14:43Собственно вопрос: в чём секрет роста через опен-сорс?
Как это делать?
Как это делать этично, чтобы никому не дос… twitter.com/i/web/status/1…
Давайте начнём с университета ¯\_(ツ)_/¯Я понимаю, что не мне с моим дипломом Уфимского технического говорить об у… twitter.com/i/web/status/1…
Плюсы и минусы университета:
Давайте начнём с университета ¯\_(ツ)_/¯
Я понимаю, что не мне с моим дипломом Уфимского технического говорить об у… twitter.com/i/web/status/1…
15:25
Курсы! 😃
Я проходил какие-то курсы на Udemy и где-то ещё.Тут могу сказать, что любые новые знания с курсов надо… twitter.com/i/web/status/1…
О курсах программирования:
Курсы! 😃
Я проходил какие-то курсы на Udemy и где-то ещё.Тут могу сказать, что любые новые знания с курсов надо… twitter.com/i/web/status/1…
15:25
Идём к самому интересному 😃Давайте следующим пунктом выберем боевую разработку.
Боевая разработка — помогает расти:
Идём к самому интересному 😃
Давайте следующим пунктом выберем боевую разработку.
15:25
Продолжим!Расскажу, почему я считаю, что ментор нужен, почему не только джунам и почему боевая разработка без менторства растит медленнее.
Зачем нужны менторы и не только джунам:
Продолжим!
Расскажу, почему я считаю, что ментор нужен, почему не только джунам и почему боевая разработка без менторства растит медленнее.
15:25
Ну теперь давайте поговорим и об опен-сорсе!У меня опыта в трушном™ опен-сорсе нет. Весь мой Гитхаб — это пара не… twitter.com/i/web/status/1…
Как расти через опен-сорс?
Ну теперь давайте поговорим и об опен-сорсе!
У меня опыта в трушном™ опен-сорсе нет. Весь мой Гитхаб — это пара не… twitter.com/i/web/status/1…
15:25
@jsunderhood Как вариант, пробовать как-то контрибьютить тут cultofmartians.com16:58
Завтра утром подведём итоги сегодняшнего опроса из начала треда и начнём говорить о технических блогах ^_^
17:09Это первый тред, который не сломался за день ни в одном месте 😅
17:10# Пятница 107 твитов
Итак, самое большое влияние оказала боевая разработка. Ментор на втором месте, университет и курсы — на третьем. pic.twitter.com/A86m0Oji9b
6:31Давайте под конец рабочей недели поговорим о ведении технического (и не только) блога!
6:39Расскажите, ведёте ли вы свой блог?
как начинали?
что подтолкнуло?
что для вас самое сложное?
какие плюшки вы от блога получаете?
Я пока начну и расскажу о своём блоге:
bespoyasov.ru/blog/
Начал я его вести примерно тогда же, когда начал ра… twitter.com/i/web/status/1…
6:42Бывает, правда, кажется, будто писать не о чем.
«Все обо всём уже давно написали, и смысла повторяться нет.»
Пиши… twitter.com/i/web/status/1…
7:09...Если нет, то это повод перечитать книгу и дополнить конспект.
Потом я подумал, чего б не делать конспекты хорош… twitter.com/i/web/status/1…
7:09Ну и в целом в блог я иногда скидываю удачные приёмы, которые особо больше негде хранить.
Например, вот пост-снип… twitter.com/i/web/status/1…
7:09Я начал собирать стандартные ответы в заметочку, которую потом использовал как шаблон.
О шаблонах и инсайдах я пот… twitter.com/i/web/status/1…
7:09Позже я стал отвечать на вопросы людей из почты и сотрудников. Когда я заметил, что они тоже повторяются, начал пос… twitter.com/i/web/status/1…
7:09Из таких стандартных ответов могу вот привести:
-
Как описывать баги
bespoyasov.ru/blog/cant-repr… -
О документации… twitter.com/i/web/status/1…
7:10
Это, правда, почти не повлияло на мою устную речь. Этот навык надо, видимо, отдельно развивать 😅
7:16@jsunderhood ЖЖ -> Wordpress.com -> Standalone WP -> ЭГЕЯ -> 11ty.Самое сложное: вести и не забывать.… twitter.com/i/web/status/1…
Офферы — жизненно!
У меня тоже большая часть офферов из блога:
twitter.com/jsunderhood/st…
@jsunderhood ЖЖ -> Wordpress.com -> Standalone WP -> ЭГЕЯ -> 11ty.
Самое сложное: вести и не забывать.… twitter.com/i/web/status/1…
7:19
@jsunderhood Я такой: о. Вот это надо написать. Открываю ношн, сажусь писать, отвлекаюсь, возвращаюсь, читаю, нудят… twitter.com/i/web/status/1…
О том, как не отвлекаться, сегодня тогда тоже поговорим :–)
@jsunderhood Я такой: о. Вот это надо написать. Открываю ношн, сажусь писать, отвлекаюсь, возвращаюсь, читаю, нудят… twitter.com/i/web/status/1…
7:20
А сейчас поговорим о том, как вытащить из себя статью.
7:23Итак, у меня есть идея для статьи. Я сажусь её писать, и...
То чаю захотелось, то в Твитере что-то интересное пишу… twitter.com/i/web/status/1…
7:36Есть три принципа, которыми я пользуюсь, чтобы избегать ступора, прокрастинации и разочарования:
7:36Я замечал за собой, что прокрастинирую я те задачи, которые кажутся большими, объёмными и _непонятными_.
Новый пос… twitter.com/i/web/status/1…
7:36Все эти вопросы так или иначе возникают при написании статьи.
Просто мы можем не отдавать себе отчёт, что они ест… twitter.com/i/web/status/1…
7:36Первый принцип «Есть слона по частям» старается разбить большую непонятную задачу на маленькие куски.
Такие малень… twitter.com/i/web/status/1…
7:36Этот же принцип я применяю при собственно написании текста статьи.
Я не пишу сразу огромную портянку на 40 тысяч с… twitter.com/i/web/status/1…
7:36Причём
7:36@jsunderhood давно хочу писать тех блог, но торможу, кажется, ну что нового я могу еще сказать? хотела писать про с… twitter.com/i/web/status/1…
Муки при обучении — вообще топ-тема, и вот почему:
- Учителя прокляты знаниями
ru.wikipedia.org/wiki/Проклятие…
Они иногд… twitter.com/i/web/status/1…
@jsunderhood давно хочу писать тех блог, но торможу, кажется, ну что нового я могу еще сказать? хотела писать про с… twitter.com/i/web/status/1…
7:41
Статьи из разряда, «мы столкнулись с такими проблемами» помогают открыть глаза на эти вещи.
7:41Оказалось — это один из самых читаемых постов вообще.
- Отразить процесс обучения, чтобы отрефлексировать его.
П… twitter.com/i/web/status/1…
7:41@jsunderhood Ну, получается, хорошее время для анонса — я завел блог. Пишу про фронтенды, JS и архитектуру.… twitter.com/i/web/status/1…
^_^
@jsunderhood Ну, получается, хорошее время для анонса — я завел блог. Пишу про фронтенды, JS и архитектуру.… twitter.com/i/web/status/1…
7:42
А сейчас поговорим о том, как вытащить из себя статью.
Разворачиваю тему в основном треде 🧵
А сейчас поговорим о том, как вытащить из себя статью.
7:43
Когда у меня появился примерный конспект из заголовков и, кхм, тегов-ключевых-фраз, я могу уже приступить к собственно тексту.
7:47И тут наступает проблема «белого листа» — С Ч Е Г О Н А Ч А Т Ь ? 😃
Используйте второй принцип: «ну блин коро… twitter.com/i/web/status/1…
7:47Пишите просто сплошняком, без абзацев, без разбиения на предложения. Строчите из буквомёта, пока идёт.
Не беспокой… twitter.com/i/web/status/1…
7:47Старайтесь разделять сессии написания и редактирования.
Это разные задачи, их решать надо тоже по-разному. При ре… twitter.com/i/web/status/1…
7:47Всё это встаёт в прямое противоречие с «написанием».
Можно сравнить написание с брейм-штормом, а редактирование — с анализом результатов.
7:47Итак, вот белый лист мы кроем очередью из буквомёта. И в какой-то момент он перестаёт стрелять...
Как так? Неужел… twitter.com/i/web/status/1…
7:53Важно: во время перерыва я не смотрю на то, что написал. Вообще.
Если я отдыхаю от текста, то не вспоминаю о нём д… twitter.com/i/web/status/1…
7:53В следующий раз, когда я сяду за текст, я буду отдохнувшим от него (что позволит найти ошибки и нелогичное повество… twitter.com/i/web/status/1…
7:53Забавно, но именно во время мытья посуды или прогулки я придумываю хорошие доводы и сравнения для своих статей ¯\_(ツ)_/¯
7:53Хорошо, вот за несколько подходов мы наполнили структуру из заголовков каким-то текстом.
Там нет абзацев, иногда н… twitter.com/i/web/status/1…
7:56Я обычно сперва проверяю логику повествования:
7:56На этом этапе можно переделывать структуру всего текста, как захочется, потому что сил потрачено ещё не очень много… twitter.com/i/web/status/1…
7:56Когда с логикой всё хорошо, можно углубляться в сам текст:
7:58После того, как текст становится монолитом, где ни убрать, ни добавить, можно приступать к пунктуации, орфографии и грамматике.
7:58@kumma_kirill @jsunderhood Я вот мигрировал с Медиума на свой сайт ☺️
Поддерживаю собственные сайты!
(Об этом тоже будет тред 😃)
@kumma_kirill @jsunderhood Я вот мигрировал с Медиума на свой сайт ☺️
7:58
Если есть роскошь дать кому-то почитать — обязательно дайте.
Чей-то информационный пузырь, который отличается от… twitter.com/i/web/status/1…
8:00Днём поговорим о том, что выбрать:
8:01@jsunderhood 1. Личный бренд.9:29
Я топлю и всегда топил за селф-хост.
У платформ я вижу только одно преимущество — можно сразу писать на какую-то а… twitter.com/i/web/status/1…
9:44Я писал немного на newline и сейчас пробую dev.to в рамках эксперимента, чтобы выйти на зарубежную… twitter.com/i/web/status/1…
9:44В селф-хосте мне нравится, что контент всегда остаётся у меня и в одном месте.
Я могу переехать со своими заметкам… twitter.com/i/web/status/1…
9:44— Но для селф-хоста нужен дизайн!
Не-а 😃
Можно наверстать сайт на чистом HTML без стилей. Если есть, что написать… twitter.com/i/web/status/1…
— Но селф-хост надо промоутить!
Сарафанное радио работает не хуже, чем блого-платформы.
(Говорю по опыту:
9:48Кстати, насчёт сарафанного радио.
У Веб-стандартов недавно появился список с инди-блогами о фронтенде ;–)
9:50— Но что, если я не буду писать?
Всегда можно сделать архив с заметками и опубликовать их в тех же gist на Гитхабе… twitter.com/i/web/status/1…
9:51— Но я не хочу кодить, я хочу просто писать!
Если не хочется _много_ кодить, то можно посмотреть на генераторы тип… twitter.com/i/web/status/1…
9:53Окей, а что с языком? 😃
На каком языке писать: русском или английском.
Мне гораздо проще писать на русском и потом… twitter.com/i/web/status/1…
10:01Контрпродуктивно, потому что хороший пост с английского и так переведут на русский, а я делаю двойную работу 😃
Ну,… twitter.com/i/web/status/1…
10:01Англоязычная аудитория по умолчанию шире. Охват будет больше, фидбека будет тоже больше.
Если вы заводите трактор,… twitter.com/i/web/status/1…
10:01@jsunderhood dskr.dev
RSS пока не написал, статьи писать лениво да и выходит кажется не очень(
Дизайн-имитация редактора кода — огонь! 🔥
@jsunderhood dskr.dev
10:07
RSS пока не написал, статьи писать лениво да и выходит кажется не очень(
Чтобы писать на английском, я использую:
10:08Если вы пишете на платформу, где используется Markdown, то вот читщит по нему:
(У карти… twitter.com/i/web/status/1…
10:12В общем, не повторяйте моих ошибок, пишите сразу на английском 😃
10:13Отправляюсь работать.
После поговорим об RSS (надо / не надо) и как вставлять примеры кода (нужна ли подсветка, с… twitter.com/i/web/status/1…
10:14Продолжим 🙂
Давайте ещё один опрос!Self-hosted блог или чья-то платформа?
Развернул тему в основном треде 🧶
Продолжим 🙂
Давайте ещё один опрос!Self-hosted блог или чья-то платформа?
11:58
Продолжим!
RSS — надо или нет. До сих пор считаю, что ничего лучше для подписки на блог не придумали 😃
А когда п… twitter.com/i/web/status/1…
12:30Не у всех платформ RSS есть, и в селф-хосте добавить его тоже бывает сложно.
Мне вот пришлось писать собственный с… twitter.com/i/web/status/1…
12:30Но RSS для меня — единственное место, где блоги читать _удобно_.
Почта — для работы, я сейчас наоборот чищу почту… twitter.com/i/web/status/1…
12:30А теперь о примерах кода 😃
Вот мы пишем статью о какой-то технологии или случае из разработки. Там будет код.
Как его правильно оформить?
12:49Нам же одновременно надо решить почти противоречащие задачи:
12:49Начнём с простого.
— Добавлять ли простые и маленькие примеры?
Да, лучше добавить. Это как в кино, лучше показат… twitter.com/i/web/status/1…
12:49— Писать объяснения до примера, после или внутри?
Расположение не имеет значения, но последовательность — имеет. Л… twitter.com/i/web/status/1…
12:49Хорошо, потому что объяснение находится прямо в том месте, которое объясняет.
Лучше написать комментарий перед стр… twitter.com/i/web/status/1…
12:49Мне ещё кажется, это более привычно для читателей, потому что они сами видят комментарии именно в таком виде на работе.
12:49— Как выбрать, какой код добавлять в статью?
Я стараюсь добавлять код, который относится _непосредственно_ к теме… twitter.com/i/web/status/1…
12:49— Что делать с примерами, которые не делятся?
В первую очередь подумать, можно ли это отрефакторить.
Затем подум… twitter.com/i/web/status/1…
12:49Теперь самое сложное:
— Как выбрать, какой именно код и сколько код приводить в примерах?
Откусывайте от кода мал… twitter.com/i/web/status/1…
13:49Если пример кода содержит две идеи, его лучше распилить. Если в примере есть детали не по теме, из лучше убрать.
О… twitter.com/i/web/status/1…
13:49Показываем предпосылку к идее на простом примере кода:
(Зависимости — это как аргументы.) pic.twitter.com/HVnUYm0Gpq
13:49Обращаем внимание на детали, которые помогут вникнуть в идею позже:
(Кроме аргументов мы используем глобальный объ… twitter.com/i/web/status/1…
13:49Приводим читателей за руку в собственно идею:
(Такие зависимости тоже можно передавать явно.
Обратите внимание,… twitter.com/i/web/status/1…
13:49Этот же кусок кода мы дальше используем, как опорную точку для развития идеи:
(Важно описать поведение, не важно,… twitter.com/i/web/status/1…
13:49@jsunderhood I write books amazon.com/gp/product/B08…
Или даже так! 😃
@jsunderhood I write books amazon.com/gp/product/B08…
13:50
Так, от простого и _знакомого читателям_ кода мы переходим к новым для них концепциям.
Знакомый код даёт ощущение… twitter.com/i/web/status/1…
13:52Давайте под конец рабочей недели поговорим о ведении технического (и не только) блога!
Пятница; говорим о технических блогах, зачем вести, как, что это даёт:
Давайте под конец рабочей недели поговорим о ведении технического (и не только) блога!
14:03
Я пока начну и расскажу о своём блоге:
bespoyasov.ru/blog/Начал я его вести примерно тогда же, когда начал ра… twitter.com/i/web/status/1…
6 причин, для чего вести:
Я пока начну и расскажу о своём блоге:
bespoyasov.ru/blog/Начал я его вести примерно тогда же, когда начал ра… twitter.com/i/web/status/1…
14:03
А сейчас поговорим о том, как вытащить из себя статью.
Как помочь себе начать писать и довести статью до конца:
А сейчас поговорим о том, как вытащить из себя статью.
14:03
И тут наступает проблема «белого листа» — С Ч Е Г О Н А Ч А Т Ь ? 😃Используйте второй принцип: «ну блин коро… twitter.com/i/web/status/1…
Проблема белого листа
:
И тут наступает проблема «белого листа» — С Ч Е Г О Н А Ч А Т Ь ? 😃
Используйте второй принцип: «ну блин коро… twitter.com/i/web/status/1…
14:03
Продолжим 🙂
Давайте ещё один опрос!Self-hosted блог или чья-то платформа?
Self-hosted блог или блого-платформа:
Продолжим 🙂
Давайте ещё один опрос!Self-hosted блог или чья-то платформа?
14:03
Окей, а что с языком? 😃
На каком языке писать: русском или английском.Мне гораздо проще писать на русском и потом… twitter.com/i/web/status/1…
Какой выбрать язык:
Окей, а что с языком? 😃
На каком языке писать: русском или английском.Мне гораздо проще писать на русском и потом… twitter.com/i/web/status/1…
14:03
А теперь о примерах кода 😃Вот мы пишем статью о какой-то технологии или случае из разработки. Там будет код.
Как его правильно оформить?
Как добавлять примеры кода:
А теперь о примерах кода 😃
Вот мы пишем статью о какой-то технологии или случае из разработки. Там будет код.
Как его правильно оформить?
14:03
@jsunderhood 1. Веду defront.ru
Блог — может стать основной работой! 🔥
Кстати, спасибо на defront — огнище огненное ^_^
@jsunderhood 1. Веду defront.ru
16:37
Продолжим 🙂
Давайте ещё один опрос!Self-hosted блог или чья-то платформа?
Подъехали результаты опроса: большая часть тоже топит на селф-хост! pic.twitter.com/wZV07YR4qH
Продолжим 🙂
Давайте ещё один опрос!Self-hosted блог или чья-то платформа?
16:39
Ну и предлагаю сегодня закончить пораньше — пятница всё-таки 😃
16:46@jsunderhood Написать хорошую нехеловордную статью - это нифиговая работа.
А статью про хеловорды и так напишут люб… twitter.com/i/web/status/1…
Хорошая статья не обязана быть большой.
Можно писать небольшие заметки о деталях разработки, о которых не все зна… twitter.com/i/web/status/1…
@jsunderhood Написать хорошую нехеловордную статью - это нифиговая работа.
17:02
А статью про хеловорды и так напишут люб… twitter.com/i/web/status/1…
Ещё мне не нравится идея равнять возможности всех людей под какой-то «стандарт».
Можно писать хорошие статьи раз в… twitter.com/i/web/status/1…
17:04Но я согласен, что хороший пост — это много работы: ресёрч, формулировка, определение пользы, текст, редактура, код и графика, если надо.
17:05@jsunderhood Давно хотел, недавно собрался и запилил на Gatsby + vercel: blog.beraliv.devПишу про TypeScri… twitter.com/i/web/status/1…
Шрифт кайфовый!
За TypeScript — жирнейший плюс ^_^
@jsunderhood Давно хотел, недавно собрался и запилил на Gatsby + vercel: blog.beraliv.dev
Пишу про TypeScri… twitter.com/i/web/status/1…
20:28
# Суббота 46 твитов
@jsunderhood Сейчас работаю над сборником решений для type-challenges
О, ещё TS!
@jsunderhood Сейчас работаю над сборником решений для type-challenges
ghaiklor.github.io/type-challenge…
6:40
@jsunderhood Статьи: habhub.hyoo.ru
Видео: youtube.com/channel/UCwRUy…
Про инверсию зависимостей на голом TS интересно:
@jsunderhood Статьи: habhub.hyoo.ru
6:43
Видео: youtube.com/channel/UCwRUy…
@jsunderhood Вопрос о комментариях. Своеобразная обратная связь в блоге, кто то использует «сообщить об ошибке», кт… twitter.com/i/web/status/1…
Мне очень лень пркручивать комменты к блогу, хотя надо бы :–/
Антон Жиянов недавно писал об относительно просто с… twitter.com/i/web/status/1…
@jsunderhood Вопрос о комментариях. Своеобразная обратная связь в блоге, кто то использует «сообщить об ошибке», кт… twitter.com/i/web/status/1…
6:46
(Вообще, мне иногда письма шлют на почту и ишьи стали открывать, когда я репозиторий с сайтом сделал публичным.)
6:46@jsunderhood Как только стал активно менторить необходимость в повторении материала на разных людей выросла и стало… twitter.com/i/web/status/1…
Да, я стал регулярно писать, именно когда стало нужно ссылаться на ответы о чём-то.
@jsunderhood Как только стал активно менторить необходимость в повторении материала на разных людей выросла и стало… twitter.com/i/web/status/1…
6:48
@jsunderhood Выкладываю публичные заметки на гитхаб
Тоже вариант!
Из них потом при желании можно вырастить какой-нибудь бложек.
@jsunderhood Выкладываю публичные заметки на гитхаб
6:48
Сейчас я постараюсь проснуться и начну 😅
6:53@jsunderhood Вот последний пет проект: qrcard.ml
В этот раз даже лендинг пейдж доделал 😅
🤖🦾
@jsunderhood Вот последний пет проект: qrcard.ml
7:22
В этот раз даже лендинг пейдж доделал 😅
@jsunderhood Пет проекты — это хорошо. Знаю компании, которые ищут себе сотрудников только по пет-проектам.
А что вы думаете о такой практике?
Мне кажется, это несколько завышенные требования от разработчиков. Объясню в т… twitter.com/i/web/status/1…
@jsunderhood Пет проекты — это хорошо. Знаю компании, которые ищут себе сотрудников только по пет-проектам.
7:26
Я иногда задумываюсь, а не становятся ли пет-проекты и опен-сорс обязательным (и завышенным) требованием при найме?… twitter.com/i/web/status/1…
7:26Пет-проекты — это с одной стороны, способ улучшить свои навыки. А если сойдутся звёзды — то и разбогатеть на мега-с… twitter.com/i/web/status/1…
7:26Одно дело, когда я _горю идеей_ что-то сделать и попробовать; и совсем другое — когда от меня этого _требует_ вакансия.
7:26Тем более что не во всех компаниях выделяют время на опен-сорс или пет-проекты.
Так вроде только в Гугле делали (… twitter.com/i/web/status/1…
7:26У меня из пет-проектов самый долгий (и известный) — это Тяжеловато:
7:31Мы его делали с @Yumadilov, когда нам не на что было выживать 😃
Оттуда и название и дефолтный лимит в один прожиточный минимум 😅
7:31Разработку вели открыто.
Прямо перед началом объявили, что сделаем приложение за две недели и начали об этом писат… twitter.com/i/web/status/1…
7:31Примерно тогда же я начал тыкать в электрон и в курс доллара и сделал Курсовик 😅
Я его… twitter.com/i/web/status/1…
7:40А затем я вообще использовал идею курсовика как основу для воркшопа о тестировании реакт-приложений:
-… twitter.com/i/web/status/1…
7:40Пробовал делать инструменты для разработчиков. Один из тех, которыми пользуюсь сам — Тмстмп:
-… twitter.com/i/web/status/1…
7:40Один из тех, которым пользуюсь не только я, — Прокрутчик:
Скрипт для прокрутки контента… twitter.com/i/web/status/1…
7:40@jsunderhood Не особо, все продвигается оч медленно pic.twitter.com/pOqvT0wBP3
Оно живое! 🤖
@jsunderhood Не особо, все продвигается оч медленно pic.twitter.com/pOqvT0wBP3
7:41
А дальше меня как-то переключило на книги ¯\_(ツ)_/¯
Первым таким пет-проектом-книгой стало «Фронтенд — это не бол… twitter.com/i/web/status/1…
7:45Изначально я хотел сделать доклад, но потом понял, что не хватило бы времени на всё.
Так вместо презентации появи… twitter.com/i/web/status/1…
7:45...Пофильтровали его, подчистили.
На новогодних каникулах я всё сверстал и насобирал мемов для иллюстраций.
В ко… twitter.com/i/web/status/1…
7:45Недолго после этого я проходил какой-то курс о тестировании, где затрагивали тему TDD.
Затрагивали очень поверхнос… twitter.com/i/web/status/1…
7:49Я стащил идею расположения текста и кода отсюда:
(Сейчас кажется, что ещё неплохо было… twitter.com/i/web/status/1…
7:49Когда я начал заниматься проектированием и чуть чаще работать с ООП, я понял, что не понимаю принципов SOLID.
Тогд… twitter.com/i/web/status/1…
7:51Мы решили не просто рассказать о принципах, но ещё и показать их действие на примерах в коде, в жизни и в паттернах… twitter.com/i/web/status/1…
7:51Всё остальное либо не дожило до наших дней, либо не развивается и не поддерживается 😅
7:53С опен-сорсом проще: иногда работа внутри компании позволяет релизнуть что-то в опен-сорс.
А вот с пет-проектами н… twitter.com/i/web/status/1…
7:58@jsunderhood просто пишу на всякие темы по js, которые кажутся интересными8:02
@UntrueMe @jsunderhood Не так прикольно как с роботом гексаподом выглядит, но это мой пет. Это система автоматизаци… twitter.com/i/web/status/1…
Воу! 🤩
@UntrueMe @jsunderhood Не так прикольно как с роботом гексаподом выглядит, но это мой пет. Это система автоматизаци… twitter.com/i/web/status/1…
9:06
@jsunderhood Требовать - нет. Но наличие интересного пет проекта позволяет говорить с кандидатом не на стандартные… twitter.com/i/web/status/1…9:07
@jsunderhood На собеседованиях я всегда интересуюсь, занимается ли разрабочик своими пет проектами, и есть ли чем п… twitter.com/i/web/status/1…
А почему заниматься ремеслом ради выгоды — плохо?
Ведь можно вкладываться и делать хорошо одно дело, на работе, в… twitter.com/i/web/status/1…
@jsunderhood На собеседованиях я всегда интересуюсь, занимается ли разрабочик своими пет проектами, и есть ли чем п… twitter.com/i/web/status/1…
9:11
Я не стараюсь набросить, а скорее разобраться, что побуждает смотреть при найме не только на результаты _работы_, н… twitter.com/i/web/status/1…
9:13Мне понятная мотивация компаний, которые ищут трудоголиков, чтобы те работали по 240 часов в сутки.
Мне понятна м… twitter.com/i/web/status/1…
9:19@YouSysAdmin @jsunderhood 2/2
Что мешает выпускнику переписать его на React или Vue, которые он прошел позднее? Выд… twitter.com/i/web/status/1…
Идея использовать пет-проект, как площадку для оттачивания навыков, которые студент _приобретает во время обучения_… twitter.com/i/web/status/1…
@YouSysAdmin @jsunderhood 2/2
9:33
Что мешает выпускнику переписать его на React или Vue, которые он прошел позднее? Выд… twitter.com/i/web/status/1…
@jsunderhood Я постоянно какие-то пишу, только жалко, что часто забрасываю. Но вообще, часто бывает, что пет проект… twitter.com/i/web/status/1…
Заметил, кстати, что часто упоминают, будто пет-проекты интереснее основной работы 🤔
Нужно ли с этим бороться?
Как?
@jsunderhood Я постоянно какие-то пишу, только жалко, что часто забрасываю. Но вообще, часто бывает, что пет проект… twitter.com/i/web/status/1…
9:41
У меня возникает мысль «найти работу интереснее», но это не всегда возможно.
Отчасти как раз потому, что не всегд… twitter.com/i/web/status/1…
9:43@jsunderhood Раньше вёл блоги про веб, про кино, про игры. Всё кануло в Лету. Остался только Твиттер. И, с недавних… twitter.com/i/web/status/1…
Видео-блоги — тоже блоги 😎
@jsunderhood Раньше вёл блоги про веб, про кино, про игры. Всё кануло в Лету. Остался только Твиттер. И, с недавних… twitter.com/i/web/status/1…
9:49
@jsunderhood Завел блог примерно в то время когда устроился работать программистом.11:04
Начал с того что записывал для… twitter.com/i/web/status/1…
@jsunderhood github.com/unger1984/dia - вебсервер на dart. Решил закодить когда захотелось аналога из ноды13:34
Доброе утро субботы! ^_^Давайте сегодня поболтаем о пет-проектах?
Суббота — пет-проекты и всё рядом:
Доброе утро субботы! ^_^
Давайте сегодня поболтаем о пет-проектах?
16:39
# Воскресенье 16 твитов
@denis_f_l @jsunderhood inoreader.com же :) Он и обычные сайты умеет парсить и создавать из них RSS ленты.7:19
В @jsunderhood затронули тему личных блогов. Блог это классно, вот только где тот самый гугл ридер, в котором собир… twitter.com/i/web/status/1…
Я обычно RSS с телефона читаю, а для него есть великолепный Reeder:
В @jsunderhood затронули тему личных блогов. Блог это классно, вот только где тот самый гугл ридер, в котором собир… twitter.com/i/web/status/1…
7:20
@jsunderhood По-моему формат с телеграм каналом, в котором собраны заголовки и ссылки, самый удобный (для читателя)
Вполне вероятно.
Хотя я пробовал вести канал в Телеграме, показалось неудобным писать туда 🤔
(А ещё когда я блог… twitter.com/i/web/status/1…
@jsunderhood По-моему формат с телеграм каналом, в котором собраны заголовки и ссылки, самый удобный (для читателя)
7:31
@not_a_reptiloid @jsunderhood Телеграм — это пуш, РСС — это пул.7:37Пуш вызывает FOMO и нервирует, пул позволяет потр… twitter.com/i/web/status/1…
Сегодня воскресенье, давайте подводить итоги недели!
8:04Теперь немного о собственно проектировании.Допустим, мы знаем, что нашему проекту _нужна_ суровая масштабируемос… twitter.com/i/web/status/1…
Понедельник начали с обсуждения архитектуры и DDD.
Обговорили, нужная ли чистая архитектура на фронте и как делать… twitter.com/i/web/status/1…
Теперь немного о собственно проектировании.
Допустим, мы знаем, что нашему проекту _нужна_ суровая масштабируемос… twitter.com/i/web/status/1…
8:04
Доброе утро! Сегодня вторник, а значит поговорим об ООП на фронте.Пока я заливаю в себя кофе, давайте проведём оп… twitter.com/i/web/status/1…
Во вторник обсудили ООП.
ООП и фронтенд — хорошие друзья или заклятые враги. Как ООП помогает проектировать архит… twitter.com/i/web/status/1…
Доброе утро! Сегодня вторник, а значит поговорим об ООП на фронте.
Пока я заливаю в себя кофе, давайте проведём оп… twitter.com/i/web/status/1…
8:05
А сегодня поговорим о том, как сделать код читаемым и тестируемым ^_^Расскажите о своих приёмах, как вы улучшаете… twitter.com/i/web/status/1…
В среду поделились рецептами, как делать код читаемым и тестируемым.
TDD, работа с легаси, принципы и эвристики.
А сегодня поговорим о том, как сделать код читаемым и тестируемым ^_^
Расскажите о своих приёмах, как вы улучшаете… twitter.com/i/web/status/1…
8:06
Доброе утро четверга! ^_^Чем ближе конце недели, тем больше мы уходим от хард-скилов 😃
Сегодня поговорим о том,… twitter.com/i/web/status/1…
В четверг поговорили о том, как в разработке эффективнее всего расти:
- через боевую разработку,
- ментора,
- унив… twitter.com/i/web/status/1…
Доброе утро четверга! ^_^
Чем ближе конце недели, тем больше мы уходим от хард-скилов 😃
Сегодня поговорим о том,… twitter.com/i/web/status/1…
8:07
Давайте под конец рабочей недели поговорим о ведении технического (и не только) блога!
В пятницу обсудили, как и зачем вести технический блог:
Давайте под конец рабочей недели поговорим о ведении технического (и не только) блога!
8:08
Привет!
На этой неделе у микрофона Саша @bespoyasov.Работаю в DRIVE2. Пришёл туда как фронтендер, потом писал б… twitter.com/i/web/status/1…
Навигацию по подтемам и аспектам я оставил в основном треде 🧵
Привет!
На этой неделе у микрофона Саша @bespoyasov.Работаю в DRIVE2. Пришёл туда как фронтендер, потом писал б… twitter.com/i/web/status/1…
8:09
Спасибо всем, кто читал, отвечал и участвовал! Вы все классные.
8:11@jsunderhood @kumma_kirill Нужно учиться работать достаточно эффективно когда работа скучна.Для этого нужны хобб… twitter.com/i/web/status/1…
Мне помогает относиться ко скучным задачам как к таким типа «мета-задачам», как сделать работу нескучной.
Писал о… twitter.com/i/web/status/1…
@jsunderhood @kumma_kirill Нужно учиться работать достаточно эффективно когда работа скучна.
Для этого нужны хобб… twitter.com/i/web/status/1…
9:29
Ну или относиться к работе, как к ремеслу, если первое не срабатывает.
(Только главное к себе прислушиваться, вдру… twitter.com/i/web/status/1…
9:29@jsunderhood Проект вырос из рабочей потребности парсить бб коды и делать манипуляции с ними. Вместо текущих регуля… twitter.com/i/web/status/1…10:06
В общем, тред про блоги в @jsunderhood и ссылки на ридеры меня так вдохновили, что я засел с блокнотом, чтобы набро… twitter.com/i/web/status/1…
Огонь!
Пусть всё получится! 🙌
В общем, тред про блоги в @jsunderhood и ссылки на ридеры меня так вдохновили, что я засел с блокнотом, чтобы набро… twitter.com/i/web/status/1…
10:36
# Ссылки
github.com
- https://github.com/latviancoder/useJquery
- https://github.com/eduardomoroni/react-clean-architecture
- https://github.com/bailabs/react_js_clean_architecture
- https://github.com/bespoyasov/di-ts-in-practice/blob/master/src/effects/logger/types.ts
- https://github.com/bespoyasov/di-ts-in-practice/blob/master/src/effects/logger/consoleLogger.ts
- https://github.com/bespoyasov/di-ts-in-practice/blob/master/src/effects/logger/composition.ts
- https://github.com/bespoyasov/di-ts-in-practice/blob/master/src/core/initiator.ts
- https://github.com/kettanaito/naming-cheatsheet#ahclc-pattern
- https://github.com/kamranahmedse/design-patterns-for-humans#-facade
- https://github.com/bobuk/addmeto.cc/blob/d182d8ce194c08998ad59288b261f74bedb5b8d4/pages/2013-04-19.md
- https://github.com/web-standards-ru/indie-list
- https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet
- https://github.com/Muao/raspberrypi_heating_boiler_automation
- https://github.com/unger1984/dia
- https://github.com/bespoyasov/www/projects/3
ru.wikipedia.org
- https://ru.wikipedia.org/wiki/Закон_Парето
- https://ru.wikipedia.org/wiki/Соотношение_карты_и_территории
- https://ru.wikipedia.org/wiki/Don
- https://ru.wikipedia.org/wiki/Аналитический_паралич
- https://ru.wikipedia.org/wiki/Проклятие_знания
bespoyasov.ru
- https://bespoyasov.ru/blog/generating-trees-on-canvas-using-typescript-and-oop/
- https://bespoyasov.ru/blog/commands-and-queries/
- https://bespoyasov.ru/blog/di-ts-in-practice/
- https://bespoyasov.ru/tag/books/
- https://bespoyasov.ru/blog/clean-code-part1/
- https://bespoyasov.ru/talks/podlodka-conf-2021-tdd/
- https://bespoyasov.ru/ttt-tdd/
- https://bespoyasov.ru/blog/copy-paste/
- https://bespoyasov.ru/projects/request-crm/
- https://bespoyasov.ru/blog/templates/
- https://bespoyasov.ru/blog/time/
- https://bespoyasov.ru/bookmark/
- https://bespoyasov.ru/blog/
- https://bespoyasov.ru/blog/cant-reproduce/
- https://bespoyasov.ru/blog/one-and-a-half-year-of-teaching/
- https://bespoyasov.ru/blog/kursovik/
- https://bespoyasov.ru/scroller/
- https://bespoyasov.ru/blog/cheer-on-the-product/
other
- https://fuckgrechka.ru/tzlvt/
- https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/
- http://ddd.fed.wiki.org/view/welcome-visitors/view/domain-driven-design
- https://ota-solid.now.sh/
- https://blog.ploeh.dk/2020/03/02/impureim-sandwich/
- https://ota-solid.vercel.app/ocp
- https://ota-solid.vercel.app/lsp
- https://ota-solid.vercel.app/
- https://www.youtube.com/watch?v=1SGb-lZclcU
- https://www.youtube.com/watch?v=jj2TXJtzBQw&list=PLB86E02CE3735E3B6&index=1
- https://developer.mozilla.org/en-US/docs/Web/API/FormData
- https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-loading
- https://docs.microsoft.com/en-us/dotnet/csharp/pattern-matching
- https://www.artlebedev.ru/kovodstvo/sections/167/
- https://cultofmartians.com/
- http://dev.to/
- http://front-not-pain.bespoyasov.ru/
- https://www.deepl.com/translator
- https://glebec.github.io/lambda-talk/
- https://howtojs.ru/
- https://www.inoreader.com/
- https://www.reederapp.com/
- https://antonz.ru/comments-via-github/