Русский
Русский
English
Статистика
Реклама

Путь программиста

Как я попал на стажировку в Яндекс

18.06.2021 00:22:38 | Автор: admin

Всем привет, меня зовут Виктор и я frontend разработчик. Хочу поделиться тем, как я решил стать программистом и попал на стажировку в компанию Яндекс в 27 лет без высшего образования.

Сначала моя история о том, как я заинтересовался it сферой и в частности web разработкой.

Знакомство с кодом

Впервые с программным кодом я познакомился на третьем курсе института по специальности прикладная лингвистика. Это был язык программирования python и мне очень понравилось то, как я могу заставить компьютер делать разные классные штуки с помощью циклов, условных конструкций, функций и переменных. Преподаватель был современный и за основу учебной программы взял курс по основам программирования с учебной платформы udacity. В процессе нужно было написать простенький web crawler и небольшой поисковый движок для ранжирования веб страниц по количеству ссылок на них с других веб страниц. По определённым обстоятельствам я вынужден был уйти из вуза после третьего курса и стал зарабатывать на жизнь переводами.

Глубже в технологии

Тем временем я понял, что мне также интересна it сфера и я начал думать, как бы мне продолжить её осваивать и что выучить в первую очередь. Уже не помню почему, но выбор пал на курсеровский курс HTML, CSS and JavaScript Гонконгского университета. Так я впервые познакомился с языком гипертекстовой разметки, каскадными таблицами стилей и языком программирования javaScript. Мне показалось интересным манипулировать различными объектами на web странице, менять стили, расположение элементов и добавлять разную интерактивность. Затем было много разных других курсов с курсеры, edx, степика, главным курсом первого времени был наверное знамений курс Гарвардского университета cs50 на котором я впервые познакомился с алгоритмами и структурами данных и языком си. Это был очень непростой, но интересный курс по основам computer science.

Первые попытки заработать на разработке

Долгое время программирование было для меня эдаким хобби и я несильно видел себя в коммерческой разработке, я проходил курсы, делал разные учебные и личные проекты, изучал разные языки программирования (Haskell, java, golang, scheme etc) и парадигмы, в общем всё это было больше в интерес. В какой-то момент я решил попробовать сделать пару заказов на фрилансе, связанных с веб разработкой и мне удалось заработать первые деньги. После этого я начал помимо переводческой деятельности подрабатывать и веб разработкой, делал простые вещи: правки в вёрстке, подвязка сайта к crm через ajax, калькуляторы стоимостей услуг и товаров и всё в таком духе.

Смена профессии

После этого я начал задумываться о том, что нужно сменить таки профессию и стать полноценным разработчиком, специализироваться я решил на javaScript по причине его гибкости и возможности программировать во всех возможных парадигмах, а также его присутствию, как на клиенте, так и на сервере. Нужно было освоить какой-нибудь фреймворк, научиться тестировать код, верстать адаптивно, кроссбраузерно, валидно и семантично, освоить препроцессор для css, node js, typescript, webpack. Если до этого моё изучение программирования было в большей степени академичным, то теперь я решил взяться за дело всерьёз. Выбор пал на react за счёт того, что это javaScript first библиотека с минимумом магии и функциональным подход в построении интерфейсов ui, как чистая функция от состояния и свойств, переданных компоненту. На данный момент я также знаю на базовом уровне vue js, который меня восхитил своей магией и скоростью разработки, но опечалил отладкой и поиском ошибок, когда что-то ломается в шаблоне.

Хочу в крутую компанию!

Теперь перейду уже к стажировке. Я понимал, что в 25+ устроиться без опыта работы в крутую it компанию будет довольно непросто и уже пытался до этого попасть в школу программистов Хэдхантера и курсы от Тинькофф банка, после которых можно было попасть в штат, но там были очень сложные алгоритмические задачи, с которыми я не мог справиться полностью, обычно решая половину задач или меньше. В мэйл дорога была заказана сразу, потому что на свои стажировки они берут только выпускников своих образовательных программ. Про Яндекс я почему-то всё это время даже не думал, потому что считал, что там всё будет ещё гораздо страшнее. Но месяц назад в телеграм канале одного хорошего ютубера (S0ER) я наткнулся на пост о стажировке в Яндекс и подумал ну а почему бы и не попробовать, я вообще ни на что не расcчитывал и заполнил анкету указав честно все свои скромные достижения в виде одной курсовой, пачки сертификатов и резюме с указанием технологий, которые я освоил на тот момент.

Письмо счастья

В ответ мне пришла ссылка на контест. Я не буду говорить о том какие там были задания, но я был приятно удивлён тому, что на алгоритмы там была ровно одна задача из четырёх и именно её я завалил, моё решение прошло только половину тестов, из остальных там было задание на вёрстку, оно было довольно жёстким, нужно было pixel perfect сверстать определённый рисунок, состоящий из геометрических фигур без использования svg и готовых картинок, только html и css. Две оставшиеся задачи проверяли базовые вещи для javaScript разработчика: асинхронность, контекст вызова, прототипы, замыкания. Надо отметить, что каким-то образом я умудрился все три этих задания сдать с первой попытки в контесте. На всё это было дано 6 часов.

На следующий день со мной связался рекрутёр Яндекса с предложением пройти 2 интервью в зуме, одно из них на общие навыки программирования и javaScript, другое на алгоритмы.

На первом интервью меня попросили рассказать о том, как пришёл в разработку, спросили про навыки из резюме (правда ли я знаю вебпак и тайпскрипт, показал на гитхабе игру крестики нолики, которую я как раз недавно сделал, написанную на тайпскрипте. Спросили про опыт разработки и мои проекты. Дальше началось само интервью. Сначала мне были предложены куски кода с предложением найти ошибки и объяснить, что в них работает не правильно и почему. Затем были задания на написание кода. Работа со стандартными методами массивов, объектов, в общем на знание языка и понимание его особенностей. В конце была ещё алгоритмическая задачка (задачи на алгоритмы должны были быть на следующем собеседовании) потому что как оказалось, я решил основную часть раньше установленного срока. После предыдущих задач я немного расслабился и сначала встал в ступор, но после небольшой наводки от собеседующего смог решить и её.

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

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

Это были команды картинок, лавки и маркета.

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

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

Подробнее..

Перевод История о том, как один подросток сбежал от физического труда в программирование

27.05.2021 08:07:06 | Автор: admin


Летом 1982 года буквально за несколько месяцев до моего поступления в колледж мать отвела меня в сторонку и сказала: Отец хочет, чтобы ты нашел на лето работу и сам оплачивал свои расходы в учебном году. Мне было восемнадцать лет, я нигде еще не успел поработать, и даже сама мысль об этом, честно сказать, меня тогда немного пугала. Я был ботаном-домоседом, ну и, чего греха таить, довольно ленивым перспектива работы меня совсем не прельщала. Но я понимал, что спорить тут бесполезно, потому что в чем-то был согласен с позицией отца.

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

Мать всегда была готова помочь: она нашла несколько вакансий в нашем городке, среди которых была одна в дорожном управлении. Туда-то я и направился робкими шагами на собеседование одним июньским утром. В громадном здании со множеством грузовиков и кучами песка мне навстречу вышел крепкий парень в оранжевом жилете. Он скептически оглядел меня с ног до головы. Я был долговязым и прыщеватым подростком; слово ботан тогда еще не вошло в обиход, но я выглядел его живым воплощением. Едва ли не первыми словами, которые я от него услышал после этого осмотра, было (ей-богу, не вру):

Ты же в курсе, что работа связана с физическим трудом?

Конечно, конечно, ответил я, стараясь звучать поубедительнее. По-моему, он не поверил, но только пожал плечами и сказал:

Ну ладно. Когда выходишь?

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

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

Я сказал парню в оранжевом жилете, что схожу домой узнаю, когда мы едем отдыхать, а потом сообщу ему дату (спойлер: больше я туда не возвращался) и умотал из владений дорожного управления на высшей скорости. Когда мать спросила, взяли ли меня на работу, мне не хватило духу соврать. Я сказал, что взяли, но я не пошел, и попытался объяснить почему, чувствуя себя пристыженным. Уверен, она была недовольна, но отчасти меня поняла. Последнее, что она сказала на этот счет: Не говори отцу.



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

Как-то раз мать принесла с работы интересную наводку. Она работала на радиостанции, составляла график рекламных объявлений. Один из спонсоров жил в нашем городе и занимался ремонтом и перепродажей подержанных автомобилей. У него что-то не заладилось с компьютером, и он спросил на станции, нет ли здесь специалистов по компьютерам. Мать взяла его телефон и передала мне. Я позвонил.

Внесу ясность: хотя последние четыре-пять лет я хватался за всякую представляющуюся возможность усесться за компьютер, к специалистам я не относился. Благодаря программе, позволявшей старшеклассникам учиться программированию, я прошел несколько вузовских курсов по Фортрану и структурам данных, обгоняя учебную программу. Также я более-менее научился писать на BASIC в результате многочасовых попыток делать игры на соседском TRS-80. Но в моих знаниях по программированию было, мягко говоря, много пробелов. Я никогда не писал масштабных и сложных программ, не работал с чужими и вообще не занимался программированием в рабочей обстановке.

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

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



Примерный портрет Джима (возможны расхождения с оригиналом)

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

Компьютерные проблемы Джима брали начало из сделки с калифорнийскими разработчиками, которую он заключил раннее он заказал систему для ведения бизнеса. Компания была очень маленькой, буквально пара человек. Они продали ему 16-разрядный мини-компьютер Data General Eclipse с несколькими терминалами, а также сделали специальную программу для обработки заказов на ремонт, платежей и зарплатных ведомостей.

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

Я зашел в систему, потыкался в ней и понял, что у аккаунта, который мне выделили, ограниченные права. Я подошел к Джиму сказать, что мне нужно больше доступа, и он тут же впечатлился. Он, как оказалось, специально дал мне аккаунт без прав, чтобы посмотреть, замечу ли я. Это типа у него проверка была такая, и я ее прошел. В глубине души я закатил глаза, потому что проблемы там явно были посерьёзнее, чем уровень доступа.

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

Если бы у меня были компьютеры получше в годы юности, я бы, наверное, сразу встал и ушел без малейшего понятия, что с этим делать. Но я много времени провел за допотопными или просто примитивными машинами вроде мини-компьютера PDP-8/E производства Digital 1974 года, который стоял в школе, или моего личного инструктора по микрокомпьютеру Netronics ELF II, где для ввода-вывода служили клавиатура с шестнадцатеричными кодами и лампочки. Поэтому я кое-что знал о машинном коде, форматах файлов, заголовках, системных утилитах всяких низкоуровневых вещах. По крайней мере, об их существовании.

И я подумал: наверное, с этими файлами что-то сделали, раз они не читаются, может быть, дело в заголовках? Я нашел в системе hex-редактор, с помощью которого можно было отображать и редактировать содержимое файлов в сыром виде, включая заголовки. Программа вывела содержимое файла в виде набора шестнадцатеричных чисел, аккуратно оформленных в табличку, а также символов, которые они представляли.



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

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

В заголовках выделялось несколько непонятных мне областей, в которых обнаруживались различия между нормальными и корявыми файлами. Я стал просто вслепую экспериментировать с кодом, меняя некоторые символы в корявых файлах. Первые несколько попыток привели только к повреждениям файла, из-за которых он переставал даже открываться. Но потом я дошел до одного места, где в нормальных файлах стоял символ E, а в корявых символ F (E в шестнадцатеричной системе исчисления соотносится с 1110 в двоичной, а F с 1111). 1110 против 1111, разница всего-то в один бит. И я просто взял и заменил в корявом файле F на E.

Как по волшебству, на экране появился код на BASIC. Я был потрясен. Защита, которую подрядчик оставил для своих файлов, сводилась к банальной замене одного символа в каждом из заголовков, чтобы файлы запускались, но не читались. Можно сравнить с замочком, которые некоторые надевают на чемодан может немного помешать, но того, кто твердо намерен добраться до содержимого, не остановит.

У меня колотилось сердце: казалось все более и более реальным, что я сумею решить проблему Джима. И, самое-то главное, смогу подкрепить слово делом, или как там говорят? На тот момент я провел в офисе примерно час, еще около сорока пяти минут понадобилось, чтобы перебрать все файлы и везде заменить символы. Сейчас я бы, наверное, попытался сделать какой-то скрипт, который бы все это провернул автоматически, потому что программисты не зря слывут лентяями. Но подобные вещи оставались за пределами моих возможностей в восемнадцатилетнем возрасте, да и не факт, что Data General Eclipse так уж хорошо подходил для создания скриптов, насчет этого не поручусь.

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

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

Сколько просишь?

Этот вопрос возглавил бы список самых страшных вещей, которые у меня спрашивали, если бы не Когда выходишь?, который я услышал парой недель раньше от работника дорожного управления. А так он занял почетное второе место. Ведь мне, восемнадцатилетнему подростку, который нигде никогда не работал, никогда в руках зарплаты не держал и сбежал с единственного в своей жизни собеседования, предлагалось самому решить, сколько денег мне причитается. На финансовой стороне вопроса я как-то не сосредоточивался. Когда входил в офис, еще думал о том, что, может быть, удастся получить здесь работу, но потом всё внимание поглотила техническая задача.

Какую же цифру назвать? Я понятия не имел. Не знал, сколько в принципе берут программисты, что такое консультант и как оценивать свое время. Мне не хотелось обижать Джима заоблачными запросами, но и в дураках остаться тоже не хотелось. Поэтому я выбрал сумму, которая лично мне казалась кругленькой, но Джима вряд ли бы разорила сто долларов.
Услышав мой ответ, Джим расплылся в улыбке. Это была улыбка человека, которого после томительного ожидания вытащили из петли и отпустили на свободу. Ну или можно сказать, улыбка человека, который только что провернул хорошую сделку. Джим бросил взгляд на бухгалтера и сказал:

Выпиши Неду чек на сто долларов.

Потом он сообщил мне, что у его еще много таких задач, если мне случаем нужна работа систему еще дорабатывать и дорабатывать. Он предложил мне четыреста долларов в неделю в течение лета, чтобы я приходил исправлять ошибки и писать новые программы, которых ему не хватает.
Так что я ушел от него с сотней долларов и работой на лето в кармане. Родители были счастливы, да и я тоже. Я отработал у Джима и то лето, и следующее, денег мне хватило и на жизнь, и на учебные расходы, да еще осталось, чтобы купить свой первый настоящий компьютер Commodore VIC-20. Я неплохо заработал, делая то, что мне нравится.

Какое-то время меня преследовало чувство, что я прогадал в этой своей первой сделке с Джимом. Было ясно, что на тот момент я диктовал условия и мог спокойно взять с него и побольше, чем сотню. Он бы заплатил, и, наверное, это было бы справедливо ведь никто, кроме меня, не смог справиться с проблемой. Вообще-то, до этого он отдавал программистам и более значительные суммы за работу, даже безрезультатную. И я спрашивал себя: сколько еще денег я мог бы унести домой в тот день? Возможно, я показал этим свой непрофессионализм?

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

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

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

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

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru