Pull to refresh
6
0
Игорь @peacecoder85

Backend Engineer

Send message

Зачем тимлиду участвовать в подборе? Потому что ошибки найма упадут на него

Reading time7 min
Views6.2K

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

Читать далее

Что делать, если всё ваше существо противится поставленной задаче

Reading time4 min
Views9.2K
image

Вопрос: Кажется, я борюсь с собой. Это происходило несколько раз и серьезно сказывалось на качестве моей жизни.

Мне поручают реализовать фичу, обычно расплывчато, и что-то, что, как мне кажется, добавляет ненужной сложности в кодовую базу. Я пытаюсь урезонить своих менеджеров, но обычно их решение уже принято. Затем я часами борюсь с собой, чтобы заставаить себя доделать фичу. Не потому, что код занимает так много времени, а потому, что я не могу заставить себя это сделать. Я трачу часы на то, чтобы уговорить себя сделать это. Кроме того, я трачу много времени, пытаясь сделать что-то максимально читаемым, удобным в обслуживании и простым. Это означает взвешивание достоинств различных решений и выбор какого-то одного. Я очень колеблюсь, когда принимаю решения, что приводит к большему количеству потраченных впустую часов.

Самое главное — мои менеджеры меня не увольняют. Они не видят, сколько часов я потратил зря, насколько я демотивирован. Вместо этого они относятся ко мне как к одному из своих самых ценных сотрудников (вот это ирония!). (На данный момент я не могу сменить работу. Я помогаю стартапу моего лучшего друга, выполняя эту работу.)

Вы бывали в таких ситуациях? Как вы погружаетесь в работу и делаете это, когда все ваше существо восстает против задачи?

Ответ Джонатана Блоу: Я 42-летний очень успешный программист, который за свою карьеру уже прошел через множество ситуаций, многие из которых сильно демотивировали. И лучший совет, который у меня есть для вас, — прекратить то, что вы делаете. Серьезно. Даже если вам кажется, что вы не в состоянии сделать это, то знайте — вы можете. Это нормально. Вы свободны. Хорошо, вы помогаете стартапу своего друга, но какова соответствующая стоимость этого? Она бы заставила вас сделать это, если бы вы знали, что это растопчет вашу душу (crushing your soul)?
Читать дальше →

Как каменщик дядя Толя учил программистов

Reading time6 min
Views43K

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

Аналогичные драмы я вижу теперь каждый день на работе. Хотя, на стройке были каменщики, прорабы и разнорабочие, а на работе – программисты, аналитики, разработчики, руководители проектов и начальство.

Поглядим, чему же программисты могут научиться у каменщика дяди Толи.

Читать далее

Как запустить MVP и не превратить его в технический долг

Reading time12 min
Views12K

Последние пять лет я работаю в аутсорсинге, поэтому часто занимаюсь запуском новых продуктов. Чаще всего первый шаг - создание так называемого MVP (minimum viable product).

При запуске MVP большинство компаний стремятся зафиксировать сроки и бюджет: еще нет уверенности, что бизнес-модель продукта жизнеспособна, поэтому требуется как можно быстрее проверять гипотезы на практике. Когда (и если) продукт выстрелил, приходят настоящие пользователи, которые хотят не только новые фичи (и как можно быстрее), но и стабильность продукта. Их перестает устраивать продукт, собранный на коленке. Поэтому сроки остаются актуальными, но вместо бюджета на первый план выходит качество.

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

Сегодня я расскажу, как мы вышли из этого треугольника (мое выступление на эту тему).

Читать далее

Работа в распределенной команде: типичные проблемы и их решения

Reading time12 min
Views8.6K

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

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

Всё это я проговаривал в подкасте Кода Кода.

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

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

Читать далее

Пол Букхайт: Три типа идей: и почему плохие идеи часто оказываются лучшими

Reading time4 min
Views9K
image

Пол Букхайт — 23-й сотрудник Google, автор слогана «Don’t be evil», создатель Gmail. Основатель стартапа FriendFeed. Инвестировал более чем в 150 стартапов (60 экзитов), партнер Y Combinator.

Прим. пер.: Очень интересно оглянуться назад и проверить на прочность высказывания создателя Gmail Пола Букхайта, которые он озвучил 14 лет назад (в 2007 году). Некоторые моменты сейчас кажутся немного наивными, но основной посыл — актуален до сих пор.


Идеи новых продуктов можно разделить на три категории:

  1. Очевидно хорошие идеи, которые очень сложно реализовать. К этой группе относятся эффективный холодный ядерный синтез, летающие машины и множество других научно-фантастических идей.
  2. Очевидно «хорошие» идеи, которые кажутся возможными, но еще не реализованы. Видеотелефоны и HDTV долгое время находились в этой категории. Я думаю, это происходит, когда люди увлекаются технологиями и переоценивают их преимущества (и, возможно, недооценивают стоимость). Мне просто наплевать на видеотелефон.
  3. «Плохие» идеи. Многие из этих идей действительно плохи, но некоторые из них в ретроспективе окажутся очень хорошими идеями. Я помещаю их в ту же категорию, потому что их трудно отличить без оглядки в прошлое. Вот некоторые примеры: персональный компьютер («зачем кому-то компьютер?»), Google («уже слишком много поисковых систем, и, кроме того, поисковые системы не зарабатывают деньги») и Blogger («разве ты не можешь? просто используйте Geocities, и, кроме того, действительно ли так много людей, у которых есть что рассказать? "). Более современные примеры (прим. пер.: 2007 год), Facebook и Twitter, которые все еще вызывают споры.
Читать дальше →

Как мы потерпели неудачу, а затем преуспели в переходе на TypeScript

Reading time8 min
Views5.3K

К старту курса о Fullstack-разработке на Python, где также рассматривается TypeScript, мы перевили статью о миграции в Heap.io — компании, которая предоставляет платформу аналитики продуктов, — c языка CoffeeScript на TypeScript; TS в Heap.io начали использовать более 4 лет назад. Несмотря на широкое предпочтение TypeScript среди инженеров, миграция была медленной, а чёткого пути к 100 % кода TS не было.

Читать далее

Откровения трезвого инженера

Reading time3 min
Views70K
image

Ответ на: Откровения пьяного старшего инженера

… Я выскажу свое мнение и значительно короче, наверное.

  1. Работа в нашей отрасли полностью построена на порочных стимулах.
  2. Лучший способ продвинуться по карьерной лестнице — это смена компании. Компании, в которых вы работаете, будут вознаграждать хорошую работу большей работой и ответственностью, а не большим количеством времени и/или денег. Компании, в которые вы переходите, вознаградят вашу предыдущую хорошую работу в других компаниях большими деньгами. На самом деле это не имеет смысла… См. Пункт №1.
  3. Каждый раз, когда я меняю работу, я сокращаю свои обязанности на 50% и увеличиваю зарплату на 50%. На моей первой работе я был очень раздражен, когда новые сотрудники, которые были на моем уровне квалификации, зарабатывали больше, чем я. Теперь другие старожилы в моей компании с таким же уровнем квалификации раздражаются, когда я зарабатываю намного больше, чем они (обратите внимание, что количество смен работы >= 3). На самом деле это не имеет смысла… См. Пункт №1.
Читать дальше →

Как реляционная СУБД делает JOIN?

Reading time9 min
Views35K

Статья о том, как реляционная СУБД может выполнить JOIN. Для лучшего понимания мы попробуем своими руками написать такую же реализацию на языке C#. Что позволит нам лучше вникнуть в детали.

А чтобы было не совсем скучно - мы зададимся вопросом производительности. Что работает быстрее C# или SQL? И хоть сам по себе вопрос не корректен, к этому пониманию мы как раз и придем.

Читать далее

Погружение во внедрение зависимостей (DI), или как взломать Матрицу

Reading time9 min
Views7K

Давным-давно в далекой Галактике, когда сестры Вачовски еще были братьями, искусственный разум в лице Архитектора поработил человечество и создал Матрицу… Всем привет, это снова Максим Кравец из Holyweb, и сегодня я хочу поговорить про Dependency Injection, то есть про внедрение зависимостей, или просто DI. Зачем? Возможно, просто хочется почувствовать себя Морфеусом, произнеся сакраментальное: «Я не могу объяснить тебе, что такое DI, я могу лишь показать тебе правду».  

Читать далее

Уже не программист, ещё не предприниматель

Reading time22 min
Views5.9K
На прошлой неделе в наших соцсетях выступил Евгений Донцов, основатель стартапа Ватериус.

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

После выпуска более 10 лет работал программистом в автоматизации промышленных объектов и городов. Основал стартап Ватериус. Прошёл 2 ступени Школы дизайнеров Бюро Горбунова. Участвовал в преакселераторе Сбербанка SberUP.

Делимся с вами расшифровкой эфира и записью.

Switchback-эксперименты в Ситимобил. Эпизод 1: Скрытая сила switchback

Reading time12 min
Views21K

Сегодня с вами на связи отдел динамического ценообразования Ситимобил. И мы начинаем серию статей о том, как мы проводим и оцениваем ценовые эксперименты внутри нашего маркетплейса.

В этой статье мы расскажем вводную информацию про switchback и сетевой эффект.

Читать далее

Процессор, эмулирующий сам себя — может быть быстрее самого себя

Reading time1 min
Views38K

Современный мир ПО содержит настолько много слоёв, что оптимизации могут быть в самых неожиданных местах. Знакомьтесь - год 2000, проект HP Dynamo. Это эмулятор процессора PA-8000, работающий на этом же процессоре PA-8000, но с технологией JIT. И реальные программы, запускающиеся в эмуляторе - в итоге работают быстрее, чем на голом процессоре.

td;dr - всё сказано в заголовке

Читать далее

Смена работы тимлидом: как готовиться, как онбордиться, и что дальше

Reading time20 min
Views17K

Я тимлид вот уже десять лет. И год назад я получил предложение о работе, которое звучало как очень интересный вызов. Но вместе с тем меня терзали сомнения, поскольку был разгар пандемии и я понятия не имел, как стать лидером для новой команды в условиях удаленки. Не добавляли уверенности в успехе новый для меня стек и длинная, 20-летняя история проекта.

Но факторы в пользу успеха тоже были. Во-первых, предыдущий тимлид остается, вернувшись в роль разработчика. Во-вторых, по отзывам, в компании отлаженные и очень “человечные” процессы.

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

Читать далее

О сложности в работе программиста

Reading time7 min
Views14K

Я хочу сегодня порассуждать об окружающей нас (людей) сложности и о нашем умении с ней работать. Не о той сложности, про которую пишут в статусах семейного положения в соцсетях, типа, «всё сложно», а о сложности в организационно-технических системах (кстати, по-моему, неплохое название для ВУЗовской специальности получилось). На оригинальность и, тем более, истину не претендую (тем более что, как минимум, наполовину я тут собираюсь низводить, курощать и дуракавалять). Часть этих рассуждений я уже выносил куда-то в комментарии, но для меня этот вопрос не закрыт. Поэтому жизнь всегда подбрасывает мне разные показательные примеры, которые побуждают размышлять дальше. Несмотря на пятницу, это не задумывалось, как развлекательное чтиво, тут не будет весёлых картинок, если что – я вас предупредил. Если хотите прочитать только одно предложение, и пойти читать остальные весёлые пятничные статьи – то вот оно: «Упрощать сложность там, где это можно сделать, справляться со сложностью там, где упрощать её нельзя, и нарабатывать опыт и умение отличать первый случай от второго». Годится как пятничный тост.
Читать дальше →

А вы когда-нибудь причиняли себе физическую боль собственным кодом?

Reading time5 min
Views5.6K
Приходилось ли вам когда-нибудь ненароком причинить себе или другим физический вред из-за ошибок в коде? Мне – да.

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

Я уже потратил сколько-то времени на поиск решений для удаления тишины из файлов, когда меня вдруг осенило: это ведь WAV! Данные в файлах формата WAV обычно представляют собой PCM-аудио, то есть каждое значение в файле задает амплитуду звука в некоторый момент времени. Соответственно, если у нас там действительно полная тишина, а не белый шум, то в файле этой тишине должны соответствовать сплошные нули, так ведь?
Читать дальше →

Как масштабировать разработку при 400 000 RPM и не надорваться

Reading time10 min
Views3.8K
Если бизнес идет вверх, то запросы и нагрузка на разработку увеличиваются в разы. Рано или поздно каждый управленец сталкивается с выбором из двух крайностей: встать на сторону бизнеса, двигать продукт и демотивировать разработчиков бесконечным техдолгом или дать свободу разработке и потерять контроль над задачами бизнеса.

Mindbox 15 лет развивает B2B-продукт и вырос с 3 до 70 человек в разработке. Мы тестировали разные подходы к масштабированию и готовы поделиться опытом, чтобы вам не пришлось наступать на те же грабли. Ниже расскажу, как попробовали полную автономию команд и централизацию, роняли надежность, демотивировали команды, как в результате с этим справились и выработали свою систему масштабирования.

По материалам выступления на Agile Days 2021:


Управление зависимостями в Node.js

Reading time6 min
Views9.8K
Управление зависимостями — это часть повседневной работы Node.js-программиста. Сегодня мы поговорим о разных подходах к работе с зависимостями в Node.js, и о том, как система загружает и обрабатывает зависимости.

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



Прежде чем мы перейдём к разговору об управлении зависимостями, поговорим о модулях. Что это такое? Зачем разработчику задумываться о неких «фрагментах кода», вместо того, чтобы просто писать весь код в одном файле?
Читать дальше →

Учиться, учиться, и ещё раз учиться?

Reading time11 min
Views17K

TLDR: крохотные модельки обошли модные графовые нейронки в предсказании свойств молекул.
Код: здесь. Берегите Природу.


image
ФОТО: Андерс Хеллберг для Wikimedia Commons, модель — Грета Тунберг


Необученная графовая свёрточная нейронная сеть [1] (uGCN) со случайной инициализацией весов уже пару лет занимает первое место в моём списке алгоритмов для задач машинного обучения на графах из-за копеечной стоимости, простоты реализации, да вполне очевидной элегантности решения. В то же время, насколько мне известно, никто ещё не не проводил соревнований между этой простой моделью и её старшей сестрой — полноценно обученной графовой свёрточной нейронной сетью (GCN) в режиме обучения с учителем. Вот я сделал.


Мотивация: показать, что uGCN выдаёт качественные представления, которые можно использовать в последующих задачах машинного обучения в индуктивном режиме, когда модели обобщаются к не виденным ранее данным (вдохновлено недавним отчётом [2] о производительности простых моделей в трансдуктивном случае).


Полученные результаты — занимательны. В худшем случае простые модели (uGCN + degree kernel + random forest) показали счёт 54:90 против полноценно обученных GCN, в то время как реалистичный сценарий закончился разгромным реваншем 93:51, указывающим на то, что мы можем позволить себе почти бесплатные эмбеддинги, которые превосходят или показывают результаты на уровне полноценно обученных GCN в задаче предсказания свойств графа (например — эффекта медикаментов: яд или лекарство) за долю стоимости. Простые модели обучались ~10 минут в то время как весь эксперимент продлился ~4 часа. Перейдём же к деталям и разберёмся с тем, что произошло!

Читать дальше →

Что вам нужно знать про молочные зубы у детей (и современный медицинский подход)

Reading time7 min
Views45K
image
Дети просто полны зубами. Зубы как-то помещаются в черепе, но всё равно почти торчат в ноздрях и глазницах. Тут, например, 48 зубов одновременно, и это абсолютно здоровый пациент.

Молочные зубы очень важны. Мы уже не раз сталкивались с реакцией родителей в ситуации, когда они приводят ребёнка с запущенным множественным кариесом. «Сколько-сколько будет стоить вылечить восемь зубов? Нет, не буду, нам по ОМС всё бесплатно вырвут». К сожалению, родители часто не понимают, что потеря (или утрата) молочных зубов очень критична для формирования здорового ортогнатического прикуса.

Цепочка довольно простая:

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

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

Information

Rating
7,745-th
Location
Одесса, Одесская обл., Украина
Date of birth
Registered
Activity

Specialization

Backend Developer
Senior
From 4,000 $