Новиков > путь в 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
Новиков > путь в Big Tech
Цели на 2021: 🎯 Официально переквалифицироваться в разработчика-программиста на языке C# в среде .NET (с занесением соответствующей записи в трудовую книжку) // junior .NET developer 🎯 Прочитать >3 книг по разработке в среде .NET 🎯 Пройти 3 курса по Алгоритмам…
Итоги 2021:

Достижение поставленных целей

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

Не удалось прочитать сколько-нибудь книг по программированию.

Не удалось пройти планируемые курсы, так как оказалось, что из-за того, что прервал занятия в ВШПСБ, то необходимо снова проходить отбор, который так и не случился, когда появилось время на это.

Результаты

Удаленно трудоустроился в крупную проектную компанию, как инженер-программист.

Открыл ИП для выполнения потенциальных заказов на разработку ПО и успешно выполнил часть из них, часть перенеслась на 2022.

Выпускник тренинг-центра EPAM, по окончании которого получил оффер на позицию junior ASP.NET developer (отказался). На тренинге получил очень качественный фидбек по своему коду, что помогло мне его улучшить.

Захостил на Github Pages свое CV, которое планирую значительно улучшить за этот год.

#итоги
😱1
Цели на 2022:

🎯 Поступить в CSC.

🎯 Пройти курс C# Professional и Паттерны проектирования от А. Шевчука.

🎯 Прочитать минимум 4 книги: 2 - по чистоте и качеству кода, 1 по C# и еще 1 по среде .NET.

🎯 Отобраться в ВШПСБ и пройти минимум 1 курс.

🎯 Пройти курс по frontend-разработке (html, css, JS + Angular)

🎯 Пройти курс по SQL или прочитать книгу «Изучаем SQL" Алан Бьюли».

🎯 Обновить CV на Гитхабе так, чтобы его было не стыдно отправлять рекрутеру.

🎯 Пройти курс по ASP.NET или прочитать 1 книгу по теме.

🎯 Закрыть все обязательства перед Заказчиками по ИП, при этом сохранив их лояльность минимум на прежнем уровне, а также увеличив прибыль по сравнению с 2021 годом более чем в 3 раза.

🎯 Решить минимум 5 алгоритмических задачек (leetcode) и выложить результаты на Гитхаб.

#цели
🔥1🤩1
Освежил CV стилями, которые удалось найти в открытом доступе. Знаний по html/css хватает пока только на это.

К концу года планирую этот пробел знаний закрыть и уже нормально оформить свою страничку: novikov-ai.github.io

#процесс
👍2
Январь 2022:

В рамках ИП сделал небольшой заказ, завязанный на MS Office. Научился: создавать службы Windows, работать с реестром, делать *bat файлы для развертывания написанных приложений.

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

Нашел несколько интересных компаний в РФ, который пишут на C# и в которые потенциально интересно будет попробовать трудоустроиться в будущем.

⭕️ Приступил к чтению "Чистого кода" Роберта Мартина, книга очень крутая, настоятельно рекомендую всем.

#результаты
🔥2
Принял непростое для себя решение - отказаться от поступления в Computer Science Center в этом учебном году.

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

Меня стало психологически и физически изматывать количество направлений, на которые я себя бросил:
1. Работа full-time
2. ИП
3. Подготовка к CSC
4. Прочее обучение по изучению компьютерных наук

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

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

#процесс
👍1
Февраль 2022:

В рамках подготовки к поступлению в CSC отзанимался 7 раз с преподавателем по математике. К сожалению, подготовку пришлось свернуть и отказаться в этом году от поступления.

По стороннему заказу, как ИП, изучил основы взаимодействия с CRM MS dynamics 365. Научился получать и создавать данные в CRM.

⭕️ Приступил к книге Изучаем SQL" Алан Бьюли.

#результаты
👍1
Интересный пакет курсов по SQL: https://stepik.org/course/61247 - минимум теории, максимум практики. Помогает погрузиться в тему и освоить работу с реляционными БД на базе MySQL.

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

Уже сейчас это приносит свои плоды: на текущем месте работы пришлось разворачивать MS SQL Server, проектировать БД, а также непосредственно работать с ней при помощи Entity Framework (EF), что является обязательным знанием для backend разработчика .NET.

#процесс
👍1
Март 2022:

Прошел половину курса по SQL. Нравится подача материала, а также обилие практики.

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

Опубликовал свое резюме на hh и за 2 недели получил 5 приглашений на собеседование в неплохие компании (2 международные с потенциальным релокейтом). Замечу, что откликов не отправлял, а просто открыл резюме для всех. Оформил CV на английском и дополнилил всеми актуальными навыками с фокусом в программирование. В связи с тем, что официальный стаж у меня около 2х лет теперь, то могу претендовать на мидловскую позицию, но нужно хорошо подготовиться по теории, чтобы пройти все этапы собеса.

Наметил план по переходу в “настоящее IT”, где я смогу создавать полезный продукт с серьезной инфраструктурой. Сильно чувствую свою ограниченность в программировании, пока создаю плагины под Autodesk Revit, как будто я все сильнее и сильнее погружаюсь в специфику конкретной программы, но не развиваюсь как программист в целом.

В качестве ИП есть некая неоднозначность: появился потенциальный заказ на разработку, где задействован Docker, язык Go, но проект сейчас встал на паузу. В любом случае, мне пришлось получить базовые знания по Докеру и познакомиться с новым ЯП - Go (golang). К слову, язык мне так понравился, что я серьезно задумался перейти на него с C#.

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

#результаты
👍1
Спустя чуть больше чем 2 года на C# и платформе .NET, решил попробовал другой язык программирования.

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

Материалов для обучения множество. Сейчас прохожу гугловский туториал по языку:
https://go.dev/tour/welcome/1

Для сравнения Go и C# прикрепляю классический вывод строки в консоль (Go - слева, C# - справа).

Интересный факт: в конце прошлого года был презентован .NET 6.0, где “hello world” можно написать одной строкой. Поэтому из прикрепленной картинки не нужно делать вывод, что на Go можно писать программы в 2 раза короче, чем на C#. Microsoft активно развивает свою платформу и я думаю, что еще сможет серьезно нас удивить в будущем.

Не исключаю, что текущие знания C# мне так или иначе пригодятся в последующей работе, но CV с опытом на 2-х языках выглядит в 2 раза круче, чем на одном, а собственный GitHub с проектами на разных языках - бесценен.

#процесс
👍1
Апрель 2022:

Отобрался в ВШПСБ (https://vk.com/lambda_brain) и записался на курс по Чистому Коду, который сейчас прохожу (параллельно читаю Роберта Мартина "Чистый код").

Получил сертификат о прохождении 80% курса SQL, планирую пройти на 100%, охватив оставшиеся модули. На мой взгляд, хороший фундамент уже заложил для ориентирования в любой реляционной БД.

Официально ушел с full-time и еще немного приблизился к своей формуле, которую описывал в феврале: 1 главное направление деятельности (работа) + 1 второстепенное, которое способно дополнить первое (обучение/хобби/собственный проект). На текущий момент осталась работа в качестве ИП, а также обучение: SQL, ВШПСБ и курс по Go, о котором далее.

Получил грант на обучение языку Go на курсах OTUS. Компания в коллаборации с Авито предлагала пройти тест на знание Go. Если тест пройден относительно успешно, то следующим этапом была видео-заявка (что-то типа мотивационного письма на камеру), по результатам которого принимали решение о приглашении на обучение. Обучение длительное - вплоть до конца августа, с проверкой дз и финальным проектом. Успешных студентов пригласят в Авито.

Принял решение сфокусироваться на изучение Go и его особенностей, так как вижу большой потенциал у языка. Сейчас мое использование ЯП выглядит так: 70% - C# (заказы в качестве ИП + прохождение курсов в ВШПСБ), 30% - Go (курсы OTUS + самообучение). За 2022 год планирую распределение по ЯП приблизить к следующему: C# - (0-15)%, Go - (85-100)%.

#результаты
👍2
Новиков > путь в Big Tech
Цели на 2022: 🎯 Поступить в CSC. 🎯 Пройти курс C# Professional и Паттерны проектирования от А. Шевчука. 🎯 Прочитать минимум 4 книги: 2 - по чистоте и качеству кода, 1 по C# и еще 1 по среде .NET. 🎯 Отобраться в ВШПСБ и пройти минимум 1 курс. 🎯 Пройти…
Из 10 целей на 2022 год:
- 3 достигнуты
- 3 пришлось скорректировать (цели завязанные на .NET стек принял решение заменить на Go стек)
- 1 убрана из списка (от поступления в CSC отказался в марте, а потом еще узнал, что они в этом году набор не проводят из-за ситуации в мире)
- добавлен эпик (основная цель, ради которой выполняются другие)

Итого:

💫 К концу года официально работаю на позиции Go developer.

✔️ Отобраться в ВШПСБ и пройти минимум 1 курс.
✔️ Пройти курс по SQL или прочитать книгу «Изучаем SQL" Алан Бьюли».
✔️ Обновить CV на Гитхабе так, чтобы его было не стыдно отправлять рекрутеру.

🎯 Закрыть все обязательства перед Заказчиками по ИП, при этом сохранив их лояльность минимум на прежнем уровне, а также увеличив прибыль по сравнению с 2021 годом более чем в 3 раза.
🎯 Решить минимум 5 алгоритмических задачек (leetcode) и выложить результаты на Гитхаб.
🎯 Пройти курс по frontend-разработке (html, css, JS + Angular).

📝 Прочитать минимум 4 книги: 2 - по чистоте и качеству кода, 2 по Go (ранее: C# и еще 1 по среде .NET).
📝 Пройти курс по Go от OTUS+Avito (ранее: C# Professional и Паттерны проектирования от А. Шевчука).
📝 Пройти курс по Linux или прочитать 1 книгу по теме (ранее: курс по ASP.NET или прочитать 1 книгу по теме).

Поступить в CSC.

#процесс #цели
👍1
Стажировка в Яндекс

Время от времени известная компания проводит набор на стажировку по разным направлениям. Чтобы на нее попасть нужно:
1) Заполнить анкету, где нужно рассказать про себя, прикрепить CV и все в этом духе.
2) Пройти контест, состоящий из решения 5 алгоритмических задач (уровень задач - ближе к олимпиадному).
3) Пройти 2 или 3 технических интервью с представителями компании.

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

Что касается задач, то мне удалось приступить к решению 2 из 5, так как остальные уж слишком показались “со звездочкой”.

Я писал решения на Go, к изучению которого приступил в прошлом месяце… Одно из решений заняло 100+ строк кода, а это для меня определенная веха в освоении нового ЯП и уже этому я безумно рад.

В итоге я решил 0 задач. При чем, одна была правильно, но из-за ограничения по времени (время работы алгоритма должно быть 2 секунды) ее не засчитали. Мое решение занимало, увы, 2.08 секунды.

Выводы:
- Хотите в Яндекс готовьтесь к олимпиадным задачам по программированию и под готовьтесь я подразумеваю прорешайте хотя бы десяток задач прошлых лет.
- Пишите тесты к решаемым задачам (да, кажется, что лишнее время, но по сути, оно поможет сэкономить время при отладке).
- Попадание в Яндекс - целый квест и тут все зависит от вашей личной цели и мотивации. Если мотивация слаба и вы туда подаетесь “ради интереса”, как я в этот раз, то результат будет весьма предсказуемым, но, если озадачиться и начать планомерно готовиться, то все возможно.

#опыт
Прикладываю 1/5 задач и одну из тех, которые мне были +- понятны.
Май 2022:

Прошел курс по Чистому коду в ВШПСБ (результаты: https://github.com/novikov-ai/clean-code).

Получил сертификат с отличием о прохождении курса SQL (https://stepik.org/course/51562/syllabus).

Получил сертификат с отличием о прохождении курса по основам Go (https://stepik.org/course/54403/syllabus).

В рамках обучения языку Go (OTUS + Avito) проверено ментором и принято 3/3 ДЗ (всего 15).

Прошел бесплатный курс от Хекслета “Введение в веб-разработку”.

Не прошел отборочный контест на стажировку в Яндекс.

#результаты
👍3
Почему иногда полезно нерешаемую в моменте задачу отложить на следующий день, особенно, когда уже ночь?

Прикладываю наглядный пример - почему.

На скриншоте реализация метода - получение элемента из LRU кэша, основанного на двунаправленном связном списке. Здесь присутствует очевидная логическая ошибка (которые порой трудно отловить).

Такой метод должен делать 2 вещи:
1) Если элемент есть в кэше, то вернуть его значение и переместить элемент в начало очереди.
2) Если элемента нет, то вернуть пустую ссылку.

Остановитесь, попробуйте сами найти проблемное место.

Ближе к вечеру опубликую продолжение.

#задача
Так почему же ночью лучше спать?

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

- На следующий день первое, что я сделал, проанализировал: что должен делать метод и что он сейчас делает и обнаружил…

Согласно п.1 (того, что должен делать метод) мы должны переместить элемент в начало очереди, если он найден. Реализовано ли это? Накануне я полагал, что да, но разве PushFront( ) перемещает элемент в начало? Отнюдь, в текущей реализации мы добавляли новый элемент в начало, то есть создавали дублирование, а то, что нам было нужно, - это MoveToFront( ).

Итого: диагностика + исправление ошибки заняли не более 5 минут против 30-60 и отсутствие результата прошлой ночью.

Невнимательность - довольно плохое качество, с которым мне только предстоит бороться.

#решение
Крутая книга по проектированию высоконагруженных веб-систем: System Design Interview (Alex Xu).

Отличная подача, последовательное изложение.

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

#чтение
👍1
Удивительно, насколько полезным стало изучение второго ЯП.

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

В C# также есть такой функционал, реализуемый через делегаты: Func<T, TResult> и Action<T>. Работа с делегатами всегда для меня была одной из самых непонятных тем - я их использовал, так как без них никак, но с некоторым подозрением и осторожностью. Не было легкости при работе с ними.

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

Раньше я бы полез читать msdn, а затем и stackoverflow в поисках примера - перетянул бы решение в свой код и двинулся дальше. Но сейчас я просто написал функцию по наитию, как это можно было бы сделать в Go, Ide, очевидно, заругалась на синтаксис - я немного подправил - и все заработало!

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

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

Создаем делегат Func<Element, double>, который принимает аргумент типа Element и возвращает значения типа double.

Теперь с ним можно работать как с функцией, но в рамках текущего метода. Вызов выглядит как обыкновенная функция, например:

double volume = getVolume(element);

// записываем в переменную volume результат выполнения функции, вызванной с переменной element

#пример
Приобрёл 3 книжки:
- для более глубокого погружения в Go
- для улучшения навыков дизайна систем
- для души

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

План минимум: вдумчиво прочитать 2 любые книги из 3. Вероятнее всего, Чистая архитектура уйдет на следующий год, так как сейчас в процессе System Design Interview, про которую писал выше.

#чтение