When I started writing articles on my site, sometimes I had great results, like writing the hexagonal grid guide in 6 weeks, and sometimes I had terrible results, like writing article about curved roads in 5 months. I eventually realized that the difference was that with hexagons, I understood the topic well, but with curved paths, I spent most of the time trying to understand the topic. To make matters worse, because I had a high standard for my articles, I spent too much time trying to polish the article about curved paths, even before I understood it well.
Back in 2013 I decided to create a separate directory /x/YYWW-name/ where I'd put the lower effort and experimental pages, numbered by year and week. For example, 1942-isometric
means year 2019, week 42. Over the last few years I've realized I do two different types of projects:
- fixed scope, variable time, usually focused on explaining something
- variable scope, fixed time, usually focused on learning or understanding something
The fixed time articles typically go into /x/. An unexpected benefit of these short unpolished experiments is that sometimes it lets me explore a set of topics that comes together into a larger polished project. The best example of this is my map generation work in 2017–2018. Back in 2017 I had started experimenting with map generation topics:
- 1721-read-painted-map - I played around with the idea of reading a jpg file with a map, and turning it into a game map. This was an "experimentation" project.
- 1721-voronoi-alternative - I took a look at the modified voronoi structure I used in my "polygon map generation" project. That project was an "explanation" project, and this was an "understanding" project.
- 1722-b-rep-triangle-meshes - I had gone to a GDC talk about 3d triangle meshes, and thought this might help me with the 2d map generation projects I wanted to try. This was a "learning" project.
- 1722-delaunay-map-import - I combined the previous projects into something that read in a file and overlaid it on a triangle mesh.
- 1723-procedural-river-growing - I learned how to represent rivers in the mesh data structure.
- 1724-elevation-from-rivers and 1725-procedural-elevation - I had read a paper about generating rivers before mountains, and wanted to try implementing something inspired by it.
- 1728-elevation-control and 1729-generate-details - Instead of reading a jpg file with a map, I wanted to implement some ideas for directly painting a map.
- 1730-terrain-shader-experiments and 1730-terrain-shader-experiments/noisy-hex-rendering.html - I learned a bit about shaders and how I might be able to use them for map rendering.
- 1730-webgl-particles and 1731-wind-patterns - I wanted to experiment with wind simulation, but didn't get very far, and instead just made something that looked neat.
- 1733-sine-wave-terrain - I experimented with sine waves for terrain generation; it didn't work so well.
- 1733-territory-assignment and 1744-territory-outline - I wanted to mark regions of a map.
- 1736-resource-placement - I wanted to place natural resources like iron and gold.
- 1740-map-painter - I wanted to improve my painting code to work directly on the mesh data structure instead of on a pixel grid.
- 1742-webgl-mapgen2 and 1745-rotmg-maps-webgl and 1746-headless-gl - I brought things together and experimented with map rendering.
This structure let me try things quickly, and also abandon things quickly. Those of you who know garbage collection algorithms know that there are two general strategies: throw away the garbage, or keep the non-garbage. In my regular projects I follow the "throw away garbage" strategy, but in this experimental folder I follow the "keep non-garbage" strategy. Things that work I can copy into a new project. Things that fail I leave alone. When I wanted to produce mapgen4 in 2018, I went back through these small projects and picked the parts I could use, and turned that into a new big project.
People ask me if I share links to all the /x/ pages. I don't do this because I found that by not sharing at first, it increases how much I write. I don't start every page worrying about how to explain something, or cross-browser compatibility, or making things work on any machine other than my own. If something works out, I can then fix it up and share it. Many things don't work out, and then I can abandon them quickly. This strategy has been extraordinarily successful at getting me to write more. I started these in 2013, with 7 pages, and then 11 in 2014, 20 in 2015, 24 in 2016, 33 in 2017, 36 in 2018, and 27 in 2019 so far. The downside is that it's so much easier to write the /x/ pages that I am not making many of the regular pages. I'm annoyed with myself for that but I'm just going to have to accept it for now.
Update: [2023-04-27] I ended up doing 32 in 2019, 18 in 2020, 25 in 2021, 28 in 2022. Roughly half the weeks I have one of these projects going on. I use the time-limited scope-unlimited projects to expand the set of things I can do. I use the scope-limited time-unlimited projects to put together the things I've learned into a bigger project. The combination of the two types of projects has worked very well for me.
Post a Comment