Programming as Play
austinhenley.com
austinhenley.com
I have even picked up a new hobby of 3D modeling. Will I put that and programming together to make a game? Maybe! Will I ever release the game? Who knows? Will I have fun making it in the mean time? Definitely.
Q: What software domain did I want to work in?
A: 3D graphics. More specifically developing a graphics platform for exploratory programming. An IDE for 3D production, I called it.
Q: What tools did I want to use?
A: Common Lisp. The most enjoyable and painless programming language I have encountered. And harking back to my early days as a developer in my college days.
Q: How did I want to see the software evolve over time?
A: I wanted to attract others to it and be a part of a team. Build something bigger than just myself. So I ventured into the world of GitHub and open sourced it.
Q: How to maintain motivation?
A: Partly by gathering a team so we can motivate each other, and partly by keeping the goals of the system open and working on whatever interested me at the time (sweep extrusions, particle systems, behavioral animation, ...).
So how has it worked out so far? As always, time will tell, but pretty well so far, I think. The project has kept me interested and is coming along nicely. There is no end in site, which is a good thing. It has provided a structure to my days and an optimism about where it might lead, and who may find it useful.
For a while, before I open sourced it, I wrote a blog about the project: https://medium.com/@kaveh808
Why would you have side projects that weren't fun? They are hobbies, right?
From this perspective my time is spent on: - Work: mostly fun, in my case - Recreation (camping, biking, reading, programming, hanging out...): basically 100% fun, else I don't do them. - Obligations: cleaning, cooking, going to the toilet, attending parties I don't want to be am required to... not fun for me.
My point is these small fun projects kept me young.
But yeah, I've definitely had projects I've written purely for fun, or as a "I wonder how well I could code this..."
Sometimes, my project has been "This shouldn't work, but I want to see if it somehow does". An example of this was trying to use a neural network that would figure out a single bit of a private key given a Bitcoin address. I generated a testing set of 1000 public/private key pairs, then would do a loop of generating a training set of 1000 key pairs, training until it could predict the last bit correctly 75% of the time, and then testing on the testing set, then generating another training set and beginning the loop again. I let it run for a full week before terminating it. I think the best it got was 57% accuracy, and really, that was a fluke. It typically was 47-53% accurate, which is what I would expect. I never got better than a coin flip.
Stuff like PICO-8 and TIC-80 are great and are _almost there_ in my opinion. If you took those and made their whole API available from their immediate modes, as well as make their immediate modes aware of the program you've typed in their code editors so you can call your program's defined functions from the immediate modes, I think you'd have something really special.
>print(“Hello world!”)
unknown command: print(“hello
It’s the same for variations with spaces and without brackets.
The same applies for functions defined in my program, with the sample cart loaded:
>tic
unknown command: tic
The same applies with brackets also.
And I frequently ask, in interviews, what sort of programming candidates do in the spare time. It seems completely sensible to me to take play projects as a sign that candidates love what they do; and if they love what they do, they are invariably going to be better at it.
Typically, my play projects are a bit larger than what you are doing. My most recent play project was a a guitar pedal that runs on a Raspberry Pi that can be controlled via Wi-Fi from a phone.
https://play.google.com/store/apps/details?id=com.twoplay.pi...
https://rerdavies.github.io/pipedal/
Professional development benefits I accrued while working on this project:
- learn TypeScript
- learn React Framework
- experience with optimizing C++ code for ARM processors
- learning that GCC auto-vectorization consistently produces faster code than hand-rolled ARM NEON assembler (but only with the right pragmas).
- experimentation with design of adaptive, complex touch user interfaces.
- using ML techniques for real-time audio processing.
I have given thought to monetizing the project; but I really don't think there's a huge opportunity, without a 6-figure investment. And I really don't think it's the sort of product that's going to make me a multi-millionaire. For the most part, it was done because it is beautiful, and it is useful, and it gave me more than adequate joy to compensate for the effort put into it.
Over my entire career, I've probably done about a dozen of these sorts of projects. Three of them were eventually released as shareware projects that earned 5-figures-ish over their entire lifetimes; one of them actually was used as a foundation for a startup. But all of them were done for joy not money.
From my perspective, if I'm interviewing a candidate that is coding in his spare time, for the sheer joy of it, that is a Very Good Sign that I'm going to be hiring someone who is going to be actively working on improving their software development skills.
More seriously, what constitutes playing is such a subjective feeling I personally wouldn't tell someone that's not what he's doing.
Now using that to gauge someone in a interview is a much more tricky discussion.
Efficiency in this case would be to just go and buy an $1800 guitar pedal instead of investing $40,000 worth of personal development time on a toy project for the sheer joy of it.
Maybe you're only looking for people with exactly the same mindset as yours, but if not it might be interesting to look for other Very Good Signs.
So if you would also do it just for fun and fun is the main reason why you do it, I would say that “play” is an accurate description – which seems to be the case from what I read in your post.
However, my definition immediately rules out any activity enforced by a company that may be labeled as “play”, but actually feels more like work for the people involved for the reasons mentioned above. People may also feel forced to create play projects because they want to get hired by you – also not “play” in this sense.
This is what I'm getting at. It's no longer play if it's mandated by the industry, on top of your full-time job. It puts people with a life outside of programming at a disadvantage.
Currently I’m building a small social network where you can only post once, edit it, like and follow other posts. I imagine it as an anti-twitter.
Sounds silly but I had a ton of fun learning Tailwind and using vanilla Django (no drf, htmx, etc) for the first time since like 5 years.
It’s hosted in a small vpc running with docker-compose and a managed postgres db for now. It’s essentially bricked for new users though until sendgrid approves my account.
So yesterday I decided to step away from what I'm crunching and just wander through the codebase finding things to optimize. No real goal in mind, just some good tunes and getting down and dirty in a way that I don't often get to do. I had Rider's IL window open for the first time in a year. It was fun. My changes will probably never be used, but it doesn't matter, it was a relaxing afternoon.