Кофе для технофетишиста

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

Дегустатор из меня никакой, поэтому прошу любителей кофе высказать своё мнение по поводу альтернативных технологий. Есть кофе в чалдах, для которого есть небольшие машинки Wingkin 400 от Illy. Очень похоже на Nespresso, но непонятно, какой получается результат.

Следующая стадия — покупка автоматической кофемашины. К сожалению, их стоимость для моих объёмов стремится за грани разумного и мне явно нужно что-то с максимально обрезанными функциями: минимальным объемом бака, долгим временем нагрева и желательно в принципе без капучинатора. Возможные модели: Jura D4, Melitta Purista. Прямо скажем, цена немного выбивается за разумные рамки, стоит ли оно того? Или может есть что-то более подходяще?

Ещё есть вариант купить отдельно кофеварку и кофемолку. 2 устройства поменьше проще разместить на кухне, чем одно большое, не так страшно, если что-то поломается и будет поддержка приготовления капучино для жены и старшей дочки. Кофемолку выбрать достаточно легко, а вот выбор кофеварки ничуть не проще, чем выбор кофемашины: Lelit PL41ЕМZ, Solis Barista Perfetta и так далее. Прямо скажем, это не очень привлекательные по цене варианты, но есть ещё очень много разных моделей, описание которых на Яндекс.Маркете никак не помогает в выборе. Как вариант, можно сначала использовать чалды, а покупку кофемолки отложить на потом.

Что посоветуете?

Эпидемия среди нас

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

Сейчас, если у вас температура 39, то с большой вероятностью вас настиг коронавирус. Официально к вам должен прийти врач, но у меня есть большие сомнения, что у нас есть достаточно врачей, которые будут ходить по ковидным больным. Работа не очень и оплата сомнительная. Зато если вы официально зарегистрируетесь как заболевший коронавирусом, то с вас могут взять штраф и вам нужно будет получить отрицательный тест, чтобы вернуться к нормальной жизни. Ещё очень популярно отправлять людей на КТ, но у меня есть сомнения, что в наших краях достаточно аппаратов, чтобы обследовать в таких объёмах.

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

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

Не болейте, будьте здоровы!

Корпоративная культура доверия

CTO Dodo Pizza Александр Андронов написал статью о том, что разработчики должны говорить свому начальству о поисках работы. В этом подходе есть рациональное зерно — по крайней мере в любом случае не стоит сразу принимать оффер и класть на стол заявление об увольнении, нужно сначала дать работодателю высказаться. Часто предыстория отношений такая, что это просто формальность. Но в целом Александр просто рекламирует корпоративную культуру в Dodo, в большинстве компаний всё гораздо хуже.

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

Если в целом ситуация нормальная, то человек может год ходить по собеседованиям в поисках более высокой зарплаты или более интересной работы или ещё чего-то своего. Кто-то просто любит общаться с разными людьми, не особо стремясь к смене работы. А поездки на интервью в Европу за счёт потенциального работодателя некоторые цинично воспринимают как бесплатный туризм. Хождение по интервью ни к чему не обязывает и не является достаточным основанием для разговоров с начальством.

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

Я уж не говорю о множестве историй в духе подняли зарплату, но пропала годовая премия. Вместо прибавки ввели квартальную премию, но через полгода получить её стало тяжеловато. Обещали командировку к заказчику, но в итоге поехало только начальство. Подняли зарплату, но только на 5 тысяч рублей. Перевели на новый проект, а там мёртвые с косами стоят.

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

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

Наши выборы — полное дерьмо

Элла Памфилова смогла сделать российские выборы ещё хуже: безнаказанность фальсификаторов, беспредел почерковедов, электронное голосование и досрочное голосование на пеньках. Установка капчи для просмотра итогов голосования — это вишенка на торте.

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

Раньше я работал на выборах наблюдателем, но если на участке больше 1000 избирателей, а голосует человек 200, то найти столько наблюдателей, чтобы они смогли несколько дней защищаться от вброса ещё 200 бюллетеней — это утопия.

С другой стороны, 10 членов УИК тоже надо откуда-то взять. И, конечно, нашим депутатам абсолютно плевать, в каких условиях они работают. Если выборы проходят по смешанной системе, одновременно в Госдуму и в региональный парламент, то получается по 4 бюллетеня на избирателя, такое в любом случае вряд ли получится посчитать до полуночи. При этом оплата труда членов УИК точно не стала более привлекательной.

Много лет я под разными предлогами оставался в роли наблюдателя и не пытался войти в состав УИК, но вот пришло время. И по опыту Белоруссии мы знаем, что честные члены УИК могут сделать для своей страны больше, чем наблюдатели. В Петербурге подать заявку для записи в резерв УИК можно здесь.

Такой хоккей нам не нужен



Когда-то Лукашенко был оппозиционным политиком, но за 26 лет превратился в явного психопата с автоматом. Официальные результаты на выборах примерно одинаковые, а вот фальсификации с каждым разом становились всё больше и реальная поддержка уже скатилась куда-то к пресловутым 3%. И очевидно, что такое недовольство президентом тесно связано с плачевным состоянием экономики.

Я не знаю, сколько ещё в Беларуси прольётся крови и чем всё кончится, но если Лукашенко останется у власти, то экономика пойдёт на дно. Все программисты, которые могут уехать — уедут, серьёзный бизнес в последнюю очередь будет отправлять в Беларусь крупные контракты.

У России более развитая экономика, но это ничего принципиально не изменит, может быть рейтинг у Путина упадёт не до 3%, а до 15%. Было бы наивно думать, что наши силовики будут более гуманны к гражданам, чем белорусские. И уж точно не стоит надеяться, что в один прекрасный день Путин проиграет выборы и мирно уйдёт, забрав с собой всех единороссов.

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

Но на примере Хабаровска мы знаем, что самый бездарный депутат Госдумы может стать народным героем, если только он не единоросс. Если в вашем регионе проходят выборы — присоединяйтесь к Умному голосованию. Чем меньше будет депутатов и губернаторов от ЕР, тем больше будет у нашей страны шансов вернутся к нормальной жизни.

Как я искал работу-2020

Резюме на hh обновил 15 июля и в тот же день получил просмотры из 11 компаний, на следующий день компаний было уже 27. Удивительно, но в этот раз к желаемому результату привёл Facebook, уже 16 июля состоялся первый звонок, который в конце концов привёл к выходу на новую работу. Ещё мне пришла вакансия мечты в биоинформатике от рекрутёра, но в итоге до контактов с работодателям дело не дошло.

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

Большинство вакансий посвящено Spring Boot и списки ключевых слов очень похожи друг на друга. И если раньше можно было сравнивать компании с точки зрения офиса, то сейчас эта разница стёрлась. Вопросы на интервью по-прежнему не отличаются разнообразием. Думаю, надо в любом случае готовить список популярных вопросов: singleton, разворачивание списка, избавление от рекурсии, каверзные вопросы по Java 2, беседы приводящие к LinkedHashMap или CopyOnWriteArrayList. Если больших проблем с работой нет, то показывать этот список перед интервью и говорить, что на эти темы разговаривать неинтересно. Если ситуация тяжёлая, то цинично готовиться по этому списку.

Niantic против багов

В последнее время в игре Pokemon Go случилось много разных обновлений и это не лучшим образом сказалось на стабильности приложения. Особенно расстроились профессионалы PvP — когда человек играет против человека, то тут и серьёзная борьба, и даже деньги для топовых игроков.

Niantic написал письмо по этому поводу и признал, что игра настолько сложная, что после каждого исправления есть риск получить ещё багов. Также компания заявила, что приняла меры для исправления ситуации: привлекла больше тестировщиков и стала развивать автоматическое тестирование.

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

Очевидно, что чтобы исправить ситуацию, нужны большие перемены. Для этого кто-то из разработчиков должен придумать решение, убедить коллег, что это должно сработать, реализовать его и внедрить. И после этого можно надеяться, что ситуация существенно улучшится. Хорошие инженеры обычно могут предложить решение, но есть риск, что оно окажется достаточно трудозатратным и, возможно, Niantic упирается в лимиты по расходам на серверную инфраструктуру.

Про высшее образование-2020

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

Антон в принципе всё правильно пишет про проблемы высшего образования, но потом внезапно начинает обобщать и формирует список крутых университетов в Петербурге. Более того, в список крутых попадает ФТК, что просто смешно. На самом деле крутые места найти очень легко — там очень большой проходной бал. И в Питере таких мест очень мало. Высокие баллы за ЕГЭ получают не просто так и их обладатели знают, ради чего они стараются. Как отметил Антон, важную роль играют люди, с которыми ты учишься. Если коллеги выигрывали всероссийские олимпиады — у тебя будут потом знакомые основатели компаний. Если твои однокурсники на ЕГЭ по математике набрали по 70 баллов — какой тут матан может быть?

И немного о хорошем: у меня старшая дочь перешла на 3-ий курс МФТИ. Первый год нужно было пахать, чтобы не вылететь. Потом стало полегче, но остаться без стипендию по результатам экзаменов можно запросто. Зато она сама ориентируется, какие специалисты востребованы на рынке и сама проходит онлайн-курсы по машинному обучению на каникулах. При этом программирование никогда не было её специализацией. По-моему, есть связь между учёбой в хорошем университете и способностью самостоятельно изучать новые технологии. В менторов, которые за 3 месяца могут сделать хорошего программиста я не верю.

Советы дерьмогрёба

Александр Баумгертнер задал мне вчера вопрос, на который я хочу развернуто ответить:

У меня сейчас проект, где файлы по 15 тысяч строк, нет тестов и сложная асинхронная логика.
Думаю над стратегией улучшения кода (сейчас исправить баг — как сдать iron man).

Какой первый шаг сделал бы ты?

(я думаю начать с end-to-end тестов основной функциональности).


Сначала немного о себе, чтобы очертить границы применимости моих советов. Я стремлюсь делать работающие решения и спать спокойно. У меня действительно есть опыт переработки проектов с трудной судьбой, но все они были разработаны на Java и я пользуюсь отличной IDE, которая сильно мне помогает.

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

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

Я ненавижу баги и вам советую. Потратили весь день на борьбу с тяжёлым багом? Задержитесь на работе и поправьте ещё 2 маленьких.

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

Не отгружайте код, пока IDE не прекратит подсвечивать вам проблемы в нём. Так проект потихоньку станет «зелёным».

Адаптируйтесь ко времени релизов. Перед релизом должна быть стабилизация, основную пользу в ядре системы нужно причинять в начале релизного цикла. Лучше сначала переработать, а потом неспеша доделывать что-то неопасное.

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

Мне IDE подсвечивает неиспользуемые куски кода и это часто влечёт каскад изменений. Удалил неиспользуемую переменную? Опа, а тут у метода ненужный параметр. Опа, у нас тут два одинаковых метода и в одном бага не исправлена. Опа, а вот эти 2 класса теперь совпадают. Опа, а теперь можно выкинуть код, который решает, какой класс создать.

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

Не вставляйте костыли.

Если бизнес просит разработать новую функциональность, сделайте такой рефакторинг, чтобы она добавилась тривиальным образом.

Не жалейте сил на поддержание базы в порядке, в первую очередь — удаляйте ненужные объекты. Один из моих наиболее впечатляющих проектов был связан с переписыванием на Java десятков тысяч строк PL/SQL.

Избавляйтесь от лишних зависимостей. Часто программисты добавляют какие-то устаревшие библиотеки вместе с их зависимостями ради какого-то синтаксического сахара.

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

Изничтожайте Hibernate и другие ORM. Любой программист может освоить SQL, а вот ORM имею свойство преподносить сюрпризы в самое неподходящее время.

Есть вечный спор: постепенно изменять или переписать с нуля? Если есть возможность постепенно изменять — изменяйте. Вам придётся потратить больше сил, чем на написание с нуля, но у вас будет больше шансов не потерять важные детали реализации. Если вы видите, что система принципиально не работает, или она ещё просто не дошла до производственной эксплуатации — тогда можно переделывать с нуля. Кончено, если вы знаете, что будете делать.

Демотивация изменений

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

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

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