I'm Not Sure I've Ever Enjoyed Programming
Aside from a quadratic formula program written on my TI-84 in high school, I did not do any real programming before I was 19, when I learned C because I consciously decided I wanted to learn a new skill. I read stories of learning on a ZX-Spectrum at 5 years old, but I never really got that experience of just playing around. I think for me, programming has always been work, and that makes me very sad because I know this can be a very rich and rewarding hobby. I think the only time I really felt this was when I played EXAPUNKS.
Can someone point me in the direction of 'fun' programming? Tools that are just really enjoyable to use? I want to find the joy in computers.
43 comments
[ 4.7 ms ] story [ 124 ms ] threadThe excitement you hear about comes from personal discovery around things of interest to you (possibly only to you) and the feeling that you really understand something not widely known, so that you could bring it out and use it for something.
Even esoteric cases are all connected to a single underlying reality underneath, as you improve and gain understanding by your own hands pieces of what underpins everything, you will find unexpected connections even in your mundane work-stuff.
The things people did not know they needed. Or knew they needed, but could not get. Or sometimes even articulate.
Programming is not entertainment, but a way to enlarge your brain to solve a difficult problem.
Find a problem that you care about (like you did with the quadratic formula in high school) and program a machine to solve it. Maybe, you’ll be magically 19 again
How did it feel where you wrote that program on your own initiative? If it felt great, you already have an answer
It's basically art. Art of all types has internal technical challenges: specific problems to solve which are even testable. E.g. how do I get this paint to dry slower to have more working time for the intended style; how do I get these two materials to adhere; what fingering can I use to play this passage fluidly; ...
My point in this thread is that some people might be motivated into programming if they stop thinking they have to solve some external problem, other than the vague requirement of making something beautiful or entertaining.
Looking back on my starts. Original computer was one you had to type the program from a magazine into in order to play it. Make a mistake transcribing, hunt it down. Get it correct, get to play a game for a short while. Wireframe magazine is recreating this. Each issue has a fun recreation of a classic mechanic.
Moving to a more modern computer, used to be that it was a bit of a programming exercise to keep DOS happy so that you could play different games. If you got fancy, you probably wrote a menu system to pick your games.
Even my first dip into "business style programming" was in getting some gaming going. Friend and I used Access to build a D&D character sheet generator. Got our toes wet with SQL, even.
If you enjoy math, https://projecteuler.net is a good place to see if you can get some programs written that usually explore some fun properties.
Similarly, I remember having a ton of fun coding fractals back in the day. The state of graphics programming is... difficult, though. I'd point back at the pygame zero suggestion, even though I am not a fan of python. :(
I had a decent career in programming, but over the last ten years or so I realized that I didn't really enjoy it. I was OK enough at it, but being around world-class people convinced me that I was only ever going to be OK, and that wasn't enough. What I really do enjoy is solving problems, and more importantly, finding the right problems to solve.
What rekindled my interest was working with my kid. It's cliche, but games programming with kids is hella fun because it's personal and low-stakes. Minecraft mods, scratch apps, etc.
Although Smalltalk is not a widely used language, it does have a large selection of interactive playgrounds that some people enjoy. Another option might be to do more hands-on project with Arduino - where you can build and program robots, various automatons, etc.
Your question is that broad. There are many, many, many axes of difference to explore.
Another way to look at it is "what's fun to you?" If you can't think of anything, you're out of luck. If you can think of anything at all, incorporate some coding.
I'm not sure the tool matters and is more about where your interest lies. The same thing happens with React/JS (refresh, it works!) Swift/iOS (rebuild in Simulator, it works!) or backend / systems / data (run, check output, it works!).
It could just be that programming isn't your thing, but generally most humans like feedback loops and dopamine hits.
My pragmatic advice (without going into my theories): just observe yourself throughout your activities, take daily notes. If you don't like to write essay-like diary entries just reduce it to an organized excel spreadsheet e.g. specific activity, time spent, rating system (long-term/short-term satisfaction, hard/easy ...), misc: (interesting) things you observed about yourself; you get the idea.
In most cases it really helps to clear up some confusion and misconceptions you have about yourself. "Fun", "Happiness", "Flow" etc. is a spontaneous state dependent on a plethora of things working in sync nobody can teach you directly because in the end you are the driver balancing all those things. Once you get a better sense what versions of "fun" you enjoy, observe and ask others: How do they go about this? What is fun for them? Maybe you find some interesting strategy you can apply or get an appreciation on how individuals can vastly differ from you.
Similarly, I've always thought about people's enjoyment of games. There's so many different reason one could enjoy a game. For example: When I was playing to win, i wondered what pushed me to do so. Turns out i didn't enjoy winning. I just hated losing. That realization helped me enjoy games more.
If you don't enjoy the work, perhaps you need a different problem to tackle. Come up with an idea, and learn everything you need to manifest it. If that's not fun try another, you'll come to a conclusion either way.
That's what made programming less fun for me.
These days we don't have the same innate hardware constraints, but there's still a lot of fun in working against tight constraints of some sort.
For writing silly games I've had fun with the pico8 virtual console, which is highly constrained. I also like playing with speeding up algorithms, that often has interesting time and memory trade offs.
The other side of the coin is that you get enjoyment from seeing something valuable to you realised. For me this has been creating a card game I invented with a friend, and combining computing to solve problems in another hobby I have — or something I value (deejaying tools, computing tools, knowledge sharing tools, privacy tools). Perhaps this is the same for you.
Perhaps it’s just not fun, don’t feel the pressure that you must enjoy it. Everyone is different!
Encounter a problem and solve it with computers, even more fun, every time you or anyone hit the same problem, they use your tool and realize how easy it's now, that feels great.
You read code/solution/architectures and you go like "Damn! that's clever" or "Oh! that's so neat and lean" or "That made a lot of sense!". Basically, the hit you get from understanding something clever, that means you just leveled up and you'll remember that you understand it now.
Think about other people, how they would use it or whosoever is going to read it. You make it simple for them to read or an elegant solution to the problem. Being able to formulate something, anything, gives a good feeling.
In some sense, the above things are applicable to any field.
But there was a bug in the program. I could see it immediately. It said "Matthew" is cool. I needed to fix this.
I ran home to my own ZX Spectrum and tried it out. I typed in exactly the same magic words, except this time I switched the "Matthew" for my own name, and voila. It worked. The bug had been fixed, and my own TV screen filled up and proclaimed to the world just how fucking cool I actually was.
I think that was when I realized I had to be a programmer.
* make Pong. pygame if a good place to start if you want to make things as easy as possible.
* play with microcontrollers. There's a lot of fun to be had with making LEDs blink, hooking up displays, etc.. I'd recommend one of the Elegoo starter kits, which gives you a clone Arduino Uno, components and instructions to get you started. The Raspberry Pi Pico is also pretty good, and seems quite popular with "Makers" (and even industry). Probably go with the Uno first, though.
Have fun.
If you are into computer graphics, you might be interested in the following:
The Ray Tracer Challenge, see https://pragprog.com/titles/jbtracer/the-ray-tracer-challeng...
three.js journey, see https://threejs-journey.com/
For me programming was something that started gradually as I became familiar with Bash, until in denial that I was programming at all. Ansible introduced me to Python, Jinja, and YAML, but I still didn't consider what I did to be programming. Scripting, but "I'm no programmer", just in a sysadmin rabbit-hole. I'll have impostor syndrome real bad.
Going back to Bash after working with Python was rough, and I've since delighted in learning new programming languages and paradigms as I solve my problem-of-the-week, gaining a new understanding and appreciation of how people can approach programming each time. The problems are trivial in retrospect, but feel significant at the time- each is an important stepping stone in the broader understanding of computing that I'm developing, as well as an excuse to get sucked into the syntax, ecosystem, and mental model of a new perspective. Perhaps I'll learn to delight in C someday too, but today I've found my stay in Lisp, and look forward to using purer functional languages in the future.
A background, and the perspective it gives a person, is a unique and special thing.
Similarly, I don't necessarily enjoy writing code, but I do enjoy building useful programs.
Then after college, I started coding as a traditional software engineer. It was tedious, it was procedural, etc. but the products were robust and efficient.
Then I left that field, and got into analysis / data science, and I'm back to a much more ad-hoc way of coding. I write scripts and small pieces of software which solve specific problems, sometimes never to be used again - but it's fun. I use programming as a tool to solve specific problems. And while the code I write is less robust, breaks easier, it's really not a big problem...I'm essentially the only person that sees or uses that code.
So, at least for me, the more "applied" side of coding turned out to be the best match for me.
* Low friction, nothing to install, near instant feedback.
* Fun starting at simple shapes, gradients, distortions, all the way to absurdly good looking rendering.
I did have that experience of growing up with fun programming, for me shader programming brings that back.