Список литературы для самообучения разработчика программного обеспечения

Автор раздела: Ivan Zakrevsky

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

Предисловие

Классическая ошибка новичков - жажда к знаниям, нетерпеливость. Обычно это приводит к тому, что, в погоне за количеством, они надрываются (объем знаний, который предстоит освоить, действительно, огромный), осознают невыполнимость желаемого, впадают в депрессию, а затем и в состояние психологической защиты (мол, "академичность" неуместна на практике), и прекращают развиваться. Решается эта проблема очень просто - жажда должна быть не к знаниям, а к дисциплине. А уж дисциплина обязательно приведет к обретению знаний. Дисциплина - это, своего рода, производная знаний. Она поддерживает постоянную скорость на пути освоения знаний. Сперва нужно выработать привычку, а затем привычка будет работать на вас. Как говорится, сохраняйте порядок, и порядок сохранит вас.

📝 "I'm not a great programmer; I'm just a good programmer with great habits."

—Kent Beck at "Refactoring: Improving the Design of Existing Code" 1st edition by Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts

Достаточно читать по 5 страниц в день. Тут главное - стабильность. Пусть будет по чуть-чуть, но постоянно. Дисциплина - мать победы, говорил А.В. Суворов. Гнаться за количеством не нужно.

📝 "A little reading goes a long way toward professional advancement. If you read even one good programming book every two months, roughly 35 pages a week, you'll soon have a firm grasp on the industry and distinguish yourself from nearly everyone around you."

—"Code Complete" by Steve McConnell

📝 "We become authorities and experts in the practical and scientific spheres by so many separate acts and hours of work. If a person keeps faithfully busy each hour of the working day, he can count on waking up some morning to find himself one of the competent ones of his generation."

—William James, cited by Steve McConnell in "Code Complete"

И, желательно, чтобы читаемая книга совпадала с тематикой текущего проекта, чтобы через практику хорошо легла в память. Я по этой причине часто изменял свой график чтения. Обычно я читал в параллели 2-3 книги. Одну - планово, другие - по потребностям проекта.

Еще одной ошибкой является неудачный выбор литературы. Сегодня штампуется много литературы, но далеко не каждая книга достойна внимания. Закон Парето работает и здесь.

Хорошей вещью для систематизации собственных знаний является написание статей и участие в профессиональных дискуссиях. Ничто так не систематизирует собственные знания, как попытка объяснить что-то другому человеку. Вы, конечно, будете периодически ошибаться, но для кристализации знаний это лучше, чем ничего не делать. К тому же, это хорошо развивает сдержанность в аргументации, что немаловажно.

На первых порах критически важно участвовать в Open Source проектах. Можно завести свои собственные Open Source проекты. Можно принимать участие в каких-то существующих проектах с авторитетными комьюнити, которые будут помогать избавляться от ошибок. В любом случае, не надейтесь на то, что профессиональные проекты предоставят вам достаточную практику для закрепления знаний. А Open Source проекты - очень даже предоставят. Я даже считаю, что практика должна предшествовать теории, потому что трудно запомнить какое-то решение, если вам на практике не знакома решаемая проблема.

📝 "Если лечиться по справочнику, то рискуешь умереть от опечатки."

—Марк Твен

Потребность в теории должна назреть. Когда я приступал к теории, то у меня был накоплен уже солидный багаж проблем, решение которых я искал. Когда я впервые прочитал о мотивации паттерна Bridge, у меня в голове промелькнуло: "так вот, оказывается, как решается та самая проблема". Когда я читал каталог Code Smells, я частенько вспоминал свой код. В результате, решения навечно запечатлелись в памяти.

Очень правильно сказал Сергей Тепляков: "Полноценное обучение – это не теория vs. практика. Это комбинация этих вещей, при этом процент одного и другого зависит от человека и изучаемой темы."

Ну и, главное, не впадать в фанатизм. Засасывает. Нужно себя уравновешивать другими интересами, семья, спорт, физкультура, шашлыки, друзья, путешествия... Непредвзятый и свободный взгляд намного важнее изобилия знаний. Путешествие должно быть на легке, как говорил Кент Бек. По сути, знания нужны только для того, чтобы избавиться от всего лишнего. Архитектура - это, на самом деле, наука об ограничениях (т.е. о том, как не надо делать).

Кандидатский минимум

Учимся обучению

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

  • "The Clean Coder" by Robert C. Martin

Изучаем основную используемую технологию

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

  • "Learning Python" 5th edition by Mark Lutz

Для Golang интересно выглядят книги:

  • "Hands-On Software Architecture with Golang. Design and architect highly scalable and robust applications using Go" by Jyotiswarup Raiturkar

  • "The Go Programming Language" by Alan A.A. Donovan Google Inc., Brian W. Kernighan Princeton University

Для Erlang:

  • "Programming Erlang: Software for a Concurrent World (Pragmatic Programmers)" 2nd edition by Joe Armstrong

Для frontend-разработчиков, работающих с Angular, имеет смысл обратить внимание на книгу:

  • "ng-book2. The Complete Book on Angular 6" by Nate Murray, Felipe Coury, Ari Lerner, and Carlos Taborda

Азбука программирования

Подразумевается что вы уже хорошо знаете синтаксис основного языка программирования. Но, знание букв еще не делает вас поэтом. Следующие книги являются азбукой программирования. Я привожу их в таком порядке, в каком я рекомендую их прочтение:

  • "Design Patterns: Elements of Reusable Object-Oriented Software" by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

  • "Patterns of Enterprise Application Architecture" by Martin Fowler, David Rice, Matthew Foemmel, Edward Hieatt, Robert Mee, Randy Stafford

  • "Refactoring: Improving the Design of Existing Code" 1st edition by Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts

  • "Clean Code: A Handbook of Agile Software Craftsmanship" by Robert C. Martin

  • "Code Complete" 2nd edition by Steve McConnell

  • "UML Distilled. A Brief Guide to the Standard Object Modeling Language" 3d edition by Martin Fowler

  • "KISS Principles"

Учимся быть эффективным

Знаний предыдущих пяти книг достаточно для того, чтобы вы стали работать в разы эффективней. Но нужно не только знать, а еще и уметь быть эффективным на практике. Никто не раскрывает этот вопрос лучше, чем Kent Beck:

  • "Test-Driven Development By Example" by Kent Beck

Учимся делать команду эффективной

Следующий барьер - умение сделать команду эффективной. Вы не сможете быть эффективным в изоляции, поскольку ваша эффективность определяется качеством кодовой базы, а она разрабатывается всей командой. Или вы сделаете команду эффективной, или ваша эффективность так и останется мечтательством. Опять же, лучший наставник в этих вопросах - Kent Beck:

  • "Extreme Programming Explained" 1st edition by Kent Beck

На данном этапе, этой книги достаточно. Обратите внимание, я советую именно первое издание, так как оно лучше раскрывает смысл и назначение Agile разработки.

Изучаем операционную систему

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

Я в свое время читал эти книги (к сожалению, сегодня они устарели):

  • "The Linux® Kernel Primer: A Top-Down Approach for x86 and PowerPC Architectures" by Claudia Salzberg Rodriguez, Gordon Fischer, Steven Smolski

  • "Digital computers and microprocessors" by Aliyev / "Цифровая вычислительная техника и микропроцессоры" М.М.Алиев

А вот этот справочник у меня всегда под рукой:

  • "Unix and Linux System Administration Handbook" 5th edition by Evi Nemeth, Garth Snyder, Trent R. Hein, Ben Whaley, Dan Mackin

Изучаем основы алгоритмов и структур данных

Алгоритмы хоть и используются редко в прикладной разработке (если вы только не пишете поисковые системы, системные утилиты, языки программирования и операционные системы, системы маршрутизации, биржевые анализаторы и т.п.), но знать хотя бы базовые основы необходимо. Существует книга, которая за двести с небольшим страниц может дать эти базовые основы в легкой и популярной форме:

  • "Algorithms Unlocked" 3d edition by Thomas H. Cormen

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

  • "Introduction to the Design and Analysis of Algorithms" 3d edition by A.Levitin

При чтении этой книги могут возникать вопросы справочного характера по математике, ответы на которые можно найти в приложении этой книги (Appendix A: Useful Formulas for the Analysis of Algorithms, Appendix B: Short Tutorial on Recurrence Relations), в математических справочниках (например, М.Я. Выгодского, А.А. Гусака) или в справочном разделе по математике "VIII Appendix: Mathematical Background" книги "Introduction to Algorithms" 3d edition by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein.

В качестве минималистичного ликбеза по теоретическим основам может неплохо подойти книга:

  • "Computer Science Distilled" by Wladston Ferreira Filho

Она содержит минималистичные основы математики (логика, комбинаторика, вероятность), алгоритмы и структуры данных, основы Баз Данных (RDBMS, NoSQL), описание Парадигм Программирования и основы архитектуры железа.

Изучаем математику

Существует монументальная книга, которую стоит упомянуть отдельно (обратите внимание на фамилии авторов, которые в представлении не нуждаются). Чтобы не тормозить общий процесс обучения, ее лучше читать в параллельно-фоновом режиме. К тому же математические знания следует всегда поддерживать в актуальном состоянии, и регулярно освежать их в голове в фоновом режиме.

  • "Concrete Mathematics: A Foundation for Computer Science" 2nd edition by Ronald L. Graham, Donald E. Knuth, Oren Patashnik

Эта книга дает прекрасную математическую базу для функционального программирования. И хорошо заходит в сочетании с "The Art Of Computer Programming" Volume 1 3d edition by Donald Knuth, поскольку у них многие темы пересекаются и раскрываются с разных точек зрения, что дает полноту понимания. Справочник математических нотаций в конце книги нередко оказывается полезным.

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

  1. Первый раз просто прочитай, оставив попытки что-то понять, - нужно просто получить обзорность материала.

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

  3. И третий раз прочитай уже вникая полностью.

Учимся архитектуре

Теперь можно приступить и к архитектуре:

  • "Clean Architecture: A Craftsman's Guide to Software Structure and Design" by Robert C. Martin

Изучаем распределенные системы

Изучаем распределенные системы. Углубляем навыки.

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

К этой книге существует эталонное приложение, которое наглядно демонстрирует практическое применение изложенной в книге информации:

Еще одно хорошее краткое руководство от Microsoft:

И можно сюда включить еще и книгу:

  • "CQRS Journey" by Dominic Betts, Julián Domínguez, Grigori Melnik, Fernando Simonazzi, Mani Subramanian

К ней также существует демонстрационное приложение:

Оригинальная статья "SAGAS" by Garcia-Molina, Kenneth Salem (копия).

Изучаем DDD

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

Или с более новой книги этого же автора:

  • "Learning Domain-Driven Design: Aligning Software Architecture and Business Strategy" 1st Edition by Vlad Khononov

Затем приступить к классике:

Существуют краткие изложения этих двух книг по DDD.

Краткие изложения "Domain-Driven Design" by Eric Evans:

Краткое изложение "Implementing Domain-Driven Design" by Vaughn Vernon:

Статьи на частые вопросы по DDD

Aggregate & Domain Modeling
CQRS & Event Sourcing
Bounded Context and Microservices

Tools:

Domain Events
API-Design
Event Storming

By Alberto Brandolini (twitter):

Others:

Tools:

Modelling

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

Дополнительная литература (на выбор)

SDLC

Single-Team Agile

  • "Extreme Programming Explained" 2nd edition by Kent Beck

  • "Planning Extreme Programming" by Kent Beck, Martin Fowler

  • "More Effective Agile: A Roadmap for Software Leaders" by Steve McConnell

  • "Clean Agile: Back to Basics" by Robert C. Martin

  • "Agile! The Good, the Hype and the Ugly" by Bertrand Meyer

  • "Scrum and XP from the Trenches: How We Do Scrum" 2nd edition by Henrik Kniberg

  • "Essential Scrum: A Practical Guide to the Most Popular Agile Process" by Kenneth Rubin

  • "Succeeding with Agile: Software Development Using Scrum" by Mike Cohn

  • "User Stories Applied: For Agile Software Development" by Mike Cohn

  • "Jeff Sutherland's Scrum Handbook" by Jeff Sutherland

Scaled Agile

Стандарты

  • "ISO/IEC/IEEE 12207:2017 Systems and software engineering — Software life cycle processes"

  • "ISO/IEC/IEEE 15288:2015 Systems and software engineering — System life cycle processes"

  • "ISO/IEC/IEEE 29148:2018 Systems and software engineering — Life cycle processes — Requirements engineering"

  • "ISO/IEC/IEEE 15289:2019 Systems and software engineering — Content of life-cycle information items (documentation)"

  • "ISO/IEC/IEEE 24765:2017 Systems and software engineering — Vocabulary"

  • "ISO 9000:2005 Quality management systems — Fundamentals and vocabulary"

  • "ISO/IEC 33001:2015 Information technology — Process assessment — Concepts and terminology"

  • "ГОСТ Р ИСО/МЭК 12207-2010 Информационная технология. Системная и программная инженерия. Процессы жизненного цикла программных средств."

  • "ГОСТ Р 57193-2016 Системная и программная инженерия. Процессы жизненного цикла систем."

Менеджмент

  • "The Mythical Man-Month Essays on Software Engineering Anniversary Edition" by Frederick P. Brooks, Jr.

  • "Systems Thinking" by Craig Larman (перевод на Русский)

  • "Art of Project Management" by Scott Berkun

  • "Менеджмент: Учебник для вузов." 3-е изд. Глухов В. В.

  • "Оргуправленческое мышление. Идеология, методология, технология" / Щедровицкий Георгий Петрович

  • "The Leadership Experience" 7th edition by Richard L. Daft

  • "Management" 013 edition by Richard L. Daft

  • "Managing Digital Concepts and Practices"

Развитие личностных профессиональных качеств

  • "The Pragmatic Programmer: From Journeyman to Master" 1st edition by David Thomas, Andrew Hunt

  • "The Pragmatic Programmer: your journey to mastery, 20th Anniversary Edition" 2nd edition by David Thomas, Andrew Hunt

  • "A Mind for Numbers: How to Excel at Math and Science" by Barbara Ann Oakley

  • "Systems Thinking. Quality Software Management. New York: Dorset House." by Gerald M. Weinberg, 1992, ISBN: 0932633226

  • "An Introduction to General Systems Thinking" by Gerald M. Weinberg

  • "Becoming a Technical Leader" by Gerald M. Weinberg

  • "Harvard Business Review on Decision Making" by Harvard Business School Press

  • "The Software Architect Elevator: Redefining the Architect's Role in the Digital Enterprise 1st Edition" by Gregor Hohpe

  • "Fundamentals of Software Architecture: An Engineering Approach" 1st edition by Mark Richards, Neal Ford

  • "Software Architecture: The Hard Parts: Modern Trade-Off Analyses for Distributed Architectures" 1st Edition by Neal Ford, Mark Richards, Pramod Sadalage, Zhamak Dehghani

  • "The Book: 37 Things One Architect Knows About IT Transformation" by Gregor Hohpe

  • "Eat or Be Eaten!: Jungle Warfare for the Corporate Master Politician" by Phil Porter

  • "Presentation patterns: techniques for crafting better presentations" by Neal Ford, Matthew McCullough, Nathaniel Schutta

  • "Technology Strategy Patterns: Architecture as Strategy" 1st edition by Eben Hewitt

  • "Thinking in Systems: A Primer" by Donella H. Meadows, Diana Wright

  • "Social psychology" 13th edition by David G. Myers. Перевод: "Социальная психология" / Майерс Д. Пер. с англ. З. Замчук; Зав. ред. кол. Л. Винокуров. — 7-е изд. — СПб.: Питер, 2006.

  • "Never split the difference: negotiating as if life depended on it" by Chris Voss. Перевод: "Договориться не проблема. Как добиваться своего без конфликтов и ненужных уступок." / Крис Восс

  • "Искусство спора. О теории и практике спора." / Поварнин С.И.

  • "Эристика, или Искусство побеждать в спорах" / Шопенгауэр Артур. English: "The Art of Being Right: 38 Ways to Win an Argument" by Arthur Schopenhauer

  • "Как читать книги" / Поварнин С.И.

  • "Искусство спора (обучающие материалы)"

  • "Книги по риторике"

Простой и доходчивый видеокурс по SoftSkills:

Базы данных

  • "Mastering PostgreSQL In Application Development" by Dimitri Fontaine

  • "The Art of PostgreSQL" 2nd edition by Dimitri Fontaine - is the new title of "Mastering PostgreSQL in Application Development"

  • "SQL Antipatterns. Avoiding the Pitfalls of Database Programming." by Bill Karwin

  • "Refactoring Databases. Evolutionary Database Design" by Scott J Ambler and Pramod J. Sadalage

  • "An Introduction to Database Systems" by C.J. Date

  • "PostgreSQL 10 High Performance" by Ibrar Ahmed, Gregory Smith, Enrico Pirozzi

PostgresPro представил четыре книги для разных уровней подготовленности читателей, от совершенно неосведомленного человека до разработчика баз данных. Книги дают комплексные знания в лаконичной форме. Все книги доступны для скачивания в свободном доступе:

  1. "Postgres: первое знакомство" / П.В. Лузанов, Е.В. Рогов, И.В. Лёвшин

  2. "PostgreSQL изнутри" / Е.В. Рогов — М.: ДМК Пресс, 2022. — 660 с.

  3. "PostgreSQL. Основы языка SQL: учеб. пособие" / Е.П. Моргунов; под ред. Е.В. Рогова, П.В. Лузанова.

  4. "Основы технологий баз данных: учеб. пособие" / Б.А. Новиков, Е.А. Горшкова, Н.Г. Графеева; под ред. Е.В. Рогова.

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

Видеозаписи курсов.

Превосходная подборка статей с фундаментальной информацией простым языком о внутреннем устройстве PostgreSQL, от разработчиков PostgresPro:

Шпаргалка по выбору типа хранилища данных:

Jepsen's analysis over two dozen databases, coordination services, and queues—and we've found replica divergence, data loss, stale reads, read skew, lock conflicts, and much more:

Рейтинг хранилищ данных:

Изучаем распределенные системы. Третий заход.

API-Design

  • "REST in Practice: Hypermedia and Systems Architecture" by Savas Parastatidis, Jim Webber, Ian Robinson

  • "RESTful Web APIs: Services for a Changing World" by Leonard Richardson, Sam Ruby, Mike Amundsen

  • "Web API Design Crafting Interfaces that Developers Love" by Brian Mulloy

  • "REST API Design Rulebook" by Mark Massé

  • "Principles of Web API Design: Delivering Value with APIs and Microservices" by James Higginbotham

  • "Continuous API Management" 2nd edition by Mehdi Medjaoui, Erik Wilde, Ronnie Mitra, Mike Amundsen

Streaming Processing

  • "Streaming Data: Understanding the real-time pipeline" 1st edition by Andrew Psaltis

  • "Big Data: Principles and best practices of scalable realtime data systems" 1st edition by Nathan Marz, James Warren

  • "Kafka Streams in Action: Real-time apps and microservices with the Kafka Streams API" 1st edition by Bill Bejeck

  • "The Enterprise Big Data Lake: Delivering the Promise of Big Data and Data Science" 1st edition by Alex Gorelik

Углубляем DDD

  • "Reactive Messaging Patterns with the Actor Model: Applications and Integration in Scala and Akka" by Vaughn Vernon

  • "Patterns, Principles, and Practices of Domain-Driven Design" by Scott Millett, Nick Tune

  • "Hands-On Domain-Driven Design with .NET Core: Tackling complexity in the heart of software by putting DDD principles into practice" by Alexey Zimarev

  • "Balancing Coupling in Software Design: Successful Software Architecture in General and Distributed Systems" by Vladislav Khononov

  • "The Addison-Wesley Signature Series: Vaughn Vernon"

  • "Event Sourced Building Blocks for Domain-Driven Design with Python" by John Bywater

Изучаем проектирование

  • "Agile Software Development. Principles, Patterns, and Practices." by Robert C. Martin, James W. Newkirk, Robert S. Koss

  • "Analysis Patterns. Reusable Object Models" by Martin Fowler

  • "Implementation Patterns" by Kent Beck

  • "Smalltalk Best Practice Patterns" by Kent Beck

  • "Development of Further Patterns of Enterprise Application Architecture" by Martin Fowler

  • "Domain Specific Languages" by Martin Fowler (with Rebecca Parsons)

  • "Pattern Hatching: Design Patterns Applied" by John Vlissides

  • "Microsoft Application Architecture Guide" 2nd edition (Patterns & Practices) by Microsoft Corporation (J.D. Meier, David Hill, Alex Homer, Jason Taylor, Prashant Bansode, Lonnie Wall, Rob Boucher Jr., Akshay Bogawat)

  • "Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development" by Craig Larman

  • "Object-Oriented Software Construction" 2nd edition by Bertrand Meyer

  • "Working Effectively with Legacy Code" by Michael C. Feathers

  • "Refactoring To Patterns" by Joshua Kerievsky

  • "Structure and Interpretation of Computer Programs" (aka SICP) 2nd edition (MIT Electrical Engineering and Computer Science) by Harold Abelson, Gerald Jay Sussman, Julie Sussman

  • "How to Design Programs, second edition: An Introduction to Programming and Computing" 2d edition by Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi

  • "Object Oriented Software Engineering: A Use Case Driven Approach" by Ivar Jacobson

  • "Object-Oriented Analysis and Design with Applications" 3rd edition by Grady Booch, Robert A. Maksimchuk, Michael W. Engle, Bobbi J. Young Ph.D., Jim Conallen, Kelli A. Houston

POSA

  • "Pattern-Oriented Software Architecture: A System of Patterns, Volume 1" by Frank Buschmann, Regine Meunier, Hans Rohnert, Peter Sommerlad, Michael Stal

  • "Pattern-Oriented Software Architecture: Patterns for Concurrent and Networked Objects, Volume 2" by Douglas C. Schmidt, Michael Stal, Hans Rohnert, Frank Buschmann

  • "Pattern-Oriented Software Architecture: Patterns for Resource Management, Volume 3" by Michael Kircher, Prashant Jain

  • "Pattern-Oriented Software Architecture: A Pattern Language for Distributed Computing, Volume 4" by Frank Buschmann, Kevin Henney, Douglas C. Schmidt

  • "Pattern-Oriented Software Architecture: On Patterns and Pattern Languages, Volume 5" by Frank Buschmann, Kevin Henney, Douglas C. Schmidt

Алгоритмы. Второй заход.

  • "Introduction to Algorithms" 3d edition by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein

  • "Algorithms and Data Structures" (Oberon version: August 2004) by N.Wirth

Donald E. Knuth:

  • "The Art of Computer Programming, Volume 1: Fundamental Algorithms" 3d edition by Donald Knuth

  • "The Art of Computer Programming, Volume 1, Fascicle 1: MMIX; A RISC Computer for the New Millennium" 1st edition by Donald Knuth

  • "The Art of Computer Programming, Volume 2, Seminumerical Algorithms" 3rd edition by Donald E. Knuth

  • "The Art of Computer Programming, Volume 3, Sorting and Searching" 2nd edition by Donald E. Knuth

  • "The Art of Computer Programming, Volume 4, Fascicle 0: Introduction to Combinatorial Algorithms and Boolean Functions" 1st edition by Donald E. Knuth

  • "The Art of Computer Programming, Volume 4, Fascicle 1: Bitwise Tricks & Techniques; Binary Decision Diagrams" 1st edition by Donald E. Knuth

  • "The Art of Computer Programming, Volume 4, Fascicle 2: Generating All Tuples and Permutations" 1st edition by Donald E. Knuth

  • "The Art of Computer Programming, Volume 4, Fascicle 3: Generating All Combinations and Partitions Paperback" 1st edition by Donald E. Knuth

  • "Art of Computer Programming, Volume 4, Fascicle 4: Generating All Trees; History of Combinatorial Generation 1st edition by Donald E. Knuth

  • "The Art of Computer Programming" Volume 4, Fascicle 5: Mathematical Preliminaries Redux; Introduction to Backtracking; Dancing Links" 1st edition by Donald E. Knuth

  • "The Art of Computer Programming, Volume 4, Fascicle 6: Satisfiability" 1st edition by Donald E. Knuth

  • "The Art of Computer Programming, Volume 4A, Combinatorial Algorithms, Part 1" 1st edition by Donald E. Knuth

Хорошая подборка книг по алгоритмам: http://e-maxx.ru/bookz/

Тестирование

  • "xUnit Test Patterns. Refactoring Test Code." by Gerard Meszaros

  • "Unit Testing Principles, Practices, and Patterns: Effective testing styles, patterns, and reliable automation for unit testing, mocking, and integration testing with examples in C#" 1st Edition by Vladimir Khorikov

  • "Growing Object-Oriented Software, Guided by Tests" by Steve Freeman, Nat Pryce

  • "Agile Testing: A Practical Guide for Testers and Agile Teams" by Lisa Crispin, Janet Gregory

  • "More Agile Testing: Learning Journeys for the Whole Team" by Lisa Crispin, Janet Gregory

  • "ATDD by Example: A Practical Guide to Acceptance Test-Driven Development" by Markus Gärtner

  • "Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation" by Jez Humble, David Farley

  • "Continuous Integration: Improving Software Quality and Reducing Risk" by Paul M. Duvall, Steve Matyas, Andrew Glover

  • "ISTQB® Related Books"

  • "Referenced Books in ISTQB® Syllabi"

Компиляторы

  • "Crafting Interpreters <https://craftinginterpreters.com/>" by Robert Nystrom

  • "Compiler Construction" by N.Wirth

  • "Compilers: Principles, Techniques, and Tools" 2nd edition by Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman

Архитектура

  • "Software Architecture in Practice" 4th edition by Len Bass, Paul Clements, Rick Kazman

  • "Documenting Software Architectures: Views and Beyond" 2nd edition by Paul Clements, Felix Bachmann, Len Bass, David Garlan, James Ivers, Reed Little, Paulo Merson, Robert Nord, Judith Stafford

  • "Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives" 2nd edition by Nick Rozanski, Eóin Woods

  • "Designing Software Architectures: A Practical Approach (SEI Series in Software Engineering)" 1st edition by Humberto Cervantes, Rick Kazman

  • "Fundamentals of Software Architecture: An Engineering Approach" 1st edition by Mark Richards, Neal Ford

  • "Introduction to Solution Architecture Paperback" by Alan McSweeney

  • "Systems Analysis and Design" 7th edition by Alan Dennis, Barbara Haley Wixom, Roberta M. Roth

  • "The Design of Design: Essays from a Computer Scientist" by Frederick P. Brooks

  • "Living Documentation: Continuous Knowledge Sharing by Design" by Cyrille Martraire

  • "Just Enough Software Architecture: A Risk-Driven Approach" by George H. Fairbanks

  • "The Book: 37 Things One Architect Knows About IT Transformation" by Gregor Hohpe

  • "The Software Architect Elevator: Redefining the Architect's Role in the Digital Enterprise 1st Edition" by Gregor Hohpe

  • "Cloud Strategy: A Decision-based Approach to Successful Cloud Migration" by Gregor Hohpe, Michele Danieli, Jean-Francois Landreau, Tahir Hashmi

  • "Architecting for Scale" 2nd Edition by Lee Atchison

  • "Software Engineering: A Practitioner's Approach" 9th edition by Roger S. Pressman, Bruce Maxim

  • "Presentation patterns: techniques for crafting better presentations" by Neal Ford, Matthew McCullough, Nathaniel Schutta

  • "Team Topologies: Organizing Business and Technology Teams for Fast Flow" by Matthew Skelton, Manuel Pais

  • "Technology Strategy Patterns: Architecture as Strategy" 1st edition by Eben Hewitt

Архитектура в Agile:

Стандарты:

Рейтинг инструментов для упраления требованиями/архитектурой/SDLC/etc. от Gartner по категориям: "Reviews Organized by Markets".

Аналитика

Аналитика в Agile:

Другие подборки литературы по аналитике:

Смотрите также список инструментов для управления требованиями:

Изучаем оценивание задач

Очень кратко (всего 3 страницы) о методике оценивания PERT:

  • "The Clean Coder" by Robert C. Martin, "Chapter 10 Estimation :: PERT"

Статья, отвечающая на очень частый вопрос:

Оценка - это не единичное значение, а вероятностная распределённость:

Функциональное программирование

Для Golang-разработчиков:

  • "Learning Functional Programming in Go: Change the way you approach your applications using functional programming in Go" by Lex Sheehan

Справочники

  • "Computing Handbook. Computer Science and Software Engineering." 3d edition by Allen Tucker, Teofilo Gonzalez, Jorge Diaz-Herrera

Справочная информация

Body of Knowledge

ГОСТы

Online-каталоги

Code Smell catalogs

  • Chapter 17: "Smells and Heuristics" of the book "Clean Code: A Handbook of Agile Software Craftsmanship" by Robert C. Martin

  • Chapter 3. "Bad Smells in Code" of the book "Refactoring: Improving the Design of Existing Code" by Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts

  • Code Smell catalog on the site of Ward Cunningham

  • "Refactoring To Patterns" by Joshua Kerievsky

Другие подборки литературы

Почтовые рассылки и сообщества

Эталонные демонстрационные приложения

"A perfect example of this [you can see] if you go look at the CQRS and Event Sourcing by Microsoft Patterns and Practices, which is heavily focused on doing this inside of Azure using their toolkits."

- Greg Young, "A Decade of DDD, CQRS, Event Sourcing" at 18:15

Варианты реализации OO/Functional Aggregates на примере Reference Applications by Chris Richardson:

Others: