После наведения порядка с книгами пришло время выделить все статьи в отдельную заметку и сделать такую себе карту блога.
Ниже приведены наиболее значимые и интересные статьи, разбитые по разным тематикам, типа “Проектирования по контракту” или “C# Tips and Tricks”. При этом статьи представлены в порядке, наиболее удобном для изучения соответствующей темы, а не в хронологическом порядке. Наиболее значимые статьи, с моей точки зрения, выделены жирным.
Содержание
- Проектирование по контракту
- Принципы и паттерны проектирования
- Управление зависимостями
- Дизайн (разное)
- Юнит тестирование
- C# Tips and Tricks
- Устройство итераторов
- Асинхронное программирование
- Многопоточное программирование от Джо Албахари
- Исключения
- Сборка мусора/управление ресурсами
- Инструменты
- Разное
Дизайн и проектирование
Несмотря на любовь к языкам программирования навык проектирования я считаю несколько более важным навыком разработчика, поэтому именно с этой рубрики я бы хотел начать список статей.
Проектирование по контракту
Небольшой цикл статей о проектировании по контракту. Примеры приводятся для платформы .NET с использованию Code Contracts, понимание принципа проектирования по контракту будет полезным даже без использования инструментов.
- Проектирование по контракту. Корректность ПО (07/05/2010)
- Проектирование по контракту. Утверждения (11/05/2010)
- Утверждения и защитное программирование (14/05/2010)
- Проектирование по контракту. Наследование (17/05/2010)
- Мониторинг утверждений в период выполнения (20/05/2010)
Другие статьи по контрактному программированию.
- Контракты, состояние и юнит-тесты (09/03/2013). Небольшое практическое сравнение подходов к проектированию на основе критики кода из книги Боба Мартина “Принципы, паттерны и методики гибкой разработки”.
- Контракты vs. Юнит тесты (28/06/2012). Часто задают вопрос о том, нужно ли тестировать контракты и нужны ли они вообще при наличии юнит-тестов.
- Наследование интерфейсов и контракты (05/03/2012)
- Принцип замещения Лисков и контракты (28/02/2012).
- Принцип самурая (13/09/2011).
- Как не надо писать код (11/04/2011). Пример использования контрактного программирования при анализе реального кода.
- Альтернативная проверка предусловий в Code Contracts (12/03/2012)
Принципы и паттерны проектирования
В этом разделе собраны статьи, которые легли в основу моей книги “Паттерны проектирования в .NET”, которая должна уже выйти в ближайшее время.
Принципы проектирования
- Single Responsibility Principle (13/08/2014)
- Open/Closed Principle (26/08/2014)
- Open/Closed Princple. ФП vs. ООП (2/09/2014)
- Liskov Substitution Principle (9/09/2014)
- Interface Segregation Principle (14/08/2014)
- The Dependency Inversion Principle (25/09/2014)
- Шпаргалка по SOLID принципам (9/10/2014). Заключительная статья серии постов о принципах проектирования. В ней кратко рассматривается каждый принцип, а в конце приводится список anti-принципов.
- DI vs. DIP vs. IoC (27/11/2014). Рассматривается разница между тремя схожими, на первый взгляд, понятиями, но смысл которых очень сильно отличается друг от друга.
Паттерны проектирования
- GoF-паттерны на платформе .NET (21/02/2014). Вводная статья, в которой рассматриваются причины, побудившие меня рассматривать столь заезженную тему, как паттерны проектирования.
- Паттерн Стратегия (26/02/2014)
- Паттерн Шаблонный Метод (4/03/2014)
- RAII в C#. Локальный метод шаблона (12/03/2014)
- Паттерн Посредник (20/03/2014)
Управление зависимостями
Цикл статей об управлению зависимостями, но не столько в контексте инверсии управления (IoC), сколько с точки зрения дизайна.
- Управление зависимостями (21/11/2012)
- Фреймворки, библиотеки и зависимости (26/10/2012)
- Аксиома управления зависимостями (28/02/2013)
- Наследование vs. Композиция vs. Агрегация (03/12/2012)
- Критический взгляд на принцип инверсии зависимостей (09/04/2013)
- Инверсия зависимости на практике (23/01/2013)
- Тестируемый дизайн vs. Хороший дизайн (26/04/2013). Сейчас очень часто смешивают понятия тестируемости и хорошего дизайна. Да, хороший дизайн является тестируемым, но обратное утверждение – не верно.
- Пример тестируемого дизайна (13/05/2013). Очень часто спрашивают, как добиться тестируемого дизайна без выделения интерфейсов, в статье рассматривается пример такого дизайна.
- DI Паттерны. Construction Injection (17/12/2012)
- DI Паттерны. Property Injection (14/01/2013)
- DI Паттерны. Method Injection (12/02/2013)
- DI Паттерны. Service Locator (25/03/2013)
Дизайн (Core)
Раздел с философскими статьями о дизайне, борьбе со сложностью, тестируемости и подобными темами.
- Ключевые концепции DDD (4/02/2014). Статья-рецензия знаменитой книги Эрика Эванса, в которой рассматриваются базовые понятия DDD.
- Критерии плохого дизайна (29/01/2013). Почему дизайн большинства систем скатывается в непонятно что, какие характеристики дизайна являются ключевыми?
- Тестируемый дизайн vs. Хороший дизайн (26/04/2013). Сейчас очень часто смешивают понятия тестируемости и хорошего дизайна. Да, хороший дизайн является тестируемым, но обратное утверждение – не верно.
- Пример тестируемого дизайна (13/05/2013). Очень часто спрашивают, как добиться тестируемого дизайна без выделения интерфейсов, в статье рассматривается пример такого дизайна.
- Дизайн и борьба со сложностью (27/04/2013)
- О дизайне (16/07/2012)
- О дизайне. Часть 2. Практические примеры (28/07/2012)
- Идеальная архитектура (23/11/2011)
Юнит тестирование
Кто-то относит юнит тестирование к методикам разработки, кто-то к практикам кодирования, я же отношу эту практику прежде всего к дизайну. Для меня тесты – это прежде всего мерило хорошего дизайна, а уже потом, все остальное; именно поэтому статьи о юнит тестировании находятся в разделе о дизайне.
- Об автоматизированном тестировании (10/04/2014). Базовая статья о ключевых аспектах юнит-тестирования.
- Модульный тест: определение (13/05/2014). Перевод одноименной статьи Мартина Фаулера.
- Что значат для вас юнит-тесты (05/04/2012). У всех разное представление о том, для чего нужны юнит тесты. В этой статье я рассказываю о своем видении важности и нужности юнит тестирования.
- Пример тестируемого дизайна (13/05/2013)
- Как тестировать закрытые методы (08/05/2013)
- Параметризованные юнит-тесты (28/08/2012). Я не знаю почему все игнорируют столь полезный инструмент, как параметризованные юнит-тесты, которые позволяют увеличить покрытие и уменьшить сложность тестов. В этой статье я стараюсь восстановить эту несправедливость.
- Moq. Примеры использования (03/09/2012)
- Microsoft Moles (13/12/2010)
- Стабы и моки (19/12/2011)
- Пять принципов чистых тестов (F.I.R.S.T. Principles) (3/06/2010)
Философия программирования
Иногда интересно подумать не о дизайне, архитектуре или языке программирования, а о чем-то более общем, о чем-то связанном с общими принципами и практиками разработки… В общем, иногда хочется пофилософствовать и этот раздел именно об этом.
Философия программирования (разное)
- Как проводить технические собеседования (26/06/2014)
- Контракты vs. Монады? (30/06/2014)
- Для чего нужны интерфейсы (14/12/2014)
- Интервью с Бертраном Мейером (19/05/2014)
- Кому нужен архитектор (11/11/2013).
- Увлеченный программист (17/10/2013). Заходите сюда, как понадобится поднять свою мотивацию.
- Культ карго в программировании (24/09/2013). Удивительно, но значительно чаще инструментами пользуются неправильно, чем правильно. В чем причина этого и как с ней бороться?
- О комментариях (20/05/2013)
- О комментариях. Часть 2 (27/05/2013)
- О повторном использовании кода (19/04/2012). Считается, что ООП практически забесплатно дает возможность повторного использования кода, но любой человек с годом опыта знает, что это не так. В статье рассматриваются прагматичные подходы для увеличения повторного использования кода.
- Повторное использование знаний (13/02/2012). Сегодня практически невозможно угнаться за развитием технологий, стараясь каждый раз изучать каждую из них с нуля. Единственный выход, сосредотачиваться на важных вещах и стараться использовать повторно накопленные знания.
- Лучшая метрика для определения качества кода (05/06/2012)
- Кто такой хороший программист (29/11/2011)
- Идеальная архитектура (23/11/2011)
- 18 фактов о Джоне Ските (30/01/2012)
- Шаблоны проектирования. История успеха (14/01/2010) (RSDN Mag)
Паттерны поведения
Цикл статей о том, какие типовые “баги” в поведении людей можно встретить в нашей с вами работе.
- Технический долг (18/05/2011)
- Синдром рефакторинга (26/05/2011)
- Эффект второй системы (13/06/2011)
- Паттерны поведения (29/06/2011)
C#/.NET
C# Tips and Tricks
В этом разделе собраны статьи, описывающие не вполне очевидное поведение языка C# или CLR, или же статьи с описанием внутреннего устройства той или иной языковой конструкции.
Замыкания
- Замыкания в языке программирования C# (10/04/2010)
- Замыкание на переменных цикла в C# 5.0 (02/04/2012)
Статические конструкторы
- О взаимоблокировках в статических конструкторах (28/06/2013)
- О времени вызова статических конструкторов (10/07/2013)
- О синглтонах и статических конструкторах (01/08/2011)
Значимые типы (value types)
- О вреде изменяемых значимых типов (18/07/2011)
- О вреде изменяемых значимых типов. Часть 2 (24/12/2012)
- Структуры и конструкторы по умолчанию (19/09/2012)
Другое
- Закрытый конструктор базового класса (02/03/2015)
- Перегрузка и наследование (07/08/2012)
- О сборке мусора и достижимости объектов (27/08/2013)
- Duck typing или “так ли прост старина foreach” (01/08/2012)
- Инициализаторы объектов в блоке using (07/05/2012)
- this == null в языке C#? (28/02/2011)
- Виртуальные события в языке C# (21/02/2011)
- Распаковка (unboxing) и InvalidCastException (2/06/2010)
- О вреде метода Thread.Abort (17/01/2011)
Устройство итераторов
Небольшой цикл статей об устройстве итераторов в C#.
- Итераторы в языке C#. Часть 1 (11/06/2010)
- Итераторы в языке C#. Часть 2 (13/06/2010)
- Итераторы в языке C#. Часть 3 (16/06/2010)
Асинхронное программирование
- Асинхронные операции и AsyncEnumerator (24/10/2010)
- «Реактивные расширения» и асинхронные операции (25/11/2010) (RSDN Mag)
- Знакомство с асинхронными операциями в C# 5 (02/12/2010) (RSDN Mag)
Многопоточное программирование от Джо Албахари
Перевод статей Джозефа Албахари о многопоточном программировании в .NET.
- Джозеф Албахари. Работа с потоками в C#. Часть 3 (23/08/2010)
- Джозеф Албахари. Работа с потоками в C#. Часть 4 (26/08/2010)
- Джозеф Албахари. Часть 5.1. Параллельное программирование (03/09/2010) (RSDN Mag)
- Джозеф Албахари. Часть 5.2. Параллельное программирование (27/09/2010)
Исключения
- Повторная генерация исключений (03/11/2011)
- Гарантии безопасности исключений (15/08/2011)
- Принцип самурая (13/09/2011)
Сборка мусора/управление ресурсами
- О сборке мусора и достижимости объектов (27/08/2013)
- Слабые ссылки в .NET (19/08/2013)
- Немного о сборке мусора и поколениях (16/10/2012)
- Источники о сборке мусора в .NET (11/10/2012)
- Dispose Pattern (27/09/2011)
- О явном вызове метода Dispose (12/08/2013)
Инструменты
Разное
Статьи, которые сложно отнести к какой-либо другой категории: начиная от полу философских статей о WCF, заканчивая более прагматичными статьями об использовании конкретных инструментов, типа dynamic.
- Борьба с нулевыми ссылками в C# (02/06/2014)
- Что такое WCF? (24/02/2011)
- WCF и архитектура приложений (14/11/2013)
- Форвардинг типов в .NET (29/10/2013)
- Аргументы по умолчанию в C# (24/06/2013)
- О пользовательских преобразованиях типов (13/06/2013)
- 18 фактов о Джоне Ските (30/01/2012)
- Проблема передачи списка перечислений или Почему абстракции «текут» (26/10/2011)
- Кэширующий декоратор на деревьях выражений (24/09/2012) (RSDN Mag)
- DynamicXml: «динамическая» оболочка для работы с XML данными (10/05/2011) (RSDN Mag)
- Визуализация деревьев выражений с помощью TeX (21/03/2011) (RSDN Mag)
- Знакомство с Dynamic LINQ (27/12/2010) (RSDN Mag)
- Проблемы запуска .NET приложений под 64-битными ОС
Хорошо бы обновить.
ОтветитьУдалитьDone:)
УдалитьНачал сегодня читать твою книгу про Паттерны. Довольно хорошо изложенно, программистом для программистов :)
ОтветитьУдалитьПочему молчал о выпуске книги?
Спасибо! Я делал кучу анонсов в Г+, но в блог хотел написать уже о чем-то более вменяемом, типа опыта написания книги, а не просто об анонсе выхода. Но пока так и не написал об этом:((
УдалитьХорошо бы обновить, да
ОтветитьУдалить