Андрей Артемьев, разработчик в Microsoft в Сиэтле, уже рассказывал dev.by о долгом пути в корпорацию. Его новый рассказ — о diversity and inclusion, перфекционизме, следующем поколении ОС Windows, исправленном десятилетнем баге, налогах и больших машинах.
«На вечеринке мужчина сказал коллеге, что она похожа на Бейонсе. Женщина возмутилась»
Для многих работа в Microsoft начинается в октябре с New Employee Orientation. Чем-то это похоже на первый день в пионерском лагере. Войдя в 92-е здание (в Microsoft около 200 зданий, 92-е — представительское), вы попадаете в квест: указатели ведут вас по точкам, где вы получаете бейдж и буклеты с важной информацией о работе, смотрите презентации и слушаете запись приветственного обращения главы компании Сатьи Наделлы. После этого менеджер отводит вас к рабочему месту, где уже ждут компьютер и символические подарки с символикой Microsoft.
Первые несколько дней работать почти невозможно, потому что ещё не вся система компании знает о новом сотруднике и потому не даёт права доступа к важным документам и ресурсам. Зато за это время можно установить необходимый софт, проект и посмотреть обучающие фильмы.
Обучающих фильмов много. Они на разные темы и для разных позиций. С их помощью компания доносит свою трудовую этику, культурный код, политику безопасности, правила поведения в типовых ситуациях. Они длятся от 20 до 40 минут, сняты очень качественно. Там есть драматургия, красивая картинка, актёрская игра — смотрятся легко. Мне запала в душу сцена с государственным служащим, который курировал проект Microsoft и был приглашён на празднование окончания проекта.
Фото с вечеринки утекли в сеть, и чиновник попал в центр скандала: уже в следующей сцене он оправдывается перед толпой журналистов с микрофонами.
На той же вечеринке кто-то решил неудачно подкатить к коллеге: сказал ей, что она похожа на Бейонсе и очень ему нравится. Женщина возмутилась. В конце фильма разъясняется, что компания бережёт репутацию своих партнёров, а сексуальные домогательства на работе недопустимы. Кстати, я со своей женой познакомился за пределами компании, хотя знаю пару, которая сблизилась на рабочем месте.
После каждой сцены появляется мини-тест, а в конце фильма надо впечатать своё имя в специальном поле — подписаться, что обязуешься выполнять правила компании. Каждый сотрудник знает, что нельзя ставить коллег в неловкое положение, обращая внимание на их плохое владение языком, половую ориентацию, религию, расу, национальность. Microsoft старается создать diversity and inclusion атмосферу в компании.
Дискриминация в США — больная тема. Если что-то не так, можно пожаловаться на специальном сайте. Если вопрос нельзя решить на уровне менеджера, будет разбираться специальная комиссия. Насколько мне известно, далеко не всегда такие разбирательства оборачиваются против ответчика, у них есть возможность отвести от себя обвинения. В общем, жалоба должна быть обоснованной.
«Здесь никто не смотрит, сколько часов в неделю ты отработал»
Какие качества ценятся в компании?
- Стойкость. Даже если всё валится из рук и ничего не получается, всё равно надо продолжать.
- Умение работать в команде. В одиночку вы будете разбираться с проектом очень долго, стоит обращаться за помощью к тем, кто хорош в данной области.
- Внимание к мелочам, перфекционизм. В ПО, которым пользуется небольшой круг людей, маловероятный негативный сценарий может быть простителен. Но если у вас 1,5 миллиарда пользователей со всего мира, то даже 0,01% ошибок будет весьма внушительной цифрой. Важно не просто исправить, а понять, почему код работает именно таким образом. Проблема может находиться уровнем ниже, или она может быть побочным эффектом более ранней ошибки. Любое изменение кода надо обязательно проверять, «комитить» в надежде, что «оно должно работать», очень опасно.
- Взгляд на перспективу, продумывание будущих изменений.
Результативность оценивается два раза в год, когда сотрудники заполняют Connect, в котором указывают, чем они занимались прошедший период, и обсуждают с менеджером результаты. Эти данные становятся основанием для повышения зарплаты и продвижения по карьерной лестнице.
Работа в компании хороша тем, что в центре находится программист. Все менеджеры Microsoft когда-то были программистами.
Раз в год компания проводит хакатон, на который приходит глава Microsoft. Самые интересные проекты получают необходимые ресурсы для реализации. Мой менеджер когда-то давно так получил ресурсы под свой проект с офлайн-картами. В отличие от белорусских компаний, в Microsoft много сотрудников, проработавших 15, 20, 25 лет, тут много разных проектов и всегда можно попробовать себя в чём-то. С недавних пор у нас появился ежемесячный Day of Learning: в этот день вместо работы можно изучать что угодно.
«В будущем стоит ожидать Windows Light — для тех, кому не нужна полноценная Windows»
Я работаю над следующим поколением ОС Windows, которое незаметно уже проникает в машины пользователей. Стек клавиатурного ввода — это моя стезя. До Windows 8 десктопная, мобильная и XBox версии были копиями основного репозитория и развивались сами по себе. Это создавало много проблем, потому что надо было добавлять функционал и исправлять ошибки сразу в трёх местах. Поэтому в какой-то момент появилась идея сделать единую базу кода, чтобы, когда отдел, занимающийся новыми гаджетами, выпускает новую платформу, допустим, умный браслет с функцией звонка, Microsoft просто компилировал код основной системы и через конфигурацию и добавление необходимых модулей (модуль телефонии, драйверы под браслет) быстро выпускал на рынок новый продукт, проверяя спрос.
На данный момент ядро Windows, включая API, программная модель приложений (UWP Apps) и графическая оболочка (CShell) по большей части унифицированы. В будущем стоит ожидать Windows Light — для тех, кому не нужна полноценная Windows. Там будет возможность запускать приложения в облаке и работать с ним как с запущенным локально. Кроме этого, появятся мобильные устройства, превращающиеся в полноценный ПК. Много всего интересного.
За почти четыре года я успел поработать над MS Edge, XBox, Windows Phone, Windows 10, WCOS (Windows Light), устранением потенциальных уязвимостей в win32kbase.sys и user32.dll. Сейчас я работаю над стеком ввода, и это достаточно сложная вещь. Как правило, периферийные устройства, такие, как мышь или клавиатура, работают по одному принципу: если есть электричество, то они в бесконечном цикле отправляют данные о своём состоянии с какой-то частотой, к примеру клавиатура отправляет 30-50 кадров в секунду, а игровые мышки могут выплёвывать по 3000.
Клавиатура отправляет массив из 256 байт с состоянием клавиш в формате HID, что, по сути, JSON от мира низкоуровневого программирования. Для меня всё начинается в режиме ядра в CSRSS.exe в модуле win32kbase.sys, когда данные о состоянии клавиатуры уже прошли Plug&Play Manager, отвечающий за регистрацию новых устройств и управление существующими, и распаковались из формата в понятную структуру данных KeyEvent.
Дальше будет длинный путь через предобработку (в настройках есть время нажатия одной клавиши), обновление состояния системы (лампочка Caps Lock, нажатые клавиши, таймер отключения монитора и пр.), вызов ловушек, читалку экрана, обработку системных горячих клавиш (WinKey+L’Arrow, Shiftx5, специальные возможности), упаковку в сообщение Windows, доставку активному окну, распаковку сообщения в GetMessage (уже User Mode), вызов ловушек приложения, отправку информации о нажатой клавише в CTFMON.exe, где живёт автокоррекция, автодополнение, Input Method Editors для азиатских языков (иероглифы могут составляться из нескольких клавиш), доставку клавиши приложению и корректировку результата в текстовом поле. К слову, видеоигры, отрисовывающие свои UI и консоль, используют эту функциональность через COM API.
Кто-то мог догадаться, что речь идёт об Text Services Framework, правда уже есть версия поновее. В некоторых случаях в этой цепочке участвует DWM.exe. Всё это написано на С/C++ и развивается вот уже 30 лет. Функции SendMessage/PostMessage в конечном счёте вызывают монстра на 11 000 строк с десятком аргументов, который и делает всю грязную работу.
Это очень сложная для понимания система, критичная к времени выполнения, отказоустойчивости. Она многопоточна/асинхронна и раскидана по нескольким процессам, между которыми надо поддерживать состояние. Вдобавок иногда встречаются ошибки, воспроизводящиеся лишь на одной машине, с какой-то уникальной конфигурацией настроек, языка ввода, программ или аппаратуры. Мне потребовалось время на то, чтобы осознать незаменимость WinDbg для подобной работы.
«Полное руководство по Windows — это книга в двух томах, 2000 страниц. Далеко не полное описание»
У меня есть два периода работы — исправление багов и реализация новой функциональности. Баги к нам могут приходить через Feedback Hub, который открывается через WinKey+F, чаще в виде неполных дампов памяти с пользовательских машин, если, к примеру, там BSOD или упал системный процесс. Тогда приходится восстанавливать картину произошедшего, ковырять код и в конечном счёте воспроизводить проблему.
Время от времени попадаются Race Conditions, тогда приходится детально вникать во всю систему, рисовать в Paint.Net взаимодействие компонентов и разбираться, как это могло произойти, потому что такие ошибки так просто не воспроизводятся. Иногда есть ошибки, вызванные медленной производительностью, из-за которой, к примеру, быстро заполняется очередь. Windows работает на разных аппаратных конфигурациях, с разными настройками (язык ввода, интерфейса) и разными состояниями системы (запущенные программы, отправленные сообщения и пр.), для отладки иногда приходится использовать уникальные машины, например, однажды такую машину нам прислали срочной почтой из Китая.
Самый сложный баг, который я исправил, существовал почти 10 лет, с 2006 года, и входил в топ-3 причин падения винды с BSOD.
Фикс занял полстрочки, но на него у меня ушло больше месяца, за это меня в своём письме отметил Corporate Vice President of Core OS Генри Сандерс.
Когда на горизонте появляется новая функциональность, прежде чем её реализовывать, разработчик должен провести исследование и составить Design Document. Этот документ будет рассмотрен на митинге со специалистами в данной и смежных областях.
Наиболее полное руководство по Windows — это книга Windows internals, которая существует в двух томах и суммарно составляет около 2000 страниц. Но это далеко не полное описание. Поэтому, когда тебе нужно разобраться в какой-то области, лучше всего спросить эксперта. Ну или почитать внутреннюю документацию. Только после этого можно приступать к разработке.
Авралы на работе случаются не так часто. Вообще по сравнению с работой в минских компаниях работа в Microsoft кажется достаточно медленной. Связано это отчасти с C/C++: полная перекомпиляция проекта может занимать 40 минут, а восстановление нерабочей ОС — минут 10. Также надо учитывать ювелирность работы: приходится вникать в код, перепроверять себя и просить разъяснения у коллег. Все изменения в ветку должны пройти через процесс Code Review, который производится в специальной программе MS Code Flow, она выглядит так.
Эта программа связана с репозиторием и позволяет оставлять комментарии к коду. Люди, приглашённые на код ревью, должны одобрить его. Только после этого изменения уходят в ветку.
Разрабатывая приложение под какую-то платформу, вы можете исходить из того, что она работает правильно, а все ошибки в компиляторе и операционной системе — это ваших рук дело. Однако когда вы пользуетесь Windows, которую сами же и разрабатываете, приходится принимать во внимание, что что-то могло измениться в ОС. Когда над проектом работают тысячи человек (больше 10 000 точно) и в день происходят тысячи изменений, очень остро встаёт вопрос обеспечения качества.
Главными мерами являются ежедневные билды и система веток. По билдам можно очень быстро определить дату появления ошибки, правда не всегда, так как спустя какое-то время они удаляются.
По иерархии веток можно локализовать регрессию. На самом верху находится то, что пойдёт в релиз, от этого узла расходятся копии на подразделения, эти узлы делятся ещё, а те ещё и ещё, до уровня веток отдельных команд, в которые и уходят все изменения. Через какое-то время происходит синхронизация родительского узла с дочерними и дочерних с родительскими, и таким образом изменения с самого низа доходят до релиза, расползаясь по всем веткам.
Сотрудники компании сами пользуются своими ветками на рабочих машинах, так что многие регрессии находятся очень быстро. Плюс компания выдаёт устройства для собственного использования, на которых крутятся рабочие версии. Если регрессия дойдёт до верхних уровней, то в баге придётся указать, как она была допущена. Я, например, не знал, что в еврейской клавиатуре CapsLock меняет значение некоторых клавиш, а не переводит в верхний регистр, потому на XBox появилась регрессия, которая не позволяла ввести «?» на экранной клавиатуре.
На рабочей машине лучше не хранить ничего важного, потому как время от времени софт на ней приходится переустанавливать заново. Мой коллега рассказывает забавную историю: когда он разбирался с эксплоитом анимированных курсоров, ему позвонили из специальной службы и сообщили о странной активности на его машине, поэтому он должен был немедленно снести всё ПО и переустановить. Коллега попытался объяснить, что контролирует ситуацию, в ответ ему пригрозили увольнением в случае, если он немедленно не выполнит требования безопасности.
Работа на проекте — достаточно сложная, поэтому часто приходится обращаться к коллегам, просить, чтобы они пояснили, как работает такая-то часть системы. Ну или открывать Paint.Net, создавать картинку 12000x12000 пикселей и рисовать взаимодействие компонентов самому.
«Задерживаясь на предыдущем уровне, сотрудник может получать даже больше, чем коллега уровнем выше»
В компании часто происходят перестановки, и это хорошая возможность продвинуться по карьерной лестнице. У программистов она состоит из уровней и ступеней. Ступень SDE I — 58-60 level, ступень SDE II — 61-62 level, cтупень Senior — 63-64 level, далее идут 65-67 уровни, но это уже очень высокие позиции. Я, как и большинство, начинал с 59-го уровня (SDE I — Software Development Engineer), сейчас я на 61-м, SDE II. Со ступени Senior ты не только программируешь, но и управляешь другими людьми.
Два главных фактора продвижения по карьерной лестнице — это impact and visibility, твоё влияние и заметность. На уровне SDE II учитывается главным образом качественный код, отсутствие регрессий, изучение предложенного коллегами дизайна и замечания/предложения по нему, а также помощь другим и участие в Code Review. Для перехода на следующий уровень нужно показать, что фактически ты уже работаешь на этом уровне.
Система такова, что, задерживаясь на предыдущем уровне, сотрудник может получать даже больше, чем коллега уровнем выше. Перехода на новый уровень может и не быть, так как человек, например, не хочет брать на себя новые обязанности, но материально он от этого не страдает. Зарплата повышается каждый год, плюс есть финансовые бонусы. Но говорить о конкретных цифрах смысла нет, потому что статьи расходов и стоимость жизни тут совершенно другие. Сказочки про немецких пенсионеров, которые на пенсию в 2 000 евро путешествуют по всему миру, и уборщиков McDonald’s с зарплатой в 3 000 долларов, арендующих дом с прислугой, оставим мечтателям. На старте денег достаточно, стартовых бонусов и компенсации за переезд хватит, чтобы обосноваться, я так купил своё первое авто.
Зарплатный потолок — очень высокий, о нём можно судить по машинам, частным самолётам и большим домам бывалых сотрудников. В Microsoft не самые высокие зарплаты, но в окрестностях Сиэтла есть также Amazon, Google, Facebook, SpaceX, Boeing, Oracle, Apple, Nintendo, Valve, VMWare, Expedia, Intel, Adobe, а также куча стартапов разного калибра, часто состоящих из бывших сотрудников Microsoft Amazon, такие, как BrightMachines, и другие.
США — пожалуй, единственная в мире капиталистическая страна. Это значит, что государство берёт на себя минимум обязательств, но за счёт низких налогов оставляет вам деньги и возможность самому позаботиться о своей пенсии, медобслуживании и образовании. В странах с социалистической экономикой, таких, как Германия, Швеция, Россия, Беларусь, государство прямо и косвенно забирает 50-70% зарплаты, которые направляет потом на бесплатную медицину, пенсию, образование, льготное жильё и прочие социальные проекты. В американском же налоговом кодексе только 30 страниц из шести тысяч — про повышение налогов, а остальное — про то, как сделать так, чтобы платить меньше.
Законно платить 0 долларов налогов — это тоже акт патриотизма, ведь ты выполнил все требования государства. Сдаёшь в аренду жилой дом, инвестируешь в нефть и газ, открываешь бизнес и создаёшь рабочие места, теряешь деньги на инвестициях — можешь какую-то часть расходов списать с налогов. Государство не хочет заниматься проблемами жилья и трудоустройства и поэтому отдаёт их частной инициативе, поощряя жителей быть проактивными.
«Не удивляйтесь, если на следующий день вас удалят из друзей»
Как устроен быт в Microsoft? Компания предоставляет халявную газировку — холодильники с ней стоят на всех этажах. Для тех, кто проголодался, есть множество кафе и фудкортов, самый большой из них находится в Microsoft Commons. По сути, это культурный центр компании, так как по выходным там собираются поиграть в мафию и настольные игры.
В Microsoft — около 200 зданий, для передвижения между ними есть автобусы, маршрутки и такси. За графиком работы никто не следит, надо только приходить на митинги и быть в офисе в то же время, что и нужные тебе люди.
В некоторых командах есть такая штука, как on-call. Тебе выдают пейджер, и, если он прозвенел, в течение трёх часов ты должен приступить к решению проблемы, но в нашей команде такого нет.
Ходят слухи, что будущее за опенспейсом, но пока мы ютимся в кабинетах на одного, двух, трёх и более человек, некоторые комнаты сотрудники обставляют по-домашнему.
В некоторых командах по пятницам вечером люди собираются в офисе, чтобы выпить пива и поиграть в игры на приставке, во время таких мероприятий можно завести новые знакомства. Вообще-то люди в Сиэтле необщительные, даже есть такое понятие, как Seattle freeze, оно основывается на общепринятом убеждении, что в Сиэтле трудно найти друзей и поддерживать отношения, так как тобой никто не интересуется. Не удивляйтесь, если вы «зафрендитесь», а на следующий день вас удалят из друзей или просто уйдут от вас во время общения. Здесь это норма.
За пределами ИТ мир розовых единорогов и радуги заканчивается, там полно людей, которые пытаются вам что-то впарить, будь то автомобиль подороже или стрёмная бизнес-идея. Поэтому надо расчищать своё окружение, включая людей и подписки на YouTube-каналы. Seattle freeze в умеренных дозах — это даже хорошо. Здесь лучше особо не распространяться, что работаешь в Microsoft. Некоторые автосалоны предоставляют скидки сотрудникам компании, но если отъехать от Редмонда и Сиэтла подальше и умолчать про место работы, то сможете выторговать скидку побольше. Вообще в США надо не бояться отстаивать свои права, когда надо, говорить «нет», звать менеджера и торговаться.
В огромной Америке только 10 городов-миллионников, большая часть страны — это маленькие городки с одно-двухэтажной застройкой. Сиэтл с населением в 700 000 человек плюс пригороды и прилегающие города находится на 21-м месте, поэтому социальная и культурная жизнь здесь не такая яркая, как в Минске. Через полгода жизни в Сиэтле, когда острота первых впечатлений спала, я стал подумывать о переезде в Нью-Йорк, потому что там больше движухи и культурной жизни, к тому же русская община более обширна. Со временем я привык к этой размеренной жизни и уже с трудом представляю себя в таких мегаполисах, как Минск.
Воображение человека, выросшего на белорусских равнинах, природа штата Вашингтон потрясает: гигантские горы, Тихий океан, тундры, пещеры, тянущиеся на многие мили, дикие дождевые леса, богатая фауна — орлы, медведи, пумы, рыси, волки, койоты, совы, еноты, олени, касатки, морские котики, киты. Вся эта живность иногда приходит к людям, поэтому домашних животных люди не выпускают гулять одних, иначе ими может кто-нибудь полакомиться.
Машины — моя слабость, и Америка как нельзя лучше подходит для автолюбителей. Бескрайние просторы, покрытые ровной бетонкой, с множеством ресторанов, мотелей и живописных мест. Для любителей скорости — гоночные трассы, для искателей приключений — извилистые горные гравийки, а для самых отчаянных экстремалов — каменистые массивы и отвесные скалы, по которым можно карабкаться на прокачанном внедорожнике.
Напрокат можно взять классическую Toyota FJ Cruiser c автоблокировками, новый Challenger Hellcat с механикой мощностью 700 л. с., Lambo Hurricane Twin Turbo V10 AWD на 1000 л. с. и ещё много чего. 700 л. с. — это прошлый век, сейчас мода раздувать уличные машины до 2 000 — 3 000 л. с., V8 на 1 000+ л. с. не удивляет. После Америки белорусский автопарк может меня удивить только самоделками и продуманным тюнингом. Тут у людей выработался вкус на авто, в то время как в Минске нередко покупают просто большие, экономные или броские машины, что есть проявление безвкусицы.
На что тратить своё время — вопрос философский, Америка — современный Вавилон, вершина мира. Почти все мировые знаменитости живут здесь, их можно встретить на многочисленных мероприятиях. Здесь есть все возможности для реализации себя.
Я доволен своей работой в Microsoft и жизнью в Штатах и нисколько не жалею о затраченных усилиях. Иногда взгрустнёшь о родных местах, близких и друзьях, но это — жизнь, в одну реку не войдёшь дважды. Оглядываясь назад, понимаю, что можно желать большего и действовать эффективнее.
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.