🗣 «Я программист от макушки до кончиков пальцев», – интервью с Senior Software Engineer C#

Покупали в интернете пиццу или суши? Скорее всего ресторан получил ваш заказ через WebOrders. Корреспондент «Библиотеки программиста» поговорил о применимости и перспективах C# с Владимиром Каратаевым, разработчиком сервиса.

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

Расскажите о своей работе? Много ли вам приходится кодить?

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

Я работаю в команде программистов бэкенда, и кодирование – это существенная часть моей работы.

Командная работа, в отличие от индивидуальной, требует уделять немало времени взаимодействию с коллегами. Ежедневные совещания, встречи в течение дня, согласования и обсуждения – это обязательная, и весьма важная часть работы. Если вы не обговорили какой-то аспект, кажущийся вам незначительным, и закодировали на своё усмотрение, то есть немаленький шанс, что этот код придется выбросить из-за этого "незначительного" момента. Это вам он неважен, а для руководителя может оказаться ключевым.

В итоге само кодирование занимает 60 – 70% времени.

Остальное время уходит на:

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

Почему вы выбрали именно это направление?

Я «заболел» программированием в 6-7 классе школы. После уроков я с такими же «страдальцами» бегал в класс информатики и просил учителя хотя бы посидеть за компьютером. Программировать нас тогда ещё только учили.

Именно поэтому у меня за плечами такой большой бэкграунд из вороха различных технологий я преподавал в университете информатику, программировал ERP на крупнейшем складе в России: в ваших авто наверняка есть детали с этого склада; разрабатывал САПР для электроэнергетики: почти все диспетчерские в России работают на этом ПО, так что свет в ваших домах это и мой труд тоже; сейчас разрабатываю микросервисы в сфере HoReCa ПО для ресторанов.

Я не выбирал этот путь осознанно, по каким-то критериям – он (путь) сам меня нашёл, целиком захватил и увлёк.

Долго ли пришлось идти к нынешнему уровню? Это было трудно?

В целом на уровень ведущего разработчика можно выйти за 3 – 5 лет работы программистом. При наличии соответствующих личных качеств можно стать тимлидом. И это трудно.

Например, строитель или токарь отработал свои 8 часов и далее занимается личной жизнью, о работе не думает. А тут порой решение задачи спать не дает: полночи мозг остыть не может, продолжая искать решения. И нередко добровольно, без всякой дополнительной оплаты, остаёшься поработать ещё, чтобы доделать задачу, пока мысль не ушла. Кроме того, отрасль так динамично меняется, что надо всегда дополнительно заниматься самообразованием. За свой счёт, в свободное от работы время.

Например, я прошёл такой путь: Assembler, программирование микроконтроллеров, Turbo pascal, Delphi, СУБД (Interbase, Firebird, MS SQLServer, Postgresql, Clickhouse, SQLite), Java, и, наконец, C#, Python.

И «бег» продолжается: сейчас присматриваюсь к Golang, Kotlin, Rust. Изучаю обработку больших данных, машинное обучение… много чего ещё. И всё для того, чтобы оставаться на современном уровне, поддерживая актуальность и ценность своих знаний и опыта на рынке труда.

Сложно ли учить С# с нуля новичку в программировании или программисту на другом языке?

Я изучал и использовал много различных языков программирования, так что могу сравнивать. У C# невысокий порог вхождения. Очень важный момент: у C# прекрасный инструментарий для разработки. Достаточно зайти на сайт, скачать и установить Visual Studio, и вы сразу всё получаете «из коробки», в готовом к работе виде.

Нажав пункт меню «новый проект» вы получите рабочую заготовку из простейшей программы "Hello word". Запускайте, смотрите, как работает, модифицируйте и обучайтесь!

Ссылки на обучение приведены на приветственной странице в Visual Studio.

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

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

С чего бы вы посоветовали начинать изучение C# новичку?

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

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

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

Сколько занимает путь от практиканта до полноценного боевого джуна в вашей команде? А от джуна до мидла и сеньора?

Я не советую идти работать практикантом. Надо работать 8 часов, а когда ещё учится программированию? Лучше полгода подучиться и пойти работать джуном. Далее 2-3 года надо не просто работать джуном, а продолжать обучение, чтобы выйти на уровень мидла.

Еще 2-3 года уйдут до уровня сеньора. Но тут уже надо больше вникать в специфику самой отрасли, для которой вы делаете разработку, чем в программирование. Например, делаете САПР в электроэнергетике – разберитесь в типах коммутационных аппаратов. Кодите для ресторанов – изучайте ресторанное дело.

Итого, выход на верхнюю планку ценного специалиста у вас займет около 5 лет, не считая ВУЗовской подготовки.

Что самое важное и сложное в изучении С#?

Сам язык прост. Не тратьте много сил на изучении его языковых конструкций. Существенно сложнее освоить фреймворки, например, asp.net для разработки бэкендов интернет-сервисов. Тут уже надо знать интернет-технологии: что такое аутентификация, и чем она отличается от авторизации, http-протокол, почти всегда требуется работа с СУБД.

Это титанический объём информации, но без этих знаний сложно понять, почему asp.net устроен именно так и научиться эффективно его использовать.

Используйте последние версии фреймворков, библиотек и сред разработки и развертывания. Пока вы будете их изучать, они войдут в мэйнстрим. Обратите внимание, надо обязательно участвовать в проектах open source на GitHub. Это полезно во всех отношениях:

  • Поможете хорошему делу.
  • Найдёте интересную нишу для себя.
  • Научитесь работе с инструментарием разработки: трекер, система контроля версий, автотестирование, CI (continuous integration – постоянное, «на потоке» тестирование и деплой всего, что выкладывается).
  • Научитесь общаться в команде, освоите жаргон.
  • Поймёте и примете инженерную культуру разработки кода.
  • Почувствуете чем дышит отрасль, какие технологии являются мэйнстримовыми.
  • Наработаете себе базу проектов для резюме.

Что еще нужно знать джуну?

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

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

Также необходимо знать аппаратуру («железо»). Как устроен компьютер, какие блоки есть в CPU, что такое кэш, мат.сопроцессор, GPU, разрядность процессора и т.п. Вы же пишите программы для «железа», а не для некоей абстракции. Поэтому надо знать аппаратуру. Не детально, но иметь общее представление.

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

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

Как вы думаете, программисту нужно профильное высшее образование?

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

Куда податься свежеиспеченному джуну? В каких компаниях нужны С# разработчики?

Без опыта работы рассчитывать на приличные деньги не стоит. Надо браться за любую работу. C# любят на заводах и промышленных предприятиях за то, что на нём можно быстро делать пользовательские интерфейсы для ОС Windows. В игровой индустрии царит Unity, использующий C#. Виден явный тренд на более широкое использование C# в бэкендах интернет-сервисов, в банковском ПО. Хотя, конечно же, Java тут абсолютный лидер.

По разным рейтингам язык программирования C# является одним из мэйнстримовых, ведущих языков. Спрос на программистов C# высок: рекрутеры постоянно бомбят предложениями, а вакансии не закрываются месяцами. Это сказывается на уровне зарплат. По моим личным наблюдениям больше C# получают только программисты Java. Разница не сильная, но вполне видимая.

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

Каковы ваши планы на будущее?

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

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

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

Сейчас я вижу, что актуальной остаётся работа с огромными объёмами данных (big data). Это связано с текущим трендом на IoT. IoT сейчас бурно, взрывообразно развивается. Посмотрите – все крупные экосистемы (Мэйл, Сбер, Яндекс, МТС, Google, Amazon, Xiaomi, Apple) имеют в своем составе технологии для работы с умными домами и датчиками. Есть голосовые помощники, которые позволяют управлять устройствами с помощью голоса.

Эти системы состоят из отдельных программных модулей: кирпичиков, которые удобно и быстро можно интегрировать с помощью Python. Он же используется в машинном обучении. Учите Python, как вспомогательный язык, служащий для высокоуровневой интеграции разнородных систем. Для написания облачных микросервисов я рекомендую изучать Java, C#; для пользовательских интерфейсов – HTML и Javascript. Такой стек инструментария разработчика сейчас актуален, и пока не видно тенденций на изменение такого расклада.

***

Хочу освоить алгоритмы и структуры данных, но сложно разобраться самостоятельно. Что делать?

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

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

Курс подходит как junior, так и middle-разработчикам.

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

admin
29 января 2017

Изучаем алгоритмы: полезные книги, веб-сайты, онлайн-курсы и видеоматериалы

В этой подборке представлен список книг, веб-сайтов и онлайн-курсов, дающих...