Новиков > путь в Big Tech – Telegram
Новиков > путь в Big Tech
184 subscribers
94 photos
192 links
От зеро-кодинга на стройке до написания высоконагруженных сервисов в Big Tech. 

Пишет SWE в Avito.ru (backend), в прошлом: .NET developer и сертифицированный специалист по использованию BIM.

Написать автору: @nvkv_ai

Книги: https://boosty.to/time2code
Download Telegram
День 23

Задание
:
Сгенерируйте побольше данных, несколько тысяч треков на десяток машин в течение пары лет например,
и упакуйте всю вашу систему с демо-данными в докер, чтобы её можно было быстро стартануть и показать, как она работает вживую.
Можно Docker compose с несколькими контейнерами, чтобы не в одном всё поднимать.

Ход проекта:
1. Создал файл - Dockerfile, который упаковывает в контейнер мое приложение.
2. Создал файл - docker-compose, который позволяет управлять запуском сразу нескольких контейнеров: с приложением и с БД.
3. Создал файл - Makefile, который описывает необходимые для разворачивания команды.
4. 3 файла в совокупности позволяют упаковать разработанное приложение и развернуть, используя docker-compose. При этом контейнер с БД идет первым и пока не будет развернут, не запускается второй с приложением (делаю healthcheck в docker-compose файле).
5. При первом запуске приложение запускает внутренний скрипт на генерацию треков.

#проект
День 24

Задание
:
Сделать для наглядности, например, отчёт или что-то подобное, чтобы показывать на карте все треки по предприятию за сутки.

Ход проекта:
Попытался реализовать отчет по поездкам, чтобы они все на карте отображались, но знания JavaScript'а пока только на это хватило:
- добавил кнопку Daily Report, по которой менеджер видит одновременно все поездки за период (к сожалению, маркеры поисчезали, так и не получилось их красиво рисовать)

На будущее:
Изучить JS на уровне, на котором будет несложно красиво дооформить данную работу. И, конечно же, дооформить, чтобы проект выглядел красиво и его было не стыдно показать.

#проект
День 25

Задание
:
1. Зарегистрируйте телеграм-бота и отладьте его, чтобы он просто работал: отвечал эхом на введённую строку например.
2. Затем добавьте команду, например, /login, где задаётся логин-пароль (для менеджеров), после чего бот авторизует его и помнит, что такой-то юзер есть в системе.
3. Сделайте команды выдачи сводок (пробег) по конкретной машинке/предприятию за сутки и за месяц (как-то даты надо задавать, можно обычным текстовым форматом).

Ход проекта:
1. Зарегистрировал бота через BotFather
2. С помощью ChatGPT быстро накидал каркас отправки сообщения и его обработки
3. Добавил примитивную авторизацию, которая хранит логин-пароль в памяти во время работы бота
4. Добавил метод получения отчета - пришлось в приложение car-park добавить соответствующий ендпоинт (API) для взаимодействия с ботом

Улучшить:
Конечно, сейчас есть немало захардкоженных моментов в коде, которые стоит улучшить, но так как времени ни на что не хватает, то получился MVP, который можно улучшить в будущем.

#проект
Новиков > путь в Big Tech
Начал делать "дипломный" проект в ВШПСБ. Он идет бонусом к основному курсу, который прохожу по декларативной модели, и состоит из 25 заданий (основные боли в бэкенд разработке). Тема: автопарк, регистрация и учет автомобилей. Проект нужно успеть выполнить…
Завершил проект автопарка!

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

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

Какой положительный эффект от реализации данного проекта я получил:
1. Осознал, насколько важно продумывать и документировать архитектуру до начала реализации проекта
2. В проекте нужно было работать с множеством ендпоинтов (их организации и роутинг) - сейчас у меня гораздо больше понимания как при работе с ними организовывать более чистый и поддерживаемый код
3. Значительно улучшил свои знания в JavaScript (+bootstrap), так как пришлось работать с OpenStreetMap и другими API
4. Наконец, решился пощупать chatGPT, который стал отличным консультантом в ходе реализации проекта
5. Научился работать с веб-фреймворком Gin
6. Улучшил навыки по работе с PostgreSQL и проектированию БД
7. Улучшил свою экспертизу в разработке веб-приложений: поддержка CSRF, запрос с авторизацией через CURL
8. Получил знания в области геотрекинга: увидел как это работает изнутри, какие вызовы обычно возникают и как с ними справляться
9. Попрактиковался в решении проблемы хранения и презентации данных в разных временных зонах (важная тема, нужно постоянно про это помнить)
10. Освоил контейнеризацию до уровня "Готов запаковать свой проект в Docker и написать Makefile вместе с docker-compose для удобного разворачивания своего приложения"

Проект планирую улучшать в свободное время, так как очень интересно создавать продукт с полного нуля. Часто, работая в IT-компании, программист занимается разработкой новых фичей и поддержкой старых, а создание чего-то нового - это прерогатива стартапов или избранных разработчиков в крупных компаниях. Поэтому, если вы раньше не разрабатывали ничего с нуля, то очень важно улучшать свою экспертизу в этом направлении, чтобы быть сильным специалистом, способным поставлять как новые фичи в существующий проект, так и писать проект с нуля.
1
Август 2023:

Закончил "дипломный проект" (см. пред. пост)

Приступил к третьему курсу по парадигмам программирования (императивное программирование, а не ФП - как я раньше думал)

Прочитал несколько глав из книги по Компьютерным сетям (по заданию от ментора)

С ментором +- наладили регулярное взаимодействие: встречаемся 1 раз в 1-2 недели (сдал ему задание про балансировщик нагрузки и получил хороший фидбек)

Заполнил матрицу компетенций, которая необходима для движения по карьерной лестнице, обсудил с тим-лидом, начинаю работать над слабыми местами (к счастью, их не очень много)

Научился работать с beanstalkd очередями и добавил их поддержку в разрабатываемый на досуге проект (из функционала: чтение из нескольких очередей, обработка данных и отправка в другие очереди)



Планы на сентябрь:
🔖 Принять участие во внутреннем хакатоне с командой и показать достойный результат
🔖 Начать проводить технические собеседования в компании (необходимо для карьерного роста + улучшение собственных софт скиллов)
🔖 Выработать систему, по которой буду читать техническую литературу, делая упор, как на рабочий инструмент - Go, так и на более широкие области компьютерных наук

#результаты
Шахматы [1/2]

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

Когда я пришел в Авито, то удивился, что в компании не было активного шахматного коммьюнити. Был чатик на 40 человек, в который изредка кто-то публиковал смешные картинки и на этом все.

Мне захотелось исправить эту несправедливость и я начал активно в это вкладываться своей энергией и временем.

Сейчас чатик из 40 человек увеличился до 240. В компании появились регулярные онлайн-занятия по шахматам с тренерами уровня КМС и это еще не все...
Шахматы [2/2]

Все это время я старался +- регулярно публиковать шахматные задачки, которые Личесс обновляет каждый день. Это занимало 2-3 минуты времени, но я понимал, что и это время можно сократить до нуля. И я написал небольшую программку, которой делегировал эту работу.

Теперь публикация очередного пазла у меня занимает менее 5 секунд, а в будущем я планирую сделать удобное расписание, по которому программа будет работать вообще без моего участия.

Мне очень нравится этот проект, потому что считаю что он реально полезен коллегам, отлично вписался в концепцию корпоративного чата по шахматам, а также его не стыдно показать на публике!

Разработка открытая, планирую по мере сил его развивать и сделать украшением моего портфеля проектов.

https://github.com/novikov-ai/chess-daily-puzzle
1
Сентябрь 2023:

Принял с командой участие во внутреннем хакатоне. Главный приз не взяли, но по голосованию зрителей вошли в топ 3

Поучаствовал в роли наблюдателя на 2-х технических собеседованиях (еще несколько и начну сам проводить)

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

Пробую читать тех. литературу по новой системе: +10мин. в день и заметка о том, что нового узнал (или о чем читал, если все уже известно)

Написал пазл-бота, который публикует очередную задачку в канал Mattermost (в планах добавить к нему расписание и перевести на VPS-сервер)



Планы на октябрь:
🔖 Приступить к самостоятельному проведению собеседований
🔖 Прочитать более половины выбранной книги по специфике Go
🔖 Расширить сеть на линкедине на 15-20% (дойти до 450+ коннектов)
🔖 Нарисовать архитектуру для пазл-бота и подумать про деплой на VPS-сервер

#результаты
Pointer Receiver 🆚 Value Receiver

Вчера проводил техническое собеседование по платформе Go и во время решения кандидатом задачи задал дополнительный вопрос: в чем отличие между получателем указателя в методе (pointer receiver) от обычного (value receiver)?

Вопрос поставил в тупик…

Как писал Дейв Чейни (гуру по Go) существует 3 аксиомы касательно значений в языке:
1. Каждая переменная - это значение
2. Каждое присваивание - это копия
3. Каждый параметр и возвращаемое значение - копия

Все очень просто. Если есть необходимость изменять состояние передаваемого объекта (помним, что метод в Go - это синтаксический сахар над функцией, который передает ресивер первым аргументом в нее), то используем Pointer Receiver.

В общем случае, практичнее использовать именно Pointer Receiver: он универсальнее и гораздо эффективнее при работе с большими структурами.

Важно соблюдать единый стиль: если у вас один из методов принимает указатель, то и остальные также должны его принимать!

Попробовать можно здесь.

#go
Channel name was changed to «Новиков > путь в Big Tech»
Ребрендинг.

В прошлую пятницу на работе посетил внутреннюю встречу посвященную развитию своего блога. Обсуждали позиционирование, целевую аудиторию и прочее.

Встреча заставила меня задуматься о том, для чего я пишу. 3 года назад, когда я только начинал, это было на 100% для себя. Невероятно интересно было рефлексировать и смотреть из будущего на свои посты из прошлого.

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

В первую очередь я хочу сделать канал более персонализированным, чтобы заслужить доверие, для этого меняю:
1) Название
2) Описание
3) Фото

До конца октября планирую еще поработать с закрепленными сообщениями, чтобы навигация по каналу была более дружелюбная и у потенциального читателя сразу могло формироваться представление о том, что он может здесь увидеть и какой экспертизой обладает автор.
👍3🔥2
Chess Daily Puzzle v1.0.4 !

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

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

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

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

Сейчас на VPS-сервере настроен простой крон - демон, который по определенным дням запускает исполняемый файлик, рядом с которым хранит логи о выполнении программы.
Октябрь 2023:

📌 Крайне продуктивный месяц получился. Неожиданно для себя удалось перейти на следующий грейд и тем самым досрочно выполнить основную годовую цель!

🏆 E3 -> E4

Самостоятельно провел 2 собеседования (скоринг) и 5 - в качестве второго интервьюера (скоринг + платформа). Как проходит отбор инженеров в Авито можно прочитать здесь

Расширил линкедин до 454 коннекта (цель 500, до конца года думаю закрыть)

Нарисовал архитектуру для пазл-бота и развернул его на VPS-сервере

Помог команде Tech PR со съемками ролика к неделе бэкенда на Хабре ;)

Прочитал более половины книги “Get Programming with Go”. Наверное, лучше сказать просканировал, так как 99% информации было знакомо и пропускал блоки с заданиями, которых очень много. Крайне рекомендую эту книгу тем, кто только осваивает Go. Обязательно выполнять все задания и выкладывать себе на гитхаб. Для более опытных читателей книга будет скучновата. 

Начал решать литкод в конце месяца, чтобы не терять навык. +1 решенная задача в копилку

Завершил курс по императивной модели программирования (ВШПСБ)

Провел ребрендинг канала



Планы на ноябрь:
🔖 Пройти корпоративный тренажер по информационной безопасности на языке Go
🔖 Завершить более половины курса по Объектной модели (ВШПСБ)
🔖 Решить 12 задачек на литкоде
🔖 Дочитать текущую книгу по Go и возобновить прочтение книги Криса Ричардсона «Микросервисы»
🔖 Вдумчиво изучать материалы из email-рассылки HighLoad++ Junior (делать заметки)
🔖 Принять участие в Highload++. Цели: нетворкинг, заряд мотивацией и новые знания / опыт.

#результаты
🔥2👍1
13-19 ноября Хабр проводит неделю бэкенда

И мне удалось поучастовать в ней как спикер от Авито, записав питч.

За 3 минуты я постарался рассказать все то, чем занимается продуктовый бэкенд инженер в компании.

Интересно, что даже среди разработчиков одного направления, например, бэкенд - есть своя специфика.

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

Лично я раньше про это совершенно не задумывался. Многие не задумываются также и злятся, когда их резюме без опыта не просматривают несмотря на то, что они контрибьютят в опенсорс с 5 лет. Но именно этим и обусловлен пресловутый "коммерческий опыт от года", про который пишут в вакансиях.

В продуктовой команде со временем начинаешь абстрагироваться от непосредственной разработки и начинаешь думать про TTM и метрики AB-тестов.

О продуктовой специфике, с которой сталкивается разработчик, обязательно буду писать.
👍2
Что выведет программа?

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

Именно на подобных вопросах любят ловить кандидатов, проверяя как хорошо они знакомы с языком.

Во второй функции представлено именованное возвращаемое значение. Что это такое и почему лучше с ними не связываться в боевом коде хорошо написано в статье.

Подсказка: дефер вызывается после вычисления результата функции. Таким образом, в первом случае возвращаемая переменная и переменная, к которой добавляется 5, - это уже 2 разные переменные. В то время как вторая функция работает все время с одной и той же переменной.

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

<песочница>

#go
👍2
Одна из побочных целей '23 - решить 15 задачек на литкоде. За весь год решил всего две и вот под конец октября решил все-таки добрать количество.

Амбициозно было думать, что за ноябрь наберу еще 12. На текущий момент добавил только 4.

При этом, очень легко потерять мотивацию, когда встречаешь задачу, на которую тратишь несколько часов времени.

Какие выводы можно сделать:
- решение алго-задач - навык, который нужно тренировать регулярно, чтобы легко проходить секцию лайв-кодинга на собеседовании в серьезную компанию
- в шахматах есть дебюты, знание которых необходимо для успешной игры, а в подобных задачах - паттерны, помогающие видеть закономерности между задачами и успешно их решать; в заметках держу курс, который хочется пройти со временем
- в задачах на литкоде уровень medium иногда проще, чем easy

Основная мысль такая: если за 30-40 минут задача не поддается, то нужно отвлечься/погулять. Крайне вероятно, что есть усталость, которая не позволяет ее решить.
HighLoad++ 2023

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

Общее впечатление положительное.

Когда занимался информационным моделированием, то несколько раз посещал конференции подобного масштаба (Autodesk University Russia), мне есть с чем сравнивать.

‼️Недостатки в комментариях

Достоинства:
⁃ можно встретить «IT-звезд», которые с радостью поделятся экспертизой
⁃ легко познакомиться с будущим работодателем
⁃ конечно, заряд энергии на саморазвитие, когда вокруг тебя сотни профессионалов (но тут главное не словить синдром самозванца и не демотивироваться)
⁃ многие компании готовят стенды с мерчом, поэтому можно пополнить запас носков ;)

В будущем вряд ли захочу в одиночку посещать оба дня конференции. Теперь планка - набрать достаточно экспертизы, чтобы выступить с интересным и дискуссионным докладом.
🤔1
Ноябрь 2023:

Завершил курс по Объектной модели (ВШПСБ)

Дочитал книгу "Get Programming with Go" (Nathan Youngman Roger Peppé) // рекомендую для новичков "с нуля"

Прочитал 1/8 книги "100 Go Mistakes and How to Avoid Them" (Teiva Harsanyi) // рекомендую для всех, начиная с мидла; кто не готов читать книгу, можно изучить авторский репозиторий со всеми кейсами

Изучил материалы из email-рассылки HighLoad++ Junior // материал показался разрозненным, подается бессистемно; очевидно, это концентрат лучших докладов конференций прошлых лет; у меня все же ожидания были в сторону более структурированного гайда для новичков

Принял участие в Highload++ // впечатления выше

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

⭕️ Решил 4 задачки на литкоде (планировал 12)



Планы на декабрь:
🔖 Пройти корпоративный тренажер по информационной безопасности на языке Go (повторно)
🔖 Книгу по микросервисам отложил на следующий год. Вместо этого переключился на еще одну книгу по Go (100 Go Mistakes). За декабрь хочу ее дочитать, чтобы в следующем году сфокусироваться на книгах по архитектуре.
🔖 По-максимуму закрываю цели на 2023 год

📝 Составляю цели и задачи на 2024 год

#результаты
🔥3
Декабрь 2023:

📌 Месяц, когда многие продуктовые команды в огне, так как пытаются успеть закрыть все свои задачи до фичафриза, а вместе с ними и ОКР'ы. И у меня был жаркий месяц: чувствуешь ответственность за общий результат в условиях ограниченного времени. Конечно, ничего страшного не произойдет, если какие-то задачи не закроешь, но очень уж хотелось запустить все продуктовые эксперименты, которые были на меня завязаны, и закрыть технические задачи, а вместе с ними и тех. ОКРы.

Прошелся по целям и постарался закрыть то, что успевал закрыть

Приступил к треку ООАП (объектно ориентированный анализ и проектирование) в ВШПСБ, где начал прохождение курса про "Правильность проектирования классов"

Написал селф-ревью для будущего перф-ревью (как сделать это быстро и качественно расскажу в отдельном посте)

⭕️ Составляю цели и задачи на 2024 год (пока есть только черновик, не успел нарисовать роадмап и корректно их оформить - в процессе)

⭕️ Продолжаю чтение "100 Go Mistakes"

Времени на корпоративный тренажер по ИБ не нашел

#результаты