Як воно - працювати творцем контенту на LeetCode, і чи справді задачі з платформи - "квиток до FAANG". Розмова з українським розробником

Богдан Штепан — Back-end Software Engineer, який у жовтні 2021 року підписав контракт щодо створення контенту для LeetCode, однієї з найвідоміших платформ із завданнями для розробників, що набула репутації «вхідного квитка» до FAANG. Ми поговорили з ним про роботу, «золотий стандарт FAANG» у вигляді задачок, особливості контракту з LeetCode та інсайди щодо розвитку порталу.

Як я потрапив у розробку та ознайомився з LeetCode

Я довго не асоціював себе з ІТ. Більшість людей з мого оточення починали кар’єру айтівців зі шкільного віку і згодом цілеспрямовано вступали на факультети інформатики та комп’ютерної інженерії. Мені ж займатися розробкою як фахом геть не хотілось — програмісти здавались мені «красноглазіками», які не мають життя. Я ж мріяв про роботу, де потрібно буде багато спілкуватись і подорожувати.

Однак технологіями все одно цікавився як хобі. Хотів знати, як усе працює — від браузера до десктопних програм. У 2007–2008 роках ми разом зі шкільним другом намагалися відкрити мобільний сайт. У старшій школі я почав порпатися у С# та .NET. Сидів на спеціалізованих форумах у мережі, ставив багато дурних запитань і читав книжки, які мені там радили.

І попри все це, програмістом я себе не бачив. Після закінчення школи вступив до Одеської національної академії харчових технологій, вивчав мікробіологію. Але в навчанні швидко розчарувався — у нас у країні не найперспективніша харчова промисловість. Тож переді мною постало питання, чим займатись у житті. Та й певні сімейні обставини підштовхнули до пошуків роботи.

І я вирішив повернутись до розробки. У шкільні роки мені це легко давалось, а сам напрям був доволі перспективним. До того ж я мав друзів з ІТ і міг наочно порівнювати рівень заробітків в цій та інших галузях. Вибір був очевидним.

Так, на другому курсі університету, у 2011–2012 роках, я заглибився в розробку. Почав вивчати PHP та Web-програмування і вже за рік став проходити співбесіди в одеських конторах. На той час мій стек складався з PHP, HTML, CSS, JavaScript, jQuery. Щодо рівня сказати важко, але на позицію інтерна я влаштувався. Протягом 4–5 місяців працював спочатку як HTML-кодер, згодом — як JavaScript Developer.

Втім поєднувати роботу в офісі та денну форму навчання було складно. Тож із часом я перевівся на заочку й перейшов на фриланс. За близько 2,5 року фрилансу попрацював із купою технологій і стеків — C#, .NET, ASP.NET, PHP, MySQL, JavaScript тощо. А у 2013–2014 роках, на піку розвитку Front-end як окремої галузі ІТ-сектору, мій фокус змістився на цей напрям.

Тож коли я вирішив перейти на офісну роботу, то шукав позиції Front-end Developer рівня Middle. Переїхав до Києва, проходив багато співбесід. Врешті мені запропонували приєднатись до нідерландської компанії Daxx, яку згодом викупила Grid Dynamics. Я пропрацював там близько шести років, а потім перейшов до Exabeam.

Вже там я не обмежувався фронтенд-розробкою: спробував програмувати на Scala, Go, Python і ще купі мов та технологій. Тож зараз я себе характеризую як Generalist Developer — є такий напрям у західному ІТ, коли вас наймають не як програміста конкретної мови, а як інженера, який виконуватиме конкретні задачі, від яких вже залежатимуть стек, технології й мови.

У цій же компанії я зустрів багато ініціативних людей, які прагнули виходити на новий рівень і йшли до інтернатури в компанії FAANG, часто з метою закріпитися там на фултайм. Зацікавився цим і я. Тоді ж дізнався про LeetCode. Хоча мушу одразу зауважити: не можна сказати, що моє подальше знайомство зі світом алгоритмів і структур даних зав’язувалось тільки на бажанні працювати в FAANG.

Я зареєструвався на платформі у 2018 році, а активно розв’язувати задачі там почав два роки тому, коли світ накрив COVID-19. Вирішив, що теж хочу попробуватись у FAANG, перевірити свої шанси. І розв’язування задачок на LeetCode стало маленькою частиною цієї підготовки. Врешті це перетворилось на щоденну «розминку для розуму» для власного задоволення, а не щоб кудись потрапити.

Задачі розв’язував на різних мовах. Спочатку — на JavaScript і Python. Згодом перейшов на Go. Волів розібратися з низькорівневим програмуванням, а саме С++ — для мене вона була «святим Граалем» розробки. Наразі С++ — це перша мова, на якій я виконав понад 1000 задач, і хочу продовжувати в неї заглиблюватись.

Хто такі творці контенту на LeetCode і як я потрапив до їхніх лав

Творці контенту на платформі — це розробники з усього світу, які співпрацюють з LeetCode здебільшого на контрактній основі та поєднують це зі своєю основною роботою. Позиції творців контенту на платформі відкриті завжди.

Самі креатори діляться на певні категорії: творці задач, творці едиторіалів (розв’язок до них), модератори.

Є також контент-креатори, які займаються картками колаборацій із компаніями — різні фірми повідомляють про процес їхніх інтерв’ю і дають завдання для підготовки. Крім того, LeetCode планує запустити розділ з технічними статтями, і туди також потрібні творці контенту.

Я не планував ставати креатором на LeetCode — тим паче я не проходив за деякими вимогами. Наприклад, аби податися у творці контенту, ваш контест-рейтинг мав бути вищим за 1800. У мене цього не було.

Та попри це, коли мій лічильник перетнув позначку в 1000 вирішених задач, представники LeetCode самостійно зі мною зв’язалися. Вони були вражені, що я за короткий час розв’язав понад тисячу задач, ще й публікував свої рішення на форумі порталу. Мені запропонували контракт як контент-креатору, який створюватиме розв’язки до задач, які нині додаються.

У LeetCode є проблеми з едиторіалами — до більшості задач їх немає, тож користувачу не завжди зрозуміло, як розв’язати ту чи іншу задачу належним чином. Бувало, що на LeetCode давали неоднозначні задачі на контесті, і люди не могли їх вирішити. Відповідно, рейтинг, який був нарахований за цей контест, LeetCode був змушений анулювати. Здебільшого йдеться про задачі важкого рівня, та все ж...

Тому платформа активно шукає людей, які створюватимуть і самі задачі, і рішення до них. Мені також запропонували брати участь у написанні статей. Аби не дублювати інформацію під кожною задачею про те, як працює quick select/quick sort тощо, можна написати окрему статтю й показати все це інфографікою.

Яким є контракт контент-креатора в LeetCode

Мій контракт передбачає оплату за певні дії. Наприклад, за кожну додану або промодеровану задачу вам платять конкретну суму. А також є певні часові рамки. Зазвичай на тиждень накидають 2–4 задачі. У вас є два дні, щоб «відмітитись» під кожною задачею, і потім близько тижня, щоб завершити роботу.

Але я не чув про якісь санкції за порушення цих термінів. Не відгукуєтеся на поставлене завдання — його призначать іншій людині. Немає такого, що якщо ви не виконали завдання за тиждень чи не відгукнулися за 48 годин, вас звільняють. До всього ставляться з розумінням.

Період контракту не прописаний, тобто теоретично він безстроковий. Спочатку ви маєте пройти місячний випробувальний термін зі зменшеним розміром оплати, і якщо все окей, підписуєте контракт на постійній основі.

Важливий нюанс — треба розуміти, що на LeetCode не щодня додаються задачі чи рішення. Це робота на якість, а не на кількість. І буває, що у вас протягом кількох тижнів немає задач. Тож це точно не стабільний і регулярний дохід на кшталт основної роботи.

Як на LeetCode додають задачі

Саме задач на LeetCode я додав лише три, ще коли був звичайним користувачем. Якось читав книжку Cracking the Coding Interview — це щось на кшталт трохи застарілої «Біблії з підготовки» до FAANG. Знайшов там кілька цікавих задачок на бітові маніпуляції й додав на платформу. Раніше задачі на LeetCode могли додавати звичайні користувачі, але через низку проблем їхньою розробкою вирішили займатися всередині компанії.

Написати умову та кілька тест-кейсів до задачі зазвичай не складно. Питання можуть виникати при підтягуванні задачі під різні мови програмування, бо environment різних мов працює по-різному.

Наприклад, С++ швидка, і для неї потрібно максимально затягувати constraints (обмеження), аби неоптимальні розв’язання задач не проходили. А Python досить повільний, для нього варто максимально послабити обмеження, інакше розв’язки задач не проходитимуть.

Але один розробник зазвичай ознайомлений лише з кількома мовами програмування, й однаково якісно підігнати задачу під усі понад 20+ мов, які доступні на LeetCode, йому важко.

Інженер, який програмує на Java і С++, уважно створить і перевірить задачу на цих мовах, але підганяючи її під параметри Go, може пропустити суттєві нюанси. І ось ця задача потрапляє на контест, у розробника на Go вона не працює або ж працює неправильно, і це руйнує людині рейтинг. Таких випадків було чимало, саме тому команда платформи вирішила взяти створення задач суто на себе.

Щодо оптимальності розв’язків, то зазвичай Easy-задача «проходить» навіть з O(n^4) складністю алгоритму, а то й більше. Medium-задачі часто мають «стелю» квадратичної складності алгоритму, хоча є і винятки. Hard — це лінійна та лінійно-логарифмічна складність. Хоч є Hard-задачі з невеликим полем пошуку, де може пройти й не найбільша поліноміальна складність алгоритму. Яскравий приклад — NP-hard/complete задачі, які не мають детермінованого поліноміального алгоритму. Тому для них величина вхідних даних обмежена, щоб задачу можна було вирішити повним перебором.

Щодо порядку дій, то ось як все відбувається:

  • Контент-креатор, який створив задачу, має підігнати її під усі мови програмування і протестувати, чи на кожній із них вона справно працює. Здебільшого цей процес автоматизований, але constraints підтягуються вручну.
  • За цим іде етап модерації, яку одна за одною проводять дві чи три людини. У LeetCode є своя організація на GitHub, де адміністратори призначають модераторів для різних задач. Переважно це люди з різними стеками, які дещо перетинаються, аби модерування було максимально якісним.
  • Усі модератори перевіряють, чи все працює різними мовами програмування, чи всі назви написані правильно, чи немає логічних помилок тощо. Це кілька свіжих поглядів на роботу людини, яка створила задачу. При цьому кожен модератор безпосередньо комунікує з креатором задачі, додає зауваження та очікує на виправлення тощо.
  • Фінальний етап модерації проводить адміністрація платформи і вирішує, чи публікувати цю задачу. При цьому рідко коли задача одразу потрапляє в базу LeetCode — спершу вона проходить через контести, і лише деякі унікальні на платформі задачі додадуть у базу.

Від чого залежить рівень складності задачі

На LeetCode є три рівні задач за складністю: Easy, Medium та Hard. Але насправді ці позначки досить умовні, а задача може «плавати» поміж різними рівнями.

Похожие статьи:
Український IT-холдинг Techiia складається з півтора десятка бізнесів. Його співзасновники, Олег Крот і Юрій Лазебніков, оцінюють його...
Кабінет міністрів планує розглянути постанову про «єБронювання». Цей документ визначатиме, як компаніям подавати й погоджувати...
Цель семинара-практикума от зарегистрированного поставщика обучения PMI — подготовить слушателей к успешному прохождению...
Согласно опросам DOU, каждый третий айтишник с удовольствием играет в компьютерные игры в свободное время....
От редакции:В рубрике DOU Проектор все желающие могут презентовать свой продукт (как стартап, так...
Яндекс.Метрика