Занимайся жизнью или занимайся смертью. (18cc) wrote,
Занимайся жизнью или занимайся смертью.
18cc

Category:

Программистский камень.

Прочитал таки "Программистский камень" Алана Картера. Работа довольно объемная, порядка 70 страниц формата А4. Постараюсь далее поделиться теми идеями автора, которые мне показались довольно интересными. Сразу оговорюсь, что английский не простой, так что перевод может изобиловать неточностями.

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

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

Итак, далее небольшой подбор разрозненных фактов о картостроителях(мапперах) и паковщиков(пакеров).

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

Далее хотелось бы поделиться мыслями автора, которые мне показались интересными, хотя некоторые и кажутся спорными:

Картостроение может быть простимулировано травмой. Пример: Япония после второй мировой войны.

Для эффективного картостроения нужно почаще задавать себе вопрос "почему".

Великие мыслители редко возводили сложные концептуальные построения.

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

Существуют 3 компонента проблемы -- вещи о которых мы думает, вещи, которые влияют на вещи о которых мы думаем, и вещи о которых мы не думаем.

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

Программа -- теория программиста относительно предметной области.

Грамотная организация труда программистом требует как можно больше понимания, и как можно меньше кода.

Основанная задача инженера -- получение понимания и помощь клиенту в понимании природы его (клиента) собственных требований.

Прежде чем что-то предложить, нужно понимать как это реализовать.

Центральная проблема дизайна софта -- найти оптимальное отображение между динамикой проблемы и семантикой системы.

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

Картостроение и TQM -- сердце хорошего программирования.

Вообще говоря, полезно читать спецификацию ЯП и линковщиков.

Обработка ошибок также важна, как и поток данных программы.

Главный совет для дизайнеров баз данных -- избегать избыточности в представлении.

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

Утечка памяти знак того, что программист плохо контролирует ситуацию.

Природа креативности: динамика проблемы, семантика системы и желание это все увязать.

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

PS. Кстати, Адлер в своей книге выделил как раз две категории чтения -- для понимания и для информации.
Tags: Программирование, литература
Subscribe

  • Книги: октябрь

    Оригинал взят у egorius в Книги: октябрь Джеймс Уиттакер, Джейсон Арбон, Джефф Королло, «Как тестируют в Google» О…

  • Прописные истины.

    To build a system without a requirements document means you are never wrong, but never done.

  • Правда жизни.

    The Twelve Networking Truths Status of this Memo This memo provides information for the Internet community. This memo does not specify an…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments