Статті про мою професійну кар’єру на ДОУ

ДОУ, або вірніше dou.ua – сайт на якому спілкуються українські програмісти. Сайт переважно має популярними не технічні дискусії – життя в Україні та за кордоном, нескінченні баталії про те де і чому краще, як і які товари та послуги треба споживати та інші в прямому сенсі срачі. Але звісно і технічних статей вистачає. Проте коли теми як “Нища Європа” про те як важко жити в ЄС миттєво збирають тисячі коментарів, якісь технічні теми добре якщо набирають сотні.

Якийсь час тому зі мною зв’язалася представниця сайту і запропонувала викласти історію про те як потрапив у програмування та який у мене професійний досвід був. Проходило це в форматі коли я у вільній формі розповідав свою історію, а журналістка лише спрямовувала мене питаннями. Уся розмова в дві сесії зайняла приблизно 2.5 години.

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

Про зарплатню та інші прибутки

Вступ

Часто при обговорені зарплат за кордоном на українських форумах звучить фраза що “зарплатня це ще не все”, але що вона означає не всі знають і розуміють. Далі я спробую як умію коротко описати які ще види прибутків існують окрім зарплатні.

Отже поїхали.

Базова зарплатня

Це сума до податків за рік. Сума залежить від географічного місцезнаходження: скажімо Senior Software Developer може розраховувати на зарплатню від 150 тисяч на рік у Каліфорнії, або від 130 у Сіетлі. Така різниця обумовлена вартістю життя: ціни на житло, зручність транспотру, тощо.

Звісно також впливає набір вмінь (у випадку програмістів це досвід, знання інструментів та технологій) та інші досягнення.

Але треба враховувати що це сума до податків. В США податки кожен платить сам за себе і сума залежить від складу і сумарного доходу родини, зроблених покупок та інвестицій, хвороб та госпіталізації і іншого. Ось тут трохи розписував – Про виплату податків в США.

Додаткове читання – Рівні і зарплатня в МС.

ESPP

Employee Stock Purchase Plan, або Програма Купівлі Акцій для Працівників. Суть цієї програм в тому що працівникам компанії дають можливість купувати акції компанції за ціною нижче за ринкову.

Працівник всказує відсоток своєї зарпланті яку хоче відкладати на цей план, гроші накопичують і раз у період (квартал чи пів-року, наприклад) компанія купує від імені працівника свої акції. В Microsoft наскільки я пам’ятаю можна було до 5% заплатні відкладати і акції купували на 10% дешевше за рикову ціну на день купівлі. Тобто можна було одразу їх автоматично продавати і отримувати плюс скількись відсотків до зарплатні (мінус податок за прибуток). В GoDaddy можна відкладати до 15% зарплатні і продають нам за нижчою з двох цін: на початок і кінець періоду накопичення.

Тут також треба зауважити що у торгівлі акціями (і не лише для цієї програми) є суттєві обмеження для людей які приймають рішення, або мають знання про продукти які готуються на ринок. Справа в тому що ці люди мають незагально доступні знання, а значить і перевагу завдяки цьому, а це протирічіть законодавству. В результаті якщо вам “пощастило” працювати у групі яка має доступ до такої інформації то для вас спеціально і для членів вашої родини буде виділено пару днів на рік коли ви зможете купити чи продати акції компанії. А у вищого керівництва у більшості випадків можливість продати свої акції з’являється лише після того як вони залишають роботу.

Опціони

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

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

Але розглянемо випадок коли акції таки почали торгуватися. Працівнику дають певну суму (читай нижче про “золоті кайдани”), наприклад 5 тисяч акцій по ціні 15 доларів за акцію. Якщо на момент отримання усих акцій ціна їх складала 20 доларів то стається наступне. По-перше, доступні акції “забрати” у компанії (називається “завестити”). Це буде прибуток (5000 * 15) з якого треба буде заплатити податок. Потім акції можна продати за 20 кожну і це вже заробіток (5000 * 5) з якого теж треба буде заплатити вже інший податок. Відповідно ціна опціона для кожного індивідуальна і люди навіть з однаковою зарплатнею і однаковим обсягом опціонів можуть в результаті мати різні суми: комусь дали опціон по 5 доларів, а комусь по 15.

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

Обмежені акції

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

Пенсійний план

В США він має назву 401k. Треба також сказати що якщо ви хочете отримувати пенсію в США і не працюєте на уряд то вам доведеться самому собі на пенсію відкладати. Для цього існує спеціальний фонд куди відкладаються гроші до податків. А після 65 років можна почати їх отримувати назад у вигляді щомісячних виплат. Скільки саме будуть виплати залежить від того скіьки було накопичено.

Так ось компанії можуть робити так зване “парування”, наприклад: перший відсоток відрахувань з зарплатні компанія подвоює, а для наступних 4 додає половину. Таким чином ви відраховуєте у фонд 5% зарплатні (повторю що до податків), і компанія туди ж вам додає ще 3% (1% + 4 * 0.5%).

Але не усе так райдужно – є максимальне обмеження на виплати у пенсійний фонд на рік і не вийде кілька останніх років перед пенсією накидати туди грошей і потім жити з виплат. Щоб мати хорошу пенсію треба з молодого віку відраховувати гроші туди.

Бонус

Бонус (премія по нашому) дається як правило по результатам перформанс рев’ю (оцінки досягнень) раз на рік коли для кожного порівнюється план роботи і що було реально досягнено, а потім люди виставляються по рангу: комусь велику премію і наступну сходинку в ієрархії, більшості середню премію, а деяких взагалі з роботи виганяють.

Бонус дається комбінацією грошей і акцій (опціонів та обмежених акцій) і як правило виплата розтягується на кілька років.

“Золоті кайдани”

Таку назву отримала ситуація коли у працівника багато премій (акцій та грошей), але їх виплата відбудеться у наступні роки. Як правило усі премії не видають одразу а розтягують: грошову премію можуть виплатити по 50% за два роки, акції дають порціями 5 років по 5% на квартал. Відповідно після кількох років роботи, особливо якщо кілька з них були вдалими у майбутньому такого працівника може накопичуватися до кількох десятків тисяч.

От тому це і називається “кайданами” –  коли йдеш з компанії то втрачаєш усі майбутні виплати за кілька років. І люди через це мучаються, але не наважуються змінити компанію навіть якщо робота вже що називається дістала.

Оплачувана відпустка

Взагалі в США гарантована оплачувана відпустка за законом – 0 днів. Але звісно компанії мають кожна свою власну політику стосовно цього питання.

Наприклад у Microsoft давали здається 15 робочих днів відпустки, пару днів лікарняних і ще пару “плаваючих свят”. Тобто виходило 4 тижні. Після 5 років роботи кількість днів зростала до 5 тижнів, але вже мало хто з тих хто залишився в компанії так довго вибирав усю відпустку: більше роботи і більше відповідальності робили свою справу. Після 10 років здається можна було брати 6 тижнів.

В GoDaddy кількість відпусткних днів не обмежена, але звісно треба зарані (за 2-3 тижні) узгодити дати зі своїм керівником. Такий підхід переймають все більше компаній – дослідження показують що люди відповідальніше ставляться до днів відпустки і насправді витрачають на неї менше днів.

Саббатікал

Інша форма відпустки яка практикується лише як правило для найвищих рівнів праціників – компанія надає тривалу відпустку (від пів-року і довше) зі збереженням робочого місця, а часто і зі збереженням зарплатні чи відстоку від неї. Така відпустка надається раз на життя і люди як правило беруть її щоб подоружувати, написати книгу, завершити наукову роботу і таке інше.

Страховка

Треба розуміти що медична, зубна та страховка на зір це не пов’язані між собою речі. В страховках важливо те яка сума покривається, після якої суми паціент взагалі не платить нічого та так звані ко-платежі: наприклад з моєю поточною страховкою я плачу за кожен візит до доктора фіксовану суму (скажімо 70 доларів), а усе інше скільки б там не було покривається страховкою.

Треба сказати що у Microsoft не лише найкраща в індустрії страховка, але і одна з найкращих в США взагалі і у плані покриття і тому що компанія дає страховку на усіх членів родини. В GoDaddy страховка є лише на працівника, а от за Олену ми платимо додатково (це може бути 300-500 доларів на місяць).

Про зубну страховку ще трохи тут – Американська стоматологія.

Різні дрібниці

Їжа на роботі

Якщо компанія годує обідами або безкоштовно (в GODaddy це 4 рази на тиждень безкоштовно – доставка з ресторанів), або частоково покриває вартість обіду (в столових Microsoft можна нормально пообідати за 5-8 доларів при повній ціні також обіду 15-20 доларів) така “благодійність” виливається у кілька тисяч додатково зекономлених за рік.

Також треба враховувати усі ті холодильники з безкоштовними напоями, чаї та кави. Дещо додатково можна почитати тут – Їжа в Microsoft та Microsoft: автомати з газіровкою.

Спортклуб та програми здоров’я

Тут все просто – компанії зацікавлені щоб працівники були здорові і іноді частково оплачують (називається “спонсорують”) членство у спортклубі. Якщо ви, а ще краще уся ваша родина регулярно ходите у клуб то така приємна підтримка дозволить зекономи від 60 доларів на місяць на члена родини. Дещо почитати можна тут – Про наший спортклуб.

Транспортування

Чим більша компанція і місто в якій вона розташована тим більшою стає проблема добиратися на роботу і додому – трафік займає час, з’являється залежність від машини, тощо. Деякі компанії надають сервіс “шатлів” (міні- або нормальні автобуси) що курсують певними маршрутами і розвозять працівників. У Microsoft так взагалі свій вокзал, автобуси у різні міста, маршрути мікроавтобусів між корпусами та безкоштовні індивідуальні таксі.

Іншим приємним бонусом може стати картка сплати місцевого транспорту яка поповнюється компанією.

 

 

На цьому все, з часом, якщо будуть питання щось допишу та/або виправлю.

Чим я займався в Windows Phone, або Windows Update

З квітня 2012 по лютий 2014 я працював у Windows Phone в команді яка називалася Device Update. В цілому я пережив 2 великі реорги (це коли перетасовують структуру команд і продуктів щоб оптимізувати взаємодію), але весь час моя команда була частиною того що умовно можна назвати командою ядра Windows Phone. Організаційно моя команда була споріднена з наступними:

  • Core – команда яка займалася тим що вирізала все що можна з ядра Windows 8 і намагалася це примусити працювати на телефонах. Також в їх задачі входило примусити працювати, або знайти чому не працюють драйвери від сторонніх виробників таких якQualcomm.
  • Security – на телефоні кожна програма що не є частиною ОС працює в своїй жорстко обмеженій пісочниці і не те що не має доступу, але навіть і не бачить ресурси (файли, диск, пам’ять, реєстр, мережа, …) крім тих про які їй дозволено знати. Система безпеки телефону не покладається на механізми десктопної Windows, а по суті заміняє її. Це необхідно тому що вимоги до програм на смартфоні абсолютно інші ніж до десктопних програм.
  • Network and Drivers – на телефоні свій стек протоколів для WiFi, Bluetooth і усього іншого, але виглядає це як частина ОС.
  • Device Update – моя команда яка відповідала за оновлення на телефоні що рештою дівізіона сприймалося як частина ОС.

Ще в Windows Phone існують такі великі команди як UI, Developers Platform, Services та інші.

Тепер невеличкий відступ про механізми Windows Update. Технологія ця існує доволі давно і добре обкатана в самій ОС, а відносно недавно і інші продукти почали оновлюватися використовуючи цей механізм. Але важливо не плутати з механізмом оновлення програм з магазину – це зовсім інша сутність ніяк не пов’язана з ОС.

Працює Windows Update приблизно так:

  • клієнт питає у сервера щось типу “що в тебе є для категорії Windows/Windows Phone/XBox/Office/…”. Сервер повертає список версій: Windows 6, 6.1, 6.2 і так далі.
  • Клієнт каже “о, а я Windows 6.2, що там у тебе є для мене?”. До речі оте 6.2 це версія ядра ОС.
  • Сервер повертає список так званих детектоідів. Це такі логічні умови типу “значення ось цього ключа в реєстрі знаходиться між A та B”, або “версія ось такої DLL дорівнює ХХХ”, або “мова встановленна в українську”. Ну ви зрозуміли. Причому умови можуть бути які завгодно, а їх перевірку виконують так звані провайдери що реєструються на клієнті. Є провайдери для файлів, ресурсів (версія ОС, розв’язок екрану, версія драйверів), реєстру і інші. Таким чином клієнт не має уявлення як перевіряти детектоїди і що вони означають, а просто викликає відповідні провайдери. Імена детекоідів містять провайдерів, щось типу “./system/hardware/monitors/1/resolution/width”.
  • Для тих детектоідів умова яких істинна серверу повертаються ідентифікатори, а сервер повідомляє які файли відповідають цим детекоідам.
  • Клієнт викачує файли і робить з ними що хоче. Зверніть увагу що ні формат файлів ні що з ними робити протокол не диктує.
    Насправді там може бути кілька рівнів категорій і детектоідів, детектоіди можуть мати складні і навіть вкладені умови, один файл може бути пов’язаний з кількома детектоідами і таке інше. Але суть думаю зрозуміла.
    До речі коли ви встановлюєте Windows ваша машина отримує випадковий номер від 1 до 100 що використовується виключно механізмом оновлення. Коли ОС за розкладом перевіряє оновлення вона повідомляє серверу цей номер і той може сказати “у мене для тебе нічого нема”. Це зроблено для того щоб зменшити наватнаження на сервер який щодня без перебільшень смикають сотні мільйонів клієнтів. Також це дозволяє перевіряти оновлення на мешній аудиторії, скажімо перший тиждень віддавати його лише 1% користувачів. А от коли ви заходите в Панель Управління і натикаєте “Шукати оновлення” там то ваша ОС каже серверу “кажи що в тебе є і не дивись на мій номер”.

Коли було прийнято рішення оновлення Windows Phone зробити доступними за допомогою Windows Update (це дозволило уникнути реалізації серверної частини та деяких інструментів) то виникло кілька проблем специфічних для смартфонів, деякі з них:

  • через те що батарею треба економити не можна постійно тримати у пам’яті процес яки лише раз на кілька днів буде перевіряти чи є на сервері оновлення.
  • для зменшення трафіку дерево категорій та детекоідів має бути нижчим, але ширшим.
  • файли не мають бути надто великими щоб у випадку поганого зв’язку не качати заново один і той же файл знову і знову. Ні, докачувати не можна, а чому – залишу вам як домашню вправу для самостійних роздумів Smile Підкажу лише що весь сеанс від першого звернення до серверу до завершення розпакувування останнього файлу має бути транзакційним.
  • через обмеження пам’яті не можна скажімо розпакувати нову версію DLL і почати її використувавати для нових процесів в той час як старі використовують стару версію.
  • через обмеження дискового простору не можна розпакувати оновлення і чекати до наступного перезавантаження телефону щоб замінити ними старі файли.

Із секретів можу сказати таке що на смартфоні (і не лише Windows Phone) встановленно дві ОС, одна спеціально для того щоб встановлювати оновлення на іншу. Тобто зі сторони пристрою процес виглядає приблизно так:

  1. Знайти і викачати оновлення на сервері
  2. Запропонувати користувачу встановити їх
  3. Розпакувати оновлення (по суті це не нові файли, а лише те що треба змінити в існуючих)
  4. Перезавантажити телефон в другу ОС
  5. Пропатчити оновленнями файли на робочій ОС (на тому диску де встановлено робочу ОС)
  6. Перезавантажити телефон в робочу ОС
  7. В процесі завантаження виконати програми що зареєструвалися як мігратори даних зі старої версії в нову

До речі Apple так і не подужала зробити нормальні оновлення для iPhone і користувачі тупо викачують імідж (тобто цілий знімок диску) робочої ОС. Для цього їм треба тримати порожнім місце розміром таке саме як диск робочої ОС.

Із секретів можу сказати що функція “повернути до заводських настроєк” не відновлює оригінальні версії файлів, а просто стирає все з диска на якому зберігаються настройки і файли користувача, а робоча ОС залишається без змін. Таким чином якщо ви встановили хоч одне оновлення то повернути телефон у справді заводські настройки можна лише повною його перепрошивкою. Алетернативою було б мати ще один диск з оригіналами файлів, але на це ніхто з виробників не піде – робити пристрій дорожче заради сумнівної користі…

Одна з переваг переводу Windows Phone на Windows Update полягає в тому що теоретично (нижче детальніше чому теоретично) можна викладати оновлення коли Mictrosoft має їх готовими та протестованими. Десктопна Windows так і робить. Але у світі мобільного зв’язку волю диктують оператори. Жоден оператор не погодиться продавати телефони якщо вони не зможуть контролювати що саме на них встановлюється. Саме тому Microsoft не може самовільно робити доступними навіть критичні оновлення. Кожне оновлення має детекоід “оператор має бути Х”. Apple диктує свою волю операторам, у них інша ситуація. Що стосується Android то там шаленна фрагментація ринку і ніхто не зацікавлений робити доступними оновлення, краще продавати телефони з оновленою ОС і тому Google віддала оновлення на відкуп операторам та виробникам телефонів. Тобто вони їх звісно роблять, але публікацією не займаються, кому цікаво той сам робить оновлення доступними.

Я особисто вважаю що Microsoft має найвдалішу модель оновлень, але нажаль ситуація на ринку не дозволяє її задіяти.

А тепер зі сторони того хто публікує оновлення, звісно теж не всі особливості:

  • треба визначити між якими версіями мають існувати оновлення. Якщо для Windows нормально мати ланцюжок 1 оновлюється в 2, 2 оновлюється в 3 і так далі та ще й з перевантаженнями між оновленнями то для телефонів це не підходить: забагато викачувати, та і клієнти викинуть телефон якщо той почне перезавантажуватися кілька разів. Тому якщо вже опублікували оновлення з 1 до 2 то треба буде публікувати і 1 в 3 та 2 в 3. Ну і так далі.
  • після того як готова чергова версія (наприклад щоденний білд) треба не просто згенерувати оновлення для усих існуючих версій, але і розуміти які оновлення для чого та якось їх ділити на пакети. Наприклад у телефонів на відміну від десктопів розв’язок екрану фіксований, а тому оновлення для 600х800 та 600х1024 треба публікувати як окремі навіть якщо це єдине чим вони різняться. Додайте сюди мови (інтрефейсу, клавіатури, голосу і так далі), країну і ще багато всього і раптом з одного білда у вас виникає оновлень на кілька гігабайт.
  • до речі клавіатура (та деякі подібні речі) дуже цікавий приклад. Оновлення усіх можливих мов клавіатури ставити на кожен телефон не має ніякого сенсу, а коли користувач додає собі скажімо українську клавіатуру то її можна встановити лише з повної версії файлу, а не з патчу. Таким чином деякі оновлення містять як нові версії так і оновлення і використання того чи іншого визначається складними умовами.
  • оскільки смартфони захищені доволі серйозно то все що публікується має бути пошифровано і захищено сертифікатом який періодично закінчується (доволі часто).

Тепер подумає які ще є особливості в публікуванні оновлення. Скажімо MIcrosoft має нову версію до якої хоче обновити телефони. Будується імідж з якого виробники, наприклад Nokia, вибирають для кожної моделі саме те що їх цікавить. Десь не потрібна фронтальна камера, десь NFC, десь контроль трафіку, десь ще якісь фічі. Після тестування цієї версії виробник повертає імідж який вони модифікували і довопнили своїми компонентами. Тепер імідж треба підписати, згенерувати оновлення для попередніх версій і віддати операторам. Оператори вимагають гроші за тестування кожного оновлення (сотні тисяч долларів) і тому так часто як для десктопа виставляти оновлення не вийде. Власне з того що я бачив оновлення з’являються у доступі приблизно через рік після того як їх розробка завершена. Навіть зараз на наших Lumia 920 тa 1520 є не все що мав на своєму розробницькому телефоні 2 роки тому.

Так чим же займалася моя команада? А ось чим:

  • Інструменти які в процесі білду генерують оновлення для попередніх версій.
  • Публікація оновлень для усіх бранчів (їх було більше 150 на 2000 програмістів) теж в процесі білду. Таким чином розробники могли прошити свій телефон своїм бранчем і щоранку отримувати апдейти для нічного білда, або пропустити кілька днів і отримати апдейт що перестрибував кілька версій. Я в основному цим ось і займався.
  • на пристрої – частина що сканує, скачу і готовить оновлення
  • частина другої ОС що власне виконує оновлення
  • фреймворк для клієнтських міграторів данних

Ось, поки на цьому зупинюся. Хотів написати більше, але вже і так багато вийшло. Задавайте питання якщо є які.

Залишаю Microsoft

П’ятниця, 7 лютого мій останній день в МС. Передбачаю що у вас одразу виникнуть питання чому і куди далі? Чому я власне і спробую пояснити в цьому пості, а куди далі напишу якось згодом.

Перед тим як почати розказувати як я прийняв таке рішення хочу зауважити що в ставленні до роботи у програмістів (і ще деяких інших професій) та інших є суттєва відмінність. В той час як для більшості нормальних людей головне питання про роботу “скільки платять” і та робота краща де більше платять у програмістів логіка дещо марсіанська. Програмістам важливо щоб цікаво, щоб щось нове вчити, щоб складні задачі, щоб з розумними людьми працювати, щоб займатися речами які важать для людства чи якоїсь галузі і ще купа таких же нераціональних і незрозумілих широкому загалу мотивів.

В США з цим трошки легше оскільки дітей виховують в дусі “знайди себе у житті”, “знайди чим тобі хочеться займатися і що буде приносити задоволення”, “почни свій власний бізнес”. І хоча люди розуміють важливість щоденного задоволення від роботи і другорядність рівня оплати все ж таки з різних причин і в США не всі можуть собі дозволити просто так міняти роботу. Ну а про Україну я взагалі не кажу.

Ну ось я і опинився в такій ситуації коли “не цікаво”. Роботи дуже багато, практично щодня люди працюють 10+ годин, часто доводиться і на вихидних працювати. Робота дійсно потрібна і має велике значення і для команди і для всієї організації (Windows Phone) і для продукту. Але це не та робота яку б я хотів робити, той досвід який я отримую це не той досвід який мені цікаво отримувати, а крім того дещо дістала мене система рев’ю (почитайте Рівні і зарплатня в МС).

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

Система ж рев’ю є окремою проблемою МС – всі знають що вона погана, але ніхто не знає як зробити краще. В результаті просто помирати на роботі не достатньо, треба дійсно любити те чим займаєшся і додатково робити якісь речі завдяки яким тебе будуть знати менеджери інших команд. Якщо просто заритися у свою роботу то постраждає річна оцінка, скажуть “може він і правда такий хороший як його менеджер розказує, але ми не знаємо про його існування, не знаємо що він робить і не розуміємо для чого його підвищувати чи взагалі тут тримати”. Ідея основна в тому що як людина не стрибає вище голови то може краще її і не тримати і на її місце посадити того хто таки буде стрибати.

Важко видавати екстраординарні результати коли те що робиш самому здається нудним Sad smile

Можна було б звісно пошукати іншу команду в МС, мене б особисто цікавили такі продукти як bing, SQL Server та Windows Azure. Але як подумав про весь процес: шукати відкриті позиції, зв’язуватися з лідами, розсилати відгуки від свого ліда за попередні роки, проходити всі ці формальні і неформальні інтерв’ю… Чесне слово легше ззовні потрапити в МС ніж поміняти команду вже працюючи в компанії. От я і подумав що власен нічого мені не заважає пошукати щось в світі за межами теплого океану МС Smile

Особливо активно я не шукав, десь із пів-року в пасивному режимі приймав запрошення від рекрутерів на LinkedIn та Monster, ходив на деякі співбесіди (так, про це теж напишу) і власне просто дивися на те що можна знайти. І ось нарешті знайлася компанія яка почала наполегливо зазивати мене до себе і після пройдених інтерв’ю та поїздок в головний офіс я почав думати які ж у мене далі перспективи і де я опинюсь.

Зараз, коли Windows, XBox та Windows Phone очолив колишній керівник Windows Phone очевидно що три огранізації будуть зливатися в одну і буде суттєва зміна структури компанії. Та ще і з новим керівником який працював у групах де девелопери та тестери не існують як класи, а натомість є інженери які відповідають за усе починаючи з дизайну і через імплементацію, тестування, деплоймент та підтримку достваляють фічі користувачам. Вже приблизно відомо чим буде займатися моя команда працюючи над наступним релізом і мені вкрай нецікаво залишатися в ній.

Крім того шість років це не такий вже і короткий термін, хоча і пролетіли вони як один день. І подумалося мені що непогано було б спробувати себе у іншій (і меншій набагато компанії).

Ще одна особливість МС як от щойно згадав в тому що люди мають “розблоковувати себе”. Це так завуальовано кажуть “піди туди не знаю куди і принеси те не знаю що”. Тобто є якась загальна задача, ну скажімо збирати статистику про кількість невдалих апедейтів телефону. Це означає що треба буде знайти команди які можуть надати дані про результат апдейту зі свого коду, людей які відповідають за збирання та надсилання репортів, зробити так щоб з’явилася БД в яку такі репорти потраплять, узгодити з власниками коду в які вносиш зміни усе що треба і так далі… В усьому цьому безпосередньо програмування добре якщо 10%, все інше це мітінги, узгодження, документація, зустрічі і нескінченні потоки е-мейлів.

Ви просто уявити собі не можете наскільки МС е-мейло-орієнтована компанія. Довжелезні треди, обговорення, мітинги, специфікації, … Сотні, а то і тисячі мейлів на день цілком буденна річ.

Ну от хочеться більше чисто програмерської роботи, хочеться писати та рефакторити код, дебажити та вишукувати помилки, обговорювати дизайн.

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

Коротше в один момент я просто зрозумів що просто прийшов час.

Після усього вищесказаного я тим не менш скажу що МС прекрасна компанія і я щиро порекомендую в ній працювати. Подібних масштабів в усьому світі ви більше ніде не знайдете – це і кількість працівників, це і технології та продукти де є все від ОС і заліза до інтернет-сервісів та комп’ютерних іграшок, це і неймовірно розумні та досвічені люди у яких можна вчитися нескінченно, це і усі культури світу і ще багато усього. І чесно кажучи я цілком можу повернутися назад через кілька років коли забуду про весь негатив і почну сумувати про старі часи у теплому дбайливому океані Microsoft.

Microsoft: автомати з газіровкою

Цей пост можна вважати доповненням до старого посту Їжа в Microsoft.

До речі хочу ще зауважити таку цікаву деталь щодо різних кока-кол: в США їх називають “сода” або “кола”. Це і буде аналог нашого “газіровка”.

Взагалі як я вже писав на кухнях стоять холидильники з різними колами, газованими напоями та молоком. Останнє ж віяння – автомати з газованою водою.

Хто бував у американських фаст-фудах (а хто не бував почитайте ще ось це – Фаст-фуд в США) той бачив такі машинки з кранами з різними напоями. Тобто на касі ти коли купуєш “колу” не уточнюючи що саме то отримуєш просто великий стакан. А потім з цим стаканом ходиш до автомату і наливаєш собі чого завгодно із запропонованого. Кількість походів не обмежена, ніхто не слідкує Smile І там же є спеціальна “педалька” для криги.

Ось подібні автомати, але набагато крутіші почали ставити і в МС. До цього чув що в деяких кафетеріях вони є, але ось їх встановили і в столовій того комплексу в якому я працюю.

Що ж там такого незвичного? Та власне вибір. Кожен з напоїв має основний смак і цілу купу варіацій про які я особисто ніколи і не чув. Як вам наприклад вишньова фанта без цукру? А мені сподобалася лаймова фанта (зелененька). Ну і змішувати гурманам ніхто не забороняє.

Ну і просто так. Машинки для кави. Теж стоять у кожній кухні. В моїй будівлі є по одній кухні на поверх і там стоять по 2 машини – старбакс та сіетл кофі.

Зверху кожної 2 відсіки: звичайні та декофеінуті зерна. Можна змішувати. Жирні коричньові розводи на лівих баках то якраз від звичайних зерен, можна побачити наскільки вони свіжі. Міняють/досипають їх як я бачу раз на пару днів.

UPD Feb 12, 2014. На прохання у коментарях додаю фото з чаями:

Прибутки Microsoft

Більшість людей (і я в їх числі) хоча і знають що МС заробляє шалені гроші з року в рік не зможе сказати скільки саме і чим саме. Ну тобто люди знають що от є Windows, Office, ну може ще спеціалісти знають про Visual Studio, SQL Server та SharePoint, але яку частку прибутку кожне з них приносить не завжди зрозуміло. До того ж ще є bing, Windows Phone, XBox які наче і роблять якість гроші, і в той же час інші люди пишуть про шалені витрати на ці продукти.

Спробуємо розібратися за допомогою ось цієї статті – http://www.tannerhelland.com/4993/microsoft-money-updated-2013/.

Але спочатку кілька зауважень:

  • “традиційні” продукти (Windows, Office) левову частку заробляють у секторі контрактів з великими організаціями (і це контракти на кілька років), а далеко не продажею коробок індівідуальним користувачам.
  • чутки про якийсь уход з ринків та падіння прибутків є перебільшеними, якби не сказати брехливими – компанія стало заробляє більше кожен наступний рік на протязі усієї історії свого існування
  • незрозумілий і невідовий звичайному користувачеві Server and Tools росте найшвидшими темпами кілька років. А займається той відділ тими інструментами що полегшують великим організаціям управління їхнім парком техніки.
  • числа на графіку вище то “брудний” прибуток, тобто з них ще треба віднімати те що було потрачено відділом.

 

Отже поїхали:

  • Windows – чистий прибуток 19.3 міліарда. Сюди ж входять Sufrace, миші, клавіатури і таке подібне.
  • Business – включає в себе Office, Exchange та SharePoint, чистий прибуток 16.2 міліарда.
  • Server and Tools – включає в себе Windows Server, SQL Server, Visual Studio, System Center. Чистий прибуток – 8.2 млрд.
  • Entertainment and Devices – це XBox, Windows Phone, Microsoft Live та Skype. Чистий прибуток 0.8 млрд. Ось тут цікаво порівняти прибуток від продуктів які продаються індивідуальним користувачам (а XBox+Kinect мегапопулярні і дуже добре продаються) з тими що продаються великим огранізаціям. Навіть якщо Windows втричі популярніша за XBox то можна прикинути що великі організації приносять МС вдесятеро більше грошей.
  • Online Sevices – MSN, Hotmail, bing. Ну тут ясно що бінг жере гроші (як довго свого часу було і з XBox), але все не так просто бо гроші не просто витрачаються на розробку та дата-центри, але і на покупку продуктів і компаній (згадайте Skype). І хоча цей відділ і заробив 3.2 млрд., проте у підсумку став збиткови на 1.3 млрд. До того ж по угоді з Yahoo! 80% прибутку від показу реклами буде йти з МС кілька років, і лише потім почнуть зменьшувати процент виплат. Це така платня за те що фактично пошука на Yahoo! є інтерфейсов для результатів bing.

Чим я займався в bing

Якось я ніколи так і не розказував над чим я саме працював в bing і якими задачами там займався. Ось і прийшов цей момент Smile

У якості передмови хочу сказати що колись у мене був досвід роботи в стартапі де ми намагалися зробити щось нове в інтернет-пошуку (деталі – Як я працював в Luxoft’і). От після того у мене і виник інтерес до цієї області.

Відпрацювавши трошки більше 2 років в System Center над новим продуктом Service Manager я нарешті перейшов у bing (після випуску першої версії продукту).

Сам інтернет-пошук у дуже спрощеному вигляді можна представити як систему в яку з одного боку подаються вхідні дані (наприклад веб-сторінки), а з іншого приходять запити від користувачів. До речі те що я далі пишу не відображує те що відбувається насправді на 100%, а просто є спрощенним приближенням яке передає основну ідею.

Що стосується обробки даних, їх класифікації, категоризації, оцінювання та ранжування – це все великі і складні задачі пов’язані з математичними моделями та неймовірними обсягами даних. У такі команди потрібні люди зі спеціалізованими знаннями, наприклад машинне навчання, нейронні мережі, математичне моделювання, тощо. І специфіка задач там така що обробка даних може йти дуже довго (години, а іноді навіть і дні).

З іншого боку запит від користувача треба обробити якомога швидше і видати йому назад якомога релевантніші (тобто такі що найкраще відповідають на запит) дані.

Таку складну систему яка складається з сотеньо компонентів можна поділити на шари, наприклад: інтерфейс веб-сторінки, розуміння запитів, уточнення запитів, робота з провайдерами даних, тощо.

Можливо ви не знали, але за статистикою переважна, абсолютна більшість запитів користувачів містять у собі помилки, тому пошукові системи намагаються їх автоматично виправити. Крім того запит треба зрозуміти. Скажіма якщо я шукатиму по слову Seattle то мене (через те що я близько до нього) скоріше за все цікавить ситуація на дорозі, можливо карта і погода. А якщо те ж саме напише людина з іншого континенту то для неї скоріше за все варто показати дані з вікіпедії, фотографії, та положення Сіетла на карті світу, або навіть інформацію про авіа-рейси до Сіетла.

До речі все що я розказую стосується не лише bing, але і будь-якої пошукової системи загального призначення.

Чим більше ви слів напишите у запиті (при умові що слова разом мають сенс) тим більша імовірність отримати відповідь на питання на першій же сторінці результатів. Крім того усе вище сказане означає що в залежності від вашого місцезнаходження (а також інших речей як історія пошуків) користувачі бачать різні результати на один і той же запит.

Крім того треба розуміти що пошукові системи побудовано так що обслуговуючі їх комп’ютери знаходяться у різних дата-центрах і відповідно дані і програми там можуть бути різними. Усі найновіші зміни, покращення та експеременти як правило гравці на цьому ринку роблять доступними в першу чергу для США. А для України/Росії відставання легко може складати місяці, а то і роки. Ви спробуйте – поставте у своєму браузері локаль США і порівняйте результати.

Коротше після того як користувач через веб-сторінку ввів свій запит він перетворюється на сотні різних варіацій і доповнюється іншими даними (місцезнаходження, браузер, попередні запити,…) і спрямовується до компонентів які можуть обробити ці запити.

Тепер поговоримо про дані. Якщо ми візьмемо результати спортивних матчів чи ціни на акції які мають оновлюватися щохвилини (а бажано кожні кілька секунд), прогноз погоди який треба оновлювати кожні пару годин хоча б, та скажімо статті з енциклопедії як добре як оновлюються раз на пів-року то зрозуміємо що зберігати такі дані разом, або просто однаковим способом просто недоцільно. По-перше від типу даних залежить логіка їх обробки. Наприклад запит MSFT для компонента що працює з акціями просто означає що потрібні поточні дані для акцій Microsoft, а от для карт наприклад, чи фінансових новин вже треба вибирати за ішими принципами (скажімо найцитованіші новини).

Ну і відповідно харатер даних впливає на те як і де їх зберігають і як їх деплоять (тобто як вони потрапляють на комп’ютери що обслуговують запити).

Я працював в команді яка відповідала за роботу з провайдерами даних. Тобто грубо кажучи це був фреймворк для створення компонентів для спеціалізованих типів даних. Компоненти знаходяться логічно між графічним інтерфейсом (веб-сторінкою) і сховищами даних. Фреймоврк навав можливість унфікувати роботу з постачальниками даних, послати і обробити паралельні запити до даних, зібрати відповіді і надати їх веб-сторінці.

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

Які ж основні технічні проблеми? По-перше, уся робота відбувається асинхронно і наш код не мав створювати ніяких затримок (тобто многопоточність і при цьому відсутність синхронізації). По-друге, накладні розходи мають бути мінімальними і користувачі нашого коду мають отримувати усю функціональність “безкошотвно”, тобто абсолютно на все у нашого коду є лічені мілісекунди. До того ж використання пам’яті по мінімуму (її і без нас є кому споживати), можливість програмного чи апаратного збою в будь-який момент і інші речі.

Через те що в процесі задіяні сотні тисяч комп’ютерів імовірність фатальної помлики (баг, апаратний збій, пошкодження даних, проблеми у мережі, …) дуже висока і фактично гарантована.

До того ж дослідження причин негараздів та ще весела задача – знайти які дані і звідки прийшли, куди вони пішли, що потім сталося… Отак і “розслідуєш” якийсь випадок з машини на машину. Наче і логи є, проблема лише в тому що їх реально терабайти.

Я вже не говорю про те що при оновлені компонента його ніхто не буде зупиняти що замінити на нову версію і тому потрібні механізми як це робити “на ходу” (поки поточні запити оброблюються старим компоненом усі нові мають оброблюватися новим). До цього ж додайте оновлення даних деякі з яких як я вище зауважив оновлюються дуже часто, а також те що це має відбуватися на мінімум тисячах машин одночасно. Коротше веселуха ще та.

Крім написання коду та дослідеження причині помилок (і їх виправлення) команди в bing займаються деплойментом (тобто оновлюють свої компоненти в дата-центрах при необхідності) та реагують на критичні випадки. В командах є концепція чергових (і так само і в google, facebook та інших сервісах-гігантах) від кожнох команди які в разі необхідності (по закону підлості це завжди трапляється в 4 ранку або у вихідні) мають підключитися та вирішити проблему. Мова звісно не йде про виправлення багів (для цього є робочий час), а скоріше про “зробити щоб цього не було”. Це в тому числі може буде і повернення до старої версії коду або даних.

Які скіли розвиваються на такій роботі? Многопоточне прогамування, профілювання та оптимізація, дебагінг (WinDbg) та особливо вміння дошукуватися до першопричини проблем.

Ну от, наче щось розказав і секретів не видав Smile

Ще пости по темі:

Новий офіс

Взагалі то він нічим від старого не відрізняється – та ж будівля, той же поверх, лише коридор інший. Взагалі переїзд стався просто для того щоб команди кучніше одне до одного сиділи. Тепер у мене всі співкомандники в радіусі 30 метрів, а до того метрів 50 ходити доводилося Smile

 

На цьому у мене все.

Роздягальні у MS

Вже не один раз я хвалився тим як я бігаю чи катаюся на велосипеді з/на роботу. Ну от і подумав зненацька чому б і не написати про це.

Сьогодні вранці був туман, а фотографував на кросівок телефон, які там ще стандартні виправдання розмазаних фоток є? Smile Насправді після бігу якось зовсім не хотілося стояти і вицілювати ті фотографії – весь потний і мокрий як миша, руки починають швидко мерзнути, телефон стогне і плаче що я його цілий день вчора не заряджав… Коротше дивіться що є.

Я працюю в Studio E.

Взагалі роздягальня є як правило одна на комплекс будівель (3-4 білдінга, або 2-4 тисячі людей). В Белев’ю де у МС 4 хмарочоси роздягальня є у кожному з них. Розташовуються вони як правило на першому рівні підземної парковки, хоча в деяких старих будівлях можуть бути і на першому поверсі, трохи збоку від офісів.

Працюю я в тому ж “будинку” де роздягальня, але скоро у зв’яку з переїздом доведеться ходити сюди з будинку через дорогу.

Всередині є туалет, 2-3 рукомийники, кілька душових кабінок з рідким милом, рушники та шафки.

Шафки поділяються на такі що їх можна тримати закритими кілька днів (через 10 днів після останнього використання замок відкривається автоматично), та такі що відкриваються щодня.

Знову ж таки в залежності від будівлі знайти вільну шафку на тривалий час (наприклад щоб тримати там запасний одяг та різну “косметику”) може бути доволі проблематично.

Раніше були якісь спеціальні правила що треба було знайти вільну шафку, написати у спеціальну службу щоб підтвердити що можна її забрати собі. Потім усе це спростили і якщо замок відкритий то за новими правилами ти можеш усе звідти викинути і зайняти її собі (на шафках кодовий замок і код задається при замиканні).

Якщо ж через відпустку чи відрядження точно не зможеш відкривати-закривати її 10 днів то треба написати знову ж таку у спеціальну службу і можна повісити замок.

Як правило шафку одразу не забирають якщо в ній є речі, натомість кладуть записку що “я такий то заберу її собі якщо до такого числа вона ще буде відкритою”. Проте іноді у внутрішній переписці можна почитати веселі історії коли хтось принциповий забрав шафку одразу викинувши речі (за правилами же ж!), у відповідь на записку “поверніть шафку будь-ласка, я просто забув вчора її закрити” написав “згідно правил не мушу” і наступного дня мав повну шафку піні для гоління видавлену туди через дірки у дверці Smile

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

Поруч із роздягальнею як правило є парковка для велосипедів де часто можна знайти насос.

Рушниками займається якась окрема контора і возять вони їх по розкладу – іноді закладені усі лавочки, а пару разів за всі роки бувало що взагалі рушників не було. Тому у багатьох у шафках можна побачити пару рушників про всяк випадок. Колись давно кажуть у цілях скорочення витрат рушники відмінили взагалі (треба було свої носити), а потім коли їх повернули то народ ледь масове гуляння не почав, хоча реально цим усим користується добре якщо 5% працівників. Проте завжди є можливість сходити в душ на роботі. А я іноді там і голюся коли дома не було часу чи бажання це робити.

В bing пам’ятаю народ вішав свої шмотки спортивні сушитися на якісь труби (там була одна кімната де зберігалися велосипеди, там були і труби, а з неї вже можна було потрапити в роздягальню) на плечиках звісно. Спочатку вішали плакати “не сушіть шмотки на цих трубах – порушуєте техніку безпеки”, а потім прикрутили спеціальну трималку для плечиків. Тут же де я зараз особливо де розвісити свої лахи і нема. І навіть зверху шафок (дивись на фотках) прикрутили лист жесті під кутом щоб нічого на верх не ставили. У bing знову ж таки зверху шафок народ навалював взуття і шмоток.

Ну що ще сказати? Гаряча вода є завжди Smile