mobileunderhood.onNext("Артем Зиннатуллин")
мы начинаем очередной эпизод подкаста без звукоинженера и в гостях у н… twitter.com/i/web/status/1…
Кидайте вопросы, но лучше в релевантный день:
День 1: как me пришел в и ушел из мобильной разработки
День 2: оупен… twitter.com/i/web/status/1…
@mobileunderhood inb4 день 6 будет оба последних дня
вот зачем спойлерить, a
кстати, каждый ответ будет в форме ретвита на манер @abroadunderhood twitter.com/0leGG/status/1…
В общем история у меня такая: лет с 14 начал тыкать PHP, чтобы поднять торрент трекер в локальной сети провайдера… twitter.com/i/web/status/1…
За год до этого, в школе, я вообще не мог понять программирование
Очень любил математику, а тут тебе пишут x = x +… twitter.com/i/web/status/1…
Дальше как-то полегчало, и захотелось сделать что-то, чем будут пользоваться реальные люди
На тот момент у моего п… twitter.com/i/web/status/1…
Был какой то оупенсорсный (тогда я еще не понимал, что такое oss) движок для торрент трекеров на PHP, на нем тогда… twitter.com/i/web/status/1…
сайт проработал несколько месяцев, в пике получал 2k пользователей в день и сотню онлайн, что имхо успех учитывая,… twitter.com/i/web/status/1…
после этого стало понятно, что надо мутить стартапы и я начал писать соцсеть и тут я узнаю про vk и он набирает дик… twitter.com/i/web/status/1…
После этого и других подработок я строго следую правилу "никогда не работай на знакомых, родственников и друзей", всем рекомендую
Дальше был фриланс на PHP, у меня появился первый Android телефон → решил учить Java чтобы сделать первое приложени… twitter.com/i/web/status/1…
После пары простых Android приложений для себя, я устроился делать энтерпрайз систему на Java для управления бизнес… twitter.com/i/web/status/1…
// Ну шо
new Year()!!
// Пришлите хоть фоток салатов и бутербродов с икрой, я по ним скучаю ппц
Ну, можно сказать что день про оупен сорс потрачен
в принципе, это все что нужно знать про оупен сорс от меня
Потом было много компаний и проектов, кидания на зарплаты, плохие и оч классные коллеги и вот это всё, хлебнул норм… twitter.com/i/web/status/1…
Это как me пришел в мобильную разработку, давайте про то как я ушел оттуда (ну почти)
В общем, так получилось, что… twitter.com/i/web/status/1…
Со временем это стало занимать 10-20% рабочего времени и на 3х последних работах я искал любые предлоги, чтобы зани… twitter.com/i/web/status/1…
Взрослые люди, конечно, находились компромиссы.
Но копилась депрессия, которую до этого я резетил частой сменой р… twitter.com/i/web/status/1…
Вообще, если вы живете работой, менять её без рефлексии о проблемах в вашей голове и отпуска, это такое.
Есть плю… twitter.com/i/web/status/1…
Тем не менее, в этот раз я осознанно сменил направление деятельности и занимаюсь тулингом:
системы сборки (Gradle… twitter.com/i/web/status/1…
Давайте немного про оупен сорс таки
Так получилось, что с 2011 года я на гитхабе, с того момента жизнь как-то пошла под откос
Оупен сорс это одновременно одна из лучших и худших вещей в моей жизни
Со временем обрастаешь проектами и обязател… twitter.com/i/web/status/1…
В идеале, активные oss проекты в которых вы участвуете, должны быть частью вашей оплачиваемой работы
Во-первых хре… twitter.com/i/web/status/1…
Также удачные примеры — конкретно по работе нужно сделать патч в используемую библиотеку/тул.
Тут надо, однако, ко… twitter.com/i/web/status/1…
Все остальные проекты — сложна
Как правило, рабочий контракт говорит следущее: всё что вы пишете в рабочее время и… twitter.com/i/web/status/1…
вооот
соответственно — оставляйте рабочий ноут на работе, если вы не on-call и не работаете удаленно, так еще кста… twitter.com/i/web/status/1…
@mobileunderhood Куда ты дела кота со своей аватарки?
Это кошка, она, к сожалению, умерла года 3 назад :( twitter.com/k0mn1n/status/…
Дальше возникает проблема энергии/мотивации, я чот в последние 1.5 года оч редко могу писать код после работы
@mobileunderhood Лолшто? Утаскивание рабочего ноута домой позволяет писать код в дороге — это ж единственный шанс д… twitter.com/i/web/status/1…
Это проходит)
но это мое личное, я ноут таскаю, часто on-call по какой-то инфраструктуре, но всех стараюсь отучить… twitter.com/i/web/status/1…
с другой стороны, если хотите быть тем самым "10x engineer" (которых сейчас в долине разносят в пух и прах, мол при… twitter.com/i/web/status/1…
про 10x engineer еще добавлю (я не 10x если шо)
очень помогают подкасты, со многими технологиями, которые я активн… twitter.com/i/web/status/1…
а еще, подкасты можно слушать на Nx скорости, у меня это 2.7x (норм, привыкните)
то же самое с видео, до 2x можно… twitter.com/i/web/status/1…
Про open source: в целом это оч полезно по многим причинам, в том числе карьерный и персональный буст
но цена шото… twitter.com/i/web/status/1…
За переработку в лучшем, в ЛУЧШЕМ случае, вам заплатят (мне ни разу не платили, сидел часто до 11, нахрена?)
Потом… twitter.com/i/web/status/1…
Хороший способ оценить масштаб проблем перед присоединением к разработке какого-то проекта — подпишитесь на его изм… twitter.com/i/web/status/1…
Оупен сорс плохо совмещается с проблемами в личной жизни, депрессиями и всем таким
Вы (всмысле я) не читаете письм… twitter.com/i/web/status/1…
@mobileunderhood А промоутить тебя за то, что ты больше других делаешь, не хотели?)
Промоутят за скоуп работы и набор ответственностей обычно (у меня так), за уровень вклада не было
Постоянные перер… twitter.com/i/web/status/1…
Так что, надо пробовать!
Через пару лет очнетесь с десятком проектов, сотнями имейлов, бокалом виски, вас будет то… twitter.com/i/web/status/1…
Понятно, что это вопрос баланса, у многих получится и надо пробовать (серьезно)
Более того вы не должны боятся ска… twitter.com/i/web/status/1…
Вот, если у вас есть какие-то вопросы/комменты про оупен сорс — задавайте (вот мой гитхаб, если это важно для диску… twitter.com/i/web/status/1…
@mobileunderhood Это не про переработки, а про свои проекты и опенсорс.
Вообще не вижу смысла перерабатывать.
Как правило, рабочий контракт делает всё что вы пишете на рабочем оборудовании и/или в рабочее время собственностью… twitter.com/i/web/status/1…
@mobileunderhood Это верно только про ситуацию «чо бы мне такого накодить?», что уже бредово.
У тебя есть проблема… twitter.com/i/web/status/1…
Супер дельный коммент (серьезно)
Всё что я обсуждал подразумевало не "чо бы мне такого накодить", это бред 100%, п… twitter.com/i/web/status/1…
@mobileunderhood Зачем у тебя столько форков? Так сразу и не понять, чем отличаются от оригиналов.
Форк на гитхабе необходим для внесения патчей в апстрим, очень редко форкаю для других целей (только если боюсь, чт… twitter.com/i/web/status/1…
@mobileunderhood Одним из самых часто задаваемых вопросов (в том числе и самому себе) будет, я думаю - как начать?… twitter.com/i/web/status/1…
Подпишитесь на изменения проекта, помониторьте, поймите насколько строгие мейтенеры, например в RxJava все строго д… twitter.com/i/web/status/1…
Проблема "нет сил" не так проста, как выглядит :(
В нее включена "стоимость" поддержки (время, ментальные ресурсы)… twitter.com/i/web/status/1…
Давайте быстренько про "рабочие процессы, выгорание, смена работы, собеседования" пока я не уснул
Рабочие процессы буду рассказывать про инфраструктурно-ориентированную разработку: архитектура, библиотеки/фреймвор… twitter.com/i/web/status/1…
Как обычно, с разработкой таких вещей всё печально
Начнем с Архитектуры. Со временем я пришел к выводу, что не хоч… twitter.com/i/web/status/1…
Начнем с примеров:
Архитектурные задачи я вижу так:
У Библиотек и Тулинга меньше скоуп, поэтому я предпочитаю писать их.
Понятно, что к Архитектуре можно и нужно подх… twitter.com/i/web/status/1…
Поэтому всем рекомендую писать код против интерфейсов, а не реализаций, и начинать с проработки интерфейсов (или си… twitter.com/i/web/status/1…
В бекенде всё оч похоже
Писали монолиты по 100k+ строк кода, и шото как-то тяжело пошло, работает медленно, скейли… twitter.com/i/web/status/1…
Реальность:
У меня есть понимание двух потенциально хороших ситуаций:
1) У вас на проект маленькая команда профессионалов
2) У вас большая (10-20 уже большая имхо) команда средней руки разработчиков на проекте
Тогда инфраструктура будет… twitter.com/i/web/status/1…
1й вариант хорош потому что:
2й вариант хорош потому что:
Про выгорание/депрессию: в любом раскладе можно схватить
тут я не большой эксперт по тому как этого избежать, друг… twitter.com/i/web/status/1…
Смена работы это легко, имхо.
Но, потом бывает грустно иногда, особенно тепло вспоминаю Яндекс.Почту и Juno.
Плюсы/минусы частой смены работы:
Про собеседования: тонкая штука, я их не любил, но со временем пришло шото понимание что от этого зависит с кем буд… twitter.com/i/web/status/1…
@mobileunderhood Ты всё ещё считаешь что алгоритмические задачки на собеседованиях спрашивать бесполезно?
Чисто алгоритмические задачки я все еще считаю ~бесполезными
Интереснее оценить/показать инженерную культуру/урове… twitter.com/i/web/status/1…
Добавлю еще про Lyft: мы отказались от "секционных" собеседований для мобильных разработчиков
Было:
Стало Project Based: секции связаны
Если есть вопросы/комменты по этим темам — пишите, завтра будет "тулинг, CI и девопс"
@mobileunderhood ты где пропал?
сорен, у меня то тут работа со 2го января, устал, счас буду писать twitter.com/MojoIvan/statu…
@mobileunderhood CI на своих мощностях разворачиваете? Или облачную покупаете?
В Lyft есть общий CI и отдельная команда которая его обслуживает, это система поверх нескольких кластеров Jenkins,… twitter.com/i/web/status/1…
@mobileunderhood Насколько полезна архитектурная часть? Реально можно понять что-то о человеке?
Очень полезна, понять можно много. Стараюсь проходить по всему стеку технологий/решений и сравнивать решения с альт… twitter.com/i/web/status/1…
@mobileunderhood Тогда как удалось работать в одних из топовых компаний с явным хейтом алгоритмических задач? Прихо… twitter.com/i/web/status/1…
В Яндекс я проваливал раза 2 именно алгоритмы, потом перехотел туда вообще (классно HR поработали да)
Через n лет… twitter.com/i/web/status/1…
Специально не зубрю алгоритмическую еботень, если компании/собеседующим это очень принципиально, значит мы с ними н… twitter.com/i/web/status/1…
@mobileunderhood А вот это интересный подход! Можешь побольше деталей рассказать о каждом шаге? Какие требования, на что обращаете внимание?
Архитектуру уже описал
Кодинг — даем лаптоп (можно на своем), интернет, показываем кухню/туалет, переодически чекае… twitter.com/i/web/status/1…
@mobileunderhood Mainframe 3 ещё не готов?
Mainframer 3.x еще в разработке, прогресс можно отслеживать тут github.com/buildfoundatio… twitter.com/alexeikorshun/…
@mobileunderhood А почему именно LRU cache на твой взгляд заслуживает внимания?
LRU кеш это пример, но имхо он хорош потому что
@mobileunderhood Какой CI посоветуешь? тревис, сёркл тд?
Не люблю такие вопросы, но между Travis и Circle выбираю Travis
CI дает шедулинг, вещи типа логгирования, API, кон… twitter.com/i/web/status/1…
Добавлю, что я уважаю людей разбирающихся и увлекающихся алгоритмами и алг задачами (есть онлайн соревнования)
Тулинг — комплексное понятие, может подразумевать:
CI — Continuous Integration
В идеале (для меня) это пайплайн реагирующий на любое изменение в апстриме системы кон… twitter.com/i/web/status/1…
@mobileunderhood А что например просите накодить?
Например, загрузить что-то по сети и показать этот контент
Цепляется стек от сети до UI, можно и нужно использоват… twitter.com/i/web/status/1…
CI — точка интеграции разных тулов, легко упереться в его гибкость/масштабирование
Конфигурация CI пайплайна в иде… twitter.com/i/web/status/1…
На какие CI системы можно посмотреть (селфхостед и as service):
Типичные стейджи билда (могут быть объединены в один):
CI при этом может:
Но это не самый сок от CI
Если CI имеет такую вещь как Submit/Merge Queue и гарантирует целостность master/target… twitter.com/i/web/status/1…
Имхо, если вы думаете что у вас Extreme Programming, но нет автоматического мержа — у вас не XP
К сожалению, задач… twitter.com/i/web/status/1…
CI пайплайн который я делал в Juno подробно описывал тут github.com/gojuno/enginee…
Сейчас там не Jenkins тк его надо… twitter.com/i/web/status/1…
Про CI можно говорить долго, скажу последние пару мыслей
Про Devops
В индустрии имхо до сих пор нет четкого понимания скоупа задач, тк есть еще SRE
В моем понимании девоп… twitter.com/i/web/status/1…
Очень легко прийти к состоянию "Jack of all Trades, Master of None" тк стек технологий и спектр проблем огромный
Девопс это естественное развитие технологий
Из-за доступности AWS и подобных облаков, мы пришли к миру где разверт… twitter.com/i/web/status/1…
Есть еще SRE — Site Reliability Engineer
Это больше про тех кто пришел из сисадминов в девопс, то есть в программи… twitter.com/i/web/status/1…
@mobileunderhood Автомердж можно и со стороны хранилища кода сделать, например bitbucket
йеп,
Submit/Merge Queue может и имхо должна быть вообще отдельной системой которая мониторит VCS и CI, кидает зад… twitter.com/i/web/status/1…
@mobileunderhood И тесты тоже могут быть параллельными, что уж там
Параллельным должно быть все внутри и снаружи (сборка, тесты, статический анализ) пока от параллельности оверхед не… twitter.com/i/web/status/1…
------ END ------
"тулинг, CI и девопс"
пишите вопросы/комменты, мне мало осталось до конца воскресения по Мск
@mobileunderhood Ага, у пары команд даже есть специальный бот, который назначает ревьюверов в зависимости от их загруженности
Если что, это кстати Ильдар, глава мобильной разработки в персональных сервисах Яндекса (ну то есть примерно во все… twitter.com/i/web/status/1…
@mobileunderhood Именно на iOS интересует. С Android гораздо меньше проблем.
я не мейтейню iOS CI, только консультирую, консультируюсь и общаюсь с теми кто это делает
я Кайл из 2k64, Корутины победили Rx, осталось небольшое реактивное сопротивление
Сара, они отправили coroutineSco… twitter.com/i/web/status/1…
Дисклеймер, я biased в сторону Rx, поэтому не принимайте всё сказанное за объективную реальность. Итак, начнем.
Почему мне не нравятся Корутины:
Сейчас многие Kernel и stdlib I/O API сихронны, хотя в железе они асинхронны
Только путем перевода большего кода н… twitter.com/i/web/status/1…
Почему вредны синхронные Kernel и stdlib I/O API? Потому что ваш поток блокируется, а скейлить потоки дорого.
Вот и нынешний @mobileunderhood туда же. Вот зачем сравнивать теплое с мягким. Rx вот ни разу ни про асинхронность.… twitter.com/i/web/status/1…
Про асинхронные потоки данных, асинхронность в Rx это ключевой момент. Rx это push-based стриминг
Если аргумент не… twitter.com/i/web/status/1…
Благо в бекенд мире есть "хайлоад" и проблемы типа C10k,
которые заставили разработчиков OS, а затем и стандартны… twitter.com/i/web/status/1…
I've been thinking about learning curves of RxJava and Coroutines lately, but I don't have enough experience with c… twitter.com/i/web/status/9…
Давайте теперь про минусы и потом плюсы Rx:
@mobileunderhood Стоит ли ожидать реализацию 'RxKotlin' с корутинами под капотом (и последующим применением в MPP)… twitter.com/i/web/status/1…
кек, стоит, stay tuned, это логичный шаг
Беспокоит пара моментов:
@mobileunderhood Нет общего предка у Observable, Maybe, Single, Completable etc
Это проблема и не проблема одновременно, тк есть toObservable() и остальное на каждом из них.
Это кстати, еще и ос… twitter.com/i/web/status/1…
Теперь про плюсы Rx:
@mobileunderhood @relizarov Не забывай, что всё твоё сравнение не очень валидно в корне. Корутины — это компоненты… twitter.com/i/web/status/1…
Про в корне не соглашусь, Корутины тоже имеют свою библиотку со всякими delay() и прочим, это не просто компоненты,… twitter.com/i/web/status/1…
@mobileunderhood На корутинах пишут UI? В данном контексте мне более понятна заруба Rx vs нотификации или Rx vs event bus.
На Корутинах пишут UI, просто не реактивный как с RxBinding, Domic и всем таким.
Корутины дают удобный переход ме… twitter.com/i/web/status/1…
@mobileunderhood @relizarov Не забывай, что всё твоё сравнение не очень валидно в корне. Корутины — это компоненты… twitter.com/i/web/status/1…
Стоит еще сказать, что Reactive Extensions и Reactive Programming это не одно и то же. Можно использовать Rx, но пи… twitter.com/i/web/status/1…
@mobileunderhood АПИ != парадигма. RxJava — это просто реализация. Да, с ней можно что угодно делать, но можно и пр… twitter.com/i/web/status/1…
Кстати Rx не обязательно писать в ФП стиле, во многих проектах это все такой же ООП интерфейсами и классами, просто… twitter.com/i/web/status/1…
На этом, пожалуй, всё, шото у меня у самого подгорело от своих же мыслей и ваших реплаев))
пишите комменты!
"Кору… twitter.com/i/web/status/1…
@mobileunderhood Ты ж забыл .await() у getPopki()
В том то и дело, что не забыл
await() не нужен в скоупе корутины или suspend функции
это меня напрягает тк на код… twitter.com/i/web/status/1…
@mobileunderhood И вот мы подошли к самому грустному в этой всей истории (с моей точки зрения).
RxJava подталкивае… twitter.com/i/web/status/1…
Согласен
Rx толкает в сторону более stateless, pure программирования на функциях, Корутины помогают оставаться в и… twitter.com/i/web/status/1…
@mobileunderhood Ахаха! Кстати теперь я занимаюсь CI, сборкой, репами и подобными штуками и да, мы нанимаем - если… twitter.com/i/web/status/1…
Пиши книгу "Из Head of Mobile в Devops" кек
Учитывая что ты все время еще писал Яндекс.Почту под андроед, я так по… twitter.com/i/web/status/1…
@mobileunderhood Если getPopki() - suspend, то не нужно, конечно, но если Deferred, то нужно. Другое дело что Defer… twitter.com/i/web/status/1…
Тэкс, я тут, осталось 58 минут.
Проснулся с на удивление нормальным настроением, так что просто поретвичу ваши ко… twitter.com/i/web/status/1…
@mobileunderhood И да, стандартный convention для suspend-функций - неблокирующая работа, но компилятор/stdlib этог… twitter.com/i/web/status/1…
На это планируется (не мной) динамический и статический анализ кстате twitter.com/the_very/statu…
@mobileunderhood Аргумент про неявность в целом про Котлин у нас (androidx) во внутренних разговорах возникает прим… twitter.com/i/web/status/1…
@augusent @mobileunderhood Guess who уже сделал первый подход ещё в 2017: github.com/JakeWharton/Re…
@the_very @mobileunderhood Хотел упомянуть Реагент, но эксперимент застыл уж как год назад. Есть надежда, что в ожи… twitter.com/i/web/status/1…
Неправда, Джейк гораздо более усердный и доводит вещи до конца.
Будет вам Rx на корутинах, просто другой проект twitter.com/augusent/statu…
@the_very @mobileunderhood @artem_zin Да, Domic, я смотрю на тебя :D
Вот пилим с Сергеем Боиштяном из Тинькофа эволюцию Domic, идеи мощные, делать сложно и долго, ничего не обещаю twitter.com/augusent/statu…
@mobileunderhood Лол. Чем потрясают? Всё стандартно, почти всегда те же задачи можно выразить коробочными инструментами.
Да можно вообще на ассемблере всё писать, я не спорю) twitter.com/miha_x64/statu…
@mobileunderhood Имо, самая большая беда - девелоперы, которые используют Rx, понимая его очень плохо, и применяя не по делу.
Как любят говорить в Разборе Полетов "Технологии идеальны, люди мудаки" (это конечн смешная фраза, но не без правды) twitter.com/vvsevolodovich…
@arturdryomov @mobileunderhood на эту тему есть прекрасное выступление. TLDW хватит совать монады повсюду, особенно… twitter.com/i/web/status/1…
@mobileunderhood Самое главное упустил. Можно писать реактивно и без Rx. Так даже лучше.
Ну про лучше это спорно, eventBus и коллбек-хелл проиграл, а если много сил вкладывать переизобретешь rx, но это мо… twitter.com/i/web/status/1…
@mobileunderhood - стэктрейсы
Стектрейсы в Rx как и в Корутинах из коробки плохие из-за обрыва при переходах между потоками, но в обоих случаях е… twitter.com/i/web/status/1…
@mobileunderhood @RxJava @ProjectReactor А что не так с пустым Mono?:) Если нужен контракт - есть метод Mono#single
Project Reactor Mono это RxJava Maybe, вот и вся разница для меня)
Single дает гарантию (success|error) в компайл… twitter.com/i/web/status/1…
@mobileunderhood `Channel` это не просто `PublishSubject`. Он тоже умеет в resource management как и `Observable<>`… twitter.com/i/web/status/1…
@meoyawn @mobileunderhood Не сказал бы, что дело в монадах или аппликативных функторах. Хочется, чтобы абстрактный… twitter.com/i/web/status/1…
@miha_x64 @arturdryomov @mobileunderhood Тут ещё влияние оказывает фактор host language. На мой взгляд юзать монады… twitter.com/i/web/status/1…
@meoyawn @mobileunderhood Согласен, конечно, но взглянем правде в глаза — очень много людей Лиспа не видели, не тро… twitter.com/i/web/status/1…
@meoyawn @mobileunderhood Не пытаюсь сказать, что корутины приведут к апокалипсису. Скорее обидно, что хороший инст… twitter.com/i/web/status/1…
@dimsuz @miha_x64 @mobileunderhood Честно говоря, я был бы счастлив, если бы средний по больнице разработчик понима… twitter.com/i/web/status/1…
вот в топчик
было бы хорошо если б с Корутинами писали в основном так же, надеюсь так и будет twitter.com/arturdryomov/s…
------ BEGIN ------
"всё плохо"
В общем и целом, Software Engineering это печально, как и любой другой Engineerin… twitter.com/i/web/status/1…
Чем больше в этом варишься, тем депрессивнее. Всё сделано из говна и палок, жрет много CPU и памяти, работает через… twitter.com/i/web/status/1…
Периодически думаешь, может ну его нафиг.
Но непонятно куда идти, всё таки Software Engineering это интересно и к… twitter.com/i/web/status/1…
Так что хз что делать,
кроме как стараться из себя выжимать качество, когда сроки позволяют, и как-то поднимать во… twitter.com/i/web/status/1…
про политику и токсичную токсичность и SJW в IT говорить вообще не хочется, да и страшно, к сожалению, хотя топики… twitter.com/i/web/status/1…
Забыл вчера шуткануть про Корутины в Котлине, "JetBrains" это ж РеактивныеМозги, может еще одумаются)
На этом давайте моя неделя mobileunderhood всё, лайкните если вам понравилось и пишите коммент, если нет.
Ваш бат… twitter.com/i/web/status/1…