Much in software engineering is based on what you make. What is your product? What did you ship? This is flawed thinking. Sometimes exploration is it’s own reward and the dividends get paid much later.
When I was in 9th grade, I convinced my dad to buy me a toolkit for the Apple II called Bill Budge’s 3D Graphics System. The manual is here. For the time and the capabilities of the Apple, this was an astounding piece of software. Budge provided an editor for 3D shapes, a library for displaying them, and interfacing for the library in Integer Basic, Applesoft Basic, and assembly language. Neat!
I had an idea for a game called virus. It involved a virus that lands on a cell wall and you controlled a turret that shot antibodies at the virus. If you broke down the virus in time, no problem. If you didn’t the top would crack open and create new viruses. I never finished it. And that was probably for the best. The game concept was missing a lot. It was not particularly a playable idea, although I imagine that it might work as a framework for a game in the tower defense genre.
I was shaken that I couldn’t finish this game and that I couldn’t think of another game that fit in this genre. I was also frustrated at the performance in Basic and I had a rough time getting anything solid in assembly language. Really, I was overly hard on myself.
What I didn’t know at the time was how my experience was going to affect me later. 4 years later in college, I created a 3D graphics application in MacPascal that ran on the original Mac. It turned out to be a stretch for the system. I discovered bugs and limitations in MacPascal, I learned about issues with clipping and problems with divide by zero in perspective transformations. Still, it worked.
While I didn’t know it at the time, Budge’s library was based on a display list – this is a cool concept that allows either a self-drawing entity or a structure that can be ripped with a fairly simple state machine. I’ve used display lists in a number of projects. DotPDF uses display lists internally to represent page contents.
So yes, in my youth, it was easy to give myself grief for not finishing a little game, but that was only because I didn’t know the true value of the learning experience that I would carry forward. So I don’t dwell long on abandoned projects, but I do celebrate what I have learned.