Смена стека: Salesforce -> Go

May 4, 2023

После поста о моём уходе из Salesforce, мне написал товарищ, который идёт тем же путём с единственной разницей: он решил учить питон. И попросил советов и лайфхаков. Поэтому опишу, как я подошёл к смене стека.

TL;DR, список советов:

  1. Постоянно изучайте новые для себя технологии.
  2. Изучать лучше решая практические задачи.
  3. В любом новом языке нужно знать: управление памятью, обработка ошибок, многопоточность.
  4. Не забывайте про БД. При переходе с Salesforce на другой стек легко забыть, что мир не ограничен SOQL.
  5. Найдите ментора — он всегда подскажет. Это вообще должно идти первым пунктом.
  6. Лучше заходить через рефералку, поскольку так больше доверия. Плюс пишите сопроводительное письмо. И лучше говорите голосом, а не текстом.
  7. При подготовке к собеседованиям — решайте Leetcode.

Как я и говорил, о смене стека я задумался давно. В начале 2020 я даже ходил на собеседование по NodeJS, но тогда мне не хватило знаний об устройстве ноды, да и мой пока ещё нынешний работодатель сделал интересное предложение. Несмотря на то, что тогда я остался в Salesforce, я решил начать компенсировать по-тихоньку пробелы в знаниях. А потому первый совет: готовьтесь к смене стека заранее, даже если вы сейчас не планируете его менять. Проще говоря, постоянно изучайте новые для себя технологии.

Я разобрался в некоторых принципах работы NodeJS, а затем по подсказке знакомого решил потыкать Go. Как раз примерно тогда мы запускали канал Salesforce RU Careers. Поначалу мы оформляли вакансии руками, но мне это быстро надоело, поэтому я решил сделать бота. И взял как раз Go, потому что лучший способ изучить — попробовать на практике . Честно говоря, тот бот написан не лучшим образом, но для первого знакомства сойдёт.

После первого опыта, я, на самом деле, подзабил на Go. И вернулся к нему только спустя полтора года, решив попробовать сделать аналог Livegram. Получилось так себе, код этого бота я не открывал, но обозначились векторы изучения — многопоточность и обработка ошибок. Насчёт многопоточности в Salesforce можно было особо не париться, а управление памятью сводилось фактически к “не допустить переполнения кучи”, поэтому здесь я узнал-таки много интересного.

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

Кроме, собственно, языка, с которым я собирался работать, мне надо было подтянуть работу с БД. Последний раз с SQL БД я сталкивался году этак в 2015-16, потому успел всё подзабыть. На помощь пришёл Leetcode: там есть отличные модули по SQL, которые напомнят основные конструкции, которых не было в SOQL.

Сколько изучение занимает по времени? Я бы сказал, что параллельно с работой у меня это дело заняло пару месяцев. При этом первый месяц вялотекуще, второй месяц интенсивно. И на исходе второго месяца я решил-таки отправить резюме. Резюме отправил в 5 компаний и фактически в каждую через реферальную программу. В одной пришёл отказ на инженерную позицию в связи с “отсутствием коммерческого опыта”, что, честно говоря, вызывает вопросы к HR. В другой пришёл отказ, поскольку нужен был ТимЛид, и там уже опыт со стеком, конечно, обязателен, не поспоришь. Ещё с одними товарищами мы пообщались, но им не нужны были гошники. И ещё в одной только начинали проект, и нужен был архитектор, чем я также не готов занимать из-за отсутствия практического опыта. В последней компании, тем не менее, всё сложилось удачно — 4 этапа собеседования и оффер на мидла по верхней планке. Сказали, что до сеньора не дотянул из-за пробелов в архитектуре.

Но 4 этапа собеседования — дело небыстрое. Поэтому после отправки резюме я отправился опять-таки на Leetcode, поскольку многие компании любят давать на собеседованиях алгоритмические задачи. Решал я их, естественно, на Go, поскольку это лишний шанс закрепить синтаксис в голове. И эта практика очень пригодилась, поскольку на собеседованиях попались задачи, очень близкие к тому, что я решал.

Как я уже упомянул: чего мне не хватило, так это знаний по архитектуре. Была задачка на проектирование приложения, с котоорой я справился средне. Но тут мне ещё подкинули почитать паттерны микросервисной архитектуры.

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

А вот кратенький список, что почитать по Go:

  1. Tour of Go — интерактивная обучалка. Я не проходил, но говорят очень хорошая для изучения основ.
  2. Серия статей Practical Go от Дейва Чейни.
  3. Вопросы с собеседований.
  4. Серия статей по планировщику Go.
  5. Garbage Collector.
  6. Выделение памяти в Go.
  7. Стоит разобраться в следующем (возможно, покрыто статьями выше, не помню уже 🙂 ):
    1. разница между массивом и слайсом;
    2. вложенность структур и его отличия от наследования;
    3. panic, defer, recover;
    4. WaitGroup.
Nifty tech tag lists from Wouter Beeftink