Обучение по книгам, о правильности и распознавании шаблонов



Пара мыслей о том, как хорошо создавать программное обеспечение.

Недавно друг задал вопрос о конкретных навыках, которыми обладают разработчики ПО.

Каковы уникальные навыки, которые практикуют специалисты по разработке?

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

По моему мнению, если думать универсально, то я сказал бы что это практика правильности и распознавания шаблонов*. Вот некоторые из навыков, которые уникальны для разработчиков программного обеспечения.

Правильность


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

Правильность рассматривается в разработке как насколько правильное это «как», чтобы бизнес-решение могло продолжать решать поставленные задачи с высоким показателем надежности и эффективности. Данный процесс представляет собой баланс между стратегией (проектированием) и тактикой (исполнением).

Изучение того каково это «как» в вакууме наилучшим образом представлено в четвертой части первой главы книги Programming Pearls?—?Writing Correct Programs (Жемчужины программирования — Написание правильных программ).

… сохранение простого кода обычно является ключом к правильности.
— Джон Бентли

Распознавание шаблонов


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

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

Распознавание шаблонов обсуждается в сообществе и существует много источников, где можно прочитать о методах распознавания. Я узнал об этом во второй главе книги The Pragmatic Programmer — The Evils Of Duplication (Прагматичный программист — Зло дублирования).

Сделайте его легким для повторного использования. Не повторяйтесь.
— Эндрю Хант и Дэйв Томас

Интересное наблюдение


Как только я дал этот ответ, мой друг задал встречный вопрос.

Если правильность и распознавание шаблонов являются этими навыками, как им обучиться?

Конечно, мой ответ был довольно прост:

Найди эти книги, настрой среду и проработай, показывая примеры. Установи ожидания от обучения и применяй эти мета-навыки, обеспечивая ценность для бизнеса. Почему? Сложность. Это лучшая инвестиция в обучение мастерству, о которой я знаю. Это также приводит к тому, что разработчики становятся все более уверенными со временем.

Мой рост был сосредоточен вокруг этих книг и вокруг этих конкретных навыков. Но это заставило меня осознать, что есть несколько навыков, которые осуществляют значительный вклад в мета-навыки, помимо непосредственно выполнения работы. Я заинтересовался в терминологии «мета». Мои работы о декомпозиции задач (правильности) и организации (распознавании шаблонов) не нашли применения в момент их публикации. И примерно в то же время я думал о написании этой заметки о мета-навыках.

Профессор Стэнфордского университета преподавал курс по мета-навыкам и это привело к написанию книги, в которую он включил некоторые из результатов своего курса. Я был потрясен, когда узнал, что у него такое же отношение к вопросу, как и у меня. Поэтому купил книгу и прочитал ее взахлеб. Тринадцатая глава, A Philosophy Of System Design (Философия системного дизайна).

Разработчики, как правило, очень ориентированы на детали. Мы любим детали и нам нравится управлять их множеством; это важно для того, чтобы быть хорошим инженером-специалистом. Однако, хорошие разработчики программного обеспечения могут также немного отступить от от деталей и подумать о системе на более высоком уровне.
— Джон Оустерхаут**

Заключение


По моему мнению, правильность и распознавание шаблонов— это навыки***, которые разработчики программного обеспечения должны выучить и развить у себя. В результате повышается качество программного обеспечения. Все другие уникальные навыки, вполне могут полагаться на вышеупомянутые. Я приглашаю других поделиться примерами мета навыков, которые они выработали с течением времени.

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



* Что интересно правильность и распознавание шаблонов сильно связаны практиками вокруг машинного обучения.
** Если вы хотите узнать больше о том, что делает Джон, взгляните на его видео.
*** Инженеры также должны практиковать высокий уровень обучения и общения. Эти понятия не являются уникальными для программного обеспечения, но прочно связаны с науками.

Оригинал статьи

Комментарии (4)


  1. lair
    22.08.2018 12:46

    Что вам помешало дать ссылку на оригинал?


  1. demet Автор
    22.08.2018 12:58

    Невнимательность, прошу извинить, учту


    1. werklop
      22.08.2018 14:45

      Это один из мета-навыков, наличие которого порой приводит к большому количеству ошибок в коде :)


      1. demet Автор
        22.08.2018 15:00

        Я даже думаю, что ключевой. И в коде, и в архитектуре в целом.