Saturday, June 11, 2011

О Linux в мирных целях

Я не могу похвастаться внушительным опытом работы с Linux как с домашней десктопной системой. Мой стаж насчитывает всего 4 c половиной года и он начался с Fedora 6. К тому моменту я уже работал в Linux около года и чувствовал себя вполне комфортно, так что использовать систему дома было вполне логичным шагом.

Конечно, в тот момент мне было очень интересно всё осваивать и настраивать. Это было немного похоже на конструктор, который мне подалири в 10 лет - отличная развивающая игрушка. Fedora оказалась у меня практически случайно - со мной поделились установочным диском. По умолчанию там стоял Gnome, в котором я уже провёл достаточно времени, и проблем не возникало. Однако скоро я заметил одну особенность - я постоянно пользовался KDE программами, например, amarok, ktorrent и krusader. Поэтому я решил попробовать переехать в KDE.

Я до сих пор помню конфигурацию - fedora 8 + kde 3.5, отличная была система. Она просто работала. Конечно, я потратил уйму времени на допиливания и подкручивания под себя, но тогда мне это было действительно интересно. И потом, в этом же прелесть Linux, открытые исходники, blah blah blah.

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

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

Самый катастрофичный пример - разумеется, KDE 4. Вы пробовали им пользоваться? Я, по неосторожности, да. В Fedora 9 включили KDE 4.0... И это было за гранью добра и зла. Абсолютно непригодная, сырая, неинтуитивная и непонятно зачем нужная система. Пожалуй, это один из самых красочных примеров обновления только ради обновления. Может, её переписали с нуля, может, туда добавили миллион новых внутренних подсистем и может, это задумывали как нечто революционное. Может, оно действительно таким и было - в глазах разработчиков и непробиваемых фанатов. В моих глазах это был полнейший крах и уничтожение замечательно работающего наследия. Я потратил часы, чтобы научиться монтировать флэшку и выстроить на рабочем столе панели с иконками быстрого запуска так, как я привык. Обещанные виджеты или что уж там было задумано не работали или их не было вообще. Amarok 2 получился просто чудовищным монстром, который толком не может работать с ipod и у которого невозможно убрать ненужные панели, занимающие весь экран.

Реакция тех, кто это принял на ура, была довольно предсказуемой - это же open source, вы всегда можете самостоятельно всё поменять. Я уже говорил, что меньше всего мне хотелось чинить то, что когда-то работало, но по чьей-то прихоти стало сломано? Пробовал ли хотя бы кто-нибудь поставить себя на место обычного человека, которому просто нужно проверить почту и послушать музыку, а не запускать make world? Поправьте меня, если я неправ, но разве linux не стремится изо всех сил на десктопы, чтобы покорить таких обычных пользователей?

Впрочем, по планете маршировал Ubuntu, в котором kde как-то не очень популярен, и он остался, скорее всего, уделом маргиналов. Я вернулся назад в gnome и вздохнул с облегчением. KDE 4 являлся в виде кошмара, когда я пытался добавить песни в ipod через amarok. Но для чего вообще нужен большой шумный компьютер? Ничего особенного - интернет + хранилище музыки, кино и фотографий. К счастью, на тот момент у меня был ноутбук и компьютер практически не включался. У него осталась только одна очевидная функция - игры, да и то пару часов в месяц, для чего осталась установлена windows.

При этом на рабочем компьютере у меня всё это время стояла FreeBSD, сперва 6, потом 7. Там остался kde 3.5 и никаких апдейтов, никаких. Я потратил день, чтобы использовать два монитора с драйвером nvidia, и это был отличный компьютер для работы. Ничего лишнего.

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

Только на этой неделе я зачем-то снова решил обновить систему, на fedora 15. Что же, сам виноват, опыт ничему не учит - и ситуация с kde в точности повторяется. Я не пойму, что и зачем они сделали с gnome, но пользоваться я этим не смог. У меня уже есть MacOS, и она, знаете ли, отлично работает - в отличие от gnome 3, который очень хочет казаться на неё похожей. Я скажу только, что не смог заставить компьютер выставить правильное время через панель управления с десяти попыток. Мне глубоко наплевать на все новшества, если после них я чувствую себя полным идиотом и не могу сделать простейших вещей. Впервые я сделал откат на предыдущую версию fedora и больше не намерен её обновлять. С меня хватит.

Конечно, можно развернуть долгую дискуссию о том, что у меня кривые руки (и это правда), о полезности WindowMaker или любых других оконных менеджеров (но я простой человек, уберите от меня вашу гикость) и о том, что я не понимаю крутости новых систем. Мой вывод простой - эти обновления ради обновлений не приближают linux ни на шаг к тому светлому будущему, которое фанаты любят себе представлять. Если лопнуло терпение даже у меня, когда-то лояльного пользователя и профессионального unix-разработчика, то что уж говорить о простых людях, которым всего-то надо посмотреть фотографии и загрузить ipod.

Monday, April 4, 2011

Чтобы вы хотели знать?

Расскажу-ка я о том, как здесь живётся.

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

Начнём с того, что Дублин - город маленький. У этого есть масса преимуществ. Например, в повседневности мы не пользуемся транспортом вообще, всюду пешком и мне это очень нравится. Ближайший кинотеатр в 15 минутах ходьбы - немногим дальше, чем в Москве было до метро. Тем не менее, за это время мы проходим одну из самых длинных улиц в Дублине (если верить Википедии, а кто же ей не верит). Такие здесь масштабы. Или ещё пример - мы живём в районе, построенном на месте доков. Каждый день я прохожу по набережной этого дока и не могу сказать, что она особенно поражает размахом - тем не менее, её отлично видно на карте города со всеми пригородами (под булавкой такая буква Г - это и есть док). Пройти такую дистанцию раз 5-6 - и всё, Дублин кончится.

Ещё здесь нет каменных джунглей. Самое высокое здание - 15 этажей, если не ошибаюсь. В основном народ живёт в собственных домах, часто они стоят сплошным фронтом стена к стене. Дома эти максимум 4 этажа в высоту, и то не везде, только в Georgian Dublin, это застройка в стиле 18-го века в престижном центре города. Про районы подальше у меня сложилось впечатление поглощённых пригородов и деревень, да они до сих пор и называются теми же именами. Я до сих пор не знаю, кстати, где у Дублина официальная граница и где начинается область, то есть Сounty Dublin.

Мы, впрочем, поселились в новостройке (целых 7 этажей!) и не особо об этом жалеем. Во-первых, здесь очень удобное располоожение, во-вторых, нам нравится сама квартира, в-третьих, эти жилые комплексы сами по себе приятные. Прямо сейчас мы наблюдаем, как на балконе напротив разбивают сад. На старые дома приятно смотреть снаружи, но часто за цветной дверью можно встретить очень traditional, как они называют, квартиру и нам это было не совсем по вкусу. Ах да, ещё наш дом на набережной Лиффи и, хотя окна у нас и во двор, а не на воду, выходить с утра на реку очень круто. Вот эта фотография сделана прямо от нашего подъезда две недели назад, а вот и наш дом, справа, красненький. И вообще, всем даю ссылку, безумное количество фотографий окрестностей.

Город я, разумеется, пока не знаю вообще. У меня, впрочем, своё представление о том, что значит "знать город" - Москву я знаю по своей метрике совсем немного. Но всё ещё впереди и с Дублином, и с Москвой. Мне не хватает общества, аналогичного Москваходу (кто не ходит на экскурсии, лишает себя познания одного из лучших городов в мире), но я надеюсь наверстать это самообучением. Зато у меня уйма свободного времени, очень много планов по тому, как это время использовать - и, главное, есть твёрдое намерение их в жизнь наконец воплотить. Вообще приятно, когда до работы идти меньше 10 минут - за это время не жаль платить.

К слову об оплате - о, вот здесь я тоскую по России. Я тоскую по НДФЛ в 13%, это вам не 20% и не 40%, которые с меня снимает почти обанкротившееся ирландское правительство. Впрочем, я знал, на что шёл и куда ехал, так что шока не случилось. Все удержанные сверх нормы налоги можно запросить назад, оформить перерасчёт и, кроме того, здесь полно налоговых льгот - например, мне положена льгота за аренду квартиры. Самое приятное - тут работает электронное правительство, и налоговые дела по большей части можно решить на сайте инспекции. А если что не получается, достаточно просто послать обычное письмо, оно дойдёт за день. Таким образом мы получали ирландские мультивизы на год - чтобы не вставать аж в 7 утра и идти 15 минут до иммиграционного отделения, я положил паспорта с анкетой и фотографиями в конверт, отправил их в понедельник с утра по почте и с утра в среду почтальон принёс назад конверт с открыткой с наилучшими пожеланиями от иммиграционной службы. И с паспортом. Получилось это, правда, со второго раза - в первый раз им не понравились фотографии, пришлось идти в аптеку и делать там снимки на документы. По какой-то причине экспресс-фото часто делается в аптеках.

Развивая денежную тему, могу сказать, что жизнь вообще, разумеется, дороже. Поскольку я с неизвестными даже самому себе целями веду домашнюю бухгалтерию, то могу сказать, что на продукты за месяц в Дублине мы потратили больше в полтора раза, чем в Москве. И не сказать, что остаются залежи припасов или мы покупаем сплошь деликатесы - нет, овощи-фрукты-хлеб-молоко-мясо, ничего особенного. Но зато эта разница практически целиком сводится на нет бесплатными обедами. Если рассматривать такой жизненно важный компонент продуктовой корзины, как поход в паб, то цены такие - пинта ~ €4.5 - €4.8, столько же стоит и стакан виски. Я бы даже сказал, whiskey. Скажи мне кто пару лет назад, что я стану с удовольствием это пить - не поверил бы. Автобус, если нужно на нём проехать - от €1.5, интернет 20mb/s - €35/мес, билет в кино: €7-€9. Поужинать вдвоем с бокалом вина - €60-70. Абонемент в спорткомплекс с бассейном на двоих на год - €1000. На порядок дороже электричество, я жду первого счёта, чтобы знать точно; ожидаю в пределах €100/мес. Электричества тратится много, потому что здесь нет центральной горячей воды и отопления - всё своим бойлером и обогревателями.

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

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

Saturday, January 8, 2011

Собеседование в Google

В конце мая мы постепенно готовились к неумолимо надвигающейся свадьбе, до которой оставалось три месяца. Но когда в почтовый ящик упало письмо с заголовком "Hello from Google", проигнорировать его было нельзя.

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

Рекрутёр предложил мне рассмотреть позицию Site Reliability Engineer (SRE). Отчасти она совпадала с моей деятельностью в Рамблере, отчасти нет. Поскольку терять мне было абсолютно нечего, а приобретённый опыт мог оказаться очень ценным, я обновил резюме, перевёл его на английский и откликнулся через пару дней.

Подготовка


В ожидании ответа стал зачитывать от корки до корки все полезные книги. Нужно пройтись по всем пунктам в описании вакансии.

TCP/IP
  • Лучшего источника, чем книги У. Стивенса TCP/IP Illustrated, пожалуй, нет.
  • В ней постоянно используется tcpdump для иллюстрации материала. Владение этим инструментом тоже крайне желательно, эта статья поможет с ним неплохо познакомиться
Unix
  • Устройство Unix хорошо изложено в книге А. Робачевского с соавторами. Она неплохо укладывает в голове многие внутренние механизмы - от системы процессов до устройства inode, знание unix на таком уровне очень желательно.
Алгоритмы

  • В первую очередь - классика Н. Вирта, "Алгоритмы и структуры данных". Основы основ, по ней нас учили информатике на первом курсе.
  • Однако потребуется большее - более сложные и утончённые алгоритмы, а также умение анализировать их сложность. Да-да, O-нотация обязательна к пониманию. Фундаментальной книгой является "Алгоритмы. Построение и анализ" (Кормен, Лейзерсон, Ривест, Штайн). Она охватывает очень много материала, уделите ей несколько недель.
  • Лично мне, кроме того, очень помогли лекции MIT Introduction to Algorithms по этой книге. Одним из лекторов был как раз Ч. Лейзерсон, один из соавторов. Каждой главе посвящена одна полноценная лекция, около полутора часов, видео идёт со слайдами. Я, например, загрузил всё это в ipod. Учтите, что это полноценнный семестровый курс и времени понадобится соответственно. Кроме того, это отличный способ потренировать свой английский, хотя бы на восприятие.
  • И, наконец, для разминки и набора хорошей формы рекомендую прорешать пару десятков задачек с Project Euler - это и упражнения в первую очередь на поиск интересных и оптимальных алгоритмов, но потренироваться писать код никогда не вредно.
Архитектура больших систем

Здесь я полагался на свой накопленный опыт, так что отдельно ничего не изучал. Могу порекомендовать ряд технических блогов: Twitter, Facebook, Netflix, High Scalability, Last.fm. И не стоит обделять вниманием Bigtable, GFS и MapReduce - это тот минимум, который необходимо прочесть из публикаций Google.

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

Первый этап

Весь процесс общения происходит на английском. Сперва предстоит телефонный разговор с рекрутёром, phone screen. Во время него будьте готовы ответить на элементарные технические вопросы, чтобы подтвердить, что вы на самом деле тот, за кого себя выдаёте. Я, разумеется, не буду приводить ни один вопрос дословно, но на данном этапе пригодится хорошее знание книги Вирта, например - в структурах данных, алгоритмах и их сложности вы должны ориентироваться свободно в любом случае. Если данный этап будет пройден успешно, то предстоит два телефонных интервью и собеседование в том офисе, на который вы нацелитесь. Мне был предложен выбор из Цюриха, Лондона и Дублина; по ряду причин я выбрал Дублин, европейскую штаб-квартиру.

Телефонные собеседования

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

Оба раза со мной разговаривали инженеры из Америки, из разных офисов. Зарядите телефон, по которому будете беседовать, чтобы разговор не оборвался на полуслове; убедитесь в том, что интернет будет работать. Я немного ударился в паранойю и подстраховался даже от выключения света, воткнув в ноутбук второй аплинк - Йоту (а то всякое бывает). Убедитесь в том, что правильно поняли вопрос, не стесняйтесь переспрашивать и уточнять.

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

В собеседовании придётся на ходу писать код, именно для этого потребуется интернет - для доступа к расшаренному документу. Можно писать на тех языках, которые перечислены в описании вакансии (С, C++, Java, Python). Задачи разумного объёма, их можно решить в несколько десятков строк (в зависимости от языка). Я писал на C++; вот тут будьте очень внимательны и аккуратны. Учтите, что компилятора нет, поэтому безошибочно пишите все имена переменных, функций, не забывайте про синтаксис. Не нужно волноваться и нервничать, нужно просто хорошо сделать то, что вы умеете - написать правильный код. Мелочи вроде off-by-one могут негативно сказаться на общем впечатлении. Не стесняйтесь вслух отладить программу на паре тестовых примеров.

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

Собеседование на месте

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

Накануне можно подкрепить уверенность в своих силах, прорешав несколько задач с TopСoder - всегда приятно видеть положительный результат от своих действий, и это успокаивает.

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

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

Разумеется, перед собеседованием нужно хорошо выспаться и прийти со свежей головой. Нервов и паники быть не должно - расценивайте это не как экзамен, а как возможность пообщаться с коллегами на интересные темы и попробовать решить нетривиальные задачи. Интервьюёры - такие же инженеры, как и вы. Не стоит думать, что эта возможность - единственная и больше шанса не будет. Не секрет, что в Google высокий уровень false negative - подходящему кандидату просто не повезло в конкретный день с конкретными вопросами. Как учили меня в институте, оценка за экзамен не говорит ни о чём, кроме готовности в данный конкретный день ответить на данные конкретные вопросы, а не о знании всего предмета в целом. В самом деле, невозможно знать всё и не допускать ошибок. Многие кандидаты повторно пробуют свои силы снова и снова, рекомендуется выдержать интервал примерно в год. Поэтому не стоит волноваться при любом ходе собеседования.

Если поискать, то можно найти много подобных статей об интервью, как с положительным, так и отрицательными исходами. Самой полезной я бы назвал Get that job at Google - собственно, взгляд с другой стороны баррикад. Очень хорошо настраивает на нужный лад, и подчёркивает основные пункты, на которые нужно обратить внимание.

После собеседований рекрутёр опишет вам алгоритм действий, ожидание ответа займёт ещё пару недель.

Результат

В лучшем случае - разумеется, job offer. В моём случае от первого phone screen до получения предложения о работе прошло около двух с половиной месяцев, но следует учесть, что промежуток между вторым собеседованием по телефону и вылетом в Дублин прошло несколько недель - я сам попросил такой график, так что можно, наверное, пройти этот путь и быстрее.

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