Креативный программист
Қосымшада ыңғайлырақҚосымшаны жүктеуге арналған QRRuStore · Samsung Galaxy Store
Huawei AppGallery · Xiaomi GetApps

автордың кітабын онлайн тегін оқу  Креативный программист

 

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

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


 

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

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

 

ISBN 978-5-4461-2141-0

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

 

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

 

Предисловие

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

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

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

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

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

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

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

Введение

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

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

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

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

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


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

Этот вопрос не давал мне спать по ночам и в конце концов снова привел меня в научно-образовательную среду. После четырех лет интенсивного обучения и публикации множества научных работ по данной теме я могу сказать: теперь я с большей ясностью понимаю, что такое быть поистине отличным программистом. Это означает быть Креативным Программистом. Проблема заключается в том, что разрозненные научные публикации — при том, что они прекрасно читаются, — лишены контекста и едва ли выходят за пределы, очерченные университетом. Кроме того, я был настроен дать что-то сообществу программистов. Благодаря заинтересованности и помощи издательства Manning эта идея вскоре материализовалась в виде легко усваиваемых глав и издания с ранним доступом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 Томас Д., Хант Э. «Программист-прагматик».

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

Первые наброски этой книги были созданы мною единолично, но многие идеи, которые помогли придать ей форму, безусловно, были основаны на превосходной работе окружающих меня людей. Одному из них, Энди Ханту (Andy Hunt), я хотел бы выразить особую благодарность. Если бы в 2009 году я не открыл для себя его книгу «Pragmatic Thinking and Learning»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 предоставляет ресурс для содержательного общения читателей и авторов. Эти обязательства не подразумевают конкретной степени участия автора, которое остается добровольным (и неоплачиваемым). Задавайте автору хорошие вопросы, чтобы он не терял интереса к происходящему! Форум и архивы предыдущих обсуждений доступны на веб-сайте издательства, пока книга продолжает издаваться.

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

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

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

На веб-сайте издательства 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.