Hacker News new | past | comments | ask | show | jobs | submit login
Programming as Play (austinhenley.com)
140 points by azhenley on Dec 22, 2022 | hide | past | favorite | 23 comments

Once I adopted this mindset, I enjoyed working on my side projects so much more. Not only has it made it feel less like work, it has also freed me up to experiment with things I’m not as familiar with because there’s no pressure to create something in an expedient manner. The notion that I am making something for the fun of putting things together and not to have something complete to show off at the end has been freeing.

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.

When I was looking to start a new software project, I asked myself some questions, with the aim of formulating a project which would be fun/play. Otherwise why do it?

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

> Once I adopted this mindset, I enjoyed working on my side projects so much more.

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.

It was popular for a time to try and turn side projects into obligations. The idea being that you would obligate yourself to finish them.

This has been my mindset all along, I called them weekend projects. I write small programs or scripts, if I find the time, for fun or should I say for myself. Last fun script I wrote was in Python to check if it is already my birthday if not it will return a dad joke from an API (python3 isitmybirthdayyet.py). Last week I wrote a small RSS reader iOS app with the Feedbin API for myself, so I could read it natively.

My point is these small fun projects kept me young.

When I saw the title, I assumed this would be about Zachtronics games or Human Resource Machine (And it's sequal, 7 Billion Humans)

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.

I used to love the playful nature of programming on the Commodore 64. I think it was the immediacy of the environment and the screen editor that made it feel that way.

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.

You can do all of that already from immediate mode in both pico 8 and tic 80.

I was hoping I’d missed something, but I just tried again in TIC-80 and this doesn’t work:

>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:


unknown command: tic

The same applies with brackets also.

I have always used play projects as opportunities for professional development: learn a new language or UI framework, try out a programming paradigm, explore audio programming, &c. But always because I love what I do.

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.



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.

It's not play if you're doing it for such reasons. To do it for play means just to do it for the activity itself with no ulterior motive (including career growth). Similar to kicking a ball against a wall - you do it because it's fun not because it will get you somewhere. The problem is everyone is trying to get somewhere these days (essentially to find security in a world that doesn't really offer any).

We need to hurry and invent a new synonym of play for profesional athletes, all this time they haven't been playing at all!

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.

Play doesn't have to be useless. It just has to be inefficient.

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.

By screening people this way, you're missing out on people who have several passions outside of programming and limited time.

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.

In my understanding, in order for an activity to count as “play”, the primary and _sufficient_ motivation has to be fun, even though there can be other motivators. I understand _fun_ as a motivation that is not goal-oriented and not forced.

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.

That doesn't sound like play to me, especially if you start expecting others to do it to get hired.

Do you not play? That sounds to me like a reason not to hire you. It would be interesting to find out what percentage of professional programmers play. I would guess almost all of them. Would I expect anyone to do the sort of play I do? Definitely not.

When I was a professional, 40 hours of programming were enough for me. When I went home, I wanted to do something else.

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.

This is hustle culture virtue signaling.

If people started doing it only to get hired, it would no longer be a good interview question.

I resonate with this as well. I learned to program as a hobby but now it’s my day job and although I enjoy it, it’s not the same as coding in my free time.

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.


At work we've been in a crunch for the last month or so. It doesn't happen often, but it has been stressful, particularly with the holidays.

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.

The difference between programing for work, where with deadlines speed is of the essence, and programming for fun, where I take my time and don't stress if it all fails, is vast for me. The later feels the same as any hobby while the former is mostly a source of stress as I have to leave many things in a undesirable state.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact