На чем программируют суровый ML в Гугле

В 2015 году Гугл выпустил TensorFlow - супер-современный фреймворк для машинного обучения, созданный с участием самого Jeff Dean.

Но если почитать статьи за последние несколько лет из Google/DeepMind, то можно заметить что эксперименты реализованы с использованием совсем другого малоизвестного фреймворка JAX и лишь в самом конце портированы на TensorFlow/PyTorch. Именно с помощью JAX тренируют гигантские нейронные сети: текстовые, computer vision, мультимодальные.

Читать дальше →

Python - самый популярный язык программирования

В далеком 2009 году я решил вернуться в роль инженера из роли менеджера. Начал смотреть по сторонам - на чем пишут самые крутые компании и люди. Помню как выписывал в текстовый файл заметки - Гуглу нужен Javascript, Python, Java, C++. Из всего этого списка я только не работал тогда с Python. Мой приятель Алексей Кинёв был в то время фанатом Django (Python web framework) и рассказывал невероятные истории про свой опыт использования языка и фреймворка.

Я скачал какую-то книгу, прочитал до середины, начал писать разные упражнения, а потом прошел tutorial Django. Так несколько дней спустя у меня уже работало веб-приложение, в котором не было страшного количество конфигурационных файлов как в Java, минимум слоев абстракции. Читать и модифицировать исходный код было легко и приятно. Сообщество и доступные библиотеки тоже очень радовали. После нечитаемой документации корпоративных инструментов сложно было поверить, что бывает иначе. В любую свободную минуту я открывал документацию на python.org и читал-читал-читал.

Читать дальше →

Хорошие книги за последние 3 года

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

Вдохновленный совсем свежим перечитыванием второго издания Death March, я сортирую книги на must read, should read, could read.

Must read

Death Match by Edward Yourdon

Как не сгореть в проектах с нереальными требованиями и сроками. А еще лучше - как в такое счастье не вступать вовсе.

Помню как читал эту книгу лет 17 тому назад и было уже тогда круто. Сейчас перечитал сугубо из практичных соображений (жизнь такая) и очень рад что это сделал.

Последние 20 процентов можно пропустить.

Four thousand weeks by Oliver Brukeman

Только глядя на название и зная что книга вроде бы про time/project management (которые я как настоящий программист ненавижу всеми фибрами моей тонкой души), у меня родилось ужасное предчувствие унылости: пишите списки, просыпайтесь раньше, не делайте пауз, чаще встречайтесь чтобы обсудить прогресс и майлстоны.

Но нет! Философская честная книга про конечность жизни и бесконечность списков дел.

Читать дальше →

Интересные свежие книги

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

DevOps и новые правила игры технологических компаний.

Accelerate

Accelerate: The Science of Lean Software and Devops: Building and Scaling High Performing Technology Organizations. Nicole Forsgren Phd, Jez Humble, Gene Kim.

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

Читать дальше →

Новые тренды и классика

Я был свидетелем многих революционных технологий. Объектно-ориентированное программирование, новые языки программирования, Веб, распределенные приложения, server-side и client-side frameworks, мобильные приложения, геолокация, машинное обучение. Было и немало нишевых технологий, например от Microsoft, которые создавались как будто только для того, чтобы разработчики тратили все свое время на обновление прошлогодних программ.

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

Читать дальше →

Рабочая этика

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

Мне повезло пожить в разных местах: в алтайских горах; в северном Казахстане с суровыми зимами и жарким летом; в райском Алматы с горами-велосипедом и офисом, до которого 5 минут пешком; в стране чудесов без тормозов Москве; в более расслабленном Киеве.

Читать дальше →

Баланс работы и личной жизни

Как-то беседуя с приятелем Сашей о карьере в Гугле, я выдал, что не планирую повышения по карьерной лестнице, потому что много других забот - немецкий, интеграция, дети. Саша сразу же среагировал, что я говорю про совсем другое - про “work-life balance”. Я покивал, подумал, и забыл. Никакого полезного отклика тогда эта фраза во мне не произвела.

Читать дальше →

Постепенное снижение производительности (снова про системы)

Продолжая читать Thinking in Systems, я добрался до главы “System traps… and opportunities”. Там описываются интересные системные эффекты, когда системы идут вразнос и казалось бы очевидные попытки починить делают все еще хуже.

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

The tragedy of the commons (это выражение я часто встречал в разных статьях, но не знал точного значения) - общий ресурс, который ничего не стоит, осваивается быстро и жадно, без заботы о его жизнеспособности. В результате ресурс умирает безвозвратно, либо его восстановление стоит безумно дорого и занимает долгие годы. Примеры - безконтрольный вылов рыбы приводит к снижению численности особей до критического уровня, начиная с которого вид начинает вымирать; выпас скота на общем пастбище, когда жадные фермеры доводят пастбище до состояния вытаптанного полигона.

Escalation. Я ее слегко покритиковал, она резко ответила, я припомнил ей вчерашнее, она назвала меня неудачником, …, пять минут спустя мы швыряем друг в друга тарелками. Тот же эффект гнал гонку вооружений в период холодной войны.

Читать дальше →

Почему системы так хорошо работают

Thinking in Systems, book cover

Читаю книгу Thinking in Systems, A Primer, на которую наткнулся в гугловых рекомендациях для инженеров. Книга - бомба! Короткая, по делу, открывает глаза на структуры и процессы в больших компаниях, сложных инженерных проектах. Полезна и для дизайна распределенных систем, и для навигации внутри больших компаний.

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

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

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

Читать дальше →

Как запрыгнуть в поезд глубокого машинного обучения

В 2011 году MOOC классы ml-class.org и ai-class.org в 2011 году взорвали мне мозг (см блог пост того времени).

  1. С компьтерами можно делать еще более интересные и сложные вещи, чем я думал
  2. Всему этому можно научиться сейчас, не переживать что в университете изучал что-то совсем другое (у меня диплом инженера-электрика)

Я решил что нужно изучать это все удивительное и интересное, что называется Computer Science и искать работу, где бы я занимался этим целыми днями. Так год спустя я проснулся в цюрихском отеле, уставший после 3 дней автотрипа Киев-Цюрих, позавтракал и пошел на свой первый рабочий день в Google.

В Гугле я со временем дорвался до возможности реализовывать и улучшать сложные алгоритмы в системах работающих под огромной нагрузкой. Следующее мое большое желание - залезть в глубокое машинное обучение (Deep Machine Learning). Я имею в виду именно convolutional neural nets, RNNs, куча слоев, residual nets, нелинейные активационные функции. Работа с картинками-видео-звуком, неструктурированным текстом.

В нашем офисе проектов с Deep ML очень много, но меня останавливала разница в моих навыков и навыками ребят, которые в них работают. Как правило это PhD, читающие статьи с кучей математики за кофе, попутно делая в уме wavelet transforms. Поэтому я не бросился с головой в один из таких проектов, хотя может быть просто была куча других забот (интеграция, изучение языков).

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

Читать дальше →

Problem solving на примере шахматных этюдов

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

Lichess screenshot

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

Просидев несколько вечеров в режиме “вот решу эту задачку и тогда уже точно пойду спать, (решив и получив заряд радости) - ну вот эта точно последняя”, я начал замечать некоторые параллели с рабочими задачами.

Читать дальше →

Управление временем vs. управление энергией

Time AND Energy

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

Но как-то раз я удачно попал на внутренний гугловый класс, где как раз работали с подобными проблемами. Помню слайд про Time Management. Что со временем ничего не сделать, его 24 часа в сутках и все. Но зато есть Energy Management - управление своей энергией. Если сил много, то многое можно сделать быстрее, веселее, лучше. Что толку, что я выкрою час вечером, если “я и без того на работе устаю, у меня еле-еле сил хватает телевизор смотреть” (c).

Читать дальше →

Смена адреса vorushin.ru -> vorushin.github.io

Мне стало сложно оплачивать продление аренды доменного имени из дальнего зарубежья - RBK Money и Yandex Money принимают только карты из некоторых стран СНГ. Поскольку vorushin.ru я использую теперь только для этого блога, то после третьей попытки оплаты через знакомых решил больше не заморачиваться. Примерно через месяц постоянным адресом этого блога будет vorushin.github.io. Уже сейчас работает переадресация. Если читаете блог через агрегатор - пожалуйста обновите ссылку. Прошу прощения за неудобства.

Чем особенна работа в Google

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

Технологии

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

Некоторые технологии становятся доступными как open source, например система билдов bazel или кластер-менеджер kubernetes. Некоторые можно использовать как сервис через Google Cloud. Было бы здорово строить свой стартап с использованием тех же технологии, что и интернет-гиганты.

Читать дальше →

Перемены, за и против.

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

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

Читать дальше →

Интеграция в Швейцарии. Языки.

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

Читать дальше →

Блог переехал на GitHub Pages

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

Прочитать про то, как это сделать, можно найти на сайте GitHub Pages, а посмотреть как у меня сконфигурирован этот сайт можно в git репозитории vorushin.github.io. Вот, например, исходник этого поста.

Мой опыт собеседования в Google

Этим летом я проходил собеседование на роль Software Engineer в Google Zürich. Процесс меня приятно удивил - оказалось, что алгоритмическим задачкам отводится не так уж много времени, а такие важные области как software engineering и software design прорабатываются весьма тщательно.

Читать дальше →

Я работаю в Google Zürich

Я давно не писал статей в этот блог и причиной тому был переезд. Ровно две недели назад мы выехали на нагруженной под завязку машине из Киева на запад. Четыре страны, три дня и 2200 км спустя мы приехали в Цюрих. Я работаю в Google Zürich, а мои девочки осваивают местные детские площадки, зоопарк и прочие гулятельные места.

Читать дальше →

Какой совет я мог бы дать себе 20-летнему?

Вчера по дороге из офиса я думал на тему “Какой совет я мог бы дать себе 20-летнему?”. И вот что у меня получилось:

  1. Развивать возможности своего тела, а не только забирать их

  2. Больше путешествовать, чтобы терять застарелые предрассудки, открывать новые способы думать и находить новые интересные места для жизни

  3. Активно искать умных деятельных людей и общаться с ними, вдохновляясь на развитие и активность в новых для себя областях

А если бы я советовал себе 10-летнему, то первый пункт стоит заменить на “Ищи хорошего учителя боевых искусств”.

Страница: 1 из 5