Главная страница
Навигация по странице:

  • ЧАСТЬ IV . ИНСТРУМЕНТЫ ...................................................................... 321 Глава 16.

  • ЧАСТЬ V. ЗАКЛЮЧЕНИЕ ......................................................................... 539

  • Об обложке ......................................................................................................... 543 Предисловие

  • Программирование в долгосрочной перспективе

  • Заключительные примечания

  • Что такое программная инженерия

  • Инженерия равенства

  • Оценка продуктивности инженеров

  • Правила и руководства по стилю

  • Тестирование с дублерами

  • Устаревание

  • Critique: инструменты обзора кода в Google

  • Управление зависимостями

  • Непрерывная интеграция

  • Том Маншрек (Tom Manshreck)

  • Хайрам Райт (Hyrum Wright)

  • Делай как вGoogle


    Скачать 5.77 Mb.
    НазваниеДелай как вGoogle
    Дата31.05.2022
    Размер5.77 Mb.
    Формат файлаpdf
    Имя файлаDelay_kak_v_Google_Razrabotka_programmnogo_obespechenia_2021_Tom.pdf
    ТипДокументы
    #559735
    страница2 из 69
    1   2   3   4   5   6   7   8   9   ...   69
    Глава 10. Документация ............................................................................................ 186
    Что считается документацией? .............................................................................. 186
    Зачем нужна документация? .................................................................................. 187
    Документация как код ........................................................................................... 188
    Знание своей аудитории ........................................................................................ 190
    Виды документации ............................................................................................... 192
    Обзоры документации ........................................................................................... 199
    Философия документирования .............................................................................. 201
    Когда привлекать технических писателей? ............................................................ 204
    Заключение ........................................................................................................... 204
    Итоги ..................................................................................................................... 205
    Глава 11. Основы тестирования ................................................................................ 206
    Почему мы пишем тесты? ...................................................................................... 207
    Проектирование набора тестов ............................................................................. 213
    Тестирование в масштабе Google .......................................................................... 222
    История тестирования в Google ............................................................................. 224
    Ограничения автоматизированного тестирования ................................................. 228
    Заключение ........................................................................................................... 229
    Итоги ..................................................................................................................... 230
    Глава 12. Юнит-тестирование ................................................................................... 231
    Важность удобства сопровождения ....................................................................... 232
    Как предотвратить хрупкие тесты.......................................................................... 232
    Создание ясных тестов .......................................................................................... 239
    Повторное использование тестов и кода: DAMP, не DRY ........................................ 247
    Заключение ........................................................................................................... 254
    Итоги ..................................................................................................................... 255
    Глава 13. Тестирование с дублерами ........................................................................ 256
    Влияние тестовых дублеров на разработку ПО ...................................................... 256
    Тестовые дублеры в Google ................................................................................... 257
    Базовые понятия ................................................................................................... 258

    10
    Оглавление
    Приемы использования тестовых дублеров ........................................................... 261
    Реальные реализации ............................................................................................ 263
    Имитации .............................................................................................................. 267
    Заглушки ............................................................................................................... 271
    Тестирование взаимодействий .............................................................................. 273
    Заключение ........................................................................................................... 278
    Итоги ..................................................................................................................... 278
    Глава 14. Крупномасштабное тестирование .............................................................. 279
    Что такое большие тесты? ..................................................................................... 279
    Большие тесты Google ........................................................................................... 284
    Структура большого теста ..................................................................................... 287
    Типы больших тестов ............................................................................................ 294
    Большие тесты и рабочий процесс разработчика ................................................... 302
    Заключение ........................................................................................................... 307
    Итоги ..................................................................................................................... 307
    Глава 15. Устаревание .............................................................................................. 308
    Почему необходимо заботиться об устаревании? ................................................... 309
    Почему устаревание вызывает такие сложности? .................................................. 310
    Подходы к прекращению поддержки ..................................................................... 313
    Управление процессом прекращения поддержки ................................................... 316
    Заключение ........................................................................................................... 319
    Итоги ..................................................................................................................... 320
    ЧАСТЬ IV. ИНСТРУМЕНТЫ ...................................................................... 321
    Глава 16. Управление версиями и ветвями ............................................................... 322
    Что такое управление версиями? ........................................................................... 322
    Управление ветвями .............................................................................................. 331
    Управление версиями в Google .............................................................................. 335
    Монолитные репозитории ...................................................................................... 340
    Будущее управления версиями .............................................................................. 342
    Заключение ........................................................................................................... 344
    Итоги ..................................................................................................................... 345

    Оглавление
    11
    Глава 17. Code Search ............................................................................................... 346
    Пользовательский интерфейс Code Search ............................................................. 347
    Как гуглеры используют Code Search? ................................................................... 348
    Зачем понадобился отдельный веб-инструмент? ................................................... 350
    Влияние масштаба на дизайн ................................................................................ 353
    Реализация в Google .............................................................................................. 356
    Некоторые компромиссы ....................................................................................... 361
    Заключение ........................................................................................................... 365
    Итоги ..................................................................................................................... 365
    Глава 18. Системы и философия сборки ................................................................... 366
    Назначение системы сборки .................................................................................. 366
    Так ли необходимы системы сборки? ..................................................................... 367
    Современные системы сборки ................................................................................ 370
    Модули и зависимости ........................................................................................... 386
    Заключение ........................................................................................................... 392
    Итоги ..................................................................................................................... 393
    Глава 19. Critique: инструмент обзора кода в Google ................................................. 394
    Принципы оснащения обзора кода инструментами ................................................ 394
    Процесс обзора кода ............................................................................................. 395
    Этап 1: добавление изменений .............................................................................. 397
    Этап 2: запрос на рецензирование ........................................................................ 401
    Этапы 3 и 4: исследование и комментирование изменения .................................... 403
    Этап 5: одобрение изменений (оценка изменений) ................................................ 406
    Этап 6: фиксация изменения ................................................................................. 408
    Заключение ........................................................................................................... 409
    Итоги ..................................................................................................................... 410
    Глава 20. Статический анализ ................................................................................... 411
    Характеристики эффективного статического анализа ............................................ 411
    Ключевые уроки внедрения статического анализа ................................................ 413
    Tricorder: платформа статического анализа в Google ............................................. 415
    Заключение ........................................................................................................... 422
    Итоги ..................................................................................................................... 422

    12
    Оглавление
    Глава 21. Управление зависимостями ....................................................................... 424
    Почему управлять зависимостями так сложно? ...................................................... 425
    Импортирование зависимостей .............................................................................. 428
    Теория управления зависимостями ........................................................................ 433
    Ограничения SemVer ............................................................................................. 438
    Управление зависимостями с бесконечными ресурсами ......................................... 443
    Заключение ........................................................................................................... 450
    Итоги ..................................................................................................................... 450
    Глава 22. Крупномасштабные изменения .................................................................. 452
    Что такое крупномасштабное изменение? ............................................................. 452
    Кто занимается крупномасштабными изменениями? .............................................. 454
    Препятствия к атомарным изменениям .................................................................. 456
    Инфраструктура для крупномасштабных изменений .............................................. 461
    Процесс крупномасштабных изменений ................................................................. 465
    Заключение ........................................................................................................... 471
    Итоги ..................................................................................................................... 471
    Глава 23. Непрерывная интеграция .......................................................................... 472
    Идеи непрерывной интеграции .............................................................................. 474
    Непрерывная интеграция в Google ........................................................................ 487
    Заключение ........................................................................................................... 496
    Итоги ..................................................................................................................... 496
    Глава 24. Непрерывная поставка .............................................................................. 497
    Идиомы непрерывной поставки в Google ............................................................... 498
    Скорость — это командная победа: как разделить процесс развертывания на управляемые этапы .......................................................................................... 499
    Оценка изменений в изоляции: флаги управления функциями .............................. 500
    Стремление к гибкости: создание серии выпусков ................................................. 501
    Качество и ориентация на пользователя: поставляйте только то, что используется ................................................................................................... 503
    Сдвиг влево: раннее принятие решений на основе данных .................................... 504
    Изменение культуры команды: дисциплина развертывания ................................... 506
    Заключение ........................................................................................................... 507
    Итоги ..................................................................................................................... 507

    Оглавление
    13
    Глава 25. Вычисления как услуга .............................................................................. 509
    Приручение вычислительной среды ...................................................................... 510
    Написание ПО для управляемых вычислений ........................................................ 515
    CaaS во времени и масштабе ................................................................................. 522
    Выбор вычислительной услуги ............................................................................... 528
    Заключение ........................................................................................................... 537
    Итоги ..................................................................................................................... 538
    ЧАСТЬ V. ЗАКЛЮЧЕНИЕ ......................................................................... 539
    Послесловие ........................................................................................................ 540
    Об авторах ........................................................................................................... 542
    Об обложке ......................................................................................................... 543

    Предисловие
    Я всегда восхищался тем, как в Google все устроено, и мучил своих друзей-гугле- ров (сотрудников Google) расспросами. Как им удается поддерживать такое огромное монолитное хранилище кода? Как десятки тысяч инженеров согласованно работают в тысячах проектов? Как они поддерживают качество систем?
    Сотрудничество с «экс-гуглерами» только усилило мое любопытство. Если в одной команде с вами работает бывший инженер Google, вы будете часто слышать: «А вот мы в Google...» Переход из Google в другие компании кажется шокирующим опытом, по крайней мере для инженера. Человек со стороны считает системы и процессы разработки кода в Google одними из лучших в мире, учитывая масштаб компании и то, как часто люди хвалят ее.
    В книге «Разработка ПО. Делай как в Google» группа гуглеров (и экс-гуглеров) раскрывает обширный набор практик, инструментов и даже культурных аспектов, лежащих в основе программной инженерии в Google. Но эта книга не ограничива- ется простым описанием инструментария (о котором можно говорить бесконечно) и дополнительно описывает философию команды Google, которая помогает сотруд- никам адаптироваться к разным обстоятельствам. К моему восхищению, несколько глав книги посвящены автоматизированному тестированию, которое продолжает встречать активное сопротивление в отрасли.
    Самое замечательное в программной инженерии — это возможность добиться желаемо- го результата несколькими способами. В каждом проекте инженер должен учитывать множество компромиссов. Что можно заимствовать из открытого исходного кода? Что может спроектировать команда? Что имеет смысл поддерживать для масштаба? У своих друзей-гуглеров я хотел узнать, как устроен гигантский мир Google, богатый таланта- ми и средствами и отвечающий высочайшим требованиям к программному обеспече- нию (ПО). Их разнообразные ответы познакомили меня с неожиданными аспектами.
    В этой книге изложены эти аспекты. Конечно, Google — уникальная компания, и не- верно считать ее способ управления разработкой ПО единственно верным. Цель этой книги — помочь вам организовать работу и аргументировать принятие решений, свя- занных с тестированием, обменом знаниями и совместной деятельностью в команде.
    Возможно, вам никогда не придется создавать свой Google и вы не захотите исполь- зовать методы этой компании. Но, отказавшись от знакомства с практиками, разра- ботанными в Google, вы лишите себя богатого опыта, накопленного десятками тысяч инженеров, совместно работающих над разработкой софта более двух десятилетий.
    Это знание слишком ценно, чтобы закрывать на него глаза.
    Камиль Фурнье,
    автор книги «От разработчика до руководителя» (М.: МИФ, 2018)

    Вступление
    Что именно мы подразумеваем под программной инженерией? Что отличает «про- граммную инженерию» от «программирования» или «computer science»? И как под- ход Google связан с другими подходами в этой области, описанными во множестве книг в последние пятьдесят лет?
    Термины «программирование» и «программная инженерия» используются в отрасли взаимозаменяемо, хотя каждый из них имеет собственное значение. Студенты уни- верситетов, как правило, изучают computer science и работают как «программисты».
    Но «инженерия» подразумевает применение теоретических знаний для создания чего-то реального и точного. Инженеры-механики, инженеры-строители, авиа- ционные инженеры и специалисты в других инженерных дисциплинах — все они занимаются инженерным делом: используют теоретические знания для создания чего-то реального. Инженеры-программисты также создают «нечто реальное», но это «нечто» неосязаемо.
    В отличие от других инженерных сфер, программная инженерия более открыта для вариантов. Авиационные инженеры должны следовать стандартам, поскольку ошиб- ки в их расчетах могут нанести реальный ущерб. Программирование традиционно не имеет жестких ограничений, но, поскольку ПО интегрируется в нашу жизнь, мы должны определить и использовать более надежные методы его разработки.
    Надеемся, что эта книга поможет вам увидеть путь к созданию современного ПО.
    Программирование в долгосрочной перспективе
    На наш взгляд, программная инженерия охватывает не только написание кода, но и все инструменты и процессы создания и дальнейшей поддержки этого кода. Какие методики может внедрить организация, занимающаяся разработкой ПО, чтобы со- хранять ценность кода в долгосрочной перспективе? Как инженеры могут сделать кодовую базу более устойчивой, а саму дисциплину программной инженерии более строгой? У нас нет конкретных ответов на эти вопросы, но мы надеемся, что команд- ный опыт Google, накопленный за последние два десятилетия, поможет нам их найти.
    Одна из ключевых идей, которой мы делимся в этой книге, заключается в том, что программную инженерию можно рассматривать как «программирование, интегри- рованное во времени». Какие практики сделают код устойчивым — способным реа- гировать на изменения — в течение его жизненного цикла (от проекта его создания и внедрения до его устаревания)?
    В этой книге подчеркиваются три фундаментальных принципа, которые, по нашему мнению, следует учитывать при проектировании, разработке и написании кода.

    16
    Вступление
    Время и изменения
    Как код должен адаптироваться на протяжении срока действия.
    Масштаб и рост
    Как организация должна адаптироваться по мере своего развития.
    Компромиссы и издержки
    Как организация должна принимать решения, основываясь на показателях вре- мени, изменений, масштаба и роста.
    В книге мы часто будем возвращаться к этим принципам и показывать, как они вли- яют на инженерные практики и обеспечивают их устойчивость. (Полное обсуждение этих принципов смотрите в главе 1.)
    Точка зрения Google
    В компании Google сложился свой уникальный взгляд на рост и развитие устойчивого
    ПО, основанный на его масштабе и долговечности. Надеемся, что уроки, которые мы извлекли, найдут отражение и в вашей компании, которая тоже развивается и ис- пользует все более устойчивые практики.
    Темы, обсуждаемые в этой книге, мы разделили на три основных аспекта ландшафта программной инженерии, сложившихся в Google:
    y культура;
    y процессы;
    y инструменты.
    Культура Google уникальна, но опыт, который мы получили, изучая ее, широко при- меним. В главах, посвященных культуре (часть II), мы подчеркнули коллективный характер разработки ПО и необходимость культуры сотрудничества для развития организации и сохранения ее эффективности.
    Методики, описанные в части III «Процессы», знакомы большинству инженеров-про- граммистов, но мы отметили, что большой размер кодовой базы Google и долгий срок ее действия обеспечивают надежную основу для выработки оптимальных практик.
    Мы научились учитывать время и масштаб, а также определили области, где у нас пока нет удовлетворительных ответов.
    Наконец, в части IV «Инструменты» мы использовали инвестиции в инфраструк- туру инструментов, чтобы получить дополнительные преимущества по мере роста и устаревания кодовой базы. Некоторые из этих инструментов специфичны для
    Google, но по возможности мы даем ссылки на их альтернативы. Мы полагаем, что основные идеи с успехом можно применять в большинстве инженерных организаций.
    Культура, процессы и инструменты, представленные в этой книге, описывают уроки, которые типичный инженер-программист извлекает в процессе работы. Конечно,
    Google не обладает монополией на полезные советы, и мы делимся своим опытом

    Условные обозначения
    17
    не для того, чтобы диктовать вам правила. Эта книга — наша точка зрения, и мы на- деемся, что вы найдете ее полезной и сможете применять наш опыт непосредственно или использовать его в качестве отправной точки при выработке своих практик, специфичных для вашей предметной области.
    Также эта книга не является учебником. В самой компании Google по-прежнему недостаточно эффективно применяются многие идеи, представленные здесь. Наш опыт является результатом наших неудач: мы все еще допускаем ошибки, внедряем несовершенные решения и должны последовательно улучшать код. Тем не менее огромный размер Google гарантирует существование множества решений для каждой проблемы. Мы надеемся, что в этой книге нам удалось собрать самые лучшие из них.
    Что не отражено в книге
    Эта книга не охватывает вопросы проектирования ПО (собранная по этой теме ин- формация заслуживает отдельной книги). Мы привели некоторый код, но только для примера, чтобы показать основные принципы, которые не зависят от языка, и в этих главах практически нет рекомендаций по «программированию». Также эта книга не охватывает многих важных вопросов, касающихся разработки ПО, таких как управление проектами, разработка API, усиление безопасности, интернациона- лизация, применение фреймворков пользовательского интерфейса и других проблем, связанных с конкретным языком программирования. Мы решили оставить эти темы в стороне, понимая, что не сможем раскрыть их в достаточной степени, и уделили больше внимания инженерии, а не программированию.
    Заключительные примечания
    Эта книга является результатом совместных усилий и должна послужить окном в мир программной инженерии крупной организации, создающей свои продукты. Надеемся, что вместе с другими источниками она поможет нашей отрасли внедрять наиболее передовые и устойчивые практики. Но самое главное, мы хотим, чтобы книга вам понравилась и вы взяли на вооружение некоторые из представленных здесь уроков.
    Том Маншрек
    Условные обозначения
    В этой книге приняты следующие обозначения:
    Курсив
    Используется для обозначения новых терминов.
    Моноширинный шрифт
    Применяется для оформления листингов программ и программных элементов внутри обычного текста, таких как имена переменных и функций, баз данных, типов данных, переменных окружения, инструкций и ключевых слов.

    18
    Вступление
    Так обозначаются советы, предложения и примечания общего характера.
    Благодарности
    Эта книга является результатом труда множества людей. Все представленное здесь является квинтэссенцией знаний, накопленных нами и другими сотрудниками Google за долгие годы. Мы лишь передаем вам опыт, которым поделились с нами старшие коллеги из Google и других компаний. Перечислить их всех трудно, но мы выражаем им свою благодарность.
    Также мы благодарим Мелоди Мекфессель (Melody Meckfessel) за поддержку этого проекта на начальном этапе, а также Дэниела Джаспера (Daniel Jasper) и Дэнни
    Берлина (Danny Berlin) за помощь в его завершении.
    Эта книга была бы невозможна без колоссальных совместных усилий наших курато- ров, авторов и редакторов. Авторы и редакторы указаны в каждой главе или врезке, а здесь мы отметим всех, кто внес вклад в каждую главу, участвуя в обсуждении и подготовке к печати.
    y
    Что такое программная инженерия? Санджай Гемават (Sanjay Ghemawat), Эндрю
    Хаятт (Andrew Hyatt).
    y
    Успешная работа в команде: Сибли Бэкон (Sibley Bacon), Джошуа Мортон
    (Joshua Morton).
    y
    Обмен знаниями: Дмитрий Глазков, Кайл Лимонс (Kyle Lemons), Джон Риз (John
    Reese), Дэвид Симондс (David Symonds), Эндрю Тренк (Andrew Trenk), Джеймс
    Такер (James Tucker), Дэвид Колбреннер (David Kohlbrenner), Родриго Дамацио
    Бовендорп (Rodrigo Damazio Bovendorp).
    y
    Инженерия равенства: Камау Бобб (Kamau Bobb), Брюс Ли (Bruce Lee).
    y
    Как стать лидером в команде: Джон Уили (Jon Wiley), Лоран Ле Брун (Laurent
    Le Brun).
    y
    Масштабируемое лидерство: Брайан О’Салливан (Bryan O’Sullivan), Бха- рат Медиратта (Bharat Mediratta), Дэниел Джаспер (Daniel Jasper), Шайндел
    Шварц (Shaindel Schwartz).
    y
    Оценка продуктивности инженеров: Андреа Найт (Andrea Knight), Коллин
    Грин (Collin Green), Кетлин Садовски (Caitlin Sadowski), Макс-Канат Алексан- дер (Max-Kanat Alexander), Илай Янг (Yilei Yang).
    y
    Правила и руководства по стилю: Макс-Канат Александер (Max-Kanat Alexander),
    Титус Винтерс (Titus Winters), Мэтт Аустерн (Matt Austern), Джеймс Деннетт
    (James Dennett).

    Благодарности
    19
    y
    Код-ревью: Макс-Канат Александер (Max-Kanat Alexander), Брайан Ледгер
    (Brian Ledger), Марк Баролак (Mark Barolak).
    y
    Документация: Йонас Вагнер (Jonas Wagner), Смит Хинсу (Smit Hinsu), Джеф- фри Ромер (Geoffrey Romer).
    y
    Основы тестирования: Эрик Куфлер (Erik Kufler), Эндрю Тренк (Andrew Trenk),
    Диллон Блай (Dillon Bly), Джозеф Грейвс (Joseph Graves), Нил Норвитц (Neal
    Norwitz), Джей Корбетт (Jay Corbett), Марк Стрибек (Mark Striebeck), Брэд
    Грин (Brad Green), Мишко Хевери (Mi
    ško Hevery), Антуан Пикар (Antoine Picard),
    Сара Сторк (Sarah Storck).
    y
    Юнит-тестирование: Эндрю Тренк (Andrew Trenk), Адам Бендер (Adam Bender),
    Диллон Блай (Dillon Bly), Джозеф Грейвс (Joseph Graves), Титус Винтерс (Titus
    Winters), Хайрам Райт (Hyrum Wright), Оги Факлер (Augie Fackler).
    y
    Тестирование с дублерами: Джозеф Грейвс (Joseph Graves), Геннадий Цивил
    (Gennadiy Civil).
    y
    Крупномасштабное тестирование: Адам Бендер (Adam Bender), Эндрю Тренк
    (Andrew Trenk), Эрик Кюфлер (Erik Kuefler), Мэтью Бомонт-Гай (Matthew
    Beaumont-Gay).
    y
    Устаревание: Грег Миллер (Greg Miller), Энди Шульман (Andy Shulman).
    y
    Управление версиями и ветвями: Рейчел Потвин (Rachel Potvin), Виктория
    Кларк (Victoria Clarke).
    y
    Code Search: Дженни Ван (Jenny Wang).
    y
    Системы и философия сборки: Хайрам Райт (Hyrum Wright), Титус Винтерс
    (Titus Winters), Адам Бендер (Adam Bender), Джефф Кокс (Jeff Cox), Жак Пие- наар (Jacques Pienaar).
    y
    Critique: инструменты обзора кода в Google: Миколай Додела (Miko
    łaj Dądela),
    Герман Луз (Hermann Loose), Ева Мэй (Eva May), Элис Кобер-Соцек (Alice
    Kober-Sotzek), Эдвин Кемпин (Edwin Kempin), Патрик Хизель (Patrick Hiesel),
    Оле Ремсен (Ole Rehmsen), Ян Мацек (Jan Macek).
    y
    Статический анализ: Джеффри ван Гог (Jeffrey van Gogh), Сиера Джаспан (Ciera
    Jaspan), Эмма Седерберг (Emma S
    öderberg), Эдвард Афтандилиан (Edward
    Aftandilian), Коллин Винтер (Collin Winter), Эрик Хо (Eric Haugh).
    y
    Управление зависимостями: Расс Кокс (Russ Cox), Николас Данн (Nicholas
    Dunn).
    y
    Крупномасштабные изменения: Мэтью Фаулз Кулукундис (Matthew Fowles
    Kulukundis), Адам Зарек (Adam Zarek).
    y
    Непрерывная интеграция: Джефф Листфилд (Jeff Listfield), Джон Пеникс (John
    Penix), Каушик Шридхаран (Kaushik Sridharan), Санджив Дханда (Sanjeev
    Dhanda).

    20
    Вступление y
    Непрерывная поставка: Дэйв Оуэнс (Dave Owens), Шери Шипе (Sheri Shipe),
    Бобби Джонс (Bobbi Jones), Мэтт Дафтлер (Matt Duftler), Брайан Шутер (Brian
    Szuter).
    y
    Вычисления как услуга: Тим Хокин (Tim Hockin), Коллин Винтер (Collin Winter),
    Ярек Кузьмиерек (Jarek Ku
    śmierek).
    Также мы хотим поблагодарить Бетси Бейер за то, что поделилась опытом работы над книгой «Site Reliability Engineering. Надежность и безотказность как в Google»
    1
    Спасибо Кристоферу Гузиковски (Christopher Guzikowski) и Алисии Янг (Alicia
    Young) из O'Reilly, которые запустили наш проект и довели его до публикации.
    Кураторы также хотели сказать отдельное спасибо:
    Том Маншрек (Tom Manshreck): «Маме и папе за то, что помогли мне поверить в себя и решали со мной домашние задания за обеденным столом».
    Титус Винтерс (Titus Winters): «Папе за мой путь. Маме — за мой голос. Виктории — за мое сердце. Рафу — за мою спину. А также мистеру Снайдеру, Ранве, Зеду (Z),
    Майку, Заку, Тому и всем Пейнам, Меку (mec), Тоби, Кгд (cgd) и Мелоди за уроки, наставничество и доверие».
    Хайрам Райт (Hyrum Wright): «Маме и папе за поддержку. Брайану и завсегдатаям
    Бейкерленда за мое первое погружение в мир ПО. Дюэйну (Dewayne) за продолже- ние этого путешествия. Ханне, Джонатану, Шарлотте, Спенсеру и Бену за их дружбу и интерес. Хизер за то, что все это время была рядом».
    От издательства
    Ваши замечания, предложения, вопросы отправляйте по адресу comp@piter.com
    (издательство «Питер», компьютерная редакция).
    Мы будем рады узнать ваше мнение!
    На веб-сайте издательства www.piter.com вы найдете подробную информа цию о на- ших книгах.
    1
    Бейер Б., Джоунс К., Петофф Д., Мёрфи Н. Р. Site Reliability Engineering. Надежность и без- отказность как в Google. СПб.: Питер, 2021. 592 с.: ил.

    1   2   3   4   5   6   7   8   9   ...   69


    написать администратору сайта