The Nature of Code

Brought by: Kadenze

Overview

Can we capture the unpredictable evolutionary and emergent properties of nature in software? Can understanding the mathematical principles behind our physical world help us to create digital worlds? This class focuses on the programming strategies and techniques behind computer simulations of natural systems. We explore topics ranging from basic mathematics and physics concepts to more advanced simulations of complex systems. Subjects covered include physics simulation, trigonometry, fractals, cellular automata, self-organization, and genetic algorithms. Examples are demonstrated using the p5.js environment with a focus on object oriented programming.

Video featuring original artwork in P5.js by:
Particle Equalizer #1 by Sehyun Kim
Look at me! by Muqing Niu
Dancing Spring by Yue Hu
FireWork by Yue Hu
Nature Of Code final at ITP by Joe_Mango
Nature of Code - midterm by Marcela Nowak
Sound And Motion Coding by Marcela Nowak


Syllabus

Session 1: Introduction / Overview 
In this session we’ll review the basics of p5.js and get everyone up and running with posting sketches online. We’ll look at how object-oriented programming works in JS and create simple sketches of objects moving around a canvas. Session 2: Vectors / Forces 
This session will look at the concept of a vector and implement sketches using a p5.Vector object. By creating objects with vectors for position, velocity, and acceleration, we’ll build a simple “hello world” physics engine. Session 3: Steering Behaviors 
This session, we’ll examine a special kind of force (pioneered by Craig Reynolds) — a steering force — that moves an object according to its own goals or desires. Examples are wandering, seeking a target, path following, obstacle avoidance, and more. We’ll then look at how group behaviors can be simulated by combining multiple steering behaviors according to local interactions between objects. Session 4: Fractals 
In this session we will cover the concept of a fractal and look at ways of generating fractal patterns with code. Session 5: Genetic Algorithms 
This session will look at the key concepts of Darwinian evolution — variation, selection, heredity — and examine how they can be applied in a computer simulation.

Taught by

Daniel Shiffman

The Nature of Code
Go to course

The Nature of Code

Brought by: Kadenze

  • Kadenze
  • Free
  • English
  • Certificate Available
  • Available at any time
  • intermediate
  • N/A
8.1.2PHP Version321msRequest Duration2MBMemory UsageGET en/courses/{slug}Route
    • Booting (203ms)
    • Application (117ms)
    • 1 x Booting (63.34%)
      203.38ms
      1 x Application (36.41%)
      116.91ms
      14 templates were rendered
      • public.courses.show (resources/views/public/courses/show.blade.php)3bladefile
        Params
        0
        course
        1
        links
        2
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.courses.partials.details (resources/views/public/courses/partials/details.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.layouts.main (resources/views/public/layouts/main.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.meta (resources/views/public/layouts/partials/meta.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.navbar (resources/views/public/layouts/partials/navbar.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.links (resources/views/public/auth/profile/partials/links.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.layouts.partials.flash-session (resources/views/public/layouts/partials/flash-session.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      uri
      GET en/courses/{slug}
      middleware
      web, localize:en
      controller
      App\Http\Controllers\CourseController@show
      as
      en.courses.show
      namespace
      prefix
      /en
      where
      file
      app/Http/Controllers/CourseController.php:17-35
      6 statements were executed4.03ms
      • select * from `courses` where `slug_en` = 'the-nature-of-code' limit 1
        2.96ms/app/Http/Controllers/CourseController.php:20corspedia
        Metadata
        Bindings
        • 0. the-nature-of-code
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:20
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • update `courses` set `visitors` = `visitors` + 1, `courses`.`updated_at` = '2025-02-20 05:41:52' where `id` = 322
        270μs/app/Http/Controllers/CourseController.php:21corspedia
        Metadata
        Bindings
        • 0. 2025-02-20 05:41:52
        • 1. 322
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:21
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `topic_id`, `slug_en`, `slug_ar` from `subjects` where `subjects`.`id` in (6)
        200μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `slug_en`, `slug_ar` from `topics` where `topics`.`id` in (1)
        170μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 25. /app/Http/Controllers/CourseController.php:23
        • 26. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 27. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 28. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 29. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `providers` where `providers`.`id` in (5) and `providers`.`deleted_at` is null
        190μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `html_files` where `html_files`.`id` = 316 limit 1
        240μs/app/Models/Course.php:84corspedia
        Metadata
        Bindings
        • 0. 316
        Backtrace
        • 21. /app/Models/Course.php:84
        • 28. view::public.courses.show:29
        • 30. /vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:125
        • 31. /vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:58
        • 32. /vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:72
      App\Models\HtmlFile
      1
      App\Models\Provider
      1
      App\Models\Topic
      1
      App\Models\Subject
      1
      App\Models\Course
      1
        _token
        inFJ6Jp9g6C94VtzPUTrCPJfgU4GQp3gW1HQOPyD
        locale
        en
        _previous
        array:1 [ "url" => "https://www.corspedia.com/en/courses/the-nature-of-code" ]
        _flash
        array:2 [ "old" => [] "new" => [] ]
        PHPDEBUGBAR_STACK_DATA
        []
        path_info
        /en/courses/the-nature-of-code
        status_code
        200
        
        status_text
        OK
        format
        html
        content_type
        text/html; charset=UTF-8
        request_query
        []
        
        request_request
        []
        
        request_headers
        0 of 0
        array:24 [ "sec-ch-ua-mobile" => array:1 [ 0 => "?0" ] "sec-ch-ua" => array:1 [ 0 => ""HeadlessChrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"" ] "cache-control" => array:1 [ 0 => "no-cache" ] "pragma" => array:1 [ 0 => "no-cache" ] "cdn-loop" => array:1 [ 0 => "cloudflare; loops=1" ] "priority" => array:1 [ 0 => "u=0, i" ] "upgrade-insecure-requests" => array:1 [ 0 => "1" ] "user-agent" => array:1 [ 0 => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" ] "cf-connecting-ip" => array:1 [ 0 => "13.59.206.196" ] "accept" => array:1 [ 0 => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ] "sec-fetch-site" => array:1 [ 0 => "none" ] "cf-visitor" => array:1 [ 0 => "{"scheme":"https"}" ] "sec-fetch-mode" => array:1 [ 0 => "navigate" ] "sec-fetch-user" => array:1 [ 0 => "?1" ] "x-forwarded-proto" => array:1 [ 0 => "https" ] "cf-ipcountry" => array:1 [ 0 => "US" ] "accept-encoding" => array:1 [ 0 => "gzip, br" ] "sec-fetch-dest" => array:1 [ 0 => "document" ] "sec-ch-ua-platform" => array:1 [ 0 => ""Windows"" ] "x-forwarded-for" => array:1 [ 0 => "13.59.206.196" ] "cf-ray" => array:1 [ 0 => "914c2b855fb1c365-ORD" ] "host" => array:1 [ 0 => "www.corspedia.com" ] "content-length" => array:1 [ 0 => "" ] "content-type" => array:1 [ 0 => "" ] ]
        request_server
        0 of 0
        array:50 [ "USER" => "www-data" "HOME" => "/var/www" "HTTP_SEC_CH_UA_MOBILE" => "?0" "HTTP_SEC_CH_UA" => ""HeadlessChrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"" "HTTP_CACHE_CONTROL" => "no-cache" "HTTP_PRAGMA" => "no-cache" "HTTP_CDN_LOOP" => "cloudflare; loops=1" "HTTP_PRIORITY" => "u=0, i" "HTTP_UPGRADE_INSECURE_REQUESTS" => "1" "HTTP_USER_AGENT" => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" "HTTP_CF_CONNECTING_IP" => "13.59.206.196" "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" "HTTP_SEC_FETCH_SITE" => "none" "HTTP_CF_VISITOR" => "{"scheme":"https"}" "HTTP_SEC_FETCH_MODE" => "navigate" "HTTP_SEC_FETCH_USER" => "?1" "HTTP_X_FORWARDED_PROTO" => "https" "HTTP_CF_IPCOUNTRY" => "US" "HTTP_ACCEPT_ENCODING" => "gzip, br" "HTTP_SEC_FETCH_DEST" => "document" "HTTP_SEC_CH_UA_PLATFORM" => ""Windows"" "HTTP_X_FORWARDED_FOR" => "13.59.206.196" "HTTP_CF_RAY" => "914c2b855fb1c365-ORD" "HTTP_HOST" => "www.corspedia.com" "REDIRECT_STATUS" => "200" "SERVER_NAME" => "corspedia.com" "SERVER_PORT" => "443" "SERVER_ADDR" => "141.95.147.152" "REMOTE_USER" => "" "REMOTE_PORT" => "42278" "REMOTE_ADDR" => "172.69.17.21" "SERVER_SOFTWARE" => "nginx/1.18.0" "GATEWAY_INTERFACE" => "CGI/1.1" "HTTPS" => "on" "REQUEST_SCHEME" => "https" "SERVER_PROTOCOL" => "HTTP/2.0" "DOCUMENT_ROOT" => "/var/www/corspedia/public" "DOCUMENT_URI" => "/index.php" "REQUEST_URI" => "/en/courses/the-nature-of-code" "SCRIPT_NAME" => "/index.php" "CONTENT_LENGTH" => "" "CONTENT_TYPE" => "" "REQUEST_METHOD" => "GET" "QUERY_STRING" => "" "SCRIPT_FILENAME" => "/var/www/corspedia/public/index.php" "PATH_INFO" => "" "FCGI_ROLE" => "RESPONDER" "PHP_SELF" => "/index.php" "REQUEST_TIME_FLOAT" => 1740030111.8252 "REQUEST_TIME" => 1740030111 ]
        request_cookies
        []
        
        response_headers
        0 of 0
        array:5 [ "content-type" => array:1 [ 0 => "text/html; charset=UTF-8" ] "cache-control" => array:1 [ 0 => "no-cache, private" ] "date" => array:1 [ 0 => "Thu, 20 Feb 2025 05:41:52 GMT" ] "set-cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6InRRNC83ek9EL2NiamdCVUUxVzVPQ2c9PSIsInZhbHVlIjoiblVtTWVmRy9qQlNvaDdlZ3hxSy9oUVBOTUVDSzZ2ZHZvZEU5bmUyZGgydlZnbFhzb2JlS0lTRis4OXVRQVlWVVc5RWhqeVFTTGV2UkY4NnRTYU54cWNIQ3hZall4RmlMQ0cwWVhQblM0ZElpc1dtQ1lmaHlTZVhXeWU2bW85MzIiLCJtYWMiOiIzYTJjZDk3N2I4YWI0MWJhZTExOGJmYmFiOWY2ZTBjNTE4ZGQwOGQwYmJjMzRmYzU4MWIzN2U2YjkzYWJhZGRjIiwidGFnIjoiIn0%3D; expires=Thu, 20 Feb 2025 07:41:52 GMT; Max-Age=7200; path=/; samesite=laxXSRF-TOKEN=eyJpdiI6InRRNC83ek9EL2NiamdCVUUxVzVPQ2c9PSIsInZhbHVlIjoiblVtTWVmRy9qQlNvaDdlZ3hxSy9oUVBOTUVDSzZ2ZHZvZEU5bmUyZGgydlZnbFhzb2JlS0lTRis4OXVRQVlWVVc5RWhqe" 1 => "laravel_session=eyJpdiI6IjBkTU5rZCtQWlFrWnpseXJPdytDVFE9PSIsInZhbHVlIjoicFgyR3FyeDZQTTlvcG1iaVRmMitnOGlYelRyQ2xaV2RlL2EyT1R2a0xWejFScVZIQkNTbmxNY3Zkdkx5ZWVwRzJTWUJ1bDZyWEpPaGF3djFGK1JYYnpuOGVGL2lWZVFSamNDbFNxR2p2TFNRa1VMaE1YTnRibnR0SkFaSG9nQ1oiLCJtYWMiOiJkOTRjYThlMmM5YTlmZDIxN2UxYTk1YTUwNDc2NGNiZjljNmJjY2UyZDdkNGEyODRlNDhhNTRlZGEwMDBiMjkwIiwidGFnIjoiIn0%3D; expires=Thu, 20 Feb 2025 07:41:52 GMT; Max-Age=7200; path=/; httponly; samesite=laxlaravel_session=eyJpdiI6IjBkTU5rZCtQWlFrWnpseXJPdytDVFE9PSIsInZhbHVlIjoicFgyR3FyeDZQTTlvcG1iaVRmMitnOGlYelRyQ2xaV2RlL2EyT1R2a0xWejFScVZIQkNTbmxNY3Zkdkx5ZWVwRzJT" ] "Set-Cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6InRRNC83ek9EL2NiamdCVUUxVzVPQ2c9PSIsInZhbHVlIjoiblVtTWVmRy9qQlNvaDdlZ3hxSy9oUVBOTUVDSzZ2ZHZvZEU5bmUyZGgydlZnbFhzb2JlS0lTRis4OXVRQVlWVVc5RWhqeVFTTGV2UkY4NnRTYU54cWNIQ3hZall4RmlMQ0cwWVhQblM0ZElpc1dtQ1lmaHlTZVhXeWU2bW85MzIiLCJtYWMiOiIzYTJjZDk3N2I4YWI0MWJhZTExOGJmYmFiOWY2ZTBjNTE4ZGQwOGQwYmJjMzRmYzU4MWIzN2U2YjkzYWJhZGRjIiwidGFnIjoiIn0%3D; expires=Thu, 20-Feb-2025 07:41:52 GMT; path=/XSRF-TOKEN=eyJpdiI6InRRNC83ek9EL2NiamdCVUUxVzVPQ2c9PSIsInZhbHVlIjoiblVtTWVmRy9qQlNvaDdlZ3hxSy9oUVBOTUVDSzZ2ZHZvZEU5bmUyZGgydlZnbFhzb2JlS0lTRis4OXVRQVlWVVc5RWhqe" 1 => "laravel_session=eyJpdiI6IjBkTU5rZCtQWlFrWnpseXJPdytDVFE9PSIsInZhbHVlIjoicFgyR3FyeDZQTTlvcG1iaVRmMitnOGlYelRyQ2xaV2RlL2EyT1R2a0xWejFScVZIQkNTbmxNY3Zkdkx5ZWVwRzJTWUJ1bDZyWEpPaGF3djFGK1JYYnpuOGVGL2lWZVFSamNDbFNxR2p2TFNRa1VMaE1YTnRibnR0SkFaSG9nQ1oiLCJtYWMiOiJkOTRjYThlMmM5YTlmZDIxN2UxYTk1YTUwNDc2NGNiZjljNmJjY2UyZDdkNGEyODRlNDhhNTRlZGEwMDBiMjkwIiwidGFnIjoiIn0%3D; expires=Thu, 20-Feb-2025 07:41:52 GMT; path=/; httponlylaravel_session=eyJpdiI6IjBkTU5rZCtQWlFrWnpseXJPdytDVFE9PSIsInZhbHVlIjoicFgyR3FyeDZQTTlvcG1iaVRmMitnOGlYelRyQ2xaV2RlL2EyT1R2a0xWejFScVZIQkNTbmxNY3Zkdkx5ZWVwRzJT" ] ]
        session_attributes
        0 of 0
        array:5 [ "_token" => "inFJ6Jp9g6C94VtzPUTrCPJfgU4GQp3gW1HQOPyD" "locale" => "en" "_previous" => array:1 [ "url" => "https://www.corspedia.com/en/courses/the-nature-of-code" ] "_flash" => array:2 [ "old" => [] "new" => [] ] "PHPDEBUGBAR_STACK_DATA" => [] ]