Педиатр-программист: Как я попал в Майкрософт

Ответить
Аватара пользователя
AAA
Сообщения: 40449
Зарегистрирован: 08 июл 2016, 23:04
Откуда: Москва
Контактная информация:

Педиатр-программист: Как я попал в Майкрософт

Сообщение AAA »

Педиатр-программист: Как я попал в Майкрософт
http://pikabu.ru/story/_3506867
Изображение

Текст получился довольно большой и я разбил его на 7 частей:

Часть 1: Поворот
Часть 2: (лирическое отступление) Школа и медвуз
Часть 3: Microsoft Student Partners Germany
Часть 4: Подготовка к интервью
Часть 5: Интервью
Часть 6: Практика в Майкрософт Бинг в Сан-Франциско
Часть 7: Работа в Майкрософт Бинг изнутри

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

=============

Так получилось, что в 27 лет жизнь моя зашла в тупик, из которого я не видел простого выхода. Закончив с золотой медалью школу и с красным дипломом медицинский, отучившись в аспирантуре в Германии три года и дописывая диссертацию, я вдруг окончательно осознал, что мне уже почти тридцать, а я всё ещё занимаюсь в жизни совсем не тем, чем я хотел бы заниматься.

С первого класса я мечтал стать информатиком (так я сам называл эту профессию, что-то среднее между программистом и администратором). Однако информатика всю мою жизнь оставалась лишь моим хобби, занятие которым давало мне силы и энергию на другие сферы. Моей профессией сначала было изучение медицины (как студента-медика), потом я подался в фундаментальную науку (так как она была более близка к тому, чем я думал, я хотел бы заниматься, нежели рутинная работа врачом-педиатром – специальность, что стояла у меня в дипломе). Посвятив исследованиям четыре года во время учебы в ВУЗе и еще три года после в аспирантуре, я все больше разочаровывался в себе, в своих способностях. Жизнь просто и незаметно завернула не туда и, казалось, уже не вывернет куда мне надо.

Однако, так сложились обстоятельства, что у меня появилась возможность начать всё сначала. Такое решение помогла мне принять моя (тогда еще будущая) супруга, и в возрасте 27 лет я пошел учиться в Технический Университет Гамбурга (TUHH, Technische Universitt Hamburg-Harburg), на факультет инженерной информатики (Informatikingeneurwesen), на первый курс. Как ни странно, в свои 27 лет я был 5-м или 6-м студентом на потоке по возрасту (то есть были люди и старше 30!). Это помогло мне число психологически влиться в студенческую жизнь и не чувствовать себя белой вороной.

Мне сложно сравнивать студенческую жизнь в Германии с тем, как преподают информатику в России, ведь я в России в ВУЗе я изучал только медицину, а это такая вещь в себе, наполненная походами в анатомический театр и зубрежкой анатомических и прочих терминов начиная с самой первой недели первого курса и практически до пятого курса. Учеба в медицинском была для меня трудной, напряженной работой на протяжении всех шести лет обучения, с редкими праздниками и встречами вне рамок учебы. Я ни до, ни после никогда не был вынужден ежедневно прикладывать столько усилий для того, чтобы просто удержаться на плаву. Я помню, что очень часто во время учебы я вспоминал высказывание Чёрной Королевы из Алисы Кэрролла: Иногда нужно бежать изо всех ног чтобы просто оставаться на месте.

Учеба по специальности Informatik-Ingenieurwesen (информатика и инженерное дело), по сравнению с учебой в России, показалась мне намного проще. Возможно, здесь сыграл роль тот факт, что я всегда интересовался информатикой и к моменту начала учебы у меня уже были (пусть и разрозненные) знания. А, может быть, это просто специфика обучения в техническом ВУЗе.

Об учебном процессе в Германии можно писать много и долго: за те 6 лет, что мне понадобились, чтобы закончить ВУЗ по моей новой специальности, я успешно сдал около 40 письменных и 10 устных экзаменов, написал около 20 работ (включая преддиплом и диплом), прошел через 30 кафедр, на ряде которых я даже немного подрабатывал тутором (помощником преподавателя). Мне очень нравилось, что, в отличие от России, на многих лекциях никто не пытался нас отмечать. Более того, конспекты лекций (слайды презентации или сканы того, что писал профессор на overhead-проекторе), а в некоторых случаях даже видеозаписи лекций, выкладывались в сеть и их можно было смотреть несколько раз. В конце семестра силами самих студентов организовывались курсы подготовки к экзаменам по ключевым предметам (математика, теория систем, электротехника, механика и т.п.), когда студенты, успешно сдавшие этот экзамен в прошлые годы, разбирали с теми, кому этот экзамен только еще предстоит, наиболее важные и сложные моменты теории и задачи. Таким образом, сравнивая медицинский и инженерный диплом, я могу лишь сказать, что моё второе высшее образование далось мне намного легче первого, и больше напоминало отдых и общение с интересными людьми нежели тяжелый труд.

Примерно через полгода от начала учебы моя жена, случайно зайдя к нам в университет перекусить в студенческой столовой, нашла на доске объявление вакансию, которая бы мне подошла – разработка формуляров и написание запросов к базе данных товарооборота (Warenwirtschaftssystem, WaWi) в небольшой фирме, расположенной в 5 минутах езды на автобусе от университета.

В этой фирме я и проработал всё время учебы, пройдя путь от практиканта на 6 часов в неделю до ведущего разработчика. Именно это работа позволила мне финансировать учебу и мою семью, особенно когда на втором курсе у нас родился сын и моя жена была вынуждена уйти со своей работы. Мне повезло работать с удивительными людьми, которые решали практические задачи каждый день и которые многому меня научили именно в том, что касается практики программирования (теории мне хватало и в ВУЗе). Мне также очень повезло с директором фирмы, немцем по имени Зёнке, которым я искренне восхищаюсь до сих пор. Он много раз отвозил меня домой на своём Порше, когда автобусы уже не ходили и идти через индустриальный район было бы страшно. Он несколько раз ночевал со мной на работе, когда надо было что-то срочно починить до утра в моей части кода. И на третий день работы на фирме, еще только в самом начале испытательного срока (который по договору был полгода), он сказал мне – увольняйся со свой второй работы - (я еще работал в аэропорту, в отделе подготовки документов на грузы) – здесь ты можешь работать столько, сколько ты захочешь и пока ты хочешь. Сейчас, через много лет, я очень благодарен ему за то доверие и веру в меня, которая тоже сыграла немалую роль в моей карьере.

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

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

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

Мне и сейчас, спустя 10 лет, безумно нравится программировать и отлаживать код. Но тогда за полгода полной эйфории я умудрился написать столько всякого разнообразного софта: софт для электронной подписи накладных на автоматических весах, на которых взвешивают грузовики, систему шифрованной передачи финансовой информации между кораблями и базой (в рамках которой мне пришлось частично переписать код известного архиватора 7-zip и я даже послал автору этой программы патч, добавляющий новый ключ для удаления файлов после добавления их в архив – это была часть функционала, что не было в архиваторе и что требовалось для нашей системы), систему автоматической генерации прайс-листов в Экселе и HTML формате для системы товарооборота, написанной главной фирмы и внедряемой в качестве решения у всех клиентов фирмы.

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

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

Честно говоря, для меня это было совершенно неожиданно. Я то и в школе не был первым по информатике, да и тогда, несмотря на то, что я был уже в начале второго курса, я не блистал какими-то достижениями в учебе (они скорее были скромные). Все мои достижения сводились к сугубо практическим вещам, что я написал за полгода на этой фирме. В моём же представлении Гугл и Майкрософт берет только лучших из лучших, победителей олимпиад или гениев математики.

Напиши им, - советовал мне коллега, - они наверняка ведь еще студентами набирают себе сотрудников, обучают и потом берут уже окончательно. Написать им? Что? Что я студент, работаю вот на фирме и мне коллега посоветовал у вас спросить, не нужны ли вам студенты в качестве кандидатов в будущие сотрудники? Что за бред!

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

Майкрософт ответил через несколько минут автоматическим мейлом, что моё письмо принято к рассмотрению и ему присвоен некий внутренний номер. Через два дня мне написал представитель студенческой программы Майкрософт Microsoft Student Partners в Гамбурге, который сообщил мне, что моё резюме им понравилось и они хотят меня пригласить на очное интервью в начале следующего года (шла как раз предпоследняя неделя декабря, впереди были почти недельные рождественские каникулы) и что мне нужно подготовить 20-минутный доклад на немецком языке на любую, связанную с Майкрософт тему.

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

Изображение

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

Изображение

Так выглядил интерфейс одной из первых программ, что я написал, для генерации прайс-листов их базы данных описаний товаров...
Аватара пользователя
AAA
Сообщения: 40449
Зарегистрирован: 08 июл 2016, 23:04
Откуда: Москва
Контактная информация:

Сообщение AAA »

Часть 2: (лирическое отступление) Школа и медвуз

Честно говоря, я никогда не думал, что когда-то буду работать в США и тем более в такой компании, как Майкрософт. Как-то, когда я еще учился в школе и случайно увидел Эйфелеву башню на иллюстрации в учебнике французского языка, я невольно посмотрел в окно, где тогда еще был СССР, и подумал – да, Эйфелеву башню я увижу разве что на более качественной иллюстрации и вряд ли я когда-то окажусь в Париже. Попасть в Париж через окно чердака, как в популярном тогда фильме Окно в Париж, было для меня более реальным, чем съездить в Париж. По многим причинам, и не в последнюю очередь по финансовым.

У меня, как и у любого ребенка, были свои мечты, кем я хотел бы стать. Сначала я хотел быть космонавтом, потом пожарником (после посещения музея пожарного дела), потом мне хотелось вырасти и ремонтировать телевизоры. Все закончилось в 8 лет, когда папа принес домой первый мой компьютер. Компьютер этот выглядел не совсем так, как сегодня мы привыкли (см. иллюстрацию): это была такая черная коробка, чем-то похожая на обувную, на которой сверху была наклеена разноцветная бумага с нарисованными разными цветами клавишами и покрытая блестящей плёнкой. Это было достижение советской мысли, персональный компьютер БК-0010.
Изображение

Вместе с компьютером шла кассета с пятью играми, которые можно было загружать, если подключить к компьютеру магнитофон. Игры были написаны на алгоритмическом языке Фокал, интерпретатор которого был встроен в ПЗУ, и были по сегодняшним меркам довольно примитивными: кости, поиск сокровища в лабиринте (Фараон), прохождение каких-то препятствий человечком. Игры, собственно, меня то и не заинтересовали так сильно, как сам компьютер и возможности поиграться с ним, попробовать что-то своё.

Но тут папа достал толстую книжку, что лежала в одной коробке с компьютером, и сказал, что сначала мне нужно прочитать её полностью. Книжка называлась очень странно Персональный компьютер БК-0010. Руководство системного программиста. Последние два слова из названия книги я не понял совсем. Начав её читать, я осознал, что после 10-й страницы я уже не понимаю практически ничего. Те отдельные слова, что я знал, не сильно помогали понять смысл.

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

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

Прорыв у меня случился во втором или третьем классе, когда мы проходили умножение многозначных чисел в столбик. Команда Фокала “T 3456 x 4567 = “ давала мне сразу окончательный ответ, а мне необходимо было записать в столбик полное решение. Сначала я вручную умножал первое число на отдельные разряды используя несколько команд -- Т 3456 x 4 =, T 3456 x 5 = -- но скоро мне это надоело.

Тогда-то я и задумался: я нельзя ли написать такую программу, которая бы выдать решение в нужной мне форме? Самой сложной проблемой в решении этой задачи было найти i-ю цифру с конца числа, так как Фокал не поддерживал операции с символами (только с числами). В результате долгих размышлений я нашел такой способ: делим исходное число на 10, отбрасываем дробную часть, умножаем полученный результат на 10 и вычитаем его из оригинального числа. Таким образом мы получаем последнюю цифру числа.

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

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

Компьютер у меня сменился сначала на ZX Spectrum, а потом на более продвинутый его вариант Профи, где я наконец-то познакомился с ассемблером и долгими вечерами сидел в ZXASM (ассемблер) + STS (отладчик) стараясь написать собственную операционную систему. За три года я довольно далеко продвинулся: написал библиотеку работы с пропорционально-ширинными шрифтами (стандартно там шрифты все моноширинные), оконный менеджер, библиотеку графического указателя, что управлялся клавиатурой или джойстиком. На основе этих трех библиотек я написал свой примитивный файловый менеджер, что-то вроде Проводника в Windows, и стал раздумывать как можно написать диспетчер задач на основе той ограниченной поддержки прерываний, что была реализована в Спектруме. На этом я и остановился.
Изображение


В школе у нас стояли двойки (IBM PC 286), списанные из какой-то спонсорской организации, где мы, как и большинство школьников того времени, мучали Паскаль, штудировали книжку Хершеля и играли в игры типа первой Цивилизации. К сожалению, олимпиады по информатике тогда еще не проводились так массово и централизованно как сейчас, да и участвовать в них от моей школы посылали более способных в информатике (а таких было несколько!). Но к концу школы я вполне хорошо разбирался в программировании на тот момент времени, хотя, конечно, у меня не было никакого опыта написания серьезных приложений или опыта участия в олимпиадах с автоматической оценкой решений.

Изображение
Этот учебник Хершеля по Турбо-Паскалю был нашей Библией и Камасутрой во время учебы.

Постепенно шла к концу школа, и надо было выбирать себе ВУЗ по профессии. Однако вопрос выбора у меня не стоял. Весь 10-й и 11-й класс я усиленно готовился к поступлению в медицинский университет. Почему медицинский? Потому что мама у меня врач. Она честно мне сказала: В жизни можно иметь много хобби и одну профессию. И пусть это профессия будет медицина. Вот если вдруг что случится, война или что – ну кому нужны будут информатики? Врачи же всегда будут нужны. Это был сильный аргумент. Тогда у меня не было чётких приоритетов в жизни. Мне казалось, что мне всё по плечу, а медицина была такой хорошей планкой, прыжком на высоту которой это можно было проверить.

Я успешно сдал вступительный экзамен по химии (после которого у меня остался на всю жизнь клок седых волос, так как решение ключевой задачи до меня дошло только за 15 минут до конца экзамена) и как медалист прошёл сразу на бюджет Педиатрического факультета. Потом были шесть удивительных лет в моей жизни. Медицина это действительная такая интегративная область знаний, где можно применять и высшую математику (в биофизики, физиологии, фармакологии) и просто уметь объединять тысячи вроде бы разрозненных фактов в единую систему (анатомия, гистология, патологическая анатомия, топочка). В какой-то момент огромный объем знаний, что дается несколько вразнобой на разных кафедрах, должен ассимилироваться в голове в единую четкую систему того, как устроен и работает человеческий организм в здравии и болезни – и эта система называется клиническое мышление.

Довольно рано я начал заниматься наукой на кафедре физиологии и еще во время учебы мне удалось получить приглашения выступить с научными докладами в Украине и Италии, а также сделать практику в Германии. В результате по итогам этой практики меня и пригласили в аспирантуру в Берлин. Для меня этот вариант оказался просто спасением, так как в родном моем городе места мне, конечно же, не нашлось и меня собирались отправить работать врачом в небольшое татарское село Дрожанное, чтобы, по словам декана, отработать своё бесплатное медицинское образование). Я плюнул на всех, поругался с проректором и деканом на распределении и уехал в Германию в аспирантуру в Charit, известную берлинскую клинику.
Аватара пользователя
AAA
Сообщения: 40449
Зарегистрирован: 08 июл 2016, 23:04
Откуда: Москва
Контактная информация:

Сообщение AAA »

Часть 3: Microsoft Student Partners Germany

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

Функциональное программирование тогда еще только-только начинало входить в мейнстрим, и еще мало кто толком знал, что это такое и с чем его едят. Да я и сам, признаюсь честно, тогда не понял много. Но того, что я понял, хватило на мой 20-минутный доклад, где я показал, как функциональный подход к программированию позволяет решать определенные задачи быстрее, с меньшим объемом кода и меньшим числом ошибок. Мой доклад понравился, и уже через месяц я стал полноправным членом организации Microsoft Student Partners Germany, с доступом к её Sharepoint и электронным адресом в домене studentpartners.de.

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

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

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

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

Если сначала в программу принимали только студентов технических специальностей, то с определенного момента участие расширили и на студентов-гуманитариев, предоставив им возможность специализироваться в различных офис-продуктах и сдавать экзамены из серии MOS/MCAS (Microsoft Office Specialist/Microsoft Certified Application Specialist).

В зависимости от количества проведенных мероприятий и количества сданных сертификационных экзаменов можно было сделать небольшую карьеру, вершиной которой является Expert Student Partner (после сдачи трех сертификационных экзаменов и около 700 часов мастер-классов по собственным слайдам и программе), которым оплачивали неделю специального педагогического курса, нужного для получения сертификации Microsoft Certified Trainer.

Эта программа мне очень много дала и определила место моей настоящей работы! С одной стороны, требование о сдаче сертификационного экзамена ограничивало выбор технологий (я выбрал экзамен по администрации SQL Server 2005, экзамен 70-431), но с другой стороны никто не запрещал изучать и другие, смежные технологии и делать доклады по ним, а не непосредственно по предмету сертификации. В результате, в частности, я в первый год разбирался с C# и подготовил двухчасовой доклад на тему LINQ (тогда эта технология только появилась и все, связанное с ней, было в новинку), потом переключился на технологии ASP.NET, и так далее.

Если с сертификацией было все более-менее понятно и за четыре года самоорганизации, заставляя себя читать книги для подготовки к сертификационным экзаменом хотя бы три дня в неделю, я смог добраться до уровня MCPD (Microsoft Certified Professional Developer), то с организацией учебных мероприятий для студентов дело с самого начало не заладилось. При первой же попытке забронировать учебную комнату для доклада по MS SQL Server 2008 мне было заявлено, что такого рода доклад является рекламным мероприятием (!) и что я должен платить почасовую аренду за комнату, как если бы я хотел организовать в ней банкет или частную вечеринку. Конечно, таких денег у программы не было. Дело зашло в тупик.

Здесь мне опять помог случай. Во время участия в конкурсе программных проектов Microsoft Imagine Cup команде нашего ВУЗе повезло занять третье место по Германии, и Майкрософт тогда в качестве утешительного приза подарил нашему ВУЗу годовую бесплатную подписку на онлайн коллекцию курсов Microsoft IT-Academy. Во время вручения этого приза нашему университету я познакомился с главой нашего вычислительного центра, Куртом. Курт был уже в возрасте и был таким очень типичным ГДР-овским немцем: он очень любил СССР, любил русскую культуру, бывал в СССР (в Россию же почему-то не ездил) и умел читать по-русски (говорить, увы, он при мне уже стеснялся).

Благодаря этому знакомству я получил возможность бронировать помещения под любые курсы, доклады, конференции и другие (технические!) мероприятия от имени вычислительного центра нашего ВУЗа. Наш вычислительный центр на 50% был основан на технологиях Майкрософт (другие 50% представлял Debian Red Hat) и сотрудники центра с интересом относились к нашим мероприятиям и часто приходили послушать наши доклады. Я пишу наши, так как часто я выступал в роли организатора и приглашал на доклады других партнеров, которые были специалистами в областях, в которых я разбирался не очень хорошо (IT Infrastructure, SharePoint, Exchange, Embedded Systems, Microsoft Surface и прочее).

Активное участие в программе позволило мне не только достичь довольно продвинутых сертификаций (MCPD в .Net и MCITP в разработке баз данных), но и получить сертификацию тренера (MCT, Microsoft Certified Trainer), что позволило мне использовать готовые слайды для своих докладов из материалов, предоставляемых тренерам (MOS, Microsoft Official Courseware). Но не это главное. Главное – те связи, которые ты нарабатываешь за это время, общаясь с одной стороны с большим количество сотрудников Майкрософта, с другой стороны – с преподавателями своего ВУЗа, с профессорами и заинтересованными студентами.

Однажды, когда глава разработки Windows 7, John de Vaan, тогда Corporate Vice President Майкрософт и глава Windows Development, был проездом в Гамбурге. Windows 7-ка тогда как раз только-только вышла, и он приезжал на какое-то закрытое мероприятие для значимых клиентов компании. И когда он захотел выступить перед студентами с техническим докладом, так получилось, что я оказался тем посредником, который координировал этот доклад. Сначала мой ВУЗ не знал, как отнестись к такой информации от обычного студента (ведь для ВУЗа я был всего лишь студентом-третьекурсником), из-за этого организовывать помещение пришлось в последнюю минуту и даже переносить одну лекцию. В результате на доклад Джона, к моему удивлению, пришло около 500 человек (при вместимости зала 400 мест), и доклад был действительно сугубо технический и посвященный координации работы всех команд, разбросанных по всему миру, которые работали над операционной системой.

Когда я учился на четвертом курсе один из профессоров предложил мне, совместно с его аспирантом, разработать программу практического курса для студентов-второкурсников. В курс, состоящий из восьми 4-часовых занятий, вошли такие темы, как Code Versioning Systems, Issue Tracking Systems, Unit Test, Test-Driven Development, Code Metrics и другие, сугубо прикладные темы, которые мы демонстрировали в Visual Studio. На последнем курсе другой профессор попросил меня прочитать курс – введение в программирование на С++. Оба эти курса, с одной стороны, заняли у меня очень много времени на подготовку и проведение, но очень помогли мне понять сложности и быт преподавателей ВУЗов.

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

В январе 2010 года неожиданно несколько ведущих Student Partners из нашей программы, которые закончили ВУЗы и уже не могли больше оставаться в программе, в своих прощальных письмах анонсировали, что они получили предложения от Майкрософт и в скором будущем начинают работать в Microsoft USA. Этот факт меня очень заинтересовал – как так? Каким образом они смогли получить приглашение для работы в США? Что нужно было сделать для этого?

Я написал письмо одному из них, которого знал более-менее, где прямо спросил: Как тебе удалось получить позицию в Майкрософт?. В ответ я получил довольно странный ответ, что переезд в США – это процесс непростой, и прежде чем я на него решусь, хорошо бы сначала сделать в Майкрософт практику и посмотреть, подходит ли мне жизнь и работа в США. Я несколько удивился – ведь я спрашивал о работе, а не о практике – но в целом, согласился с его доводом и стал изучать возможности сделать практику в Майкрософт.

В сети было достаточно много информации на данную тему. Прежде всего, есть разные виды практик, и то, что мне нужно, называлась Business Internship (хотя к бизнесу никакого отношения не имела). Нужно было подать своё резюме через специальную страницу на сайте Майкрософт до 15 декабря для практики в летние месяцы следующего года. Обычно где-то до середины января проходил отбор резюме (на порядка 400 мест обычно присылалось 16-20 тыс. резюме), в феврале первый раунд очного интервью в одном из Европейских офисов Майкрософт (в Дублине, Мюнхене или Варшаве, которые ротировались каждый год), и в марте для оставшихся финальное интервью в штаб-квартире Майкрософт в Редмонде, США.

На ближайшей встрече Microsoft Student Partners Германии, что проходила в небольшом австрийском городе, я поговорил с руководителем нашей программы в Германии и попросил его помощи в этом процессе. Он поддержал моё желание и заверил меня, что сделает все возможное, чтобы моё резюме не было отсеяно на первом этапе – дальше все уже зависело от меня самого.

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

Материалы практического курса профессора Gollmann, что мы совместно с Marina Krotofil разработали для студентов, можно взять тут:
http://wiki-dot.net/down/SoftwarePraktikumGollmann.7z
Курс преподавался нами два года (и на третий год мною совместно с другими аспирантами, которые переняли его), поэтому основной набор материалов находится в папке Kurs2010, а во второй папке Kurs2011 только некоторые "доработанные" или измененные материалы.
Часть материалов на немецком, часть на английском: курс исходно должен был быть на немецком, но в середине студенты захотели, чтобы он проходил по-английски.

Вот здесь можно посмотреть на моё резюме, которое я отправлял в Майкрософт:
https://drive.google.com/file/d/0B4iuYn … Y3YXM/view
Аватара пользователя
shiny
Сообщения: 10498
Зарегистрирован: 22 дек 2016, 00:00
Откуда: в Шуе бал

Сообщение shiny »

Harry/IronBoyz работает на мелкософт. давненько от него ничего не было слышно, ЖЖ хз где.
Ненависть- это подарок
Аватара пользователя
AAA
Сообщения: 40449
Зарегистрирован: 08 июл 2016, 23:04
Откуда: Москва
Контактная информация:

Сообщение AAA »

Часть 4: Подготовка к интервью

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

Прежде всего, поискав информацию в интернете, я с удивлением обнаружил, что даже в Википедии есть отдельная статья об интервью в Майкрософт. На протяжении многих лет Майкрософт был ведущей IT-компанией и её основатель, Билл Гейтс, имел довольно специфический подход к проведению интервью. В частности, во время интервью тестировались не только (и не столько) специфические знания или навыки, а сколько способности кандидата к аналитическому мышлению.

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

Пример задачи: Используя знаки арифметических операций (плюс, минус, умножить, разделить) добейтесь того, что данное выражение станет истинным: 3 1 3 6 = 8 Если нужно, можно также использовать скобки.

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

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

Пример вопросов: Сколько дорожных люков в Нью-Йорке? Сколько настройщиков пианино в Чикаго?

Для успешного решения подобных задач необходимо уметь проводить оценки нижнего и верхнего пределов своей задач, постепенно переходя от населения страны и города к количеству потенциальных клиентов или улиц, давая шаг за шагом приблизительную оценку. Итоговое число не так важно, и может даже на порядок отличаться от известной величины – важен именно сам путь от базовых знаний до узко-специфического значения. Для того, чтобы научиться решать эти два типа проблем, подходят книги “How to move the mount Fuji” и “The art of guessimation”, где разбираются пошагово различные задачи подобного рода. Однако, эти книги сегодня имеют лишь историческое значение – вероятность напороться на такой вопрос в собеседовании сегодня очень мала.

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

Самое лучшей книгой для подготовки к интервью в больших IT-компаниях, которую я встречал, является книга Gayle Laakmann “How to crack a coding interview?”. В этой книге рассматриваются все аспекты технического интервью: от составления резюме до того, как правильно торговаться за зарплату и бонусы. Большая (ударение на первом слоге) часть книги посвящена имена технических вопросам и ответам на них, есть также разделы по brain teasers и архитектуре и даже операционным системам. Именно поэтому эта книга и стала основной книгой для подготовки.

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

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

1.Сначала решал задачу на листе бумаге, записывая код ручкой
2.Перенабирал код в Блокноте и LinqPAD, исправляя красной ручкой все ошибки в названиях, сигнатурах и прочем – все, что мешало коду скомпилироваться
3.Если решение было правильным – на этом этапе все заканчивалось
4.В случае неправильного решения приходилось либо отлаживать программу и исправлять ошибки зеленым цветом, либо решать задачу заново.

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

А тем временем уже шел январь 2011 года. Прошло около пяти недель после подачи резюме в Майкрософт, когда мне написала рекрутер и сообщила, что я успешно прошел первый этап (ура-ура! Хотя я и не сомневался) и что она теперь хочешь провести телефонное интервью со мной в любое удобное мне время. К письму была приложена табличка в Excel с этими самыми любыми удобными временами, которые оказались между 11 часами ночи и 6 часами утра – из-за разницы во времени, так как интервью проводилось напрямую из США.

Я выбрал ровно полночь для интервью. С одной стороны, это было бы уже не первое интервью (интервью предполагалось получасовое, то есть до меня еще могло быть до двух других интервью), а с другой стороны интервьюер бы еще не очень устал.

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

Следуя советам Laakmann я подготовил большую матрицу примерных ответов на вопросы о своём резюме, выписал ключевые слова, которые я мог бы забыть во время телефонного интервью и немного порепетировал эти ответы. Также подготовил ответы на типичные вопросы, которые обычно задают на первом интервью, вроде Ваши недостатки?, Что бы Вы сделали по-другому? и так далее. Я также подготовил ряд материалов для решения задачи по программированию: сложности различных методов в структурах данных, сложности алгоритмов сортировки. Приготовил и чистую бумагу, для черновиков.

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

Интервью протекало так, как и было описано у Laakmann. Рекрутер (а это был американец со странной для американца фамилией Мюллер) спрашивал меня по моим предыдущим проектам: в чём заключалась моя роль, какие проблемы приходилось решать и что бы я сделал по-другому. Поговорив так около 15 минут, он сказал, что больше вопросов у него ко мне нет и спросил, есть ли у меня к нему вопросы. Я уже к этому моменту уже почти пересортировал свои материалы так, чтобы сразу решать задачу, поэтому я не совсем уловил суть вопроса и автоматически ответил ему, что вопросов у меня пока нет. “Well, OK, bye!” сказал он и положил трубку.

Вот тут я растерялся по-настоящему. Сначала я даже подумал, что нас просто разъединили и он сейчас перезвонит – но нет. Потом я еще раз проанализировал все, что было сказано им, и вспомнил, что ведь он сказал “bye” прежде чем положить трубку. Значит, он решил не давать мне задачу. Но почему? Все было так хорошо или, наоборот, так плохо? Я вроде бы ответил на все его вопросы во время этих 15 минут, но из-за того, что использовалась Voice-over-IP соединение я порой понимал только половину или треть того, что он меня спрашивал и вполне мог ответить что-то невпопад или неправильно. Эх!

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

Поэтому, даже когда я получил е-мейл от рекрутера с ничего не говорящим заголовком “Re: Interview” я даже не сразу открыл его, чтобы не портить себе праздник…

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

Сначала я подумал, что письмо просто дошло до меня слишком поздно. Но вроде нет, по заголовкам письмо было отправлено в пятницу вечером из США, то есть после того, как интервью в Мюнхене уже прошли. Но куда тогда мне надо ехать? Об этом в самом письме ничего не было. Поэтому я тут же переспросил а куда мне нужно приехать на интервью?, на что рекрутер ответила через несколько часов К нам, в Редмонд.

Это был огромный сюрприз для меня. Я каким-то образом сумел перескочить один раунд интервью и получил приглашение сразу на последний раунд. Почему так получилось я не знаю. Может быть сыграли свою роль те сертификации, что у меня были. Может быть это связано с моим активным участием в Microsoft Student Partners программе. В любом случае, я получил джокер и мне предстояло пройти то самое, великое и ужасное интервью, о котором пишут книги и статьи Википедии.

Вот самая важная книжка, что мне помогла:
https://www.amazon.com/Cracking-Coding- … s=laakmann
http://rutracker.org/forum/viewtopic.php?t=4378222
Аватара пользователя
AAA
Сообщения: 40449
Зарегистрирован: 08 июл 2016, 23:04
Откуда: Москва
Контактная информация:

Сообщение AAA »

Часть 5: Интервью

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

Поездка не прошла без приключений. Так как у меня не было навигации для США, я скачал на телефон бесплатную навигацию на основе Open Street Maps, но неожиданно выяснилось, что у них нет номеров домов, и я так и не смог найти свою гостиницу: сделав два круга я запарковался на какой-то стройке и там позвонил друзьям, что ждали меня в фойе, чтобы они помогли мне найти въезд в подземный гараж гостиницы, который я каждый раз пропускал, принимая его за служебный въезд.

На следующий день, в воскресенье, я целый день готовился к интервью, повторял наиболее сложные задачи и алгоритмы, а также места, где я часто делал ошибки. Выйдя из номера только для того, чтобы покушать, я опять прокололся: заказав в небольшой вьетнамской забегаловке что-то дешевое за 10 долларов я получил счет на 14, и заплатил ровно 14, ни оставив никаких чаевых, что очень разозлило и огорчило официантку. Ну откуда ж я знал, что в меню была указана kitchen price, без налогов и чего-то еще, и туда еще нужно добавить 15% чаевых? Для меня это и сейчас довольно много, а тогда вообще казалось дикостью.

Вечером в воскресенье у нас была небольшая вечеринка вместе с остальными кандидатами, которых пригласили на собеседование в понедельник. Всего, как оказалось, было около 30 кандидатов, которые собеседовались в два различных департамента: Windows Phone и OSD.

Услышав это, я облегченно вздохнул. Windows Phone только вышел в прошлом году, но у меня уже было неплохое приложение в маркте, одно из первых приложений из Германии, которое мы написали с моим другом из Гамбурга Eike. Это было указано в моем резюме, и я не сомневался, что собеседование я буду проходить именно в этой группе – и уж что касалось программирования для Windows Phone, тут я вроде неплохо разбирался.

Тем не менее, в той папке, что мне дали после вечеринки, с ознакомительными материалами перед собеседованием, стояло OSD. Во время боулинга, что мы играли на вечеринке, я даже и не поинтересовался, что же это за второй такой департамент – о чем сейчас жалел. Поиск в интернете ничего не прояснил, вариант On-Screen Display (экранное меню) меня тоже не очень устраивал.

Сбор был утром в 8:15, я быстро позавтракал и в 7:45 уже был в фойе, ожидая автобус, который должен был повезти нас на интервью. Одновременно я нашел еще пару других ребят, которые должны были проходить собеседование в OSD, которые и просветили меня, что за этой аббревиатурой, означающей Online Services Division, скрывается Бинг и относящаяся к нему инфраструктура. Очевидно, кандидатов распределяли по департаментам совершенно случайно, без учета их резюме. Иначе как объяснить тот факт, что я попал на собеседование в OSD, к которому не имел никакого отношения…

Автобус приехал ровно в 8:25, но ехать оказалось всего около 10 минут (пешком идти, в общем, столько же) – мы поехали не в Редмонд, а в большое здание Бинга в Bellevue, где и должны были проходить собеседования кандидатов из Бинга. Во время поездки нам рассказали о том, как запланирован этот день: у каждого из нас сначала должно было быть 4 интервью по 50 минут, после которых был небольшой обед и лекция про облачные технологии. Затем нам объявляли результаты собеседования и у нас было свободное время для поездки в Сиэтл, чтобы осмотреть его достопримечательности.

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

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

Задача 1: Для данного телефонного номера США необходимо выдать все возможные комбинации букв, которыми он может быть записан.

В США, оказывается, на каждом телефонном аппарате есть буквы рядом с цифрами, и многие фирмы даже свои телефоны записывают как 1-800-YOUR-FURNITURE или что-то подобное – очень удобно в рекламных целях и не нужно учить последовательность цифр.

Так как последовательность полученных слов была не важна, то для решения можно было использовать любой алгоритм для обхода дерева, поэтому любой алгоритм такого обхода подходил для решения этой задачи. Единственное, что меня смутило в задаче – какой структурой данной воспользоваться для хранения и передачи этого списка слов. В целях простоты синтаксиса я выбрал List, при этом соответствие цифра – буквы у меня хранились в readonly структуре List.

Задачу я решил довольно быстро используя DFS и рекурсивный алгоритм генерации дерева, основной метод которого получал на входе строку с номером в виде string, а возвращал мне дерево возможных решений, из которого я на втором этапе через DFS генерировал слова, добавляя их в List для текущего номера. приступил к тестированию и обнаружил небольшой баг с усечением номера при генерации дерева, который быстро исправил.

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

По итогам первого интервью я был очень доволен собой и уже значительно более спокойно стал ждать второго интервьера.
Второй собеседующий оказался из Канады, и мы сначала несколько минут поговорили по-французски (в моем резюме было указано, что я владею им). Он сразу признался, что он работает в back-end и не знает С# -- моего основного языка – а использует только С++. Он спросил меня, могу ли я для решения задачи использовать С++. Мне хватила ума и осторожности сказать, что я могу попробовать использовать синтаксис этого языка, если нужно. Он согласился и сразу дал следующую задачу:

Задача 2: Дана матрица n x m, заполненная целыми числами (положительными и отрицательными и нулями). Необходимо обнулить все строки и столбцы матрицы где встречается элемент с нулевым значением.

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

Это задание показалось мне проще, нежели остальные. Ключевым было слово вектор бит (bit vector), которое я произнес достаточно рано и остаток времени ушел на реализацию этого вектора (я не знал, есть ли он в стандартной библиотеке C++, поэтому решил реализовать сам). Также отдельное внимание пришлось уделить работе с памятью, так как для упрощения решения я передавал в метод расчета одномерный массив и размерности матрицы.

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

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

Изображение
сори за офтоп, но справа от офиса бинга стоит офис моего любимого valve)

Третье интервью стало же полным провалом.

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

Задача 3: Допустим, у нас есть веб-приложение, которое поддерживает компоненты, называемые виджеты. Каким образом можно реализовать синхронизацию времени в двух разных виджетах?

Первый раз я не понял условие совсем. Что требовалось от меня? Разработка API для протокола синхронизации? Два произвольных виджета должны быть синхронизованы просто между собой, или все виджеты должны иметь одно и то же время? Мои вопросы остались без ответов, индус лишь добавил, что мне нужно предложить концепты. К такому я был несколько не готов, и из-за волнения у меня ряд названий заело на немецком (я учил всю информатику на немецком). Сначала я рассказал о Verbraucher-Konsumer-Pattern, который я в последний момент таки сумел перевести как publisher-subscriber architecture. Потом рассказал про merge replication, как оно реализовано в SQL Server. Оттуда мы перешли к high availability models, на примере кворума баз данных и распределенных транзакций. Неожиданно интервьюер повернул разговор на тему многозадачности, и я еще успел рассказать о критическом пути и семафорах на последних минутах интервью. На мой вопрос, удовлетворен ли он моим ответом, он сказал я услышал все, что хотел услышать.

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

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

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

Задача 4: В численных кроссвордах вместо слов и букв используются числа и цифры. В любом численном слове цифры не могут повторяться, и все цифры идут либо в возрастающем, либо в убывающем порядке. При этом отдельные цифры можно пропускать. Например, 1245 и 9832 являются допустимыми, а 1223 (две одинаковых цифры) и 9835 (смешанный порядок) недопустимыми. Также никакое число не может начинаться на 0, но может содержать 0 в себе. Для данного слова, в котором известны несколько цифр, например, хх5хх9 или 87хх21 надо найти возможные комбинации допустимых слов.

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

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

В результате за оставшиеся 20 минут я быстро набросал алгоритм, похожий на тот, что был у меня в первой задаче, который на выходе давал мне все возможные слова. На большее у меня уже не хватило времени, та часть задачи, где нужно было искать слова по заданной маске, так и осталась нерешенной, хотя я описал примерный алгоритм решения. Из-за сильного волнения я совсем забыл английский, в частности слово присваивание, и постоянно пытался заменять его синонимами, как to let, to set и борясь с пытающимся прорваться немецким zuweisen.

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

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

Началась лекция, в которой лектор рассказывал об SLA облачных технологий и как эта SLA достигается. Неожиданно выяснилось, что кроме меня никто не знал, что такое SLA (или не хотел этого показать?). Также выяснилось, что из порядка 17 кандидатов только двое было не из университетов США: я из Германии и еще один поляк из Англии. Было много индусов, была даже девочка из Казахстана, которая училась в MIT у Barbara Liskov.

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

Первым назвали моё имя. Я не особо удивился. Рекрутер ждал меня в конце длинного коридора около стола, больше напоминавшего барную стойку. Когда я подошел, он сразу начал Знаешь, Александр, с твоей практикой есть проблемы…. Да что там, мне было и так всё понятно, я собственно, внутренне уже подготовился и совсем не расстроился…

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

Я помню, что я около минуты пытался осознать эту фразу. Когда до меня дошел, наконец, ее смысл, я даже не смог обрадоваться. Я как в тумане помню, как сначала 15 минут мне один индус рассказывал о проекте переписать интерфейс платформы для размещения рекламы с Silverlight на HTML5, как я что-то спрашивал его. Второй менеджер, тоже из Индии, начал так у меня есть одно место для практиканта, но оно, к сожалению, в Сан Франциско. Почему это было к сожалению я не понял, но один тот факт, что это была группа, разрабатывающая алгоритмы и подразделение core search (базовые группы поиска) сыграло свою роль – и я тут же дал сделал выбор в пользу Сан Франциско и этой группы.

И только когда я вышел, с 5 другими счастливчиками, которые уже ждали меня в фойе, на прохладный воздух, наконец-то меня накрыло чувство эйфории. Это чувство было написано на лица каждого из нас. Мы взяли такси (нам раздали ваучеры на такси) до центра, гуляли вдоль набережной, мимо pike market и space needle, разговаривали, общались. Мы уже не были друг другу конкурентами, мы все уже были без пяти минут бизнес интернами Майкрософт.

После прогулки мы зашли в какой-то ресторан с морскими деликатесами, чтобы отметить получение практики. Прочитав несколько раз меню, я практически ничего не понял, кроме того, что что-то готовится как-то. Ни названия рыб (и других морских гадов), ни способы приготовления мне не были знакомы, поэтому я просто выбрал что-то наугад. Надо было видеть моё лицо, когда всем принесли суп, а мне – специальные щипцы для того, чтобы есть то блюдо, что я заказал. Пока я изучал этот странный инструмент, вызывавший у меня ассоциации с кабинетом стоматолога. Когда же мне принесли, наконец, этого несчастного краба, выяснилось, что щипцы требуют определенного навыка, потому что каждый раз, когда я пытался ими раскусить клешню или конечность меня обдавало небольшим фонтанчиком бульона, который находился в них. Таким вот небольшим позором и закончилась моя поездка в Сиэтл на собеседование.
Аватара пользователя
AAA
Сообщения: 40449
Зарегистрирован: 08 июл 2016, 23:04
Откуда: Москва
Контактная информация:

Сообщение AAA »

Часть 6: Практика в Майкрософт Бинг в Сан-Франциско (пост1) (пост2)

Для того, чтобы сделать практику в США, необходимо иметь статус студента (быть студентом очного отделения ВУЗа) и получить специальную визу категории F, которую для этих целей выдают сроком ровно на 12 недель – на период прохождения практики. Получение американской визы процесс непростой, но в принципе и не такой сложный. Самым сложным была подача документов в посольстве, куда нельзя проносить ни сотовые телефоны, ни USB-накопители, вообще никакую электронику, включая электронные часы. А куда же их девать? Как мне подсказал охранник, бабушка в ближайшем цветочном киоске за 2 Евро охотно присматривала за твоим добром и даже вела какой-то учет. Но при этом не выдавала никаких квиточков, полностью полагаясь, видно, на свою память. Было несколько стрёмно отдавать ей пакет со смартфоном, брелок с ключами от всего на свете и еще кучу нужных вещей, которые мигом можно толкнуть минимум за две-три сотни Евро, и всё это удовольствие всего за два евро – кто же знает её бизнес-модель и вдруг она меня больше и не вспомнит? Но у бабушки глаз оказался наметан хорошо и с совестью тоже все в порядке – после всего я получил свой пакет обратно, в целости и сохранности. Но больше на такое не решался и всегда просил друзей пойти со мной и подождать снаружи пока я завершу дела.

Есть несколько видов практики, которую предлагает Microsoft. В данной статье я описываю только Business Internship и жизнь Business Interns, которые по сути являются студентами технических специальностей, еще не закончившими ВУЗ.

Практика в Майкрософте подразумевает работу над проектом в течение 12 недель. Работа интерна в принципе ничем не отличается от работы обычного сотрудника: интерны получают зарплату, сравнимую с зарплатой специалиста (всего лишь на 20-30% меньше, чем начальная зарплата выпускника ВУЗа), они самостоятельно работают над проектом и представляют свои результаты, их менеджер дает оценку их работе используя те же критерии, что и для остальных сотрудников.

Кроме этого, Майкрософт дает возможность оформить по очень низким ценам временное жилье (от 650 долларов в месяц за однокомнатную студию и 1200 в месяц за двухкомнатную квартиру, полностью меблированную и со всеми приборами), снять машину (около 400 долларов в месяц), а также перенимает частично стоимость велосипеда, если так тебе проще добираться. Тебе и твоей семье (если она хотел поехать с тобой) оплачивается перелет. Также в середине практики организуется большое мероприятие для всех интернов с участием Билла Гейтса и всего руководства компании, с приглашением звезд эстрады и с подарками. В наш год, к сожалению, первый раз не было Билла Гейтса, вечеринка проходила в зоопарке Сиэтла, приглашенную звезду я не знал (какой-то Dave Matthews), а в качестве подарков были Xbox 360 Slim.

Так получилось, что я жил в самом центре Сан Франциско, в комплексе с романтическим названием Bayside Village прямо под мостом Bay Bridge (это второй мост, находящийся примерно в 10 милях от своего намного более известного собрата Golden Gate Bridge), всего в 15 минутах пешком от своего офиса. К сожалению, об этом я не знал в тот момент, когда мне нужно было решать беру ли я машину или велосипед, поэтому я выбрал машину и она практически все время стояла в гараже комплекса. Даже в магазин мне было легче сходить пешком, чем пытаться запарковаться в тесном подземном гараже.

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

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

Прежде всего, у меня было два руководителя. Один – мой непосредственный менеджер, с отличием закончивший Гарвардский университет по информатике и защитивший диссертацию по лингвистике в Амстердаме, член общества фи-гамма-каппа, говорящий на 6 языках и имеющий очень цепкий и быстрый ум. Его первой фразой при встрече, которую он произнес просто как скороговорку, было – не пугайся, если ты вдруг не всё понимаешь из того, что я говорю – тут родившиеся здесь американцы меня не всегда могут понять: не бойся задавать вопросы!. Так примерно я понял тогда эту фразу, надеюсь правильно.

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

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

На решение этой задачи мне давался полный carte blanche и около 10 недель времени. На протяжении этого времени у меня два раза в неделю по часу были syncs с моими руководителями, которые выслушивали мои предложения и критиковали их, разбирая их по косточкам и не оставляя от них камня на камне. Они указывали мне на все недостатки предлагаемых мною методов решения, но когда я пытался задать встречный вопрос а как правильно делать это?, то неизменно получал ответ в форме это же твой проект – вот ты думай и предлагай, а мы тут только для того, чтобы обсуждать твои предложения, а не сами предлагать что-то (отмечу еще раз, что это не совсем типично для практики в большой фирме, поэтому мне в определенной степени повезло!) Из-за того, что мои решения постоянно подвергались критике мне казалось, что на протяжении всей практики мне казалось, что я постоянно пытаюсь изобрести тот велосипед, который уже давным-давно изобретен здесь, и весь смысл моей работы сводится к тому, чтобы посмотреть, как быстро я его изобрету.

Я должен признать, что я до начала практики был мало знаком с работой поисковых систем и с проблемами, которые приходятся решать в рамках их функционирования. Поэтому во время практики мне приходилось очень много читать и изучать такие новые для меня темы, как Information Retrieval, Data Mining, Machine Learning и прочее. Каждый день, вечером, приходя домой с работы около 9 часов, я старался уделять хотя бы час чтению учебников и статей по этой теме. В некоторые выходные я даже оставался дома, чтобы лучше изучить эти темы. Перед сном я ходил плавать в бассейн в комплексе и во время заплыва думал над своим проектом, пытаясь применить то, что я прочитал в теории, к своей практической деятельности.

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

По моим представлениям мой проект практиканта развивался довольно успешно: я разработал довольно интеллектуальный алгоритм разбиения HTML документа на отдельные текстовые блоки, примерно соответствующие абзацам письменного текста или отдельным заголовкам. Для того, чтобы отсекать невидимые блоки, блоки за пределами экрана и прочее я написал небольшой собственный движок рендеринга и использовал данные рендеринга в качестве эвристик: моя основная гипотеза заключалась в том, что основной текст должен располагаться примерно в середине страницы в блоках, которые занимают не меньше 45% и не больше 100% от ширины экрана, в то время как элементы навигации обычно уже и имеют большую асимметрию относительно серединной линии, нежели текст.

Алгоритм также сначала сканировал текст в поисках заголовка – небольшого (1-2 предложения) текста размерами больше чем медианный размер текста на странице. Если такой блок находился и морфосемантический анализ этого текста показывал, что это скорее нормальный текст нежели реклама, то все блоки до этого текста игнорировались из дальнейшего анализа.

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

В общем, я перебрал несколько подходов, остановился на наиболее перспективном и занимался анализом различных факторов на тип блока текста. Я написал несколько программ для анализа текста, его разметки вручную для генерации gold standard (который мне был нужен для расчета метрик, таких как precision и recall), самообучающийся движок для анализа текстов на основе многих страниц из одного источника (то есть для случая, когда мы можем предполагать одинаковый дизайн, но разный контент в n связных документах).

Предварительная же оценка моей работы, написанная моими двумя руководителями по итогам первых 6-8 недель, была скорее негативной, чем позитивной. Не всегда способен оценить сложность и приоритет задач, зачастую работает над менее приоритетными задачами, в то время как более приоритетная задача остается без внимания, небрежно относится к срокам, которые может пропустить без какой-либо видимой причины -- все это оказалось для меня совершенно неожиданным. И правда, примерно на 7-й неделе я потерял две недели работы из-за того, что у меня приказал долго жить жёсткий диск и была потеряна работа порядка полутора недель (я не делал бакапы каждый день), да, мне бывало откровенно скучно на наших рабочих встречах, так как мой проект не имел прямого отношения к тому, над чем работала наша группа. Но даже с учетом этого я не ожидал такой степени негатива.

Я попытался прояснить ряд моментов, особенно что касалось сроков, со своими руководителями, ведь мы никогда не определяли сроки, на что получил просто феерический ответ – “we had some implicit deadlines” (у нас был ряд негласных сроков). Ну кто бы мог подумать, что их вопросы – а успеешь ли ты до пятницы? и т.п., которые я просто принимал за предположения, считались ими конкретными сроками выполнения работы.

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

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

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

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

Однако не самая хорошая характеристика придала мне сил – терять мне в любом случае было нечего (кроме, возможно, опасности попасть в какой-нибудь черный список с пометкой no hire, но об этом я в тот момент совсем не думал). Поэтому я решился на такой шаг и за 5 недель до окончания проекта я бросился со всеми силами на изучение и, по мере изучение, внедрение методик машинного обучения в своем проекте.

Это сейчас, в 2015 году, когда машинное обучение стало модной технологией, найти хороший и даже бесплатный курс в интернете не представляет больших проблем. Coursera предлагает целый ряд курсов, от объемно-теоретических, как курс профессора Andrew Ng, до сугубо-прикладных, как курс от университета John Hopkins. Да и на других платформах предостаточно интересных курсов с заданиями и разобранными ответами. Тогда же я смог найти лишь какой-то мутный туториал на R, который мне посоветовали использовать мои руководители, но который за три дня изучения и научного тыка не сильно продвинул меня к моей цели.

Когда я уже начал выдыхаться я вдруг вспомнил, что я же блин специалист по MS SQL Server, а в состав этого сервера входит отдельный движок для машинного обучения – SSAS, SQL Server Analytical Services. Когда, еще в целях подготовки докладов для Microsoft Student Partner Program, я занимался этим движком и у меня были базовые знания о том, как создавать модель, как распределять данные, как обучать модель и проводить cross-validation.

В результате я за три дня сделал несколько моделей для своих данных: от простых decision trees и nave bayes, до довольно большой по размерам (насколько мне позволил сервер) нейронной сети, которую я особенно долго тренировал на своих данных. После сравнения всех трёх моделей, к моему удивлению, модель, построенная на decision trees, выдавала наилучшие значения как для precision, так и для recall для моей задачи.

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

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

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

Когда пошла последняя неделя моей практики к нам в офис из Сиэтла прилетел менеджер второго уровня (начальник моего начальника), который среди прочего послушал мой доклад о практике в виде небольшой сжатой презентации. После презентации я вернулся в свой кубикл, а мои руководители продолжили что-то обсуждать со своим начальником.
Вечером этого же дня, перед самолётом, начальник зашел ко мне попрощаться, так как он больше меня не увидит, и спросил, как бы между прочим: не считай это предложением, но что ты думаешь о работе в Майкрософт в США?. Я удивился, но честно ответил, что это для меня практически невозможно, так как у моей жены была очень хорошая работа в Германии, которой мы не можем рисковать и я не думаю, что ей и моему сыну будет легко в США.

Моя практика закончилась опять не очень гладко: во время финального доклада лаптоп решил поставить критическое обновление и перезагрузиться, в результате половину моего 30-минутного доклада я пытался его оживить и потом за оставшиеся 15 минут рассказать весь доклад. После доклада мы группой сходили в ближайший ресторан, отметили окончания моей практики, я попрощался со всеми. Это была пятница. Выходные я провел очень бурно: всю субботу ездил по Сан Франциско на экскурсионном автобусе (до этого у меня не было на это время), а воскресенье потратил на поездку в Алькатрац и на Остров Ангелов. В понедельник вечером моё самолет вылетал обратно из Сан Франциско в Гамбург…

Утром в понедельник я проснулся от телефонного звонка. Я очень удивился – ведь мой номер в снимаемой квартире практически никто не знал. Это был мой рекрутер. Я был очень удивлен, но он напомнил мне, что мы, оказывается, договорились, что он позвонит мне в день отлета еще тогда, когда я с ним встречался во время поездки в Сиэтл на встречу с другими интернами. Тогда же я и дал ему этот номер – я как-то совершенно забыл об этом в пылу баталий последних дней практики.

Рекрутер довольно быстро перешел к делу Алекс, я получил твою окончательную характеристику от твоих руководителей сегодня утром – и она просто замечательная! Поздравляю с успешным завершением практики. Мы хотим сделать тебе предложение о работе в Майкрософт, включая переезд в США из Германии по завершении твоей учебы. Я посмотрел, сколько мы можем тебе предложить в данной ситуации, и эта сумма составляет столько-то в год. К сожалению, это предложение является non-negotiable, то есть ты не можешь торговаться за его условия, а можешь лишь либо принять, либо отклонить его.
Пока я летел обратно решение уже было принято моей семьей. Мы стали готовиться к переезду в США через пару лет…
Аватара пользователя
AAA
Сообщения: 40449
Зарегистрирован: 08 июл 2016, 23:04
Откуда: Москва
Контактная информация:

Сообщение AAA »

Часть 7: Работа в Майкрософт Бинг изнутри (пост1) (пост2) (пост3)

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

Однако именно этот год и помог нам решить – по крайней мере отсрочить – основную проблему, а именно хорошую работу, на которой работала моя жена и которую не хотелось просто так терять. Так получилось, что незадолго до начала оформления визы, через год, у нас родился второй сын и моя жена смогла взять трехгодичный отпуск по уходу за ребенком, сохранив, таким образом, своё рабочее место на этот срок. Этот срок истекает в апреле 2016 года, то этого у нас еще есть время подумать, взвесить все и решить – хотим ли мы строить наше будущее в США или в Германии.

Все, что я описываю ниже – это лишь моё личное мнение. Это не официальная позиция компании, это не реклама (никто мне не платит за написание этого). Это просто моя попытка рассказать немного о том, как я вижу жизнь внутри компании.

Мне не очень просто рассказывать о том, как организована работа во всем Майкрософт: я работал и работаю только в одной команде (если не считать практику, которую я подробно описал раньше). В пределах большой компании работа в отдельных командах может разительно отличаться в зависимости от того, кто твой менеджер и как он представляет себе организацию работы. Это очень известный факт и есть даже такая поговорка: “You don’t quit your company, you just quit your manager" (Ты не уходишь с работы, ты лишь уходишь от своего менеджера).

Я работаю в команде, которая напрямую не связана с поиском, мы анализируем работу поисковой машины и рассчитываем различные показатели (метрики) её работы. Основная задача нашей команды – оценка удобства работы с поисковиком Bing и определение путей улучшения этой работы.

Хотя наша команда состоит на 90% из инженеров, основной продукт нашей команды – это не код, не какие-то программы и алгоритмы, а итоговые цифры оценок (метрики, metrics) и специальные страницы, где можно делать различный анализ полученных результатов (dashboards). Только небольшая часть метрик разрабатывается непосредственно нашей командой. В большинстве случаев мы предоставляем движок, позволяющий сторонним командам описывать их собственные метрики и автоматизировать их расчеты.

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

Наша команда довольно маленькая, она состоит из четырех разработчиков, одного PM (работающего на нас только часть своего времени) и менеджера, который тоже на 80% выполняет роль разработчика, либо закрывая наиболее важные бреши, либо программируя что-то новое, что еще не выросло в отдельный проект.

PM — это такая роль, когда ты не занимаешься напрямую программированием, но ты организуешь работы программиста и являешься ключевым звеном в коммуникации между другими командами и разработчиками из твоей команды. Здесь очень важно понимание своей проблемной области, в то время как технические знания не так критичны (но могут быть очень важны и являются большим плюсом). Обычно PM являются потребителями тех данных, что мы рассчитываем, и на основании их принимающие решения о работе команды. Они находятся на том же уровне, что и программисты (и имеют такую же иерархию в карьерной лестнице). Это именно PM разрабатывают различные варианты дизайнов, они же занимаются анализом того, какой дизайн лучше в итоге. Роль программиста сводится лишь к реализации этого дизайна и программированию необходимой логики.

Я не знаю, как правильно расшифровать PM, кто-то говорит, что это Project Manager, кто-то Product Manager. Зачастую это человек с инженерным опытом, который предпочитает меньше кодить и больше заниматься именно развитием проекта, в частности написанием спецификаций, документаций, созданием презентаций и прочего. Обычно PM появляется в командах от определенного числа человек и только для важных проектов. В моем случае на тех проектах, где работаю я, нет никакого PM и мне приходится самому делать презентации, писать документацию и делать все остальное, что занимает времени не меньше, а даже больше чем кодинг.

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

Software Development Engineer (SDE) – один или два небольших проекта с ограниченным набором задач, с небольшими требования интеграции с другими проектами, в случае отказа кода нарушится работа твоей команды.

Software Development Engineer II (SDE II) – один-три проекта большой сложности, с требованиями к интеграции с другими продуктами и системами, с документацией и SLA, в случае проблем с проектами пострадает твоя команда и 2-3 команды, что работает с тобой.

Senior Software Development Engineer (Senior SDE) – проекты наивысшей сложности, требующие большой ответственности, быстрого реагирования, повышенные требования к интеграции и к стабильности, в случае багов в коде может остановиться работа в 10 и больше командах. Обычно Senior SDE занимаются целым направлением и довольно автономны в том, что и как они делают.

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

По контракту ты должен работать 40 часов в неделю. Однако это время не учитывается напрямую, просто объем твоих задач и ожидаемые от тебя результаты определяются менеджером исходя из такой загрузки. Я обычно уже около 9 утра нахожусь на рабочем месте, потратив около часа чтобы добраться до работы на поезде и шаттле (см. предыдущие посты), однако большинство моих коллег приходит лишь к 11 часам – они просто работают с 9 до 11 из дома, избегая тем самым пробку по дороге на работу, и с 8-9 утра их можно видеть онлайн и даже позвонить им по Сайпу, если нужно. Часто и после 9 вечера вся команда встречается снова онлайн, бывает что-то срочное и можно быстро обсудить и в случае необходимости даже быстро что-то запрограммировать (баг, какое-то маленькое расширение и прочее).

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

Нет формальных требований к одежде, а также к пребыванию в офисе. Ты можешь одеваться как тебе удобнее (в рамках приличий) и можешь работать из дома, если ты так хочешь или если тебе это необходимо. В моем случае 90% тех, с кем я работаю, находится все-равно либо в Сиэтле, либо в Индии, поэтому совершенно не важно откуда я говорю – из своего офиса в Sunnyvale или из дома. Однако ожидается, что ты будешь доступен онлайн (через внутреннюю систему коммуникаций, построенную на Skype for Business решении) – то есть в окне пользователей около твоего имени будет гореть зеленый огонёк, показывающий, что ты в данный момент находишься у компьютера – примерно с 10-11 утра до 5-6 вечера.

Если ты вынужден прийти на работу позже, сделать паузу, чтобы сходить к врачу или в какое-то учреждение, уйти пораньше, или просто хочешь сегодня работать из дома, то важно до начала рабочего дня прислать короткое письмо менеджеру и команде, где ты об этом пишешь. Объяснять причину в нашей команде не нужно, достаточно просто сказать буду к 12 часам или работаю из дома, с10 до 12 буду в клинике делать прививки и все. За все время работы никаких документальных подтверждений того, был ли я в клинике, от меня никто не просил, хотя в больнице каждый раз формально спрашивают – вам нужно подтверждение для работы – и я каждый раз его беру (раз дают).

За этой большой свободой, однако, стоит и большая ответственность. К примеру, недавно у нас администраторами было сделано некоторое изменение в групповых политиках. Это изменение привело к тому, что часть серверов перестала быть видимой в локальной сети, что привело к нарушению работы порядка 40 из 80 наших серверов. К сожалению, проблема была замечена одним и пользователей только ближе к вечеру, по крайней мере именно в 9 часов я получил письмо с проблемой. Пользователь сначала пытался решить проблему сам (он сам старший разработчик, пользователем для меня он является только в контексте того, что он использует нашу систему для своих задач), и он даже смог решить ее для своего компьютера, но из-за небольшого бага все-таки был вынужден обратиться ко мне, как ответственному за работу всей системы. В результате с 10 вечера (когда я добрался до компьютера и смог войти в систему) до примерно двух часов ночи, когда я написал автоматический скрипт, анализирующий проблему на каждой из наших машин и переписывающий ряд конфигураций для того, чтобы решить эту проблему, мне пришлось работать внепланово. Подобного рода проблемы случаются обычно раз в 2-3 месяца, один раз мне даже пришлось проработать всю ночь и лишь в 6 утра я смог немного поспать перед новым рабочим днем. Зато пользователи, пришедшие на работу к 8-9 утра, могли работать без проблем и практически не заметили нарушения работы системы, что длилось почти 12 часов…

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

Обычно раз в неделю менеджер неформально приходит к тебе в офис, чтобы спросить тебя о том, чем ты сейчас занимаешься и что примерно следует ожидать по итогам работы на этой неделе. Это не какое-то официальное мероприятие, и иногда оно длится просто секунд 20-30. Иногда же, бывает, ты сидишь по 4-5 часов с менеджером, защищая своё решение и обсуждая возможные за и против. При этом менеджер, если он предлагает какое-то решение, также старается технически обосновать свой выбор. Практически не бывает случаев, когда менеджер пытается навязать тебе решение без достаточного его обоснования и обоюдного согласия о том, что данное решение является лучшим. Однако даже это случается не часто, обычно предложенное тобой самим решение – если оно достаточно разумно и воплощаемо в жизнь – просто принимается без слов и критика идёт в основном деталей реализации или архитектуры.

Менеджер ни в коем случае не контролирует твою работу. То есть даже будучи на рабочем месте, ты не должен все время изображать бурную рабочую деятельность. Достаточно, чтобы ты решал поставленные перед тобой задачи в определенные сроки: то есть если задача стоит ASAP (as soon as possible), то предполагается что ты безотлагательно решаешь задачу пока е решишь. Но в большинстве случаев ты просто должен сделать что-то к концу месяца или недели. Поэтому сотрудники без проблем общаются из офиса по Скайпу с родными, совершают какие-то краткие поездки в магазин (если нужно), пишут что-то в социальные сети. Однажды я случайно открыл фейсбук (я там вообще редко бываю с работы, а тут просто ссылку прислали) и тут же зашел мой менеджер что-то обсудить. Увидев фейсбук, он сказал а, Алекс, я не знал что ты отдыхаешь и тут же вышел. Я даже ничего сказать не успел от неожиданности.

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

Кроме основного проекта есть возможность работать над хобби проектами. Для этого в один из дней недели (обычно вторник или среда) проходит так называемая SLC (Stay Late and Code, останься допоздна и программируй), где встречаются люди с хобби-проектами и вместе сидят, работая над проектами и помогая друг другу. Часто в начале таких встреч проходят короткие доклады на новые интересные темы, например, о трехмерной печати.

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

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

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

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

Вообще задача твоего менеджера – это стимулировать тебя работать лучше и качественнее. Это совсем не значит, что ты должен работать больше! Вовсе нет. Ты должен работать более охотно, ты должен быть сам более заинтересован в работе, чтобы, приходя на нее утром, у тебя не было необходимости раскачивать и думать ну вот опять надо делать Х, а вечером постоянно смотреть на часы и спешить домой. И достичь этого совсем не так просто.

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

Вот несколько примеров. Мы все по образованию инженеры-программисты, то есть в дипломе стоит что-то software engineer. Один из команды захотел специализировать в области data science (чем мы то, в принципе, как команда и занимаемся – только из нас напрямую никто этому и не учился). Вместе с менеджером они выбрали подходящий курс в Стенфорде (благо он тут под боком, но там можно и онлайн), и парень вот получает там уже второй сертификат и работает очень много в проектах, где требуется нетривиальный анализ данных (data mining, machine learning и прочее).

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

Кому-то просто дали в качестве рабочего лаптопа MacBook Pro и проекты, связанные с операционной системой от яблочной компании, и это было уже достаточным мотиватором, чтобы человек загорелся и стал работать еще больше, чем работал.

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

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

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

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

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

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

Это, казалось бы, простое испытание – просто забыть свои амбиции, свои оценки в ВУЗе, какой ты был крутой и сколько олимпиад или соревнований выиграл – и стать для начала простой рабочей лошадкой -- оно дается тоже не всем.

Я видел много разных историй успеха, и что удивительно, успешные люди спустя какое-то время становятся похожи друг на друга: успех как бы притягивает дальнейшие успех. Но вот путь до этого у многих отличается. Кому-то, как, например, Scott Guthrie, одна компания – это все что нужно для успеха. А кому-то, как Яну Куму (родившийся и выросший недалеко от Киева), нужно, чтобы тебя отверг Facebook (а твоего друга еще в придачу и Twitter), для того, чтобы создать собственную компанию и стать миллиардером.

=====================

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

Мне нравится американская традиция в длинных и запутанных докладах в конце формулировать кратко в виде одного предложения самый главный вывод. Этот вывод называется очень красиво take home message (сообщение, что Вам нужно взять домой). Так вот, take home message этого длинного текста очень прост: никогда, запомните, никогда не поздно стать хозяином своей судьбы, изменить себя и начать жить так, как Ты этого хочешь и как Тебе нравится. Это – высшая свобода, которую мы можем получить в этой жизни, и нет ничего ценнее в этой жизни, чем это.

(КОНЕЦ // The End)

Я беру небольшую паузу до сентября, чтобы вернуться с постами о том, что такое современная информатика и с какого бока правильно вгрызаться в этот кусок гранита: это самый частый вопрос, который мне задают и в комментариях, и в личной переписке. Ждите. Надеюсь, вам понравится. Изображение
Аватара пользователя
AAA
Сообщения: 40449
Зарегистрирован: 08 июл 2016, 23:04
Откуда: Москва
Контактная информация:

Сообщение AAA »

Очень радует что почти все рассияне программеры - бывшие спектрумисты. Это как школа жизхни в праграммировании. Жалко что сейчас на спектруме такие гандоны . Новое поколение спектрумистов ужасно:sq,marroz,introspec,nyuk. Жалкие надменные никчемные типы.
Аватара пользователя
shiny
Сообщения: 10498
Зарегистрирован: 22 дек 2016, 00:00
Откуда: в Шуе бал

Сообщение shiny »

nyuk тоже погромизд.
Ненависть- это подарок
Аватара пользователя
AAA
Сообщения: 40449
Зарегистрирован: 08 июл 2016, 23:04
Откуда: Москва
Контактная информация:

Сообщение AAA »

Шыншыл писал(а):
nyuk тоже погромизд.

Уничтожил запилятор и рад. А мир мучается. Славу сделал на уничтожении демо софта. Хороша слава. Ничего не скажешь. каждый как может. кто то творит, а кто то разрушает.

Изображение
Изображение
Аватара пользователя
shiny
Сообщения: 10498
Зарегистрирован: 22 дек 2016, 00:00
Откуда: в Шуе бал

Сообщение shiny »

в керосине много ссаки.
Ненависть- это подарок
Ответить