Креативный программист - Ваутер Грунефелд - E-Book

Креативный программист E-Book

Ваутер Грунефелд

0,0

Beschreibung

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

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 403

Veröffentlichungsjahr: 2024

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Переводчик А. Денисов

Ваутер Грунефелд

Креативный программист. — СПб.: Питер, 2024.

ISBN 978-5-4461-2141-0

© ООО Издательство "Питер", 2024

Оглавление

Предисловие
Введение
Благодарности
Об этой книге
Как устроена эта книга
Форум liveBook
От издательства
Иллюстрация на обложке
Об авторе
1. В начале творческого пути
1.1. Что же такое творчество?
1.2. Зачем вообще нужно творчество
1.3. Разные уровни творчества
1.4. Дорожная карта пути к креативности
1.5. Структура последующих глав
2. Технические знания
2.1. Без вклада не будет творческого результата
2.2. Сбор знаний
2.3. Усвоение знаний
2.4. Действия на основе знаний
2.5. Пример рабочего процесса
Итоги
3. Общение
3.1. Командное сотрудничество
3.2. Коллективная география
3.3. Творческая работа сквозь время
3.4. Если поток творчества замедляется
Итоги
4. Ограничения
4.1. Мышление в рамках ограничений
4.2. Внутренние ограничения
4.3. Наложенные ограничения
4.4. Самоограничения
4.5. Достижение оптимального баланса
4.6. Работа с ограничениями на практике
Итоги
5. Критическое мышление
5.1. Творческое критическое мышление
5.2. Творческий процесс
5.3. Креативность — это средство, а не цель
5.4. Распространенные заблуждения о критическом мышлении
5.5. Слишком много самокритики
5.6. Почему критическое мышление других тоже важно
Итоги
6. Любознательность
6.1. Любознательность как импульс для креативности
6.2. Растущая тяга к знаниям и странствиям
6.3. Держите курс на любознательность
6.4. От любознательности к мотивации
6.5. Мультипотенциальность
6.6. Нежданные открытия
6.7. О веселье
Итоги
7. Творческое состояние ума
7.1. Как прийти в правильное творческое настроение
7.2. Поток глубокой работы
7.3. Прерывайтесь!
7.4. Провоцирование творческих озарений
7.5. Корпоративное творческое состояние ума
Итоги
8. Творческие методики
8.1. О творческом инструментарии
8.2. Подборка. Инструментарий художника
8.3. Подборка. Инструментарий писателя
8.4. Подборка. Инструментарий программиста
Итоги
9. Итоговые мысли о креативности
9.1. Помните: творческой личностью может быть каждый
9.2. Несколько слов о развивающихся взглядах на творчество
9.3. Когда не стоит быть творческой личностью
9.4. Дальнейшее чтение

Предисловие

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

Креативность — странная штука. Никто не будет спорить с тем, что программирование является творческим занятием, но что есть творчество и каким образом можно полнее раскрыть свои творческие способности? Если человек просто много знает и умеет применить нужные знания в нужный момент, — можем ли мы уже считать его творческим? Ваутер утверждает, что технические знания являются необходимым, но недостаточным условием. Он идет дальше и наполняет свою книгу невероятной смесью увлекательных исторических примеров и практических упражнений, а также многочисленными отсылками к статьям, книгам и научным работам (как связанным с программированием, так и далеким от него) для углубленного изучения.

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

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

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

Не сомневаюсь, что книга «Креативный программист» окажется полезной каждому программисту — от учащихся старших классов, делающих первые шаги в освоении Python, до состоявшихся разработчиков на C++, имеющих десятки лет опыта за плечами. Мне не терпится увидеть, на какие творческие проекты она подвигнет читателей!

Доктор Фелиен Хэрманс (Felienne Hermans), профессор computer science, Амстердамский свободный университет

Введение

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

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

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

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

Еще раз спасибо за то, что купили эту книгу, и приятного чтения!

1 Автор применяет терминологию, принятую в индустрии компьютерных игр. Ранний доступ (англ. early access), альфа-доступ (alpha-access) или платная альфа (paid-alpha) — модель финансирования в игровой индустрии, с помощью которой пользователи платят за игру на ранних стадиях создания (пре-альфа, альфа, бета) и получают доступ к предварительной полной версии, а разработчики могут использовать полученные средства для доведения игры до полноценного выпуска. Те, кто платит за ранний доступ, как правило, помогают в отладке игры, дают обратную связь, вносят предложения по улучшению игрового процесса, а в дальнейшем им может быть предоставлен доступ к особенному контенту игры. — Примеч. пер.

Благодарности

Первые наброски этой книги были созданы мною единолично, но многие идеи, которые помогли придать ей форму, безусловно, были основаны на превосходной работе окружающих меня людей. Одному из них, Энди Ханту (Andy Hunt), я хотел бы выразить особую благодарность. Если бы в 2009 году я не открыл для себя его книгу «Pragmatic Thinking and Learning»2, то, возможно, никогда не проявил бы интереса к мыслительным процессам и психологии программирования.

Благодарю всех тех замечательных людей, с которыми я имел удовольствие работать, и всех прежних работодателей, которые разрешили мне организовать экспериментальные курсы по различным вопросам, освещаемым в этой книге. Выражаю огромную благодарность моим научным руководителям, докторам Йоосту Феннекенсу (Joost Vennekens) и Крису Эртсу (Kris Aerts) из Лёвенского католического университета, которые позволили мне идти своим путем, вместо того чтобы принудительно ограничивать тематику моей работы областью собственных исследовательских интересов. Благодарю также всех, кто работает в данной индустрии, и членов научно-образовательного сообщества, с которыми я проводил собеседования в рамках своего исследования.

Возможно, мне никогда не захочется это признавать, но первый набросок данной книги имел довольно грубые очертания, пусть и содержал множество хороших идей. Я благодарен моему редактору Коннору О’Брайену (Conner O’Brien) за критический разбор написанного и за то, что порой он заставлял меня удалять дорогие моему сердцу фрагменты. Дорога была тернистой, а необходимость выверять баланс между теорией и практикой беспокоила меня не на шутку, но в конце концов Коннор всегда наставлял меня на правильный путь.

Благодарю также издателя Майкла Стивенса за то, что он разглядел потенциал этой книги уже на первой нашей встрече. Хочу также выразить огромную признательность всем сотрудникам издательства Manning, которые помогли книге увидеть свет.

Спасибо всем, кто предоставил обратную связь о рукописи на различных стадиях работы над ней: Абдулу Юсуфзаи (Abdul W. Yousufzai), Алессандро Кампейсау (Alessandro Campeis), Андресу Сакко (Andres Sacco), Чаку Куну (Chuck Coon), Диего Казелле (Diego Casella), Джордже Вукеличу (Đorđe Vukelić), Эдину Капичу (Edin Kapić), Эдмунду Кейпу (Edmund Cape), Джорджу Онофри (George Onofrei), Германо Риццо (Germano Rizzo), Хаиму Раману (Haim Raman), Жауме Лопесу (Jaume López), Джедидайе Риверу Клемонсу-Джонсону (Jedidiah River Clemons-Johnson), Джереми Чену (Jeremy Chen), Джозефу Перенье (Joseph Perenia), Карлу ван Хайстеру (Karl van Heijster), Малисе Миддлбрукс (Malisa Middlebrooks), Мануэлю Рубио (Manuel Rubio), Маттео Баттисте (Matteo Battista), Максу Садрие (Max Sadrieh), Мухаммаду Зохаибу (Muhammad Zohaib), Нгиа То (Nghia To), Нурану Махмуду (Nouran Mahmoud), Оливеру Форралу (Oliver Forral), Ору Голану (Or Golan), Орландо Алехо Мендесу Моралесу (Orlando Alejo Méndez Morales), Прадипу Челлаппану (Pradeep Chellappan), Праджвалу Ханалу (Prajwal Khanal), Ричу Йонтсу (Rich Yonts), Самуэлю Бошу (Samuel Bosch), Себастьяну Феллингу (Sebastian Felling), Свапнил-кумару Дешпанде (Swapneel-kumar Deshpande) и Видье Винай (Vidhya Vinay).

Особой благодарности также заслуживают:

• Янник Лемменс (Yannick Lemmens), который ознакомился с одной из самых первых версий рукописи. Его энтузиазм определенно явился движущей силой проекта.

• Линус де Мейер (Linus De Meyere); он всегда поддерживает мои проекты, какими бы несуразными они ни казались поначалу.

• Питер Бриджер (Peter Bridger), мой связной из мира компьютерных технологий прошлых лет и хороший друг, который делился историями, радостными и грустными, и отвлекал, когда это было необходимо.

• Фелиен Хэрманс (Felienne Hermans) — своей книгой «Мозг программиста» (также опубликованной издательством Manning) она показала программистам (и издателям), что существует явная потребность в «нетехнических» книгах на технические темы.

• Даниэль Грациотин (Daniel Graziotin), который помог мне обратить внимание на исследования креативности в контексте разработки программного обеспечения (ПО), хотя сам в итоге занялся другой смежной темой.

И наконец, о человеке, которому я, по-видимому, обязан больше всех. Я благодарю свою жену, Кристин Тулен (Kristien Thoelen), за то, что она терпела мое ворчание и нытье всякий раз, когда я натыкался на очередную преграду во время написания книги. У меня есть ощущение, что это не последняя моя книга: прости, дорогая!

2 Томас Д., Хант Э. «Программист-прагматик».

Об этой книге

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

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

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

Как устроена эта книга

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

В каждой из глав со 2-й по 8-ю раскрывается и глубоко исследуется одна из главных тем, связанных с творческими способностями. Данные темы можно также увидеть на обороте обложки. Это технические знания, общение, ограничения, критическое мышление, любознательность, творческое состояние ума и креативные методики. Как вы вскоре убедитесь, все они тесно взаимосвязаны. Книга была написана в расчете на последовательное прочтение глав, но не стесняйтесь читать их в любом порядке, следуя своей любознательности и выбирая то одну, то другую тему. Следите лишь за тем, чтобы не упустить важный контекст.

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

В каждом разделе в главах 2–8 вы найдете упражнения, предназначенные для того, чтобы вы остановились и задумались. Некоторые из них легко выполнить, а над некоторыми нужно либо подумать подольше, либо вначале хорошо выспаться и только потом перечитать заново. Я постарался составить их таким образом, чтобы они могли привести к позитивным сдвигам, но ожидаю, что и вы, читатель, со своей стороны этому поспособствуете. Если вы столкнетесь с трудностями или не будете знать, как применить знания в конкретной ситуации, свяжитесь со мной. Я всегда рад помочь чем могу!

Форум liveBook

Приобретая книгу «Креативный программист», вы получаете бесплатный доступ к веб-форуму издательства Manning (на английском языке), на котором можете оставлять комментарии ко всей книге либо к отдельным ее разделам или абзацам. Кроме того, можно писать заметки самому себе, задавать вопросы и отвечать на них, а также получать помощь от автора и других пользователей. Форум находится по адресу https://livebook.manning.com/book/the-creative-programmer/discussion. Информацию о форумах Manning и правилах поведения на них см. на https://livebook.manning.com/discussion.

В рамках своих обязательств перед читателями издательство Manning предоставляет ресурс для содержательного общения читателей и авторов. Эти обязательства не подразумевают конкретной степени участия автора, которое остается добровольным (и неоплачиваемым). Задавайте автору хорошие вопросы, чтобы он не терял интереса к происходящему! Форум и архивы предыдущих обсуждений доступны на веб-сайте издательства, пока книга продолжает издаваться.

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

Иллюстрация на обложке

Рисунок на обложке книги «Креативный программист» называется «Homme Ostjak à la Chasse d’Hermine», или «Остяк, охотящийся на горностая». Он взят из собрания Жака Грассе де Сен-Совёр (Jacques Grasset de Saint-Sauveur), опубликованного в 1788 году. Каждая иллюстрация в этом собрании детально прорисована и раскрашена от руки.

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

Об авторе

Ваутер Грунефелд — инженер-программист, исследователь в области computer science и профессиональный хлебопек. Ваутер был разработчиком корпоративного ПО на протяжении 11 лет, вдохновлявшим и обучавшим других. После нескольких лет работы он занялся преподаванием, коучингом и интеграцией новых сотрудников. Наблюдая за неудачами многих программных проектов, он задался вопросом: что означает быть хорошим разработчиком? Поиски решения этого вопроса привели к тому, что в 2018 году он оставил работу в IT-индустрии и вновь влился в научное сообщество. С тех пор Ваутер проводит исследования нетехнических навыков в мире разработки ПО. Он много пишет на эту тему. Список его научных публикаций можно найти по адресу https://brainbaking.com/works/papers/ (все статьи находятся в открытом доступе). Он также ведет блог по адресу https://brainbaking.com.

1. В начале творческого пути

В этой главе

• Определения и происхождение термина «творческие способности»

• Почему стоит быть творческой личностью

• Обзор семи составляющих Креативного Программиста

• Тест: решение проблем в стиле креативного программирования

Нам, людям, свойственно созидать. Homo faber3— человек, созидающий для того, чтобы взять в свои руки судьбу и окружающую среду, — проявляет, по словам философа и романиста Умберто Эко4, врожденную человеческую сущность в природе. Приобретя эту книгу, вы сделали первый шаг к вашей врожденной сущности креативного программиста. Поздравляю вас — и добро пожаловать!

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

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

Больший опыт в такой технической отрасли, как программирование, не обязательно означает больший творческий потенциал. Я работаю в индустрии разработки ПО свыше десяти лет и был свидетелем немногих взлетов и многих падений. Казалось бы, ПО ждет неминуемый провал. Прагматичный программист и соавтор «Agile-манифеста разработки программного обеспечения» («Manifesto for Agile Software Development») Энди Хант начал свою книгу «Pragmatic Thinking & Learning» на созвучной этому тревожной ноте:

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

Подход Энди заключается в том, чтобы научить думать и познавать новое; мой же состоит в том, чтобы научить относиться к проблемам творчески. Будучи свидетелем множества провалов программных продуктов (и [бес]сознательно помогая их осмыслить), я пришел к убеждению, что проблема может заключаться не в технических знаниях, а в навыках, не имеющих отношения к технике. Одержимость этой мыслью вновь привела меня к научно-образовательному сообществу, которому я посвятил последние четыре года, исследуя творческие способности в разработке ПО. Плод моей гибридной научно-программистской работы вы держите в руках (если, конечно, вы предпочитаете читать старые добрые бумажные книги). Однако прежде чем мы приступим к работе, нужно найти ответы на некоторые вопросы.

1.1. Что же такое творчество?

Ученые-психологи бьются над этим вопросом десятилетиями. Результатом является около ста разных определений творчества. Если вы зададите вопрос о том, что такое творчество, вашей десятилетней дочери, то чтобы разобраться в этом, она предложит вам вместе нарисовать что-нибудь красками и кисточкой. Ваш прижимистый сосед считает, что проявлением творческих способностей является уход от налогов. А вы сами, покопавшись в начинке компьютера, можете прийти к выводу, что и ваша дочь, и сосед ошибаются: настоящие творцы — инженеры, которые все это придумали! Так кто же прав?

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

• Считается новаторской и оригинальной.

• Обладает высоким качеством.

• Имеет непосредственное отношение к текущему заданию.

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

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

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

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

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

Рис. 1.1. Что есть искусство? Согласно Марселю Дюшану (Marchel Duchamp), произведением искусства может являться писсуар с автографом. Нью-Йоркская галерея отклонила его — и все же «Фонтан» Дюшана произвел известный фурор в искусстве XX века. Сейчас произведение считается в высшей степени творческим. Фото из открытых источников

То же справедливо в отношении программирования, да и любой другой сферы деятельности. Если члены вашей команды хлопают вас по плечу, приговаривая: «Отличный код! Творчески обошел проблему!», — то, стало быть, вас вдруг повысили до звания «Креативный программист», при условии, что члены вашей команды, играющие роль экспертов, не просто проходили мимо. Впрочем, в другой компании то же самое решение может быть сочтено скучным: там все это уже видели.

Систематический подход к творчеству объясняет также печальный количественный перевес непризнанных гениев. Само собой разумеется, что если бы ни одна картина Винсента Ван Гога не была обнаружена, мы не считали бы его гением творчества. Мы не считали бы его таковым и в том случае, если бы ни один эксперт в области искусства не признал картины Ван Гога экспрессивными и новаторскими. Собственно, именно это и происходило при его жизни. Его работы раз за разом отклоняли кураторы Парижского салона7, которые традиционно были ответственны за официальные художественные выставки Академии изящных искусств (Académie des Beaux-Arts) в период между 1748 и 1890 годами. Но их консерватизм продлился недолго. Современные художники в конце концов сместили с пьедестала классицизм и возвели на опустевшее место импрессионизм; импрессионисты начали организовывать собственные независимые выставки. Как мы увидим далее, время и место являются в равной степени значимыми факторами творчества. Многие работы Ван Гога ныне входят в число самых дорогих картин из когда-либо проданных.

Истоки творчества

Восприятие творчества много раз менялось на протяжении истории человечества. В наши дни, стоит нам услышать это слово, на ум сразу приходит искусство. В античной Греции искусство (по-гречески — technê, это слово позже было преобразовано в слово «технология») подразумевало строгое следование правилам. Художники и скульпторы лишь имитировали, они не создавали — и только поэтам дозволялась «свобода действий». Люди творческих профессий открывали, а не изобретали.

Позднее в Европе, где господствовало христианство, созидание стало подразумевать исключительно сотворение богом из ничего (creatio ex nihilo). Мы, скромные человеки, просто делали себе разные вещи. Мы не могли — нам не дозволялось — создавать8.

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

Творчество не служило предметом научных исследований до 1950-х годов. Как и программирование, это относительно новое понятие!

Я мог бы разработать хитроумный вариант ext4, самой популярной файловой системы для Linux. Наверное, я назвал бы его «WouterFS». В этом так и сквозит креативность (и упадок). Если я никому об этом не скажу, то проект обнаружат разве что после моей смерти. К счастью, я реалист. Технологии развиваются стремительно, и к тому времени выйдет, вероятно, ext65, что, скорее всего, сделает WouterFS ненужной. А может быть, когда-нибудь я решусь показать свою реализацию тем, кто занимается поддержкой ext. Если они воспримут ее как нечто заурядное и незначительное — а вероятнее всего, так оно и случится, — я должен буду принять свое поражение. Однако если к моему коду отнесутся как к творческому продукту, они могут даже внедрить некоторые функции в ext4. Другими словами, все, что я могу сделать, — это усердно работать, а провозглашать свою работу творческой — не мой удел.

1.2. Зачем вообще нужно творчество

Звучит уныло, не правда ли? Зачем утруждать себя чтением книги о том, как стать креативным программистом, если все упирается в чью-то прихоть? А затем, что многие привычки и личностные качества, описанные в последующих главах, значительно повышают ваш потенциал как будущего креативного программиста.

Тем не менее это не отвечает на вопрос «зачем». Зачем мучить себя попытками стать креативным программистом, если вы и так компетентный специалист? Ответ и здесь лежит во многих плоскостях. Рассмотрим основные причины, по которым стоит вести жизнь креативного разработчика.

Первой причиной, говоря по-простому, является то, что таково желание работодателей. Уже многие годы объявления о приеме на должность разработчика ПО содержат слово «креативный»9. Всем известно, что описания вакансий пестрят ничего не значащими словами, которые напихивают в них сотрудники отдела кадров, стремясь привлечь как можно больше кандидатов. В наши дни в тренде находятся мягкие, или гибкие, навыки (soft skills). Вместо того чтобы просматривать объявления, мои коллеги и я провели собственное исследование, просто задав вопрос экспертам в области разработки ПО: «Какие нетехнические навыки, по вашему мнению, требуются, чтобы быть блестящим разработчиком?»10 Угадайте, какое слово мелькало в ответах. В общем, если вы хотите продать себя, нужно быть креативным.

Упражнение В каких случаях вы расцениваете свою работу программиста как творческую? В каких случаях — как какую угодно, только не творческую? В каких случаях вы расцениваете чужой код как творческий? Есть ли разница? Вам может быть неприятно отвечать на подобные приземленные вопросы, потому что ответы способны повлечь за собой (не)приятные открытия.

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

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

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

Творческий продукт или процесс?

Заметьте, что, восхищаясь творческой работой, мы почти всегда восхищаемся продуктом — конечным результатом всех пролитых потоков крови, пота и слез. Продуктом может стать умный алгоритм или изобретенный паттерн проектирования. (Подобные вещи вызовут восхищение в основном у разработчиков ПО.) А конечным результатом может явиться и целое приложение, которое, в идеале, сочтут креативным ваши пользователи.

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

Привлечение экспертов для оценки креативности продукта называется методом согласованных оценок (consensual assessment technique). Это популярный термин, предложенный Терезой Амабиле (Teresa M. Amabile) в 1988 году. Когда вы будете в следующий раз смотреть передачу «America’s Got Talent»11, помните, что она придерживается надежных научных методов!

Дарвин не решал проблемы — он их выявлял. Что можем извлечь из образа мышления Дарвина мы, программисты? Обычно мы завалены небольшими и четко определенными (под)проблемами, задачами в пределах своей плавательной дорожки, которые каким-либо образом должны попасть в графу «Готово». Однако, возможно, по пути мы соберем достаточно фрагментов информации, соединив которые сформулируем совершенно новый вопрос. Весьма вероятно, мы обнаружим проблему, о существовании которой наши клиенты даже не подозревали. Креативный программист и выявляет проблемы, и решает их. А к путешествию Дарвина мы вернемся в главе 6.

Другая причина, по которой стоит уделять внимание суждениям других о творчестве, — мнение ваших коллег должно быть значимым. Если вы еще не заметили, разработка ПО — это командная работа. Творчество в отрыве от окружающих бессмысленно (подробнее об этом будет рассказано в главе 3) именно потому, что это социальный конструкт. Ощущение психологической безопасности, которое возникает благодаря взаимному уважению, позволяет каждому чувствовать себя непринужденно, повышая тем самым сплоченность команды. Это открывает возможность учиться и расти самому, а также помогать учиться и расти другим.

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

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

1.3. Разные уровни творчества

Возможно, вы заметили, что, говоря о творчестве, я время от времени употребляю слово «гений». Конечно, для того, чтобы творить, не нужно быть гением. Пытаясь классифицировать разные уровни творчества, исследователи вывели следующую таксономию12:

• Творчество с маленькой буквы «т», или повседневное творчество. Это созидание в масштабах одной личности: когда делаешь что-то новое, такое, чего не делал раньше, например, кросс-компиляция вашей реализации любимой игры на С++11 для игровой консоли Game Boy Advance.

• Творчество с большой буквы «Т», или выдающееся творчество. Это означает делать что-то новое, такое, чего не делал никто и никогда, например портирование Ruby 3 для запуска на 486-й машине под управлением DOS 6.22. Кстати, хорошая идея...

Линус Торвальдс — Творец с большой буквы. Он полностью изменил предметную область, связанную с операционными системами (а также с контролем версий). Как утверждают некоторые ученые, значимые творческие произведения, меняющие целые области знаний, являются плодами труда гениев. А вот разработка творческого решения проблемы по обработке запросов в вашем веб-приложении вряд ли потрясет мир.

Как и всё в нашем мире, эта таксономия не могла не подвергнуться критике. Творчество с маленькой буквы «т» часто выставляется как ничем не примечательное и банальное. Величие же Творчества с большой буквы «Т» может заставить творцов уступить неизбывной потребности создать нечто, способное изменить мир. Исследователь творческих способностей Марк Ранко (Mark Runco) полностью отвергает различия между большим и малым, заявляя, что реальность не подлежит категоризации13. Другие в ответ разрабатывают собственные теории: так, существуют H-творчество (historical — историческое: войдет ли изобретение в учебники истории), P-творчество (personal — личное), а также не столь очевидные слои между маленькой «т» и большой «Т», называемые «творчество с уменьшенной буквы “т”» и «профессиональное творчество с маленькой буквы “т”». Некоторые исследователи, такие как Михай Чиксентмихайи (Mihaly Csikszentmihalyi), проводят интервью с гениями творчества, чтобы вычленить из этих бесед практические методы для творцов в повседневности, в то время как другие утверждают, что это дает искаженную картину. Короче говоря, в научных исследованиях творческих способностей царит беспорядок. Тем не менее существенную пользу может принести представление о творчестве как о системе различных «уровней», что показано на рис. 1.2.

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

1.4. Дорожная карта пути к креативности

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

Книгу Энди Ханта «Pragmatic Thinking & Learning» открывает нарисованная вручную ментальная карта (она же майндмэп), которая может служить также дорожной картой нашего проекта. Поскольку в своей книге Энди тоже апеллирует к неочевидной стороне программирования, я позволил себе на волне вдохновения, вызванного этим рисунком, использовать его, чтобы внести в исследование14 элемент оживления, — это было признано весьма творческим шагом и сразу же принято. Майндмэп, как показано на рис. 1.3 и на внутренней стороне обложки этой книги, служит также путеводителем по ней. Каждое «щупальце» на этой карте представляет главу об определенной теме, связанной с творчеством.

Примечание Все иллюстрации в этой книге нарисованы мною от руки, в полном соответствии с темой творчества.

1.4.1. Семь составляющих креативного программирования

Вот приключения, которые нас ждут:

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

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

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

Сотрудничество/общение

Творчество не вершится в изоляции: оттачивание идей — процесс социальный. Без какой-либо обратной связи было бы невозможно возвести идею с легким налетом оригинальности в ранг превосходной. Подтолкнуть вас к изменениям могут и ваши коллеги. В главе 3 мы рассмотрим концепцию кластеров гениев, узнаем, как собирать команды мечты, а также познакомимся с методиками повышения креативности команд. В статье, опубликованной моими коллегами и мной15, эта тема названа «общением» (communication), поэтому мы будем придерживаться этого термина, хотя, оглядываясь назад, можно сказать, что более подходящим могло бы оказаться слово «сотрудничество» (collaboration).

Рис. 1.3. Майндмэп книги «Креативный программист»

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

Ограничения

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

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

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

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

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

Любознательность

Почему вы выбрали эту книгу? Было ли вам любопытно, что́ внутри? Любите ли вы учиться? Нацелены ли вы прочесть эту книгу от корки до корки? Если ответ «да», то это отличное начало! Как полагает исследователь творчества Михай Чиксентмихайи, любознательность и настойчивость являются двумя определяющими чертами творческой личности16. В последующих главах мы будем регулярно возвращаться к замечательному труду Чиксентмихайи по данной теме.

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

Творческое состояние ума

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

Работать над собственным состоянием ума — одно дело. Совсем другое — формировать состояние ума команды или компании. Для креативного программиста важно и то и другое.

Креативные методики

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

1.4.2. Тест: решение проблем в стиле креативного программирования

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

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

Вопросы приобретут смысл, когда вы закончите читать соответствующую главу. Некоторые из них пробудят в вас сомнения: вписывается ли вопрос в рамки только одной темы? Не стоит беспокоиться: да, кое-какие из них выходят за эти рамки. Как мы вскоре убедимся, креативность нелегко «затолкать» в одну категорию.

Возможно, опросник будет полезно заполнить сейчас, перед тем как приступать к первой главе, чтобы получить общее представление о своем текущем уровне как креативного программиста. Не забывайте, это тест для самопроверки, поэтому постарайтесь быть честными: ложь лишь создаст иллюзию того, что расти больше некуда! Заполняя опросник, попробуйте связать вопросы с вашим текущим заданием (проектом). Скорее всего, от проекта к проекту ответы будут варьироваться.

Каждый вопрос подразумевает ответ, выраженный числом: 1 — совершенно не согласен, 2 — не согласен, 3 — ни согласен, ни не согласен, 4 — согласен или 5 — совершенно согласен. Поставьте знак «X» в соответствующем столбце.

Таблица 1.1. 56 вопросов теста решения проблем в стиле креативного программирования

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

1

2

3

4

5

Во время работы над проектом я приобрел много знаний.

Я изучил и применил множество методик программирования.

Я получил представление о той предметной области, к которой относится проблема.

Меня привлекал технический аспект программирования.

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

Мне нравилось работать над этим проектом, потому что многие его аспекты были мне неизвестны.

Я пытался соотнести новые знания с тем, что знал до этого.

Благодаря этому проекту я узнал многое из того, что не относится к программированию.

2. Общение

1

2

3

4

5

Я регулярно запрашивал обратную связь у моих коллег.

Я визуализировал проблему на маркерной доске или на бумаге.

Я регулярно запрашивал обратную связь у моих клиентов и/или у конечных пользователей.

Я помогал коллегам по команде в решении их задач.

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

Я поддерживал идеи и усилия коллег по команде.

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

Я тщательно обдумывал предложения, сделанные другими.

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

1

2

3

4

5

Я регулярно размышлял о корректности моих решений.

Я не стал работать хуже из-за того, что сроки поджимали.

Я старался сделать мой код как можно более элегантным.

Я старался выявить ограничения, налагаемые задачей.

Мою программу протестировали мои друзья и/или члены семьи (по возможности).

Я был способен принимать правильные решения даже в условиях полной творческой свободы.

Программирование в сжатые сроки ускорило процесс моего обучения.

Я регулярно тестировал программу лично и уделял внимание легкости пользования ею.

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

1

2

3

4

5

Во время обсуждения проблем я часто предлагал альтернативы.

Я регулярно взвешивал различные варианты, имевшиеся в нашем распоряжении.

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

Я использовал несколько источников для самостоятельного поиска информации.

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

Я всегда проверяю надежность источника, когда ищу информацию о чем-либо.

Мне было важно на сто процентов понимать, почему что-либо работает именно так, как работает.

Наблюдение за другими проектами побуждало меня размышлять над моим собственным.

5. Любознательность

1

2

3

4

5

Во время работы над проектом я выходил далеко за пределы зоны комфорта.

Многие составляющие проекта подстегивали мою любознательность.

Мне нравилось быть причастным к разным аспектам проекта.

Мне нравилось глубоко вникать в некоторые аспекты.

Сложность проекта являлась стимулом для меня.

Я чувствовал стремление реализовать дополнительные функции.

Разработка проекта принесла мне много удовольствия.

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

6. Творческое состояние ума

1

2

3

4

5

Я долгое время оставался сосредоточенным на одной части проекта.

Я использовал средства повышения производительности, чтобы еще больше сосредоточиться на сути проблемы.

Я считаю этот опыт очень полезным.

В работе над проектом время летело быстро.

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

Я программировал почти автоматически.

Я точно знал, чего хотел достичь.

Меня не беспокоило, что думают о моем коде другие.

7. Креативные методики

1

2

3

4

5

Для решения одной проблемы я использовал множество разных методов.

Для решения чего-либо я привлекал знания из других областей.

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

Я намеренно делал перерывы, чтобы мысли как следует улеглись.

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

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

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

Я никогда не чувствовал, что оказался в тупике.

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

Рис. 1.4. Лепестковая диаграмма возможных результатов теста решения проблем в стиле креативного программирования. Если вам лень рисовать что-то наподобие этого, попробуйте пройти онлайн-опрос по адресу https://brainbaking.com/cppst/

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

1.5. Структура последующих глав

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

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

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

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

Что ж, теперь вы готовы к творческим приключениям. Устремимся же им навстречу!

3 Homo faber (лат.) — человек творящий. — Примеч. ред.

4 Эко У. «Открытое произведение», 2004.

5 James C. Kaufman and Robert J. Sternberg. Creativity. Change: The Magazine of Higher Learning, 2007.

6 Vlad Petre Glăveanu, Michael Hanchett Hanson, John Baer, et al. Advancing creativity theory and research: A socio-cultural manifesto. The Journal of Creative Behavior, 2020.

7 Парижский салон (фр. Paris Salon) — одна из самых престижных художественных выставок Франции, официальная регулярная экспозиция парижской Академии изящных искусств.— Примеч. пер.

8 Изначальное эксклюзивное право Бога на творчество подчеркивается средствами самих языков: creation — create — Creator, творчество — сотворение — Творец, создать — созидать — Создатель. — Примеч. ред.

9 Judy L. Wynekoop and Diane B. Walz. Investigating traits of top performing software developers. Information Technology & People, 2000.

10 Wouter Groeneveld, Hans Jacobs, Joost Vennekens, and Kris Aerts. Non-cognitive abilities of exceptional software engineers: A Delphi study. Proceedings of the 51st ACM Technical Symposium on Computer Science Education, 2020.

11 «Америка ищет таланты» — телепроект на канале NBC. Это шоу талантов, в котором выступают различные талантливые люди всех возрастов, стремящиеся выиграть главный приз — один миллион долларов. — Примеч. пер.

12 Peter Merrotsy. A note on big-C creativity and little-C creativity. Creativity Research Journal, 2013.

13 Mark A. Runco. «Big C, little c» creativity as a false dichotomy: Reality is not categorical. Creativity Research Journal, 2014.

14 Wouter Groeneveld, Laurens Luyten, Joost Vennekens, and Kris Aerts. Exploring the role of creativity in software engineering. 2021 IEEE/ACM 43rd International Conference on Software Engineering: Software Engineering in Society.

15 Wouter Groeneveld, Hans Jacobs, Joost Vennekens, and Kris Aerts. Non-cognitive abilities of exceptional software engineers: A Delphi study. Proceedings of the 51st ACM Technical Symposium on Computer Science Education, 2020.

16 Mihaly Csikszentmihalyi. Creativity: Flow and the psychology of discovery and invention. Harper Perennial, reprint edition, 2013 (М. Чиксентмихайи. «Креативность. Поток и психология открытий и изобретений»).

17 Wouter Groeneveld, Lynn Van den Broeck, Joost Vennekens, and Kris Aerts. Self-assessing creative problem solving for aspiring software developers: A pilot study. Proceedings of the 2022 ACM Conference on Innovations and Technology in Computer Science Education, 2022.

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

В этой главе

• Как собирать, усваивать и применять знания

• Методика управления знаниями «цеттелькастен»

• Рабочий процесс ведения умных заметок

Одинокая ворона потревожила мирное молчание древней корсиканской ночи. Гражданин Рима испанского происхождения проводил вечер с двумя лучшими друзьями — пером и чернилами. После того как диктатор Клавдий выслал его из Рима, Сенека Младший провел восемь необычайно плодотворных лет на острове Корсика, публикуя различные «Утешения», относящиеся к гневу и смерти. Сенека утверждал, что именно изложением мыслей на бумаге нужно развивать себя. Не проходило и ночи, чтобы он не оставлял записи в своем дневнике. Как он объяснял другу, «я вспоминаю весь свой день и вновь обдумываю все мои поступки и слова. Я ничего не скрываю от себя, ничего не пропускаю. Ибо зачем должен я бежать каких-либо своих ошибок, когда могу исповедаться в них самому себе?» Сон, наступавший после такого самоисследования, был особенно крепок и безмятежен.