<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>Книги</title>
    <description>Лучшие книги для программистов разных направлений и уровней. В рубрике представлены как бесплатные книги по разработке, так и те, которые можно только купить.</description>
    <link>https://tproger.ru/books</link>
    <atom:link href="https://tproger.ru/books/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Sun, 04 Oct 2026 00:18:31 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Книги</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>8 необычных книг для C++ разработчика</title>
      <link>https://tproger.ru/books/8-neobychnyh-knig-dlja-c-razrabotchika</link>
      <comments>https://tproger.ru/books/8-neobychnyh-knig-dlja-c-razrabotchika?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Екатерина Войнова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/8-neobychnyh-knig-dlja-c-razrabotchika</guid>
      <description><![CDATA[<p>Первые пять книг — в большей степени об осознанности деятельности C++. Остальные — «золотой фонд» классической литературы C++ разработчиков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/8-neobychnyh-knig-dlja-c-razrabotchika">8 необычных книг для C++ разработчика</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Гостевая публикация]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 08 Aug 2022 11:48:47 GMT</pubDate>
      <content:encoded><![CDATA[<p>Повышая градус ответственности за миллисекунды алгоритмов или чистоту архитектуры, лиды ужимают значимость способов мышления. И никакие метрики производства не показывают шоры у самого синьерного синьера.</p><p>Первые пять книг этой подборки — в меньшей степени про технику, в большей степени об осознанности деятельности C++ программистов любого уровня. Остальные — «золотой фонд» классической литературы для C++ разработчиков.</p><p>В этой книге человеческий мозг представлен как определенный механизм, выполняющий заданные алгоритмы, а наши эмоции — как еще один способ мышления, включающийся для решения конкретных задач.</p><p>Здесь собрано много занимательной информации про искусственный интеллект и достижения человечества в этой сфере. Книга располагает к тому, чтобы покопаться в себе, вникнуть в природу своих эмоций.</p><p>Достоинства:</p><ul><li>сложные вещи написаны простым языком;</li><li>интересная теория формирования эмоций.</li></ul><p>Недостатки:</p><ul><li>много отсылок к соседним главам в тексте.</li></ul><p>Книга написана популярным блогером-миллионником. Беккер легко и доступно рассказывает, как мы захламляем свои шкафы, мысли и жизни, и как от всего этого аккуратно освободиться.</p><p>Продвижение философии минимализма придется по душе многим читателям, ведь это одно из самых популярных направлений в наше время. Казалось бы, что нового можно сказать о минимализме? И так все понятно.</p><p>Однако в этой книге каждый точно найдет что-то полезное для себя.</p><p>Достоинства:</p><ul><li>каждый узнает в этой книге себя;</li><li>вдохновляет на очищение и расхламление;</li><li>много примеров из жизни.</li></ul><p>Недостатки:</p><ul><li>в начале кажется нудновато;</li><li>почти на каждой странице упоминается религия, это уводит от темы.</li></ul><p>Атомарный дизайн — методология Брэда Фроста, в соответствии с которой интерфейс делится на простейшие компоненты. Суть метода в том, что дизайн начинает создаваться с мелких частиц, своего рода атомов — шрифта, полей, рамок и так далее. То есть начинаем строить интерфейс с мелочей и постепенно объединяем их в систему.</p><p>Таким образом, получаем возможность использовать какие-то части дизайна повторно, а также комбинировать их или подвергать изменениям. Это универсальный подход: подавляющее большинство дизайнеров уже давно используют принципы «Атомарного дизайна».</p><p>Правда, методики у всех разные, каждый вносит свои изменения и адаптирует под свой проект.</p><p>Книга написана в интересном стиле, все объясняется на простейших примерах, то есть формат подачи информации доступен для каждого. Да, много специфических терминов, но каждый из них расшифровывается, важные моменты выделяются тезисно, что помогает разложить все в голове по полочкам.</p><p>Достоинства:</p><ul><li>простая подача информации;</li><li>тезисное выделение важных моментов.</li></ul><p>Недостатки:</p><ul><li>редко обновляется материал.</li></ul><p>Книга содержит интересные рассуждения автора об избавлении от графических интерфейсов там, где в них нет необходимости. Ранее Голден Кришна работал на должности ведущего дизайнера Samsung, сейчас он — сотрудник Google.</p><p>На протяжении многих лет он продвигал идею интерфейсов без экрана, а в 2016 году его книга произвела фурор, и многие компании воспользовались этим методом.</p><p>После прочтения начинаешь смотреть на многое другими глазами, видеть больше в простых вещах, таких как мобильные приложения или, например, сайты.</p><p>Книга будет интересна не только дизайнерам, но и просто любознательным людям. Читается легко — управиться можно за пару-тройку вечеров.</p><p>Достоинства:</p><ul><li>читать действительно интересно.</li></ul><p>Недостатки:</p><ul><li>много воды;</li><li>это не учебное пособие, больше философия.</li></ul><p>Книга Юдковского объединяет несколько жанров: здесь и научпоп, и художественное повествование. Если вы зачитывались оригиналом, то это издание вам определенно понравится.</p><p>Тот же Гарри, но в совершенно других обстоятельствах, совсем другая линия сюжета. Здесь все логичнее и рациональнее, многие герои выступают как более сформированные личности, нежели в оригинальном романе.</p><p>Книга затрагивает такие темы, как теория вероятности, когнитивное искажение, проблема предотвращения глобальных катастроф. Существует миллион противоречивых отзывов об этом издании, поэтому лучше прочитать его самому и составить собственное мнение.</p><p>Достоинства:</p><ul><li>даже после прочтения оригинала эта книга не выглядит подделкой;</li><li>тонкий юмор автора.</li></ul><p>Недостатки:</p><ul><li>чрезмерная надменность главного героя;</li><li>местами затянуто.</li></ul><p>Эту книгу можно назвать библией специалистов по инженерии, ведь требования — неотъемлемая часть любого процесса разработки программных и аппаратных систем. Издание поможет каждому читателю понять основные принципы современной инженерии требований.</p><p>Основы, изложенные в книге, будут полезны и студентам, которые только начинают познавать эту быстро растущую и развивающуюся ветвь в инженерной деятельности.</p><p>Здесь собрана исключительно научная информация: авторы объясняют роль системной инженерии в решении задач по созданию систем, описывают язык UML2, рассказывают об изучении связи между требованиями и моделированием и раскрывают много других важных моментов.</p><p>Достоинства:</p><ul><li>много информации по конкретной теме, без воды;</li><li>понятный язык изложения.</li></ul><p>Недостатки:</p><ul><li>не для новичков в инженерии.</li></ul><p>Эта книга написана создателем языка программирования С++ Бьерпом Страуструпом. Она позволяет углубиться в историю создания С++, понять, почему он создан именно таким, какие изменения и поправки в него вносились.</p><p>Вы можете узнать конкретнее о каждом языковом средстве, автор подробно анализирует моменты добавления в язык исключений, шаблонов, виртуальных функций и так далее.</p><p>Издание может стать настольным для всех программистов, которые ежедневно используют С++ в своей деятельности, а также послужить источником важной информации для студентов, обучающихся программированию.</p><p>Написана понятным языком, сформирована разделами: достаточно просто отыскать необходимую информацию.</p><p>Достоинства:</p><ul><li>интересные факты из истории программирования;</li><li>юмор автора в столь несмешной теме.</li></ul><p>Недостатки:</p><ul><li>в некоторых моментах затянуто;</li><li>много терминологии.</li></ul><p>Эта книга идеально подходит тем, кто только начинает профессионально заниматься программированием либо заканчивает обучение в университете. У автора очень четкое понимание того, как проектировать программное обеспечение и как облегчить программные проекты, адаптировать их под себя.</p><p>Оустерхаут рассказывает про то, как решить проблему сложности программного обеспечения при помощи простого дизайна, это помогает передать ичетко изложенная документация.</p><p>Здесь изложены идеи высокого уровня и примеры того, как применить их в ежедневной работе.</p><p>Некоторые концепции уже встречались в другой литературе, о многом вы уже могли слышать от кого-то, но отдельные моменты обязательно вас заинтересуют. Например, концепция глубоких и поверхностных модулей, тактическое и стратегическое программирование и многие другие интересные вещи.</p><p>Достоинства:</p><ul><li>в книге 170 страниц, а краткость — сестра таланта;</li><li>есть действительно стоящие советы.</li></ul><p>Недостатки:</p><ul><li>мало примеров кода по всем темам;</li><li>излишняя самоуверенность автора.</li></ul><p>Надеюсь, эти материалы помогут вам в более глубоком изучении С++. Непрерывное обучение — это прекрасный навык и качество, которое приносит много бонусов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Аллена Б. Дауни «Think Python. Основы Python»</title>
      <link>https://tproger.ru/books/obzor-think-python</link>
      <comments>https://tproger.ru/books/obzor-think-python?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Клименков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/obzor-think-python</guid>
      <description><![CDATA[<p>Написать хороший учебник по Python сложно. Как ни странно, из-за простоты и популярности языка. «Think Python» — один из хороших учебников.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/obzor-think-python">Стоит прочитать: обзор книги Аллена Б. Дауни «Think Python. Основы Python»</a>»</p>]]></description>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Python]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Пост пользователя]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 08 Jun 2022 11:32:13 GMT</pubDate>
      <content:encoded><![CDATA[<p>Написать хороший учебник по Python сложно. Пожалуй, сложнее, чем по любому другому языку программирования. Знаете, почему? Как ни странно, потому что Python — универсальный, распространённый и очень простой язык программирования.</p><figure><img src="https://media.tproger.ru/uploads/2022/06/Python.png" alt="" /></figure><h2>Почему написать хороший учебник по Python непросто</h2><p>Давайте разбираться. Python не зря называют языком с низким порогом вхождения: объяснить новичку основы синтаксиса несложно. Главное — правильно отсчитывать отступы. А для тех, кто уже имел опыт программирования на других языках — постараться забыть про всякие begin, end, фигурные скобки и не забывать ставить двоеточия. Изучив синтаксические конструкции, каждый может начать писать на Python простые программы.</p><p>При этом Python — это язык с очень развитым «синтаксическим сахаром». Почти все задачи на нём можно решить несколькими способами. И каждый из этих способов по-своему хорош. Вообще-то это замечательное свойство — каждый может выбирать синтаксические конструкции себе по душе. Но научить всем этим вариантам новичка будет очень непросто.</p><p>Представьте себе, что вы пишете учебник по Python. Вы хорошо продумали структуру разделов, выстроили логику повествования.</p><p>Вы начинаете добавлять примеры и тут, как вредный чёртик из табакерки, перед вами выскакивает этот самый сахар. Какой из вариантов решения выбрать как основной? Какие варианты нужно привести как дополнительные? А какие использовать в последующих примерах?</p><p>Все эти вопросы непременно встают перед каждым автором учебника по Python. Если не найти на них ответ, то учебник превратится в череду бесконечно ветвящихся описаний вариантов решения одной и той же задачи.</p><p>Вспомним, что Python также очень универсальный язык. От простых программ достаточно легко перейти к сложным. На Python можно запрограммировать почти всё. А если как следует подумать, то вообще абсолютно всё.</p><p>Для решения любой популярной задачи в сети есть готовый модуль, который можно быстро скачать с помощью несложной команды. Главное — знать, что скачивать. После этого, написав всего несколько строк кода, можно обращать вспять реки и передвигать горы.</p><p>Создать свой веб-сервер, спроектировать Telegram-бота, построить нейронную сеть для распознавания на фотографиях усатой физиономии своего кота — раньше решение таких задач было недоступно новичкам.</p><p>Python открыл ящик Пандоры — теперь любой, кто изучил основы синтаксиса может почувствовать себя всесильным разработчиком. К сожалению, именно почувствовать, а не стать. Ведь когда на пути такого «профессионала» возникнет задача, для которой нет готового модуля, он не будет знать, что делать.</p><p>Каждый автор должен понимать, что читатель его учебника наверняка уже насмотрелся статей о том, как на Python за 5 минут создать свою маленькую Вселенную.</p><p>После этого он будет искренне недоумевать, зачем его пытаются заставить понять разницу между изменяемыми и неизменяемыми типами данных. Ведь при конструировании Вселенной из готовых кубиков это не понадобится.</p><p>Так что написать действительно хороший учебник по Python — это довольно непросто. Но Аллену Дауни, профессору компьютерных наук, это, похоже, удалось.</p><h2>Чем полезна книга «Основы Python»</h2><p>Представьте, что Python — это не язык программирования, а иностранный язык, который вам нужно выучить. Безусловно, без изучения синтаксических конструкций и постоянного пополнения словарного запаса не обойтись. Но этого мало. Для того, чтобы действительно изучить иностранный язык, вам рано или поздно придётся начать думать на этом языке.</p><p>Именно этому и учит читателей Аллен Дауни. Не зря <a href="https://www.mann-ivanov-ferber.ru/books/osnovy-python/">книга</a> в оригинале называется Think Python. Подзаголовок книги тоже непростой: «Научитесь думать как программист».</p><p>Автор ставит перед собой непростую задачу: не только научить читателя новому языку программирования, но и рассказать ему об основных методиках, понятиях и приёмах разработки.</p><p>В конце концов, с синтаксисом языка можно ознакомиться и по справочникам. Но научиться программировать они никак не помогут. А без этого изучение любого языка — довольно бессмысленное занятие.</p><p>Иногда описать хорошую книгу можно просто перечислив, чего в ней нет. Итак, в книге «Основы Python» нет:</p><ul><li>описаний популярных сторонних модулей;</li><li>рецептов того, как сделать что-то за 5 минут;</li><li>методики разработки приложений с GUI (за исключением вездесущей черепашки — модуля turtle).</li></ul><p>Если читатель действительно хочет как следует изучить новый язык программирования, то всё перечисленное будет сильно мешать. Ведь только изучив основы, — если хотите, «философию» языка, — можно двигаться дальше.</p><p>Всемогущие модули, фееричные интерфейсы, универсальная кроссплатформенность — всё это будет потом. Для начала же надо погрузиться в те тезисы, которые выводятся по команде import this.</p><p>Но не думайте, что в книге Аллена Дауни есть только сухая теория, которая обычно предшествует практике. Как раз практики в книге более чем достаточно. Причём от классического «Hello, world» читатель совершенно незаметно и довольно быстро переходит к задачам, о решении которых до прочтения книги он не осмелился бы даже подумать.</p><p>Как вам, например, разработка программы, которая анализирует текстовый файл с какой-нибудь книгой и с помощью цепей Маркова сочиняет новый текст с использованием словаря этой книги? Такой пример — прекрасный повод изучить кортежи.</p><p>Будьте уверены, у автора книги найдётся интересное упражнение для изучения любого аспекта языка Python. Если вы изучаете обязательный в таких случаях модуль turtle, то будете рисовать с помощью черепашки не просто какие-то скучные прямоугольники, а буквы алфавита и спираль Архимеда. А в следующей главе — почему бы нам не нарисовать один из самых знаменитых фракталов — кривую Коха?</p><p>Если вы знакомитесь с понятием функции, то вместо скучных вычислений попробуйте найти решение <a href="https://tproger.ru/problems/kak-gomer-simpson-pochti-reshil-uravnenie-velikoj-teoremy-ferma/">Великой теоремы Ферма</a>.</p><p>Правда, не обошлось и без традиционных банальностей. В каждой второй книге про Python встречается пассаж о правильном произнесении слова tuple (кортеж). Не удержался от этого и Аллен Дауни. С другой стороны, это довольно интересная информация, подходящая для первого учебника по Python.</p><h2>Достоинства «Основы Python»</h2><p>Как известно, программист — это не тот, кто пишет программы. Программист — это тот, чьи программы работают.</p><p>Аллен Дауни это прекрасно понимает — не зря он много лет преподаёт программирование студентам. Поэтому в конце каждой главы книги «Основы Python» есть подраздел «Отладка». Там автор подробно и последовательно рассказывает о методиках отладки кода. Попутно он знакомит читателей с такими понятиями, как рефакторинг, трассировка, отладочный код.</p><p>В конце каждой главы есть словарик, в котором перечислены все новые термины. Например, там даны определения таких терминов как композиция и инкапсуляция. Мне кажется, что это очень правильный подход: сначала простым языком объяснить читателям смысл понятия или объекта, привести примеры, а уж потом в словаре дать его формальное определение.</p><p>Ещё одно достоинство книги — в выбранном стиле изложения. Автор общается с читателем не как лектор и не как составитель справочника, а скорее как коллега-гуру, который хорошо знает язык программирования и хочет рассказать вам о нём как можно проще и понятнее. В наши дни <a href="https://tproger.ru/articles/7-logiko-matematicheskih-zadach-pro-begemotov-kotorye-zastavjat-polomat-golovu/">даже бегемоты иногда программируют на Python</a>.</p><p>Именно поэтому книгу просто интересно читать — последовательно, страница за страницей. Даже если вы возьмёте её почитать вдали от компьютера, где-нибудь на скамейке в парке, вам будет не скучно — повествование захватывает. А упражнения вы сможете выполнить и потом, дома у компьютера.</p><p>Вот что автор пишет в первой главе: «Единственный самый важный навык для разработчика — умение находить решение задачи. Для этого он должен сформулировать задачу, подойти творчески к поиску решения, а затем точно и ясно его реализовать». Именно этому навыку и учит книга Аллена Дауни.</p><p>А способ достижения этой цели — изучение языка программирования Python, который идеально для этого подходит. Если вы хотите не только изучить Python, но и действительно научиться программировать, эта книга вам идеально подойдёт.</p>]]></content:encoded>
    </item>
    <item>
      <title>7 must-have книг для Go-разработчика</title>
      <link>https://tproger.ru/books/sem-glavnyh-knig-dlja-golang-razrabotchika-ot-donovana-i-kernigana-do-makdaujella</link>
      <comments>https://tproger.ru/books/sem-glavnyh-knig-dlja-golang-razrabotchika-ot-donovana-i-kernigana-do-makdaujella?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/sem-glavnyh-knig-dlja-golang-razrabotchika-ot-donovana-i-kernigana-do-makdaujella</guid>
      <description><![CDATA[<p>Составили подборку из семи книг Golang-разработчика, без которых не обойтись ни в работе, ни на собеседовании.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/sem-glavnyh-knig-dlja-golang-razrabotchika-ot-donovana-i-kernigana-do-makdaujella">7 must-have книг для Go-разработчика</a>»</p>]]></description>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 23 May 2022 10:50:30 GMT</pubDate>
      <content:encoded><![CDATA[<p>Спрос на бэкенд-разработчиков — а Go неотделим от бэкенд-программирования — стабильно растет. У Golang немало плюсов: простой, строгий, статически типизированный, он обладает развитой стандартной библиотекой и славится поддержкой параллельного и асинхронного программирования.</p><p>При этом в Golang нет классов (но есть структуры) и нет поддержки наследования, что значительно повышает удобство поддержки кода.</p><p>Программисты на языке Go, способные продемонстрировать разносторонний подход к решению задач и просчитать дальнейшие шаги для решения проблемы, без работы в ближайшие лет 10 точно не останутся.</p><p>За годы работы в ИТ разработчики МойОфис изучили немало книг, видео, курсов, статей, непрерывно оттачивая свое мастерство на практике.</p><p>Многие из материалов помогают рассмотреть ситуации и кейсы с разных точек зрения. Увлекательных и действительно хорошо написанных книг по темам, важным для современного Go-разработчика, можно буквально по пальцам перечесть, поэтому мы с удовольствием делимся списком наиболее важных изданий.</p><p>Уверены, эти материалы помогут вам в более глубоком изучении Go. Непрерывное обучение — это хороший навык и качество, которое приносит множеств преимуществ любому разработчику.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги «Представляя Ивент Шторминг» Альберто Брандолини</title>
      <link>https://tproger.ru/books/stoit-prochitat-obzor-knigi-predstavljaja-ivent-shtorming-alberto-brandolini</link>
      <comments>https://tproger.ru/books/stoit-prochitat-obzor-knigi-predstavljaja-ivent-shtorming-alberto-brandolini?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Kirill Ivanov]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/stoit-prochitat-obzor-knigi-predstavljaja-ivent-shtorming-alberto-brandolini</guid>
      <description><![CDATA[<p>EventStorming — один из подходов к решению проблем в процессе разработки. Обзор на книгу, в которой он был впервые представлен.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/stoit-prochitat-obzor-knigi-predstavljaja-ivent-shtorming-alberto-brandolini">Стоит прочитать: обзор книги «Представляя Ивент Шторминг» Альберто Брандолини</a>»</p>]]></description>
      <category><![CDATA[Организация разработки]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Гостевая публикация]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 29 Jul 2021 07:21:45 GMT</pubDate>
      <content:encoded><![CDATA[<p>EventStorming, или ивент сторминг — по сути, подход к решению проблем в процессе разработки. Это метод, основанный на воркшопе или сессии с командой, чтобы быстро узнать, что происходит в области программного обеспечения, какие мы видим взаимосвязи, проблемы и сценарии их решения.</p><p>По сравнению с другими методами он чрезвычайно лёгкий. По идее, вам даже не надо включать компьютер, весь результат вы визуализируете на общей доске. Хотя, конечно, в условиях пандемии и распределённых команд может понадобиться, например, Miro.</p><p>Основная фишка EventStorming — в совместной проработке бизнес-сценариев, синхронизации команды и выработке единого языка. Например, все команды отмечают, что после ES они начинают лучше друг друга понимать, как следствие — лучше и эффективней работать.</p><p>Метод был изобретен и описан в одноименной книге Альберто Брандолини в контексте предметно-ориентированного дизайна (DDD). Название было выбрано, чтобы показать, что основное внимание следует уделять событиям предметной области, и метод работает аналогично мозговому штурму или штурму модели гибкого моделирования.</p><p>Книгу можно <a href="https://www.goodreads.com/book/show/28947184-introducing-eventstorming">скачать</a> на английском языке, или ознакомиться с краткими выжимками инструкций на русском, например, <a href="http://agilemindset.ru/event-storming-%D0%BD%D0%B0-%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85-%D0%BA%D0%B5%D0%B9%D1%81%D0%B0%D1%85/">текстовой версией</a> или <a href="https://www.facebook.com/innoagency/videos/1047192032360468/">презентацией</a>.</p><h2>Почему я заинтересовался книгой</h2><p>У нас с командой иногда возникают проблемы с созданием и развитием ПО. Мы всегда ищем новые подходы к тому, что и как можно сделать, чтобы как можно быстрее предоставить клиентам качественный результат.</p><p>Именно метод Брандолини зарекомендовал себя как очень эффективный инструмент. Вдохновившись его инструкциями, мы уже провели более cотни ивентштормов. Всегда получаем всем понятные, наглядные решения, когда раскладываем ситуацию «по полочкам».</p><p>Сам Брандолини довольно чётко формулирует профиты своей методики: Event storming — это увлекательный способ собрать вместе разработчиков и экспертов в бизнесе для быстрого, совместного исследования сложной предметной области бизнеса. Часы вместо дней и недель.</p><p>Метод EventStorming — это именно «исследование», где проблема сначала выглядит хаотично, а потом приобретает чёткую структуру с видимыми путями решений.</p><p>Альберто Брандолини достаточно смело заявил, что подобное исследование может занять часы вместо дней и недель. И практика показывает, что это действительно так.</p><h2>Четыре причины, почему я рекомендую прочитать эту книгу:</h2><p>В этой книге вы найдете руководство о том, как использовать полный потенциал EventStorming.</p><ul><li>Вы сможете отточить бизнес-процессы. Как только вы наглядно рассматриваете процессы, явно вскрываются взаимосвязи и препятствия для развития. Можно будет решить выявленные проблемы и масштабировать лучшие практики.</li><li>Вы сможете создать улучшенную архитектуру программного обеспечения. Выявляйте области, в которых потребности заинтересованных сторон находятся в противоречии, устраняйте конфликты, используя ограниченные контексты.</li><li>Можно будет пофиксить обучение команды. Исследование сложной области станет основано на вопросах, а решение — на коллективном эскизе. Командная работа выйдет на новый уровень, когда все буквально смотрят на проблемы одинаково.</li><li>Вы сможете активизировать взаимодействие. Визуализация помогает инициировать правильный разговор между нужными людьми.</li></ul><p>P.S. Автор книги собирает обратную связь, чтобы усовершенствовать ее к новому изданию. Оставить свои комментарии можно <a href="https://trello.com/b/tcLNC1sG/eventstorming-book">здесь</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги «Клиенты на всю жизнь» Карла Сьюэлла и Пола Брауна</title>
      <link>https://tproger.ru/books/stoit-prochitat-obzor-knigi-klienty-na-vsju-zhizn-karla-sjujella-i-pola-brauna</link>
      <comments>https://tproger.ru/books/stoit-prochitat-obzor-knigi-klienty-na-vsju-zhizn-karla-sjujella-i-pola-brauna?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Maksim Galileo]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/stoit-prochitat-obzor-knigi-klienty-na-vsju-zhizn-karla-sjujella-i-pola-brauna</guid>
      <description><![CDATA[<p>Книга с примерами того, как сервис со стороны сотрудников способен изменить отношение клиентов к бизнесу и сделать их максимально лояльными.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/stoit-prochitat-obzor-knigi-klienty-na-vsju-zhizn-karla-sjujella-i-pola-brauna">Стоит прочитать: обзор книги «Клиенты на всю жизнь» Карла Сьюэлла и Пола Брауна</a>»</p>]]></description>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Гостевая публикация]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 19 Jul 2021 02:27:21 GMT</pubDate>
      <content:encoded><![CDATA[<p>Громкое название книги, не правда ли? Так я подумал, когда сел её читать (на самом деле – слушать). Книга написана простым языком и больше похожа на художественную, чем на бизнес-литературу. Поэтому мне «зашла» очень даже легко.</p><p>Сперва я не мог осмыслить, как это так: «клиент и навсегда»? А если их будет всё больше и каждый – «на всю жизнь». Как с ними работать-то?</p><p>Но оказалось, что книга совсем про другое: про отношение к клиентам, работе и некоторым своим привычкам. Во время прослушивания я останавливал запись и выписывал интересные мысли, которых накопилось много.</p><p>Уверен, у каждого появятся свои мысли, каждый услышит своё.</p><h2>Относись к людям так, как ты хочешь, чтобы относились к тебе</h2><p><b>Ещё один инсайт: </b>это же всё про дилерский центр Cadillac, супербренд, «сервисность», «статусность». Это крутые компании должны так работать, а остальным слишком далеко до такого уровня. Однако, поразмыслив над ситуациями, применив их к своей работе (тогда я был рядовым специалистом технической поддержки в компании по производству GPS-трекеров), я понял, что не статус компании определяет уровень сервиса и заставляет всех его придерживаться. Это делают сами сотрудники, руководители, и, как ни странно, клиенты. Да-да, сами клиенты порой тоже задают уровень обслуживания.</p><p>«Относись к людям так, как ты хочешь, чтобы относились к тебе». Не помню кто сказал, гуглить не буду, но мысль верная. Чем ты проще и ближе к клиентам, тем и они более терпеливы к твоей работе (не спорю, бывают исключения, но их мало). Отсюда взаимное уважение и понимание в сложных ситуациях.</p><p>В книге описано много жизненных примеров, которые показывают, как сервис со стороны сотрудников способен изменить отношение клиента и бизнес компании. О многих ситуациях, которые вызывают раздражение, мы даже не задумываемся. Например, рассылка анкеты для сбора обратной связи по большому списку клиентов. Кто-то ответил, но его не исключили из списка, по которому разослали напоминание об анкете ещё раз.  Выходит, клиент заполнил анкету, но получил её второй раз, что выглядит как спам.</p><p>Ближе к концу книги я понял, что можно оставаться клиентом всю жизнь, даже купив продукт один раз. Например, такой человек может продвигать продукт, советуя его окружающим, он может привести друзей, написать отзыв на сайте – всё это работа клиента.</p><p>Получается, что человек, получив от вас уникальный продукт и заботу, будет разносить эту информацию дальше, привлекать новых клиентов. Вот так и становятся клиентами на всю жизнь.</p><h2>Вот что я стал применять в работе с клиентами после прочтения книги</h2><p>Самый первый и простой шаг, который я мог сделать, – предлагать клиентам обращаться ко мне напрямую за решением технических вопросов. В письме или при разговоре я передавал свой номер мобильного телефона и предлагал обращаться, если будет необходимость. Я долго не решался это сделать, поскольку думал, что отбоя от звонков не будет, а такие обращения были мимо техподдержки и, соответственно, никак не фиксировались.</p><p>Однако я ошибся: звонков и обращений по пустякам почти не было. Всё только по делу. Получив мой номер телефона, клиенты стали приглашать меня в свои чаты и другие профильные группы/сообщества. Эффект был намного больше, чем я ожидал. Но это уже другая история?</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор на книгу «Спринт» Джейка Кнаппа</title>
      <link>https://tproger.ru/books/stoit-prochitat-obzor-na-knigu-sprint-dzhejka-knappa</link>
      <comments>https://tproger.ru/books/stoit-prochitat-obzor-na-knigu-sprint-dzhejka-knappa?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алена Воронина]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/stoit-prochitat-obzor-na-knigu-sprint-dzhejka-knappa</guid>
      <description><![CDATA[<p>Книга о разработке и тестировании нового продукта за пять дней пригодится тем, кто хочет структурировать свой опыт создания прототипа или MVP.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/stoit-prochitat-obzor-na-knigu-sprint-dzhejka-knappa">Стоит прочитать: обзор на книгу «Спринт» Джейка Кнаппа</a>»</p>]]></description>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Гостевая публикация]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 07 Jun 2021 14:21:21 GMT</pubDate>
      <content:encoded><![CDATA[<h2>«Спринт: Как разработать и протестировать новый продукт всего за пять дней»</h2><p>Книга будет полезна тем, кто хотел бы структурировать свой опыт по созданию прототипа или MVP в данный момент или в прошлом.  Я бы рекомендовал её и тем, кто работает с продуктами или над проектами.</p><p>В бизнесе и в IT-сфере высокая скорость изменений. Мы вынуждены так или иначе предвосхищать то, что клиент хочет увидеть завтра. При создании продукта или стартапа необходимо прощупывать идеи и делать MVP или прототипы максимально быстро, но чтобы при этом оставалась релевантная выборка результатов. Потому что идея должна соответствовать действительности. В книге «Спринт» как раз описывается баланс, который ребята из Google применяют в своих стартапах.</p><h2>Не путать с спринтами</h2><p>Может показаться, что книга про спринты в разработке, но это не так. Она не про процессы разработки, стартапы и так далее – то, что есть в спринтах разработчиков. В этой книге спринт – просто название.</p><h2>Этапность действий</h2><p>В книге описан пятидневный подход – что нужно делать в определённый день, чтобы не расфокусироваться и не отвлекаться. Это хорошо структурированный мозговой штурм, после которого ты описываешь и делаешь прототип, а на 5-й день подводишь итог: фактически это how do для чайников. Там даже есть рекомендации, какой фирмы использовать маркеры и магнитную доску. Но, на мой взгляд, это уже чересчур – американская заморочка.</p><p>Книгу можно считать инструкцией того, как за  пять дней оценить и описать идею, опросить экспертов, сделать прототип и провести тест на небольшом количестве потенциальных клиентов, чтобы в конце недели посмотреть, сработает или нет<b>.</b></p><p>В книге автор всё разложил по полочкам. Привычные и интуитивно понятные процессы названы своими именами и описаны в готовую инструкцию.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Чарльза Петцольда «Код. Тайный язык информатики»</title>
      <link>https://tproger.ru/books/stoit-prochitat-obzor-knigi-charlza-petcolda-kod-tajnyj-jazyk-informatiki</link>
      <comments>https://tproger.ru/books/stoit-prochitat-obzor-knigi-charlza-petcolda-kod-tajnyj-jazyk-informatiki?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/stoit-prochitat-obzor-knigi-charlza-petcolda-kod-tajnyj-jazyk-informatiki</guid>
      <description><![CDATA[<p>Автор ведёт читателя от азбуки Морзе и шрифта Брайля к устройству современных компьютеров, развивая инженерное мышление и понимание кода.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/stoit-prochitat-obzor-knigi-charlza-petcolda-kod-tajnyj-jazyk-informatiki">Стоит прочитать: обзор книги Чарльза Петцольда «Код. Тайный язык информатики»</a>»</p>]]></description>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 16 Mar 2021 07:15:09 GMT</pubDate>
      <content:encoded><![CDATA[<p>Я прочитал эту культовую книгу, когда только связал свою жизнь с IT. Автор рассказывает про истоки компьютеров, кода и программирования. Во время первого прочтения открытия ждали меня практически в каждой главе. Петцольд разобрал прогресс от первых телеграфных машин до современных компьютеров. Во время этого он раз за разом обращался к истокам комбинаторики, алгебры и физики.</p><p>«Код. Тайный язык информатики» не только рассказывает о том, как устроены и работают компьютеры, но развивает инженерное мышление читателя. Нас знакомят не с кодом, а с историей кода, добавляя новые уровни абстракции. Постепенно, от вспышек фонарика и азбуки Морзе, через шрифты Брайля, сквозь алфавиты Барбье и Гаюи читатель сам приходит к пониманию кодирования информации. Читая книгу, ты понимаешь, не «что», а «как» умеет компьютер, какие возможности открылись с его возникновением, и начинаешь этим восхищаться. Книга отзовётся в сердцах начинающих и опытных специалистов.</p><p>Чарльз Петцольд прослеживает историю возникновения программирования с рассказа о самых пустяковых устройствах – лампочках и батарейках, а заканчивает знакомством с машинными кодами и языком ассемблера. Книга заставляет не просто освежить знания, но и по-новому взглянуть на школьную программу, которая подается доступно и интересно. Не как в учебной литературе, когда информацию приходится зубрить, а не понимать.</p><p>Автор настолько грамотно и последовательно объясняет сущность программирования — кодирования информации — что даже не связанному с этой сферой человеку будет интересно прочитать книгу. Автор объясняет все живо и четко, не использует непонятных и сложных терминов. Специфические термины используются только для объяснения электронной теории. Эта литература одна из самых доступных и полезных книг в сфере IT. Она научит разбираться в сфере компьютеров так, что вы сможете дискутировать с топовыми инженерами. Ведь по мере прочтения книги вы соберете в голове нечто, напоминающее полноценный компьютер.</p><p>В конце концов, автор говорит, что «Код» не похож на прочие книги «о компьютерах». В нем нет больших цветных иллюстраций с дисководами, где стрелками показано, как данные поступают в компьютер, нет рисунков, где паровозик в товарных вагончиках везет нули и единички. Метафоры и сравнения чудесны в своей буквальности, но они ни на что не годны, если затмевают красоту самих технологий.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Меджуи Мехди «Непрерывное развитие API. Правильные решения в изменчивом технологическом ландшафте»</title>
      <link>https://tproger.ru/books/stoit-prochitat-obzor-knigi-medzhui-mehdi-nepreryvnoe-razvitie-api-pravilnye-reshenija-v-izmenchivom-tehnologicheskom-landshafte</link>
      <comments>https://tproger.ru/books/stoit-prochitat-obzor-knigi-medzhui-mehdi-nepreryvnoe-razvitie-api-pravilnye-reshenija-v-izmenchivom-tehnologicheskom-landshafte?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/stoit-prochitat-obzor-knigi-medzhui-mehdi-nepreryvnoe-razvitie-api-pravilnye-reshenija-v-izmenchivom-tehnologicheskom-landshafte</guid>
      <description><![CDATA[<p>Издание объясняет ценность API для бизнеса, описывает роли, процессы и работу комитета по API, который управляет его разработкой и развитием.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/stoit-prochitat-obzor-knigi-medzhui-mehdi-nepreryvnoe-razvitie-api-pravilnye-reshenija-v-izmenchivom-tehnologicheskom-landshafte">Стоит прочитать: обзор книги Меджуи Мехди «Непрерывное развитие API. Правильные решения в изменчивом технологическом ландшафте»</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 15 Mar 2021 05:57:22 GMT</pubDate>
      <content:encoded><![CDATA[<p>Книга учит управлять разработкой и развитием API. В ней нет технических аспектов. Авторы считают наличие API важным аспектом успеха IT-компании. В книге раскрывают его ценность для бизнеса, рассказывают о составляющих успешного API, описывают роли и процессы. А ещё помогают найти ответы на вопросы вроде: когда документация важнее новой фичи, а когда наоборот?</p><h2>Комитет по API</h2><p>На протяжении всей книги авторы уделяют много внимания «органу управления развитием и разработкой API». Это группа экспертов, которые помогают командам в проектировании и разработке. Комитет предоставляет гайды по стилю и осуществляет контроль их соблюдения; стандартизирует процесс и создает инструменты для упрощения выполнения стандартов.</p><p>Наличие такого комитета напрямую сказывается на качестве разрабатываемых API и на достижении целей бизнеса. По сути, книга является обоснованием необходимости «комитета по API» и руководством к его работе.</p><h2>API as a Product</h2><p>API — это продукт. Помимо того, что он упрощает распространение кода, он ещё несет бизнес ценность. Во-первых, его наличие способствует более глубокому проникновению наших продуктов в жизнь пользователей. Вы же получаете уведомления от Moira в Telegram или Slack? 😉 Во-вторых, API сам по себе имеет ценность и его можно продавать.</p><p>Бизнес цели, KPI, маркетинг и продажи. Все это нужно успешному API. У API есть пользователи — другие разработчики, для них важен позитивный опыт взаимодействия с сервисом. Поэтому дизайн, тех. поддержка и документация очень важны, иначе будет тяжело привлечь клиентов.</p><p>Всё это остается верным, даже когда API создается для внутреннего использования.</p><h2>Столпы API</h2><p>Авторы выделяют 10 «столпов API» — аспектов, которым необходимо уделять внимание при разработке, чтобы сделать успешный продукт.</p><h3>Стратегия</h3><p>Создание API должно преследовать конкретную цель бизнеса. Перед началом разработки надо понять, зачем начинать, и как новый сервис поможет достичь целей бизнеса.</p><p>Цели могут быть разные: укрепить бренд компании среди разработчиков, получить технологическое преимущество, распространить существующие услуги новым способом… От целей зависит, будет ли API публичным или внутренним, платным или бесплатным. А ещё от этого зависит пользовательская аудитория, для которой мы создаем продукт и это нужно учитывать в дизайне, разработке, модели распространения.</p><p>Например, если все пользователи API сидят за соседними столами, то в документацию можно вкладывать меньше сил. Если для пользователей критична доступность, то стоит вложить больше ресурсов в отказоустойчивость.</p><h3>Дизайн</h3><p>API — это интерфейс. Интерфейс должен быть простым, понятным и удобным, он должен помогать решать задачи пользователей.</p><p>API тоже может создавать вау-эффект. Представьте, что от знакомства с контрактом API до простейшей интеграции вы затратили 5 минут, круто же? )</p><p>Точно так же, как при проектировании UI, при проектировании API стоит стремиться сократить количество необходимых действий разработчика и сделать их интуитивно понятными, чтобы улучшить опыт использования.</p><p>Вдобавок, менять дизайн в процессе развития очень дорого — зависящие от него программные продукты могут сломаться. К этому аспекту стоит подойти со всей ответственностью перед началом написания кода.</p><h3>Документация</h3><p>Чтобы API начали использовать, недостаточно отличного дизайна. Клиентам надо про этот дизайн рассказать. Стоит предоставить описание контракта, возможных ошибок, примеры использование и другие подсказки.</p><p>Документация улучшает пользовательский опыт и делает API более дружелюбным.</p><h3>Разработка</h3><p>Как быстро будут выпускаться новые фичи? Как быстро обрабатываются запросы к API? Какую нагрузку он выдерживает? Это зависит от архитектуры нашего приложения, технологий и выстроенных процессов.</p><h3>Тестирование</h3><p>Главная цель тестирования — убедиться, что API способен добиться стратегических целей. Сюда входит не только поиск багов и определение критической нагрузки, но и проверка гипотез, и изучение пользовательского опыта. От процессов и технологий в тестировании зависит скорость релизов и качество приложения.</p><h3>Развертывание</h3><p>Чтобы использовать API, его нужно где-то разместить. Скорее всего, для отказоустойчивости запускается несколько реплик. Необходимо обеспечить их доступность и однообразное поведение. Вдобавок, API может зависеть от других сервисов — сложность управления релизами увеличивается.</p><h3>Безопасность</h3><p>Клиенты не станут использовать решение, влекущее для них риски. Вдобавок, нужно выполнить юридические требования.</p><p>Но могут быть и другие проблемы, например, если заказ обратного звонка не проверяет доступ пользователя к номеру телефона, злая шутка заставит компанию тратить ресурсы на обработку ложных заявок и нести репутационные потери.</p><p>Публикуя API, необходимо обеспечить безопасность пользователей и бизнеса.</p><h3>Мониторинг</h3><p>Чтобы успешно управлять API, нужно понимать его состояние и быстро реагировать на проблемы. Это поможет находить узкие места, подстраиваться под поведение пользователей и определять направления развития.</p><h3>Обнаружение</h3><p>Целевая аудитория сервиса должна как-то его найти, чтобы начать им пользоваться. Чем проще это сделать, тем выше вероятность успеха. Когда пользователи нашли API, не достаточно сообщить URL, нужно и рассказать, как они решат свою проблему. Для API нужен маркетинг.</p><h3>Управление изменениями</h3><p>API, как и другие продукты, должен развиваться. Нужно учитывать сколько стоит разработка и внедрение изменений, помогут ли они достичь целей. Вдобавок, неаккуратные изменения могут сломать поведение приложения, от которого зависят его пользователи — можно потерять больше, чем приобретём.</p><h2>Итог</h2><p>Помните, API — это продукт. Для его успеха недостаточно написать код, необходимо уделить внимание и другим аспектам. Разобраться в вопросах его создания и развития поможет книга «Непрерывное развитие API. Правильные решения в изменчивом технологическом ландшафте». Если есть возможность прочитать в оригинале, читайте в оригинале.</p>]]></content:encoded>
    </item>
    <item>
      <title>Подборка бизнес-литературы для предпринимателей</title>
      <link>https://tproger.ru/books/podborka-biznes-literatury-dlja-predprinimatelej</link>
      <comments>https://tproger.ru/books/podborka-biznes-literatury-dlja-predprinimatelej?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/podborka-biznes-literatury-dlja-predprinimatelej</guid>
      <description><![CDATA[<p>Книги, которые не сводятся к конкретной методологии и не дают готовых алгоритмов, а меняют взгляд предпринимателя на цели и глобальные вещи.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/podborka-biznes-literatury-dlja-predprinimatelej">Подборка бизнес-литературы для предпринимателей</a>»</p>]]></description>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 12 Mar 2021 06:07:27 GMT</pubDate>
      <content:encoded><![CDATA[<p>Хочется верить, что прочитанные книги положительно влияют на ведение бизнеса. В данной подборке я выделил классику бизнес-литературы для предпринимателей. Ценность подобной литературы не сводится к какой-то конкретной теории или методологии, которую можно применить в работе. Эти книги не стремятся дать четкие алгоритмы решения производственных или маркетинговых проблем, для этого существует другая, более узкоспециализированная литература. Они скорее заставляют по-другому посмотреть на глобальные вещи, иногда даже с философской точки зрения. Я бы сказал, что многие книги меняют у вас методы достижения целей, эти же из тех, что меняют сами цели.</p><p>Я отдаю предпочтение профессиональной литературе на английском языке. Это позволяет, помимо получения новых знаний, поддерживать иностранный язык на приемлемом уровне. В область моих интересов в основном входит бизнес и IT. При этом большая часть книг относится к предпринимательству и менеджменту, где знания устаревают не так быстро, как в IT-сфере, и литература успевает угнаться за реальностью.</p><p>Когда речь заходит о книгах, максимально повлиявших на предпринимателя / руководителя, на самом деле, выбор не так уж и велик. Я здесь тоже не буду особо оригинален, большая часть моего списка является зачитанной до дыр классикой.</p><h2>Уолтер Айзексон «Стив Джобс»</h2><p>Честно говоря, не уверен, что эту книгу нужно как-то комментировать. История жизни одного из самых ярких предпринимателей-визионеров в истории человечества. Очень вдохновляющая литература. Предполагаю, что биография Илона Маска будет достойной альтернативой, но мне было бы некорректно ее рекомендовать, т.к. я ее сам еще не успел прочитать.</p><h2>Джим Коллинз «От хорошего к великому»</h2><p>Фундаментальная исследовательская работа в попытке ответить на вопрос, что делает компанию по настоящему великой, и есть ли способы повторить этот успех. Ключевым фактором автор называет руководителя компании. Коллинз делает вполне однозначные выводы о том, какими качествами должен обладать руководитель великой компании, и эти выводы для многих будут весьма неожиданными. После прочтения вы сможете совсем по-другому посмотреть на стиль своего руководства. Научный подход в самой работе и изложении материала несколько осложняет восприятие. Не могу сказать, что книга легко читается, но материал однозначно стоит потраченного времени.</p><h2>Тони Шей «Доставляя счастье»</h2><p>Яркая история жизни известного интернет-предпринимателя Тони Шея. Книга охватывает основные этапы его биографии, взлеты и падения, историю становления Zappos, жизненную философию и методы ведения бизнеса. «Доставляя счастье» написана живым языком (могу говорить только про оригинал на английском) и легко читается. Особое внимание стоит обратить на восприятие клиентского сервиса и корпоративной культуры компанией Zappos. Там однозначно есть, что почерпнуть. Но эта история даже не об успешном бизнесе, а скорее о непоколебимой вере основателей Zappos в миссию компании, и о многолетнем тяжелом труде, без которого не бывает реально больших успехов.</p><h2>В. Чан Ким «Стратегия голубого океана»</h2><p>Уникальный труд по стратегическому менеджменту в области инновационного бизнеса, полностью переворачивающий ваш взгляд на конкуренцию. Обязательна к прочтению всем стартаперам. Но даже если вы привыкли работать в более консервативных отраслях, уделите стратегии голубого океана время. Может быть у вас сейчас перед глазами лежит идея для многомиллиардного бизнеса, которую вы в упор не видите. Книга дает конкретные инструменты для поиска таких идей.</p><h2>Тимоти Феррис «Как работать по 4 часа в неделю»</h2><p>Возможно, выскажу непопулярное мнение, но, несмотря на невероятную популярность, в т.ч. среди предпринимателей, эта книга для меня является достаточно спорным произведением. Автор высказывает весьма неоднозначные идеи и концепции, подходящие далеко не всем. Тем не менее, книгу обязательно нужно прочитать, т.к. она заставляет посмотреть на жизнь под совсем другим углом, через призму других ценностей. Некоторые вещи, казавшиеся незыблемыми, на практике оказываются не более чем навязанными стереотипами. Что из идей Ферриса принимать и использовать каждый должен решить сам.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Рида Хастингса и Эрин Мейер «Никаких правил. Уникальная культура Netflix»</title>
      <link>https://tproger.ru/books/stoit-prochitat-obzor-knigi-rida-hastingsa-i-jerin-mejer-nikakih-pravil-unikalnaja-kultura-netflix</link>
      <comments>https://tproger.ru/books/stoit-prochitat-obzor-knigi-rida-hastingsa-i-jerin-mejer-nikakih-pravil-unikalnaja-kultura-netflix?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/stoit-prochitat-obzor-knigi-rida-hastingsa-i-jerin-mejer-nikakih-pravil-unikalnaja-kultura-netflix</guid>
      <description><![CDATA[<p>Книга о культуре Netflix описывает свободу сотрудников, высокие зарплаты и подход компании, при котором хороших работников увольняют ради лучших.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/stoit-prochitat-obzor-knigi-rida-hastingsa-i-jerin-mejer-nikakih-pravil-unikalnaja-kultura-netflix">Стоит прочитать: обзор книги Рида Хастингса и Эрин Мейер «Никаких правил. Уникальная культура Netflix»</a>»</p>]]></description>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 02 Feb 2021 07:53:32 GMT</pubDate>
      <content:encoded><![CDATA[<p>Про культуру Netflix ходит множество слухов. Компания не стремится создавать дух пионерского лагеря по системе «все включено», как это делает Гугл. В Нетфликс сотрудникам предоставляется беспрецедентная свобода принимать решения. Стратегия компании — платить зарплату выше рынка, чтобы ее сотрудники сами себе купили то, что им хочется — бассейн с шариками, массаж и т.д. С другой стороны, Нетфликс славится тем, что увольняет хороших работников, чтобы в компании остались только лучшие из лучших. Некоторые СМИ говорят, что в компании гнетущая атмосфера «а уволят ли меня сегодня».  Нетфликс входит в  FAANG (Facebook, Apple, Amazon, Netflix, Google) — топ самых желанных ИТ компаний для специалистов всего мира. Именно поэтому так интересно было прочитать книгу о культуре компании Netflix. Спойлер: после прочтения книги я поговорила с сотрудником Нетфликс и узнала о его взгляде изнутри и его мнение о книге.</p><p>Рид Хастингс до Нетфликс основал компанию, которую считает менее успешной, но которая помогла наработать опыт для создания культуры Нетфликс.</p><h2>Первые шаги к культуре свободы и ответственности</h2><p>Талантливые сотрудники, которые увлечены своей работой, двигают компанию вперед. В то время как немотивированные, токсичные, сотрудники, которые высиживают время на работе, способны подорвать производительность всей команды, высасывают энергию коллег и начальника.</p><p>В книге приводится пример Нетфликс, когда в 2001 году было сокращено значительное количество сотрудников. Компания сократила тех, кого считала середнячками, оставив в компании только звезд. К удивлению Рида, массовое сокращение, привело к росту производительности и общему эмоциональному подъему.</p><p>Вторым шагом значатся открытые коммуникации, когда в случае возникновения недоразумения или конфликта интересов, это обсуждается открыто, а не заметается под ковер. Это уменьшает вероятность возникновения корпоративной политики, которую мы все так не любим. При этом важно отметить, что открыто высказывать обратную связь или свое мнение не означает обижать или хамить собеседнику. Свое мнение должно быть высказано с уважением к собеседнику, это обеспечит комфортную атмосферу, свободную от токсичности и сарказма. Еще одна грань открытых коммуникаций – высказывать свое мнение вне зависимости от ранга того, с кем разговариваешь.</p><p>В книге описываются четыре правила откровенности:</p><ol><li>Стремись помочь.</li><li>Предлагай конкретные меры или шаги.</li><li>Будь благодарен критику.</li><li>Прими или отклони критику.</li></ol><p>Ослабление контроля – еще один шаг к культуре свободы. Если в компании собрались талантливые люди, вдохновленные одной идеей, то ослабление контроля приведет к возрастанию уровня ответственности. В книге очень занимательно описывается процесс отказа от графика и лимита отпусков. Чтобы этот процесс заработал, важно, чтобы топ-менеджеры показывали пример своим подчиненным и отдыхали сами. При этом сотрудники должны брать на себя ответственности и самостоятельно оценивать ситуацию. Назначать отпуск за время самого важного запуска в году, не самое лучшее для компании решение.</p><p>Другой пример ослабления контроля — отказ от отчетов по командировочным расходам. Главный принцип при определении уровня расходов — действовать в интересах компании. Ответственность сотрудников  не означает полного отказа от контроля. Нетфликс практикует выборочную проверку расходов сотрудников компании. При выявлении злоупотребления Нетфликс увольняет сотрудника. Компания считает, что выгода от свободы превышает ущерб от злоупотребления.</p><h2>Новые шаги на пути к культуре свободы и ответственности</h2><p>Нетфликс считает своей движущей силой таланты в компании и отсутствие середнячков. Для того, чтобы привлекать лучших из лучших, Нетфликс платит выше рынка и регулярно пересматривает зарплаты, чтобы убедиться, что оплата держится на уровне выше рынка. Компания также поощряет исследование рынка и уровня зарплат самими сотрудниками. Более того, Нетфликс предлагает сотрудничать с рекрутерами других компаний, чтобы узнать уровень предлагаемой зарплаты, а затем поделиться этими данными с Нетфликс. Таким образом, компании проще держать уровень зарплаты на уровне выше рынка.</p><p>В компании нет премий, потому что премии смещают фокус сотрудников и мешают гибкости. Если цели компании быстро меняются, то премия побуждает достигать старых целей, потому что к ним привязаны премии.</p><p>Оплата, привязанная к показателям, хороша для обычной работы, но скорее снижает мотивацию, когда нужен творческий подход.</p><p>Откровенность в компании Нетфликс породила следующее изменение — рассекречивание документов. Доверие и ответственность приводит к тому, что документы в компании открыты для сотрудников. Компания идет на этот риск руководствуясь тем, что польза от открытых коммуникаций больше урона от возможной утечки. Безусловно, компания обучает сотрудников какую информацию нельзя раскрывать вне компании. В число раскрытых документов входят не только документы по новым проектам, но и финансовые документы. Более того, компания обучает сотрудников читать и анализировать финансовые документы. Чем больше сотрудники знают о бизнесе компании, тем лучше они смогут принимать решения в интересах компании. Все это нужно, чтобы каждый чувствовал себя частью Нетфликс.</p><p>Откровенность и прозрачность относится к таким деликатным ситуациям, как увольнение сотрудника. Компания делится информациях о причине ухода сотрудника — будь то увольнение компанией или самостоятельный уход сотрудника.</p><p>Еще одна интересная грань откровенности — необходимость признания своих ошибок. Это касается всех сотрудников, включая топ менеджеров. Признавать свои ошибки, делиться ими, делать выводы — это часть культуры Нетфликс.</p><p>Решения без разрешения — это тоже свобода и ответственность сотрудников. В компании нет формальной процедуры утверждения. Сотруднику не нужно получать подпись менеджера, чтобы утвердить сумму в договоре. Это правило применяется в том числе и к покупкам фильмов, где сумма контракта исчисляется миллионами, десятками миллионов долларов. Думать о благе компании — вот руководство от Нетфликс. Но отсутствие формального процесса не означает отсутствие всякого руководства, на которое можно опереться.</p><p>Цикл внедрения инноваций:</p><ol><li>Найди несогласных или социализируй идею.</li><li>Для большого проекта используй POC (proof of concept).</li><li>Собери информацию и сделай ставку.</li><li>Выиграешь – отпразднуй. Проиграешь – поделись опытом.</li></ol><p>Пользоваться чужими мозгами и опытом можно и нужно. Обсуждать идеи и устраивать мозговые штурмы — часть процесса работы над новой идеей, контрактом и т.д.</p><h2>Закрепляем культуру свободы и ответственности</h2><p>Нетфликс искал способ описать свою культуры. Семья принимает тебя со всеми твоими недостатками, поэтому это сравнение не подходило. Компании больше подошло сравнение со спортивной командой. Я неоднозначно отношусь к этому сравнению, но смысл сравнения понятен.</p><p>МЫ – НЕ СЕМЬЯ, МЫ – КОМАНДА.</p><p>Тест на вылет из команды. Как понять, кого нужно увольнять, а каких сотрудников холить и лелеять? В Нетфликс есть тест:</p><p>Кого из моих сотрудников я буду всеми силами стараться удержать в Нетфликс, если они захотят уйти на похожую работу в другой компании?</p><p>Если менеджер не будет удерживать сотрудника, то это знак к увольнению. При увольнении компания выплачивает от 4 до 8 зарплат в зависимости от должности.</p><p>Это достаточно спорная практика. Не всем сотрудникам подходит такой принцип. Некоторые сотрудники признаются, что живут в ожидании увольнения.</p><p>Но с другой стороны, компания предлагает поддерживать постоянную обратную связь с менеджером и коллегами, чтобы мониторить в какой точке находится сотрудник и фокусироваться на важном.</p><p>В этом помогает так называемый «круг обратной связи». Каждый сотрудник может попросить коллег дать обратную связь — «360 градусов». Эта обратная связь будет в формате: «начать – прекратить – продолжить». Вначале обратная связь была анонимной, но потом все больше и больше людей перешли к открытому формату. После внедрения 360 градусов компания пошла дальше и внедрила групповые обсуждения. Эти сессии проводятся, например за ужином группами до 12 человек. Каждому сотруднику коллеги дают обратную связь, критику лично. При этом особое внимание уделяют модерации, чтобы поддерживать уважительную атмосферу и не скатиться в виртуозное хамство.</p><p>Еще один подход, который помогает развивать ответственность и помогает принимать решения на всех уровнях — контекст вместо контроля. Для того, чтобы сотрудник принимал решения в интересах компании, он должен понимать стратегию компании и контекст, в котором он принимает решение. Поэтому Нетфликс стремится к тому, чтобы сотрудники понимали контекст и координировались для того, чтобы действовать на благо компании. Ошибки не являются клеймом, они служат источником для анализа — какого контекста не хватило для принятия решения? Как эта ошибка поможет в будущем улучшить качество принятия решений? В книге приводится интересный пример с покупкой документального фильма, который иллюстрирует свободу принятия решения, показывает анализ рисков и готовность рисковать.</p><h2>Глобальные вопросы</h2><p>Эта глава рассказывает о том, как меняется и адаптируется культура Нетфликс по мере выхода на международные рынки. Не секрет, что разные культуры имеют разный подход к общению, стиль общения и разный уровень нормы.</p><p>В Нетфликс стали рисовать так называемые «культурные карты стран», которые помогают сориентироваться в особенностях общения в разных странах.</p><p>В этой карте есть несколько аспектов и шкала, на которой отмечается страна:</p><ul><li>коммуникации (шкала от высококонтекстные до низкоконтекстные);</li><li>оценочные суждения (прямые – косвенные);</li><li>управление (эгалитарное – иерархическое);</li><li>принятие решений (консенсус – директива);</li><li>доверие (рабочая атмосфера – неформальная атмосфера);</li><li>несогласие (открытая конфронтация – уход от конфликта);</li><li>планирование (линейное – гибкое).</li></ul><p>Нетфликс составил такую карту для своего головного офиса и для офисов в других странах. Это помогает ориентироваться в стилях общения и сформировать ожидания.</p><p>Некоторые моменты в книге вызывали у меня неподдельный интерес, с чем-то я была крайне не согласна, а что-то казалось невыполнимым. Через свою сеть контактов в LinkedIn я связалась с продакт-менеджером в Нетфликс и попросила созвониться, чтобы расспросить про его работу в компании. Как я и предполагала, в книге некоторые моменты описаны чрезвычайно ярко и несколько преувеличены. Он работает в компании не первый год и описывает атмосферу как креативную и дружелюбную, постоянного страха увольнения нет.</p><p>В целом, очень интересная книга, я рекомендую ее к прочтению.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Джеффа Сазерленда «Скрам. Революционный метод управления проектами»</title>
      <link>https://tproger.ru/books/stoit-prochitat-obzor-knigi-dzheffa-sazerlenda-skram-revoljucionnyj-metod-upravlenija-proektami</link>
      <comments>https://tproger.ru/books/stoit-prochitat-obzor-knigi-dzheffa-sazerlenda-skram-revoljucionnyj-metod-upravlenija-proektami?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/stoit-prochitat-obzor-knigi-dzheffa-sazerlenda-skram-revoljucionnyj-metod-upravlenija-proektami</guid>
      <description><![CDATA[<p>Джефф Сазерленд предлагает применять Scrum даже в повседневной жизни; книга полезна и менеджерам проектов, и тем, кто эти проекты выполняет.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/stoit-prochitat-obzor-knigi-dzheffa-sazerlenda-skram-revoljucionnyj-metod-upravlenija-proektami">Стоит прочитать: обзор книги Джеффа Сазерленда «Скрам. Революционный метод управления проектами»</a>»</p>]]></description>
      <category><![CDATA[Управление проектами]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 01 Feb 2021 06:44:29 GMT</pubDate>
      <content:encoded><![CDATA[<p>В этом обзоре книги Джеффа Сазерленда «Скрам. Революционный метод управления проектами» хотел бы обратить внимание на то, что она обязательна к прочтению не только менеджерам проектов, но и тем, кто эти проекты выполняет и кого пытаются аджализировать. И часто эта аджализация проходит неправильно. Это как с правами — если их не знать, то и не узнаете что их нарушают.</p><p>Автор книги призывает использовать Scrum даже в повседневной жизни и в целом это возможно, но необходимо ли — решать вам. В книге описаны примеры его внедрения в процесс обучения в школе в Голландии и даже при обмене практической информацией между фермерами в Уганде. Почитайте, очень интересно, но истории из жизни добавляют книге объема.</p><p>Итак, давайте перейдем к ключевым моментам книги.</p><h2>Владелец продукта и скрам-мастер</h2><p>Для полноценного и действительного гибкого управления проектом нужно чтобы у команды был владелец продукта. Этот тот, кто видит что нужно и чего нужно достичь по итогам проекта. Принимает решение по рискам и приоритетам, а также отвечает за конверсию работы команды в прибыль.</p><p>Владелец продукта должен понимать как устроен процесс разработки в команде и уметь оценивать ее возможности. Также он должен уметь анализировать рынок и понимать его потребности и, соответственно, хорошо разбираться в сути продукта.</p><p>Еще у владельца продукта обязательно должны быть достаточно широкие полномочия для принятия решений, т.к. именно он, по мнению автора, несет ответственность за полезность продукта.</p><p>Одна из распространенных ошибок в том, что эту роль выполняет человек, который не является достаточно компетентным во всех вышеперечисленных аспектах. Например, сотрудник бизнес подразделения, который знает рынок, может сказать какие есть потребности у клиентов, но не умеет общаться с разработчиками и не понимает как устроены процессы в команде.</p><p>Есть еще одна важная роль в команде — скрам-мастер. Это человек, который должен не управлять, а следить за соблюдением процедур и обеспечивать эффективность процесса. Основные его задачи это фасилитировать все встречи, смотреть за их открытостью и помогать команде преодолевать препятствия, мешающие ходу работ.</p><h2>Команда</h2><p>Автор утверждает, что команда должна быть небольшой — от трех до девяти человек максимум. Также команда должна обладать всеми необходимыми навыками, знаниями и компетенциями, достаточными для реализации проекта и создания готового продукта. Т.е. команды должны стремиться быть автономными и многофункциональными — именно это приводит к успеху. В таком случае у команды есть одна общая цель, достижение которой дает значительную мотивацию.</p><p>На практике же часто применяют матричную структуру управления в командах и собирают команду из нескольких функциональных групп разработчиков. В такой ситуации очень часто бывает, что один и тот же сотрудник может принимать участие сразу в двух и более проектах. Старайтесь этого избегать, т.к. переключение между контекстами проектов отнимает у исполнителя много сил и времени. А иногда задачи из этих проектов будут конфликтовать между собой и тут уже появляется проблема определения очередности выполнения этих задач. Старайтесь исключить такое разделение ресурсов, а если не получается, то пытайтесь минимизировать количество переключений между проектами — выделяйте сотрудников целиком и полностью на длительное время. Но моя практика показывает, что это не работает. Всегда найдутся проблемы и баги в другом проекте, которые потребуют срочного участия разработчика и команде придется подождать.</p><h2>Бэклог</h2><p>Это список абсолютно всех требований к продукту, отсортированных по приоритетам. Бэклог развивается и существует вместе с продуктом. Должен существовать один бэклог продукта и его хозяином является владелец продукта. Он же расставляет в нем приоритеты. За полноту бэклога также отвечает владелец продукта, т.к. именно он имеет полное представление о продукте и потребителях.</p><p>Начинайте работу с тех фичей, которые принесут максимальную пользу. И помните — бэклог может и должен меняться. Те фичи, которые были нужны месяц назад могут оказаться неактуальными сейчас. Будьте готовы даже исключать фичи из бэклога. Знаю, это тяжело, но это только сначала.</p><p>Важно, что владелец продукта говорит что нужно сделать, но не как. Какими инструментами пользоваться и как реализовать фичу решает команда самостоятельно.</p><p>Хорошо, бэклог составили, приоритеты расставили и обычно следующий вопрос: «Ну что, когда сделаете?». Кто из вас давал оценки в часах или датах? И как часто вы попадали в эту оценку? Да, если задач на неделю или даже месяц, то можно попасть с высокой степенью вероятности, но что делать если проект на год или даже больше? Очень часто оказывается, что уже через неделю бэклог может измениться — появятся новые фичи, например. И из-за этого надо опять все переоценивать. Это сложно и не нужно. И мы подходим, пожалуй, к самому сложному для понимания моменту в Scrum — это оценка задач и планирование сроков. Скажу сразу — если вы пробовали и у вас не получилось, то значит надо пробовать еще, т.к. это действительно работает и можно прогнозировать сроки в длительных проектах с бо́льшей точностью.</p><p>Автор предлагает оценивать задачи по уровню их сложности, а не по времени. И брать для этого относительные размеры, например футболок: S, M, L, XL, XXL. А еще лучше использовать последовательность Фибоначчи: 1, 2, 3, 5, 8, 13, 21.</p><p>Перед оценкой бэклога разбейте свои фичи на пользовательские истории и опишите в них сюжет: Как X, я хочу Y, для того, чтобы Z. Пользовательские сценарии оценить проще и при оценке используйте дельфийский метод или покер планирование. Суть у этих двух методов одна — собрать объективную оценку каждой пользовательской истории со всех участников планирования без влияния одного мнения на другое. И что еще важно, оценка не должна привязываться к скиллам разработчиков. Например, нельзя оценить задачу в 5 поинтов, если ее будет делать джун и в 2 поинта, если синьор. Нужно оценивать именно сложность, например пусть будет 3 поинта. Просто джун будет делать ее дольше, но это все равно 3 поинта. Тогда получится, что сеньор сделает за спринт задач на 40 поинтов, а джун только на 10. Именно это и нужно.</p><p>«Ну и кому нужны эти абстрактные числа? Как сказать когда работы будут выполнены?» — спросите вы. А вот как — мы уже поняли, что мы оцениваем сложность и за один и тот же промежуток времени разработчики с разным опытом реализуют задач на разное количество поинтов. Т.е. для оценки сроков нам нужно сначала узнать производительность всей команды — это сумма поинтов всех выполненных задач в спринте. И после того как команда пройдет от двух до четырех спринтов и научится одинаково оценивать сложность задач, вы сможете получить среднюю производительность команды в поинтах. А дальше простая математика — вам нужно разделить сумму поинтов всего бэклога на производительность команды и вы получаете количество спринтов, которое вам понадобится для выполнения всех задач из бэклога.</p><h2>Спринты</h2><p>Спринты всегда должны иметь определенную продолжительность, которая должна быть меньше месяца. Обычно команды выбирают спринты в одну или две недели. Каждый спринт должен быть спланирован накануне совместно с командой, скрам-мастером и владельцем продукта. Команда должна брать задачи в спринт из верхней части бэклога при этом учитывая производительность команды в поинтах за прошлый спринт. Основное правило Scrum, которое на моей практике мало где соблюдается:</p><p>Если команда договорилась об определенном количестве заданий, которые нужно выполнить за один спринт, то добавлять новые уже нельзя. Команда должна быть в состоянии работать автономно на протяжении всего спринта и завершить то, что пообещала заказчику сделать.</p><p>На моей практике еще ни один спринт не обходился без вбросов от заказчика. В случае если объяснения, что так делать не нужно не работают, то я обычно, закладываю процент в спринт на внезапные задачи. А этот процент вычисляется так же как и производительность команды — исключительно опытным путем.</p><h2>Стендап-митинги</h2><p>Это ежедневные встречи команды, которые, по мнению Сазерленда, должны длиться не более 15 минут. Каждый участник должен ответить на три вопроса:</p><ol><li>Что ты делал вчера, чтобы помочь команде завершить спринт?</li><li>Что ты будешь делать сегодня, чтобы помочь команде завершить спринт?</li><li>Какие препятствия встают на пути к достижению цели спринта?</li></ol><p>Очень часто митинги растягиваются на более продолжительное время и обычно это связано с поиском или обсуждением решений конкретных задач. Так делать не нужно. Обсуждайте решение конкретных задач на отдельных встречах меньшим составом. Как правило, вся команда там не требуется.</p><p>Автор утверждает, что митинги это пульс всего процесса Scrum и основная суть таких встреч в том, чтобы вся команда точно знала актуальной статус каждой задачи. Результатом митинга является Scrum-доска с задачами в актуальном статусе.</p><h2>Обзор спринта или демо</h2><p>Джефф говорит, что это встреча, на которой команда рассказывает, что сделано за спринт и демонстрирует готовые части продукта. Также он предлагает проводить встречи открыто и приглашать всех заинтересованных лиц — заказчика, представителей руководства и даже потенциальных потребителей. Команда должна показать только то, что действительно завершено и готово к использованию.</p><h2>Ретроспектива спринта</h2><p>Автор предлагает еще один инструмент — ретроспектива спринта. Это встреча команды после демонстрации результата прошедшего спринта, на которой все садятся за общий стол и обсуждают ряд вопросов:</p><ol><li>Что прошло хорошо?</li><li>Что можно было сделать лучше?</li><li>Что можно сделать лучше в следующем спринте?</li><li>Какое улучшение можно внедрить прямо сейчас?</li></ol><p>Джефф отмечает, что для того чтобы встреча принесла пользу, важно создать атмосферу доверия и донести до всех участников, что вы никого не обвиняете и не ругаете, а рассматриваете рабочий процесс.</p><p>Далеко не у всех команд присутствует ретроспектива, т.к. не все понимают ее важность.</p><p>Если вы используете Scrum, но при этом мои примеры неудачного применения вызвали у вас улыбку или вы просто недовольны процессом разработки в вашей команде — обязательно прочитайте эту книгу и у вас будет понимание к каким процессам должны стремиться менеджеры.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: подборка книг, которые будут полезны любому айтишнику</title>
      <link>https://tproger.ru/books/stoit-prochitat-podborka-knig-kotorye-budut-polezny-ljubomu-ajtishniku</link>
      <comments>https://tproger.ru/books/stoit-prochitat-podborka-knig-kotorye-budut-polezny-ljubomu-ajtishniku?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/stoit-prochitat-podborka-knig-kotorye-budut-polezny-ljubomu-ajtishniku</guid>
      <description><![CDATA[<p>Специалисты BI.ZONE собрали литературу об организации разработки, управлении IT-проектами и навыках, полезных разработчикам, менеджерам и пентестерам.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/stoit-prochitat-podborka-knig-kotorye-budut-polezny-ljubomu-ajtishniku">Стоит прочитать: подборка книг, которые будут полезны любому айтишнику</a>»</p>]]></description>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 21 Jan 2021 16:09:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Специалисты BI.ZONE составили подборку универсальной литературы, проверенной временем, которая подойдет разработчикам, проектным менеджерам, пентестерам и даже дизайнерам. В нее вошли книги об организации процессов разработки продукта, управлении IT-проектами, навыках, необходимых для более успешной и продуктивной работы.</p><p>Моя книга: «Человеческий фактор. Успешные проекты и команды», ДеМарко Том, Листер Тимоти.</p><p>Кому читать: всем, кто работает в IT-проектах: как менеджерам, так и исполнителям.</p><p>Эта книга рассказывает, как правильно работать с людьми, особенно с разработчиками и дизайнерами.</p><p>ДеМарко и Тимоти обращают внимание на ошибки, которые усложняют управление командой. Одна из них — чрезмерное стремление руководителя улучшить технологии работы, автоматизировать процессы. От этого страдает управление человеческими ресурсами, которое получает низший приоритет. Авторы пишут:</p><p>Гораздо проще организовать установку нового оптического привода, чем выяснить, почему Хорас в замешательстве или почему Сьюзен выражает недовольство компанией уже после нескольких месяцев работы.</p><p>Мне понравилась идея о том, что процесс разработки может зайти в тупик, и к этому нужно быть готовым. Не стоит создавать атмосферу, в которой нельзя совершать ошибки и возможность неудачи даже не рассматривается. Иначе команда будет работать в постоянном стрессе.</p><p>Книга будет полезна как для руководителей проектов, так и для исполнителей. Она поможет обеим сторонам услышать друг друга и разобраться в сложностях, которые имеют человеческую природу. Например, менеджеры узнают, как напоминать исполнителям о задачах и добиваться от них творческого подхода, вдумчивости и и изобретательности.</p><p>Исполнители, в свою очередь, смогут лучше понять, как адекватно реагировать на замечания и продуктивно влиять на организацию работы в команде.</p><p>Я читал данную книгу в оригинале, но думаю, что перевод ничем не хуже.</p><p>Моя книга: «Совершенный код», Стив Макконнелл.</p><p>Кому читать: разработчикам и менеджерам IT-проектов.</p><p>Книга, в которой описаны неустаревающие принципы грамотного написания кода, универсальные для любых языков программирования и технологий. Стоит читать, чтобы выработать высокую культуру разработки ПО.</p><p>В этой книге собрано все, что связано с разработкой, аналогов я не знаю. Макконнелл нашел баланс и создал руководство, в котором основательно и подробно описаны все важные аспекты: от организации процесса разработки до создания высококачественного кода. Издание помогает структурировать знания и посмотреть на одни и те же идеи с разных сторон, научиться делать что-то по-новому. Я прочитал его еще в начале карьеры и сразу стал применять многие приемы в своей работе: начал писать тесты, пользоваться статистическими анализаторами. В целом благодаря рекомендациям и советам из книги стиль моего кода изменился в лучшую сторону.</p><p>Помимо технических приемов и методов, автор уделяет много внимания и человеческому фактору в программировании. Макконнелл много рассказывает о процессах, особенностях работы, полезных привычках, которые стоит выработать, чтобы сделать работу более эффективной.</p><p>Книга написана доступным языком и будет полезна так разработчикам, так и менеджерам. Целиком читать не обязательно. К примеру, менеджеры могут изучить только разделы, посвященные организации процесса разработки, работе с техдолгом, управлению качеством, не углубляясь в вопросы собственно кода.</p><p>Моя книга: «Внутреннее устройство Windows», Руссинович Марк, Соломон Дэвид.</p><p>Кому читать: системным и прикладным программистам.</p><p>Это одна из лучших книг, посвященных внутренним механизмам Windows. Она подойдет как системным программистам, так и прикладникам, которые хотят глубже разобраться в работе этой операционки.</p><p>Бессмысленно читать ее, не имея серьезной базовой подготовки. Данная книга не предназначена для тех, кто хочет просто ознакомиться с основами программирования под Windows. Даже подготовленному читателю приходится возвращаться к одной и той же теме несколько раз, чтобы полностью понять суть написанного. Но приложенные усилия и время с лихвой компенсируются ростом компетенций по результатам вдумчивой работы с книгой.</p><p>Авторы описывают базовые подсистемы, такие как планировщик процессов, управление памятью, файловая подсистема. Некоторые из них описаны не так детально, как хотелось бы. Например, почти не затрагивается управление аппаратными устройствами, шинами I/O. Однако с каждым новым изданием список рассматриваемых тем расширяется и охватывает новые возможности современных версий Windows. В последних версиях уже есть информация об устройстве актуальных механизмов обеспечения безопасности, таких как PatchGuard, AppLocker, описание гипервизора и виртуализации и пр.</p><p>К сожалению, в новых изданиях сильно упало качество перевода по сравнению с предыдущими. Обнаруживается много несостыковок и неточностей. Поэтому рекомендую читать или оригинал, или ранние издания на русском языке.</p><p>Моя книга: «Чистый код: создание, анализ и рефакторинг», Роберт Мартин.</p><p>Кому читать: начинающим и опытным программистам.</p><p>Разработчики не всегда заботятся о качестве оформления кода. В результате в проекте сложно разобраться и самому автору, и его коллегам.</p><p>Мартин объясняет, как анализировать готовый код, обнаруживать узкие места, «запахи», вносить изменения (рефакторить) таким образом, чтобы другому разработчику сразу было понятно, что в этом куске кода происходит. Все эти знания должны появляться у программиста на старте карьеры. Это как правила хорошего тона в разработке, соблюдение которых повышает эффективность и ценность сотрудника.</p><p>Благодаря этой книге я изменил подход к работе. Теперь вносить изменения в мой код стало проще, на дополнения не нужно тратить слишком много времени. Такие улучшения помогают снизить издержки компании, ведь сам процесс разработки становится более понятным и прозрачным. Новым сотрудникам в таких условиях также легче влиться в проект, подхватить текущие задачи по разработке и начать приносить пользу.</p><p>Моя любимая часть книги посвящена комментариям. В Сети часто разгораются споры о том, где писать комментарии, сколько их должно быть и что в них включать. Но после прочтения «Чистого кода» у вас не останется никаких сомнений на этот счет.</p><p>На практике код чаще читают, чем пишут. Именно поэтому каждый программист должен знать, как сделать свой проект чище и понятнее.</p><p>Все свои рекомендации Мартин подкрепляет наглядными и понятными примерами. Чтобы лучше понимать их, необходимо иметь базовые представления о программировании. Но если вы знаете, что такое переменная, функция и исключение, книга обязана стать второй в вашем списке мастридов на пути в IT.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Сэма Ньюмана «Monolith to Microservices. Evolutionary patterns to transform your monolith»</title>
      <link>https://tproger.ru/books/obzor-knigi-sjema-njumana-monolith-to-microservices-evolutionary-patterns-to-transform-your-monolith</link>
      <comments>https://tproger.ru/books/obzor-knigi-sjema-njumana-monolith-to-microservices-evolutionary-patterns-to-transform-your-monolith?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/obzor-knigi-sjema-njumana-monolith-to-microservices-evolutionary-patterns-to-transform-your-monolith</guid>
      <description><![CDATA[<p>Книга описывает шаги и способы миграции с монолитной архитектуры на микросервисную, а также разбирает вопрос, нужен ли такой переход вообще.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/obzor-knigi-sjema-njumana-monolith-to-microservices-evolutionary-patterns-to-transform-your-monolith">Стоит прочитать: обзор книги Сэма Ньюмана «Monolith to Microservices. Evolutionary patterns to transform your monolith»</a>»</p>]]></description>
      <category><![CDATA[Микросервисы]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 20 Jan 2021 08:44:16 GMT</pubDate>
      <content:encoded><![CDATA[<p>Последние несколько лет множество команд и компаний сталкиваются с задачей перестроения архитектуры продуктов от монолитной к микросервисной архитектуре. Термин «микросервис» стал настолько популярным и часто встречаемым в выступлениях, статьях и книгах, что может сложиться впечатление о том, что это чуть ли не единственный правильный путь построения приложений в 2021 году. Однако, мягко говоря, это не так.</p><p>Ожидания бизнеса и ожидания команды инженеров от перехода на архитектуру микросервисов могут быть совершенно разными. Без взвешенной оценки всех «за и против», такой переход может не только не оправдать ожиданий, но и привести как к технической катастрофе, так и проблемам в бизнесе. Даже когда выбор сделан, дальнейшие конкретные шаги всегда зависят от множества факторов, и довольно сложно найти единое пособие о том как делать такую миграцию. Но на мой взгляд, Сэму Ньюману это удалось. Он разложил разные условия и факторы в общие паттерны принятия решений и способы миграции, четко описал критерии выбора того или иного пути и показал возможные последствия каждого из них.</p><p>Книга «Monoliths to Microservices» основательно покрывает вопросы выбора архитектуры, определения шагов перехода и в деталях описывает паттерны миграции баз данных, компонент приложений и инфраструктуры. Она будет полезна как разработчикам и архитекторам, так и CTO и Engineering Manager’ам. Топ менеджерам и людям из бизнеса будет полезно ознакомиться с первыми двумя главами, посвящёнными непосредственно организации миграции архитектуры.</p><p>В начале книги, ожидаемо, описываются основные отличия микросервиса от так называемого монолита, ведь даже понятие монолита не является таким уж однозначным. Автор достаточно детально проходит по этим двум понятиям, приводя как определения, так и примеры того, что они означают в реальных приложениях. А все описываемые примеры снабжены соответствующим графическим представлением, что облегчает восприятие.</p><p>Далее обсуждаются вопросы, на которые должна ответить команда, чтобы точно определиться нужен ли вообще переход на микросервисную архитектуру. Ведь переход означает не только переписывание кодовой базы, но и соответствующие изменения в структуре организации. В книге объясняются такие важные понятия как «отменяемые и неотменяемые изменения» (irreversible and reversible changes), «количественные и качественные метрики» (quantitative and qualitative measures), «предметно-ориентированное проектирование» (Domain Driven Design), общеизвестные дизайн паттерны и термины, а также условия, в которых такой переход может привести к неоднозначным последствиям как в коде, так и в бизнесе компании.</p><p>В дальнейшем автор описывает эффективные способы постепенной, но не мгновенной миграции, что скорее всего необходимо в 99% существующих продуктов с монолитной архитектурой. Сначала необходимо выбрать какие части системы стоит переносить первыми, и тут читателю даётся вариант совместного мозгового штурма (Event storming) с командой для приоритезации компонентов миграции. Учитываются многие факторы, такие как «важность для бизнеса», «готовность к переходу», «навыки и структура команды», а также приводятся примеры возможных временных рамок того или иного изменения, что всегда существенно с точки зрения бизнеса.</p><p>Наконец, наиболее понравившаяся мне часть, описывающая множество паттернов непосредственного перехода на «все случаи жизни».</p><p>Для разделения компонент системы, «общающихся» по сети, детально описан паттерн Strangler Fig во всех вариантах реализации: с маршрутизацией через Proxy и Reverse Proxy, с использованием различных протоколов и перехватом сообщений. Для практически каждого проекта пригодятся паттерны Branch By Abstraction и Parallel Run. Не забыты паттерны Decorating Collaborator и Change Data Capture. Конкретно для миграции UI части описаны паттерны UI Composition и Micro Frontends. Все они приведены с примерами, так что будет достаточно просто применить их у себя на проекте.</p><p>Отдельного внимания заслуживает глава про паттерны миграции баз данных: описываются самые распространённые способы разделения (на уровне схемы, инстансов и таблиц), а также решения по синхронизации данных, вопросы консистентности (data consistency) и паттерны её достижения. Детально обсуждаются варианты реализации транзакций в распределённых системах, а также описывается паттерн Сага (Saga), как альтернативный вариант для борьбы со сложностью и слабыми сторонами распределенных транзакций.</p><p>И конечно, отдельная часть книги посвящается инфраструктуре вокруг микросервисов: вопросам масштабирования архитектуры, логирования и мониторинга, управления жизненными циклом сервисов и работоспособностью продуктов. Упоминаются, хотя, как мне кажется, не в полной мере раскрыты вопросы использования Service Mesh и Kubernetes, а также End-To-End тестирования, но для этого, наверное, нужно писать отдельную книгу.</p><p>После прочтения книги моя команда разработки практически сразу начала применять способы принятия решения и некоторые паттерны, описанные в книге. Именно потому, что данная книга является действительно очень практическим настольным пособием, я решил написать этот обзор. Очень надеюсь, что в скором времени появится переведенный вариант книги и она станет доступна большей аудитории.</p>]]></content:encoded>
    </item>
    <item>
      <title>Книги по C++: исчерпывающая подборка для начинающих</title>
      <link>https://tproger.ru/books/cpp-books-beginners</link>
      <comments>https://tproger.ru/books/cpp-books-beginners?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Михайлишин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/cpp-books-beginners</guid>
      <description><![CDATA[<p>20 лучших книг по C++ на русском и английском — от основ до STL и структур данных. Подберите учебник по своему уровню и начните изучение C++ прямо сейчас.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/cpp-books-beginners">Книги по C++: исчерпывающая подборка для начинающих</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 15 Jan 2021 11:30:38 GMT</pubDate>
      <content:encoded><![CDATA[<p>• Подборка включает 20 книг по C++ на русском и английском для любого уровня подготовки
• Для полных новичков лучше начать с книги Страуструпа или Стивена Праты
• Если вы знаете другой язык (C, Java, C#), есть книги для быстрого перехода на C++
• В подборке также есть бесплатные онлайн-учебники и сборники задач для практики</p><p>Собранные книги по C++ позволят выучить этот непростой язык как новичкам, так и тем программистам, которые ранее изучали другие языки.</p><p>Примечание Вы читаете улучшенную версию некогда выпущенной нами статьи.</p><ol><li><a href="https://tproger.ru/#part1">Книги на русском</a></li><li><a href="https://tproger.ru/#part2">Книги на английском</a></li></ol><h2>Книги по C++ на русском</h2><p>Книга написана создателем языка C++ — Бьёрном Страуструпом. Материал ориентирован в первую очередь на тех, кто не был знаком с программированием до прочтения этой книги. Она задумана как введение в разработку, а язык C++ играет, скорее, иллюстративную роль. Здесь не удастся найти информацию обо всех возможностях данного языка программирования, зато можно получить полезные советы и рекомендации для более эффективной работы с C++ от человека, который имеет бесценный опыт в программировании и огромное значение в сообществе программистов.</p><p>А ещё у нас есть отличная статья, в которой разобрано, <a href="https://tproger.ru/articles/what-cpp-is-good-for">для чего хорош C++</a>.</p><p>Оригинал шестого издания был выпущен в далёком 2011 году, поэтому о стандартах 14/17 из этого учебника вы не узнаете. Тем не менее, это всё ещё хороший базис для начинающих. Стивен Прата вложил свой преподавательский опыт в эту книгу. В результате получился монументальный труд, который дружественно относится к читателю и понятным языком объясняет фундаментальные основы данного языка программирования.</p><p>Пусть эта книга и освещает только базовые элементы языка, её несомненный плюс в том, что она предлагает закреплять полученные знания путём создания небольших игр. В каждой главе дан определённый игровой проект, на примере которого поясняется, как можно использовать «фишки» «плюсов». Книга подойдёт и тем, кто до нее не был знаком с программированием.</p><p>Книга Роберта Лафоре из серии «Классика Computer Science». В ней очень грамотно и полно представлено понятие объектно-ориентированного программирования в C++. Кроме теории, книга предлагает читателю сделать около 100 различных упражнений, которые позволят отточить навык владения ООП. Отлично подходит для начинающих программистов.</p><p>Харви и Пол Дейтелы в своей книге решили отойти от привычного порядка введения в C++ и уже с третьей главы знакомят читателя с основами ООП, тем самым не освещая должным образом структурное и процедурное программирование. Большое внимание уделяется объектно-ориентированному проектированию программных систем с помощью графического языка UML2. Данный учебник является одним из самых популярных в мире по C++.</p><p>Стандарт C++17 удвоил объем библиотеки по сравнению с С++11. Из книги вы узнаете об особенностях 17-го стандарта с примерами, научитесь создавать пулы потоков выполнения, диспетчеры памяти, типы итераторов. В материале рассмотрены отличия полиморфизма, мономорфизма, а также обобщённых алгоритмов. Подойдёт разработчикам, которые уже знают C++, но хотят овладеть особенностями библиотеки C++17 STL и использовать на практике её компоненты.</p><p>Более тысячи страниц подробного введения в C++, которое детально покрывает буквально все аспекты языка в доступном формате. С самого начала книги читателя знакомят со стандартной библиотекой C++, её популярными функциями и средствами, что позволяет в скором времени приступить к написанию программ, даже если не были изучены некоторые нюансы языка. В книге используется стандарт С++11.</p><p>Книга включила набор сведений, необходимых для успешного анализа и составления эффективных программных кодов. Вся информация изложена последовательно и дополняется огромным количеством примеров, задач для практики, а также детальным разбором решений.</p><p>Содержит в себе всё то же самое, что и «Учебник для начинающих: С++», но короче в 4 раза. В основном из-за того, что автор не пытается ввести читателя в программирование, а сразу учит С++ тех, кто пришел из других языков. Может быть немного сложна для понимания, но тем, кто сможет осилить курс, это ещё и здорово сократит время изучения.</p><h2>Книги по C++ на английском</h2><p>Книга содержит огромное количество материала по C++ и явно стремится осветить все основные аспекты языка. В ней вы найдете информацию как о базовых элементах C++, так и об использовании библиотеки STL. Автор регулярно обновляет книгу, благодаря чему в ней представлена актуальная версия языка. Множество примеров кода и того, как работают программы, позволят закрепить пройденный материал.</p><p>Книга рассчитана в первую очередь на тех, что уже знает язык Си или Си-подобный язык, например, Java. Поэтому она не рассказывает об общих моментах, которые одинаковы или, по крайней мере,  похожи в таких языках, а сразу преподносит материал, присущий только C++. Поэтому если вы изучаете или уже изучили C или Java, то эта книга станет хорошим подспорьем в изучении C++. А если нет, то предлагаем посмотреть подборки книг по <a href="https://tproger.ru/books/9-free-clang-books">C</a> и <a href="https://tproger.ru/books/java-free-beginners-books">Java</a>.</p><p>Книга написана специально для C#-разработчиков. Материал по языку C++ даётся с учётом имеющихся у программиста знаний о языке C#. Книга полезна, когда часть проекта на C++, а вы знаете C#. После изучения материала вы сможете писать полноценные программы уже на C++.</p><p>В нашу подборку книг затесался сайт. Вы думаете, это какая-то ошибка? Вовсе нет: это онлайн-учебник по всему С++. Его несомненное преимущество в том, что каждая глава проиллюстрирована кодом, так что материал будет легче усвоить. Всё расписано достаточно подробно, но самое главное — книга регулярно дополняется в соответствии с новыми стандартами C++.</p><p>Книга научит основам структурного программирования. В первую очередь, она стремится донести до читателя, что такое «думать как программист», а уже во вторую — обучить языку C++. Материал представлен в удобочитаемой форме. Как и во многих учебниках, здесь есть материалы для самопроверки в каждой главе с ответами в конце. Автор подчёркивает, что материал фокусируется на решении типовых проблем и задач, возникающих в процессе написания программы.</p><p>Ещё одна онлайн-книга, которая даёт материал в соответствии с тремя курсами, которые в американских университетах называются CS 1, CS 2 и «Структуры данных». Новичкам стоит начать именно с курса CS 1, поскольку в нём представлены основы программирования на C++. После переходите к курсу CS 2, а затем — к структурам данных.</p><p>Советуем также ознакомиться и с нашим <a href="https://tproger.ru/translations/algorithms-and-data-structures/">материалом по структурам данных</a>.</p><p>Цели книги — научить использовать C++ и мыслить, как исследователь. Она делает акцент на использовании языка C++ как удобного инструмента для научных вычислений. Для знакомства с материалом желательна хотя бы математическая подготовка. Вы научитесь чётко формулировать проблему, представлять её решение, и только после этого писать код и проводить тесты.</p><p>Автор книги, Пэт Морин, считает, что студентам компьютерных специальностей необходимо изучать структуры данных, но в большинстве случаев хорошие книги по этой теме стоят немало, и студенты не могут приобрести их ввиду материального положения. Поэтому он решил написать собственный учебник для свободного распространения.</p><p>Фокус книги сосредоточен на создании эффективных структур данных и алгоритмов. После её прочтения вы научитесь выбирать или проектировать структуру данных, наиболее подходящую в той или иной части программы.</p><p>Раздел упражнений расположен на официальном сайте создателя языка, Бьёрна Страуструпа. Его не стали выпускать в печатном виде, поскольку раздел постоянно обновляется. Документ содержит множество упражнений различных уровней. Данный показатель указывается рядом с номером упражнения. Например, уровень (*1) означает, что задачу вполне реально решить за 10 минут, (*2) — за час, а на (*3) вы можете потратить целый день. Конечно, эти показатели не точные и целиком зависят только от вашего опыта, так что дерзайте! Чем больше задач вы решите, тем лучше освоите инструменты C++.</p><h2>Часто задаваемые вопросы</h2><h3>Какую книгу по C++ выбрать новичку без опыта программирования?</h3><p>Лучшим выбором для полных новичков станет книга Бьёрна Страуструпа «Программирование. Принципы и практика с использованием C++». Она задумана как введение в разработку и не требует предварительных знаний. Если хотите более практичный подход — обратите внимание на «Изучаем C++ через программирование игр», где теория закрепляется созданием небольших игровых проектов.</p><h3>Можно ли выучить C++ по бесплатным книгам?</h3><p>Да, в подборке есть несколько качественных бесплатных ресурсов на английском языке: онлайн-учебник Learn C++, книги «Fundamentals of Programming C++», «The Rook's Guide to C++» и другие. Они регулярно обновляются и покрывают основные аспекты языка.</p><h3>Я знаю Java или C# — какая книга поможет быстро перейти на C++?</h3><p>Для знающих Java подойдёт «C++ Annotations» — она пропускает общие с Java концепции и сразу учит особенностям C++. Для C#-разработчиков есть «C++ Succinctly», которая строит объяснения на знакомых вам паттернах из C#.</p><p>Если вы знаете другие книги, которые подойдут новичкам, поделитесь в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Маркуса Винанда «SQL Performance explained»</title>
      <link>https://tproger.ru/books/obzor-knigi-markusa-vinanda-sql-performance-explained</link>
      <comments>https://tproger.ru/books/obzor-knigi-markusa-vinanda-sql-performance-explained?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/obzor-knigi-markusa-vinanda-sql-performance-explained</guid>
      <description><![CDATA[<p>Книга объясняет, что разработчику нужно знать о SQL и реляционных базах, и показывает, где на самом деле кроется корень проблем с производительностью.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/obzor-knigi-markusa-vinanda-sql-performance-explained">Стоит прочитать: обзор книги Маркуса Винанда «SQL Performance explained»</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Для продолжающих]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 25 Dec 2020 06:01:40 GMT</pubDate>
      <content:encoded><![CDATA[<p>Очень многие веб-ресурсы (сайты, интернет-магазины, соц. сети и так далее) применяют для хранения данных реляционные базы данных (Oracle, MySQL, PostgreSQL и другие) с использованием языка SQL. Считаю, что книга обязательна к прочтению всем разработчикам (и не только), кто работает с языком SQL и с базами данных (БД). Книга станет путеводителем в мир SQL и анализа реляционных баз данных.</p><p>Многие разработчики сталкиваются с проблемами производительности SQL. Даже бытует мнение, что SQL медленный. Да, отчасти, это действительно так, но только отчасти. Корень проблемы лежит в том, как построена БД и как вы запрашиваете данные. На помощь приходит индексирование базы данных.</p><p>Например, самый простой SQL-запрос читается как предложение на английском языке:</p><p>Написание простых запросов к базе данных, в основном, не требует от разработчика глубоких знаний о её внутренней работе. И когда дело доходит до производительности, разработчик всегда «тыкает пальцем» в базу данных, указывая на медленное выполнение запроса и снимая с себя ответственность. Однако, опыт говорит об обратном, разработчик должен иметь представление о внутренней работе SQL и индексировании данных. Только в этом случае он сможет написать правильный запрос и получить быстрый ответ от базы данных. Фактически решение о необходимости индексирования должно ложиться на плечи разработчика. Этот этап является одним из важнейших этапов при работе с SQL, так как только при индексировании база данных будет правильно понимать «как получить требуемую информацию».</p><p>На страницах книги «SQL Performance explained» автор рассказывает о том, что нужно знать разработчику об индексах, а точнее о B-tree индексах, как с ними работать и применять на практике.</p><h2>Итак, подробнее о книге</h2><p>Структура книги хорошо адаптирована для разработчиков, большинство глав соответствуют определённой части оператора SQL:</p><ul><li>Anatomy of an Index.</li><li>The Where Clause.</li><li>Performance and Scalability.</li><li>The Join Operation.</li><li>Clustering Data.</li><li>Sorting and Grouping.</li><li>Partial Results.</li><li>Insert, Delete and Update.</li><li>Execution Plans.</li></ul><p>Это поможет быстро ориентироваться по содержанию книги, когда вы будете применять знания на практике.</p><p>Глава Anatomy of an Index не содержит в себе никаких примеров SQL-запросов, но описывает структуру индекса. Это понимание обязательно для последующих глав. Здесь вы найдёте что такое Slow Index.</p><p>Глава The Where Clause является самой объёмной и содержит максимум описания оператора WHERE. Прочтение этой главы помогло мне отойти от простых выборок по одной колонке таблицы. Применяю сложные запросы с выборкой по нескольким колонкам из нескольких таблиц, используя диапазоны (для выборки дат) и другие условия. После изучения данной главы я смог оптимизировать текущий код нагруженного интернет-магазина и повысить производительность поиска товаров в три раза. Первоначально сложная фильтрация товаров выполнялась в несколько запросов и влекла за собой проблему с паджинацией на странице. После добавления индексов и фильтрации товаров по одному SQL-запросу, скорость выдачи увеличилась в три раза.</p><p>В главе Performance and Scalability описывается как правильно выполнить анализ производительности запросов, выявить узкие места в запросе и рассказывается о масштабировании базы без изменения железа сервера. Автор на примере выборки количества строк показывает какая разница между выполнением запроса в таблицах с разными объёмами данных и как на это влияет применение индексов.</p><p>Главы The Join Operation и Sorting and Grouping объясняют применение индексов для быстрого соединения таблиц, сортировки и группировки данных.</p><p>Сортировка и группировка — весьма ресурсоёмкие операции. Основная проблема заключается в том, что база данных должна временно буферизовать результаты. Операции сортировки и группировки должны прочитать весь ввод, прежде чем смогут произвести первый вывод.</p><p>И тут на помощь приходят индексы, которые хранят данные предварительно отсортированным способом.</p><p>Если требуется получить больше данных, которые хранятся в нескольких связанных таблицах, операция JOIN позволит избежать множественных запросов к базе данных. Моя практика показывает, что менее ресурсоёмким является один большой запрос в несколько таблиц, в отличие от нескольких мелких (беря во внимание большие объёмы данных).</p><p>В главе Clustering Data автор объясняет понятие кластеризации данных и как это влияет на производительность запросов. Кластеризация данных означает хранение данных, к которым последовательно осуществляется доступ, близко друг к другу, чтобы для доступа к ним требовалось меньше операций ввода-вывода. Тут индексы также приходят на помощь и дают возможность кластеризовать данные для повышения производительности запросов.</p><p>Глава Partial Results. В этой главе показано, как использовать конвейерный порядок для эффективного получения частичных результатов. Данный подход поможет повысить производительность запросов. Рассмотрим, например, кейс с социальной сетью и выдачей последних 10 сообщений пользователю. Применение обычной сортировки всех сообщений и ограничение по лимиту выдачи вызовет серьёзные проблемы с производительностью, так как объём таблицы с сообщениями может быть огромным.</p><p>В главе Insert, Delete and Update подробно объясняется, как влияет применение индексов на производительность запросов записи. Использование индексов должно быть продуманным, поскольку всё имеет свою цену.</p><p>Я помню, что долго изучал причину длительного импорта товаров при использовании запроса INSERT. Конечно, я старался максимально использовать индексы в таблицах для увеличения производительности в выборке данных. Из книги я почерпнул, что чем больше индексов в таблице, тем медленнее выполняется INSERT, так как база данных должна убедиться, что новая запись также найдена через индексы. По этой причине он должен добавить новую запись в каждый индекс этой таблицы.</p><p>Запрос INSERT — единственный запрос, который не получает никакой выгоды от использования индексов в базе, потому что не использует условие WHERE. Данное поведение показало мне «цену» большого количества индексов. Теперь я стараюсь не злоупотреблять индексами в таблицах.</p><p>Запрос DELETE очень похож на запрос выборки данных, но с дополнительным шагом для удаления строк. Шаг удаления аналогичен вставке новой строки. И тут нужно понимать, что есть шаг, который не «любит» индексы, но без них будет выполняться полное чтение таблицы для нахождения нужных строк. Таким образом, для запроса DELETE  индексы просто необходимы.</p><p>Запрос UPDATE содержит в себе как удаление старой записи, так и вставку новой. Но есть главное отличие: данный запрос затрагивает не все столбцы, соответственно, и не все индексы таблицы, что повышает производительность запроса по отношению к INSERT и DELETE</p><p>Глава Execution Plans поможет разработчику изучить функциональность запроса EXPLAIN и провести полный анализ запросов и данных. Пожалуй, это одна из важнейших глав в книге, которая направлена на приобретение навыка анализа и оптимизации запросов. Изучив данную главу, я смог выполнить анализ своего проекта (интернет-магазин), выявить узкие места при выборке данных, добавить необходимые индексы и получить значительный прирост в производительности.</p><p>Каждая из описанных глав содержит отличные примеры, которые помогут вам полностью разобрать и усвоить теоретический материал.</p><h2>Выводы</h2><p>Самые важные главы книги «SQL Performance explained» для меня:</p><ul><li>Anatomy of an Index.</li><li>Performance and Scalability.</li><li>Execution Plans.</li></ul><p>Изучив эти главы, я смог чётко уяснить: для чего нужны индексы и как они работают, как нужно писать запросы и строить структуру БД для значительного повышения производительности.</p><p>Узнал много интересной информации о Slow indexes (да, бывают и такие!), Explain запросах и как с ним работать. И самое главное: как строить, развивать и улучшать БД для хранения и получения большого объёма данных.</p><p>В заключение хочу ещё раз отметить, что данная книга обязательна к прочтению всем разработчикам. Она поможет ответить на большинство вопросов, связанных с производительностью БД, «прокачает» вас как разработчика нагруженных систем и проектов и даст хорошее понимание о работе SQL.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Алана Купера «Психбольница в руках пациентов»</title>
      <link>https://tproger.ru/books/obzor-knigi-alana-kupera-psihbolnica-v-rukah-pacientov</link>
      <comments>https://tproger.ru/books/obzor-knigi-alana-kupera-psihbolnica-v-rukah-pacientov?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/obzor-knigi-alana-kupera-psihbolnica-v-rukah-pacientov</guid>
      <description><![CDATA[<p>Книга приоткрывает культуру разработки и объясняет происхождение перегруженных интерфейсов и неочевидных функций, которыми напичканы программы.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/obzor-knigi-alana-kupera-psihbolnica-v-rukah-pacientov">Стоит прочитать: обзор книги Алана Купера «Психбольница в руках пациентов»</a>»</p>]]></description>
      <category><![CDATA[Паттерны проектирования]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 24 Dec 2020 11:28:11 GMT</pubDate>
      <content:encoded><![CDATA[<p>Наверняка каждый сталкивался с такими устройствами и программами, которые буквально «напичканы» сотней полезных дополнительных функций или кнопок. Кажется, что ты приобрел такой универсальный нож, который может все. На деле оказывается, что пользоваться такой вещицей совершенно неудобно, и проще заменить ее на что-то более простое. В таких случаях разработчик едва ли думает о трудностях пользователя, но только не Алан Купер, который решил разобраться в проблеме.</p><p>На написание статьи меня сподвиг мой опыт и мои боли, через которые пришлось пройти. Придя в тестирование из совершенно иной инженерной области, я хотел сформировать представление о полном цикле производства программного продукта.</p><p>Я перелопатил тонны литературы, но одной из любимых книг стала книга Алана Купера «Психбольница в руках пациентов», написанная в начале нулевых. События книги затрагивают в том числе и девяностые, но это не мешает ей быть актуальной даже в 2020. Поэтому я решил выписать некоторые мысли Алана Купера.</p><p>Читая книгу, я невольно вспоминал те проблемы, которые возникали каждый раз, когда мне приходилось изучать новый программный продукт, неважно, будь то десктопное приложение, новый телефон или очередное обновление операционной системы. Я получал негативный опыт, но не понимал, почему есть настолько неочевидные функции, непонятно скомпонованное меню и перегруженный интерфейс. Книга приоткрывает занавес культуры разработки и объясняет, почему так происходит.</p><p>В начале книги автор рассказывает о личном опыте использования программных продуктов. Он, человек более 20 лет находящийся в индустрии, не может справиться со своим будильником, а управление функциями телевизора приводит его в тупик. Эти и другие сложности подводят его к мысли о том, что в погоне за новыми функциями, за менеджерскими достижениями производители забывают о конечном пользователе.</p><p>«Мы даем вам много функций, вы должны быть счастливы», — говорят производители. Но какой от этих функций толк, если пользователь не понимает, зачем они нужны, или не может ими пользоваться ввиду чрезвычайной сложности. Зачастую такое происходит из-за сжатых сроков, установленных топ-менеджментом. В итоге UI/UX делаются  в последнюю очередь, после реализации бизнес-логики.<br /></p><p>Пользователям важно лишь то, насколько удобно решать нужные им задачи с помощью конкретного продукта. В редких случаях опции тоже могут пригодиться при решении задач, но чаще случается так, что опции только затрудняют работу и запутывают пользователя. Более того, опции, польза которых неочевидна, заставляют пользователей чувствовать себя глупыми.</p><p>Забывая о том, что программа должна помогать пользователю достигать его целей,  разработчики и менеджеры делают программы, отражающие механизм их устройства. Разумеется, сами программисты не испытывают неудобств при обращении с такой программой, так как понимают, как она устроена, и, следовательно, знают, как с ее помощью решать задачи.</p><p>Люди же вынуждены пользоваться этими плохими программами по нескольким причинам:</p><ol><li>Это их рабочий инструмент, и они боятся потерять работу. Обычно это корпоративные пользователи.</li><li>Отсутствие альтернатив. Актуально для специфического софта, позволяющего решать определенные задачи.</li></ol><p>Чтобы пользователи могли быть довольны программами и эффективно выполняли с их помощью свои задачи, программы должны быть созданы с учетом требований человеческой природы.</p><p>Автор уверен, что нельзя доверять проектирование систем и интерфейсов программистам и менеджерам. Этим должны заниматься специалисты по проектированию UX/UI.</p><p>Чтобы решить проблему эффективно, потребуется приобщиться к образу  мышления программистов и понять, как замотивировать их создавать интерактивные продукты, приятные пользователям. Проектировщику взаимодействия важно обладать знаниями психологии, но сюда должно входить не только понимание психологии пользователя, но и психологии разработчиков программных продуктов.</p><h2>Как решить проблему и с чего начать проектирование?</h2><p>Разработайте детальное описание потенциального пользователя вашего продукта и его намерений. Для этого автор предлагает использовать метод персон. Персоны — это портреты выдуманных пользователей, под нужды которых создается проект.</p><p>Советы по созданию персон от Алана Купера:</p><ol><li>Ваш продукт станет куда более успешным, если вы спроектируете его только для одного человека.</li><li>Чем конкретнее мы прописываем характеристики персон, тем более эффективны они в процессе проектирования.</li><li>Важно не смешивать точное определение персоны пользователя с реальными людьми.</li></ol><p>Автор указывает на следующие плюсы такой персонализации:</p><ol><li>Одним из ценных моментов использования персон является то, что они задают более реалистичный тон всем дискуссиям об уровне компьютерной грамотности. Степень подготовленности пользователей может варьироваться в очень широких пределах, и персоны позволяют отчетливо это увидеть.</li><li>Второй чрезвычайно важной и ценной особенностью персон является их способность выступать в качестве великолепного инструмента коммуникации. Набор образов превращается в систему проектирования, обладающую выразительной силой, позволяющей донести наши представления относительно проектирования. Куда больше они, подобно прожектору, показывают программистам, маркетологам и руководителям, что мы принимаем совершенно верные решения по проектированию.</li></ol><h2>Как создавать образы персон?</h2><p>Для каждого проекта составляется отдельный набор образов, включающий от трех до двенадцати уникальных персон. При этом проектирование осуществляется не для всех из них, но важен каждый образ для отражения состава пользователей. Некоторые персоны описываются лишь для того, чтобы понять, для кого мы точно проектировать не будем.</p><p>Любой набор образов потенциальных пользователей содержит хотя бы одну ключевую персону. Этот главный образ становится центром процесса проектирования. Ключевой является такая персона, которая обязательно должна быть довольна интерфейсом, но при этом она не может быть довольна, если интерфейс спроектирован под какую-то другую персону.</p><h2>Как применять персоны?</h2><p>В первую очередь необходимо определить цели, которые каждая из персон преследует. Два аспекта: персоны и цели – неотделимы друг от друга. Суть персоны – в достижении каких-либо целей, а цели, в свою очередь, наполняют смыслом персону. Проектирование под цели персоны пользователя позволяет нам явно увидеть альтернативные способы предоставления функциональных возможностей. Как правило, с помощью такого подхода получается найти лучшие способы решения типичных проблем проектирования.</p><p>Целью проектировщика взаимодействия является создание желанной для пользователя программы. Мы должны проектировать ее поведение так, чтобы программа вела себя как симпатичный нам человек. Персоны и цели помогают создать программный продукт с поведением, похожим на поведение хорошего сотрудника и отвечающим следующим требованиям обходительной программы:</p><ul><li>программа интересуется мной;</li><li>программа относится ко мне с почтением;</li><li>программа ведет себя приветливо;</li><li>программа обладает здравым смыслом;</li><li>программа предугадывает мои потребности;</li><li>программа обладает отзывчивостью;</li><li>программа не спешит жаловаться на личные проблемы (обходительная программа всегда в курсе происходящего);</li><li>программа обладает проницательностью;</li><li>программа характеризуется уверенностью в своих силах (обходительная программа концентрируется на важном);</li><li>программа позволяет обойти правила;</li><li>программа поощряет незамедлительно;</li><li>программа вызывает доверие.</li></ul><p>Подводя итог по книге, хотелось бы отметить ее практическую ценность и понятную большинству подачу материала. Технологии и принципы разработки ПО ушли вперед, но они ничуть не перечеркнули идеи Алана Купера: появились гибкие методологии Agile, которые прекрасно вписывают в свой концепт этапы прототипирования и проектирования UI/UX.  По моему убеждению, для старта в IT эта книга обязательна к прочтению.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Бретта Маклафлина «Объектно-ориентированный анализ и проектирование»</title>
      <link>https://tproger.ru/books/obzor-knigi-bretta-maklaflina-obektno-orientirovannyj-analiz-i-proektirovanie</link>
      <comments>https://tproger.ru/books/obzor-knigi-bretta-maklaflina-obektno-orientirovannyj-analiz-i-proektirovanie?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/obzor-knigi-bretta-maklaflina-obektno-orientirovannyj-analiz-i-proektirovanie</guid>
      <description><![CDATA[<p>Издание серии Head First о том, как устроены анализ и проектирование объектно-ориентированных программ, полезно разработчикам junior и middle.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/obzor-knigi-bretta-maklaflina-obektno-orientirovannyj-analiz-i-proektirovanie">Стоит прочитать: обзор книги Бретта Маклафлина «Объектно-ориентированный анализ и проектирование»</a>»</p>]]></description>
      <category><![CDATA[Архитектура ПО]]></category>
      <category><![CDATA[Объектно-ориентированное программирование]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 17 Dec 2020 12:45:45 GMT</pubDate>
      <content:encoded><![CDATA[<p>Пожалуй, одной из самых важных книг в моей карьере я могу назвать «Объектно-ориентированный анализ и проектирование» из серии Head First, авторы Бретт Маклафлин, Гэри Поллайс и Дэйв Уэст. Вообще Head First очень полезная серия книг для разработчиков уровня junior/middle, она способна подтолкнуть их по карьерной лестнице в мир бизнеса, архитектурных решений и большой ответственности в рамках всего продукта. Но для начала хочу остановиться на небольшой части этого мира, а именно – на приложении.</p><h2>С чего начинается приложение?</h2><p>Авторы рассказывают о том, что приложение начинается с потребностей заказчика, кем бы он ни был представлен. Владелец банковской карты, геймер, врач, официант — у всех них есть боли и потребности. В книге объясняется, почему важно правильно собрать требования, как сильно это влияет на проектирование приложения и что будет, если этого не сделать (спойлер – ничего хорошего:). Изучать этот вопрос вы начнете с приложения для одного заказчика, владельца гитарного магазина, которому нужно сделать систему учета своих гитар, и ваша цель – помочь ему в этом. Когда решите эту задачку, перейдете к более сложным примерам, которые при этом вполне понятные и подробно описаны. Кстати, хочу обратить внимание на подачу материала: он простой, язык близок к разговорному, а еще в книге много иллюстраций и схем, и это здорово помогает восприятию. В некоторых упражнениях книгу предлагают использовать как рабочую тетрадь, что тоже удобно (если только вы не читаете ее в электронном виде).</p><h2>Про требования и их изменчивость</h2><p>Авторы «Объектно-ориентированного анализа и проектирования» идут вместе с читателем по всем этапам жизненного цикла – от сбора требований заказчиков до тестирования готового решения.</p><p>Чуть подробнее расскажу про первый из этих этапов. «Как собирать требования? Что предусмотреть? А какие части могут меняться?» — эти вопросы программист задает себе не всегда, а стоило бы. Потому что от грамотного и подробного сбора требований зависит качество результата и удовлетворенность заказчика. Книга акцентирует внимание на этих вещах, и показывает, как заложить гибкость и изменчивость в код, чтобы доработки не заставали вас врасплох.</p><p>Как известно из практики и другой хорошей книги, «Совершенный код» Стива Макконелла, самые дорогие ошибки случаются из-за некорректных требований или из-за недосмотра потенциальных изменений. В нашем мире, разумеется, нельзя всё предусмотреть, но хотя бы попытаться — точно стоит!</p><h2>А где же разработка?</h2><p>Наверное, я вас уже напугал, что в книге не будет ни строчки кода. Но нет, в ней приведено очень много примеров и хорошего, и плохого кода, и советов как отличить один от другого. Плюс в книге много практических заданий на весь изученный материал – в каждой главе есть задачки, на которых можно применить свежие знания. А в последней четверти книги нас ждет большой проект, который предстоит сделать полностью самостоятельно – от сбора требований и до красиво структурированного кода.</p><p>Кстати, о структурированном коде. В книге подробно изложены важные моменты:</p><ul><li>основные принципы ООП — даже начинающий программист слышал про инкапсуляцию, наследование и полиморфизм. Тут вы закрепите свои знания, и поймёте, что инкапсуляция — это не только про область видимости;</li><li>принцип DRY — Don’t repeat yourself, он расскажет, как избежать повторения кода и инкапсулировать логику правильно;</li><li>принцип KISS — keep it simple stupid, здесь пойдет речь о том, почему не стоит строить слишком гибкие приложения, пытаясь предвидеть требования;</li><li>принцип YAGNI — You ain’t gonna need it, это история о том, как не писать лишний код, пытаясь играть в экстрасенса;</li><li>паттерны проектирования — важная составляющая, которая поможет вам использовать мудрость других разработчиков (:</li></ul><p>Все это показано на примерах из реальной жизни. Замечу, что с этой информацией вы, скорее всего, столкнетесь на собеседовании, что делает ее еще более ценной.</p><h2>Послесловие</h2><p>Мир программирования довольно обширен и описать его в одной книге, даже самой подробной, довольно сложно. Тем не менее, авторам удалось уложить в нее много важных моментов, которые однозначно пригодятся на практике программистам разного уровня. Кому-то будут полезны паттерны и принципы чистого программирования, кому-то пригодится анализ требований, кому-то — проектирование в UML.</p><p>Но что точно пригодится каждому, — понимание, что программы не бывает без заказчика.</p>]]></content:encoded>
    </item>
    <item>
      <title>Что почитать? Подборка художественных книг для программиста</title>
      <link>https://tproger.ru/books/chto-pochitat-podborka-hudozhestvennyh-knig-dlja-programmista</link>
      <comments>https://tproger.ru/books/chto-pochitat-podborka-hudozhestvennyh-knig-dlja-programmista?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Олег Борисенков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/chto-pochitat-podborka-hudozhestvennyh-knig-dlja-programmista</guid>
      <description><![CDATA[<p>От классической фантастики до фанфиков и авангарда: очень разные книги, чтобы отвлечься от профессиональной технической литературы.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/chto-pochitat-podborka-hudozhestvennyh-knig-dlja-programmista">Что почитать? Подборка художественных книг для программиста</a>»</p>]]></description>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 10 Dec 2020 14:45:18 GMT</pubDate>
      <content:encoded><![CDATA[<p>У нас есть множество <a href="https://tproger.ru/books/">подборок профессиональной литературы</a>, однако этим книги для программистов не ограничиваются. Полезно иногда отвлечься от технической литературы и почитать что-нибудь художественное.</p><p>В этой статье мы собрали очень разные книги: от классической фантастики до фанфиков и авангарда.</p><p>А какие у вас любимые художественные книги? Поделитесь в <a href="https://tproger.ru/books/chto-pochitat-podborka-hudozhestvennyh-knig-dlja-programmista/#comments">комментариях</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Роберта Мартина «Чистая Архитектура»</title>
      <link>https://tproger.ru/books/obzor-knigi-roberta-martina-chistaja-arhitektura</link>
      <comments>https://tproger.ru/books/obzor-knigi-roberta-martina-chistaja-arhitektura?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/obzor-knigi-roberta-martina-chistaja-arhitektura</guid>
      <description><![CDATA[<p>Книга «дядюшки Боба» о дизайне и проектировании программ и о том, как вести разработку в условиях постоянно меняющихся требований заказчика.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/obzor-knigi-roberta-martina-chistaja-arhitektura">Стоит прочитать: обзор книги Роберта Мартина «Чистая Архитектура»</a>»</p>]]></description>
      <category><![CDATA[Архитектура ПО]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 04 Dec 2020 12:34:11 GMT</pubDate>
      <content:encoded><![CDATA[<p>Не секрет, что одним из самых сложных в разработке программного обеспечения, является вопрос «как успешно вести разработку в условиях изменяющихся требований?»</p><p>Изменяющиеся требования среди многих разработчиков принято считать чем-то очень плохим и даже в какой-то мере неадекватным. Тот факт, что пожелания клиентов менялись в процессе разработки системы, принято считать основной причиной плохой архитектуры, нестабильного поведения, множества неисправностей и жалоб клиентов, а также снижающаяся с каждым годом скорость разработки, и в то же время всё возрастающая стоимость добавления новой функциональности.</p><p>Понятие Чистой архитектуры впервые Роберт Мартин (или, дядюшка Боб) <a href="https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html">опубликовал</a> у себя в блоге ещё в 2012 году. В книге же, он подводит к этому понятию последовательно, в первую очередь развеивая миф о катастрофичности изменчивых требований. Чтобы сделать это, он вводит несколько важных понятий и определений.</p><p>С самого начала он говорит о том, что всякая программа имеет две ценности: <b>поведение</b> и <b>структуру (архитектуру)</b>. И хотя разработчики отвечают за высокий уровень обеих этих ценностей, важно понимать, что на успешность развития проекта одна из ценностей влияет сильнее другой. Какая?</p><p>Многие программисты полагают, что их задача заставлять компьютеры соответствовать требованиям и исправлять ошибки под отладчиком. Однако, на самом деле, программистов нанимают на работу, чтобы они заставили компьютеры экономить деньги или приносить прибыль. Это определяет <b>поведение</b> — одну из двух ценностей программы.</p><p>Но попробуйте ответить на вопрос: что лучше, программа, которая работает идеально, но её невозможно изменить при смене требований? Или же программа, которая не работает, но её легко поменять?</p><p>В книге даётся аргументированный ответ о том, что изменяемость программного обеспечения – его важнейшее свойство, которое исходит из самого определения английского слова Software: Soft — «гибкое / программное» + Ware — «обеспечение». Идея программного обеспечения состоит в том, чтобы дать простую возможность изменять поведение компьютеров. Это и делает ПО гибким. И это такое же требование, как и любые бизнес-требования, которые должны удовлетворить разработчики и архитекторы, создав соответствующую <b>структуру (архитектуру)</b> продукта.</p><p>Бизнес менеджеры не способны осознать важности архитектуры, потому что они «продают» <b>поведение</b>. По этой же причине они всегда ставят важность поведения на первое место и стараются повысить приоритет соответствующей работе. Автор же уверяет, что о важности качества архитектуры обязаны говорить разработчики, так, как только они наиболее полно представляют возможные негативные последствия того, что архитектуре не будет уделено достаточное внимание. Они должны бороться за неё. На самом деле им за это и платят.</p><p>Поэтому, эта вторая ценность <b>(структура)</b>, сильнейшим образом влияет на дальнейшую судьбу проекта, хоть это сначала и трудно заметить.</p><p>Роберт Мартин также вводит понятия <b>масштаба</b> и <b>формы</b> изменений. Он говорит о том, что если требования меняются, то сложность изменений должна быть пропорциональна лишь масштабу изменения, но никак не его форме. Именно эта разница между масштабом и формой часто является причиной роста стоимости разработки программного обеспечения.</p><p>Опять же, с точки зрения Бизнес Менеджера, он лишь создаёт постоянный поток новых требований одного и того же масштаба. Однако разработчикам кажется, что их вынуждают постоянно добавлять всё новые «костыли» в деградирующую систему. Но на самом деле, проблема в самой архитектуре, которая предусматривает предусматривает возможность внесения только одной формы изменений. Архитектуры должны быть максимально независимыми от формы. В дальнейших главах читатель узнает о том, как же этого достичь.</p><p>Мне понравилось, что автор последователен и начинает как бы издалека: он рассуждает про все известные нам парадигмы программирования и то, что важного они привнесли с точки зрения архитектуры систем. Он детально объясняет понятия зависимостей в программе, потока данных программы, а также касается возможностей инверсии зависимостей (Dependency Injection) в программе. В итоге он делает вывод о том, что самое важное что привнесла парадигма ООП (объектно-ориентированное программирование) – это возможность полного контроля над направлением зависимостей между частями и компонентами программы.</p><p>Как любое здание состоит из кирпичиков, так и любая хорошая программная система начинается с чистого кода. Несколько глав книги в деталях знакомят читателя с пятью основными принципами дизайна кода на уровне структур данных (классов и функций), в мире известные как SOLID:</p><ul><li>Принцип единственной ответственности (SRP).</li><li>Принцип открытости/закрытости (OCP).</li><li>Принцип Барбары Лисков (LSP).</li><li>Принцип разделения интерфейса (ISP).</li><li>Принцип инверсии зависимости (DIP).</li></ul><p>Далее, автор подробно рассказывает про понятие компонент системы и рассказывает о трех принципах, на основе которых принимается решение к какому компоненту отнести тот или иной класс:</p><ul><li>Принцип эквивалентности повторного использования и выпусков (REP).</li><li>Принцип согласованного изменения (CCP).</li><li>Принцип совместного повторного использования (CRP).</li></ul><p>Эти три принципа определяют так называемую связность компонент (Component Cohesion). И следуя логике, дядюшка Боб описывает сочетаемость компонент (Component Coupling), рассказывая о трех принципах, определяющих правила взаимоотношений между компонентами:</p><ul><li>Принцип ацикличности зависимостей (Acyclic Dependencies Principle).</li><li>Принцип устойчивых зависимостей (Stable Dependencies Principle).</li><li>Принцип устойчивости абстракций (Stable Abstractions Principle).</li></ul><p>Знакомство с этими принципами подкрепляется практическими рекомендациями о метриках, которые можно высчитать и которые можно контролировать в системе.</p><p>Наконец, автор подходит к теме Архитектуры, рассуждая о её целях и качестве. Выделяется главное предназначение архитектуры — поддержка всего жизненного цикла системы. Хорошая архитектура делает систему легкой в освоении, простой в разработке, сопровождении и развертывании. Конечная ее цель — минимизировать затраты на протяжении срока службы системы и максимизировать продуктивность программиста.</p><p>По словам автора, для успешного существования и развития проекта, хорошая архитектура должна обеспечивать:</p><ul><li>разнообразие вариантов использования (use cases);</li><li>эффективную работу системы;</li><li>простоту разработки системы;</li><li>простоту развертывания системы.</li></ul><p>Достичь баланса во всём крайне сложно, но одним из важнейших шагов обеспечения баланса этих требований является правильное разделение системы на компоненты, а точнее – правильное проведение границ.</p><p>Когда архитектор стремится получить структуру системы, поддерживающую все необходимые варианты использования, он может не знать их все. В этом случае, опираясь на контекст назначения системы, он может использовать принципы единственной ответственности (SRP) и согласованного изменения (CCP) для отделения друг от друга всего, что изменяется по разным причинам, и объединения всего, что изменяется по одной причине.</p><p>Кстати, непонимание принципа SRP является одним из наиболее часто встречаемых на собеседованиях и интервью кандидатов: ведь важно не столько то, что класс имеет одну область ответственности, сколько то, что класс будут меняться по одной причине.</p><p>По разным причинам обычно меняется пользовательский интерфейс, бизнес-правила программы, бизнес-правила самой предметной области, ну и конечно части, отвечающие за ввод-вывод, сетевой доступ или доступ к базам данных Автор называет это <b>Уровнями</b>. Причем, чем дальше от ввода-вывода, тем выше уровень.</p><p>Более того, меняться с разной частотой могут и сами варианты использования, что также требует разделения, например функционал работы корзины и списка товаров в онлайн магазине, или даже функции удаления и создания заказов.</p><p>Разделение на уровни и варианты использования даёт возможности как добавления новых вариантов использования системы, так и возможности независимой разработки и развёртывания. Иначе говоря – делает архитектуру гибкой.</p><p>Роберт Мартин называет это <b>Режимом разделения</b>. В пример таких режимов он приводит сервис-ориентированную архитектуру (SOA), основанную на службах, а также плагинную архитектуру.</p><p>Автор отмечает важность избегания преждевременных решений, которые не касаются бизнес-требований или вариантов использования, но являются чисто техническими, вроде выбора фреймворка, БД, веб сервера и т. д. Хорошая архитектура не зависит от таких решений. Чтобы добиться этого, например, в плагинной архитектуре границы между компонентами проведены так, что для одной и той же программы можно предоставить несколько разных пользовательских интерфейсов, настроить работу на разных БД, и т.д.</p><p>Что же происходит, когда границы компонент пересекаются? А ничего, это нормальный ход событий, когда, например клиент (высокоуровневый компонент) вызывает функцию сервера (низкоуровневого компонента). И совсем не спроста в начале книги подробнейше рассматриваются парадигмы программирования и каждый принцип проектирования: ведь вся хитрость создания правильных решений о пересечении границ между компонентами, заключается <b>в управлении зависимостями</b>.</p><p>Я заметил, что на протяжении всех глав, важности проведения границ в книге уделяется особое внимание. Приведены схемы и диаграммы того, как избегать прямой зависимости между классами или компонентами, например клиентом и серверов. Показано, как четкое отделение интерфейсов от реализации даёт возможность повернуть направление зависимости в обратную сторону потоку управления. Потоки управления и потоки данных, в хорошо спроектированной системе, всегда должны быть развязаны от зависимостей в коде, чтобы удовлетворить упомянутые выше требования: простоту разработки и развертывания системы.</p><p>Хочу отметить, что автор говорит о границах не только в коде и архитектуре, но и в бизнес-требованиях.  Он пишет, что бизнес-требования состоят из сущностей, часто описываемых на языке UML, а также вариантов использования, неформально описываемых в виде входных и выходных бизнес-данных. И те и другие не должны описывать низкоуровневые аспекты системы, вроде UI или фреймворка.</p><p>В итоге, сводя всё вышеизложенное воедино, Роберт приводит пример Чистой архитектуры, по его словам, объединяющей лучшие стороны большинства известных архитектур, таких как гексагональная архитектура, Data-Context-Interaction архитектура, и Boundary-Control-Entity архитектура.</p><p>В дальнейших главах автор разбирает чистую архитектуру в деталях, описывая способы пересечения границ, например используя DTO (Data-Transfer Objects). Он описывает шлюзы к слою доступа к базам данных и преобразователи реляционных данных (ORM). Я отдельно отмечу подробно разобранные паттерны проектирование, такие как:</p><ul><li>View-Presenter;</li><li>Façade (Фасад);</li><li>Strategy (Стратегия);</li><li>Service (Служба);</li><li>CQRS;</li><li>Main component (анти-паттерн «Главный компонент»).</li></ul><p>Наконец, автор приводит примеры использования принципов Чистой архитектуры в решении нескольких конкретных задач, таких как построение игрового движка (Game Engine), сервиса заказа такси (Taxi Aggregator) и сервиса продажи видео. Он также описывает возможности применения чистой архитектуры во встраиваемом ПО и операционных системах, а также проектирование интерфейсов и API для тестирования.</p><p>На мой взгляд, книга покрывает важнейшие аспекты дизайна и проектирования программ. В ней нет обзора конкретных фреймворков или языков программирования, но она показывает на что нужно обращать особое внимание, как закладывать гибкость, выявлять нарушения и контролировать структуру проекта. Так или иначе, любой разработчик столкнётся с необходимостью знания описываемых в книге принципов, но чем раньше он это сделает, тем меньше ошибок он совершит. Именно поэтому я рекомендую прочтение этой книги каждому разработчику, независимо от его уровня – от Junior до Senior и Architect.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Джейсона Шрейера «Кровь пот и пиксели»</title>
      <link>https://tproger.ru/books/stoit-prochitat-obzor-knigi-dzhejsona-shrejera-krov-pot-i-pikseli</link>
      <comments>https://tproger.ru/books/stoit-prochitat-obzor-knigi-dzhejsona-shrejera-krov-pot-i-pikseli?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/stoit-prochitat-obzor-knigi-dzhejsona-shrejera-krov-pot-i-pikseli</guid>
      <description><![CDATA[<p>Десять историй о проектах топовых студий: как устроена игровая индустрия изнутри, с успехами, трудностями и провалами при разработке игр.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/stoit-prochitat-obzor-knigi-dzhejsona-shrejera-krov-pot-i-pikseli">Стоит прочитать: обзор книги Джейсона Шрейера «Кровь пот и пиксели»</a>»</p>]]></description>
      <category><![CDATA[История успеха]]></category>
      <category><![CDATA[Разработка игр]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 03 Dec 2020 10:11:17 GMT</pubDate>
      <content:encoded><![CDATA[<p>У меня, как и у многих разработчиков, карьера начала развиваться из любви к компьютерным играм. Помню, как после учебы проводил вечера за разработкой модов для известных игр или пытался собрать что-то свое, используя скудную функциональность на движках, которые шли без тормозов на моем ПК. Тогда, будучи ребенком, я мечтал узнать всю изнанку индустрии изнутри. Теперь и у вас есть такая возможность.</p><p>Книга состоит из десяти историй о проектах от топовых студий. Их ценность состоит в том, что в них показана игровая индустрия как она есть, без розовых очков. Мы знакомимся не только с успешными историями, но и с трудностями и провалами, с которыми пришлось столкнуться студиям в процессе разработки. Книга «Кровь, пот и пиксели» крайне рекомендуется к прочтению любому, кто хочет познакомиться с игровой индустрией поближе или уже находится в поисках работы. Она в художественной манере открывает изнанку рынка игровой разработки.</p><h2>Предисловие</h2><p>В предисловии Шрейер рассуждает о сложностях, с которыми сталкивается команда разработки, используя, как пример, всем известную игру про водопроводчика. В процессе он выделяет основные моменты, которые отличают разработку игр от разработки софта или медиаконтента.</p><p>Во-первых, это интерактивность. Игры нелинейны, игрок может пойти практически, куда угодно, обработка событий и перерисовка происходит множество раз в секунду в соответствии с действиями игрока.</p><p>Во-вторых, технологии постоянно меняются: с каждым поколением консолей игроки ждут совершенно нового опыта. При этом крупные проекты занимают от полугода до нескольких лет. Иногда это выливается в постоянные доработки, в отдельных случаях затягивая разработку на десяток лет, как было с Prey, или на более длительный срок, как в случае с Duke Nukem.</p><p>В-третьих, инструментарий: он постоянно меняется, команду нужно переучивать и адаптировать. При разработке серьезных проектов львиная доля усилий уходит на доработку уже готового инструментария или написание собственного, когда работа с готовыми инструментами вызывают дикую боль у разработчиков и геймдизайнеров.</p><p>В-четвертых, прогнозируемость: сложно предсказать, какой продукт будет коммерчески успешным, рынок стремительно меняется. Игры — это искусство, в котором тренды меняются каждый день, что подводит нас к пятому пункту.</p><p>В-пятых, пока не поиграешь, не поймешь, выпустил ты шедевр или очередную посредственность. С этим сталкиваются не только новички, но и опытные компании. Чем больше хитов ты выпустил, тем выше ожидания игроков. Репутация нарабатывается годами, но пара плохих продуктов может испортить ее в один миг и даже привести к закрытию студии.</p><p>Далее Джейсон Шрейер бросает нас в список проектов, у каждого из которых свои проблемы.</p><h2>Pillars of Eternity</h2><p>В первом проекте мы читаем о проблеме финансирования и методах ее решения. Разрабатывать игру на чистом энтузиазме — это классно. Но мотивация должна быть подкреплена финансово, иначе такой проект так и не увидит релиза.</p><p>Из собственного опыта могу отметить, что максимум три месяца люди способны работать на чистой мотивации. Дальше начинается работа из-под палки. Наш мозг так устроен, что его нужно постоянно поощрять, а лучшее поощрение в наших реалиях — это деньги.</p><p>В этой истории мы видим, как сравнительно небольшая компания решила эту проблему. Чтобы финансы не стали преградой, к выпуску игры мечты компания взяла заказ у Mail.ru и, кроме этого, запустила компанию на Kickstarter. Это позволило собрать рекордные 4 млрд долларов и реализовать игру с оригинальным видением авторов.</p><h2>Uncharted 4</h2><p>Следующая часть знакомит нас с проблемами, с которыми столкнулись разработчики поистине шедевральной игры от всеми любимой Naughty Dog. Речь идет о work-life balance, или балансе между личной жизнью и карьерой.</p><p>Каждый разработчик в игровой индустрии хотя бы раз сталкивался с таким термином, как кранч, когда для того, чтобы довести игру до завершения (а до него остается совсем немного времени), мобилизируются силы всех отделов. Разработчики сидят сутками, добавляя новый контент, дизайнеры судорожно рисуют новые иконки и персонажей, а тестировщики проводят ночи в офисе в поисках багов. И все это ради одного момента, когда игра отправляется в релиз и команда может выдохнуть, ожидая первые оценки игроков.</p><h2>Diablo 3</h2><p>Diablo 3 — еще один проект, который занял почетное место в зале славы. Но не всё было так радужно, когда игра только вышла в релиз. Игроки столкнулись с перегруженностью серверов и поломанным игровым балансом. Кроме этого, в игре был «обоз и маленький мешок» багов. Они были не только в самой игре, но и на аукционе, где предметы продавались за реальную валюту.</p><p>Для решения этого вопроса назначили Джона Мойскера. Он руководил выпуском глобального обновления, которое закрыло основные проблемы в игре и впоследствии в игровом аукционе. В результате аудитория начала возвращаться в проект. Благодаря Джону проект стал коммерчески успешным.</p><h2>Witcher 3</h2><p>Проект, который я никак не могу обойти стороной в этой статье — всеми любимый Ведьмак. В своем творении разработчики CD Projekt Red замахнулись на небывалые масштабы. Они поставили цель сделать игру больше, чем проекты конкурентов, при этом разработать мир, в котором игроку будет интересно на протяжении всего игрового процесса.</p><p>Квесты разрабатывались без готового видения конечного продукта, в то время как геймдизайнеры были заняты проработкой игровых механик, а левел-дизайнеры занимались постоянным расширением игровых локаций. Не обошлось и без кранчей, целью которых было сделать максимально наполненную игру. Не буду лишний раз упоминать, что игра получилась коммерчески успешной и стала синонимом хорошего RPG, а студия CD Projekt Red была отмечена на государственном уровне.</p><p>В заключение, расскажу о своей практике. У меня широкий опыт разработки обычного софта и мобильных приложений, но я нигде не ощущал такого драйва, который был в игровой разработке. Каждая игра по-своему уникальна, и команда оставляет в ней частичку себя. Это интересный, но сложный путь.</p><p>Если вы решили для себя, что хотите стать частью игровой индустрии, готовьтесь к бессонным ночам и переработкам на релизе продукта. Но, кроме этого, помните, что на этом пути вы обязательно встретите много классных специалистов, которые буквально живут своим делом и получают удовольствие от каждого дня, проведенного на работе.</p><p>Читайте книги, играйте в игры, разрабатывайте что-то свое и горите любимым делом! Всем успехов в начинаниях!</p>]]></content:encoded>
    </item>
    <item>
      <title>Обзор книги Владстона Феррейра Фило «Теоретический минимум по Computer Science. Всё, что нужно программисту и разработчику»</title>
      <link>https://tproger.ru/books/obzor-knigi-vladstona-ferrejra-filo-teoreticheskij-minimum-po-computer-science-vsjo-chto-nuzhno-programmistu-i-razrabotchiku</link>
      <comments>https://tproger.ru/books/obzor-knigi-vladstona-ferrejra-filo-teoreticheskij-minimum-po-computer-science-vsjo-chto-nuzhno-programmistu-i-razrabotchiku?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Александр Клименков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/obzor-knigi-vladstona-ferrejra-filo-teoreticheskij-minimum-po-computer-science-vsjo-chto-nuzhno-programmistu-i-razrabotchiku</guid>
      <description><![CDATA[<p>Книга Владстона Феррейра Фило для начинающих программистов охватывает базовые понятия и темы, о которых редко пишут в литературе такого уровня.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/obzor-knigi-vladstona-ferrejra-filo-teoreticheskij-minimum-po-computer-science-vsjo-chto-nuzhno-programmistu-i-razrabotchiku">Обзор книги Владстона Феррейра Фило «Теоретический минимум по Computer Science. Всё, что нужно программисту и разработчику»</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 02 Dec 2020 10:16:31 GMT</pubDate>
      <content:encoded><![CDATA[<p>Прочитав название книги, многие из вас, наверное, скажут: «Ну вот, ещё одна книга для чайников. Опять нам будут рассказывать о том, что такое двоичная система исчисления и какие бывают циклы». Отчасти вы будете правы: в книге, действительно, рассказывается о простых и базовых понятиях и принципах, которые должен знать каждый программист. Только вот «теоретический минимум», изложенный в книге, включает в себя множество интересных и полезных вещей, о которых мало пишут в подобной литературе начального уровня. Задайте себе вопрос: действительно ли вы так хорошо знаете основы того, что называется Computer Science?</p><h2>А вы в этом уверены?</h2><p>Давайте проведём небольшой эксперимент. Попробуйте ответить на следующие вопросы:</p><ul><li>Сколько вы знаете методов сортировки массива, кроме метода «пузырька»?</li><li>Почему двоичное дерево поиска должно быть хорошо сбалансировано?</li><li>Зачем в процессоре выделяют кэш уровня L1, L2 и L3?</li><li>Чем декларативное программирование отличается от логического и императивного?</li><li>Почему алгоритмы с экспоненциальной временно́й сложностью на большом объёме данных считаются невыполнимыми?</li><li>Какие задачи относятся к классу NP-полных?</li><li>Как хранятся связный и двусвязный списки в памяти компьютера?</li><li>Что такое каррированная функция?</li></ul><p>Если вы не смогли уверенно ответить на бо́льшую часть этих вопросов, но сами вопросы показались вам интересными, то вам стоит прочитать эту книгу. Хотя бы для общего развития.</p><h2>Общие впечатления</h2><p>В каждом разделе книги изложение ведётся от простого к сложному. Есть в книге и совсем базовые знания. Например, в ней, действительно, описываются двоичная система, булева алгебра и блок-схемы. Но автор делает это кратко, чтобы затем перейти к изложению более интересных вещей. Вообще, в книге почти нет ничего лишнего — вся информация изложена сжато, но вполне доступно. Несущественные и очевидные промежуточные шаги часто пропущены. Благодаря этому описание алгоритмов и правил читается легко. Как говорил Гомер Симпсон, «Мне некогда читать, передай смысл». Это как раз то, чего не хватает многим учебникам начального уровня, которые переполнены лишней и ненужной информацией.</p><p>Иллюстрации в этой книге сделаны качественно и профессионально. Автор не поленился составить графические примеры к большинству сложных алгоритмов. Рисунки очень помогают в изучении материала. Например, после изложения принципов выполнения логических операций приведена принципиальная схема суммирования двухразрядных чисел. По схеме можно самостоятельно проследить, как выполняется суммирование с помощью простейших элементов AND и XOR. Ещё в книге есть несколько подходящих к случаю комиксов с таких сайтов, как xkcd.com и geek-and-poke.com.</p><p>Примеры алгоритмов в книге оформлены очень удобно — в виде псевдокода, который будет понятен всем, кто хоть раз в жизни самостоятельно написал программку с использованием функций, циклов, условий и оператора присваивания.</p><p>В конце каждой главы приведены ссылки на полезные материалы. Все они оформлены как разделы на сайте code.energy. Вот <a href="https://code.energy/files/ct-and-tc-long.pdf">пример</a>. В некоторых случаях они ведут на страницу с соответствующей книгой в магазине Amazon. Но есть и такие, которые открывают страницы или PDF-файлы. Последние, конечно, полезнее, чем ссылки на книгу в магазине.</p><h2>Просто, как бином</h2><p>В первой главе книги излагаются самые основы: блок-схемы, булева алгебра, базовые формулы комбинаторики и теории вероятности. Это именно то, чему студентов технических специальностей учат на предметах «Информатика» и «Дискретная математика». Если вы знаете, что A XOR B тождественно !(А↔B) и как вычислить вероятность наступления совместных, несовместных и взаимодополняющих событий, то можете смело пропускать эту главу. Кстати, на каждое правило в главе приведены довольно интересные примеры.</p><h2>Надейтесь на лучшее, но готовьтесь к худшему</h2><p>Во второй главе книги автор рассказывает о понятии вычислительной сложности алгоритмов. В ней приведена методика расчёта временно́й сложности алгоритма — так называемого «О большого» — по числу требуемых операций и количеству входных данных. Наглядно показано, как различаются алгоритмы с единичной, линейной, логарифмической, квадратичной и экспоненциальной сложностью. Рассказано о том, почему первые — самые лучшие, а вторые — самые худшие алгоритмы. Ну и про пространственную сложность алгоритмов тоже упомянуто — память у современных компьютеров большая, но всё же конечная. Кстати, недавно в ленте Tproger ВКонтакте выкладывали <a href="https://vk.cc/aw2KxE">шпаргалку</a> со сложностью всех популярных алгоритмов. В этой главе книги как раз говорится о том, что такое сложность алгоритма и как её вычислить.</p><h2>Сначала стратегия, потом тактика</h2><p>Третья глава называется «Стратегия». В ней очень доходчиво объясняется, что такое итерация и рекурсия и в каких случаях их лучше всего использовать. Автор рассказывает о том, как лучше организовать проверку всех подходящих решений задачи — от грубого полного перебора до поиска с возвратом и эвристических алгоритмов, а также объясняет, как использовать разделение множеств для оптимизации сортировки значений и решения других задач. Также здесь немного рассказано о динамическом программировании и методе ветвей и границ. В целом эта глава о том, как выбрать оптимальный метод для решения поставленной задачи.</p><h2>Балансируем деревья</h2><p>Четвёртая глава книги посвящена структурам и абстрактным типам хранения данных. Я просто перечислю те структуры и типы, о которых в ней говорится: стек, очередь, очередь с приоритетом, список, сортированный список, множество, массив, связный список, двусвязный список, дерево, двоичное дерево, двоичная куча, граф, хеш-таблица. Никаких сюрпризов в этой главе нет, автор последовательно и обстоятельно рассказывает о каждом типе и каждой структуре.</p><h2>Опять пресловутая задача о коммивояжёре</h2><p>Пятая глава содержит описание и разбор различных наиболее часто используемых алгоритмов: сортировки, поиска узла и оптимального пути в графах. Кратко рассказывается об алгоритмах решения задач линейной оптимизации, поиска максимального потока в графе, раскраски графов. Прочитав эту главу, вы получите представление о том, какие существуют стандартные алгоритмы и как их правильно применять.</p><h2>SQL vs NoSQL</h2><p>Шестую главу большинство читателей может лишь бегло пролистать. Ну кто из программистов не знает о реляционных и нереляционных базах данных, SQL, индексах, транзакциях и распределённых моделях? Тем же, кто только начинает свой путь в области разработки будет полезно прочитать эту главу, чтобы систематизировать базовые знания и ничего не упустить.</p><h2>Почему памяти полно, а программа всё равно «тормозит»</h2><p>Седьмая глава называется просто и незамысловато: «Компьютеры». В ней (сюрприз!) рассказывается о том, что такое ЦП и ОЗУ и как они обмениваются командами и данными. А ещё про ассемблер, операционные системы и компиляторы. Упоминание команд одного из первых процессоров удивительным образом перекликается с разделом «Программное обеспечение с открытым исходным кодом». Сразу вспоминается рассказ Линуса Торвальдса о том, как всё начиналось, в книге «Just for fun».</p><p>Дальше рассказывается о такой полезной вещи, как иерархия памяти. Если вы не смогли ответить на вопрос про кэш уровня L1, L2 и L3, то вам стоит почитать эту часть книги.</p><h2>Есть не только императивное программирование</h2><p>Наконец, в восьмой главе содержится то, ради чего всё затевалось — рассказ о программировании. Глава разделена на два подраздела: «Лингвистика» и «Парадигмы программирования». В первом излагаются совсем базовые вещи. Например, что такое переменная. А второй подраздел можно читать, как отдельную статью-обзор современных парадигм разработки. К примеру, если вы адепт императивного программирования и не знаете, что такое карринг и замыкание, вам будет интересно познакомиться с декларативным программированием. Кстати, есть ещё логическая парадигма, о ней тоже кратко рассказывается в этой главе.</p><h2>Критика формы</h2><p>К сожалению, в книге есть ошибки. Не могу сказать, появились ли они в процессе перевода и локализации книги или были в оригинальном издании. Например, на странице 39 вместо числа, 1/8388608 указано число 1/8 и рядом — 8388608. На странице 48 неправильно описан порядок определения стоимости алгоритма. Некоторые читатели сообщают об других ошибках в формулах и вычислениях. Конечно, в подобных базовых учебниках такие ошибки недопустимы. Но, с другой стороны, даже интересно отыскивать подобные ляпы в книге. Заодно лучше усваиваешь излагаемый материал.</p><p>Ещё один недостаток бумажного издания — это очень плохой мягкий переплёт со склейкой страниц у корешка. Знаете, есть такие книги, которые при первом прочтении начинают странно потрескивать, когда вы переворачиваете страницы. А при втором прочтении они просто распадаются на отдельные страницы. Эта книга как раз из таких — «одноразовых». Так что советую читать эту книгу в электронном варианте.</p><h2>Это не Кнут, но тоже полезно</h2><p>Нужно понимать, что «Теоретический минимум по Computer Science» — это не Дональд Кнут и его «Искусство программирования». Те, кто давно и профессионально занимается программированием, пожалуй, не найдут в этой книге для себя ничего нового. Она, скорее, будет интересна начинающим программистам и другим специалистам IT-сферы: тестировщикам, техническим писателям, постановщикам задач. В любом случае всегда полезно проверить и систематизировать свои базовые знания в том, что называется Computer Science. Для этого книга Владстона Феррейра Фило очень хорошо подходит. Мне как непрофессиональному программисту читать некоторые разделы этой книги было интересно — я не знал, как ответить, на часть вопросов, заданных в начале этой статьи.</p><h2>Бонусная задача</h2><p>В заключение — небольшая задача из книги на знание теории вероятности.</p><p>Ваш замок защищён пятью башнями. Каждая имеет 20%-ную вероятность поразить захватчика, прежде чем он достигнет ворот. Каковы шансы остановить его?</p><p>Если вы думаете, что ответ — 100% (20% умножить на 5), то вы ошибаетесь. Не суммируйте вероятности независимых событий. Правильный ответ есть в книге.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Карла Вигерса «Разработка требований к программному обеспечению»</title>
      <link>https://tproger.ru/books/obzor-knigi-karla-vigersa-razrabotka-trebovanij-k-programmnomu-obespecheniju</link>
      <comments>https://tproger.ru/books/obzor-knigi-karla-vigersa-razrabotka-trebovanij-k-programmnomu-obespecheniju?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/obzor-knigi-karla-vigersa-razrabotka-trebovanij-k-programmnomu-obespecheniju</guid>
      <description><![CDATA[<p>Издание описывает принципы, технологии и приёмы работы с требованиями, плюсы и минусы подходов и пригодится начинающим и опытным аналитикам.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/obzor-knigi-karla-vigersa-razrabotka-trebovanij-k-programmnomu-obespecheniju">Стоит прочитать: обзор книги Карла Вигерса «Разработка требований к программному обеспечению»</a>»</p>]]></description>
      <category><![CDATA[Лучшая практика]]></category>
      <category><![CDATA[Бизнес-аналитика]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 25 Nov 2020 15:17:34 GMT</pubDate>
      <content:encoded><![CDATA[<p>C «Разработкой требований к программному обеспечению» я познакомился на этапе перехода в отдел аналитики и проектирования систем, то есть, еще не будучи аналитиком. Очень вовремя! Книга помогла избежать ряда типовых ошибок и открыла мне глаза на многие базовые вещи, о которых я не знал. В ней подробно описаны основные принципы, технологии и приемы, четко показаны преимущества и недостатки различных подходов в разработке требований к ПО. Прежде всего, книга полезна тем, кто только начинает путь в аналитике, или хочет его начать. Но и для аналитиков с опытом, кто не читал книгу, будет много полезной информации. Считаю, что это настольная книга бизнес- и системного аналитика, как говорится, must read!</p><h3>«Основное следствие проблем с требованиями — переделка того, что, как вы думаете, уже готово»</h3><p>С самого начала книги автор доносит мысль о том, что переделки в проекте — это вещь неизбежная. Невозможно, чтобы заказчик и компания-разработчик сразу поняли друг друга в полной мере. Однако выявление необходимости переделок на разных этапах будет стоить совершенно по-разному. Наиболее безболезненно и наименее затратно исправлять ошибки, которые появились в ходе качественной работы квалифицированного аналитика с требованиями. В случае, если ошибка была обнаружена в ходе разработки, то помимо проекта придётся переделывать также и часть уже написанного кода. Если в ходе тестирования, то часть кода, которую потребуется скорректировать, будет еще больше. Теперь представьте, какие затраты будут, если ошибку обнаружит уже после завершения разработки и тестирования сам конечный пользователь и позвонит с жалобой? В книге автор приводит пример из собственного опыта, который был переведен в цифры одним из его клиентов. Трудозатраты на исправление дефекта внутри компании составляли 200 долларов. При этом исправление ошибки, когда она была обнаружена пользователем, уже составляла 4200 долларов, т.е. больше чем в 20 раз дороже. Книга доказывает, что качественная работа с требованиями — это не пустая трата ресурсов, а инвестиция в успех проекта.</p><h3>«Нигде более, как на стадии сбора требований, так тесно не связаны интересы всех заинтересованных в проекте лиц с успехом проекта»</h3><p>И здесь автор прав. После того как получен запрос или бизнес-задача от заказчика и до того момента, как стартовала разработка, то есть непосредственно написание кода, наступает то самое время, когда можно максимально приблизить проект к успеху. В этот момент начинается работа по выявлению, сбору, анализу, классификации, спецификации, документированию и управлению требованиями. Автор подробно описывает каждый из этих этапов, приводит живые (что самое интересное) кейсы, примеры ошибок и варианты исправления. Главное, чему учит книга — это как избежать тех самых ошибок при разработке требований к ПО. Требования представляют собой фундамент проекта, они являются основой для действий команд разработки и тестирования, для инженеров внедрения и для руководителей проектов. Поэтому от их проработки зависит успех всего проекта.</p><h3>«Разработка ПО включает по крайней мере столько же общения, сколько и обычная работа с компьютером, но зачастую мы делаем акцент на работе с компьютером и не уделяем достаточно внимания общению»</h3><p>Это одна из ключевых мыслей книги. Хорошие требования не появляются в процессе работы с документами на компьютере или в процессе самостоятельного моделирования прототипов и проектирования систем. Хорошие требования появляются в результате кропотливой и вдумчивой работы с людьми: со стейкхолдерами, пользователями системы, с разработчиками, тестировщиками и менеджерами проектов. Только в ходе общения с заинтересованными сторонами появляется возможность выявить их потребности и сформулировать требования к системе, по-настоящему удовлетворяющей их. В противном случае, есть риск получить понятный, красивый с яркими картинками документ для разработки системы, которая, в конечном счете не отвечает ничьим ожиданиям.</p><p>Такие ситуации иногда возникают у аналитиков в процессе работы над проектами, когда слишком много времени уделяется проектированию и документированию, и слишком мало – общению, сбору информации и получению обратной связи.</p><p>У меня был такой опыт. Я подготовил проект, отвечающий требованиям, обозначенным заказчиком в запросе. По моему проекту была выполнена разработка и произведено тестирование внутри проектной команды. Однако после отгрузки доработки системы и приёмки заказчиком выяснилось, что бизнес-цель, которая ставилась при создании запроса, не была достигнута. Разобравшись, я понял, что совершил классическую ошибку, о которой пишет Вигерс: увлекся процессами проектирования, уделив основное внимание решению технической задачи, обозначенной заказчиком в блоке требований. При этом я не учел требования бизнеса. Как выяснилось позже, в запросе присутствовали противоречивые требования. Их можно было бы устранить только в ходе общения с представителями бизнес-подразделений заказчика.</p><h3>«Лучше один раз увидеть, чем 1024 раза услышать»</h3><p>Еще один яркий момент, который произвел на меня впечатление, это то, как расписана важность визуализации требований. Точнее «комбинация текстовых и визуальных способов представления требований на различных уровнях абстракции».</p><p>У каждого типа представления свои преимущества, и они подходят каждый для своей цели. Например, при помощи изображений можно преодолеть барьеры, связанные с непониманием некоторых терминов внутри команды. Или при помощи диаграмм потока сообщений можно визуально быстро сориентироваться, в какой момент где какие данные передаются в системе. Автор приводит примеры ряда различных способов представления требований (карты, таблицы, диаграммы, прототипы) и поясняет, в каких случаях удобно использовать те или иные методы.</p><p>В книге много информации о самих процессах разработки требований, фактически – более половины книги. Все процессы описываются на живых примерах, в виде «стенограмм» с рабочих встреч с дальнейшим анализом с профессиональной точки зрения. На протяжении книги читатель оказывается постоянно вовлечен в участие в отдельных эпизодах большого проекта сложной системы. Это создает целостное представление о проблемах, с которыми сталкивается команда в ходе крупного проекта, и о методах, которые позволяют эти проблемы решать, и, самое главное, не допускать.</p><p>Детально расписаны роли участников проектов и их задачи, обоснована необходимость постоянного контроля обратной связи. Представлены методы управления требованиями, контроля внесения изменений, приемы моделирования и подходы к дизайну, а также рекомендации, как правильно фазировать процессы в жизненном цикле ИТ проекта.</p><p>В книге даже приведены шаблоны документов, которые, признаться, я по сей день частично использую в проектах. Подробно останавливаться на каждом описанном процессе не буду, их очень много. Понять, что можно узнать из книги легко – достаточно прочитать оглавление, оно очень подробное =).</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Кормена и Лейзерсона «Алгоритмы. Построение и анализ»</title>
      <link>https://tproger.ru/books/obzor-knigi-kormena-i-lejzersona-algoritmy-postroenie-i-analiz</link>
      <comments>https://tproger.ru/books/obzor-knigi-kormena-i-lejzersona-algoritmy-postroenie-i-analiz?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/obzor-knigi-kormena-i-lejzersona-algoritmy-postroenie-i-analiz</guid>
      <description><![CDATA[<p>Мнение о классическом труде по алгоритмам: сортировки, графы, динамическое программирование и вопрос о том, нужны ли программисту книги.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/obzor-knigi-kormena-i-lejzersona-algoritmy-postroenie-i-analiz">Стоит прочитать: обзор книги Кормена и Лейзерсона «Алгоритмы. Построение и анализ»</a>»</p>]]></description>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 24 Nov 2020 13:32:40 GMT</pubDate>
      <content:encoded><![CDATA[<p>Возможно, выскажу весьма неоднозначное мнение, но считаю, что глобально программистам книги не особо нужны. Вернее, не настолько нужны, как многим другим. Поймите меня правильно, чтение — прекрасный способ получения знаний для подавляющего большинства специальностей, и когда разработчик, например, переходит на руководящую работу книги по менеджменту будут отличным подспорьем. Тем не менее, если говорить непосредственно о программировании, то скорость развития технологий не позволяет ждать выхода соответствующей литературы, а уж тем более ее перевода на русский язык (мы оптимистично надеемся, что каждый программист свободно читает на английском, но исходя из моей практики, это далеко не так).</p><p>Существенная часть прикладных знаний в IT устаревает за 4-5 лет, но официальной документации в совокупности с примерами, конференциями и статьями вполне хватает, чтобы держать себя «в форме» и осваивать новый материал на теоретическом уровне. Практику же ничего не заменит.</p><p>При этом, помимо быстро устаревающих прикладных знаний, есть целый пласт фундаментальных основ, остающихся справедливыми на протяжении многих десятилетий. К сожалению, именно эти основы сейчас часто игнорируются современными разработчиками. Поэтому, если программист хочет почитать обязательно книгу, то я всегда рекомендую сначала смотреть на «классику». Краеугольным камнем и одной из лучших классических книг по праву считается «Алгоритмы. Построение и анализ» Томаса Кормена и Чарльза Лейзерсона. Откровенно говоря, как мне кажется, эту книгу и так должна знать существенная часть аудитории, но за последние годы на собеседованиях стало попадаться слишком много людей, даже не подозревающих о ее существовании. Очень хотелось бы это исправить.</p><h2>Библия программиста</h2><p>Удачно сочетая в себе полноту и строгость изложения материала, книга Кормена стала де-факто стандартом в отрасли в качестве учебника для подготовки программистов. Показательно, что ведущие мировые университеты, включая MIT, использует ее как основной учебник по соответствующему курсу. Более того, этот фундаментальный труд будет полезен далеко не только студентам, многие профессиональные разработчики найдут для себя что-то новое, а в дальнейшем книга может послужить отличным настольным справочником.</p><p>В книге Кормена представлено детальное описание таких важных тем, как: сортировки, структуры данных, динамическое программирование, жадные алгоритмы, алгоритмы на графах, параллельные вычисления и многое другое. По сути, охватывая основной спектр современных алгоритмов.</p><p>«Библией программиста» чаще называют другой фундаментальный труд от ученого в области информатики Д. Кнута «Искусство программирования», но я бы предпочел отдать этот титул именно книге «Алгоритмы. Построение и анализ». Она с моей точки зрения лучше структурирована и проще в освоении для читателя.</p><h2>Структура изложения</h2><p>Автор начинает повествование с основ анализа алгоритмов. Этот раздел крайне важен для понимания остального материала, т.к. формирует необходимый математический аппарат для сравнения алгоритмов между собой. Именно благодаря этому мы можем аргументировано говорить «алгоритм A лучше, чем B для этой задачи» и наоборот. Остальные главы книги относительно самодостаточны и могут изучаться в произвольном порядке.</p><p>Стоит отметить, что вопрос читать или не читать книгу целиком является достаточно философским, т.к. некоторые главы (например, посвященные NP-полноте) представляют больше научный интерес, нежели практический. Исходя из моего опыта, рекомендовал бы следующий набор глав из нее к изучению в зависимости от уровня читателя (естественно, не претендует на истину в последней инстанции):</p><p>Начинающий уровень</p><ul><li>Быстрая сортировка.</li><li>Сортировка кучей.</li><li>Сортировка за линейное время.</li><li>Медианы и порядковые статистики.</li><li>Элементарные структуры данных.</li><li>Хеш-таблицы.</li><li>Двоичные деревья.</li><li>Динамическое программирование.</li><li>Жадные алгоритмы.</li></ul><p>Средний уровень</p><ul><li>Красно-черные деревья.</li><li>Б-деревья.</li><li>Алгоритмы на графах.</li><li>Амортизационный анализ.</li><li>Алгоритмы параллельных вычислений.</li></ul><p>Продвинутый уровень</p><ul><li>Остальные разделы на выбор.</li></ul><p>Конкретные названия глав и их набор могут незначительно отличаться в зависимости от издания книги.</p><h2>Зачем мне теория алгоритмов?</h2><p>Программисты, понимающие пользу от хорошего знания теории алгоритмов, скорее всего либо уже читали Кормена, либо в ближайшее время начнут. Остальную часть аудитории я постараюсь убедить в том, что это стоит потраченного времени, хотя эти попытки скорее всего заслуживают отдельной статьи.</p><p>Для изучения данной области есть как минимум три, с моей точки зрения, достаточно веские причины.</p><p>Во-первых, знание теории алгоритмов позволяет вам писать эффективный код. Это научит вас применять правильные инструменты в правильных местах. Например, в следующий раз вы будете понимать, почему тут стоит использовать HashMap (применительно к языку Java), а в другом случае TreeMap и т.д.</p><p>На первый взгляд можно предположить, что широкая доступность дешевых вычислительных ресурсов позволяет игнорировать такие параметры программы, как потребляемая память и/или время выполнения, ведь всегда можно докупить оперативной памяти или новый процессор. Отчасти эта точка зрения имеет право на жизнь, но нужно учитывать, что и объем обрабатываемых данных, и нагрузка на ресурсы также растут. В современном мире эффективные алгоритмы востребованы еще больше, чем раньше.</p><p>Не стоит исключать и возможность столкнуться с отраслью, где требования к эффективности программы изначально очень высокие в силу какой-либо специфики. Например, компьютерная графика или разработка под «железо» достаточно показательны в этом плане. В частности, у меня был опыт написания программного обеспечения для дорожных контроллеров и светофоров, и ресурсы некоторых микросхем были настолько скудными, что на них не ставили даже операционную систему.</p><p>Во-вторых, знания теории алгоритмов служат базой для освоения большого количества прикладных областей. Книга «Алгоритмы. Построение и анализ» будет для вас своего рода «букварем», который позволит погрузиться в их изучение. Например, людям, интересующимся информационным поиском крайне рекомендую к прочтению книгу Кристофера Д. Маннина «Введение в информационный поиск», но ее успешное освоение возможно только уже при наличии достаточных знаний в области теории алгоритмов.</p><p>В-третьих, подавляющее большинство технологических гигантов (такие как Google, Facebook, Yandex и т.д.) весьма требовательно относятся к знаниям теории алгоритмов у кандидатов при приеме на работу. Например, есть замечательная книга G.L. McDowel «Cracking the Coding Interview» по прохождению собеседований подобного формата и даже беглого взгляда на ее оглавление достаточно, чтобы понять, насколько сильно эти темы пересекаются с материалами из книги Кормена.</p><p>Безусловно, не все хотят работать в подобных компаниях, но для кого-то это может стать дополнительным стимулом.</p><h2>Вместо итога</h2><p>Может ли разработчик обойтись без знаний теории алгоритмов? Да, может. Таких «разработчиков», к сожалению, очень много, но качество их работы в подавляющем большинстве случаев оставляет желать лучшего.</p><p>Знание теории алгоритмов необходимо, чтобы быть квалифицированным специалистом в своей профессии, а книга «Алгоритмы. Построение и анализ» Томаса Кормена и Чарльза Лейзерсона однозначно является одной из лучших в этой области и крайне рекомендуется к ознакомлению. Я буду очень рад, если благодаря этой статье кто-то узнает об этой книге и на нашем рынке станет чуточку больше профессионалов.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Роберта Мартина «Принципы, паттерны и методики гибкой разработки на языке С#»</title>
      <link>https://tproger.ru/books/book-csharp-agile-patterns</link>
      <comments>https://tproger.ru/books/book-csharp-agile-patterns?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/book-csharp-agile-patterns</guid>
      <description><![CDATA[<p>Классика от Дяди Боба про принципы, паттерны и методики: как писать безопасный и переиспользуемый код, когда требования меняются на ходу.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/book-csharp-agile-patterns">Стоит прочитать: обзор книги Роберта Мартина «Принципы, паттерны и методики гибкой разработки на языке С#»</a>»</p>]]></description>
      <category><![CDATA[C#]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 20 Nov 2020 16:15:35 GMT</pubDate>
      <content:encoded><![CDATA[<p>Эту книгу я прочитал на начальном этапе развития карьеры программиста. В то время, когда я был студентом, она оказала на меня сильное влияние. Сейчас некоторые вещи я бы объяснил по-другому. Несмотря на это, считаю эту книгу классикой и рекомендую каждому программисту прочитать и хранить ее на книжной полке.</p><p>Имя автора говорит само за себя – Роберт Мартин, в широких кругах Дядя Боб. Из-под его клавиатуры вышли такие культовые книги, как «<a href="https://tproger.ru/books/clean-code-review/">Чистый код</a>», «Идеальный программист», «Чистая архитектура» и, конечно, «Принципы, паттерны и методики гибкой разработки на языке С#», которую сегодня рассмотрим.</p><h2>Введение</h2><p>Боб – специалист высокого класса, который силен не только в теории, но и успешно практикует разработку. В своей книге он в простой манере объясняет, как писать безопасный код, который можно использовать повторно, в мире, где заказчик на ходу меняет требования.</p><h2>Гибкая разработка</h2><p>В первых главах автор кратко рассказывает, что такое гибкая разработка и экстремальное программирование. Боб рассуждает, какие преимущества мы получим от введения гибкой разработки и с чего стоит начать. Следом рассказывает, как правильно вести планирование, справляться с задачами, с которыми в процессе разработки приходится сталкиваться практически ежедневно. Описывается сам процесс и итог, который мы должны получить.</p><h2>TDD</h2><p>Чем проще проводят тесты, тем раньше видно отклонения. Чем чаще проводится тестирование, тем выше вероятность получить рабочий продукт на любом этапе разработки.</p><p>Следующая важная часть – это тестирование. Боб знакомит нас с TDD, поскольку разработка через тестирование имеет существенные плюсы. Во время разработки тестов большая часть разработчиков продумывают архитектуру в целом. TDD позволяет экономить на работе тестировщиков и выпускать более чистые билды, значительно сокращая стадию полировки.</p><p>В любой команде есть разработчик, прочитавший про разработку через тестирование, который мечтает внедрить ее в свой проект. Не буду скрывать, я и сам был таким, но, к сожалению, работа на коммерческих проектах не всегда позволяет это сделать. Не секрет, что большая часть заказчиков не готовы отдельно платить за написание тестов. Кроме этого, не всегда рационально тратить время на написание тестов, когда тебе приносят заказ, который должен быть сделан «вчера».</p><h2>Рефакторинг</h2><p>Рефакторинг – это как уборка со стола после обеда. В первый раз, когда вы решаете не убирать, обед заканчивается быстрее. Но отсутствие чистой посуды и места для работы приведет к тому, что на следующий день обед придется готовить дольше. И поэтому вы снова не захотите делать уборку.</p><p>В этой главе он знакомит нас с процедурой рефакторинга. После нее, как после трудов высококлассного клининг-менеджера, код становится значительно быстрее, чище и приятнее. Рефакторинг нужно проводить после того, как задача завершена. Роберт Мартин советует пробежаться еще раз: попросить коллегу взглянуть свежим взглядом. Так с каждым разом код будет становиться чище. Полностью поддерживаю такой подход. Ценность этой главы в том, что старина Мартин показывает на практических примерах, как нужно проводить данную процедуру.</p><h2>Эпизод</h2><p>Эпизод – это одна из самых интересных глав. Здесь нам на практике показывают игру в боулинг. Мы видим живое общение между двумя специалистами. Диалоги максимально приближены к боевому сценарию, когда правки поступают от заказчика нескончаемым потоком, и программисту нужно адаптировать свое детище под изменения требований. Сама по себе глава уникальна, и сложно найти аналогичные разделы в типовых книгах по программированию, где нам дают голую теорию без практики.</p><h2>Гибкое проектирование</h2><p>Следующая часть дает нам вводную в объектно-ориентированную разработку программного обеспечения. Автор кратко объясняет, что это такое, учит управлению сложностями и методам оптимизации.</p><p>Ценность заключается в том, что он объясняет значения таких аббревиатур, как SRP, OCP, LSP, DIP, ISP доступным языком, который понятен даже студенту первых курсов. Крайне рекомендую к прочтению тем, кто не смог вспомнить хотя бы два значения.</p><p>Следом идут диаграммы. Все мы не любим рисовать их, но этап проектирования позволяет избежать лишней работы в дальнейшем, поэтому каждый разработчик должен уметь рисовать UML-диаграммы.</p><h2>Паттерны</h2><p>Куда без паттернов! Любая серьезная книга по программированию должна включать оду о любви к паттернам и примеры использования. Паттерны – это то, что мы применяем каждый день и должны уметь внедрять на практике. Несмотря на это, рассуждая о работе программиста, все чаще слышу фразу от разработчиков разного уровня: «Не знаю паттерны и прекрасно обхожусь».</p><p>Знать паттерны необходимо, они существенно ускоряют разработку. Вся наша работа состоит из разнообразных паттернов. Действительно уникальные вещи встречаются редко, и при встрече с чем-то действительно уникальным стоит написать шаблон, который следующий участник команды разработки сможет использовать в будущем.</p><p>Рекомендую книгу в первую очередь тем программистам, которые находятся на пути становления. Прочесть ее стоит и старшим коллегам, чтобы заполнить пробелы.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Фрайда и Хенссона «Rework: Бизнес без предрассудков»</title>
      <link>https://tproger.ru/books/reading-rework</link>
      <comments>https://tproger.ru/books/reading-rework?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/reading-rework</guid>
      <description><![CDATA[<p>Советы создателей Basecamp тем, кто застрял в рутине: книге уже десять лет, но её взгляд на бизнес и работу не потерял актуальности.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/reading-rework">Стоит прочитать: обзор книги Фрайда и Хенссона «Rework: Бизнес без предрассудков»</a>»</p>]]></description>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Стартапы]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 20 Nov 2020 09:50:32 GMT</pubDate>
      <content:encoded><![CDATA[<p>Хочу рассказать о книге «Rework: Бизнес без предрассудков» Джейсона Фрайда и Дэвида Хайнемайера Хенссона. Ее авторы — успешные ИТ-предприниматели, разработчики популярных веб-приложений <a href="http://basecamphq.com/">basecamp</a>, <a href="http://backpackit.com/">backpack</a>, <a href="http://highrisehq.com/">highrise</a>, <a href="http://campfirenow.com/">campfire</a> и авторы известного блога <a href="http://37signals.com/svn/">Signal vs. Noise</a>. На русском языке книга издана в серии «Лучшие книги о стартапах», но я уверен, что она будет полезна более широкому кругу читателей — всем, кто застрял в рутине и хочет по-новому взглянуть на свой бизнес или на свою работу. Здесь содержится масса очень мотивирующих и полезных практических советов, в том числе и для ИТ-специалистов.</p><p>Несмотря на то, что эта книга достаточно старая (ей уже 10 лет), она до сих пор не потеряла своей актуальности: сейчас на сайте издательства продается уже 9-е издание. В свое время, когда я был ещё простым программистом и работал в офисе, она стала для меня хорошим пинком. Мне предложили прочитать ее знакомые ребята, которых она тогда тоже сильно замотивировала. Я очень не люблю мотивирующие бизнес-книжки из серии «Как стать успешным предпринимателем, если чесать затылок 30 дней подряд», но эта книга оказалась исключением.</p><p>Во-первых, ее легко читать: крупный шрифт, прекрасная верстка, мало текста и много картинок — основные идеи оформлены одной фразой на целый разворот.</p><p>Во-вторых, авторы рассматривают все без исключения стадии, через которые необходимо пройти предпринимателю — от осознания того, что мы живем в новой реальности, подготовки, плана действий, лайфхаков для развития и продуктивности — до отношения с конкурентами, продвижения, подбора команды и создания бизнес-культуры в своей компании.</p><p>В-третьих, каждый из этих масштабных блоков разделен на параграфы с предельно конкретными и четкими идеями, которые порой противоречат общепринятому «здравому» смыслу: «Чешите там, где у вас зудит», «Создавайте бизнес, а не стартап», «Идите спать», «Не путайте энтузиазм с приоритетами» и т. д.</p><p>Сам процесс избавления от предрассудков построен на противопоставлении «они — мы», вот один из примеров:</p><p>Критики не понимают, как компания, которая отвергает рост, совещания, бюджеты, заседания совета директоров, рекламные кампании, штат продавцов и законы «реального мира», все еще может процветать. Это их проблема, не ваша. Они говорят вам, что нужно продавать компаниям из списка Fortune 500. К черту такие советы! Мы продаем компаниям из списка Fortune 5 000 000.</p><p>Многие идеи из книги сейчас уже перешли в разряд общеизвестных (хоть и не всегда применимых), но тогда — 10 лет назад — они стали для меня откровением. Например, о том, что</p><ul><li>в совещаниях должно участвовать как можно меньше людей;</li><li>не стоит стремиться быть похожим на других;</li><li>небольшой бизнес — это нормально, и не всем имеет смысл становиться гигантами;</li><li>искать внешних инвесторов стоит только в самом крайнем случае;</li><li>не стоит увлекаться чрезмерной «полировкой» своей идеи;</li><li>и наконец, что главное в стартапе — это не красота и доведение до идеала, а зарабатывание денег, потому что иначе это не стартап, а хобби.</li></ul><p>Все эти идеи поданы в очень привлекательной форме простых и доходчивых лозунгов. Такая форма действительно убеждает, но в ней таится и некая опасность: если копнуть глубже и задуматься, то все может оказаться не так однозначно. На самом деле, в жизни и в бизнесе, конечно же, случаются разные ситуации, для которых необходимы разные способы постановки задач и решения проблем.</p><p>Но книга и не создавалась для глубокого внутреннего анализа: скорее, ее можно сравнить с хорошим зарядом адреналина, глотком свежего воздуха или даже струей холодной воды в лицо. Она выбивает тебя из текущего понимания того, как организованы бизнес-процессы, как должна и может строиться работа в компании и вообще жизнь. В итоге ты немного ошалеваешь, но после этого все меняется и приходит осознание: вау, какая классная мысль! Теперь я должен сделать что-то по-новому, взглянуть на мир по-другому. И в этом сила книги.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Гейл Макдауэлл «Карьера программиста»</title>
      <link>https://tproger.ru/books/reading-cracking-coding-interview</link>
      <comments>https://tproger.ru/books/reading-cracking-coding-interview?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/reading-cracking-coding-interview</guid>
      <description><![CDATA[<p>Разбор типичных ошибок кандидатов на собеседованиях и методик подготовки к ним: как устроен наём в крупных и небольших компаниях.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/reading-cracking-coding-interview">Стоит прочитать: обзор книги Гейл Макдауэлл «Карьера программиста»</a>»</p>]]></description>
      <category><![CDATA[Собеседование]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 19 Nov 2020 14:32:49 GMT</pubDate>
      <content:encoded><![CDATA[<p>Я прочел книгу «Карьера программиста», автором которой является Г. Лакман Макдауэлл, несколько лет назад, еще до начала работы в компании Usetech, но она до сих пор остается одной из моих самых любимых. Правда, мне пришлось вспомнить о ней и перечитать во время периода самоизоляции, когда мы с моими «mentee» начали разбирать аспекты его опыта и карьерный рост.</p><p>У книги «Карьера программиста» есть несколько неоспоримых преимуществ:</p><ul><li>написана легким и понятным языком;</li><li>первая ее часть, с 5 по 8 главу, содержит подробное описание собеседований, особенностей их прохождений, составления «грамотного» резюме, разбор основных вопросов на которые стоит обратить внимание;</li><li>в главе 9 представлены задачи, которые может получить на техническом собеседовании любой специалист из IT-индустрии;</li><li>В 10 и 13 главах представлены ответы, чтобы вы могли проверить свои знания и подсказку.</li></ul><p>Советую прочитать ее всем, кто задумывается о смене работы и не важно, в какой индустрии вы работаете и на какую должность претендуете.</p><h2>За кулисами крупных и небольших компаний</h2><p>Начинает свою книгу Г. Лакман Макдауэлл с рассказа о том, как проходят собеседования в различных ИТ-гигантах – Microsoft, Amazon, Google, Apple, Facebook и тд. Автор подробно рассматривает процесс найма в эти компании и особенности каждого этапа собеседования. Также даны рекомендации, на что стоит обратить внимание и какие ответы ожидает услышать нанимающий персонал.</p><p>Важные моменты, которые я вынес для себя и, возможно, они помогут вам</p><ul><li>Необходимо тщательно готовиться к каждому интервью.</li><li>Предварительно собеседование = полноценное собеседование, по результатам которого вас могут не допустить до следующего этапа.</li><li>Будьте готовы к тому, что в больших компаниях может быть 4-7 этапов собеседований и только треть из них – технические.</li></ul><p>Прочитав этот раздел, у меня было ощущение, что я окунулся в атмосферу силиконовой долины, но уже имея несколько больше информации.</p><h2>Нестандартные случаи</h2><p>Еще одна очень занимательная глава, которая заинтересует любого соискателя. В ней автор рассматривает «нестандартные случаи» на собеседованиях. Также в разрезе должностей IT команды описаны задачи, которые могут потенциально всплыть на собеседовании, и навыки, которые желает получить компания, приглашая вас на работу.</p><p>Отдельно указаны частые вопросы (базовые, расширенные, специализированные, дополнительные) и варианты ответов на них. Причем автор дает нам уникальную возможность посмотреть на собеседование с двух сторон – соискателей и интервьюеров.</p><h2>Перед собеседованием</h2><p>Раздел, который «must have» для прочтения всем и каждому. Из него вы почерпнете, что должно быть в хорошем резюме, как получить эти галочки и где «добыть» опыт, который будет релевантен и интересен потенциальному работодателю. Например, автор утверждает, что резюме не должно превышать 1,5-2 страницы, а, в идеале, укладываться в 1.</p><p>Цитата автора:</p><p>Рекрутеры тратят на одно резюме в среднем около 10 секунд. Если вы сократите размер и укажете в резюме только самые заметные детали, их наверняка заметят. Обилие информации только отвлекает рекрутера от того, на что следовало бы обратить его внимание.</p><p>После прочтения этого раздела я полностью пересмотрел свое резюме, сократил его и убрал все несущественные детали, добавив «правильные» данные, в трудовом стаже оставил только значимую информацию и важные проекты. Несколько лет назад для меня стало своего рода открытием, что при собеседовании в американскую компанию не нужно указывать возраст, семейное положение и национальность.</p><h2>Поведенческие вопросы</h2><p>Не стоит забывать о том, что интервьюеры допускают вас до технического интервью не сразу, а, как правило, первоначально проверив ваши «soft skills». Нередко именно в ИТ индустрии специалисты «отваливаются» именно на этапе проверки поведенческих навыков. Но и к таким вопросам можно подготовиться. Автор рекомендует пройтись по всем компонентам резюме и проекта и разложить их в таблицу. Найдите несколько слов по каждому вопросу и убедитесь, что вы можете это все обсудить.</p><p>Также в книге есть рекомендации о том, какие вопросы вам стоит задать интервьюеру, чтобы получить полную картину о компании и должности. Ведь собеседование – это обоюдный процесс, компания собеседует вас, а вы ее.</p><p>Важные моменты, которые я вынес для себя и, возможно, они помогут вам</p><ul><li>На собеседовании стоит больше рассказывать о себе, а не команде.</li><li>Воспользуетесь методами SAR (Situation, Action, Result – ситуация, действие, результат) или «Сначала суть», которые помогут дать структурированные ответы на поведенческие вопросы.</li><li>Даже правильное окончание беседы может сыграть в вашу пользу.</li><li>Потренируйтесь рассказывать о себе перед интервью, структурируйте ответ</li></ul><p>И именно на этой главе заканчивается разбор общих аспектов, которые подойдут любому соискателю, и автор переходит к техническим аспектам собеседований. Именно после  6 главы начинается, на мой взгляд, самое интересное – погружение в алгоритмы и технические задачки.</p><h2>Технические вопросы и задания</h2><p>Именно в этом разделе автор делится подборкой задач, которые встречаются на собеседованиях в больших компания и стратапах всего мира.</p><p>Автор разработал схему, как стоит решать технические задачи на собеседовании, и она укладывается в 7 простых шагов.</p><p>Также в книге рассмотрены правильные и неправильные варианты ответов, как реагировать на правки и корректировки от интервьюера. Разобрал структуру «хорошего кода» глазами компании, состоящую из 5 главных вех: правильность, эффективность, простота, «удобочитаемость» и удобство сопровождения.</p><p>В книге «Карьера программиста» вы найдете задачи и технические вопросы, которые я рекомендую сначала решить самостоятельно, потом, если возникнут проблемы – воспользоваться подсказками и уже в финале – проверить свои результаты. Даже если вы не планируете в ближайшее время менять работу, освежить свои знания и потренироваться всегда полезно.</p><p>Задания технического раздела содержат задачки по деревьям и графам, головоломкам (на логику), ООП, масштабированию и проектированию систем, сортировке и поиску, тестированию, С++, Java, базам данных и т. д.</p><p>Я очень рекомендую прочитать эту книгу всем, первая часть книги «Карьера программиста» будет полезна любому соискателю, а вторая часть – любому специалисту, работающему в IT индустрии.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Do Hoang Tu «Operating System from 0 to 1»</title>
      <link>https://tproger.ru/books/book-os-from-0-to-1</link>
      <comments>https://tproger.ru/books/book-os-from-0-to-1?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/book-os-from-0-to-1</guid>
      <description><![CDATA[<p>Отзыв на руководство, которое ведёт читателя через создание операционной системы с нуля — на Ассемблере и C, без сторонних инструментов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/book-os-from-0-to-1">Стоит прочитать: обзор книги Do Hoang Tu «Operating System from 0 to 1»</a>»</p>]]></description>
      <category><![CDATA[Операционные системы]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 18 Nov 2020 12:37:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Около двух лет назад в одном из блогов про IT я натолкнулся на статью, в которой автор вкратце, буквально за 15 минут рассказывал о своем опыте в любимой для многих начинающих программистов идее создания собственной операционной системы. Причем на моей памяти — это вторая статья на русском языке, где автор не собирал новый дистрибутив линукс или просто строил планы о том, как создаст новую операционную систему, которой будет суждено изменить мир. По факту автор с нуля на Ассемблере и C написал довольно примитивную операционную систему, не используя ничего кроме компиляторов. В своем материале он ссылался на до тех пор неизвестную мне книгу «Operating System from 0 to 1» написанную неким разработчиком по имени Do Hoang Tu.</p><p>Кстати, интересно, что она не находилась где-нибудь на сайтах с книгами, тем более не продавалась в книжных магазинах, единственным местом, где мне удалось найти текст книги, был <a href="https://github.com/tuhdo/os01">GitHub репозиторий</a>, созданный автором. Ну, и конечно, ее не было на русском, и я почти уверен, что до сих пор нет в переводе, только английский оригинал. Но так еще лучше: отличная прокачка знаний языка для программистов.</p><p>Книга проводит читателя через весь процесс создания операционной системы с нуля, даже человек, не знающий принципов электроцепей и не имеющий глубоких знаний в программировании, может разобраться с темой. И это мне, как специалисту в другом направлении программирования особенно понравилось. Книга знакомит с основными терминами компьютерных систем, из чего состоит процессор, как на физическом уровне создаются логические схемы, что такое MOSFETs и цифровые логические вентили (digital logic gates). При этом автор не вдается в глубокие подробности, которые можно изучить дополнительно из другой литературы.</p><p>Затем в книге даются знания о том, как создать операционную систему для IBM x86 процессоров. При этом читателю достаточно довольно неглубоких знаний в таких языках как С/С++ и Ассемблер. Есть отдельная глава об этих языках и их совместном использовании: «we will explore assembly language, and how it connects to C». Есть там и про бинарный код и инструкции Assembly.</p><p>Тема тронула меня и вызвала не только интерес, но и энтузиазм, ведь я много лет назад уже собирал Linux from scratch. А также полгода как начал на досуге учиться программировать на С, с которым мне не приходится работать, потому что я специализируюсь на веб-разработке. В процессе чтения я предпринял попытку реализовать часть знаний, полученных из книги, насколько мне позволяли свободное время и опыт в С программировании. И, Oh my Gosh, у меня получилось запустить в виртуальной машине ОС с функциональностью печатной машинки. Да-да, это немногим больше, чем «Hello word», но для меня этого с лихвой хватило, чтобы вдохновиться на то, чтобы продолжать изучать эту тему.</p><p>Но это еще не все. Из книги можно почерпнуть базовые знания по архитектуре современных компьютеров, принципы работы логических схем и центральных процессоров, работающих на их физической реализации. Она помогает понять, как устроены операционные системы. В особенности автор рекомендует ее прочитать тем, кто хочет разбираться в Linux не просто как уверенный пользователь или администратор, но как настоящий разработчик таких сложных систем и программного обеспечения к ним. Я считаю, что это одна из тех книг, которую стоит прочитать каждому студенту IT-специальностей, потому что она создаст в голове правильную базу знаний, понимания профессии.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Роберта Мартина «Чистый код. Создание, анализ и рефакторинг»</title>
      <link>https://tproger.ru/books/clean-code-review</link>
      <comments>https://tproger.ru/books/clean-code-review?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/clean-code-review</guid>
      <description><![CDATA[<p>Книга Роберта Мартина «Чистый код. Создание, анализ и рефакторинг» состоит из трёх частей и учит начинающих программистов писать правильный код.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/clean-code-review">Стоит прочитать: обзор книги Роберта Мартина «Чистый код. Создание, анализ и рефакторинг»</a>»</p>]]></description>
      <category><![CDATA[Рефакторинг]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 17 Nov 2020 06:39:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>Одно из самых ярких впечатлений на меня произвела книга консультанта и автора в области разработки ПО Роберта Мартина «Чистый код. Создание, анализ и рефакторинг», написанная в 2012 году. Начиная работу, автор пишет:</p><blockquote>Даже плохой программный код может работать. Однако если код не является «чистым», это всегда будет мешать развитию проекта и компании-разработчика, отнимая значительные ресурсы на его поддержку и «укрощение».</blockquote><p>В своей книге специалист подробно рассказывает о том, как избежать ошибок при написании кода и сделать его чистым.</p><p>Книга включает в себя три части. В первой автор описывает основные принципы и приемы создания чистого кода и приводит примеры такого «правильного» кода. Во второй части он демонстрирует сценарии, представляющие собой упражнения по чистке кода или по преобразованию плохого кода в код с меньшим числом ошибок. Последняя часть представляет собой главу, в которой автор описывает путь мышления человека в процессе чтения, написания и чистки кода.</p><p>На мой взгляд, книга написана простым языком, поэтому освоить ее сможет даже начинающий программист. Я бы порекомендовала ее людям, только начинающим осваивать профессию, поскольку важно усвоить принципы написания правильного кода в самом начале работы.</p><h2>Общие правила написания чистого кода</h2><p>В начале повествования автор сосредотачивает внимание на основных постулатах создания правильного кода. Прочитав эту часть, я поняла, что до того, как код отдан тестировщикам, важно продумать, какие могут возникнуть проблемы и ошибки. Необходимо понять, какой кейс не был учтен. Стоит полностью продумать свою задачу и только после этого приступать к ее выполнению. Ведь если человек начинает писать код, не продумав все заранее, он может столкнуться с ошибками, ему придется возвращаться назад, то есть выполнять двойную работу. Мне кажется, что это очень важный совет. Применяя его, сейчас я экономлю очень много времени и энергии.</p><p>Автор сравнивает написание кода с созданием книги. В обоих случаях сначала пишется черновик, в котором заранее продумываются все ходы, и только потом создается чистовик, содержащий лучший вариант. Если специалист хочет стать хорошим программистом, ему всегда нужно продумывать заранее ход работы.</p><p>Кроме того, не нужно бояться что-то менять в уже созданном коде. Часто программисты работают с чужим кодом и не меняют какие-то его элементы, поскольку бояться столкнуться с непредсказуемыми ошибками. По мнению автора, такая стратегия ошибочна, потому что она обязательно приведет к еще большему количеству ошибок. Также одним из основных постулатов создания чистого кода является принцип единой ответственности. Согласно ему, любая сущность должна выполнять только одно действие и нести только одну ответственность.</p><p>Автор говорит также о том, что код должен читаться сверху вниз. Функции лучше располагать так, чтобы при чтении одной, сразу было видно другую. Если же блоки кода находятся в разных местах, это очень затрудняет чтение.</p><p>Наконец, Р. Мартин отмечает важность удаления мертвого кода. Это код, который никогда не сработает или тот код, который уже не используется. По мнению автора, такие коды не приносят никакой пользы и удалять их нужно сразу же, чтобы все было структурировано. Далее я хотела бы рассказать о тезисах книги, которые кажутся мне наиболее важными.</p><h2>Наименование</h2><p>При написании кода очень важно задавать верное название, поскольку наименование обеспечивает читаемость кода. Необходимо использовать наиболее понятные и подходящие наименования. Прочитав название метода или сущности, специалист должен сразу понять, за что она ответственна. Стоит также помнить о принципе единой ответственности, и если программист ему следует, то функция вряд ли будет содержать вставки “And” или “With”, поскольку функция выполняется лишь одно действие. При описании функции важно всегда использовать глаголы. Также желательно, чтобы в названии было ключевое слово, которое поможет понять, о чем эта функция.</p><p>Важно избегать одинаковых наименований. Если в вашем коде имеются функции с одинаковыми названиями, вероятно, они выполняют одно и тоже же действие. Если специалист назвал функции одинаково, а они выполняют разные действия, их нужно переименовать так, чтобы было понятно, что конкретно они делают. Если они выполняют одинаковые действия, но, например, с изменением одного параметра, то важно продумать, как сделать так, чтобы функция не дублировалась. Иными словами, если у двух функций одинаковое наименование, скорее всего, нужно что-то менять.</p><p>Наименования лучше не сокращать, а прописывать полностью. Например, если используется слово «product», название «pr» будет не очень понятным для читателя. Важно, чтобы название полностью отражало ответственность сущности.</p><h2>Функции</h2><p>По мнению Р. Мартина, функции должны быть максимально короткими. Их длина не должна быть больше двадцати строк, а сами строки не должны быть длиннее ста пятидесяти символов. В противном случае ее лучше делить на части. Кроме того, важно, чтобы функция выполняла только одну операцию. Что касается входных параметров, в идеале их не должно быть. Но если входные параметры требуются, то их должно быть не больше трех. Чем больше входных параметров, тем тяжелее читать функцию.</p><h2>Комментарии</h2><p>Слишком большое количество комментариев к коду означает, что написан он плохо. Комментировать код стоит только тогда, когда он может быть непонятен другому разработчику или самому создателю этого когда через какое-то время. Также не нужно комментировать плохой код, его необходимо просто переписать. Например, если специалист начинает работу над проектом другого программиста, и он видит ошибки, эти ошибки нужно сразу же исправлять.</p><p>Недописанный или некорректно работающий код всегда нужно комментировать, используя соответственно одно из двух ключевых слов «TODO» или «FIXME». В таком случае программист будет сразу понимать, что код не готов и его нужно дописывать. Также часто разработчики комментируют функции или части кода, чтобы когда-то к ним вернуться, и это переходит из ветки в ветку. Такие комментарии лучше не оставлять. Системы контроля версий хранят все состояния кода, поэтому необходимости переносить закомментированный код из ветки в ветку нет.</p><h2>Форматирование кода, классы и обработка ошибок</h2><p>При форматировании кода необходимо придерживаться общей стилистики проекта, его общепринятой архитектуры. Например, если в проекте используется архитектура V.I.P.E.R., то нужно использовать ее, иначе можно испортить код. Если же написание проекта начинается с нуля, то необходимо заранее продумать, какую архитектуру использовать и какой стилистики придерживаться.</p><p>Классы обязательно должны быть компактными. Название класса должно отображать его ответственность. И к ним также применяется принцип единой ответственности. Кроме того, Р. Мартин говорит о том, что по отношению к классам, как и по отношению к функциям, важно применять принцип компактности. Не стоит создавать большие классы, лучше разбивать их на подклассы. Важно создавать все новые подклассы до тех пор, пока не получится максимально раздробленная и понятная структура.</p><p>Наконец, при обработке ошибок всегда важно использовать exсeptions (исключения) вместо возвращения кода ошибок напрямую. Обработка ошибок всегда должна представлять собой только одну операцию. В функции, которая ответственна за обработку ошибки, ничего другого после произведения обработки выполняться не должно. Хотя на это вам намекнет и сам компилятор.</p><p>Книга Р. Мартина является сводом правил по написанию правильного кода, которым каждый программист должен следовать. На мой взгляд, умение писать чистый код – важный навык, помогающий специалисту не только самому понимать свой код лучше, но и работать в команде. Именно поэтому я уверена в том, что, если после этой статьи хоть один разработчик узнает о данной книге и прочтет ее, в мире станет на одного хорошего разработчика больше.</p>]]></content:encoded>
    </item>
    <item>
      <title>Стоит прочитать: обзор книги Майкла Лоппа «Как управлять интеллектуалами. Я, нерды и гики»</title>
      <link>https://tproger.ru/books/managing-humans</link>
      <comments>https://tproger.ru/books/managing-humans?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/managing-humans</guid>
      <description><![CDATA[<p>Книга Майкла Лоппа об управлении айтишниками с примерами кейсов и персонажей подойдёт начинающим тимлидам и опытным IT-руководителям.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/managing-humans">Стоит прочитать: обзор книги Майкла Лоппа «Как управлять интеллектуалами. Я, нерды и гики»</a>»</p>]]></description>
      <category><![CDATA[Управление проектами]]></category>
      <category><![CDATA[Стоит прочитать]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 10 Nov 2020 07:39:07 GMT</pubDate>
      <content:encoded><![CDATA[<p>Я прочитал эту книгу, когда мы в <a href="https://nodasoft.com/">NodaSoft</a> работали на самоизоляции и это, наверное, лучшее, что я прочитал в тот период. Майкл Лопп щедро поделился богатым опытом управления айтишниками, приводя многочисленные примеры кейсов и персонажей. Многие ситуации оказались настолько близки мне, что хотелось воскликнуть, — да, вот так оно и бывает!</p><h2>Кто в этом зоопарке смотритель клетки со львами</h2><p>Автор книги начинает свое повествование с определения того, кто сидит в комнате с табличкой «Руководитель» на двери, зачем его назначили и что от него ждать. Почему в каждой компании есть руководители, как они попадают на свои места и как уходят с них. Описана управленческая иерархия, цели и задачи каждого из звеньев руководящей цепочки в компании до пары сотен сотрудников. Освещены вопросы взаимодействия руководителя с подчиненными, с другими менеджерами, в том числе и со своим руководством.</p><p>Будучи техническим директором компании я начал сталкиваться с разного рода сложностями в организации рабочего процесса, когда число технических специалистов и команд возросло до таких размеров, что общаться с каждым уже не было возможности. Эта книга стала полезной для меня при составлении новой схемы обязанностей руководителей каждого уровня. И эта схема оказалась значительно лучше, чем та, которая строилась на протяжении многих лет работы интуитивно, можно сказать, в режиме снежного кома. Описанное в книге, как говорит сам автор, подходит для компаний размером до пары сотен человек. В более крупных появляются новые звенья руководящей цепи.</p><h2>Совещания с пользой</h2><p>Большое внимание автор уделяет совещаниям, их ценности, видам и целям, которым они служат. Майкл классифицирует множество типов совещаний, описывает цели совещания каждого типа, а ещё, что немаловажно, перечисляет возможные подводные камни при проведении каждого вида совещаний. После прочтения книги, мои совещания стали короче, а коллеги стали посещать их с удовольствием. На совещания мы теперь собираемся меньшими составами чем раньше, приглашая только необходимых людей и имея хорошо составленный план совещания. Для поддержания информированности сотрудников компании ввели практику редких, но регулярных собраний всех сотрудников по видеосвязи, на которых руководители рассказывают о больших новостях в их командах, владельцы говорят о стратегии и все желающие могут задать любые вопросы. Основная идея этих освещений больше не в рассказах, а в вопросах, во взаимосвязи всех со всеми.</p><p>Еще одним новшеством, почерпнутым из книги, стали совещания-офсайды — раньше мы не проводили такие мероприятия. Сейчас мы используем совещания-офсайды в качестве способа по-новому осмыслить наши тактические планы и решить пару крупных вопросов, которые никак не хотят решаться в обычном режиме.</p><h2>Эффективный тет-а-тет</h2><p>Многие рядовые сотрудники и их руководители считают регулярный тет-а-тет пустой тратой времени и проводят их только из уважения к сложившейся корпоративной практике или же потому что «так надо». От себя могу отметить, что поддержание постоянного контакта с коллегами в течение рабочего периода возможно и без подобных встреч. Однако, подобный контакт и польза от него будет меняться и «плавать» в зависимости от текущей загруженности руководителя и подчиненных и в какой-то момент можно упустить что-то важное. Поэтому регулярность тет-а-тет встреч просто необходима для беспроблемного течения процесса разработки.</p><p>Есть несколько принципов, которые помогут сделать такие встречи продуктивными. Без предварительной подготовки толку будет мало. Одного вопроса «как дела?» недостаточно, чтобы тет-а-тет прошел эффективно и принес пользу. Хотя такой вопрос и хорош для начала диалога, автор даже приводит его в качестве вопроса-открывашки.</p><blockquote>Прием, взятый мной на вооружение — просить собеседника своими словами пересказать, что он понял из проведенного разговора. Иногда оказывается, человек понял по своему или не понял вовсе и постеснялся сказать об этом. В таких случаях подобный способ подведения итогов позволит не выкидывать потраченное на тет-а-тет время впустую.</blockquote><h2>Принести пользу и расстаться друзьями</h2><p>Процесс поиска новых членов команды, удержания текущих и безболезненное расставание — эти вопросы освещены в книге подробно, даже не без излишних деталей. Для новичка в этой области книга является хорошим источником полезной информации в области HR-менеджмента. Но надо учитывать, что автор получил свой опыт не в России, поэтому часть его советов может показаться не особо подходящей. В нашей стране, к сожалению, ещё не сформировалась комфортная и свободная среда поиска и найма сотрудников.</p><h2>Каждому сотруднику индивидуальный подход</h2><p>Приведена авторская классификация психотипов людей, встречающихся в командах айтишников. Как и всякая подобная классификация, содержит несколько знакомых каждому руководителю типов сотрудников и несколько новых, встречаться с которыми к счастью пока не пришлось. Этот раздел может быть полезен в том случае, если вы испытываете сложности в работе с конкретным из описанных типов людей и не можете самостоятельно решить их. В остальном подобная классификация носит субъективный характер и имеет больше развлекательный характер, нежели обучающий.</p><h2>Работать вместе</h2><p>Существенную часть книги занимают вопросы разрешения различных конфликтов, так часто возникающих в тесных сообществах на подобии IT-команд.</p><p>Всем знакома ситуация, когда коллеги не могут прийти к единому мнению в ревью кода. Ошибки в организации процесса ревью могут привести к срыву сроков поставки задач, ухудшению кода и даже увольнению ценных сотрудников, которые не нашли общего языка с коллегами. Майкл в своей книге разбирает несколько примеров споров, возникающих в процессе код-ревью и приводит пути их мирного урегулирования.</p><p>Применив один из его советов, недавно мне удалось разрешить спорную ситуацию. Менее скилованный сотрудник считал, что старший коллега постоянно придирается к нему в ревью, причем, требования меняются от задачи к задаче. Оказалось, спорные моменты никак не закреплены ни стандартами языка программирования, ни сообществом. Выход из ситуации заключался в создании общего для команды стандарта. Коллеги с удовольствием составили его, поддерживают в актуальном состоянии, а в ревью больше не возникает споров.</p><p>Могу рекомендовать книгу как начинающим тимлидам, так и опытным руководителям, под руководством которых сформировалась уже не одна айтишная команда.</p>]]></content:encoded>
    </item>
    <item>
      <title>Восемь книг, достойных внимания любого сисадмина</title>
      <link>https://tproger.ru/books/8-books-for-sysadmin</link>
      <comments>https://tproger.ru/books/8-books-for-sysadmin?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/8-books-for-sysadmin</guid>
      <description><![CDATA[<p>Эксперты Selectel собрали восемь полезных книг для сисадминов — от «Кода» Чарльза Петцольда до изданий для хардкорных администраторов.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/8-books-for-sysadmin">Восемь книг, достойных внимания любого сисадмина</a>»</p>]]></description>
      <category><![CDATA[Системное администрирование]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 31 Jul 2020 05:49:54 GMT</pubDate>
      <content:encoded><![CDATA[<p>Читают ли книги системные администраторы? Конечно, да! Специально для них эксперты компании Selectel подготовили список самых полезных книг для сисадмина. Здесь найдутся книги и для новичков и для харкорных админов, в символическом количестве 8 штук — ну как бит в байте.</p><p>Часть книг мне посоветовали мои коллеги, также системные администраторы Selectel. Я постарался описать, что меня больше всего привлекло в прочитанных книгах, а также привести наиболее запоминающуюся цитату из каждой.</p><h3>«Код. Тайный язык информатики», Чарльз Петцольд</h3><p>Культовая книга о фундаментальном, к концу которой в голове очень точно будет воспроизведено строение компьютера. Начиная с азбуки Морзе и системы Брайля по мере прочтения книги, окунаясь в исторические справки вплоть до XVII века, я узнавал про главное достоинство Земли и механические калькуляторы, про компьютерную графику и не такой уж низкоуровневый Фортран.</p><p>Скорее всего эта книга</p><p>«…напомнит вам, как Виктор Франкенштейн собирал своего монстра, как Папа Карло строгал Буратино…»</p><h3>«Linux from scratch», Герард Бикманс</h3><p>Цитата из предыдущей книги как нельзя кстати подойдет к следующему изданию. Это не совсем книга. Точнее, совсем не книга. Это и есть open-source в его истинном проявлении. Имея под рукой это пособие и немного свободного места на жестком диске, можно пощупать Linux от и до, просто следуя за автором шаг за шагом, от страницы к странице.</p><p>Сейчас я сожалею о том, что когда только начинал изучать Linux я не знал об её существовании, но тем не менее с интересом окунулся в этот проект и его форки уже обладая достаточными навыком и опытом</p><p>«Your Distro, Your Rules»</p><h3>«Цифровая схемотехника и архитектура компьютера», Дэвид М. Харрис, Сара Л. Харрис</h3><p>Еще одна книга об истоках. Тоже истинный open-source проект, в том числе, потому что она свободно распространяется, а к изданию, переводу и публикации книги приложили руку огромное количество профессионалов.</p><p>Я отнес бы ее к учебной литературе. Читать ее довольно сложно, она наполнена примерами и их решениями, а в конце каждой главы есть упражнения и вопросы для собеседования.</p><p>«Профессор, преподаватель, студент, занимающийся проектированием цифровых схем, и первокурсник-чемпион по бегу хотят перейти шаткий мост темной ночью…»</p><h3>«Современные операционные системы» и «Компьютерные сети», Эндрю Таненбаум</h3><p>Война и Мир… и IT. Прочитать 2074 страницы в книжном издании всего в двух книгах способны только истинные ценители. Поговаривают, что у Таненбаума есть еще книги, но я не решаюсь их найти.</p><p>«Современные операционные системы» отчасти затрагивают фундаментальные основы, которые были уже озвучены в вышеупомянутых изданиях, но также рассказывает нам и о таких высокоуровневых технологиях, как виртуализация и облачные вычисления.</p><p>«Компьютерные сети», в свою очередь, до мельчайших деталей рассказывает как про аппаратный, так и про программные уровни. Классические настольные книги любого, кто решил связать свою работу с операционными системами и/или компьютерными сетями.</p><p>«Чтобы составить список почтовых адресов потенциальных жертв достаточно вооружиться одной из книг вроде “4096 имен для вашего новорожденного”.»</p><h3>«Unix и Linux. Руководство системного администратора», Эви Немет, Гарт Снайдер, Трент Р. Хейн, Бэн Уэйли</h3><p>Во-первых, обложка. Подумываю, чтобы поставить ее в рамку на столе.</p><p>Во вторых, эта книга просто настольная библия *nix админа. Один из немногих трудов, в котором системное администрирование рассматривается с практической точки зрения. В ней можно найти как примеры работы с командной строкой, так и, например, полноценные конфиги для nginx.</p><p>Подойдет и для начинающих администраторов, и для опытных работников. Здесь вы найдете подробное описание действенных методов работы, а также разберете все аспекты системного администрирования.</p><p>«Ваш коллега забыл выйти из операционной системы, оставив ее включенной на ночь? Кто интересно мог над ним подшутить?»</p><h3>«Системное и сетевое администрирование. Практическое руководство, 2-е издание», Томас А. Лимончелли, Кристина Хоган, Страта Чейлап</h3><p>Если вы начинающий админ или только собираетесь освоить профессию, то эта книга для вас. Мы советуем эту книгу каждому пришедшему в нашу компанию стажеру. Из нее вы получите фундаментальные знания о системах, сетях, серверах и вычислительных центрах, базовые и «продвинутые» принципы администрирования и разработки проектов вне зависимости от специфики операционной системы. Кроме того, эта книга отлично поможет нетехническим руководителям IT-отделов в понимании специфики работы своих подчиненных. Хорошим дополнением служит обилие ярких примеров из жизни, а юмор автора делает повествование живым и увлекательным.</p><p>«Если вы считаете, что книги по управлению временем на 90% wow являются мусором, мы надеемся, здесь упомянули оставшиеся 10%»</p><h3>«Linux. Необходимый код и команды. Карманный справочник», Скотт Граннеман</h3><p>Одна из самых неоднозначных книг в моей библиотеке.</p><p>С одной стороны это незаменимое краткое пособие, где описаны большинство команд, которые пригодятся в повседневной работе.</p><p>С другой, в ней указаны лишь самые базовые команды и их возможности, так что зачастую все-таки приходилось обращаться к другим источникам. Тем не менее именно с нее начался путь к командной строке, именно она давала отправную точку в поисках, а ее формат позволял ей всегда быть под рукой. Настоящий мастхэв для начинающих пользователей, которые откроют для себя сведения о самых необходимых им командам в системе Linux.</p><p>«Если вас не устраивает вызываемый редактор, вы можете заменить его любым другим. Например vim»</p><h3>«Python в системном администрировании UNIX и Linux», Ноа Гифт, Джереми М. Джонс</h3><p>Наверное, первая книга о Python, которая попала мне в руки. В первую очередь меня привлекло наличие примеров кода и то, что материал четко структурирован, каждая глава посвящена конкретной задаче.</p><p>Также в книге имеется большое количество примеров, основанных на богатой стандартной библиотеке, в том числе низкоуровневое программирование сетевых интерфейсов, создание интерактивных утилит с графическим интерфейсом, организация взаимодействия с базами данных и создание приложений для Google App Engine.</p><p>«Hello, Bastard Operator From Hell»</p>]]></content:encoded>
    </item>
    <item>
      <title>Подборка книг по разработке под Android</title>
      <link>https://tproger.ru/books/android-books-list</link>
      <comments>https://tproger.ru/books/android-books-list?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/android-books-list</guid>
      <description><![CDATA[<p>Авторы изучили разные подборки материалов по Android-разработке и собрали собственный список полезных книг для разработчиков.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/android-books-list">Подборка книг по разработке под Android</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 25 Mar 2020 14:10:19 GMT</pubDate>
      <content:encoded><![CDATA[<p>Отсмотрели разные подборки материалов по Android-разработке и собрали для вас список годных книг.</p><p>И ещё один важный ресурс — <a href="https://developer.android.com/docs">официальная документация по Android</a>, которая будет полезна всем разработчикам под платформу.</p>]]></content:encoded>
    </item>
    <item>
      <title>Топ-25 самых рекомендуемых книг по программированию</title>
      <link>https://tproger.ru/books/the-25-most-recommended-programming-books-of-all-time</link>
      <comments>https://tproger.ru/books/the-25-most-recommended-programming-books-of-all-time?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Никита Прияцелюк]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/the-25-most-recommended-programming-books-of-all-time</guid>
      <description><![CDATA[<p>Программист изучил подборки книг, удалил дубликаты, нормализовал названия и составил список из 25 книг по частоте упоминаний.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/the-25-most-recommended-programming-books-of-all-time">Топ-25 самых рекомендуемых книг по программированию</a>»</p>]]></description>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 06 Mar 2020 16:20:17 GMT</pubDate>
      <content:encoded><![CDATA[<p>В интернете полно списков «Лучших книг по программированию за всё время» и многие из них советуют разные (не всегда хорошие) книги. Один программист решил узнать, какие книги рекомендуют чаще всего. Для этого он взял все эти списки, проанализировал их и выложил свою мета-подборку из 25 книг. Делимся ей с вами.</p><p>Примечание Все книги, для которых есть перевод, мы привели на русском языке. Оригинальный список можно посмотреть <a href="https://www.daolf.com/posts/best-programming-books/#25-most-recommended-programming-books-of-all-time">здесь</a>.</p><h2>Немного о методологии</h2><p>Автор загуглил что-то вроде «лучшие книги по программированию» и собрал найденные ссылки. После удаления дубликатов осталось 150 штук. По заголовкам страниц автор также сразу отбросил списки книг:</p><ul><li>связанные с конкретной технологией/платформой;</li><li>привязанные к конкретному году;</li><li>состоящие только из бесплатных книг;</li><li>а также треды с Quora и Reddit.</li></ul><p>После этого у автора осталось 200 HTML-файлов, для которых он написал CSS-селекторы для извлечения названий книг. Наконец, он нормализовал эти названия, приведя их к общему виду, и составил этот список, исходя из частоты упоминания каждой книги.</p><p>Примечание Более подробное описание с примерами кода можно найти в <a href="https://www.daolf.com/posts/best-programming-books/">оригинале статьи</a>.</p><h2>25 место</h2><h2>24 место</h2><h2>23 место</h2><h2>22 место</h2><h2>21 место</h2><h2>20 место</h2><h2>19 место</h2><h2>18 место</h2><h2>17 место</h2><h2>16 место</h2><h2>15 место</h2><h2>14 место</h2><h2>13 место</h2><h2>12 место</h2><h2>11 место</h2><h2>10 место</h2><h2>9 место</h2><h2>8 место</h2><h2>7 место</h2><h2>6 место</h2><h2>5 место</h2><h2>4 место</h2><h2>3 место</h2><h2>2 место</h2><h2>1 место</h2>]]></content:encoded>
    </item>
    <item>
      <title>Мнение: 5 лучших книг по программированию, вышедших на русском за предыдущий год</title>
      <link>https://tproger.ru/books/top-5-programming-books-in-russian-2019</link>
      <comments>https://tproger.ru/books/top-5-programming-books-in-russian-2019?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/top-5-programming-books-in-russian-2019</guid>
      <description><![CDATA[<p>Персональная подборка пяти самых интересных книг по программированию, которые вышли на русском языке в 2019 году и посвящены трендам отрасли.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/top-5-programming-books-in-russian-2019">Мнение: 5 лучших книг по программированию, вышедших на русском за предыдущий год</a>»</p>]]></description>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 02 Jan 2020 12:43:57 GMT</pubDate>
      <content:encoded><![CDATA[<p>В 2019 году книжные полки IT-специалистов пополнились множеством новинок. Я выбрал 5 наиболее интересных, на мой взгляд, изданий, посвящённых последним трендам программирования, которые вышли на русском языке в уходящем году.</p>]]></content:encoded>
    </item>
    <item>
      <title>Книги, которые можно подарить любому программисту — подборка от СЕО Tproger</title>
      <link>https://tproger.ru/books/books-to-gift-to-a-programmer</link>
      <comments>https://tproger.ru/books/books-to-gift-to-a-programmer?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Чуватова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/books-to-gift-to-a-programmer</guid>
      <description><![CDATA[<p>Директор Tproger советует книги, которые рекомендовал бы прочитать любому айтишнику, и кратко комментирует каждую позицию в списке.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/books-to-gift-to-a-programmer">Книги, которые можно подарить любому программисту — подборка от СЕО Tproger</a>»</p>]]></description>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 23 Dec 2019 11:20:13 GMT</pubDate>
      <content:encoded><![CDATA[<p>Когда мы писали статьи по <a href="https://tproger.ru/articles/new-years-gifts-for-programmer/">лучшим</a> и <a href="https://tproger.ru/articles/worst-presents-for-programmer/">худшим</a> подаркам программисту, мы попросили директора Tproger посоветовать книги, которые он бы рекомендовал прочитать любому айтишнику. Он прислал нам список с краткими комментариями (они написаны на сером фоне). Делимся с вами.</p><p>А есть ли у вас личный топ книг? Пишите в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Подборка книг по JavaScript для продвинутых разработчиков</title>
      <link>https://tproger.ru/books/advanced-javascript-books</link>
      <comments>https://tproger.ru/books/advanced-javascript-books?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Грачев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/advanced-javascript-books</guid>
      <description><![CDATA[<p>Подборка книг о чистом и эффективном коде на JavaScript, работе с DOM, тестировании и создании веб-приложений на чистом языке.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/advanced-javascript-books">Подборка книг по JavaScript для продвинутых разработчиков</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Для продвинутых]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 04 Mar 2019 19:31:24 GMT</pubDate>
      <content:encoded><![CDATA[<p>JavaScript — лидирующий в фронтенд-разработке язык программирования. Благодаря своим преимуществам он проник во многие области программирования: веб, кроссплатформенная мобильная разработка и даже десктопные приложения. Его основы несложно изучить, однако для написания качественного и высокопроизводительного кода необходимо знать большую часть его возможностей. Но изучение документации — процесс утомительный и малоэффективный.</p><p>К счастью, по языку написано очень много книг, в которых опытные JS-разработчики делятся советами, объясняют простыми словами сложные вещи и подкрепляют их удачными примерами. Из огромного количества книг мы отобрали и объединили в одной подборке лучшие книги по этой теме. Среди них найдутся руководства по написанию «чистого» и эффективного кода, работе с DOM (Document Object Model), автоматизированному тестированию и TDD (Test-Driven Development), а также по созданию веб-приложений без использования сторонних библиотек. Надеемся, что они помогут вам разрабатывать быстрые и легковесные сайты и веб-приложения.</p><p>Автор Дэвид Херман объединил в одной книге 68 советов, которые помогут опытному JS-разработчику писать более качественный и эффективный код. Из книги вы узнаете:</p><ul><li>почему так важно следить за областью видимости переменных;</li><li>какие подводные камни таит в себе использование функций;</li><li>зачем свойство __proto__ следует заменять на функцию Object.getPrototypeOf;</li><li>когда использовать массивы, а когда словари;</li><li>чего нужно избегать при разработке библиотек;</li><li>что сделать для эффективной параллелизации задач.</li></ul><p>Коди Линдли (Cody Lindley) позиционирует свою книгу для двух типов людей: для продвинутых начинающих JavaScript-программистов, а также для разработчиков с большим опытом, использующих в основном сторонние библиотеки. С первым типом более-менее понятно, но почему книга подойдёт второму типу? Всё просто. Библиотеки работают по принципу «чёрного ящика»: передал входные данные, получил выходные данные. Однако понимание того, как «ящик» устроен внутри, позволит писать эффективные веб-приложения и даже собственные качественные библиотеки.</p><p>«JavaScript Enlightenment» — книга о представлении объектов в JS и сопутствующих с ними особенностей: примитивных и сложных значений, наследовании, области видимости переменных и многое другое.</p><p>Книга, написанная опытными JavaScript-разработчиками Джоном Резиг (John Resig), Беэром Бибо (Bear Bibeault) и Иосипом Марас (Josip Maras), позволит окунуться в глубины JavaScript. Благодаря ей вы научитесь писать эффективный код с помощью функций, объектов и замыканий, управлять асинхронным кодом с помощью обещаний, обрабатывать текст с помощью регулярных выражений, а также решать скрытые проблемы при разработке веб-приложений.</p><p>В отличие от предыдущих книг, «Секреты JavaScript ниндзя» рассматривает достаточно актуальные стандарты языка JavaScript — ES6 и ES7. Поэтому все советы применимы на практике. К тому же, отзывы на эту книгу говорят о том, что она действительно помогла расширить свои знания и решить многие проблемы работы кода.</p><p>Ведущий JavaScript-разработчик Кристиан Йохансен (Christian Johansen) написал полноценное руководство по обеспечению качества кода и его покрытия тестами по методике TDD (Test-Driven Development или разработка через тестирование). Книга рассказывает об автоматизированном тестировании на JavaScript и жизненном цикле продукта с использованием примеров реального кода. Поначалу будет трудно освоить TDD, однако следование данной методике позволит улучшить кодовую базу вашего проекта и легко поддерживать её в дальнейшем.</p><p>Кроме тестирования, в книге описаны некоторые способы оптимизации производительности веб-приложений. Поэтому «Test-Driven JavaScript Development» подойдёт как для тестировщиков, так и для разработчиков и QA-специалистов.<br />Смотрите также: <a href="https://tproger.ru/articles/why-test-driven-development/">Почему вам стоит начать вести разработку через тестирование</a></p><p>В этой книге объясняется, как создать веб-приложение на «чистом» JavaScript, то есть без использования сторонних библиотек и фреймворков. Автор Герд Вагнер (Gerd Wagner) уделяет внимание таким аспектам, как проверка данных, перечисления и перечисляющие атрибуты, однонаправленные и двунаправленные связи между типами объектов, подтипы и наследование в иерархиях классов. Также весь материал дополнен полноценными примерами кода, который можно запустить на веб-сервере и исследовать более подробно.</p><p>«Building Front-End Web Apps with Plain JavaScript» подойдёт как опытным JavaScript-разработчикам, так и программистам, знакомым с ООП по другим языкам (Java, C++ и т.д.).</p><p>JavaScript — не самый быстрый язык, поэтому при разработке веб-приложения важно уделить внимание скорости работы кода, ведь долгое время отклика отпугнёт пользователей. Для этого необходимо знать все «узкие» места приложения и оптимизировать их. На помощь придёт книга «JavaScript. Оптимизация производительности» от Николаса Закаса (Nicholas Zakas), создателя open source проекта ESLint, работавшего в компаниях Yahoo! и Box. Приемы и подходы из этой книги охватывают различные аспекты программирования на JavaScript, такие как время выполнения, загрузка, взаимодействие с DOM, жизненный цикл страниц и многие другие.</p><p>В отзывах об этой книге читатели отмечают разнообразие подходов к оптимизации кода и рекомендуют её в качестве дополнения к другим книгам по языку в целом и по эффективному JavaScript. Материал подойдёт Middle и Senior-разработчикам.</p><p>Любой JavaScript-разработчик рано или поздно сталкивается с DOM (Document Object Model) — программным интерфейсом, благодаря которому с помощью JS-скриптов можно изменять файлы HTML и XML. Хоть для него существует единый стандарт, но каждый браузер реализует DOM по-разному. Чтобы кто угодно мог разобраться в ворохе документации, Коди Линдли написал книгу «DOM Enlightenment». В ней с помощью минимума слов и максимума примеров реального кода объясняется, как правильно писать DOM-скрипты.<br />Смотрите также: <a href="https://tproger.ru/translations/dom-javascript/">Манипуляции с DOM на чистом JavaScript</a></p><p>Какие книги и статьи помогли вам досконально изучить JavaScript? Делитесь ими в комментариях.<br />Смотрите также:</p><p><a href="https://tproger.ru/books/javascript-books-for-beginners/">Подборка книг по JavaScript для начинающих</a></p><p><a href="https://tproger.ru/books/web-programming-books-for-beginners/">Подборка книг для начинающего веб-разработчика</a></p><p><a href="https://tproger.ru/tag/javascript/">Все материалы по JavaScript на нашем сайте</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Подборка книг для начинающего веб-разработчика</title>
      <link>https://tproger.ru/books/web-programming-books-for-beginners</link>
      <comments>https://tproger.ru/books/web-programming-books-for-beginners?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Грачев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/web-programming-books-for-beginners</guid>
      <description><![CDATA[<p>Книги по JavaScript, Node.js, React.js, HTML, CSS, дизайну и паттернам проектирования, включая классическую работу Дугласа Крокфорда о сильных сторонах языка.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/web-programming-books-for-beginners">Подборка книг для начинающего веб-разработчика</a>»</p>]]></description>
      <category><![CDATA[JavaScript]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[CSS]]></category>
      <category><![CDATA[HTML]]></category>
      <category><![CDATA[Веб-дизайн]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 05 Feb 2019 13:37:40 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мы сделали для вас подборку лучших книг для начала изучения веб-разработки. В неё вошли книги по JavaScript, Node.js, React.js, HTML, CSS, дизайну и паттернам проектирования.</p><p>Автор книги — Дуглас Крокфорд, создатель формата JSON и инструментов JSLint и JSMin, а также активный участник в развитии JavaScript. Его книга «JavaScript: сильные стороны» стала классикой и must-have для прочтения всеми программистами, желающими изучить JavaScript. Она поясняет принципы объектно-ориентированного подхода, принятого в языке, и выделяет как крутые возможности JS (синтаксис, функции, объекты, динамическую типизацию, наследование, массивы, регулярные выражения и многое другое), так и не самые удобные фичи, например программную модель на глобальных переменных. Благодаря разбору языка с различных сторон вы сможете писать более качественный и элегантный код.</p><p>Несмотря на малый объём, книга плотно забита полезной информацией по JavaScript и хорошо подойдёт в качестве справочника. Однако в ней иногда не объясняются некоторые термины, понятные программистам с опытом в других языках и сложные для восприятия начинающим. Также стоит учесть, что последнее издание книги вышло в 2013 году, и некоторая информация могла устареть, но базовые концепции по-прежнему актуальны.</p><p>Книга за авторством Дэвида Фленагана поможет как новичкам, так и опытным специалистам наиболее полно освоить JavaScript. Она вполне подойдёт в качестве справочника, однако множество практических примеров даст возможность лучше разобраться в особенностях языка. В шестом издании рассматривается стандарт ECMAScript версии 5, а также HTML5.</p><p>Сначала в книге даются основы языка JavaScript. Затем читатель знакомится с разработкой сценариев при помощи JavaScript и DOM. Затем рассматриваются всевозможные классы, функции, методы, объекты, конструкторы и многое другое, что входит в язык JavaScript 1.8, движок V8 3.0, а также стандарт ECMAScript 5. После изучения базы языка книга переходит к другим технологиям, использующимся в реальных проектах, например технологии WebSockets и WebWorkers, объектам localStorage и sessionStorage, а также API браузеров.</p><p>Однако эта книга, как и предыдущая, немного устарела и не содержит последних нововведений в JavaScript, поэтому о них стоит почитать дополнительно в других источниках, например в <a href="https://developer.mozilla.org/ru/docs/Web/JavaScript">документации языка</a> от сотрудников Mozilla.</p><p>Серия книг «You Don’t Know JS», написанная Кайлом Симпсоном, получила признание среди JavaScript-разработчиков. Она состоит из 6 небольших книг, объясняющих отдельные аспекты языка:</p><ul><li>«Up &amp; Going»;</li><li>«Scope &amp; Closures»;</li><li>«this &amp; Object Prototypes»;</li><li>«Types &amp; Grammar»;</li><li>«Async &amp; Performance»;</li><li>«ES6 &amp; Beyond».</li></ul><p>В первой книге даются основы программирования и базовый синтаксис JavaScript, а в последующих автор копает всё глубже, раскрывая читателю все возможности языка. Поэтому книга подойдёт как начинающим веб-программистам, так и более опытным JS-разработчикам. Если вам будет сложно читать на языке оригинала, то на GitHub есть неполный <a href="https://github.com/azat-io/you-dont-know-js-ru">перевод</a> серии на русский язык.</p><p>Книга Марина Хавербеке (Marijn Haverbeke) «Eloquent JavaScript» стремится подать информацию о JavaScript так, чтобы заставить компьютеры делать то, что вам от них нужно. С самого начала автор всячески дополняет текст множеством различных примеров кода для лучшего понимания, а затем предлагает написать несколько достаточно крупных программ, к примеру, упрощённый язык программирования или программу для рисования. Благодаря такой практической части читатель сможет без проблем освоить синтаксис языка и правила эффективного и красивого кода, научиться писать базовые веб-приложения и использовать Node.js для создания серверов и утилит.</p><p>Третья версия книги на английском языке является самой свежей, однако её предыдущее второе издание <a href="https://karmazzin.gitbooks.io/eloquentjavascript_ru/content/">доступно</a> на русском языке.</p><p>Во многих проектах возникают проблемы, которые можно решить без изобретения велосипеда. Для этого разработчики прибегают к шаблонам проектирования — специальным алгоритмам, которые были придуманы и улучшены другими девелоперами. В книге «JavaScript. Шаблоны» ведущий специалист Yahoo! Стоян Стефанов разбирает шаблоны проектирования, подходящие для разработки на JavaScript, например синглтон (singleton), «фабрика» (factory) или «декоратор» (decorator). Также в книге разбираются альтернативы шаблонов, изначально предусматривавших статическую типизацию из других языков. Это будет особенно полезно программистам, знакомых с Си-подобными языками.</p><p>Node или Node.js — программная платформа, основанная на движке V8 (транслирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. В основном Node.js используется в качестве веб-сервера. Однако на основе библиотеки функционирует множество фреймворков, включая Electron (фреймворк для разработки десктопных программ) и React.js (фреймворк для кроссплатформенной разработки).</p><p>Книга «Node.js в действии» расскажет об основах Node.js, методиках, особенностях и технологиях разработки веб-приложений, фреймворках Electron, Connect и Express, использовании webpack и Gulp. Во втором издании книги авторы Алекс Янг, Брэдли Мек и Майк Кантелон актуализировали материал книги и добавили новую часть про Electron и построение приложений командной строки.</p><p>Книга «React в действии» от Марка Тиленса Томаса поможет разобраться с особенностями разработки на React.js. Сначала в книге рассматривается DOM и компоненты. После этого автор рассказывает о данных, потоках данных, изменяемом и неизменяемом состоянии, рендеринге, методах жизненного цикла, маршрутизации, тестировании и интеграции сторонних библиотек. В третьей части книги уделяется внимание архитектуре приложения Redux, взаимодействию React и Redux, серверному рендерингу и основам React Native. В итоге вы получите достаточный объём знаний для создания собственных веб-приложений на чистом React.js.</p><p>CSS3 позволяет создать красивый адаптивный дизайн сайта, и материал из книги Дэвида Марфарланда «Новая большая книга CSS» поможет изучить многие тонкости технологии и стать настоящим профи. В первой части книги вас познакомят с CSS и HTML, а также с созданием стилей и их управлением. Вторая часть акцентирует внимание на практических возможностях CSS: форматировании текста, таблиц и веб-форм; полях, отступах и границах; создании навигационной системы сайта, а также украшениях в виде переходов, анимации и преобразования. После этого в книге даётся материал по вёрстке страниц с помощью CSS и разбираются специальные приёмы вёрстки, призванные упростить жизнь фронтенд-разработчику и сделать страницу красивее.</p><p>В последние годы на рынке появляется всё больше устройств с разными диагоналями и разрешением дисплея: смартфоны, планшеты, компьютеры. Под этот парк устройств создавать отдельную версию сайта, чтобы он выглядел, как задумывалось, нецелесообразно. Поэтому выходом из этой ситуации становится <a href="https://tproger.ru/translations/responsive-design-best-practices/">адаптивный дизайн сайта</a>, который может подстроить размер и количество отображаемых элементов в зависимости от диагонали, разрешения и соотношения сторон дисплея.</p><p>Книга Бена Фрэйна рассказывает о том, как создать адаптивный дизайн своего сайта с помощью CSS3 и HTML5. Вы познакомитесь с медиазапросами в контексте адаптивного дизайна, динамически изменяемой разметкой, способами создания эффектов, переходов и анимаций, форматом SVG для изображений и многими другими аспектами адаптивного дизайна.</p><p>Аарон Густафсон в своей книге стремился донести до разработчиков философию и механизмы принципа прогрессивного улучшения (<a href="https://en.wikipedia.org/wiki/Progressive_enhancement">progressive enhancement</a>). Благодаря этому подходу пользователи, заходящие на сайт, будут видеть реактивно загружающийся контент, а не пустую страницу. Помимо объяснения теории, Аарон дополнил свою книгу множеством примеров на JavaScript, HTML и CSS.</p><p>В продаже доступна вторая версия книги, но первое издание автор выложил бесплатно на своём сайте.</p><p>Конечно, список хороших книг по веб-разработке на этом не заканчивается. Однако вы можете посоветовать другие книги для начинающих в комментариях.</p><p>Смотрите также: <a href="https://tproger.ru/curriculum/intro-to-frontend-development/">Базовые знания и план обучения для frontend разработчика</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Подборка книг по компьютерным сетям</title>
      <link>https://tproger.ru/books/computer-networks-books</link>
      <comments>https://tproger.ru/books/computer-networks-books?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Грачев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/computer-networks-books</guid>
      <description><![CDATA[<p>Книги об устройстве Интернета, стеке протоколов TCP/IP и маршрутизации, включая классику Эндрю Таненбаума и Дэвида Уэзеролла «Компьютерные сети».</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/computer-networks-books">Подборка книг по компьютерным сетям</a>»</p>]]></description>
      <category><![CDATA[Сетевые протоколы]]></category>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 17 Jan 2019 10:56:07 GMT</pubDate>
      <content:encoded><![CDATA[<p>Компьютерные сети — основа Интернета и неотъемлемая часть технологического прогресса. Мы собрали в одной подборке книги, которые помогут как новичкам, так и более опытным специалистам узнать об устройстве Интернета, стеке протоколов TCP/IP, маршрутизации и многом другом.</p><p>Книга «Компьютерные сети» Эндрю Таненбаума и Дэвида Уэзеролла уже стала классикой в сфере сетевых технологий. В ней авторы изложили основные концепции компьютерных сетей. Темы идут последовательно, начиная от физического уровня модели сети и заканчивая прикладным уровнем и безопасностью в сетях.</p><p>В пятом издании книги рассматриваются, в частности, беспроводные сети стандарта 802.12 и 802.16, сети 3G, технология RFID, CDN (инфраструктура доставки контента), пиринговые сети, потоковое вещание, интернет-телефония и многое другое.</p><p>По учебнику «Компьютерные сети: Принципы, технологии, протоколы» во множестве российских вузов преподают дисциплину по компьютерным сетям. В книге подробно, без «воды» и доступным языком изложены многие аспекты сетей. Поэтому её можно использовать не только как пособие, но и как справочник.</p><p>В отличие от «Компьютерных сетей» Таненбаума, в книге «Компьютерные сети. Нисходящий подход» Джеймса Куроуза и Кита Росса тема рассматривается сверху вниз в модели сетевой архитектуры, начиная от прикладного уровня и заканчивая канальным. Также в книге авторы уделили внимание сетевой безопасности, администрированию вычислительных сетей, беспроводным и мультимедийным сетевым технологиям. Отлично подойдёт новичкам.</p><p>Андрей Робачевский в своей книге рассказал о внутреннем строении Интернета, в частности, о глобальной адресации и IP, системе доменных имен (DNS) и глобальной межсетевой маршрутизации. Также в книге рассматриваются архитектурная эволюция Интернета и его будущее, основные организации, регулирующие глобальную Сеть, а также вопросы стандартизации, развития и безопасности основных систем Интернета.</p><p>Автор часто переходит с одной темы на другую и использует малоизвестные термины, поэтому книга больше подойдёт опытным специалистам по компьютерным сетям.</p><p>Опытный преподаватель Уэнделл Одом написал множество книг по компьютерным сетям от издательства Cisco Press, включая книги для подготовки к экзаменам CCNA и по технологиям Cisco QOS, а также принимал участие в написании руководства по подготовке к экзамену CCIE. С 1981 года он работал сетевым инженером, консультантом, системным инженером, инструктором и создателем курсов по компьютерным сетям. Сейчас же он занимается проектированием и разработкой средств сертификации. Его богатый опыт лёг в основу руководства для подготовки к экзамену CCNA ICND2 200-105.</p><p>Вы ознакомитесь с подробностями настройки, поиска и устранения неисправностей сети. Книга поможет правильно выстроить свой процесс обучения, устранить пробелы в знаниях компьютерных сетей и проверить себя благодаря множеству экзаменационных вопросов и практических задач.</p><p>Книга поможет разобраться с настройкой и сопровождением стека TCP/IP. Сначала рассказывается о том, зачем нужны протоколы, как они работают, как адресация и маршрутизация позволяют передавать данные по сети и как настроить интерфейс, маршрутизацию и DNS. Затем вы ознакомитесь с NFS, NIS и DHCP, научитесь настраивать Samba для работы в гетерогенной сети Unix/Windows и изучите настройку сервера Apache. Две последние главы книги посвящены безопасности сети и устранению различных проблем. В конце книги вы найдёте справочник по sendmail, gated, демону named, свободной реализации DHCP-сервера dhcpd.</p><p>Книга в двух томах «Routing TCP/IP» Дойла Кэррола — библия для всех желающих изучить протокол TCP/IP. Она больше ориентирована на практическую составляющую, поэтому хорошо подойдёт инженерам, стремящимся поскорее использовать в работе TCP/IP. С помощью книги вы узнаете «изнанку» TCP/IP, освоите настройку и устранение ошибок протокола маршрутизации BGP-4, работу с протоколами IPv4 и IPv6 и научитесь настройке и развёртыванию NAT.</p><p>Хоть книга и является официальным пособием от Cisco, материал в ней, по большей части, независим от платформы. Книга также станет хорошим помощником при подготовке к сертификационному экзамену CCIE проектировщикам сетей, системным администраторам и инженерам.</p><p>IP-маршрутизация является основой межсетевого взаимодействия, и книга «IP Routing Fundamentals» поможет начинающим инженерам с ней разобраться. В справочнике вы найдёте информацию по современным протоколам маршрутизации RIP, IGRP, EIGRP и OSPF, узнаете подробнее о классовой и бесклассовой (CIDR) IP-адресации, а также о маске подсети переменной длины (VLSM), являющейся основой бесклассовой адресации.</p><p>Книга достойна места на полке любого сетевого инженера, которому необходимо настраивать маршрутизацию. В первой части руководства рассматриваются маршрутизаторы и их роли в сетях. Вторая часть посвящена их внутренней работе. В третьей части уделено внимание эксплуатации протоколов маршрутизации, а в четвёртой — вопросам реализации протоколов и будущему маршрутизации.</p><p>«Internetworking with TCP/IP» — это классическое пособие от Дугласа Комера по протоколам TCP/IP и межсетевому взаимодействию, пережившее уже шестое издание. Книга охватывает множество элементов, включая TCP, IPv4, IPv6, DHCP и DNS. Кроме того, в книге описаны современные тенденции развития компьютерных сетей и Интернета, включая классификацию пакетов, программно-определяемые сети (Software Defined Networking, SDN) и сетевые протоколы, используемые в Интернете вещей (Internet of Things, IoT).</p><p>В книге достаточно много теории, объяснённой академическим языком, поэтому руководство не подойдёт для введения в тему. Однако для тех, кто хочет углубиться в межсетевое взаимодействие и работу протоколов TCP/IP, эта книга-бестселлер станет хорошим подспорьем.</p><p>Официальное руководство по стеку протоколов TCP/IP от IBM «TCP/IP Tutorial and Technical Overview» подойдёт как новичкам, стремящимся изучить TCP/IP, так и уже опытным специалистам, которые хотят привести свои навыки работы с TCP/IP в соответствие с действующими стандартами.</p><p>В первой части книги рассказываются основные концепции и история стека TCP/IP и рассматриваются протоколы, входящие в TCP/IP, а также их применение. Во второй части уделено внимание базовым концепциям сетевых приложений, прикладным протоколам в рамках концепций (например FTP), а также приложениям, ставшими по факту стандартом в профессиональном сообществе. Третья часть книги посвящена новым концепциям и расширенным реализациям в архитектуре TCP/IP. В частности, в ней рассматривается постепенное объединение многих ранее разрозненных сетей и служб, использующих технологию IP, его потенциальные опасности и стандарты, используемые для обеспечения безопасности и контроля доступа к сетям и сетевым ресурсам.</p><p>Свободно распространяемая книга «Computer Networking: Principles, Protocols and Practice» Оливьера Бонавентуры (Olivier Bonaventure) служит введением в тему компьютерных сетей. Первая часть книги содержит материал по основным концепциям, включая создание и настройку сети, адресацию, общий доступ к ресурсам и безопасность. Во второй части книги отдельно рассматриваются многие основные протоколы стека TCP/IP: HTTP, TLS, RPC, TCP, UDP, SCTP, IPv6, система доменных имён (DNS) и другое. В конце книги вы найдёте справочник по различным аббревиатурам, встречающимся в стандартах.</p><p>А какими книгами по компьютерным сетям пользовались вы? Или какие книги вам рекомендовали ваши знакомые и преподаватели? Делитесь в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Топ книг по программированию, вышедших на русском языке в 2018 году</title>
      <link>https://tproger.ru/books/top-books-2018</link>
      <comments>https://tproger.ru/books/top-books-2018?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Грачев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/top-books-2018</guid>
      <description><![CDATA[<p>В топ вошли книги на темы веб-разработки, языков программирования, DevOps, чистой архитектуры и алгоритмов, ОС, безопасности, deep learning и Big Data.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/top-books-2018">Топ книг по программированию, вышедших на русском языке в 2018 году</a>»</p>]]></description>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[Операционные системы]]></category>
      <category><![CDATA[Языки программирования]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Big Data]]></category>
      <category><![CDATA[DevOps]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 04 Jan 2019 13:18:57 GMT</pubDate>
      <content:encoded><![CDATA[<p>2018 год был достаточно богат на выход русскоязычной литературы по программированию. К сожалению, всё вместить в одну подборку невозможно, поэтому мы отобрали лучшие книги по различным категориям:</p><ul><li><a href="https://tproger.ru/#web">веб-разработка;</a></li><li><a href="https://tproger.ru/#languages">языки программирования;</a></li><li><a href="https://tproger.ru/#algorythm">красивый код и алгоритмы;</a></li><li><a href="https://tproger.ru/#os-security">ОС и безопасность;</a></li><li><a href="https://tproger.ru/#devops">DevOps и системное администрирование;</a></li><li><a href="https://tproger.ru/#deep-learning">глубокое обучение и Big Data.</a></li></ul><h2>Веб-разработка</h2><p>React — это JavaScript-фреймворк для создания пользовательских интерфейсов (UI). Книга «React в действии» рассказывает о том, как работать с этой библиотекой и какие смежные инструменты можно использовать.</p><p>В первой половине книги приводятся основы React и его компонентов, а также фундаментальные концепции работы фреймворка. Вы изучите чистый React без транспиляции и синтаксических помощников, а также постепенно освоите различные виды компонентов: от статических к динамическим и интерактивным. Во второй половине книги рассматриваются базовые методы жизненного цикла, создание потока данных и форм, а также тестирование приложений на React и их архитектуру. Также вы изучите взаимодействие с Redux, познакомитесь с серверным рендерингом и React Native.</p><p>В книге «Node.js в действии» рассказывается о системах построения интерфейса, популярных веб-фреймворках Node.js, создании с нуля веб-приложений на базе Express, работе с базами данных в Node.js, а также тестировании и развертывании веб-приложений.</p><p>Второе издание книги было существенно переработано, чтобы оно соответствовала текущим трендам развития Node.js. В частности, в книгу были включены главы о работе с Node.js в сочетании с инструментами командной строки и о создании настольных приложений на базе Electron.</p><p>Книга рассказывает о проектировании взаимодействия — практике проектирования интерактивных цифровых продуктов, сред, систем и сервисов. Обычно проектирование взаимодействия нацелено на форму, однако автор Алан Купер утверждает, что не менее важно уделить внимание проектированию поведения пользователя. Поэтому в этой книге рассматривается целеориентированный подход к взаимодействию. Ведь если проектировщики концентрируются на целях пользователей (то есть на причинах, по которым те используют данный продукт), на их ожиданиях, мировоззрении и склонностях, то им удаётся создать мощные решения, с которыми приятно работать.</p><p>Четвёртое издание книги было издано на русском языке ещё в 2016 году, однако издательство «Питер» допечатало книгу, и теперь вновь можно приобрести её бумажную версию.</p><h2>Языки программирования</h2><p>Книга будет полезной для всех, кто хочет разрабатывать на языке Swift приложения для операционных систем от Apple (macOS, iOS, tvOS, watchOS), а также Linux.</p><p>Четвёртое переработанное издание книги содержит следующие изменения и дополнения:</p><ul><li>Весь материал обновлён в соответствии со Swift 4.1 и Xcode 9.</li><li>Добавлено большое количество нового учебного материала, в частности, связанного с практической разработкой приложений под iOS.</li><li>Доработана глава, посвящённая типу данных String.</li><li>Исправлены опечатки.</li><li>Материал для начинающих программистов теперь находится в отдельных блоках. Нововведение позволит читателям с опытом разработки на других языках не отвлекаться на ненужный им материал.</li></ul><p>Книга рассказывает о таком методе разработки, как разработка на основе тестирования (Test-Driven Development, TDD) программ на языке Python. Чтобы читатель оценил все возможности такого подхода, в книге подробно описывается процесс разработки реального веб-приложения от начала до конца. В результате вы научитесь создавать и выполнять тесты до написания любого фрагмента вашего приложения, писать минимальный объём кода для прохождения тестов, а также освоите основы Django, Selenium, Git, jQuery и Mock.</p><p>Во втором издании книги весь материал был обновлён в соответствии с Python версии 3.6.</p><p>Книга подробно описывает актуальную версию стандартной библиотеки шаблонов языка C++ (STL), вышедшей в 2017 году. С её помощью вы освоите работу с контейнерами, алгоритмами, вспомогательными классами, лямбда-выражениями и другими инструментами современного С++. Чтобы читатель закрепил материал на практике, в книгу вошли более 90 примеров, которые демонстрируют всю мощь STL и похожи на части реальных проектов. Многие из них лягут в основу более сложных программ.</p><p>Изучение всех возможностей C++ позволит создавать более качественное и производительное ПО, и книга «С++17 STL. Стандартная библиотека шаблонов» сможет в этом помочь.</p><p>Автор книги Мэтт Харрисон пишет код на языке Python с 2000 года. В прошлом он работал в области научных исследований, управления сборкой и тестированием, бизнес-аналитики и хранения данных. В последние годы он обучает людей Python, поэтому структура и материал этой книги основаны на его практическом опыте преподавания этого языка.</p><p>Несмотря на относительно малый размер книги (около 270 страниц), в ней простым языком освещаются многие аспекты Python, включая основы, контейнеры, словари, функции, индексирование и срезы, классы, исключения, работу с библиотеками и операции ввода-вывода.</p><p>Во многих книгах по C# и .NET тема кросс-платформенной разработки рассматривается только на базовом уровне. Однако книга Марка Дж. Прайса призвана упростить жизнь разработчикам, стремящимся написать на С# код, одинаково работающий на разных платформах. Вы ознакомитесь с инструментом Xamarin.Forms и освоите тонкости работы с Visual Studio 2017.</p><p>Первое издание книги было основано на C# 6.0 и не выходило на русском языке, однако текущая третья версия вышла на русском языке летом 2018 года и охватила уже C# 7.1.</p><p>Автор книги Себастьян Дашнер отразил в ней свой реальный опыт в изучении Java EE 8, поэтому книга не похожа на обычное справочное руководство по синтаксису API. Она хороша как для начинающих, так и для опытных разработчиков, уже изучивших API и стремящихся освоить все «фишки» платформы.</p><p>Платформа Java EE 8 вобрала в себя множество нововведений, связанных с последними трендами в разработке корпоративных приложений: работу с контейнерами, улучшенные API для обеспечения безопасности, возможности работы с облачными хранилищами и микросервисной архитектурой и многое другое. В книге вы найдёте множество материала по Java EE 8, включая:</p><ul><li>проектирование больших приложений;</li><li>реализация сквозной функциональности;</li><li>использование контейнеров;</li><li>создание облачно-нативных приложений и приложений без зависимостей;</li><li>написание автоматизированных тестов;</li><li>проектирование распределённых систем.</li></ul><h2>Красивый код и алгоритмы</h2><p>Книга «Чистая архитектура» продолжает цикл книг Роберта Мартина, в который входят книги «Чистый код: создание, анализ и рефакторинг» и «Идеальный программист. Как стать профессионалом разработки ПО». В ней автор даёт своё видение концепций архитектуры и дизайна приложений. Книга не предлагает несколько вариантов решений проблем на выбор, а объясняет, как именно и почему нужно сделать именно так, как описано в книге.</p><p>«Чистая архитектура» будет полезной для разработчиков любого уровня, системных аналитиков и архитекторов. Благодаря советам, приведённым в книге, вы сможете писать более продуманные программы, подняться по карьерной лестнице и, возможно, повлиять на людей на вашей работе, отвечающих за архитектуру программ и крупных сервисов.</p><p>Реактивное программирование — это парадигма программирования, ориентированная на потоки данных и распространение изменений. С её помощью можно создавать эффективные распределённые системы и писать производительный код для JVM (Java Virtual Machine).</p><p>Книга рассказывает о шаблонах проектирования (design patterns), поэтому она подойдёт опытным разработчикам на Java и Scala. С этой книгой вы узнаете, как:</p><ul><li>организовать поток задач;</li><li>наладить обмен сообщениями между элементами программы;</li><li>обеспечить параллельную и конкурентную обработку;</li><li>создать надёжные, отказоустойчивые и гибкие приложения.</li></ul><p>Книга поможет изучить основы Computer Science: концепцию объектно-ориентированного программирования (ООП), алгоритмы и структуры данных, теорию вычислений и архитектуру компьютеров. Для практических примеров используется язык Java как наиболее универсальный и достаточно мощный язык. Они охватывают различные области, включая прикладную математику, физику и биологию, числовые методы, визуализацию данных, синтез звука, обработку графики и финансовое моделирование.</p><p>Благодаря универсальности книги она рекомендуется для прочтения всем, кто хочет начать изучение компьютерных наук.</p><h2>ОС и безопасность</h2><p>Монументальный труд Майкла Керриска, признанный по всему миру, вышел и на русском языке. «Linux API. Исчерпывающее руководство» представляет собой подробный справочник по более чем пяти сотням системных вызовов и библиотечных функций Linux и UNIX. Вы изучите:</p><ul><li>эффективные чтение-запись файлов;</li><li>использование сигналов, часов и таймеров;</li><li>создание процесса и исполнение программы;</li><li>безопасность программ;</li><li>разработку многопоточных программ на базе POSIX-потоков;</li><li>создание и использование общих библиотек (shared library);</li><li>межпроцессное взаимодействие через каналы, очереди сообщений, разделяемую память и семафоры;</li><li>создание сетевых программ с помощью API сокетов.</li></ul><p>Книга является официальным руководством по популярному дистрибутиву Kali Linux. Благодаря ему можно научиться использовать и настраивать Kali Linux с нуля. В частности, вы узнаете о том, как:</p><ul><li>установить Kali Linux и работать с командной строкой;</li><li>использовать менеджер пакетов Debian: установка и настройка пакетов, обновление Kali Linux и создание собственных настраиваемых пакетов;</li><li>компилировать ядро Linux;</li><li>создавать собственные ISO-образы;</li><li>обеспечить шифрование и защиту конфиденциальной информации.</li></ul><p>Если взять изначальное понятие хакинга (поиск изысканого и неочевидного решения), то многие программисты являются в какой-то степени хакерами. С помощью знаний принципов программирования можно находить уязвимости, а навыки обнаружения уязвимостей помогают создавать программы. Поэтому многие хакеры занимаются тем и другим одновременно, ведь найти нестандартные решения можно как для написания оригинальных программ, так и для поиска слабых мест компьютерных систем.</p><p>Данная книга не содержит в себе каких-то готовых рецептов взлома чего-либо. Она даёт читателю необходимую базу для понимания основных направлений хакинга, например, реверс-инжиниринг и эксплуатацию уязвимостей, безопасность веб-приложений, криптографию и беспроводные сети. Кроме того, в книге даны основы языка Си и ассемблера.</p><p>Седьмое издание книги «Внутреннее устройство Windows» наиболее полно раскрывает принципы работы основных компонентов Windows 10. Согласно рейтингу NetMarketShare за декабрь 2018 года, Windows 10 лидирует в списке самых популярных ОС.</p><p>Книга будет полезна:</p><ul><li>Разработчикам. Глубокие знания функционирования целевой платформы помогут писать более производительные и безопасные приложения для Windows.</li><li>Системным администраторам. Сисадмины, знающие принципы работы Windows, смогут разобраться с поведением системы, повысить производительность системы и провести диагностики сбоев.</li><li>Специалистам по ИБ. Они смогут найти многие потенциальные «бреши» в безопасности системы.</li></ul><h2>DevOps и системное администрирование</h2><p>Система Kubernetes предназначена для автоматизации развёртывания, масштабирования и управления контейнеризированными приложениями. Однако развёртывание распределённого приложения с помощью Kubernetes требует определённых знаний. Тут на помощь придёт книга «Kubernetes в действии».</p><p>Сначала книга рассмотрит системы Docker и Kubernetes. После того, как вы соберёте первый кластер Kubernetes, вы сможете его постепенно развивать, добавляя новые функциональные возможности и углубляя свои знания архитектуры и принципа работы Kubernetes. В процессе вы изучите основные такие аспекты работы с контейнерами, как мониторинг, настройка и масштабирование.</p><p>Методология DevOps находится на стыке разработки и операционного управления. Одна из главных целей подхода в том, чтобы разработчики и системные администраторы тесно взаимодействовали для быстрого запуска и обновления продукта. Разработчики должны уделять внимание поддержке программного продукта, а сисадмины — сообщать о проблемах продукта и обеспечить комфортный процесс работы.</p><p>Чтобы продукт стал удобным для дальнейшей поддержки, требуется настроить немало функций, например конфигурацию через центральную службу, внедрение простым копированием, отсутствие внешних зависимостей и полезные метрики. Как это настроить, расскажет книга «Философия DevOps. Искусство управления IT». Она познакомит вас с техническими, культурными и управленческими аспектами DevOps-культуры и позволит организовать работу так, чтобы вы получали удовольствие от разработки, поддержки и использования ПО.</p><p>Книга рассказывает о Site Reliability Engineering — технологии от Google, обеспечивающей бесперебойную работу и постепенное развитие программных систем любой сложности. Благодаря Site Reliability Engineering компания сохраняет работоспособность своих сервисов: Google Search, Google Maps, Gmail и прочих. Поэтому в книге изложены концепции и идеи, которые были разработаны опытными специалистами Google на протяжении долгого времени.</p><p>После введения в Site Reliability Engineering книга доступно излагает читателю управление рисками сервиса, понятие целевого уровня качества обслуживания, вред от рутинных задач, способы мониторинга распределённых систем, опыт Google по автоматизации процессов, технологии выпуска ПО и обеспечение простоты работы с сервисом. В следующей части книги акцент переносится на диагностику работы продукта, действия при возникновении критических ситуаций, включая высокие нагрузки и сбои в системе, а также обеспечение надёжности сервиса. Последняя часть книги посвящена управлению инженерами, отвечающими за сопровождение системы.</p><h2>Глубокое обучение и Big Data</h2><p>Автор Александр Сенько рассказал на примере сервисов Microsoft Azure и Amazon Web Services (AWS) об особенностях обработки больших данных (Big Data). Книга поделена на 4 раздела:</p><ul><li>Введение. Автор пояснил, что такое облако и Big Data, а также рассказал о видах архитектур систем, оперирующих Big Data.</li><li>Хранение данных в облаке. В разделе рассмотрены различные типы хранилищ, включая реляционные и нереляционные базы данных, хранилища общего назначения, реляционные хранилища больших DWH и хранилища данных типа Data Lake.</li><li>Отправка данных в облако. Автор объяснил особенности загрузки потоковых данных и трансформации данных.</li><li>Анализ данных в облаке. Рассматриваются три типа анализа: интерактивный, потоковый и пакетный.</li></ul><p>Франсуа Шолле, создатель известной библиотеки для работы с нейросетями Keras, достаточно простым языком постарался объяснить, что такое глубокое обучение (deep learning). Для этого он поделил книгу на две части. В первой части он объяснил необходимые теоретические основы, в частности, дал математическую базу, введение в нейронные сети и основы машинного обучения. Во второй части книги Шолле рассмотрел несколько примеров на языке Python из разных областей. В книге вы также найдёте инструкции по работе с библиотекой Keras и инструментом Jupyter Notebook.</p><p>Если вы не нашли в нашей подборке книгу, которую вы ждали и с удовольствием прочитали, поделитесь ей в комментариях.</p><p>Читайте интересные статьи и <a href="https://tproger.ru/books/">книги</a> по программированию, решайте <a href="https://tproger.ru/problems/">задачки</a>, записывайтесь на <a href="https://tproger.ru/events/">онлайн-курсы</a>, ходите на <a href="https://tproger.ru/events/">крутые события</a> — постоянно развивайтесь как специалист, и ваши усилия многократно окупятся.</p>]]></content:encoded>
    </item>
    <item>
      <title>Подборка книг для изучения Linux</title>
      <link>https://tproger.ru/books/linux</link>
      <comments>https://tproger.ru/books/linux?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Грачев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/linux</guid>
      <description><![CDATA[<p>Книги о ядре Linux и дистрибутивах на его базе помогут разобраться в настройке и администрировании системы и собрать собственный дистрибутив.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/linux">Подборка книг для изучения Linux</a>»</p>]]></description>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Операционные системы]]></category>
      <category><![CDATA[Системное администрирование]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 07 Dec 2018 14:43:58 GMT</pubDate>
      <content:encoded><![CDATA[<p>Операционные системы на базе Linux любят за гибкость, масштабируемость и обширные возможности в настройке и персонализации. Благодаря этому существует множество Linux-дистрибутивов для различных целей: от домашнего использования до управления кластерами серверов. Но чтобы добиться максимальной производительности и безопасности, нужно понимать процессы, проходящие внутри этой ОС, и изменять настройки системы, стоящие по умолчанию. Книги, указанные ниже, помогут в администрировании системы и создании собственных дистрибутивов.</p><p>Книга, написанная самим создателем Linux Линусом Торвальдсом. В ней он рассказывает о своей жизни и о том, с чего началась разработка Linux. Также в ней Линус поделился своим видением по разработке открытого программного обеспечения и Linux в частности. Если хочется посмотреть на Linux со стороны «отца» системы, а также больше узнать о его личности, то эта книга обязательна к прочтению.</p><p>Командная строка в Linux — основной инструмент для работы с этой ОС. Поэтому, чтобы полноценно настроить систему под свои нужды и ускорить рабочий процесс, нужно обучиться работе с этим инструментом и основным командам. Данная книга познакомит читателя с возможностями командной строки в Linux. В частности, здесь рассказывается о том, как:</p><ul><li>создавать, удалять и редактировать файлы, а также работать с каталогами и символьными ссылками;</li><li>администрировать систему, включая установку необходимых пакетов и управление процессами;</li><li>писать скрипты для автоматизации различных задач;</li><li>работать с текстовыми файлами.</li></ul><p>Несмотря на название книги, она подойдёт не только специалистам в информационной безопасности, но и системным администраторам. В данной книге по полочкам разложены многие аспекты настройки ОС Linux с целью повышения безопасности и производительности системы. Автор Михаил Флёнов рассмотрел потенциальные уязвимости и атаки злоумышленников, а также методы борьбы с ними. Книга хороша также тем, что с её помощью можно изучить «внутреннюю кухню» Linux.</p><p>Книга подойдёт системным администраторам, которые обеспечивают стабильную работу серверов на Windows, но сталкиваются с настройкой Linux-окружения. Она поможет быстро освоиться с работой на Linux. В ней вы найдёте информацию по настройке сетей, работе с файловой системой, диагностике работы серверов, а также управлению процессами.</p><p>Второе издание книги, главная особенность которой — небольшой размер и максимум практики. В ней содержится более 100 готовых к использованию фрагментов программ и команд для выполнения типичных задач в Linux. Материал книги охватывает как командную строку, так и различные оболочки Linux. Но она не заменит полноценное руководство по Linux, поскольку предназначена именно для быстрого поиска решения возникающих задач.</p><p>Девятое издание этой книги является достаточно полным руководством по работе с Linux, в том числе с Red Hat Enterprise Linux 7 (RHEL 7), Fedora 21 и Ubuntu 14.04 LTS. Отличительной особенностью книги стало разделение материала по уровням. Сначала даётся базовая информация о Linux, затем необходимые знания для рядового пользователя, системного администратора, потом рассматриваются серверное администрирование и безопасность. За счёт такой многоуровневости книга подойдёт всем желающим уверенно работать с этой ОС.</p><p>Официальная документация популярного Linux-дистрибутива Ubuntu постоянно поддерживается, поэтому в ней можно найти подробную информацию о наиболее последних версиях системы. Оно содержит информацию о том, как устанавливать и настраивать различные приложения в пользовательской и серверной версиях Ubuntu в соответствии с заданными требованиями. Документация по Ubuntu Desktop доступна для чтения только онлайн, по Ubuntu Server — онлайн и в PDF-формате.</p><p>В корпоративной среде популярностью пользуется дистрибутив Red Hat Enterprise Linux, считающийся одним из самых стабильных. Данная книга призвана рассказать об особенностях системы как новичкам, так и опытным пользователям. Новичку будет интересно почитать о настройке рабочей среды, электронной почты и веб-сервера. Более опытные пользователи RHEL найдут в книге такие темы, как удалённый доступ, управление логическими томами (LVM), разделение дисков, виртуализация KVM, SSH и совместное использование файлов с использованием Samba и NFS. В книге рассматривается немного устаревший RHEL 6, но в ней описаны концептуальные вещи, не теряющие актуальность со временем.</p><p>Эту книгу нельзя было обойти стороной, хоть и Linux рассматривается только в одном разделе. Это классический труд Эндрю Таненбаума, в котором рассказывается обо всех аспектах современных операционных систем. В разделе про Linux можно найти информацию об истории возникновения UNIX и Linux, архитектуре системы, её процессах, управлении памятью, вводе-выводе, файловой системе и безопасности. Кроме того, а этой главе рассматривается и Android как отдельная система на базе Linux.</p><p>Книга является хорошим руководством по работе с ядром Linux. В ней рассказывается о различных нюансах при эксплуатации этой ОС, системном администрировании Linux, а также о низкоуровневых механизмах системы. Также в книге рассматривается программирование shell-скриптов, программирование на языке Си, безопасность системы, виртуализация, компьютерные сети и многое другое.</p><p>Книга будет интересна всем, кто интересуется внутренней составляющей Linux. Здесь рассказывается о загрузке ОС, управлении устройствами, драйверами устройств и процессами, работе сетей и интерфейсов, инструментах для разработки, написании эффективных shell-скриптов, а также ключевых функциях ядра в пользовательском пространстве: системные вызовы, ввод/вывод и файловая система. Все эти знания помогут тщательно настроить систему под себя.</p><p>Книга является полным руководством по установке, настройке и обслуживанию любых UNIX- или Linux-систем, в том числе обеспечивающих облачную инфраструктуру. Руководство охватывает такие темы, как управление хранилищем, проектирование и администрирование сети, безопасность, веб-хостинг, автоматизация, управление конфигурацией, анализ производительности, виртуализация и DNS.</p><p>В книге описано поэтапное конструирование собственной системы на базе Linux только с необходимыми open source программами. В частности, автор Крис Симмондс рассматривает:</p><ul><li>необходимый для этого набор инструментов;</li><li>ядро Linux и его загрузчики;</li><li>конфигурирование файловой системы;</li><li>работу с системами сборки Buildroot и Yocto Project;</li><li>управление памятью, а также процессы и потоки;</li><li>отладку и оптимизацию полученной системы;</li><li>исполнение приложений реального времени.</li></ul><p>Данная книга поможет пошагово создать собственный Linux-дистрибутив с необходимыми программами. Руководство описывает как процесс подготовки к сборке дистрибутива, так и его установку, конфигурирование, настройку загрузчика для запуска системы, а также финальные штрихи.</p><p>Сама онлайн-книга является дополнением к одноимённому проекту. Его цель — создание гибкой и производительной системы, заточенной под нужды конкретного пользователя. Однако созданием собственной ОС можно заняться ещё и для того, чтобы лучше изучить структуру Linux изнутри.</p><p>Одна из немногих качественных книг о Linux-дистрибутиве Debian. Её поддерживают опытные участники сообщества этой ОС, что означает качественную и понятную подачу материала. Книга призвана собрать всю необходимую информацию об этой системе в одном месте, чтобы сделать дистрибутив популярным у пользователей. В силу того, что экосистема Debian состоит только из свободного ПО, то и сама книга доступна для прочтения всем желающим на нескольких языках, включая русский. Седьмое издание книги описывает Debian версии 8.</p><p>Какие книги помогли вам освоиться в Linux? Пишите своё мнение в комментариях. Лучшие книги из комментариев также войдут в эту подборку.</p>]]></content:encoded>
    </item>
    <item>
      <title>Подборка книг по информационной безопасности</title>
      <link>https://tproger.ru/books/information-security-books</link>
      <comments>https://tproger.ru/books/information-security-books?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Грачев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/information-security-books</guid>
      <description><![CDATA[<p>Книги о безопасности мобильных и веб-приложений, Интернета вещей, десктопных программ и контейнеров помогают устранять уязвимости в проектах.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/information-security-books">Подборка книг по информационной безопасности</a>»</p>]]></description>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 26 Oct 2018 17:08:59 GMT</pubDate>
      <content:encoded><![CDATA[<p>В программных продуктах разработчики достаточно часто сосредотачиваются на функциональности и производительности, а о безопасности думают лишь в последнюю очередь. Ниже представлена подборка книг, которые помогут избавиться от различных «дыр» в безопасности. Темы самые разные: от мобильных и веб-приложений до Интернета вещей, десктопных программ и контейнеров.</p><p>В книге рассмотрены методы и средства хакерства. Её особенность — минимум теории и максимум практики. В «Лаборатории хакера» описывается ряд способов перехвата паролей, взлома Wi-Fi сетей, дальнейшие действия злоумышленника после проникновения в локальную сеть жертвы, рассказывается о шифровании данных, способах сохранения инкогнито в Интернете и методах взлома паролей из базы Active Directory. В книге много внимания уделено изучению хакинга с использованием смартфонов.</p><p>В книге материал больше ориентирован на Windows, но и Unix-системам автор уделил внимание. Главная её цель — ознакомить читателя с методами работы злоумышленников, чтобы он смог сделать свои проекты более защищёнными.</p><p>Данная книга не содержит в себе каких-то готовых рецептов взлома чего-либо. Она даёт читателю необходимую базу для понимания основных направлений хакинга, например, реверс-инжиниринг и эксплуатацию уязвимостей, безопасность веб-приложений, криптографию и беспроводные сети. Кроме того, в книге даны основы языка Си и ассемблера.</p><p>Книга предоставляет пошаговые руководства по модификации оборудования, которые учат базовым методам хакерства, а также реверс-инжинирингу. В ней подробно обсуждаются механизмы безопасности Xbox и другие темы. Кроме того, в книге даны практические указания по организации хакерской атаки и даже пайке электронных компонентов. Книга также охватывает социальные и политические последствия взлома.</p><p>Книга от Ю. Родичева содержит разбор наиболее важных нормативных документов ФСТЭК, а также международных и национальных стандартов Российской Федерации в области информационной безопасности. Это учебное пособие предназначено для студентов вузов, но будет полезно и специалистам в области ИБ.</p><p>Автор В. Бондарев рассмотрел в книге законодательную базу информационной безопасности, основные подходы к созданию систем защиты информации, привёл перечень возможных угроз и классификацию предупредительных мер.</p><p>Учебное пособие подготовлено для студентов вузов, изучающих ИБ.</p><p>Во многих книгах по ИБ освещаются либо только технические аспекты, либо нормативные акты, связанные с обеспечением ИБ. Но данное учебное пособие стремится избавиться от однобокого разбора этой темы, и поэтому в ней приводятся как техническая информация, описывающая атаки и защиту от них, так и рекомендации по обеспечению информационной безопасности с соответствующими примерами.</p><p>Книга предназначена для системных администраторов и пользователей малых и средних сетей, осуществляющих защиту корпоративных ресурсов.</p><p>Профессор Шон Смит, автор этой книги, считает, что использование в Интернете вещей текущих практик информационной безопасности проектов недопустимо и может привести к неприятным последствиям. Поэтому он предлагает создавать совершенно новые подходы к обеспечению безопасности IoT-устройств.</p><p>Книга описывает методы, позволяющие избежать ошибок при проектировании IoT, преследующие IT-проекты последние десятилетия. Пособие подойдёт разработчикам, инженерам, промышленные дизайнерам и производителям.</p><p>В этой книге Интернет вещей рассматривается со стороны защиты пользовательских данных. Автор Гилад Роснер (Gilad Rosner) изучил американские и европейские концепции защиты личных данных, ценности, методы конфиденциальности и их применение в IoT.</p><p>Читатели смогут найти в книге различные определения Интернета вещей и сформировать о нём своё мнение, понять различие в IoT между конфиденциальностью и безопасностью, изучить основные риски конфиденциальности, связанные с распространением подключенных устройств, и многое другое.</p><p>Фаззинг — это процесс отсылки намеренно некорректных данных в исследуемый объект с целью вызвать ситуацию сбоя или ошибку. С его помощью можно предсказать типы ошибок в программном продукте на основе полученных выходных данных. Поэтому ключ к эффективному фаззингу — правильный подбор данных, инструментов и изучаемых продуктов. В книге достаточно понятным языком рассказывается о том, как подвергать фаззингу программные продукты и строить собственные эффективные фаззеры, поэтому она подойдёт как новичкам в этом деле, так и опытным специалистам.</p><p>Чтобы безопасно использовать Docker, необходимо знать о потенциальных проблемах безопасности, а также об основных инструментах и ​​методах обеспечения безопасности систем на базе контейнеров. Автор этой книги Эдриан Муат (Adrian Mouat) даёт в ней рекомендации для разработки политик и процедур безопасности контейнеров.</p><p>В книге рассматриваются такие угрозы, как эксплойты ядра, DoS-атаки, разрывы контейнеров и заражённые изображения. Хоть книга и выпущена в 2016 году, многие методы, приведенные в ней, по-прежнему актуальны.</p><p>Автор Джим Бёрд в своей книге рассказал об опыте создания безопасных DevOps-процессов таких компаний, как Etsy, Netflix и London Multi-Asset Exchange (LMAX). Из книги вы узнаете, как использовать такие процессы и инструменты, как контроль версий, контейнеры и Continuous Delivery, которые используют специалисты DevOps для автоматизации доставки программного обеспечения и изменений инфраструктуры. Другими словами, вы поймёте, как безопасно использовать DevOps.</p><p>Spring Security — это платформа, ориентированная на обеспечение аутентификации и авторизации для Java-приложений и является частью фреймворка Spring. Spring Security, как и все Spring-проекты, примечателен гибкостью и простотой масштабирования в соответствии с поставленными требованиями.</p><p>Spring Security Essentials фокусируется на безопасности приложений —  области, которая редко изучается разработчиком Spring. В начале книги представлены различные отраслевые стандарты безопасности и практические способы интеграции с ними. Кроме этого, пособие познакомит с некоторыми современными примерами использования, такими как создание безопасных веб-служб и RESTful-приложений.</p><p>Книга является первым полным русскоязычным практическим руководством по вопросам разработки политик ИБ. Её отличает последовательное изложение всех основных идей, методов и способов практического решения разработки, внедрения и поддержки политик безопасности в различных российских государственных и коммерческих структурах.</p><p>В этом практическом руководстве можно найти информацию о том, как устранить угрозы безопасности веб-приложений на нескольких уровнях, включая такие области, как микросервисы. Кроме того, в книге описано, как защитить своё приложение на любой платформе.</p><p>Автор Джон Пол Мюллер предоставляет в своей книге рекомендации и несколько примеров безопасного программирования для разработчиков с хорошим знанием CSS3, HTML5 и JavaScript. Руководство поделено на пять отдельных разделов, в которых дан материал о том, как защитить веб-приложение от вирусов, DDoS-атак, нарушений безопасности и других вторжений.</p><p>Безопасность и производительность часто рассматриваются как отдельные проблемы, требующие разных решений. Но злоумышленники постоянно придумывают новые способы воздействия на оба аспекта веб-сайта. Поэтому нужны решения, которые могут устранять «бреши» в безопасности, одновременно повышая производительность веб-приложения. Как это возможно? В этой книге вы изучите решения, которые могут повысить безопасность и производительность конечных пользователей.</p><p>Мобильные приложения постоянно работают с пользовательскими данными, в том числе конфиденциальными. Поэтому разработчику крайне важно проводить тесты на проникновение (penetration testing), чтобы обеспечить безопасность пользовательских данных и найти уязвимости и лазейки.</p><p>В данной книге описаны принципы работы основных компонентов Android- и iOS-приложений. Далее читателю даётся информация о правильной настройке тестовой среды, чтобы выявить максимальное количество уязвимостей, а затем о том, как эти «бреши» устранять.</p><p>Данная книга познакомит читателей со скриптовыми языками, которые используются в инструментах для тестов на проникновение, а также с примерами того, как их использовать и в каких ситуациях.</p><p>Второе издание много внимания уделяет использованию Powershell и различным инструментам для тестирования.</p><p>Данная книга обеспечивает упрощённый охват функций сетевого сканирования, доступных в наборе утилит Nmap. Каждая функция Nmap проиллюстрирована наглядными примерами, которые помогут быстро понять их назначение.</p><p>В книге охватываются следующие темы:</p><ul><li>установка Nmap на Windows, macOS и Unix/Linux-платформы;</li><li>базовые и продвинутые технологии сканирования;</li><li>инвентаризация сетевого оборудования и сетевой аудит;</li><li>технологии обхода фаерволла;</li><li>Zenmap — графическая оболочка для Nmap;</li><li>NSE — скриптовый движок для Nmap;</li><li>Ndiff — утилита для сравнения результатов работы Nmap;</li><li>Ncat — гибкая сетевая утилита;</li><li>Nping – как Ping, но с расширенной функциональностью.</li></ul><p>А какие книги по информационной безопасности читали вы? Поделитесь ими в комментариях, лучшие войдут в эту подборку.</p>]]></content:encoded>
    </item>
    <item>
      <title>Подборка книг о компиляторах и обо всем, что с ними связано</title>
      <link>https://tproger.ru/books/compiler-design-books</link>
      <comments>https://tproger.ru/books/compiler-design-books?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Грачев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/compiler-design-books</guid>
      <description><![CDATA[<p>Подборка книг объясняет устройство и создание компиляторов, оптимизацию кода, работу GCC, генерацию кода и распределение регистров на RISC-процессорах.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/compiler-design-books">Подборка книг о компиляторах и обо всем, что с ними связано</a>»</p>]]></description>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 17 Apr 2018 16:30:12 GMT</pubDate>
      <content:encoded><![CDATA[<p>Для любого программиста понимание принципа работы используемых им инструментов — залог успеха. Особенно сильно в изучении программирования способно помочь знание того, как устроен и пишется компилятор, пусть даже совсем простой. Мы собрали подборку лучших книг по принципам работы компиляторов и их написанию, которые научат вас грамотному проектированию и низкоуровневому программированию этих мощнейших инструментов.</p><p>Всеобъемлющая книга о самых насущных проблемах проектирования и написания компиляторов под современные процессоры. Написанная как для студентов, так и уже состоявшихся разработчиков, она расскажет вам о множестве способов оптимизации кода и наиболее эффективных из них, а также расскажет о создании компилятора для современных актуальных языков.</p><p>Курсы по компиляторам в учебных заведениях далеко не всегда хорошо освещают эту тему. Книга «Создаем оптимизированный компилятор» призвана восполнить этот пробел. Здесь описывается принцип построения оптимизатора, генедатора кода, планировщика и распределения регистров на современных RISC процессорах. Выделяет книгу подход к вопросам с практической точки зрения: теория добавляется там, где интуитивное понимание невозможно.</p><p>Данная книга — официальное руководство от Free Software Foundation по «изнанке» компиляторов GNU. В нем содержатся следующие материалы: как поучаствовать в разработке компилятора GCC, разбор необходимых характеристик для хоста и целевой машины, поддерживаемых GCC, а также описание древовидной структуры исходного кода GCC и системы сборки. Сами авторы этой книги преподносят ее как справочник, в котором можно найти множество информации по внутренней структуре GCC.</p><p>Книга полна материала, охватывающего последние разработки технологии компиляции. Здесь описаны важные темы, без которых не обойтись в процессе построения современного компилятора, а именно принцип работы императивных и объектно-ориентированных языков, планирование инструкций и распределение регистров.</p><p>Данная книга является одной из серии книг, различающихся по используемым языкам программирования. В каждой из них изложены все этапы создания современного компилятора: лексический анализ, синтаксический анализ, абстрактные синтаксические и семантические действия, анализ потоков данных, распределение регистров. Также описывается покрытие текущих методов генерации кода и функциональные и объектно-ориентированные языки.</p><p>Вторая книга из серии «Modern Compiler Implementation», содержащая в себе примеры кода на языке Си. Рассматриваются те же темы, что и в предыдущей книге.</p><p>Третья книга из серии «Modern Compiler Implementation», проиллюстрированная частями кода, написанного на языке Java.</p><p>Цель книги «Introduction to Compiler Design» — обучить читателя создавать компиляторы для простых языков программирования. Хоть материал руководства и не охватывает методы оптимизации компилируемого кода, зато в книге даются некоторые наработки, которые используются в реальных компиляторах и помогут лучше разобраться в самой их концепции. В руководстве освещаются все этапы, необходимые для компиляции кода, написанного на языке высокого уровня, в машинный язык: разделение кода на лексические составляющие, его разбор, создание промежуточного кода, генерация машинного кода и использование регистров. Примеры кода представлены на псевдоязыке.</p><p>Широко известная книга, своего рода классика жанра, рекомендуемая многими профессорами и разработчиками. Не так давно она была переиздана, и теперь каждая глава содержит только самые актуальные сведения по разработке компиляторов. Авторы помнят, что некоторые читатели могут использовать эту книгу как полное пособие, и поэтому обращают внимание на широчайший круг проблем, с которыми можно столкнуться в процессе разработки программного обеспечения.</p><p>Фокусируясь на фундаментальных техниках, общих для всех языковых парадигм, эта книга расскажет вам все, что необходимо для создания современного компилятора. Тема рассмотрена с позиции всех наиболее популярных парадигм программирования – императивной, объектно-ориентированной, функциональной и некоторых других. Акцент сделан на техниках автоматизации, в том числе на инструментах для автоматизации проектирования компилятора.</p><p>Цель данной книги — познакомить читателя с основами компиляторов. Основное внимание в ней уделяется императивным и функциональным языкам программирования: подмножествам языков C++ и Haskell, на которых часто пишут компиляторы. Материал, представленный в руководстве, переносим на разные языки программирования. В книге используется инструмент <a href="https://github.com/BNFC/bnfc">BNF Converter</a>, с помощью которого в автоматическом режиме генерируется большая часть кода компилятора.<br />По мнению автора, каждый программист должен знать, как работают компиляторы и интерпретаторы, чтобы легче понимать, как работают другие языки, и, возможно, создавать новые. В последней главе рассказывается о различных концепциях языков: от минималистичных полных по Тьюрингу языков до полноценного взаимодействия человека и компьютера на естественном языке.</p><p>Книга создана для того, чтобы помочь каждому исследователю и программисту обновить свои знания, усовершенствовать навыки и подготовиться к созданию прогрессивных качественных продуктов. 14 глав этого справочника посвящены таким вопросам, как сборка мусора, уменьшение времени выполнения компиляции и оптимизация процесса. Особое внимание уделено работе со встраиваемыми устройствами, а также способам отладки кода с ошибками. Книга обеспечит вам глубокое понимание принципа распределения регистров, программной конвейеризации, планировании инструкций и системы типизации.</p><p>Данная книга разработана вики-сообществом, поэтому постоянно дорабатывается. Ее основная цель — дать читателю понять, что написать самому компилятор вполне реально. Помимо компиляторов, в книге рассматривается создание интерпретаторов кода. Материал содержит минимум теоретической информации. Хорошо подходит для новичков, не знающих ничего о написании компиляторов и интерпретаторов.</p><p>Книга станет бесценной находкой для всех, кто начинает изучение семантики и логики языков программирования. Эта информация позволит вывести и систематизировать правила, которыми можно описать любой из существующих языков программирования. В книге использованы данные прогрессивных исследований, в том числе по такой животрепещущей теме, как параллелизм. Последняя глава посвящена параллельным языкам программирования, в том числе методам определения и проверки недетерминированных и параллельных программ.</p><p>Эта книга не о компиляторах и их проектировании, но она незаменима для всех, кто имеет дело с низкоуровневым программированием (а без него в создании компилятора не обойтись). Здесь вы найдете информацию о CRC, научитесь таким трюкам, как целочисленное деление, в том числе с помощью сдвигов, вычисление остатка без подсчета частного, новые алгоритмы сжатия и расширения, деление с плавающей точкой, алгоритм LRU, а также оцените галерею графиков дискретных функций.</p><p>Если вы знаете еще пару-тройку интересных книг, которые наглядно и понятным языком поясняют устройство и написание компиляторов, то поделитесь вашим мнением в комментариях. Лучшие книги добавим в эту подборку.</p>]]></content:encoded>
    </item>
    <item>
      <title>Исчерпывающий список книг для совершенства в C++</title>
      <link>https://tproger.ru/books/cpp-books-master</link>
      <comments>https://tproger.ru/books/cpp-books-master?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Грачев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/cpp-books-master</guid>
      <description><![CDATA[<p>Подборка книг поможет разработчикам, знакомым с C++, изучить параллельное, метапрограммирование и обобщённое программирование, а также найти справочники.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/cpp-books-master">Исчерпывающий список книг для совершенства в C++</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 29 Mar 2018 13:35:55 GMT</pubDate>
      <content:encoded><![CDATA[<p>В этой подборке освещены книги, которые могут помочь программистам, уверенно владеющим C++, освоить такие темы, как параллельное программирование, метапрограммирование, обобщенное программирование, и т.д. В конце вы можете найти справочники по C++, которые пригодятся разработчикам любого уровня.</p><ol><li><a href="https://tproger.ru/#professional">Для профессионалов</a></li><li><a href="https://tproger.ru/#handbook">Справочники</a></li></ol><h2>Для профессионалов</h2><p>Книга от издательства O’Reilly. В начале читателя знакомят с понятием метапрограммирования. В последующих главах подробно рассматривается практическая сторона вопроса, а именно:</p><ul><li>работа с библиотеками Boost.MPL, Boost.Hana и Brigand;</li><li>разбор техник для написания более компактного, красивого и безопасного кода с помощью метапрограммирования;</li><li>использование «фишек» стандартов C++11 и C++14, позволяющих писать более простой код;</li><li>написание кода, требующего существенно меньшее количество тестов и затрат на обслуживание.</li></ul><p>Книга распространяется свободно, достаточно заполнить регистрационную форму.</p><p>Цель данной книги — дать читателю базовые знания о библиотеке Boost. Boost очень часто используется в крупных проектах, написанных на C++, поскольку она предлагает множество функций, которые пока отсутствуют в стандартах C++. Например, реализацию графов, работу с регулярными выражениями, различные настраиваемые псевдослучайные генераторы, и т.д. Использование данной библиотеки позволяет существенно ускорить разработку, за что она получила признание сообщества программистов, пишущих на C++. К тому же знание этой библиотеки будет существенным плюсом в резюме.</p><p>Книга объясняет, что такое метапрограммирование, почему это важно и как уникальное сочетание функций в C ++ делает его особенно мощным языком для метапрограммирования. В нем также освещена ​​библиотека Boost — мощная среда с открытым исходным кодом, базирующаяся на идиомах STL, что делает процесс ее изучения более приятным.</p><p>Книга, рассказывающая о поддержке многопоточности в С++11. Включает в себя описания библиотеки потоков, atomics-библиотеки, модели памяти С++, блокировок и мьютексов (взаимных исключений) вместе с распространенными проблемами дизайна и дебага мультипоточных приложений.</p><p>Руководство, написанное до выхода С++11, фокусирующееся больше на практике, чем на теории. Содержит множество примеров кода, рассказывает о приемах, которые, без сомнения, полезно знать. Если вы сможете смириться с плохим оформлением, то читать эту книгу легче, чем Александреску, и, что спорно, почерпнете из нее больше. Даже профессиональные разработчики смогут найти для себя что-то новое.</p><h2>Справочники для всех уровней</h2><p>Классическое введение в С++, написанное автором этого языка. Легко читается и покрывает все аспекты технологии, начиная от самого языка и стандартной библиотеки и заканчивая парадигмами программирования и философией С++ (последние издания преодолели барьер в 1000 страниц). Четвертое издание, выпущенное в мае 2013 года, покрывает и С++11.</p><p>Справочник по стандартной библиотеке С++. Второе издание покрывает С++11. В книге основной упор делается на стандартную библиотеку шаблонов (STL), в особенности на алгоритмы, итераторы, контейнеры и функциональные объекты. Помимо этого, в книге освещается современный стиль программирования на C++, в частности:</p><ul><li>диапазонные циклы for;</li><li>лямбда-функции;</li><li>вариативные шаблоны.</li></ul><p>В книге содержится исчерпывающая информация о потоках и локалях. Авторы поясняют, какие проблемы могут решить два этих компонента, и иллюстрируют теорию огромным количеством примеров. В книге достаточно много материала о концепции потоков и локалей, их архитектуре, а также представлены различные варианты их использования. Книгу очень удобно использовать, когда требуется решить проблему в коде, связанную с этими двумя компонентами, за что она заслуженно попала в подборку.</p><p>Полный справочник по всему С++. Предназначен только для профессионалов, которые готовы потратить кучу времени и усилий на его изучение и понимание. Если вы отчаялись искать ответ на ваш вопрос в различных учебниках и даже на Stack Overflow, попробуйте его найти здесь. Осторожно, погружение в глубины C++ не для слабонервных.</p><p>Материалы презентации (слайды и заметки лектора) с трехдневного тренировочного курса, проведенного Скоттом Мэйерсом, который считается уважаемым писателем в данной сфере. И хотя количество поднятых тем мало, качество на высоте. На семинаре обсуждались ключевые функции стандартов C++11 и C++14, а также возможности их использования.</p><p>В книге описаны все ключевые слова, функции, классы и свойства языка С++, соответствующие стандарту ANSI/ISO. Отлично подойдет для того, чтобы время от времени в нее заглядывать и находить нужные ответы на интересующие вопросы. Справочник состоит из пяти частей:</p><ul><li>подмножество Си;</li><li>язык С++;</li><li>библиотека стандартных функций;</li><li>библиотека стандартных классов;</li><li>приложения на языке С++.</li></ul><p>Понравилась подборка? Поделитесь своим мнением в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Исчерпывающий список книг для углубления в C++</title>
      <link>https://tproger.ru/books/cpp-books-middle</link>
      <comments>https://tproger.ru/books/cpp-books-middle?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Алексей Грачев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/cpp-books-middle</guid>
      <description><![CDATA[<p>Подборка для разработчиков на C++ содержит 42 рекомендации по написанию кода и знакомит с опытом анализа программ с помощью PVS-Studio.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/cpp-books-middle">Исчерпывающий список книг для углубления в C++</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 12 Mar 2018 15:00:17 GMT</pubDate>
      <content:encoded><![CDATA[<p>Эта подборка предназначена для тех программистов, которые уже умеют разрабатывать приложения на языке C++. С помощью представленных книг вы сможете отточить свои навыки и научиться некоторым техникам, которые позволять вам писать эффективный и быстрый код. Приятного погружения в океан знаний!</p><p>С чего начинается знакомство с книгой? Конечно, с заголовка. Вам не показался он смутно знакомым? Если нет, то советую почитать про загадочное число <a href="https://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%B2%D0%B5%D1%82_%D0%BD%D0%B0_%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D1%8B%D0%B9_%D0%B2%D0%BE%D0%BF%D1%80%D0%BE%D1%81_%D0%B6%D0%B8%D0%B7%D0%BD%D0%B8,_%D0%B2%D1%81%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B8_%D0%B2%D1%81%D0%B5%D0%B3%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B3%D0%BE">«42»</a>. В книге вы найдете 42 (как неожиданно!) рекомендации по написанию кода, которые помогут избежать множество ошибок. Автор Андрей Карпов имеет огромный опыт в анализе кода с помощью статического анализатора PVS-Studio. Он обнаружил, что большая часть ошибок, которые находил анализатор, достаточно типичны и повторяются из одного проекта в другой. Так он решил написать данное руководство, чтобы помочь разработчикам, пишущим на языке C++, писать более совершенный код.</p><p>Эта книга была написана как обязательная к прочтению для программистов на C++. Ранние издания были нацелены на специалистов, пришедших с С, третье издание поменяло свой курс на мигрирующих с Java и подобных ей языков. Содержит около 50 легко запоминающихся правил, написанных и объясненных в доступной форме.</p><p>Скотт Мейерс задумывал эту книгу как продолжение предыдущей. Описанные в новой книге приемы по сравнению с оной не столь важны, но ознакомиться с ними несомненно стоит. Автор, опираясь на свой многолетний опыт, дает множество советов по написании эффективных программ на языке C++. В частности, вы сможете ознакомиться с примерами обработки исключений и анализом их влияния на структуру и поведение классов и функций С++, а также вариантами практического применения новых возможностей языка, таких как тип bool, ключевые слова mutable и explicit, пространства имен, шаблоны функций членов, стандартная библиотека шаблонов и многое другое.</p><p>В отличие от двух предыдущих книг, в этой Скотт Мейерс рассказывает обо всех преимуществах использования «фишек» современных стандартов C++11 и C++14. В первую очередь книга подойдет для тех разработчиков, которые хотят перейти с устаревших стандартов, таких как C++03 и более ранних, на современные и научиться эффективно использовать все их функции. В книге подробно освещаются следующие темы:</p><ul><li>преимущества и недостатки инициализации с помощью фигурных скобок, спецификации noexcept, прямой передачи и функций make интеллектуальных указателей;</li><li>связь между std::move, std::forward, rvalue-ссылками и универсальными ссылками;</li><li>методы написания понятных, корректных, эффективных лямбда-выражений;</li><li>чем std::atomic отличается от volatile, как они используются и как соотносятся с API параллельных вычислений C++;</li><li>какие из лучших методов «устаревшего» программирования на C++ (т.е. C++98) должны быть пересмотрены при работе с современным C++.</li></ul><p>В отличие от других руководств по оптимизации кода, представленных в этой подборке, эта книга делает акцент на оптимизации кода на достаточно низком уровне: компилятора и микропроцессора. Пособие является первым из серии книг про низкоуровневую оптимизацию. Автор рассматривает архитектуру x86 для процессоров Intel, AMD и VIA, включая их современные 64-битные версии. Напомним лишь, что к низкоуровневой оптимизации следует прибегать, только если другие способы улучшения кода не дают ощутимый результат.</p><p>В этой книге Скотт Мейерс привел множество приемов работы со стандартной библиотекой шаблонов STL. Эти рекомендации подкреплены подробным анализом и качественными примерами, поэтому читателю будет легче освоить STL и научиться использовать библиотеку в своих проектах.</p><p>Книга от издательства O’Reilly, что уже говорит о ее высоком качестве. В ней вы найдете ответы на многие вопросы о современном C++, например:</p><ul><li>какие «фишки» C++ полезны в облачных вычислениях;</li><li>почему данный язык является единственным языком высокого уровня, использующимся для разработки приложений в трех мобильных платформах: iOS, Android, Windows;</li><li>какие изменения языка ожидаются в следующих обновлениях стандарта языка.</li></ul><p>Книга представляет собой сборник задач. Она содержит подробное обсуждение управления ресурсами и безопасностью исключений в С++. В материале рассматриваются идиомы RAII и pimpl, а также такие темы, как проверка имен, дизайн классов и модель памяти С++.</p><p>Книга является продолжением труда «Решение сложных задач на С++». В ней вы можете найти материал по дженерик-программированию, оптимизации и управлению ресурсами. Эта книга — отличный пример того, как надо писать модульный код в С++, используя non-member функции и принцип единой ответственности. Рассчитана на разработчиков с глубокими познаниями в C++.</p><p>«Стандарты» здесь — это не «сколько пробелов я должен ставить перед новой строчкой?», а советы по написанию кода, идиомы и чаще всего встречающиеся грабли, которые помогут вам писать корректный, понятный и эффективный код на С++. Книга дает много полезных рекомендаций как для опытных программистов, так и для разработчиков профессионального уровня. Вторые могут взять за основу материалы из этой книги и разработать собственные стандарты программирования для собственной команды.</p><p>Данное пособие содержит в себе основные рекомендации по написанию проектов на языке C++, учитывающее как уже существующие стандарты (C++17, C++14, C++11), так и ожидаемые улучшения. Фокус материала сосредоточен на таких темах, как интерфейс, управление ресурсами и памятью, а также параллелизм. Рекомендации не затрагивают такие моменты, как стиль отступов, названия переменных, функций, классов, поскольку достаточно часто в компаниях, занимающихся разработкой, определены для этого собственные стандарты. Материал постоянно обновляется, так что вы всегда получите актуальную информацию прямо из рук создателя C++ — Бьерна Страуструпа.</p><p>Официальное пособие от компании Google по стилизации кода. Данные рекомендации используются в большинстве open source проектов поискового гиганта, написанных на C++. Google обозначила несколько главных принципов своего руководства:</p><ul><li>Правила должны быть применимыми на практике.</li><li>Код должен быть удобочитаемым, ведь его будут изучать и другие люди.</li><li>Написанный код должен соответствовать уже существующему.</li><li>При необходимости следует ориентироваться на рекомендации сообщества разработчиков C++.</li><li>Избегать опасных конструкций.</li><li>Избегать конструкций, которые большинство C++-программистов посчитали бы сложными.</li><li>Приступать к оптимизации кода только в случае необходимости.</li></ul><p>Это книга о шаблонах в том виде, в котором они существовали до С++11. Она покрывает все от самых начал до продвинутого шаблонного метапрограммирования, подробно объясняет, как работают шаблоны, обсуждает некоторые распространенные грабли. В приложениях несколько замечательных извлечений из правила одного определения (англ. ODR).</p><p>Как известно, программы для встроенных систем и микроконтроллеров разрабатывают в подавляющем большинстве случаев на языке Си. Он считается наиболее быстрым и приближенным к «железу» среди всех языков высокого уровня. Автор этой книги стремится развеять это установившееся понятие и рассказывает о разработке подобных программ на языке C++. Со времен C++98 язык получил существенные изменения, стал более удобным, безопасным, а самое главное — быстрым. Последние исследования говорят о том, что код, написанный на современном C++, по времени исполнения ничтожно мало отличается от аналогичного кода, написанного на Си, зато удобство работы и скорость разработки программы возрастает в разы. Это особенно актуально для систем реального времени. Поэтому C++ имеет все шансы стать языком номер один для разработки под микроконтроллеры.</p><p>Понравилась вам подборка? Или вы знаете еще несколько крутых книжек? Делитесь с нами своим мнением в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Подборка хороших книг для программистов</title>
      <link>https://tproger.ru/books/best-books-for-programmers</link>
      <comments>https://tproger.ru/books/best-books-for-programmers?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Иван Бирюков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/best-books-for-programmers</guid>
      <description><![CDATA[<p>В списке собраны книги для старта в разных технологиях, подготовки к собеседованию разработчика и знакомства с алгоритмами, шаблонами и безопасностью.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/best-books-for-programmers">Подборка хороших книг для программистов</a>»</p>]]></description>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 15 Feb 2018 12:20:00 GMT</pubDate>
      <content:encoded><![CDATA[<p>В этом посте мы собрали подборку самых популярных книг для разработчиков. Они затрагивают множество различных тем и являются лучшими для старта изучения той или иной технологии.</p><p>Автором этого пособия является Г. Макдоуэлл, основатель CareerCup и бывший сотрудник таких компаний, как Apple, Google и Microsoft. Книга предназначена для качественной подготовки к предстоящему собеседованию на позицию разработчика программного обеспечения.</p><p>Она сделана в формате «задача-решение»: почти 200 вопросов и ответов, большинство из которых автор взял из собственного опыта, покрывают всевозможные темы, в том числе алгоритмы, шаблоны проектирования и многое другое. В целом прочтение «Cracking the Coding Interview» точно не будет лишним, и это подтверждает его статус бестселлера.</p><p>Многие задачи из этой книги есть в нашем переводе в <a href="https://tproger.ru/problems/">соответствующей рубрике</a> сайта.</p><p>В книге «24 смертных греха компьютерной безопасности» Майкл Ховард и Дэвид Лебланк, эксперты безопасности Microsoft, рассказывают о наиболее распространенных и серьезных ошибках при создании разнообразного ПО, а также соответствующих «дырах».</p><p>Рассмотрено большинство языков и платформ программирования, каждая глава посвящена отдельному типу уязвимости — «смертному греху».</p><p>Создание качественного и развитого искусственного интеллекта — одна из самых сложных задач, с которыми сталкиваются разработчики игр. Часто от качества ИИ зависит весь коммерческий успех проекта.</p><p>В этом пособии Ян Миллингтон, известный в игровой индустрии программист и автор серии книг, делится своим опытом создания и улучшения ИИ в самых разнообразных играх. Книга содержит множество реальных примеров, а также исходные коды популярных коммерческих реализаций алгоритмов ИИ. Большое внимание уделено разработке геймплея с упором на искусственный интеллект, реализации поведения персонажей и особенностям разработки игр-головоломок.</p><p>Обновленное третье издание рассказывает обо всех математических концептах, которые должен знать современный разработчик компьютерных игр для создания графики и игровых движков на профессиональном уровне.</p><p>Третье издание раскрывает такие темы, как проекции, тени, физика, отрисовка ткани и числовые методы, а весь код полностью соответствует последним спецификациям языка шейдеров.</p><p>Самая большая проблема, стоящая перед многими разработчиками игр — завершение разработки их продукта. Часто проекты «выдыхаются», оказываясь перегруженными сложностью и запутанностью их собственного кода. Эта книга призвана решить эту проблему раз и навсегда.</p><p>«Game Programming Patterns» — это коллекция шаблонов, делающих код (не только игр) чище, проще для понимания и быстрее. Из нее вы узнаете, как создать надежный цикл игры, как организовывать объекты и их компоненты, как использовать кэш процессора для улучшения производительности и многое другое. Вы погрузитесь в изучение не только того, как работают скриптовые движки и как их оптимизировать, но и того, как классические шаблоны проектирования могут быть использованы в разработке игр.</p><p>MySQL — супер-популярная свободная реляционная система управления базами данных, которую использует большинство интернет-сайтов.</p><p>С помощью этой книги всего за 7 дней вы сможете освоить MySQL, научиться использовать её скорость и гибкость. Вы научитесь сохранять, модифицировать и обрабатывать данные, подключать к БД свои программы, работать с таблицами, делать бекапы и многое другое.</p><p>Если у вас есть идея для «взрывного» Android-приложения, но вы не знаете, как её реализовать, то эта книга — то, что вам нужно. Вы узнаете, как правильно задать структуру своего приложения, создать к нему интерфейс и базу данных, а также как сделать, чтобы оно работало на самых разных смартфонах и планшетах, и многое другое.</p><p>По словам авторов, эта книга — как опытный Android-разработчик рядом с тобой. Единственное, что вам нужно для начала — небольшое знание Java.</p><p>«97 вещей, которые должен знать каждый программист» — сборник коротких практических советов от ведущих специалистов в области IT, который поможет избежать многих проблем, стоящих на пути программиста.</p><p>В этой книге Майкл Физерс предлагает стратегии по эффективной работе с legacy-кодом. Автор долгое время занимался наставничеством и решил поместить в книгу весь свой опыт. Прочитав её, вы узнаете, как читать, исправлять и улучшать такой код. Помимо примеров на Java, C++, C и C# в книге есть 24 способа избавления от зависимостей.</p><p>В этой книге говорится о паттернах проектирования и описываются простые и элегантные решения типичных задач, возникающих в объектно-ориентированном проектировании. Паттерны проектирования не появились сразу в готовом виде; многие разработчики, искавшие возможности повысить гибкость и степень пригодности к повторному использованию своих программ, приложили много усилий, чтобы поставленная цель была достигнута. В паттернах проектирования найденные решения отлиты в краткую и легко применимую на практике форму.</p><p>Роберт Мартин в своём творении, опираясь на личный опыт и, что даже важнее, конкретные примеры из своей практики, рассказывает о том, как нужно кодить. Принципиальное отличие от книги Макконелла заключается в том, что здесь очень мало статистических обоснований правильности тех или иных действий, только код (занимающий почти треть книги) и рекомендации автора.</p><p>Эта книга отлично подойдёт тем, кто сталкивался или ещё только столкнётся с проблемно-ориентированным программированием.</p><p>Если вы планируете построить успешную карьеру программиста, то это та книга, которую прочитать вы просто обязаны. Абсолютно неважно, в какой среде вы планируете работать, какой ваш уровень подготовки, новичок вы или уже руководитель — здесь найдётся полезная информация для каждого, кто хоть как-то связан с процессом создания кода. Совершенного кода.</p><p>«Язык программирования Си» (также известна как K&amp;R) — книга Брайана Кернигана и Денниса Ритчи, причём последний — один из непосредственных авторов и разработчиков языка Си. Книга стала основой для разработки и популяризации Си, до сих пор имеет спрос и широко используется в качестве «классического» учебника по языку. Она долгое время была единственным справочным руководством и де-факто — стандартом языка.</p><p>Кстати, у нас есть <a href="https://tproger.ru/books/9-free-clang-books/">неплохая подборка</a> бесплатных книг по Си, советуем взглянуть, если этот язык вам интересен.</p><p>Ещё один представитель программистской литературы, где на трёхстах страницах методично описываются основные принципы создания качественного кода и условия, при которых вы будете получать удовольствие от работы, а клиент от результатов. Написана книга приятным языком, поэтому много времени на её освоение не уйдёт.</p><p>Практически каждого программиста привела в профессию любовь к созиданию, удовольствие от созерцания, как символы превращаются в программы. Однако есть в этой работе и обратная сторона: высокая конкуренция, сложные отношения с клиентами, коллегами, руководством, финансовая нестабильность. Именно о тёмной стороне работы программиста и о том, как существовать в ладах со всеми этими заботами, рассказывает в своей книге Джон Сонмез.</p><p>Эта книга рассматривает создание кода на уровне общих принципов, то есть описываются алгоритмы, объясняется взаимодействие программной среды и машины и, как следствие, предлагаются методы оптимизации будущего кода. Несмотря на довольно общую тематику, в профессиональных кругах эта книга считается учебником, как для новичков, так и для настоящих зубров IT-цеха.</p><p>Ещё одна увесистая книга по алгоритмам, впервые изданная в 1990 году в Массачусетском технологическом институте с авторством местных преподавателей. Несмотря на то, что написана она простым и понятным языком, из-за объёма и подачи материала (каждая глава имеет законченный вид) использовать лучше в качестве справочника, периодически обращаясь к нужной информации.</p><p>Искусство программирования — монументальный труд Дональда Кнута. Серия книг состоит из 4 томов, каждый из которых охватывает определенные виды алгоритмов. Это классика, которую до сих пор в обязательном порядке проходят в ВУЗах. Материал подан в достаточно сложном формате, но и цель у книг особенная — рассказать наиболее полно о существующих алгоритмах.</p><p>Не обращайте внимание на российское название — в оригинале это «Cracking the Coding Interview: 189 Programming Interview Questions and Solution», то есть просто 189 наиболее часто задаваемых вопросов на собеседованиях в крупных IT-компаниях. Ответы, разумеется, прилагаются. Помогает не только потренировать собственный мозг, но и получить представление об образе мышления в Amazon, Apple, Facebook, Google и Microsoft.</p><p>Кстати, мы часто даем разборы задач из этой книги в рубрике <a href="https://tproger.ru/problems/">«Задачки»</a> на нашем сайте.</p><p>Очень хорошее чтиво для людей, начинающих свой путь в программировании. Здесь автор доступным языком описывает основные этапы написания качественного кода: от идеи до финального тестирования.</p><p>От серьёзных и фундаментальных принципов построения кода перейдём непосредственно к практической части создания ПО, а именно юзабилити, производительности, масштабированию, администрированию и далее по списку. Здесь вас ждут реальные примеры из жизни автора, несколько типовых кодов на Java (при этом сам язык никакой роли не играет) и профессиональные советы, как общего плана, так и вполне конкретные по созданию кода.</p><p>Если вам когда-нибудь хотелось подсмотреть за работой других программистов высокого полёта, то это книга придётся вам по душе. Пятнадцать человек в формате живого общения расскажут об отношении к профессии, о будущем программирования и дадут конкретные практические советы.</p><p>Эта книга в США входит в список must-read любого разработчика ПО. Написана она была в далёком 1975 году, но описанные этапы, проблемы и советы по разработке ПО актуальны и по сей день. Вряд ли она будет полезна для человека, который уже несколько лет варится в профессии и на личном опыте знает об этом процессе, а вот студентам и новичкам в IT — прочитать действительно следует.</p><p>Если «Мифический человеко-месяц» — книга для разработчиков, то это своего рода библия для работников веб-индустрии. Как повысить производительность и привлекательность веб-сайта, советы для новичков, ветеранов и руководителей – всё это можно подчеркнуть из немного ироничной и крайне полезной книги Стива Круга.</p>]]></content:encoded>
    </item>
    <item>
      <title>Врубись в Ruby: подборка книг по Ruby и Ruby on Rails</title>
      <link>https://tproger.ru/books/ruby-ror-books</link>
      <comments>https://tproger.ru/books/ruby-ror-books?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Иван Бирюков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/ruby-ror-books</guid>
      <description><![CDATA[<p>Подборка книг помогает изучать Ruby и Ruby on Rails: от основ языка до проектирования API, функционального программирования и версии Ruby 2.1.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/ruby-ror-books">Врубись в Ruby: подборка книг по Ruby и Ruby on Rails</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Ruby]]></category>
      <category><![CDATA[Ruby on Rails]]></category>
      <category><![CDATA[Для продолжающих]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 28 Aug 2017 06:19:45 GMT</pubDate>
      <content:encoded><![CDATA[<p>Ruby начал разрабатываться 23 февраля 1993 года и вышел в свет в 1995 году. Название навеяно языком Perl, многие особенности синтаксиса и семантики из которого заимствованы в Ruby (pearl — «жемчужина», ruby — «рубин»). Целью разработки было создание «настоящего объектно-ориентированного», лёгкого в разработке, интерпретируемого языка программирования.</p><p>Язык обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, сборщиком мусора и многими другими возможностями. Кроссплатформенная реализация интерпретатора языка является полностью свободной.</p><p>Ruby on Rails (RoR) — фреймворк, написанный на языке программирования Ruby. Он реализует архитектурный шаблон Model-View-Controller для веб-приложений, а также обеспечивает их интеграцию с веб-сервером и сервером баз данных. Является открытым программным обеспечением и распространяется под лицензией MIT.</p><p>Чтобы помочь вам в изучении этих технологий, мы собрали подборку книг. Как всегда, если вы знаете книгу, которая не попала в этот материал, делитесь ей в комментариях.</p><p>Эта книга предназначена для тех, кто хочет писать на Ruby как профи. В ней рассказывается, как проектировать красивые API и работать с приёмами функционального программирования. Новичкам книга не подойдёт, а вот тем, кто уже разбирается в Ruby, она точно пригодится.</p><p>Цель данной книги — научить читателей эффективно использовать язык Ruby. В книге рассматривается версия Ruby 2.1. Издание содержит около 400 различных примеров, сопровождающихся четкой постановкой задачи и ее решением с подробными комментариями.</p><p>Книга отличается достаточно низким входным порогом. Для ее изучения необязательно знать основы веб-разработки. В книге материал о Ruby on Rails, популярного фреймворка для разработки веб-приложений, дается с нуля. Автор Майкл Хартл, помимо Ruby on Rails, знакомит читателя с основами самого языка Ruby, языка запросов SQL, CSS, HTML. В книге много внимания уделено практическому использованию возможностей фреймворка. Также можно ознакомиться с <a href="https://dmkpress.com/files/PDF/978-5-97060-429-8.pdf">фрагментом</a> книги.</p><p>А эта книга пригодится именно начинающим. Её сложность увеличивается по нарастающей, и в каждом следующем разделе используются навыки, полученные в предыдущих.</p><p>С «Изучаем Ruby» вы в легкой и увлекательной форме на практике освоите все возможности этого языка, который сначала стремительно захватил сердца программистов Калифорнии, а затем и России.</p><p>Прочитав эту книгу, вы научитесь писать элегантный код с применением всех его уникальных особенностей.</p><p>В этой книге подробное разбирается внутреннее устройство языка Ruby. Знать сам Ruby читателю не обязательно, но вот знание C и, в особенности, принципов ООП будет огромным плюсом.</p><p>Эта книга отлично подойдёт для знакомства с Ruby. В ней разбираются все необходимые основы: от установки языка до обработки файлов и ООП. Каждая тема снабжена понятными примерами.</p><p>В этой книге рассказывается об одной из самых интересных фич Ruby — блоках. Они похожи на замыкания и лямбды и используются как в простых структурах языка вроде блоков, так и в сложных приёмах.</p><p>Эта книга разбита на несколько секций, различающихся по сложности. Сперва рассказывается о настройке и основных возможностях Ruby, а затем речь идёт о стандартной библиотеке и темах для продвинутых.</p><p>В этой книге рассказывается об основах веб-разработки на популярном фреймворке Ruby on Rails. Чтобы дать читателю представление о работе с реальными проектами, в книгу включены примеры использования Git, GitHub и Heroku.</p><p>Эта книга посвящена использованию принципов ООП в веб-проектах на Ruby on Rails. Фокус смещён в сторону практических решений, которые берут наилучшее от «пути Rails» и объектно-ориентированного подхода.</p><p>Также советуем ознакомиться с <a href="https://github.com/arbox/ruby-style-guide/blob/master/README-ruRU.md">этим руководством по стилю оформления</a> Ruby-кода и <a href="http://guides.rubyonrails.org">официальными гайдами</a> по Ruby on Rails.</p>]]></content:encoded>
    </item>
    <item>
      <title>«Use the index, Luke»: подборка книг по SQL и теории баз данных</title>
      <link>https://tproger.ru/books/sql-db-books</link>
      <comments>https://tproger.ru/books/sql-db-books?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Иван Бирюков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/sql-db-books</guid>
      <description><![CDATA[<p>Подборка включает книги для знакомства с SQL, бесплатную веб-версию SQL Performance Explained и материалы о производительности баз данных.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/sql-db-books">«Use the index, Luke»: подборка книг по SQL и теории баз данных</a>»</p>]]></description>
      <category><![CDATA[SQL]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 22 Aug 2017 14:38:43 GMT</pubDate>
      <content:encoded><![CDATA[<p>SQL (англ. structured query language — «язык структурированных запросов») — язык программирования, применяемый для создания, модификации и управления данными в реляционной базе данных, управляемой соответствующей системой управления базами данных. Появился в 1974 году как язык для экспериментальной реляционной СУБД IBM System R и породил множество диалектов для различных СУБД.</p><p>В этой подборке собраны книги, посвящённые языку SQL и теории реляционных баз данных. Если вы знаете другие книги, которыми стоит поделиться с читателями, оставляйте их в комментариях.</p><p>Эта книга предназначена для знакомства с SQL. Знания предмета не требуются, достаточно лишь иметь базовое представление о работе с компьютером. В книге не рассматривается конкретная реализация SQL, поэтому использовать книгу как шпаргалку не рекомендуется.</p><p>Это бесплатная веб-версия книги «SQL Performance Explained». Она целиком посвящена производительности баз данных и способам её повышения.</p><p>В современном мире наивысшую ценность имеет информация, но не менее важно уметь этой информацией управлять — данная книга посвящена языку запросов SQL, который является самым популярным инструментом для управления информацией в мире.</p><p>Прочитав эту книгу, вы освоите весь глубокий синтаксис SQL — от простых SELECT и INSERT вы перейдете к сложнейшим запросам к базе данных.</p><p>В книге вы найдете много материала о том, как проектировать и реализовывать приложения, основанные на графовых базах данных. Графовые базы данных отличаются хорошим масштабированием, а также достаточно малым временем выполнения запросов пользователей.</p><p>Во втором издании примеры кода и схемы были приведены в соответствии актуальному синтаксису графовой базы данных Neo4j, а также была добавлена информация об обновленной функциональности Neo4j.</p><p>Книга познакомит вас с языком запросов T-SQL (Transact-SQL), который используется в сервере баз данных Microsoft SQL Server и является разновидностью стандартов ISO и ANSI для языка SQL. Издание не привязано к конкретным версиям программного обеспечения, но в ней рассматриваются элементы языка, которые появились в SQL Server 2012 и более ранних версиях.</p><p>Книга состоит из десяти глав. Первая глава содержит теоретические основы, здесь рассматриваются написание запросов и программирование на языке T-SQL, создание таблиц и обеспечение целостности данных. Различным аспектам получения и редактирования информации посвящены главы 2−8. В девятой главе затронута тема параллельных соединений и транзакций. В главе 10 рассказывается о программируемых объектах.</p><p>В книге наиболее полно дана информация о языке запросов SQL. Вы научитесь работать с командами и инструкциями SQL, создавать и настраивать реляционные базы данных, загружать и модифицировать объекты баз данных, выполнять мощные запросы, повышать производительность и выстраивать систему безопасности. Кроме того, в книге рассматривается несколько видов баз данных, включая потоковые и встраиваемые базы данных, базы данных для мобильных устройств, и многие другие.</p><p>Эта книга познакомит вас с теорией реляционных баз данных и способами применения полученных знаний на практике. Отлично подойдёт тем, кто изучает эту тему в вузе.</p><p>Эту книгу стоит читать параллельно с предыдущей: их структуры идентичны, но в этой книге показывается, как реализовать приведённые примеры на SQL. Также рассматриваются различные диалекты SQL и рассказывается об истории языка.</p><p>Данная книга посвящена теории баз данных и систем управления базами данных. Каждый раздел снабжён заметками и упражнениями.</p><p>Эта книга посвящена созданию собственной СУБД. Изложенным в ней материалом можно (и нужно) пользоваться для проектирования новых СУБД и языковых интерфейсов для этих систем.</p><p>Эта книга рассказывает о том, как использовать языки UML и SQL для наилучшего проектирования и реализации баз данных. Она используется в качестве учебного пособия в Университете штата Калифорния в Лонг-Бич, но её также можно читать и в одиночку.</p><p>В этой книге пошагово объясняются основные принципы моделирования реляционных баз данных. Для реализации многочисленных примеров используется Oracle SQL.</p>]]></content:encoded>
    </item>
    <item>
      <title>«На лучшем языке писать имеешь право»: книги по программированию на Java</title>
      <link>https://tproger.ru/books/java-free-advanced-books</link>
      <comments>https://tproger.ru/books/java-free-advanced-books?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Иван Бирюков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/java-free-advanced-books</guid>
      <description><![CDATA[<p>В прошлой подборке мы собрали книги, которые пригодятся начинающим своё знакомство с языком Java. Теперь же настало время книг для прошаренных джавистов :) </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/java-free-advanced-books">«На лучшем языке писать имеешь право»: книги по программированию на Java</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Для продолжающих]]></category>
      <category><![CDATA[Для продвинутых]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 16 Aug 2017 15:34:34 GMT</pubDate>
      <content:encoded><![CDATA[<p>В отличие от <a href="https://tproger.ru/books/java-free-beginners-books/">прошлой подборки</a>, сейчас мы подготовили для вас список книг для прошаренных Java-программистов. Здесь вы найдете различные материалы и практические руководства по изучению языка с примерами и подробным разбором всех тонкостей работы.</p><p>Микросервисы — это полезно, но у них есть и недостатки. В этой книге доступно рассказывается, как пользоваться популярными фреймворками вроде Dropwizard и Spring Boot и как разворачивать и поддерживать масштабируемые микросервисы при помощи Linux-контейнеров.</p><p>Надеемся, вам не нужно рассказывать, что такое Android и какие преимущества дает умение создавать приложения под него, а по словам авторов, это пособие — как опытный Android-разработчик рядом с вами.</p><p>Прочитав эту книгу, вы наконец-то сможете реализовать ту самую «взрывную» идею приложения или игры: вы узнаете, как правильно задать структуру своего приложения, создать к нему интерфейс и базу данных, а также как сделать, чтобы оно работало на самых разных смартфонах и планшетах, и многое другое.</p><p>RxJava — это популярная среди Android-разработчиков библиотека для обработки асинхронных данных, но разобраться в ней может быть непросто. В этой книге автор рассказывает об основах RxJava и на примере реального сценария показывает, как использование этой библиотеки упрощает реализацию на первый взгляд громоздких задач.</p><p>Десятое издание книги, обновленное в соответствии с Java SE 8. Во втором томе рассказывается о новых развитых функциональных возможностях, появившихся в версии Java SE 8, в том числе о новых интерфейсах API для потоков данных, даты, времени и календаря, а также о возможностях разработки графических пользовательских интерфейсов, обеспечения безопасности, написания платформенно-ориентированного кода и многое другое.</p><p>С приходом DevOps, микросервисов, контейнеров и облачных платформ для разработки пропасть между красивыми решениями и энтерпрайз-разработкой сильно выросла. В этой книге рассказывается о том, как строить современную архитектуру при помощи Java EE.</p><p>В книге рассматриваются фундаментальные возможности Java EE 7, а также теория и практика использования паттернов проектирования на примерах реальных прикладных задач. Не лишним перед прочтением книги будет наличие базовых знаний паттернов проектирования и платформы Java EE.</p><p>«Java Application Development on Linux» — это практическое руководство по полному жизненному циклу разработки Java-приложений на Linux. Рассматриваются такие темы, как анализ бизнес-логики, проектирование баз данных, пользовательские интерфейсы Java-сервлетов, Server Pages (JSP) и графические интерфейсы Swing и Standard Widget Toolkit (SWT).</p><p>Эта книга рассказывает о создании бэкенда веб-приложений при помощи Java Server Faces (JSF), Java Persistence API (JPA) и баз данных MySQL. Процесс разбит на 7 шагов и снабжён практическими примерами.</p><p>Для развёртывания Java-приложений обычно требуется установить Java Development Kit (JDK), сервер приложения, веб-сервер, настроить базу данных и другие компоненты дата-центра. Но этот громоздкий процесс можно существенно упростить при помощи Docker-контейнеров. В этой книге рассказывается об основах использования Docker и популярных вспомогательных фреймворков.</p><p>Java 3D — это клиентский API для отрисовки интерактивной 3D-графики, который можно применять как в играх, так и в научных визуализациях. Разобраться в нём поможет эта книга, предложив как теорию, так и богатый набор практических приложений. Знание OpenGL и Swing для читателя будет существенным плюсом.</p><p>В этой книге подробнейшим образом рассказывается о процессе создания приложений различной сложности на базе нейронных сетей. Каждый тип сетей доступно описывается на примере реальных задач и приложений.</p><p>Эта книга посвящена практическому применению техники многопоточного программированию на языке Java. Книгу легко читать, и она снабжена множество примеров.</p><p>Если вам интересна тема многопоточности, вам подойдёт наша серия статей «Многопоточное программирование в Java 8»:</p><ol><li><a href="https://tproger.ru/translations/java8-concurrency-tutorial-1/">Параллельное выполнение кода с помощью потоков</a>;</li><li><a href="https://tproger.ru/translations/java8-concurrency-tutorial-2/">Синхронизация доступа к изменяемым объектам</a>;</li><li><a href="https://tproger.ru/translations/java8-concurrency-tutorial-3/">Атомарные переменные и конкурентные таблицы</a>.</li></ol><p>Как всегда, если вы знаете книги, которыми стоит поделиться с сообществом, оставляйте их в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>«Писать на Java не работа, писать на Java — праздник»: книги для начинающих Java-программистов</title>
      <link>https://tproger.ru/books/java-free-beginners-books</link>
      <comments>https://tproger.ru/books/java-free-beginners-books?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Иван Бирюков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/java-free-beginners-books</guid>
      <description><![CDATA[<p>Java остаётся самым популярным и востребованным языком программирования. Мы собрали подборку бесплатных книг, полезных начинающим Java-разработчикам.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/java-free-beginners-books">«Писать на Java не работа, писать на Java — праздник»: книги для начинающих Java-программистов</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 07 Aug 2017 18:11:58 GMT</pubDate>
      <content:encoded><![CDATA[<p>Java — сильно типизированный объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре с помощью виртуальной Java-машины. Дата официального выпуска — 23 мая 1995 года.</p><p>Несмотря на возраст, Java остаётся <a href="https://tproger.ru/news/tiobe-july-2017/">самым популярным</a> и <a href="https://tproger.ru/sponsored/java-development-viability/">самым востребованным</a> языком. Чтобы упростить его изучение, мы подготовили подборку книг по программированию на Java, которые пригодятся начинающим разработчикам.</p><p>В этой книге рассказывается о развитии языка Java. Рассматриваются его история, влияние, которое он оказал на другие языки, становление Java EE, а также его будущее: Java 9, Project Panama, Project Valhalla и интернет вещей.</p><p>Эта книга — учебник по программированию для начинающих, где в качестве языка выбран Java. Каждый раздел снабжён упражнениями, а в конце прилагается весь необходимый код.</p><p>Язык Java имеет крайне дружественный синтаксис, но это не значит, что разобраться в нем так уж легко. Книга «Изучаем Java» построена на визуализации и несколько отличается от классических учебников. Она имеет очень подробное изложение, массу живых примеров и упражнения для закрепления в каждом разделе. Подойдёт всем тем, кто ничего не слышал про программирование, в том числе и про объектно-ориентированное, так как Java — полностью объектно-ориентированный язык, и изучать его нужно именно в таком контексте.</p><p>В общем, «Изучаем Java» — это не только бестселлер, но и благодаря нестандартной форме обучения и подачи материала одна из лучших книг для начинающих в принципе.</p><p>Эта книга отлично подойдёт в качестве учебного пособия для начинающих программистов. Сложность тем постепенно увеличивается: сперва обсуждаются базовые принципы, а затем — рекурсия и ООП. Все примеры кода <a href="https://github.com/AllenDowney/ThinkJavaCode">выложены</a> на GitHub.</p><p>Книга довольно небольшая (около 190 страниц). В ней достаточно сжато подаются основы языка Java, но после прочтения книги станет возможным писать собственные приложения на Java. Пособие наполнено иллюстрациями, поясняющими результат исполнения кода. Книга подойдет для тех, кому нужно максимально быстро освоить синтаксис Java.</p><p>Цель этой книги — помочь в изучении Java. В ней описываются принципы создания приложений с графическим пользовательским интерфейсом на примере двух игр: «Крестики-нолики» и «Пинг-понг». Хотя книга и рассчитана на детей старше 12, программистам постарше она тоже подойдёт. Последняя глава — бонусная: в ней рассказывается, как публиковать свой код на GitHub.</p><p>Данная книга горячо любима программистами за глубокое и поистине философское изложение тонкостей языка Java. Это пособие считается одним их лучших учебников по Java, поскольку в нем уделено внимание не только синтаксису языка, но и особенностям написания кода на Java. Эти подходы сравниваются с методами в других языках программирования.</p><p>Споры между фанатами ООП и функциональщиками не прекращаются уже много лет. В своей книге автор обсуждает сходства этих парадигм программирования и тенденцию по их сближению. Примеры на Java помогут вам:</p><ul><li>узнать, как лямбды (анонимные функции) помогают объектно-ориентированным языкам работать с параллелизмом и конкурентностью;</li><li>понять, как SOLID — 5 основных принципов ООП — сопоставляются с возможностями функционального подхода;</li><li>изучить главные шаблоны ООП и научиться применять их в функциональном программировании.</li></ul><p>Эта книга — короткое введение в Java 8. Она поможет разобраться в основных фичах этой версии языка, таких как Project Lambda, Date-Time API, Streams и Nashorn.</p><p>Книга ориентирована на читателей, уже имеющих опыт в программировании на каком-либо языке. В десятом издании рассматривается Java SE 8.</p><p>Книга состоит из двух томов. В данной подборке рассматривается первый том. В нем рассматриваются самые разные вопросы: от принципов объектно-ориентированного программирования до обобщений, коллекций, лямбда-выражений, разработки графического интерфейса средствами библиотеки Swing, а также новейшие методики параллельного и функционального программирования.</p><p>Эта книга рассчитана на тех, кто уже знает Python. Сперва рассматривается простая Java-программа, затем рассказывается об основных конструкциях, которые присутствуют почти во всех языках. После основ разбираются уникальные фичи Java.</p><p>Краткое введение в Java от Oracle. Описываются его история и философия, а также основы разработки.</p><p>Также рекомендуем изучить <a href="https://google.github.io/styleguide/javaguide.html">стайлгайд от Google</a>, <a href="http://docs.oracle.com/javase/specs/">спецификации Java SE</a> и официальные руководства по <a href="http://docs.oracle.com/javase/tutorial/">стандартной</a> и <a href="http://docs.oracle.com/javaee/7/index.html">энтерпрайз</a>-версиям языка.</p><p>Если вы знаете другие книги, которые стоит разместить в этой подборке, делитесь ими в комментариях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Родом из Google: книги для знакомства с Go</title>
      <link>https://tproger.ru/books/go-books</link>
      <comments>https://tproger.ru/books/go-books?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Иван Бирюков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/go-books</guid>
      <description><![CDATA[<p>Подборка бесплатных книг по Go знакомит с синтаксисом, стандартной библиотекой, типизацией, параллелизмом и другими особенностями языка.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/go-books">Родом из Google: книги для знакомства с Go</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Golang]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 31 Jul 2017 15:29:26 GMT</pubDate>
      <content:encoded><![CDATA[<p>Go — это компилируемый статически типизированный язык с открытым исходным кодом, разработанный в Google и активно поддерживаемый сообществом. Его отличает наличие современных фич, чистый синтаксис и хорошо задокументированная стандартная библиотека.</p><p>Чтобы упростить изучение Go, мы собрали для вас подборку бесплатных книг, посвящённых этому языку. В первую очередь рекомендуем ознакомиться с расширенной документацией <a href="https://golang.org/doc/effective_go.html">Effective Go</a> и <a href="https://tour.golang.org/welcome/1">интерактивным туром</a> по языку.</p><p>Как следует из названия, эта книга — краткое и ёмкое введение в программирование при помощи языка Go. Рассматриваются следующие темы:</p><ul><li>типы;</li><li>переменные;</li><li>условные операторы;</li><li>массивы;</li><li>функции;</li><li>указатели;</li><li>структуры;</li><li>интерфейсы;</li><li>конкурентность;</li><li>пакеты;</li><li>тестирование.</li></ul><p>Go — сравнительно молодой язык программирования, выпущенный компанией Google всего 6 лет назад, но уже прочно занявший место в сердцах программистов. Его основными преимуществами являются простой и понятный синтаксис, статическая типизация, параллелизм, высочайшая производительность (в 10-15 раз быстрее скриптовых языков), а также обаятельный талисман-бобренок.</p><p>Данная книга является одним из наиболее авторитетных пособий, предназначенных как для новичков, так и для профессионалов, имеющих опыт программирования на C++. Во время прочтения вы узнаете об основных особенностях языка, причинах отхода от ООП, изучите синтаксис и его возможности, научитесь использовать Go для решения реальных проблем и многое другое.</p><p>Помимо основ, эта книга рассказывает о преимуществах и недостатках статической типизации, о том, что выделяет Go среди других и в чём этот язык хорош. Для закрепления знаний автор предлагает различные упражнения.</p><p>В данной книге рассказывается о том, как писать программы, в полной мере использующие возможности языка Go. В ней приведено множество сравнений идиом программирования, демонстрирующих преимущества использования Go. И поскольку Go с самого начала позиционировался как язык для создания многопоточных программ, автор Марк Саммерфильд разъясняет все аспекты параллельного программирования на этом языке с применением каналов и без использования блокировок, а также показывает гибкость и необычность подхода к объектно-ориентированному программированию с применением механизма динамической типизации.</p><p>Данная книга ориентирована на практическое применение языка Go и предназначена для программистов, знакомых с этим языком. В ней содержится множество решений типовых задач в ключевых областях с использованием всех возможностей Go. Книга также знакомит с конкретными приемами использования Go в облаке, тестирования и отладки, маршрутизации, а также создания веб-служб, сетевых и многих других приложений.</p><p>В данной книге разбираются различные темы, связанные с веб-программированием, например:</p><ul><li>пакет net/http;</li><li>развёртывание;</li><li>промежуточное ПО;</li><li>рендеринг;</li><li>тестирование;</li><li>базы данных.</li></ul><p>Эта книга рассказывает о создании веб-приложений при помощи Go. Описываются основы разработки, а также инструменты и различные приёмы. В конечном итоге полученные знания используются для реализации веб-фреймворка.</p><p>Эта книга предназначена для тех, у кого уже есть опыт программирования на других языках. Вот рассматриваемые темы:</p><ul><li>функции;</li><li>пакеты;</li><li>создание типов данных;</li><li>интерфейсы;</li><li>конкурентность;</li><li>работа с файлами и сетями.</li></ul><p>В этой книге рассказывается, как создавать веб-приложения без использования фреймворков. Каждый принцип снабжён подробным примером кода.</p><p>Это — введение в язык Go. Книга отлично подойдёт тем, кто плохо знаком с указателями и статической типизацией.</p><p>Эта книга посвящена практическим аспектам криптографии. Рассматриваются принципы создания безопасных систем, а также задачи, которые криптография не способна решить.</p><p>Если вы знаете другие бесплатные книги по Go, которые стоит добавить в нашу подборку, делитесь ими в комментариях!</p><p>О том, что делает язык Go таким необычным, читайте в нашей <a href="https://tproger.ru/translations/chto-delaet-go-takim-neobychnym/">статье</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Make PHP great again: подборка книг для изучения PHP</title>
      <link>https://tproger.ru/books/php-books</link>
      <comments>https://tproger.ru/books/php-books?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Иван Бирюков]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/books/php-books</guid>
      <description><![CDATA[<p>Книги по PHP охватывают синтаксис, базы данных, шаблонизацию, безопасность, тестирование, сессии, cookies и объектно-ориентированное программирование.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/books/php-books">Make PHP great again: подборка книг для изучения PHP</a>»</p>]]></description>
      <category><![CDATA[Веб-разработка]]></category>
      <category><![CDATA[PHP]]></category>
      <category><![CDATA[Книги]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Sun, 23 Jul 2017 17:50:47 GMT</pubDate>
      <content:encoded><![CDATA[<p>PHP — это <a href="https://tproger.ru/news/tiobe-july-2017/">крайне популярный</a> интерпретируемый скриптовый язык, идеально подходящий для веб-разработки. Кроме того, его можно использовать и для написания приложений командной строки. Чтобы упростить изучение PHP, мы собрали для вас подборку книг, посвящённых этому языку.</p><p>«PHP: Правильный путь» — это сборник лучших практик, общепринятых стандартов и ссылок на надёжные руководства в Сети.<br />В книге описываются такие темы, как внедрение зависимостей, работа с базами данных, шаблонизация, ошибки и исключения, безопасность, тестирование, виртуализация, а также многие другие.</p><p>Благодаря практическим примерам эта книга научит вас основам server-side программирования, начиная с базового синтаксиса и заканчивая более сложными темами, как, например, проверка форм на валидность, сессии, cookies, запросы к БД, работа с файлами и контентом, а также многое другое.</p><p>Прочитав эту книгу, кроме всего вышеперечисленного, вы также научитесь делать свои приложения безопасными, объектно-ориентированными и тестируемыми — всё как в 2016.</p><p>«PHP: Сборник рецептов» — это руководство по решению различных задач. В книге собрано более 250 повседневных задач, их решений и практических примеров, варьирующих от простых задач до огромных программ.</p><p>В общем, клад как для начинающих программистов, так и для продвинутых.</p><p>Сборник из более чем 200 функций с понятными объяснениями и примерами использования. Отлично подойдёт в качестве шпаргалки.</p><p>В книге также приведено множество советов, описываются основы PHP и работы с MySQL и регулярными выражениями.</p><p>Хотя с годами у PHP и MySQL появилось множество быстроразвивающихся конкурентов, изучение этих инструментов открывает перед разработчиком широкие перспективы. Особенно с учетом того, что сегодня PHP — это гораздо более сложный и мощный язык программирования, чем его прапрадед версии 2001 года.</p><p>Данная книга — это, безусловно, практическое руководство. В ней вы найдете много практических советов, понятный язык изложения и примеры кода реальных проектов. Несмотря на то, что учебник ориентирован на тех, кто уже имеет некоторую базу знаний и желает перейти в область серверного программирования, он будет полезен как для начинающих, так и для профессионалов.</p><p>В этой книге ведущие разработчики языка PHP 5 рассказывают о том, как выжать из языка максимум в любом проекте. Описываются решения проблем, возникающих при создании веб-приложений, расширений, пакетов, скриптов и переходе с PHP 4.</p><p>Отлично подойдёт для изучения всех тонкостей объектно-ориентированного подхода.</p><p>Это практическое руководство по тестированию подойдёт всем PHP-разработчикам. В нём затрагивается теория разработки через тестирование и присутствуют примеры кода с упражнениями.</p><p>«Programming PHP» — это подробное руководство по языку. В нём описываются как основы программирования, так и более продвинутые темы: ООП, шаблонизация, библиотеки, фреймворки и безопасность.</p><p>Эта книга предназначена для абсолютных новичков, у которых нет опыта программирования. Тем не менее, что-то полезное из неё могут почерпнуть и более опытные разработчики.</p><p>Советуем также взглянуть и на <a href="https://daylerees.com/books/">другие книги</a> этого автора — почти все они посвящены PHP и фреймворку Laravel.</p><p>В этой книге рассказывается об изменениях в седьмой версии языка PHP: новом движке Zend Engine 3, устаревших фичах, улучшениях Unicode, изменениях в ООП и многом другом.</p><p>Вы также узнаете, почему выпуск следующей мажорной версии языка занял 10 лет и куда делась шестая версия.</p><p>Целью книги является обучение программированию на PHP начинающих разработчиков. Она затрагивает все аспекты языка, от истории и основ до ООП, сессий и работы с файловой системой и базами данных. Все темы снабжены подробными примерами.</p><p>Для читателя желательно наличие опыта веб-разработки, но разобраться с материалом смогут и те, кто опыта не имеет.</p><p>Эта книга предназначена для разработчиков любого уровня. Новички смогут получить все необходимые базовые знания о PHP, а ветераны — узнать что-то новое о продвинутых возможностях языка. Кроме того, читать книгу можно в любом порядке.</p><p>Это официальное руководство посвящено PHP-разработке под базы данных Oracle. Оно подойдёт как начинающим PHP-разработчикам, желающим познакомиться с Oracle (и наоборот), так и тем, кто просто хочет узнать о лучших практиках работы с БД и веб-приложениями.</p><p>Книга из легендарной <a href="https://tproger.ru/books/head-first-programming/">серии Head First</a>, славящейся простотой и качеством изложения материала. Если HTML и CSS вам мало для создания сайта своей мечты, то самое время перейти к освоению сервер-сайда. В помощью этого руководства вы научитесь работать с базой данных и писать проекты со сложной серверной частью. Начнете вы с простых вещей вроде получения данных из форм, а затем перейдете к управлению cookie, сессиями, операциями с файлами, управлению контентом и многому другому.</p><p>Эта книга научит вас, как писать на PHP 7 надежный, безопасный объектно-ориентированный код с соблюдением всех правил новой версии. Все примеры задействуют новейшие возможности PHP 7, в том числе новый способ шифрования паролей с помощью password_hash. Кроме того, в конце каждой главы дается задание на создание вполне реального проекта с применением трехуровневой архитектуры приложения, опыт работы над которым вам еще не раз пригодится.</p><p>Освоив материал данной книги, вы сможете работать с базами данных, веб-серверами и веб-службами. Книга построена таким образом, чтобы читатель быстро и эффективно освоил данный язык. В ней вы сможете найти ответы на следующие вопросы:</p><ul><li>Как проверить данные веб-формы?</li><li>Как управлять сеансами?</li><li>Возможно ли быстро создавать проекты, используя общедоступные шаблоны веб-приложений?</li><li>Как обеспечить взаимодействие браузера и сервера?</li></ul><p>Неважно, какова ваша цель — обмениваться данными между двумя внутренними системами или построить API, которое будет возвращать данные пользователям — эта книга снабдит вас всем необходимым для создания API на PHP. Примеры в этой книге взяты из реальной жизни, поэтому им чужда неестественность или наигранность. Вы научитесь из PHP использовать JSON и XML, а также многие другие веб-технологии, изучите HTTP, выдачу, заголовки и запросы и научитесь обмениваться данными между приложениями.</p><p>Если вы знаете другие бесплатные книги по PHP, которые стоит добавить в нашу подборку, делитесь ими в комментариях!</p>]]></content:encoded>
    </item>
  </channel>
</rss>