alexkarle.com

Source for alexkarle.com
git clone git://git.alexkarle.com/alexkarle.com.git
Log | Files | Refs | README | LICENSE

creative-coding.txt (1919B) [raw]


      1 # Learning Through Creative Limitation
      2 
      3 _Published: July 18, 2021_
      4 
      5 I was talking to a friend recently about hobby coding and ways to
      6 code creatively.  In the course of that conversation, I was able to
      7 put a name to one of my favorite tactics: creative limitation.
      8 
      9 A quick internet search seems to associate the term with Phil
     10 Hansen and more traditional art, but I think it applies nicely to
     11 coding too.  For example, with this site, I've chosen to restrict
     12 the tech stack to the OpenBSD base system. It wasn't the initial
     13 goal (which was to learn mdoc(7)), but I quickly realized that
     14 restricting to base would give me a better chance to learn base.
     15 
     16 Overall, I'd call it a success.  The [Jam Tuesday](/jam-tuesday)
     17 setlist project gave me a chance to learn some
     18 [sh(1)](https://man.openbsd.org/sh.1) and
     19 [sed(1)](https://man.openbsd.org/sed.1), and my [blog](.)
     20 was a [chance to learn mdoc(7)](/blog/my-old-man.html),
     21 and the site's build system helped me brush up on BSD
     22 [make(1)](https://man.openbsd.org/make.1).
     23 
     24 I'd encourage you to try it -- set an arbitrary restriction and see
     25 where it takes you!  Here's a few ideas to get you started:
     26 
     27 - Write your own X window manager in as few lines of code as you can
     28 - Write a version control system with
     29   [sh(1)](https://man.openbsd.org/sh.1),
     30   [diff(1)](https://man.openbsd.org/diff.1), and
     31   [patch(1)](https://man.openbsd.org/sh.1)
     32 - Write a blogging engine updated via email
     33 - Write your own templating language (and parser)
     34 
     35 The goal, for me, is to choose a challenging project that helps me
     36 understand a technology I use daily but may take for granted
     37 (windowing systems, VCS, email, parsers, etc).
     38 
     39 Restricting size helps understand what the core definition of a
     40 technology is.  Building clones can help teach edge cases and
     41 design decisions one might otherwise overlook.  And in all cases,
     42 it's a good chance to learn a new language!
     43 
     44 [Back to blog](/blog)