Вступ

Понад десять років тому я самостійно опублікував “Природу коду” — онлайн-ресурс і друковану книгу у якій досліджував непередбачувані еволюційні та емерджентні властивості природи через код за допомогою креативного фрейворку програмування Processing. З того часу у світі технологій і творчих напрямках багато чого змінилося, тому я знову тут із новою та перезавантаженою версією цієї книги, побудованою на основі JavaScript і бібліотеки p5.js. Цього разу в книзі є кілька нових способів програмування, але це все та сама стара природа — птахи все ще махають крилами, а яблука падають нам на голови.

Що це за книга?

З 2004 року в ITP/IMA (школа мистецтв Тіша Нью-Йоркського університету) я викладаю курс під назвою “Вступ до комп’ютерних медіа”. Джерела цього курсу сягають 1987 року та роботи Майка Міллса і Джона Генрі Томпсона (винахідник мови програмування Lingo). Під час курсу студенти вивчають основи програмування (змінні, умови, цикли, об’єкти, масиви), а також концепції, пов’язані зі створенням інтерактивних медіа-проєктів (пікселі, дані, звук, мережі, 3D тощо). У 2008 році я синтезував свої матеріали для цього курсу у книзі для початківців “Learning Processing”, а у 2015 році я створив серію відеоуроків, які слідують тому самому напрямку із використанням JavaScript з бібліотекою p5.js.

Після того, як студент вивчив основи й побачив низку застосунків, його наступним кроком може бути глибше вивчення певної області. Можливо, він хоче зосередитися на комп’ютерному зорі, візуалізації даних або генеративній поезії. Мій курс “Природа Коду” (який також викладається у ITP/IMA з 2008 року) являє собою один з можливих наступних кроків. Він починається саме там, де закінчується мій вступний матеріал, демонструючи підходи програмування, які зосереджуються на алгоритмах і симуляціях. Книга, яку ви читаєте, розвинулася з цього курсу.

Моя мета у цій книзі проста: я хочу поглянути на природні явища, які відбуваються у фізичному світі й розібратися, як написати код для їх симуляції.

Що ж тоді насправді являє собою ця книга? Це наукова книга? Відповідь рішуче ні. Щоправда, я міг би досліджувати теми, які походять із фізики чи біології, але я не буду досліджувати їх з особливо прискіпливим рівнем академічної точності. Натомість книга “натхненна реальними подіями”. Я беру певні наукові клаптики й необхідну математику для створення програмної інтерпретації природи та використовую їх, пропускаючи деталі, які мені не потрібні.

Чи це книга про мистецтво або дизайн? Я б також сказав, що ні. Незалежно від того, наскільки неформальним може бути мій підхід, я все одно зосереджуюсь на алгоритмах і пов’язаних із ними методами програмування. Звичайно, отримані демонстрації є візуальними (проявляються у вигляді анімованих програм), але вони є буквальною візуалізацією самих алгоритмів і способів програмування, намальованими лише за допомогою базових форм і кольорів сірого. Проте я сподіваюся, що ви, любий читачу, зможете використати свою креативність і візуальні ідеї, щоб із запропонованих прикладів створити нові, захопливі роботи.

Зрештою, якщо ця книга чимось і є, так це старомодним підручником з програмування. Хоча наукова тема (фізика Ньютона, клітинний ріст, еволюція) може стати основою для розділу, а результати можуть надихнути на творчі проєкти, сам зміст завжди зводитиметься до реалізації коду, з особливим акцентом на об’єктно-орієнтованому програмуванні.

Кілька слів про p5.js

Бібліотека p5.js — це переосмислення творчого середовища програмування Processing для сучасного Інтернету. Я використовую його у цій книзі з кількох причин. По-перше, це середовище, з яким я дуже добре знайомий. У той час як оригінальний Processing-фрейморк, що побудований на основі Java, є моєю першою любов’ю і я досі звертаюся до нього, коли випробовую нову ідею, p5.js це те той варіант, який я зараз використовую для навчання у багатьох своїх уроках програмування. Він безплатний, із відкритим вихідним кодом і добре підходить для початківців, а оскільки це JavaScript, усе працює прямо у веббраузері та не потребує додаткових інсталяцій.

Однак для мене Processing і p5.js — це насамперед спільнота людей, а не бібліотеки кодування чи фреймворки. Ці люди щиросердно присвятили незліченну кількість годин створенню і поширенню програмного забезпечення. Я написав цю книгу для цієї спільноти й для всіх та кожного, хто любить досліджувати свою цікавість і творити за допомогою коду.

За великим рахунком, немає значної різниці чи вміст цієї книги спиратиметься на роботу з p5.js чи Processing. Цю книгу можна було б написати за допомогою “ванільного” JavaScript або Java, або будь-якій кількості інших середовищ творчого кодування з відкритим кодом, таких як openFrameworks, Cinder тощо. Я сподіваюся, що після завершення цієї книги я зможу випустити версії прикладів, які працюють в інших середовищах. Якщо хтось зацікавлений у допомозі перенести приклади в інші середовища, будь ласка, зв’яжіться зі мною за email-адресою daniel@natureofcode.com. Сміливіше, я ж знаю, що ви ж хочете переробити приклади Природи Коду на PHP!

Усі приклади у цій книзі перевірено з p5.js версії 1.9.0, але здебільшого вони також повинні працювати й з попередніми версіями. Я підтримуватиму їх відносно останніх версій. Найновіший код завжди можна знайти на вебсайті цієї книги й пов’язаному з нею GitHub-репозиторії.

Що вам потрібно знати?

Передумовою для розуміння матеріалу цієї книги можна назвати “один семестр навчання програмуванню з p5.js, Processing або будь-яким іншим творчим середовищем кодування”. Проте, немає причин, щоб ви не могли прочитати цю книгу, вміючи програмувати іншою мовою або маючи інакше середовище розробки.

Хоча ви можете прочитати книгу, щоб ознайомитись з концепціями й отримати натхнення, але якщо ви ніколи раніше не писали жодної програми, то ймовірно, будете мати проблеми з кодом, оскільки я припускаю, що ви знаєте певні основи: змінні, умови, цикли, функції, об’єкти та масиви. Якщо ці поняття для вас нові, мої відеокурси “Код! Програмування за допомогою p5.js” і “Вивчення Processing” містять потрібні основи того, що потрібно знати.

Якщо ви досвідчений програміст, але не працювали з p5.js, ви, ймовірно, можете порозумітися з ним, ознайомившись з документацією p5.js, переглянувши приклади й прочитавши відповідну сторінку бібліотеки “Початок роботи”.

Я також повинен зазначити, що досвід об'єктно-орієнтованого програмування є досить критичним. Я розгляну деякі основи в Розділі 0, але якщо класи та об’єкти вам незнайомі, то пропоную переглянути мої відеоуроки про об’єктно-орієнтоване програмування із p5.js і Processing, які доступні на вебсайті Coding Train.

Як читати цю книгу?

Ви читаєте цю книгу на Kindle? Друковану версію? На вашому ноутбуці у форматі PDF? На планшеті відображається анімована версія HTML5? Ви сидите у кріслі, поглинаючи вміст безпосередньо у свій мозок через низку електродів, провідників і чіпів?

Моєю мрією завжди було написати цю книгу в єдиному форматі (у цьому випадку це збірка документів у Notion), а потім, після натискання чарівної кнопки (npm run build), отримати книгу в будь-якому форматі, який вам захочеться — PDF, HTML5, друковану копію, Kindle тощо. Це значною мірою стало можливим завдяки проєкту Magic Book — фреймворку з відкритим кодом для самостійного видавництва, спочатку розробленому в ITP Руном Медсеном і Стівом Клізом. Усе було розроблено та оформлено за допомогою CSS — без ручного набору чи макетів.

Реальність створення цієї книги не така вже й прозора, а історія того, як це сталося, довга. Якщо вам цікаво дізнатися більше, обов’язково прочитайте розділ подяк у книзі, а потім найміть людей, яким я подякував, щоб допомогти вам видати свою книгу! Я також додам більше деталей у пов’язаному GitHub-репозиторії.

Суть полягає в тому, що незалежно від того, у якому форматі ви читаєте книгу, матеріал залишається однаковим. Єдина різниця полягатиме в тому, як ви сприймете приклади коду — докладніше про це у розділі “Як читати код”.

Зв’язок із Coding Train

Особисто я все ще люблю зібрану суміш целюлозної маси, добре скріплену пружним корінцем, на якій пігментовані сполуки були майстерно нанесені для передачі слів та ідей. Проте з 2012 року, коли я імпульсивно записав свій перший відеоурок про програмування у своєму офісі в ITP, я виявив величезну цінність і радість у передачі ідей і уроків за допомогою рухомих зображень.

Все це означає, що я маю канал на YouTube під назвою Coding Train. Я згадував його раніше, коли обговорював варіанти вивчення базового матеріалу для цієї книги, і якщо ви продовжите читати, то побачите, що я продовжую посилатися на відповідні відео. У посиланнях я можу натякати на пов’язані алгоритми чи альтернативну техніку для конкретного програмного прикладу, або запропонувати серію дотичних концепцій, які могли б надати додатковий контекст досліджуваній темі.

Якщо відеонавчання для вас є кращим варіантом, я також працюю над супровідним набором відеоуроків, які містять той самий матеріал, що й ця книга. Я зробив цілу купу відповідних відео 10 років тому з використаннями Processing, а нещодавно почав публікувати оновлену серію із p5.js. На момент написання цієї сторінки я вже оновив відео до п’ятого розділу.

Додаткові ресурси

Існує також велика кількість унікального навчального матеріалу з моделювання і генеративних алгоритмів, які я не описав і якими не займався. Я завжди рекомендую вам досліджувати різні точки зору та думки, намагаючись дізнатися щось нове. Цілком можливо, що те, що я написав, може не сподобатися вам, і навіть те, що ви почуєте, як я повторюю ту саму інформацію у формі відео, незалежно від того, скільки я силкуюсь на камеру, не допоможе. Іноді найкраще — це хтось інший, з ким можна зв’язатися, щоб написати, поспілкуватись або продемонструвати ті самі поняття різними словами в іншому стилі. З цією метою я додам розділ “Додаткові ресурси” на вебсайт цієї книги. Якщо ви створюєте власні навчальні матеріали або маєте рекомендації щодо пропозицій, будь ласка, зв’яжіться зі мною!

Дві короткі рекомендації, які я маю прямо зараз, це “The Computational Beauty of Nature” Гарі Вільяма Флейка (MIT Press, 1998) — джерело з якого я початково дізнався про багато ідей для цієї книги — і чудово організований онлайн-ресурс Тару Мухонена і Рафаеля де Курвіля That Creative Code Page.

“Історія” цієї книги

Якщо ви поглянете на зміст книги, то помітите 12 розділів (0–11!), кожен з яких охоплює окрему тему. І в певному сенсі ця книга є саме цим — оглядом дюжини концепцій і відповідних прикладів коду. Проте, збираючи матеріал, я завжди уявляв собі щось на кшталт лінійного наративу. Перш ніж ви почнете читати, я хотів би розповісти вам цю історію.

Частина 1: Неживі об’єкти

У траві лежить футбольний м’яч. Удар ногою запускає його у повітря. Сила тяжіння тягне його назад. Сильний порив вітру утримує його у польоті ще на мить, поки він не впаде й відскочить від голови іншого гравця. Футбольний м’яч не живий, він не робить самостійного вибору щодо того, як рухатися цим світом. Скоріше, це неживий об’єкт, який чекає, коли його штовхнуть і потягнуть сили навколишнього середовища.

Як би ви змоделювали футбольний м’яч, що рухається на цифровому полотні? Якщо ви коли-небудь програмували коло, що рухається по екрану, то, мабуть, писали такий рядок коду:

x = x + 1;

Ви малюєте фігуру на позиції x. З кожним кадром анімації ви збільшуєте значення x, перемальовуєте фігуру і вуаля — відбувається ілюзія руху! Можливо, ви зробили на крок-два далі й включили позицію y, а також змінні для швидкості вздовж осей xx і yy:

x = x + xSpeed;

y = y + ySpeed;

Перша частина цієї історії розвине цю ідею ще далі. Дослідивши, як використовувати різні варіанти випадковості для керування рухом об’єкта (Розділ 0), я збираюся взяти ці змінні xSpeed і ySpeed та продемонструвати, як разом вони утворюють вектор (Розділ 1). Ви не отримаєте з цього жодної нової функціональності, але це створить ґрунтовну основу для програмування руху, що використовується у решті книги.

Коли ви трохи дізнаєтеся про вектори, то швидко зрозумієте, що сила (Розділ 2) є вектором. Ударяючи футбольний м’яч ви прикладаєте силу. Як сила впливає на об’єкт? Згідно з сером Ісааком Ньютоном, сила дорівнює масі, помноженій на прискорення, тому ця сила змушує об’єкт прискорюватися. Моделювання сил дозволить вам створювати системи з динамічним рухом, у яких об’єкти рухаються за різними правилами.

М’яч, до якого ви прикладали силу, може також обертатися. Якщо об’єкт рухається відповідно до свого лінійного прискорення, він може обертатися відповідно до свого кутового прискорення (Розділ 3). Розуміння основ кутів і тригонометрії дозволить вам моделювати об’єкти, що обертаються, а також зрозуміти принципи, що лежать в основі коливального руху, наприклад коливання маятника чи підстрибування пружини.

Коли ви ознайомитеся з основами руху і сил для окремого неживого об’єкта, я покажу, як створювати сотні тисяч таких об’єктів і керувати ними як єдиним цілим, що називається системою частинок (Розділ 4). Системи частинок також є хорошим приводом, щоб поглянути на деякі додаткові особливості об’єктно-орієнтованого програмування, а саме наслідування та поліморфізм.

Частина 2: Воно живе!

Що означає моделювати життя? Відповісти на запитання непросто, але я почну зі створення об’єктів, які мають здатність сприймати навколишнє середовище. Поміркуймо над цим. Коробка, яка падає зі столу, рухається відповідно до сил, як і дельфін, що пливе у воді. Але тут є ключова відмінність: коробка не може самостійно вирішити, що їй потрібно зістрибнути зі столу, тоді як дельфін може самостійно вирішити, що йому потрібно вистрибнути з води. У дельфіна є мрії та бажання. Він відчуває голод та страх і ці почуття визначають його рухи. Вивчаючи методи моделювання автономних агентів (Розділ 5), ви навчитеся вдихати життя у неживі об’єкти, дозволяючи їм приймати рішення щодо своїх рухів відповідно до їхнього розуміння навколишнього середовища.

У розділах з 1 по 5 усі приклади будуть написані “з нуля”, тобто код для алгоритмів, що керують рухом об’єктів, буде написаний безпосередньо з p5.js. Однак я, звісно, не перший програміст, який коли-небудь розглядав ідею фізичних симуляцій і життя в анімації, тому далі я покажу, як ви можете використовувати спеціальні фізичні бібліотеки (Розділ 6) для моделювання складнішої поведінки. Я розгляну особливості двох бібліотек: Matter.js і Toxiclibs.js.

Наприкінці Розділу 5 буде досліджено групову поведінку, яка проявляє властивості складності. Складну систему зазвичай визначають як систему, яка є більшою, ніж сума її частин. Хоча окремі елементи системи можуть бути неймовірно простими й легко зрозумілими, поведінка системи в цілому може бути дуже складною, розумною та важко передбачуваною. Погоня за складністю відведе вас від міркувань виключно про моделювання руху до сфери систем, заснованих на правилах. Що ви можете змоделювати за допомогою клітинних автоматів (Розділ 7) — систем клітин, що живуть у сітці? Які типи візерунків можна створити за допомогою фракталів (Розділ 8) — геометрії природи?

Частина 3: Розум

Ви змусили речі рухатися. Потім ви наділили ці речі надією, мріями й страхами разом із правилами, за якими треба жити. Останній крок у цій книзі дозволить вашим створінням приймати розумні рішення. Чи можете ви застосувати біологічний процес еволюції до обчислювальних систем (Розділ 9), щоб розвинути поведінку автономних агентів? Беручи натхнення від людського мозку, чи можете ви запрограмувати штучну нейронну мережу (Розділ 10)? Як агенти можуть приймати рішення, вчитися на своїх помилках і адаптуватися до свого середовища (Розділ 11)?

Використання цієї книги як навчальної програми

Хоча зміст цієї книги, безперечно, забезпечує інтенсивний і дуже стислий семестр, я розробив її так, щоб вона вписувалася у 14-тижневий курс. Я вважаю, що деякі розділи краще опрацювати, розтягнувши їх на кілька тижнів, тоді як інші можна об’єднати та дослідити разом протягом одного тижня. Ось одна з можливих програм:

Тиждень 1Випадковість і вектори (Розділи 0–1)
Тиждень 2Сили (Розділ 2)
Тиждень 3Коливання (Розділ 3)
Тиждень 4Системи частинок (Розділ 4)
Тиждень 5Автономні агенти (Розділ 5)
Тиждень 6Фізичні бібліотеки (Розділ 6)
Тиждень 7Середньосеместровий проєкт про рух
Тиждень 8Складні системи: клітинні автомати й фрактали (Розділи 7–8)
Тиждень 9Генетичні алгоритми (Розділ 9)
Тиждень 10Нейронні мережі та нейроеволюція (Розділи 10–11)
Тиждень 11Підсумкове обговорення проєкту
Тижні 12–13Семінар по фінальному проєкту
Тиждень 14Презентація фінального проєкту

Якщо ви плануєте використати цей текст для курсу чи семінару, зв’яжіться зі мною. Я сподіваюся зрештою закінчити супутній набір відео, а також включити корисні слайди у якості додаткових навчальних матеріалів. Якщо ви зробите свій власний курс або додаткові матеріали, я буду радий дізнатися про них!

Як читати код

Код є основним матеріалом і засобом вираження цієї книжки, який проходить через усю розповідь з її розборами й дослідженням. Іноді він виглядає як повний, самостійний приклад, іноді він представлений одним або двома рядками, а часто він розтягнутий на цілі розділи у вигляді багатьох коротких фрагментів із поясненнями, розташованими між ними. Яку б форму він не приймав, код завжди відображатиметься у моноширинному шрифті. Далі подано короткий посібник про те, як орієнтуватися в типах коду, розташованих у книзі.

Повні приклади коду

Кожен розділ містить повнофункціональні приклади коду, написані за допомогою бібліотеки p5.js. Ось як вони виглядають:

function setup() {

  createCanvas(640, 240);

Цей розмір полотна використовується для розміщення у макеті книги, але не є критичним для прикладів.

  background(255);

}


function draw() {

  fill(0, 25);

  stroke(0, 50);

  circle(random(width), random(height), 16);

Тут у функції draw() кожного разу малюється коло з випадковим положенням.

}

Приклади послідовно пронумеровані у кожному розділі, щоб допомогти вам знайти відповідний онлайн-код. У друкованій версії книги ви побачите знімок екрана прямо під назвою прикладу. Онлайн-версія містить програму, вбудовану прямо на сторінці. Для анімованих прикладів (а це майже всі) на їх екранних знімках часто буде видно “слід” від руху. Цей ефект був досягнутий шляхом додавання певної прозорості при виклику функції фонової заливки background(255, 10), хоча супровідний код не включатиме цього ефекту.

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

Ви можете знайти повну версію коду на вебсайті книги. Там ви можете взаємодіяти, змінювати й експериментувати з кодом у вебредакторі p5.js. Крім того, все включено у GitHub-репозиторії книги. Ось посилання на всі матеріали:

  • Вебсайт книги містить повний текст книги, додаткову літературу і посилання, а також усі приклади коду.
  • GitHub-репозиторії містять вихідний код для вебсайту книги, процесу створення книги й всі приклади коду.
  • Окрім вебсайту та GitHub-репозиторіїв, ви також можете отримати доступ до коду, переглянувши список програм у вебредакторі p5.js.

Зверніть увагу, що у прикладі я використав коментарі для пояснення того, що відбувається у коді. Ці коментарі розташовані поруч із кодом (хоча їх вигляд може відрізнятися залежно від того, де ви читаєте книгу). Фонове затінення групує коментарі з відповідними рядками коду.

Довершені фрагменти коду

Зрідка частини повного коду чергуються з основним текстом. Іноді, як у попередньому зразку “Приклад #.#” я можу показати повний код, пов’язаний із повною програмою p5.js. Однак у більшості випадків я розглядаю “довершений” фрагмент цілої функції або класу — повністю готовий блок коду, разом із початковими й завершальними фігурними дужками та усім, що міститься між ними. Щось на зразок цього:

function draw() {
  background(255);
  for (let x = 0; x < width; x += spacing) {
    fill(255);
    circle(x, height / 2, spacing);
  }
}

Повна функція draw() для прикладу.

Цей фрагмент показує всю функцію draw(), але він не являє собою повну програму. Фрагмент припускає існування глобальної змінної під назвою spacing, а також функції setup(), яка викликає функцію createCanvas().

Контекстно-незалежний код

Час від часу на сторінці можна побачити рядки коду без відповідної функції чи контексту. Ці фрагменти існують, щоб проілюструвати тезу, а не обов’язково використовувати їх як є. Вони можуть представляти концепцію, маленьку частину алгоритму або підхід програмування:

    fill(240, 99, 164);

RGB-значення, щоб зробити коло рожевими.

Зверніть увагу, що цей контекстно-незалежний фрагмент має такий самий відступ як у рядку коду fill(255) з попереднього “довершеного” фрагменту. Я робитиму так, коли такий код є частиною чогось, що було продемонстровано раніше. Правда, це не завжди буде так очевидно чи прозоро, але я зроблю для цього все можливе!

Фрагмент коду

Стежте за ножицями! Цей елемент оформлення вказує на те, що фрагмент коду є продовженням попереднього фрагмента або його буде продовжено після деякого пояснювального тексту. Іноді він насправді не продовжується, а просто обрізається, оскільки весь код не має відношення до відповідного обговорення. Ножиці потрібні для того, щоб сказати: “Агов, цей фрагмент коду може бути частиною чогось більшого, він може мати свій початок вище або продовження нижче!” Ось як це може виглядати з основним текстом навколо:

Першим кроком до написання програми p5.js є створення полотна:

function setup() {

  createCanvas(640, 240);

Потім час намалювати фон:

  background(255);

Я також хочу намалювати у центрі полотна коло:

  circle(width / 2, height / 2, 200);

}

Можливо у функції draw() я захочу почати розміщувати квадрати у випадкових місцях поверх фону і фіксованого кола. Решта коду може бути якою завгодно!

function draw() {

  rectMode(CENTER);

  square(random(width), random(height), 20);

Зверніть увагу, що я зберігаю відступи послідовними, щоб спробувати встановити контекст і використовую піктограму ножиць, щоб вказати, де код продовжується або обрізається.

Особливим побічним ефектом використання фрагментованого коду є те, що ви часто бачитимете фігурні дужки, що відкриваються в одному фрагменті, які не мають відповідної дужки, що закривається, у кількох наступних фрагментах (якщо такі взагалі будуть). Якщо ви звикли дивитися на цільний код JavaScript, то спочатку це може викликати у вас легку паніку, але, сподіваюся, ви звикнете.

Вправи

Кожен розділ містить пронумеровані вправи, які служать вашим майданчиком для запуску прикладів, експериментів і виходу за рамки концепцій і коду, наданих у розділах. Ось як може виглядати вправа:

Вправа #.#

Спробуйте налаштувати приклад #.# так, щоб кожне коло мало випадковий розмір:

function draw() {

  fill(0, 25);

  stroke(0, 50);

  circle(random(width), random(height), random(16, 64));

}

Щоб тримати вас у формі, вправи доступні у різних форматах. Деякі створюють технічні виклики, пропонуючи написати варіант певного алгоритму або вирішити дуже специфічну проблему. Інші — це відкриті запити, які спонукають вас грати й експериментувати, дотримуючись власних ідей. Деякі містять фрагменти коду з пробілами, запрошуючи вас заповнити їх напряму. Під час роботи з вправами, не соромтеся писати, робити нотатки або малювати прямо у цій книзі!

Рішення вправ

Розв’язки вправ подано на сайті книги. Принаймні я прагну включити рішення для усіх вправ. На цей час доступно лише кілька, але, сподіваюся, до того часу, як ви це читатимете, їх буде набагато більше. Якщо ви хочете розв’язати якусь вправу і поділитися своїм рішенням, я буду радий, якщо ви зробите це через GitHub-репозиторій книги!

Проєкт “Екосистема”

Як би я не бажав, щоб ви змогли навчитися всьому, добре всівшись у зручному кріслі й просто читаючи книгу з програмування, вам для навчання справді доведеться трохи програмувати. Вправи, розміщені у кожному розділі, є початком, але вам може бути корисно також мати на увазі більш суттєву ідею проєкту (або дві), яку ви зможете розвивати, переходячи від розділу до розділу. Насправді викладаючи свій курс “Природа Коду” в ITP, я часто помічав, що студентам подобається створювати єдиний проєкт, крок за кроком, тиждень за тижнем, протягом семестру.

Наприкінці кожного розділу ви знайдете серію підказок для одного такого проєкту з відповідними вправами, які будуються одна на одній, по одній темі за раз. Цей проєкт базується на наступному сценарії. Науковий музей попросив вас розробити програмне забезпечення для нової виставки Цифрової Екосистеми, світу анімованих процедурних створінь, які живуть у комп’ютерній симуляції, щоб відвідувачі могли насолоджуватися ними, коли вони заходять до музею. Я не претендую на думку, що це особливо інноваційна чи творча концепція. Натомість я використаю цей приклад ідеї проєкту “Екосистема” як буквальне представлення концепту книги, демонструючи, як елементи можуть поєднуватися в одній програмі. Я закликаю вас розвинути власну ідею, яка, можливо буде більш абстрактною і творчою.

Як отримати допомогу і надіслати відгук

Програмування може бути важким й інколи розчаровувати своїми перепонами, а ідеї у цій книзі не завжди прості. І у цій подорожі ви не повинні залишатись на самоті. Ймовірно, зараз є ще хтось, хто читає книгу і хотів би спільно організувати навчальну групу чи книжковий клуб, де ви можете зустрічатися, спілкуватися і ділитися своїми труднощами та успіхами. Якщо ви не знайдете місцеву спільноту для спільної подорожі, як щодо онлайн-спільноти? Два місця, які я б запропонував, це офіційний форум Processing і Discord сервер Coding Train.

Я вважаю онлайн-версію цієї книги живим документом і чекаю на ваші відгуки. Щоб дізнатися про все, що стосується книги, відвідайте вебсайт “Природи Коду”. Вихідний текст книги й усі ілюстрації знаходяться на GitHub. Якщо вам є що сказати, будь ласка, залиште свій відгук або надішліть виправлення, використовуючи GitHub-issues.

Не менш важливою можливістю є змога поділитися своїми ідеями, надіславши відповідну заявку на вебсайті Coding Train, або в каналах вищезгаданого Discord. Привітання в коментарях на YouTube завжди вітається і не соромтеся позначати мене на будь-якій платформі, яку запропонує майбутнє соціальних медіа! Я хочу насолоджуватися всіма створіннями, які існуватимуть у вашій екосистемі. Незалежно від того, чи вони тріумфально перестрибують хвилі творчості, чи роблять крихітні сплески у ставку навчання. Потішимось брижами, які вони посилають через природу коду!