Содержание статьи
В российском представительстве компании Google работает около ста человек. И в отличие от многих других западных компаний, здесь ведется реальная работа над продуктами поискового гиганта. С недавнего времени московские ребята переехали в новый замечательный офис, фотографиями которого пестрит весь инет. Мы никак не могли отказать себе в удовольствии заглянуть к ним в гости и пообщаться с Евгением Соколовым, главой московского центра разработок компании Google. И вот что он нам рассказал.
О разрабатываемых проектах
Есть несколько групп разработчиков, которые занимаются разными типами проектов. В стенах московского офиса, в частности, ведется работа над сервисом словарей, утилитами для runtimeтестирования, отдельными частями Chrome OS, технологией Native Client. Последняя в будущем реализует запуск машинного (нативного) кода в различных браузерах. Причем независимо от операционной системы и безопасно с точки зрения пользователя. Это, кстати, открытый проект, исходники которого всегда доступны на сайте code.google.com/p/nativeclient. Runtime-тестирование — это отдельная тема. В московском офисе Google работает Костя Серебряный, который создал утилиту ThreadSanitizer (сode.google.com/p/dataracetest), позволяющую полуавтоматически находить data races (состояние гонки). Такие ошибки очень сложно поймать обычными средствами тестирования и отладки, особенно когда объем кода очень большой.
О том, как попасть в Google
Если открыть google.ru/jobs, то вы увидите, что там всегда есть вакансии в Google Россия. Мы всегда рады, когда к нам приходят люди. Может возникнуть вопрос: а почему же открыты вакансии? Очень просто: подходящих специалистов, как ни странно, мало.
Это проблема. Что требуется от кандидата? Умение решать задачи в масштабе большого интернета. Понимание, как правильно сегментировать, какие структуры данных использовать и так далее.
Такого рода вопросы мы обязательно задаем на собеседовании. Важное требование — умение программировать. В Google широко используются С++ и Javа: люди, претендующие на должность инженера, обычно знают один из них. Даже те, кто сейчас пишет на C#, как правило, начинали именно с C++. Да и на самом деле, если программист пишет на C#, но обладает хорошими базовыми знаниями, то у него все равно есть все шансы наше собеседование пройти. Кандидат, по сути, сдает экзамен второго курса университета. Проверяется знание структур, алгоритмов, умение оценить их сложность и тому подобное.
Многие ребята, работающие в Google Россия, пришли сразу после получения диплома: больше всего из МГУ, остальные — «с миру по нитке»: из МФТИ, МИФИ, других московских и региональных вузов (например, из Саратовского университета).
О задачках на сообразительность
В ходе интервью мы нередко задаем разного рода задачки, чтобы проверить ход мышления и общий уровень подготовки кандидата.
Могу привести пару примеров:
- Представляете себе вагон пригородной электрички? А яблоко? Простой вопрос: сколько яблок поместится в один такой вагон?
- Есть куб. Проведем перпендикулярно его главной диагонали плоскость. Первый вопрос (и это прелюдия): какая фигура получится в сечении? А теперь главный вопрос: что получится при сечении, если куб будет четырехмерным?
О мотивации
У нас достойные зарплаты и премии. При трудоустройстве сотруднику также выдаются акции, а акции Google, как известно, стоят дорого. Новичок сразу уезжает на обучение в Калифорнию, чтобы быстро вникнуть в основные аспекты деятельности компании: «Вот Google, вот так работает поиск, а вот так устроена реклама». Всегда есть много дополнительных бонусов, которые помогают сотрудникам быть в тонусе и не терять интерес к работе. К примеру, есть правило: после 18 месяцев на одном проекте человек может попросить перевести его на другой. А если есть желание, вообще перевестись в другой офис, что многие и делают. Например, в Цюрих или Калифорнию. На время, а может и насовсем. В Google это очень частая практика. Главное, чтобы человеку было интересно, и он был продуктивен.
Про распорядок дня
Предполагается, что на работу надо приходить до 12. Но, конечно, за этим никто не следит. Когда ты решишь свои задачи, никого не волнует. Кто-то приезжает в 9, кто-то — в 12, а кто-то — в 3 часа дня. Это еще связано с тем, что многие работают в интернациональных командах, и у них много переговоров с Калифорнией.
Последние обычно проходят в 7 вечера, когда в США только 8 утра. В целом в Google очень свободная обстановка. Поощряется инициатива. Доходит до забавных ситуаций. Например, бывало и такое, что наши инженеры спорили с вице-президентами компании: «Я не согласен, мы должны решить эту задачу по-другому!».
Про тренды в софте
Google считает, что приложения должны быть кроссплатформенными. Пользователи со временем комфортно будут работать на самых разных операционных системах. Для того, чтобы поддерживать этот тренд, надо разрабатывать приложения, которые будут работать везде. Сейчас большие ставки делаются на HTML5 и, соответственно, веб-сервисы. Компания хочет быть на острие и потому полностью поддерживает все новые технологии HTML5, участвует в разработке стандарта. На этот подход напрямую завязана и разрабатываемая нами ОС.
Chrome OS — вообще интересное направление. По сути, это попытка создать совершенно новую корпоративную платформу. В чем смысл? Если взять какую-нибудь крупную компанию, то у любого ее сотрудника обязательно будет ноутбук с важными файлами. Потеря лэптопа непременно влечет к утечке важных данных. Chrome OS же позволяет хранить файлы централизованно. Даже если нетбук с Chrome OS потеряется, то утечки не произойдет (потому что файлы хранятся в облаке). Но получив взамен новую «машину», вы сразу увидите знакомый набор софта и документов. Chrome OS имеет еще одно важное преимущество — значительно меньшие требования по железу, нежели другие ОС.
Мы активно развиваем и нашу облачную платформу App Engine для разработки и развертывания приложений. Здесь есть некоторые сложности, над которыми работают несколько групп программистов.
Главная задача сейчас — сделать сервис более гибким.
О создании качественного софта
Изменение не вносится в код, пока его не рассмотрит команда. Как правило, есть «владельцы» отдельных кусков кода. Так вот, любые изменения, которые вы хотите внести, должны посмотреть ваш коллега и «владелец» куска кода. Помимо этого есть определенные требования к тому, как писать этот код, начиная с того, что он должен быть отформатирован определенным образом. Если вы пишете на С++, то все пишут в одинаковом стиле. Это необходимо для того, чтобы код был неотчуждаемым. Нет моего или твоего стиля — любой инженер должен иметь возможность открыть код и понимать, что там написано.
Есть также некоторые декларированные правила по использованию, скажем, определенных паттернов на С++. К тому же, на весь код обязательно должно быть написано определенное количество тестов, необходим определенный уровень покрытия. Эти требования декларируются внутри компании.
Про программирование на Go
Сейчас идет активная работа над языком программирования Go, но пока он на начальных стадиях развития. Когда сам Google выпустит на нем большой проект, появится ощутимая поддержка. Но для этого компания должна убедиться, что Go — это язык, на котором можно и нужно писать код. Затея здесь следующая. Есть ощущение, что у существующих языков имеются проблемы. С++ слишком большой, разветвленный и мохнатый. Два разных человека могут писать несовместимый код. Один использует одни паттерны, другой — другие, и в конечном счете это часто плохо стыкуется. Но, замечу, каждый из них хорошо знает С++. Проблема в том, что это могут быть два разных С++. У нас есть понимание, что разработчики менее эффективны, чем могли бы стать, если дать им более совершенный язык программирования. Он должен быть достаточно выразителен и гибок, но без возможности написать одно и то же десятью разными способами. По этой причине в Go очень мало ключевых слов. Нет, к примеру, кейворда implements (как в Java) — он попросту не нужен.
Язык Go сейчас обкатывается — появилось большое количество людей, которые начали его использовать. Предстоит еще много работы. Тот же компилятор сейчас только один — хорошо бы появилась альтернатива. Но все впереди.