Около полугода назад я начал учебный проект Дизайн программного обеспечения в Викиверситете (дочерний проект Википедии, о котором вы, вероятно, никогда не слышали). В нем я описываю приемы разработки программного обеспечения: небольшие советы по разработке программного обеспечения, такие как Сделайте if условие положительным, Создайте «глубокие функции» или Извлеките слабосвязанные части из класс на меньшие классы.

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

Цели и мотивация

Двумя основными целями проекта являются следующие:

Собирайте вопросы для контрольных списков проверки кода

Каждая практика является источником одного или нескольких ценных контрольных вопросов. Например, практика Сделать if условие положительным включает в себя следующий вопрос: Упростит ли код расположение if-else ветвей, чтобы условие было положительным (например, if (cond) вместо if (!cond)?)

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

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

Соединяйте идеи из книг и онлайн-ресурсов

На тему проектирования программного обеспечения написан ряд книг: «Прагматичный программист», «Рефакторинг», «Чистый код», «Философия проектирования программного обеспечения», «Искусство читаемого кода» и др., и многие другие. популярные книги, такие как «Programming Pearls», «Effective Java», «Effective C++», содержат значительное количество дискретных советов по проектированию программного обеспечения, но все эти книги редко ссылаются друг на друга. Цель учебного проекта «Дизайн программного обеспечения» состоит в том, чтобы связать идеи о проектировании программного обеспечения между языками программирования, обратившись к книгам из соответствующих статей по практике.

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

Состояние и планы

По моим оценкам, существует, возможно, около нескольких сотен практик проектирования программного обеспечения, не относящихся к отдельным языкам программирования. На момент этого объявления установлено всего несколько десятков практик, и только от 10 до 20 относительно хорошо развиты.

Пишу практики в свободное время. Скорее всего, мои темпы уже никогда не будут выше, чем в 2019 году. Учитывая это, мне одному может понадобиться более 10 лет, чтобы добиться качественного завершения проекта.

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

При этом хотелось бы, чтобы проект продвигался быстрее. Итак, если вы считаете, что писать о дизайне программного обеспечения может быть интересно, я приглашаю вас присоединиться к проекту. Специальной процедуры нет: Викиверситет открыт для редактирования кем угодно. Для личного общения вы можете связаться со мной по адресу [email protected].

Похожие проекты

Идея Основных правил C++ очень похожа на идею учебного проекта Дизайн программного обеспечения, и первая на самом деле послужила источником вдохновения для второй. Единственное отличие состоит в том, что основные принципы C++ ограничиваются одним языком программирования.

Еще один похожий проект, посвященный Java и веб-разработке, — Java Practices, хотя он и не открыт для участия.

Университет Карнеги-Меллона — Институт программной инженерии проводит группу «Стандартов кодирования»: для безопасного кодирования, C, C++, Java, Android и Perl.

Страницы Рекомендации по проектированию .NET Framework и Лучшие практики в документации по .NET доступны для обсуждения и добавления через репозиторий dotnet/docs на Github.

Если вы знаете о других подобных проектах, дайте мне знать в комментариях.

Почему не книга?

Я думаю, что вики лучше, чем книга, в качестве учебного ресурса по проектированию программного обеспечения. Размер вики не ограничен, поэтому дилеммы включения/исключения материала нет. Вики не упорядочена и не взаимосвязана: читатель может начать где угодно и перейти на любую страницу. Вики доступна в Интернете бесплатно и открыта для постоянного улучшения и редактирования любым человеком.