НОВЫЙ МЕАП

Творческий путь вперед

Из книги Воутера Гроенвельда Креативный программист

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

Читайте дальше!

Получите скидку 25% на The Creative Programmer, введя fccgroeneveld в поле скидки при оформлении заказа на сайте manning.com.

Мы, люди, любим творить. Homo Faber — создание, чтобы управлять своей судьбой и окружающей средой — является проявлением врожденного существования человека в природе, согласно философу и писателю Умберто Эко[1]. В этом ключе эта книга отправит вас в путешествие к вашей врожденной сущности творческого программиста.

Скорее всего, вы заинтересовались этой книгой, потому что хотите стать лучшим программистом. Вы попали в нужное место. Только не ждите раскрытия новейших технических чудес, таких как JIT-компилятор какой-нибудь виртуальной машины, или новых знаний о языках программирования x или y. Это далеко от обычной книги по программированию.

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

Больше опыта в технической профессии, такой как программирование, не обязательно означает большую творческую отдачу. Я работаю в индустрии разработки программного обеспечения более десяти лет и был свидетелем нескольких взлетов и множества падений. Программное обеспечение, похоже, обречено на провал. Прагматичный программист и соавтор Манифеста гибкой разработки программного обеспечения Энди Хант начинает свою книгу Прагматическое мышление и обучение с аналогичной тревожной ноты [2]:

«Являетесь ли вы программистом или разочарованным пользователем, вы, возможно, уже подозревали, что разработка программного обеспечения, должно быть, является самым сложным делом, которое когда-либо представлялось и осуществлялось людьми. Его сложность ежедневно напрягает наши лучшие способности, а неудачи часто могут быть впечатляющими — и заслуживающими освещения в печати».

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

Но прежде чем мы приступим к взлому, нам сначала нужно решить несколько вопросов.

Почему творчество?

Зачем становиться креативным программистом, если вы уже компетентный программист? Ответ многогранен. Давайте рассмотрим основные причины, по которым стоит вести творческий образ жизни разработчика.

Во-первых, проще говоря: потому что об этом просят работодатели. В течение многих лет почти каждое объявление о вакансиях по разработке программного обеспечения содержало слово креативный [3]. Всем известно, что объявления о вакансиях переполнены бессмысленными словами, придуманными отделом кадров, чтобы привлечь как можно больше кандидатов. Навыки межличностного общения сейчас в моде. Вместо сканирования рекламы мы провели собственное исследование, просто спросив экспертов по разработке программного обеспечения: Как вы думаете, какие нетехнические навыки необходимы, чтобы преуспеть в качестве разработчика? [4] Угадайте, какое слово всплыло. Если вы хотите продать себя, вам придется проявить творческий подход.

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

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

Когда Чарльз Дарвин покинул Плимут на Бигле в 1831 году, путешествие, которое продлилось пять лет, у него не было намерения решать проблему эволюционной теории: предметной области еще даже не существовало. Перед исследователями британского Королевского флота была поставлена ​​задача только нанести на карту береговую линию Южной Америки. Экзотическая растительность и животные, с которыми Дарвин столкнулся и тщательно вел записи, посеяли семена его теории, которая зародилась лишь спустя годы после самого путешествия.

Дарвин не был решателем проблем. Он умел находить проблемы. Чему мы, программисты, можем научиться из мышления Дарвина? Мы обычно завалены небольшими и четко определенными (под)проблемами. Задачи на плавательной дорожке, которые должны каким-то образом попасть в колонку «выполнено». Но, возможно, где-то на этом пути будет собрано достаточно точек, которые позже соединятся, чтобы сформировать совершенно новый вопрос. Возможно, мы обнаружим проблему, о которой наши клиенты даже не подозревали. Творческий программист одновременно находит проблемы и решает проблемы.

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

Третья причина для творчества — это то, что творчество — это весело. Многие эксперты, с которыми мы беседовали, упоминали, что единственной причиной для того, чтобы стать программистом, является возможность проявить творческий подход. Креативные программисты получают огромное удовольствие от своей работы. Они любят глубоко погружаться, выходить из своей зоны комфорта, связывать необычные идеи, обсуждать разные подходы с другими и быть в потоке. Короче говоря, творческие программисты поддаются своему творческому порыву. Они становятся Homo Faber Умберто Эко.

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

Путь к творчеству

Эта книга не о том, как стать гением или провидцем, что имеет мало общего с «творческими генами»: как мы вскоре обнаружим, таких вещей не существует. Вместо этого речь идет о связанных процессах поиска и решения проблем. Я надеюсь, что вы сможете стать лучшим программистом, применяя различные творческие методы и представления о творчестве, аккуратно объединенные в семь различных, но тесно переплетенных тем. Если вы не программист, не волнуйтесь: мы увидим, что многие из этих методов можно легко перенести в другие области.

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

Все иллюстрированные фигуры в этой книге нарисованы мной вручную, чтобы лучше соответствовать теме творчества.

Семь тем креативного программиста

Нас ждут следующие приключения:

1. Технические знания

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

Креативные программисты понимают, как преобразовать постоянный поток знаний в новые идеи.

2. Общение

Творчество никогда не происходит изолированно. Уточнение идей есть социальный процесс. Без какой-либо обратной связи невозможно улучшить вашу слегка оригинальную идею до отличной. Ваши сверстники могут действовать как катализаторы изменений. В этой главе мы рассмотрим концепцию гениальных кластеров, способы создания команд мечты и методы повышения креативности команд.

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

3. Ограничения

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

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

4. Критическое мышление

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

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

5. Любопытство

Почему вам интересна эта книга? Вам интересно его содержание? Вы стремитесь учиться? Если ответ да, то мы отлично начали! По словам исследователя креативности Михая Чиксентмихайи, любопытство и настойчивость являются двумя наиболее определяющими чертами личности для творчества [5]. В следующих главах мы будем регулярно возвращаться к прекрасной работе Чиксентмихайи на эту тему.

Любопытство подразумевает мотивацию к изучению нового (технические знания). Любопытство заставляет задавать вопросы «почему» (критическое мышление). Мы обсудим, почему чувство чуда выгодно не только рассеянному профессору, но и креативному программисту.

6. Творческий настрой

Все мы знаем, что частые перерывы вредны для процесса программирования. Придя в правильное состояние ума, вы значительно улучшите свою творческую работу. Мы рассмотрим, как работают поток и прозрение, что может дать прайминг прозрения и как усилить столь важные, но непостоянные «а-а-а!» моменты.

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

7. Креативные приемы

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

Структура книги

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

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

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

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

Теперь вы готовы к творческому приключению. Подробнее о книге здесь.

[1] Умберто Эко и др. Открытая работа. Издательство Гарвардского университета, 1989.

[2] Энди Хант. Прагматическое мышление и обучение: рефакторинг Wetware. Прагматичная книжная полка, 2008.

[3] Джуди Л. Винекоп и Дайан Б. Уолц. Изучение черт наиболее эффективных разработчиков программного обеспечения. Информационные технологии и люди, 2000.

[4] Воутер Грюневельд, Ханс Якобс, Юст Веннекенс и Крис Аэртс. Некогнитивные способности выдающихся инженеров-программистов: исследование Delphi. В материалах 51-го технического симпозиума ACM по компьютерному образованию, 2020 г.

[5] Михай Чиксентмихайи. Творчество: поток и психология открытия и изобретения. HarperPerennial, Нью-Йорк, 1997.