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)