01
Decor
Decor

Developer Roadmap

Roadmap предназначен для Full stack программистов (C# + js) компании SimpleCode, но также может быть полезен backend и frontend разработчикам, которые могут выбрать для изучения интересную им литературу. Roadmap носит рекомендательный характер. Главная цель - дать заинтересованному разработчику один из возможных путей, по которому стоит пройти для повышения квалификации.
Важно, что этот путь состоит не только из прочтения полезной литературы, но также включает получение необходимого опыта в работе над реальными проектами, прохождение курсов, сдачу экзаменов, получения сертификатов, опыт руководства младшими разработчиками, получение навыка написания технических статей и т.д.
console
public enum FoodTypeEnum { ... }
public enum
stage 1
Junior
Junior
Junior
Junior
Junior
Junior
Junior
Junior
Junior
Junior
Junior
Junior
1 год
Рекомендуемый срок изучения всех материалов
2 года
Рекомендуемый опыт работы для перехода на следующий уровень
Algorithms and Data Structures
Oberon version: August 2004

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

N. Wirth
Автор
Чек лист
  • Массивы, списки, деревья, кортежи, очереди, стэки
  • Виды поиска, их отличия по производительности
  • Виды сортировок, их отличия по производительности
C# 4.0: The Complete Reference (2010)

В книге подробно описываются языковые средства С#, даются профессиональные рекомендации и приводятся сотни примеров программ, охватывающих большинство аспектов программирования на С#.

Herbert Schildt
Автор
Чек лист
  • Коллекции, перечислители и итераторы
  • ООП, классы, наследование, перегрузки
  • Делегаты, события
  • Интерфейсы, структуры и перечисления
  • Рефлексия, аттрибуты
  • Обработка исключительных ситуаций
  • LINQ, лямбда-выражения
Programming Microsoft ASP.NET 4 - part III, chapters 13-15.

Книга старая, про работу с ASP.NET 4 читать только при необходимости. Часть 3 описывает базовые принципы проектирования веб приложений, идею multi-layer архитектуры, и типовые архитектуры для UI.

Dino Esposito
Автор
Чек лист
  • Понимать что такое coupling, cohesion, separation of concerns, information hiding
  • Знать принципы SOLID
  • Знать как выглядит multi-layer архитектура (UI, Business Logic, Data)
  • Знать что такое DTO
  • Знать основные паттерны для UI - MVC, MVP, MVVM
Решить все задачи taskbook

Задачник содержит все типовые базовые задачи, решать которые быстро и эффективно должен уметь любой профессиональный программист. Задачник используется для обучения студентов младших курсов мехмата ЮФУ.

Чек лист
  • Решить не менее 80% задач из каждого раздела задачника
stage 2
Middle
Middle
Middle
Middle
Middle
Middle
Middle
Middle
Middle
Middle
Middle
Middle
2 год
Рекомендуемый срок изучения всех материалов
2 года
Рекомендуемый опыт работы для перехода на следующий уровень
1 год
Рекомендуемый опыт работы с младшими программистами
Написать техническую статью о своём уникальном опыте работы с конкретной технологией, решения конкретной проблемы, потенциально полезную широкому (или узкому) кругу читателей.
CLR via C# 4th Edition

Книга подробно описывает внутреннее устройство и функционирование общеязыковой исполняющей среды (CLR) и архитектуру Microsoft .NET Framework.

Jeffrey Richter
Автор
Чек лист
  • проектирование типов:
    • основы типов, примитивные, ссылочные и значимые типы
    • методы, свойства, события, обобщения
    • интерфейсы
  • основные типы данных: строки, перечислимые типы, массивы, делегаты
  • ключевые механизмы: исключения, сборка мусора
  • многопоточность: потоки, асинхронные операции
Чистый код
(создание, анализ и рефакторинг)

Книга рассказывает, как писать код, который легко читать, поддерживать, тестировать.

Роберт Мартин
Автор
Чек лист
  • Boy Scout Rule
  • Stepdown Rule для организации кодов
  • Почему побочные эффекты усложняют понимание кода
  • Принцип CQS
  • Law of Demeter
  • Выразительность имен
  • Комментарии
  • Акроним FIRST для тестов
Приемы объектно-ориентированного проектирования.
Паттерны проектирования

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

3. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес
Авторы
Чек лист
  • сигнатура, интерфейс, динамическое связывание, композиция, наследование, делегирование, агрегирование, осведомленность
  • обратить внимание на миксины, в данной книге как основу приводят множественное наследование, тогда как в самых современных языках в основе лежит композиция
  • первое и второе правила объектно-ориентированного проектирования
  • отличие агрегирования и осведомленности, в сравнение с UML, где связь "осведомленность" называется "ассоциацией", а агрегирование зовется композицией, когда связанный объект не принимается извне, а создается внутри класса
  • нежеланные зависимости и связи
  • отличие приоритетов в проектировании приложений, библиотек, фреймворков
  • собственно паттерны: порождающие, структурные, поведенческие
  • уделить особенное внимание композиции и паттернам: абстрактная фабрика, посредник, стратегия, наблюдатель, мост, фасад - поскольку их применение в совокупности с архитектурными паттернами и приемами, предлагаемыми в последующих книгах, является фундаментом для построения по-настоящему надежных и модифицируемых OLTP систем, гибкость и интегрируемость которых наиболее востребована в наши дни, и с которыми нам приходится иметь дело чаще всего.
Погружение в паттерны проектирования

Книга обучает основным паттернам и способам их применения с краткими примерами кода.

Александр Швец
Автор
Чек лист
  • краткий экскурс по ООП
  • принципы SOLID
  • структурные, порождающие и поведенческие паттерны
The Art of Unit Testing: with examples in C# 2nd Edition.

Книга объясняет как писать хорошие юнит-тесты на .NET.

Roy Osherove
Автор
Чек лист
  • определение юнит-теста
  • свойства хороших юнит-тестов
  • разница между юнит-тестами и интеграционными тестами
  • виды тестов: value-based, state-based, interaction-based
  • понятия fake, stub, mock object
  • техника Extract and Override
  • какие есть isolation frameworks для .NET - понимать в чем разница между constrained и unconstrained, какой лучше выбрать под конкретный проект и почему
  • что такое overspecification, почему это плохо
  • знать как тестировать cross-cutting concerns
  • как писать простые и надежные тесты - ловят баги и дают понятные ошибки
  • как писать тесты, которые легко читать, понимать и поддерживать
  • с чего начать внедрение тестов в старый проект
Пройти обучение и сдать любой технический экзамен
stage 3
Senior
Senior
Senior
Senior
Senior
Senior
Senior
Senior
Senior
Senior
Senior
Senior
2 год
Рекомендуемый срок изучения всех материалов
3 года
Рекомендуемый опыт работы для перехода на следующий уровень
2 года
Рекомендуемый опыт работы с младшими программистами
Написать 2-3 технические статьи о своём уникальном опыте работы с конкретной технологией, решения конкретной проблемы, потенциально полезные широкому (или узкому) кругу читателей.
Совершенный Код

Книга обучает эффективным подходам к программированию в рамках полного цикла создания ПО. Основной тезис книги – программу нужно писать так, чтобы другие разработчики могли легко в ней разобраться. Отличительная особенность книги – внимание к мелочам. Например, как назвать переменную или в каком месте поместить комментарий. Также автор объясняет в чем разница между программированием на языке и программированием с использованием языка.

Стоит отметить, что все представленные в книге методики не зависят от языка программирования. Книга будет полезна как начинающему, так и опытному разработчику.

Макконнелл С
Автор
Чек лист
  • управление сложностью
  • программирование с использованием языка
  • методики проектирования
  • разработка качественных классов и методов
  • работа с переменными
  • принципы именования
  • операторы: условные операторы, циклы, управляющие структуры
  • табличные методы
  • логические выражения
  • характеристики качества ПО
  • методики повышения качества ПО
  • совместная разработка
  • тестирование
  • отладка
  • рефакторинг
  • методики оптимизации кода
  • форматирование
  • методики комментирования
Эффективная работа с унаследованным кодом

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

Физерс М.К.
Автор
Чек лист
  • Виды изменений в ПО (добавление фич, исправление, рефакторинг, оптимизация)
  • Шов для тестирования (seam)
  • Как тестировать класс со сложными или скрытыми зависимостями
  • Практика изменения кодов небольшими шагами (single-goal editing)
Рефакторинг. Улучшение существующего кода.

Книга похожа на ТЗ для разработчиков таких продуктов как Resharper или Roslynator. Представляет очевидный набор возможных операций над кем-то когда-то уже написанным кодом. Как бы бесполезно это не звучало, книга дает две неоспоримых причины для прочтения: узнать для каких целей не стоит напрягать пальцы и тратить время на печатание кода заново (используя вместо этого современный инструмент) и дать этим очевидным операциям единые названия, которые будут передаваться из поколения в поколение.

Мартин Фаулер
Автор
Чек лист
  • цель рефакторинга
  • за рефакторинг не платят, правило трех ударов
  • понимание, что главное - не копипастить код - DRY, и что вариативность его использования должна организовываться благодаря декомпозиции классов
  • понимание, что теоретическая общность теперь зовется - YAGNI
  • понимание, что комментирование невнятных кусков кода следует заменять декомпозицией его методов
  • польза замены элементарных типов классами для передачи между объектами (начиная с DDD этому дается термин Value Object)
  • вред switch, общеизвестные паттерны для борьбы с ним
  • польза утверждений (assertion-ов) для изучения кода, правда мало уделено внимания тому, что их не стоит отключать при компиляции для выпуска - в наше время это бессмысленно
  • вред классов данных (начиная с DDD этому дается термин Anemic Model), правда стоит отметить, что современные ORM просто требуют этого, заставляя на первый взгляд жертвовать энкапсуляцией, тогда как в действительности это входит в задачи проектирования приложения, чтобы корректно делегировать задачу хранения данных, сформировав прослойку граничных интерфейсов для хранимых состояний и агрегировав их в соответствующие объекты бизнес логики, соблюдающих энкапсуляцию и организующих связи между собой
  • польза тестирования, правда там не говорится про накладные расходы и бесполезность тестов при необходимости их изменения, особенно при рефакторинге изначально неорганизованного, но протестированного кода
  • базовая технология рефакторинга
  • знание на что способны инструменты, автоматизирующие рефакторинг
  • рассуждения на тему почему разработчики не хотят применять рефакторинг, где стоит отметить только факт, что разработчик становится замотивирован в проектировании и рефакторинге не ранее, чем неоднократно испытает жалобы о нескончаемых багах и срывах сроков и убедится, что подход "напишу как получится" не работает и наносит вред всей команде
Предметно-ориентированное проектирование.
Структуризация сложных программных систем.

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

Eric Evans
Автор
Чек лист
  • сущность, объект-значение
  • идентичность сущностей, обременительность ассоциаций, агрегаты и границы его знаний, корневой объект агрегата
  • объектный анализ и углубление моделей
  • мотивация информативного именования типов
  • необходимость утверждений в объектах-сущностях
  • замкнутость операций в объектах-значениях
  • понимание отличий между единым языком предметной области (ubiquitous language) и предметно-ориентированным языком (domain-specific language, DSL)
  • с трудом применяемые на практике паттерны для выполнения транзакций: фабрика, хранилище, спецификация - почему рекомендуется реализация только операции И для комбинирования спецификаций в большинстве случаев
  • множество примеров построения моделей предметной области с применением множества уже известных паттернов GoF
  • ограниченный контекст (по-современному - фича). рекомендации по определению границ, взаимодействие между собой и с внешними системами
  • устаревающая концепция сервисов для взаимодействия между ограниченными контекстами (речь о технологиях сродни WCF, которые вытесняются "субъектно-ориентированным программированием" SUP и "сервисной шиной предприятия" ESB)
  • дистилляция смыслового ядра, неспециализированные подобласти (внешние зависимости), подключаемые компоненты, общее ядро (сквозная функциональность, зачастую мост), шаблоны документирования
  • смысловое ядро (по-современному монолит), выделенное ядро (по-современному микросервис), выделение абстрактного ядра для организации связей между ними (например через NuGet)
  • цена создания выделенного ядра, когда к этому стоит прибегать, отличие от выделения неспециализированных подобластей
  • карта контекстов ядра, введение и поддержка крупномасштабной структуры ядра,
  • уровень поддержки принятия решений (data warehouses, OLAP), положение относительно остальных уровней ответственности (которые в свою очередь относятся к OLTP)
  • понимание, что использование рефлексии языка программирования не должно осуществляться на уровне знаний (модули, которые мы и привыкли называть модельными)
Пройти обучение и сдать 2 любых технических экзамена