разработка в гугле
Feb. 11th, 2017 04:59 pmSoftware Engineering at Google (PDF)
Краткое описание того, как устроен процесс работы программистом в Гугле - как хранят исходный код, как устроены системы тестирования, как разные команды работают друг с другом итд.
По-моему все довольно точно описано. Может, стоит добавить, что на практике бывает, что внутри какой-то команды эти принципы работают плохо, или часть из них игнорируют итд. Гугл - большая компания, и в ней бывает всякое. В статье описано, как обычно устроен процесс в нормальной инженерной команде.
Краткое описание того, как устроен процесс работы программистом в Гугле - как хранят исходный код, как устроены системы тестирования, как разные команды работают друг с другом итд.
По-моему все довольно точно описано. Может, стоит добавить, что на практике бывает, что внутри какой-то команды эти принципы работают плохо, или часть из них игнорируют итд. Гугл - большая компания, и в ней бывает всякое. В статье описано, как обычно устроен процесс в нормальной инженерной команде.
Потом как-нибудь почитаю, спасибо.
Date: 2017-02-11 03:39 pm (UTC)no subject
Date: 2017-02-11 04:18 pm (UTC)спасибо
no subject
Date: 2017-02-11 04:36 pm (UTC)А как же JavaScript? А как обстоят дела с функциональными языками?
no subject
Date: 2017-02-11 05:36 pm (UTC)no subject
Date: 2017-02-11 05:42 pm (UTC)no subject
Date: 2017-02-11 05:44 pm (UTC)no subject
Date: 2017-02-11 06:02 pm (UTC)Функциональные языки тут и там используются спорадически их поклонниками, но не более того.
no subject
Date: 2017-02-11 07:33 pm (UTC)Как с этим в гугле? Как они решают эту проблему? Есть ли какие-то стандарты документирования? Есть ли разграничение ответственности между модулями большой программы?
no subject
Date: 2017-02-11 07:39 pm (UTC)no subject
Date: 2017-02-11 08:13 pm (UTC)Что же касается job security through obscurity - с таким я не сталкивался. Наоборот, как правило, стараются делать так, чтобы все (или как можно больше) членов команды имели представление о том, как работает тот или иной кусок кода (и уж точно никто не запутывает код специально).
Гугль - далеко не первое мое место работы, и культура написания кода тут сильно выше, чем во всех предыдущих моих местах работы (ваши старички правы: как правило все именно так плохо, как вы описываете). Я думаю, дело тут примерно наполовину в хорошо налаженной инфраструктуре, описанной в статье выше, а наполовину - в критериях отбора людей.
no subject
Date: 2017-02-11 08:39 pm (UTC)no subject
Date: 2017-02-11 09:29 pm (UTC)Чуть больше десяти лет я работал в Самсунге, одной из их групп в Нью Джерси, так у них не было даже version control system в то время, что было для меня сильным шоком.
Скажите, а что происходит , когда code reviewer, говорит, что ему не нравится конкретный код? Ведь если человек со стороны, то иногда достаточно сложно вникнуть в какие-то тонкости и если в коде нет явных ляпов, то на какие критерии reviewer полагается?
no subject
Date: 2017-02-11 09:33 pm (UTC)no subject
Date: 2017-02-11 09:35 pm (UTC)no subject
Date: 2017-02-11 09:59 pm (UTC)1. Проект на 20% не обязательно должен быть самостоятельным проектом - это может быть вклад в уже имеющийся проект (а это , как правило, проще).
2. Есть способы найти сообщников, и сделать совместный проект, а это веселее, чем в одиночку, шансы на успех повышаются.
3. Дедлайны хоть и есть, но они не такие жесткие - фактически, как правило ожидается, что за пару-тройку кварталов проект дойдет до стадии proof of concept, когда его можно будет показать начальству, и выбить под него head count (после чего он уже не является проектом на 20%).
no subject
Date: 2017-02-11 10:10 pm (UTC)no subject
Date: 2017-02-11 10:31 pm (UTC)https://developers.google.com/closure/
но многие пользуются только js-компилятором оттуда, а не библиотекой Closure (которая по-моему отстала от современных фреймворков во многом). Многие пользуются Angular, есть еще несколько внутренних фреймворков, которые сделали разные команды. Кто-то и на jQuery фигачит.
Взгляд со стороны
Date: 2017-02-11 11:24 pm (UTC)Вон там ниже пишут «А еще есть Андроид где все совсем по-другому».
no subject
Date: 2017-02-11 11:41 pm (UTC)no subject
Date: 2017-02-11 11:56 pm (UTC)no subject
Date: 2017-02-11 11:57 pm (UTC)no subject
Date: 2017-02-12 12:34 am (UTC)Далее, у нас есть культура довольно придирчивых reviews. Совершенно нормально с точки зрения reviewer'а указать не только на ошибки или баги, но и на места, которые следует по его мнению прокомментировать, рефакторнуть, добавить юнит-тестов или вообще написать по-другому. Автор кода не обязан соглашаться и может отстаивать свою точку зрения, но обычно, если нет с его зрения серьезных причин не делать то, что предлагает reviewer, он это делает. Примеры совершенно обычных комментариев, которые я получаю или сам посылаю в code reviews:
- эту кусок кода стоит выделить в отдельную функцию
- этот класс не должен иметь доступа к этой информации, предлагаю изменить деление на классы таким-то образом
- мне не нравится это имя, по аналогии с таким-то кодом лучше назвать этот класс так-то
- добавь юнит-тесты для таких-то и таких-то случаев
- если уж ты проверяешь такой-то сценарий, то давай заодно проверять и такой-то
В итоге обмена комментариями автора и reviewer'а в идеальном случае получается код, который reviewer тоже хорошо понимает и может при необходимости легко продолжить над ним работу дальше. На практике reviewer может положиться на то, что автор понимает, что делает в определенных местах, особенно если речь идет о вызове каких-то других библиотек или API, с которыми reviewer незнаком. Но структура кода в целом и причина, почему написано так, а не иначе, ему обычно понятна.
no subject
Date: 2017-02-12 01:27 am (UTC)no subject
Date: 2017-02-12 01:53 am (UTC)no subject
Date: 2017-02-12 04:06 am (UTC)no subject
Date: 2017-02-12 04:40 am (UTC)no subject
Date: 2017-02-12 09:55 am (UTC)> Most of Google’s code is stored in a single unified source-code repository
Какой смысл держать большой общий архив для групп без общего кода вообще ?
> Almost all development occurs at the “head” of the repository
как так можно жить в огромном архиве без бранчей? группа А изменяет библиотеку для группы Б; если группа А поломала свою библиотеку так все пользователи горько плачут. Как быть с промежуточной итеграцией которая затрагивает результаты разных групп? так вроде невозможно откатать архив даже ?
> Most software at Google gets rewritten every few years
звучит очень странно. Это верно для Chrome и Android тоже ?
Еще концептуальный вопрос: когда Гугл подавится количеством данных которые он собирает на всех своих пользователей, в том смысле что будет невозможно извлечь информацию которая определяет интересы / профиль пользователя? Вот я задаю кучу запросов поиска на разные темы и хром посылает обратно домой все сайты по котрым я хожу: как Гугл вообще может подытожить чем я интересуюсь, когда я это сам не знаю?
no subject
Date: 2017-02-12 10:17 am (UTC)В отдельных случаях группы держат свой код в отдельной репозитории, главные примеры этого - Chrome и Android, как указано в статье. Другой пример из тех, что не упомянуты - репозитория группы, которая работает над гуглевскими изменениями в ядре Линукса.
>как так можно жить в огромном архиве без бранчей?
Бранчи есть и используются, но главным образом как для рилизов. Есть группы, которые всю свою разработку ведут на бранче и время от времени синхронизируются с HEAD, но это исключение, а не правило.
>группа А изменяет библиотеку для группы Б; если группа А поломала свою библиотеку так все пользователи горько плачут.
Повсеместное использование юниттестов и presubmit-проверок означает, что библиотеки, которыми пользуются другие группы, редко оказываются сломанными в HEAD. Типичная presubmit-проверка запускает автоматически в специальном тестовом облаке все юнит-тесты кода, который зависит от любых файлов, измененных в данном сабмите. Не всегда это помогает, потому что в зависимости от тяжести и изолированности данной библиотеки ее использование в другом коде может быть mocked out, но в таких случаях библиотека сама обычно имеет обширные юнит-тесты, которые проверяют ее поведение.
Очень многие группы, возможно, большинство, имеют также ежедневные автоматические интеграционные тесты которые строятся из HEAD, и посылают мейл если что-то не проходит проверку.
Вдобавок ко всему вышеупомянутому небольшое количество особенно важных базовых библиотек обновляются не все время, а каждую неделю-две, организованными рилизами; при этом их разработка все равно идет в HEAD, но сделано так, что код, который их использует, по умолчанию видит версию последнего рилиза (сидящую тут же, в общей репозитории).
>Как быть с промежуточной итеграцией которая затрагивает результаты разных групп? так вроде невозможно откатать архив даже ?
Этот вопрос не очень понял.
no subject
Date: 2017-02-12 10:38 am (UTC)>Этот вопрос не очень понял.
Группа А хочет поделится промежуточным результатом с группой Б; посредством отдельного бранча можно поделится промежуточным результатом не затрагивая главный бранч.
no subject
Date: 2017-02-12 10:53 am (UTC)- если это настолько сырой код, что он не проходит тесты или не отвечает стандартам и его нельзя сабмитить в HEAD, то делиться им с группой Б преждевременно. В исключительных случаях нет проблемы сказать человеку: нужное тебе находится в CL (ChangeList) номер 12345678, он еще в разработке, но если тебе очень нужно его попробовать, можешь его клонировать и локально у себя построить свой проект с его участием.
- если это готовый для сабмита промежуточный результат и какой-то совершенно новый код (новые функции, новые RPC), то нет проблем сабмитить его в HEAD и пусть группа Б им пользуется, а другие пока нет, потому что просто не знают о нем. При желании есть возможность не дать другим группам линковаться с этим кодом, но этим редко пользуются (этим чаще пользуются для кода, который должен быть внутренним и не предназначен для вызова другими группами).
- если эта работа означает, что вызовы уже существующих функций или уже существующие RPC ведут себя по-другому, но нет возможности или желания перейти на новое поведение для всех сразу, то нужно разграничить эти два поведения, чтобы не было неприятных сюрпризов ни у кого. Это делается одним из стандартных способов: флаг командной строки, или новая опция в структуре запроса RPC, дефолтное состояние которой означает старое поведение, или новый аргумент к функции итд.
Предложенный способ - специальный бранч для группы Б - технически можно провернуть, но это очень анти-паттерновое поведение, если так и поступают, то очень редко.
Не совсем про Гугль
Date: 2017-02-12 02:25 pm (UTC)https://youtu.be/RU8mFmhcz-s
no subject
Date: 2017-02-12 03:36 pm (UTC)no subject
Date: 2017-02-12 04:53 pm (UTC)no subject
Date: 2017-02-12 10:34 pm (UTC)no subject
Date: 2017-02-12 10:50 pm (UTC)no subject
Date: 2017-02-15 09:00 am (UTC)no subject
Date: 2017-02-16 12:29 am (UTC)no subject
Date: 2017-02-16 11:42 am (UTC)no subject
Date: 2017-02-16 06:33 pm (UTC)В Оракле категорически нет. source code is strictly confidential, access provided on "need-to-have" basis.
> Each subtree of the repository can have a file listing the user ids of the “owners” of that subtree.
Что с массовыми увольнениями? Уход команды, добровольный или нет, осиротит поддерево?
> Individual build steps must be “hermetic”: they depend only on their declared inputs.
> Individual build steps are deterministic.
О. Неужели нету "этот код написал 20 лет назад священными предками и собирается только при данных танцах. Менять не смей, ибо может вообще больше никогда не собраться"? Круто.
> Most software at Google gets rewritten every few years. Rewriting code cuts away all the unnecessary accumulated complexity that was addressing requirements which are no longer so important.
Завидую. "А это вот делаем через жопу, потому что иначе оно не работает на Солярисе 8, а нам еще епонцы за него платят"
no subject
Date: 2017-02-26 04:51 am (UTC)no subject
Date: 2017-03-11 08:34 pm (UTC)no subject
Date: 2017-03-12 08:38 am (UTC)no subject
Date: 2017-03-13 08:43 am (UTC)Я думал там как-то особо натаскивают писать клин код.