Новиков > путь в 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
День 21

Задание
:
1. Добавить утилиту: для заданной id машинки, которая генерит её трек в реальном времени (дописывает точки в базу например раз в 10 секунд), похожий на настоящий. Можно какие-нибудь сплайны задействовать. Задаются также длина трека в километрах, максимальные скорость и ускорение и шаг точек с разбросом.
2. Треки желательно к улицам привязывать, в карточных API есть роутинг. Есть например GraphHopper Directions API - строит случайный маршрут по автодороге.
3. Попробуйте добавить генерацию с роутингом.

Ход проекта:
1. Сделал утилиту, которая на вход принимает флагами нужные параметры и каждые 10 секунд записывает точки трека в БД. Использую роутинг GraphHopper'а, который генерирует трек, получая 2 или более точек. Если есть флаг step (шаг точек), то генерируется несколько точек в зависимости от заданной длины трека, по которым затем строится роутинг с привязкой к улицам.
2. Сохраняю непосредственно поездку.

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

Задание
:
1. Добавьте модель Отчёт, которая содержит поля - название, период и пр.
2. От него наследуйте конкретный отчёт "Пробег автомобиля за период" (тип отчёта). Период и даты задаются, а в результате показываются пробеги в км. Если период - сутки, то раскладка пробега по дням, если месяц - по месяцам, и т. д.
3. Добавьте в интерфейсе для менеджера раздел "Отчёты", где доступен список отчётов и календарь с возможностью выбора дат.
4. Для получения отчёта сделайте API, где запрашивается отчёт с id автомобиля, нужным типом, датами и периодом.

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

#проект
Июль 2023:

Продолжаю разрабатывать "дипломный проект" писал о нем выше. Текущий прогресс: 23/25

Завершил второй курс по парадигмам программирования (на подходе курс по ФП!)

Реализовал MVP для стартапа, который организует отправку данных на сервер, как просто json, так и multipart/form-data.

В ходе реализации "дипломного проекта" и общением с ChatGPT сильно продвинулся в понимании JavaScript'а, а также в упаковке и развертывании приложения с помощью Docker'а

// так как не нашел времени на достижение данных целей даже повторно, то они не так важны для меня, а значит - убираются из списка:
Закончить курс по JS (повторно)
Закончить освоение веб-фреймворка Gin (повторно)



Планы на август:
🔖 Приступить к изучению одной из N купленных в июне книг (повторно)
🔖 Приступить к третьему курсу по парадигмам программирования (функциональное программирование)
🔖 Завершить дипломный проект (осталось 2 задания) и выложить все на гитхаб (повторно)
🔖 Выстроить регулярное взаимодействие с ментором и выполнить первое задание про балансировщик нагрузки (повторно)
🔖 Заполнить матрицу компетенций (внутренний авитовский инструмент), чтобы понимать чего мне не хватает, чтобы развиваться карьерно: E3->E4 (и дальше в сторону senior)

#результаты
День 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