Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: I just want to have fun programming again
240 points by jb1991 on Feb 8, 2023 | hide | past | favorite | 214 comments
I've written in many very different languages in a professional full-time capacity in my many-year career. Now I'm interested in building something new and I have a clear idea in mind with some code already in C++ to proof-of-concept it for myself, but I'm struggling to find a direction forward that would be... fun. I don't mind challenging work, but I like an environment that feels sane and logical and where I am not facing loads of incidental complexity along the way. I'm also attracted to implementing my app cross-platform.

I just want to have some fun writing something without headaches, and that is seemingly less and less easy to achieve today. I'm not a fan of the complexity of either JavaScript or C++, and while I very much like Swift and working in the UIKit world, it's not so portable to platforms that many use.

I feel like there aren't really any good options in software development any more. It's always one big compromise with lots of possible decision fatigue. Every direction has drawbacks.

If I could write an app in a good static-compiled language that did not require extraneous expertise in CSS but that shipped on a web page and looked good using tools only in that language, with good interop with an HTML Canvas, that would be one possibility, but it is again a compromise -- no easy multithreading, dealing with all the front-end baggage to bundle or deploy such an app, etc.

Any recommendations? I'm not afraid of learning an entirely new language too.




This thread has a lot of language suggestions, but I think you need a fun problem to solve. Pick a toy app and work on it. Learn embedded programming with an Arduino. Write an iPhone app to track when you feed the dog. Make a karaoke app for Android. If you pick a project you'll enjoy, the language won't matter. Use whatever is best for the platform. The fun doesn't come with the language, it comes with seeing your project come to life, or others' reaction to the cool thing you made. Every language sucks and every language is the best depending on who you ask. Don't focus so deeply on that part. Solve cool and fun problems.

I've had a long time dream of getting a broken jukebox and gutting it for a Raspberry Pi, but keeping the external interface in tact. I know next to nothing about hardware engineering, and can't write more than ten lines of Python without needing to Google something, but I finally got a broken juke in need of fixing, a multimeter, and a hard drive full of music ready to go. The fun isn't the Python or learning GPIO, it's that eventually I will have a cool retro jukebox with hardware and software I wrote in my basement.


Big +1 on this. If you're OK with a broader definition of "programming" and have a bit of money to throw around, I've found tinkering with https://www.home-assistant.io/ to be very satisfying. I got more sense of accomplishment from scripting "text me when I leave the house if I forgot to set the alarm, and turn on the front porch lights when I arrive back if it's after sunset" than I did from months of corporate work, even though the actual _difficulty_ was much lower. I can _see_ the results of my work, and benefit from them most days!


Deploying Home Assistant is largely how I taught myself Docker, Kubernetes etc. Its much easier to learn solving a "real" example.

You can learn a ton just trying to do a production grade home assistant deployment - move on to SSL termination at the load balancer with letsencrypt, try different deployment strategies for upgrading the server with zero down time, write custom extensions... etc etc.

I've now got a small Pi cluster running k8s to deliver a bunch of services at home, and its all really easy to maintain. I've absolutely used the skills and knowledge gained in my day job too, which is nice. Home Assistant is great to learn a lot of production web app stuff, all you need to get started is as little as the PC you already own, or something like a Pi to host it. As it can solve problems in your actual life, it's rewarding enough to be interesting I've found.


Ha, I also got most of my initial experience the same way :) I use k8s at work now, am somewhat frustrated with it and would like to run a k8s cluster at home, but I have a hard time justifying it. I'm not sure if a pi k8s cluster would make sense for me either, although I do have enough pis laying around for a small-ish one. I've considered ordering a couple (more) r210 ii's and making a cluster, but don't know what the stack would be exactly.The beefiest machine in my home currently is an unraid server, and I run a small number of services in a docker-compose stack on a vps.

Do you find that there are functions that are unique to k8s for a selfhoster that demand a system with that kind of overhead?


Setting stuff up in order to have fun with it and learn is always worth it. It's "always" worth it to use overkill on a personal project.

Of course you don't need that k8s cluster and of course you shouldn't really use pis. But it'll be fun. You could also just use 10 vms running on your computer and each vm is one node in the k8s cluster if you don't want to buy hardware. Then you see what happens when "hardware failure" occurs. I.e. you kill a vm without shutting it down properly. Or yank the power on one of the pis.

The point is, once you need it for a real project now you know how it works and when to actually use it and when not to. Heck all the stuff I set up on my single old 200MHz system, no vms nothing taught me basically everything I needed to become an actual sys/network admin later.


> I've now got a small Pi cluster running k8s to deliver a bunch of services at home, and its all really easy to maintain. I've absolutely used the skills and knowledge gained in my day job too, which is nice.

I'm reasonably sure that being able to talk about my home k3s-on-pi's cluster was a positive factor in getting my latest job :)


I knew this guy that automated his home with Prolog. It was quite a cool project. I 100% agree with picking a project to learn.


How i love these quirky side project! Do you have a link to a repo? Would like to see his setup!


I do not think he publishes it. But I would not be surprised if he sees this comment on HN.


Homeassistant is such a useful project. I use it for self hosting bitwarden, ubiquiti addon and bunch of smart home devices. For SSL I have been using local root authority but is a pain to maintain. I am able to access HA client from browser and Android phones but iPhones don't want to play. How did you do LetsEncrypt with HA?


I just did Caddy container as reverse proxy for my HA server - Caddy has support for Letsencrypt built in. Needs very little configuration. This approach lets you put SSL on any webservice you are running, the configuration is not specific to HA at all.

https://caddyserver.com/

https://en.wikipedia.org/wiki/Reverse_proxy

If you use LetsEncrypt's DNS-01 challenge to setup the SSL automatically, you can even deploy valid working SSL for IPs in the private range (192.168.x.x, 10.x.x.x etc etc), allowing auto-deployment of SSL for private services on your LAN, not just publicly accessible/exposed IPs. You can get around port forwarding during initial letsencrypt setup with this too, as all happens via DNS providers public APIs.

> https://letsencrypt.org/docs/challenge-types/#dns-01-challen...

Caddy is really easy to deploy as a Docker instance as well. There are many, many ways to accomplish LetsEncyrypt with HA though! It's really just an example of a common generic reverse proxy problem - searching for "reverse proxy letsencrypt" will show you many other ways to do it too. If you are using Docker to host your services at small scale, there are some really clever options now that auto-configure Caddy and SSL via letsencrypt all just using docker compose:

https://github.com/lucaslorentz/caddy-docker-proxy


I've found that sometimes the hardest issue is getting mentally unblocked enough to find a problem that seems approachable. One of the best ways I've found to prompt you is to start browsing libraries till you find some that imply a goal you might enjoy. My last fun personal project was making a command line AppleTV remote with a lib for doing such. I'd been so burnt out till I saw a random link to the lib, and it just sucked me in.


I did a similar fun project. I created my own slot machine. I made a small shelf like cabinet out of wood, set a TV on it in portrait mode leaning against the wall, added a few lighted push buttons, and dropped a Raspberry Pi inside. I never finished the software side, but I was pretty proud of the looks of the machine.


>, but I think you need a fun problem to solve. Pick a toy app and work on it.

I think you've read the op's question too fast and not fully empathized with his situation. He already found a problem when he wrote, "I have a clear idea in mind with some code already in C++ to proof-of-concept it for myself, ..."

The bulk of op's words surrounding that goal is asking about the process of coding being fun. But then we get several (well-meaning) advice to just focus on the end goal being fun rather than the coding process being fun. Yes, that's a valid perspective -- but a lot of people also require the process itself to be fun too.

E.g. Let's say a programmer wants to code a custom music library manager:

- John wants to use Lisp because having a REPL for quick iteration and feedback loop is "more fun".

- Jane would rather use Python because having a bunch of 3rd-party libraries for lots of tasks is "more fun" than coding a lot of boring low-level tasks from scratch.

Advising people to have a sort of zen enlightenment of only caring about the final product and being totally detached from the process is unrealistic for many programmers. It's a perspective that may work for you but for many others, the particular tools do matter in terms of joy.

In the op's case, he wished that there was a tool that was cross-platform, with easy multi-threading, no incidental complexity, etc. (To answer op's question, there isn't such a tool that meets all requirements.)

We often see variations of the lament: "I wish programmers would quit focusing on particular programming languages. They're all Turing Complete. Just pick one and get on with it."

That's true if the product is corporate project. In that case, the employee needs to suck it up and just use whatever (not-so-fun) programming tool to get the job done. But personal projects like the op's question can try to look for alternative coding environments that are more fun to use.

An analogy in woodworking was illustrated by 2 different shows on PBS:

- Norm Abrams (The New Yankee Workshop) used power tools to build his projects.

- Roy Underhill (The Woodwright's Shop) used hand tools to build his projects.

Roy Underhill likes hand tools because power tools are noisy. On the other hand, Norm Abrams uses power tools as they're fast. Neither are wrong. Both can craft a chair but the tools still matter.

A lot of woodworkers can't just detach themselves from the usage of tools and only focus on the final product. The choice and use of particular tools is a core part of the joy.


Sounds like a super fun project. Did you find one with the moving pages for album pictures or with the pink yellow and blue "ticket" like song listings, or? Those are so awesome, I can think of all kinds of fun ideas to retro-mod either.


Thanks! It is ticket listing kind. It's closed so you can't see the record mech, which is what I wanted, and I will replace song cards with ones I add to the Pi. Then I will add all kinds of hidden ones for giggles because it would be a waste to only play 200 songs. I got particularly lucky in that it came with the field repair guide, which has a solid wiring diagram and sequence that I can more or less recreate in code. My goal is to do the least amount of destruction to it that I can so I could some day replace the broken parts (ironically, the central computer) and have it restored. It being "Computer Controlled" was one of the most appealing aspects to me - there's a light up panel that reads that on the outside.

It's an AMI Rowe R-88 if you'd like to see it.


I found fun again in two easy steps:

(1) Unlearn the "large team workflow mindset" and embrace the "single developer mindset" again. You don't need a plan, a Kanban board or a bug database, just an idea in your head. Get rid of "big languages" which are good for team work, but just a hinderance when working alone. In my case this meant: dropping C++ and embracing C (today that would be: Zig). Focus on getting shit done like when you started out with programming instead of agonising over design decisions. It's better to throw away something that doesn't work than wasting too much time upfront with planning (and then it still won't work). At least you still learned something valuable. Try to do the 'planning' part passively in the back of your head out in nature while taking a walk or some other outdoor activity.

(2) Pick a challenging problem where you have no idea yet how it works, but which you would like to know. In my case this was "home computer emulators".

...well 3 steps, step 3 would be: don't set yourself any deadlines for this sort of "fun stuff".


> Unlearn the "large team workflow mindset" and embrace the "single developer mindset" again

This worked for me. A few months ago I quit a really great job partly because I was struggling with motivation. Fast forward to today and I’ve got a couple freelance projects on the go which aren’t even that interesting, yet sometimes I can’t stop working on them.

I think the large team workflow took far more of a toll on me than I realised at the time. A single line of CSS might start with a discussion in Slack, followed by a ticket, which then gets brought into a sprint some unknown time in the future. Make the change and wait days for the PR to get approved, PR might have a discussion so you need to find the original discussion in Slack, someone might suggest multiple different ways you could have made the change even though it makes no difference. Someone else might suggest that because you’ve touched this line of code you should refactor the entire file, to avoid conflict you just make all the changes even though you disagree, put it up for review again, someone else says they liked the first way you solved before any changes but whatever, tag it in a release go through QA, QA and BAs interrogate you on why you refactored more than the ticket, QA picks up issues that have nothing to do with your change so you have to figure out how long those issues have existed for, finally 4 weeks later your change is in prod and you can move onto the next task.

Working by myself has been incredible. I don’t miss having to justify every technical decision to a team that can’t ever seem to agree on anything. I’m able to react and ship so much faster and the product is more stable and of a higher quality (subjective) than anything I worked on within a team. I’m not sure what this means for my future prospects, but also not too worried at the moment.


Do you have advice stemming from your move from salaried life into freelancing? I started my career freelancing, but now a decade-ish later, freelancing seems both enticing (a way to find the "I work when I say I work, not when someone expects me to work" balance 4-day workweeks kinda get at, but also not really, and also a way to perhaps more freely select for problem spaces that interest me vs. whatever is the current VC hype train), but also terrifying (because I recall there being non-trivial overhead on the "business end", there's no long-term stability, there's not even really short-term stability in the sense of "I have bills and debts to pay that are not exactly negotiable", etc)

Love seeing such a similar quip about team vs solo work here. I find I get much more done when free to just explore and do what makes sense to me on a given day vs. whatever is someone else's priority item, and when I can use all the tools I choose (vs the tools someone else chooses for me).


Haha my career was the same. Started off freelancing about 14 years ago and moved into salary.

I’m actually “taking a break” from work at the moment. I just happen to still have a couple of freelance clients from the old days because they’re great people. After I left my job, one of them had a project for me which was great timing, but I’m talking like 40 hours. And apart from that I’m only making a few thousand per year.

I agree with you 100%. As a way to make stable income, not great. And the overhead was one of the reasons I went salary. I don’t think I want to ramp up my freelance stuff again. When I’m done with my break, I’m going to try my luck at 3-6 month contracts. I don’t need much money these days, a 3 month contract would set me up financially for the rest of the year.


> (1) Unlearn the "large team workflow mindset"

That's how Darth started.


Like darth vader?


Yeah, the dark side has interesting problems to solve too.


I did microagile extreme few years ago, trying to make a tiny feature with a minimal amount of impact and a tiny bit of parametricity for obvious options. Was a fun constraint to find fun.


You seem to have two very conflicting wishes here:

1) To have fun 2) To write a cross-platform web-base app with good HTML canvas inter-op ...

If you really want to deliver this cross-platform app, then it seems that's going to be more work than fun, although no doubt good tool/framework choice can help minimize the headaches.

For a fun project it seems better to avoid all of the things that you already know are going to make it not fun!

My current fun project is writing a compiler to run on an old 8-bit system (initially targeting en emulator) ... 99% useless, but fun, and I get to choose whether to implement the bits that are stupidity on behalf of the language spec, or extend the language to make it better, etc, etc - no practical considerations forcing requirements on me, since it is purely for fun.


Exactly, there are plenty of frameworks which make this possible but even with the best you are hitting plenty of potholes adding incidental complexity on the way to a polished end product.

Limit ambitions and focus on getting velocity into roughly the right direction. Have fun and worry not about having fun.


I agree, solving multi-platform issues is never fun. Most of it is just either a chore, or getting locked into a very constraining framework.


> while I very much like Swift and working in the UIKit world, it's not so portable to platforms that many use.

Your title says you just want to have fun programming but your post is full of other requirements. You need to decide if having fun really is what you’re after—in which case it seems you’ve found your answer—or if it’s secondary to some other metric such as customer reach.

There is always a compromise. No solution is all good things at once, including easy, performant, and cross-platform. If that existed we’d all be on it. You’re clamouring for a past which I’m doubtful truly existed.


Yeah exactly, even though I'm more of a Linux user than an Apple user, one thing I do admire is that there a lot of apps with UI polish because they JUST build for one platform.

They just focus on making it exist, without premature generality.


This will probably get lost in the noise. But I think what sucks the fun out of side projects is where your agency is taken away by the ‘right way’ to do things. That’s what makes embedded and a lot of Raspberry Pi projects so fun. There isn’t a large collective telling you to use X build tool plus Y framework, and if you don’t, it’s because you’re doing a bad job and don’t care. And if you ask a question like ‘how do I…’, the response is Y takes care of that for you, you should really use Y.

Pick up an Arduino and there’s no one right answer. It’s still very hobby oriented, so a lot of people do fun an wacky things. The learning curve is fairly short. What I call the ‘book count,’ or how many books you need to read to be productive, is pretty low. On the other end of embedded, it gets very formal, very quick, but that’s for professional embedded developers.

Or, pick a ‘dead’ language. Go to some vendor like thrift books, or hunt used book stores, for books on that language. You might find some for $5. There’s no pressure, and you have full agency to make the greatest or the worst decisions you want. And a lot of the communities around these ‘dead’ languages are a lot of fun.


Agreed - there's a lot to like about embedded programming - it's the antidote to bloat, and encourages a "bonzai" philosophy towards programming. It also means you can have total control and understanding of every byte of the firmware, which - for me at least - is much more conducive to fun than sellotaping together chunks of opaque bloatware.

> Or, pick a ‘dead’ language.

Or a dead platform! Loads of retro platforms still have active and creative communities, and finding new ways to make an old computer do cool things is a lot of fun.

That's where I find my fun, anyway - nothing about what OP want to achieve sounds compatible with fun to me - but that's probably just me showing my age!


Some recommendations for fun (web) programming:

- Forget about the JavaScript ecosystem, don't even touch it, it's a monster

- Use htmx on the front-end (https://htmx.org/)

- Use plain-old CSS with minimum dependencies (sanitize.css)

- Use lightweight CSS framework if you need one (bulma or purecss)

- Use Go on the backend (all other modern languages are bloated)

- Use AWS Lambda

- Use DynamoDB if you don't need data processing

- Use Postgres if you hate or don't want to learn DynamoDB

- Compile SQL to type-safe code (https://sqlc.dev/)


Meh. I enjoy doing full stack javascript work over all other stack including Go. To each their own I guess.


If you already know the javascript ecosystem then it's probably fun. But if you don't its heavily draining. Also Go is decidedly antifun so maybe not a good comparison.


Left my job late last year with the intention of striking out on my own.

Instead I realized quickly that what drove me to quit had been the fact that the joy of coding had left me. And so for the last two months I have been working towards regaining it.

And at this point I realize I have gained it back.

The only projects I have been working on are small libraries and apps whose ideas had written down over the years but never touched.

The longest project has been 3 weeks. Others, like the library I worked on today, have only taken a couple of days. Also done some open source contributions here and there.

I would now recommend it to anyone, given if their financial situation allows for it, to step off the hamster wheel on occasion and work on the things that really motivate them.

When I re-enter the job market, it will be with renewed vigor and plenty of new know-how.


> Left my job late last year with the intention of striking out on my own.

I read a quote from Amy Hoy (/u/ahoyhere) last week that summed it up pretty well, "most people who think they want to start their own business really just want a better job."


I think of doing something like this, but I'm afraid my problem is that I'm self-directed and my motivation comes from within. Working for someone makes it again a job and making me fix problems someone else have created within limits they envision.

Is it different for you?


I think it is the same for me, to a degree.

A job always entails working on someone else's problems and working within constraints of their (or their field's) own making. So it could never compare equally to what motivates us when it comes from within. But we get paid to do that work, so it is not a bad exchange.

That isn't to say we can't try to be more picky about the positions that we seek out. The problem space might be motivating for us, or it might be that the coworkers are what drives us on. Perhaps the work life balance is really nice and the tech stack is either cutting edge or the internal practices are really solid.

Hopefully all of these can be true, to a degree (perfection is unachievable).

However if the place is occupied with rock star developers, corporate politicians as well as unrealistic requirements and time constraints then it is just a hands down bad place to work, and the dark cloud over your head has nothing to do with where your motivation comes from.


If you want to have fun, dig into some subfield of computer science, like databases, ray tracing, etc. Something that has been studied rigorously. There, knowledge actually compounds and builds on itself, rather than being thrown out every two years for no gain. Build something small and see if the subject gels with you. If it does, go deeper. If it doesn't, try another one and see if it works. Once you find something you like, you can start self-studying more with books and harder projects.

"But it's hard!" That's the point: surmounting the challenge is where the fun comes from. And then you have skills that 90% of devs don't even attempt because they believed it was "hard."


The OP is a bit ambiguous about where they want the project to go. If the whole point is to just have 'fun' while learning something new, then there are many different directions you can go with no accountability except to yourself. Pick any area of personal interest and start prototyping. It can be really fun to create something that does something nothing else does or does some common thing much faster or better than other solutions. Even if no one else uses it, it can be rewarding in its own right (i.e. a hobby).

If, on the other hand, you want to actually build something that you hope other people will try, adopt, give feedback, and (heaven forbid) actually pay you something for your trouble...then that is hard. You have to worry about things like what operating system or browser it runs on. If you want the project to also be rewarding to many other people, then all the business processes come into play (finding market fit, raising capital, evangelizing it, etc.) which can often be not fun to a technical person.

I know from experience with my own project. Shameless plug: https://didgets.com/


> There, knowledge actually compounds and builds on itself, rather than being thrown out every two years for no gain.

That's most of fields. Webshit development is very much exception here, although one with a lot of market share.


I think that is exactly what they are saying.


Pure JavaScript is fun and simple. If you want a hobby project, ditch all the frameworks, and go vanilla.

I started https://wordsandbuttons.online/ looking for something fun and meaningful to do. I wanted to practice interactive writing and wanted to involve the bare minimum of technology to go forward. So I use rudimentary HTML for layout, JavaScript for interactive illustrations and UI elements, and Python for massive code changes. I have a bit of CSS, but I don't use "cascading" feature of it so whenever I want to change a style overall, I write a Python script for that. On the plus side, every page is entirely self-contained, and my CSS is outrageously simple.

There are no dependencies not external no internal, so the workflow is entirely stress free. Well, rather stress isolated. If I break anything, I know that the breaking change is exactly in the thing I am currently working on and not anywhere else.

If you don't care about productivity and want to enjoy programming with as little tools and dependencies as possible, vanilla JavaScript is the way to go.


May I recommend making a simple game? Developing small games is a lot of fun, and you have complete control over the complexity you'd like to delve into, as well as the scope.

I've been making games with varying degrees of seriousness. I even released a full solo game last year, which was a wild ride. I'm lucky enough to have a job I'm satisfied with, but even so, creating games has never failed to introduce super interesting challenges, it's just a great creative outlet for code and art alike.

I think Godot (Python-like with C# support) is in a very interesting place right now, and it's easy to get into and start making some prototypes. If you want something more involved, try Monogame (C#). There are always Unreal (C++) and Unity (which IMO is getting harder and harder to recommend due to their business model and decisions as of late).

Plus, game developers have some of the best online communities on virtually any platform you can think of. You can always find someone to consult or even join a project, from modding to rev-share game development.


what games have you developed? Can I play one?


For UI I do think JS is your best option atm. You don't have to write JS to generate JS, you can use Typescript or go more exotic to things like Rescript.

In terms of CSS; you'll need some form of styling in whatever language, there are plenty of abstractions on top of CSS if you want [something not css].

I would suggest having a look at Next.js if a web app would work, React Native (use Expo) if you want mobile, or Tauri if you want to focus on desktop (Electron, but in Rust, more performant, smaller size, more secure).

Another thing worth checking out is Flutter. I'm personally not a huge fan for irrelevant reasons but it is cross platform, and it's compiled not-JS (Dart).

I also want to say FE has come a long way, the web platform is much more stable, there are great frameworks and libraries, the tooling is amazing, and above all it's really fun and productive. Give it a shot, you might enjoy it. (Do use TS, or Rescript, or something, JS is better with types).


Another option I forgot as it's so far away from my world; .NET, they have Xamarin and I think they just released .NET MAUI. That would be C# or F#.

It's not my jam, but it's def cross platform and used quite a bit afaik.


For front end, there are a ton of UI libraries and CSS frameworks out there that can minimize the amount of styling OP would need to do. I am a big fan of Tailwind, but that might be too much. Maybe some Bootstrap/Material UI React components would do the job.


I deal with web stuff all day every day at work, so that's definitely not what I would choose for a fun hobby project. It's not your best option if that's what you're trying to get away from.

Someone else mentioned .NET. There's also Delphi and Lazarus. Both are cross-platform and have full-fledged UI systems, without any of the web ecosystem nonsense. It's a totally different experience than web development.


https://elm-lang.org

https://elmlang.slack.com

Static FP lang targeting the web as a runtime environment. Wonderful people. The nicest compiler in the game. Tight dev loop. Good tooling.

No JavaScript knowledge required. Join us.


Programming in Elm with mdgriffith's elm-ui package is the only way I've ever been able to tolerate developing a ‘modern’ web app.


This

Elm brought back joy and longevity for side projects to front-end for me (that had been ground down by the JS ecosystem sadly)


₊1 for Elm. Easy, fun, reliable.

And the Elm Slack is the most helpful Slack I've ever seen.


Elm Slack has literally made my career. Hats off to every last one of the regulars for their patience and kindness.


I had similar feelings, and I get the same feelings looking at today's front end development which looks increasingly like embedded C++ development. I had always tinkered with Lisp but expected it to be forever marginalized given how good Common Lisp was, and how poorly it had been adopted by industry. But Clojure changed that for me. The fun seems to come from agency, the ability to affect outcomes with reasonable amounts of time and energy expended. Agency is the ability to change one's circumstances, and modern tool chain's vast incidental complexity takes such agency away. But restore agency, and fun will follow, I suspect.

Now I don't mean to imply there are not good uses for tool chains like C++'s etc. Only I will say that the disconnection from the end result caused by the long write-debug-ship cycle leads to a certain programmer malaise. The same is true for things like coding chips with Verilog. The production chain is so long with respect to the creative endeavor itself that motivation and satisfaction is hard to get.

So, for me, doing SaaS software, which ships "all the time" with Clojure, has restored my ability to 1) read the std library and most others easily to understand them, 2) Create control, preprocessing and IO primitives myself for special purposes which easily rival standard ones, 3) use interop to access large libraries written in another long lived language (Java), 4) build and use tools that simply introspect the code, producing my own tool additions and automations without AST's, and elaborate tooling, after all, code is just data.

Obviously YMMV. One blog post documented someone who changed from C++ to Clojure and did not find satisfaction. But he was attempting to do something, embedded I believe, that is not well suited to a JVM. So changing to Clojure does involve changing to an area that favors one of the two big Clojure host language machines, JVM or Javascript based environments.


Clojure is my favorite language that I've never used in production. It truly is a joy to use. I just get nervous when thinking about building a real application in it because of: lack of static typing and my temptation to be clever when writing it (this is inversely correlated with long-term maintenance).

But I'd agree that if you want to find joy in programming again, Clojure might do that for you. It's a lot of fun.


I think the difference here is that static typing gives a poverty of real reliability guarantee's but one must always pay the cost. Since Clojure gives agency back to the programmer, there is a choice here. Clojure for production should check its types at the domain level or as close as possible, be simple, and spare. Personal experiments and tooling can be in a different style. It is just like building anything else, design and construction for maintainability is very different than prototyping or experimenting. Clojure has all the tools required to make robust production software. But it takes the intention and proper decision making to do so.


I'm very happy with Dioxus, a Rust UI framework. It might tick most of your boxes, except that it is still quite unfinished. On the positive side, the source code is easy enough so you can create PR's for missing features or bugs that you run into. Here's what's interesting

- You write everything in Rust. Dioxus runs by patching the output from your Rust code onto a VirtualDom in a Webview. So your code runs native, the WebView is just one big canvas that you use to display your UI. It's using WebKit/Tauri not Chromium, so apps are much smaller.

- It is super cross platform (macOS, Windows, Linux, Terminal, Wasm & (very unfinished) iOS/Android)

- You still need to understand some CSS but you could also use an existing framework like tailwind.

- BUT: The way Dioxus is structured, you don't have to Render to a WebView. You can plug in a custom renderer which gets told which elements should be placed in the UI with which parameters. That makes it easy to write a native AppKit or GTK renderer which just places widgets and uses a Flexbox system to figure out the sizing.

Most importantly, working with it is kinda fun. It also supports hot code reloading and so on.

https://dioxuslabs.com


I'm going to suggest Clojure. It is a very opinionated language made a person who was about to quit professional programming because of an explosion of complexity (both accidental and incidental).

Check out the talks by Rich Hickey to see if you have the same sentiment or perhaps this paper: https://download.clojure.org/papers/clojure-hopl-iv-final.pd...

The community of the language largely follows this philosophy, the ecosystem is very stable and there is little churn. The most common implementation is on the JVM making the language very portable.

The headaches historically were with getting your environment setup, but there are amazing tutorials and good tooling or VSCode, IDEA, Emacs and vim.


I would like to throw in Erlang and or Elixir with this. Not as stable as Clojure in the case of Elixir of course (or even just the BEAM environment tbh, certainly not as popular as JVM), but it's possible OP has already done the traditional functional programming thing.

This is absolutely not a criticism of Clojure or your recommendation. I'm a huge fan of Clojure, but I don't know where OP is coming from/if they've done a LISP before.

I don't know why but whenever I get depressed of bureaucracy at work I turn to functional programming in my spare time.


> I don't know why but whenever I get depressed of bureaucracy at work I turn to functional programming in my spare time.

I have noticed the same thing about myself.

I think for me, I am drawn to remember how simple programming can be.


> (or even just the BEAM environment tbh, certainly not as popular as JVM)

It has run some ~40% of global telephone communications for a few decades now, on top of the usual suspects (WhatsApp, Discord, (old) Facebook Messenger, Motorola, Blizzard chats, a number of banks...) and predates the JVM by a couple of years.

I'd go out on a limb and say that it's one of the most battle tested VM's there is.


I love Clojure, and listening to Rich Hickey talk is often enlightening.

I don't know that learning clojure was a good investment from a practical standpoint, but I took a deep dive into lisp-like languages and don't regret it.


And as a bonus, once you know Clojure (on the JVM) you basically get ClojureScript, on top of JavaScript, for free, which is amazing.


It's not "fun", but it's perhaps best to start with the problem you're trying to solve rather than the tools you want to use.

As for "fun" for UI, I found doing UI in Dear ImGui strangely liberating. It sounds like a web front end is part of your requirements, maybe, but if not, try one of the "immediate mode" UI toolkits like that. They have their limitations, for sure, but they come with a lot less "normative lifestyle assumptions" and it's strangely enjoyable to toss a UI together in them.

Also I started having a lot more "fun" once I start doing my hobby projects in Rust rather than C++... once I got past the initial learning curve... I say this not so much for the language side of things -- which can be a little straightjackety -- but for the fact that I was no longer fighting all the sharp corners in the C++ ecosystem (CMake, different 3rd party lib packaging styles, dubious 3rd party library programming styles/standards, etc.). Rust+Cargo simplifies a lot. And the third party crates are generally of pretty good quality and consistency.

Or learn another language, like Zig. That looks fun, too.


My main problem with Dear ImGui is that it just looks pretty terrible on a high DPI screen like most macs' Retina screens. The scrolling behavior feels clunky too compared to how scrolling works in every other app or browser on mac. If those two things were fixed without my having to figure out workarounds myself, I'd probably use it.


Nim is a fun language to program and also meets some of your requirements. It can compile to JS and has some libraries to interop with html. Admittedly it’s a bit limited on those packages but they exist.

HTML template: https://github.com/juancarlospaco/nim-html-dsl

SDL on emscripten: https://jipok.github.io/Nim-SDL2-and-Emscripten/


It is awesome to see all the comments in this thread recommending some form of embedded programming as a side project. I strongly recommend it too.

Here's my own fun embedded programming project... it's been 5 years now, so I should really do something like this again:

https://foundrytechnologies.com/relay.php

It didn't too well commercially, perhaps because the 3d-printed case I designed for it in looked a bit cheap. But the embedded coding was very fun, as well as putting all the pieces together (embedded coding, website & web app, PCB design, CAD and 3d-printing were all involved).

I did sell a few units, and shipped them worldwide. I still see them checking in with the server for updates every 5 minutes from around the world, and there's about half a dozen working around my house today, including one outside by the front door bell. That one's been exposed to the Texas elements for 5 years now and hasn't missed a beat, except that it needed a new case last year to keep it looking fresh.


Might I recommend instead of looking for a way to make things easier, instead you look for a way to make them harder.

There's more than one way to skin a cat, and for a project with even minimal complexity there are going to be tons of perfectly legitimate choices for how to bring it to fruition. In theory this is great, it's so easy to find a tool that works for you, but it's also very easy to get into analysis paralysis. If that's something that really bogs you down and makes the experience unpleasant, then you need a way of easily reducing the number of options. If you set out from the beginning to make a challenge out of it and add some stupid requirement that you have to satisfy, that can do the trick. You're no longer looking for the optimal choice, just an acceptable option.

There are other benefits: a handicap makes doing boring routine things stimulating and forces you to think about problems in new ways. If you choose a handicap that forces you to use something you don't have a lot of experience in, then it's a great way to learn. You tend to develop a deeper understanding of the fundamental principles underlying what you're trying to do. You can also be a bit easier on yourself about the quality of the end product since hey, it's pretty amazing that you could get it to work at all.


Your long list of desired features and properties, especially cross compatibility, is sucking all the fun out of the project. I also suspect the hobby project you chose (whatever it is) has so much idealism in it that it implies a lot of toil, e.g. a cross platform messaging app or one-storage-system-to-rule-them-all or The Next Great MMORPG.

The goal is too big and you are but one person with a day-job.

Don't quit your day job.

If you want to finish a project and have fun: Do not attempt to solve world hunger or censorship or any big problem, because you will find it is big and thorny.

Do: make a list of tiny projects. Extra tiny. Make sure they are fun, e.g. asteroids or Snake or displays-a-random-emoji or something silly.

Make a list of non-goals for your project: e.g. it will not be cross-compatible, it will not be multi-threaded, it will not support multiple users, it will not be scalable, it will not support multiple resolutions, etc. Try to make it so dang simple you think you can knock it out in 2 days. (It might still take a month)

If you need a framework or library, pick one and only one library. (write the rest yourself) Pick the smallest one you can find that covers the part of the project you don't wanna do, whether that's game physics calculations or databases or whatever.

And then write your project, preferably all in one big ugly file that does not meet anyone's definition of organization or documentation or quality.

That's when it's fun, when the scope is small and understandable, and there is no expectation of having to fix anyone else's bug reports but your own.

(To be clear, these rules are only for personal projects, I do not recommend this level of anarchy on a team or a "real project", just a project where the goal is to have fun.)

I've made snake, asteroids and Galaga clones in JavaScript. I had fun with them, and I threw the code over the wall for other people to look at; but for personal projects I am not promising anything other than that I had fun writing the code and playing the game I wrote.


You don't need much expertise in CSS to build common web UI patterns. It's been around a long time, and tropes like "it's hard to center a div" aren't really true anymore.

It's absolutely possible to build JavaScript apps in a single page with no external dependencies. All you need is a single .html file and a simple development server (I use python http.server).

Writing in typescript is a easy as a single dev dependency to compile the code. There's no multithreading but first class async support.

Additionally, JS / TS are very flexible. You can implement almost any programming paradigm you want to learn. I love doing FP in typescript personally.


Trouble with CSS is still this: https://media.giphy.com/media/yYSSBtDgbbRzq/giphy.gif (Peter Griffin trying CSS)

And centering a div can still be very hard depending on the circumstances.


I always see this meme going around, but it's just plain and simply untrue now that Grid can be used reliably.

You can center anything by making the container display:grid; align-content:center; justify-content:center; I don't know of any situations where that wouldn't work. Flex is a bit finnickier to understand with its major/cross axis concept and wrapping, but you can write Grid layouts with your eyes closed.


It gets better as you practice and learn good practices, and for the kinds of "fun" projects OP wants to do, there's no real downside to using a css framework that abstracts a lot of it away.

> centering a div can still be very hard depending on the circumstances.

Only thing i could think is targeting ancient browsers. I'm curious, do other UI languages not have quirks or edge cases to learn?


> And centering a div can still be very hard depending on the circumstances.

Are the circumstances that you are banned from using flex or grid?


>> I just want to have some fun writing something without headaches, and that is seemingly less and less easy to achieve today

Pick something that sounds refreshing and fun to you. A few recommendations for you: make a game for a fantasy console like pico8, walk through an adafruit embedded project, or get interested in the front end / design part of web development (look through dribbble for inspiration). You don't necessarily need much CSS and it's not hard to learn anyway.

>> I feel like there aren't really any good options in software development any more. It's always one big compromise with lots of possible decision fatigue. Every direction has drawbacks.

It seems most of your dissatisfaction comes from whining about the tech stack. Either focus less on the technology stack and more about the end product, or stop attaching emotion to decisions that are best made logically. It's okay if you choose options that have drawbacks if every option has drawbacks. There's no such thing as a silver bullet. Choosing the wrong option is rarely going to kill your project and you can always change directions later so breathe easy.


he has an idea for product - he is explicitly asking about the tech stack


Write it as a CLI first, if you can. Python with rich (for output formatting) is a great choice. But if you have appropriate tools, working with what you're comfortable with is a great choice too.

Until recently, I was in a similar situation. I had an idea of what I wanted to do. I had some prototype code written up as a web app in JS. It was going to be this beautiful thing that would help so many people.

But then I realized it was too much pressure. I wanted this for myself more than anything else. So I sat down and hammered it out in python in an afternoon. (Full disclosure, python is my main language, and I already knew exactly what this thing needed to do. I also found a library that did the Hard Part for me.)

And the best part: when I tell certain people about what I built, they don't care that it's a janky CLI. They're just happy they don't have to build/commission it themselves.

Embrace jankiness and get something working. You'll have fun.


C#/.NET is cross platform. I find it more fun than doing things like php or node. But I also don’t follow the whole “everything needs an interface” crap, or the insane level of abstractions people seem to implement.

I’m sorry learning rust tho. Like it a lot.


I'm using C#/.NET7 for a side project. I use .NET6 at work.

For me, the language itself has no bearing on fun. Having something that "just works" in most areas without having to antagonize over 3rd party dependencies allows me to have fun.

I'm sure if I was as familiar with Java or something I'd probably use it for my fun projects instead.

If you want the language itself to be an amusement, then I don't think C# is for you. It is about as boring and straightforward as it gets. I use it because it lets me work on fun problems without getting in the way very much.


If you want some fun, try working with the allocation-minimizing parts of the standard libraries, or lambdas-as-Expression, or even Roslyn analyzers/generators. C# has loads of "fun language features" to play around with, but what I find useful is that you can just use them boringly if you need to.


I find alot of difficult to solve problems fun with C#, but C# doesn't get in my way so when I work on personal projects, its fun because of what I'm building, not so much the language.

I suggested C# mainly it lets me focus on what I'm building. Node I feel like I'm thinking "is there a package for that" "how to use the package" "this doesn't work the way you would think it does"...

If that makes sense...


C# can go in both directions because if you don't go full of shenanigans and simply write what you need it can be reasonably elegant. But to your point it won't necessarily be "fun", however if the fun is more in the problem it can be a great answer.

F# I'm finding to be a language I can have some fun with because some of the syntax just speaks to me (being able to use pipe operators aka |> to chain work so that what you work on is at the front and then it flows into each step without explicitly writing out intermediate variables or writing code inside out feels GOOD to me). It certainly isn't for everyone though.

At some point I want to play with Avalonia because I need to get back to doing non-web UI but I never have the right idea other than some of my game stuff and that's getting done in Godot or Unity.


C# also allows you to use blazor, eliminating the need for js/multiple languages to write a web app.

I personally find that a much more fun way to program.


My go to language for the last couple of years has been Dart, and I stuck with it because it's the first language I really enjoy.

Dart's "Rails" is Flutter, it lets you write apps for mobile on iOS, Android, web, desktop on Windows, Mac and Linux, and it's used on large enterprise projects, startups, and solopreneurs / pet projects.

Dart is a very consistent language (compared to others, at least), super easy to learn, null safety, great type system. You can write web apps with it even without Flutter (it can also compile to js), churn out command line tools, run your server, and write user interfaces for desktop, mobile and web apps with Flutter. It feels like it has the best parts of Java, Javascript.

It's been a fun couple of years for me and I created some fun stuff with Flutter and Dart, so if you want to try something new, consider taking a better look at them.


Pick a language that speaks to you and use it. Ignore any technical bike shedding in your head. I like Rust and continue to hack on projects in it, but my happy place is Go. It is safe enough, productive enough, and checks all my boxes for serious hobby work. Find your own happy environment and projects


C# with maui can natively compile (on most things), otherwise you can just ship the .net runtime with your app, you can target a webview on "any" platform with the same codebase and same tools using Blazor. Blazor has it's own syntax that works similar to Angular, but ALOT different. And you can pretty much do straight up C# in it. You also have super easy multithreading. And since all the frontend code is baked into your backend, it's super easy. You can also build webapps which function pretty much alone with no backend. Or have a backend linked into it. It also works in the browser and can target WASM, with the exact same codebase and UI as Linux, Windows, Iphone, ANdroid, etc(Assuming you use the webview with blazor)


> I feel like there aren't really any good options in software development any more. It's always one big compromise with lots of possible decision fatigue. Every direction has drawbacks.

You just gotta pick something and go. I know nothing about your app, but there's plenty of general purpose languages out there that wouldn't be a bad choice. Over-optimizing is gonna kill the fun and you'll get nowhere. Choose some tech that solves your immediate problems and maybe keep things modular so you can break out the pieces that aren't working later.

Remember the fun part is building things. So go build something.


I'm a many year old programmer myself.

The one thing I'd say is: Let the project select your tools, not the reverse.

Take your time, select your tools and libraries... and it is amazing things just seem to come together. Not every problem will fall to what you know today.

Yes, there will be compromise, but step back, and ask yourself... just how thankful you'd be for any of these options 10+ years ago. If the answer is not... don't use that tool. But many times, what we face is really a plethora of great decisions, and we try to look for the best... not realizing it doesn't exist today, only in retrospect.


Try a Lisp. I got seriously into Lisp because of Guile, a Scheme -- but Common Lisp is also a great place to start and the Portacle environment is an easy way to jump into that.

Lisp is the easiest, most fun language I've encountered to work in. It's like clay out of which you can sculpt a solution. Every programmer should give it a go.

For an even easier way to get started, consider building an app in Emacs Lisp. It needn't be huge, it could just be an automation for a pain point in your daily work. Emacs is easier, and more fun, to extend than just about any other editor.


If you want UI, there currently is no good solution. In my opinion, AppKit/UIKit is the only well-designed UI with any currency at the moment, but as you point out, it is not cross platform. If you're okay with using Dart, Flutter might be an option. Qt is well-designed, but last I worked with it they were embracing JavaScript, and why would you want JavaScript if you're using a C++ library? C++ is too philosophically opposed to JS. But Qt just feels slightly foreign on a Mac, anyway. GTK is in C, which is not really how I want to use an object-oriented design, plus its cross-platform feels buggy. And HTML is just simply not designed for user interface; writing a UI in HTML + JavaScript is basically equivalent to writing an app in MS Word macros. Plus, it's hard to take the NPM ecosystem seriously when you're old-skool enough to think that left-pad is the equivalent of fizz-buzz and putting it in a package should not even cross one's mind, let alone actually using said package.

I'm writing a cross-platform UI library (C++, but I hope to add Swift, Python, and maybe Rust bindings), because I'm in the same boat: https://github.com/eightbrains/uitk. It is usable, but still under development, and while the .h files are fairly heavily documented, there are no examples yet.


Javascript isn't complex. It was implemented in 2 weeks. React is also simple (in concept, not implementation).

I suggest programming with chat-GPT. I got it to help me to get started, research and break down very ambitious project that alone I just couldn't muster.

You didn't specify exactly what you problem is but if you are looking for easy UI that's canvas based then I guess https://flutter.dev/ might be just for you.


ChatGPT has actually helped to get unstuck with my hobby project. I asked for a SQL query, it got it wrong, but I got hooked on fixing its mistakes and somehow overcame the "programmers block" to continue building my app.


Write some C for your own pleasure and fun on an undead platform, like AmigaOS.

Due to the constrained nature of the undead platform there is no real possibility of decision fatigue, since the ways of solving a problem are few.


I'm doing something similar with an old laptop I've repurposed as a web server. If I can't deploy it there, alongside my other applications, it will not get built.

I really like constraints. I also believe that's what made the early Internet so special.


You may not realize it, but frameworks and libraries are your enemy. Write something with minimal dependencies. Take a language you already know and think of a simple, fun thing to make from scratch (for an arbitrary definition of 'from scratch').

You rightfully complained about the complexity of JavaScript or C++, but you don't have to use the majority of the features. With minimal external dependencies and no other programmers in the mix, you can choose a subset of the language and just stick with that.

It sounds like C/C++ would be a good fit if doing low level things is fun for you. Javascript/HTML/Canvas is also not a bad choice per se, you just don't need externalities such as bundlers, wasmers, deployers, dependency managers.

Whichever environment you decide to go with, start with an empty directory. NO package managers, either. If you absolutely must use an external library, copy it in deliberately and manually.

See how few things you actually need to make something fun and worthwhile!


Maybe play around with PICO-8? (https://www.lexaloffle.com/pico-8.php)

The highlighted programs are mostly games, but people have made all sorts of fun things like 3D CAD, music synthesis, text editors, etc.

It is certainly a break from complexity. And it is easy to export your program as a webpage.


I was getting a bit bored of c++ a few years ago and learned Haskell http://www.learnyouahaskell.com/ I used Haskell stack at the time and it was zero hassle to get coding. I did nothing practical, learned a lot and had a great time. My C++ is now way better.


I don't know of a current way to do front end dev without CSS. The frameworks which allowed you to do that, like Flash, Java Applets, Silverlight are long gone. You could try Blazor, it's statically compiled in C# and can run either on the server or in the browser, using WebAssembly.


I just discovered and it seems enticing: https://github.com/raysan5/raylib

> no fancy interface, no visual helpers, no gui tools or editors... just coding in pure spartan-programmers way. Are you ready to enjoy coding?


Doesn’t it also say no debugger? You’re a brave soul, my friend :)


It's a c library. You'll have very powerful and mature debugging and tooling available to you.


Employ a risk containment strategy, “how can I get the next micro-piece to MVP in the least time/energy/resources/money.” I enjoy that challenge, it gets a lot of my what I call “head crap” out of the way, and reveals new ways to approach problems. I call that fun. Constructively I’ll say it appears you may have some “head crap” in play. I say that because your stated goals of the perfect app, with fun, and simplicity are totally at odds. Risk containment, you might choose to flesh out your idea as it is. If it flies and starts making cash, then tackle more platforms. Rewrite from the ground up in a different language/framework if necessary AFTER getting traction and money. Because making the money is the real fun.


>If I could write an app in a good static-compiled language that did not require extraneous expertise in CSS but that shipped on a web page and looked good using tools only in that language, with good interop with an HTML Canvas, that would be one possibility, but it is again a compromise -- no easy multithreading, dealing with all the front-end baggage to bundle or deploy such an app, etc.

Rust/Yew may be what you're looking for. It takes all the good ideas of web UIs (namely declarative FRP) and works cross platform natively, as well as compiling to WASM for the browser.

https://yew.rs/docs/concepts/function-components


I feel like there aren't really any good options in software development any more. It's always one big compromise with lots of possible decision fatigue. Every direction has drawbacks.

This has, literally always, been the case. You need to pick where you want to compromise, because there is no "one-fits-all" solution.

- Use Electron/Typescript/React/Tailwind or some similar stack if you want to pull together something quickly that works across multiple platforms

- Use Flutter if you want to do that but don't mind it's kinda poor re-implementation of platform-native widgets

- Use Qt if you don't mind the C++ dialect and complexity

- Keep it simple and use Dear Imgui

- Use something like Blazor to build a web app in C#

There are loads of options with different tradeoffs.


I'm on the same boat since months...

I created a little SaaS product with some HTML, VueJS 3 and Laravel for fun. No code reviews needed here. Also not my daily stack. Was quit funny ;). I have to mention I don't like JS very much and I was never a Frontend guy, but I gave VueJS a try. And I think somehow I finally found something to build nice Webpages without digging into React or using jQuery for now.

It was great relief and somehow I became a little aware that programming in the corporate world is relatively often just no fun. No idea what I'm doing with the knowledge currently. Cheer up and try to do some sports. I know, an often used advice, but it helps.


At work I program mostly in Python. But if it's for fun, I strongly recommend Pharo. It's a language in the Smalltalk family, forked from Squeak: https://pharo.org/

The whole environment makes the programming experience much better, and it's self-contained, so you don't need to spend a lot of time wrangling dependencies just to get started. Also there's a MOOC for it: https://mooc.pharo.org/


You can also use golang + go:embed to ship the assets that are e.g. needed for a webview.

This way you can start very easy and learn about the cross-platform UIs later (if you by then still stick to the commitment to the project).

Learned golang last year, decided to refactor many projects in it. It makes cross-platform development a lot easier, except for native UIs (as of now). But fyne and others are getting there very quickly.

The core strength of golang is its build toolchain, with cross-compilation from Linux to anywhere, basically. Additionally it makes you "think in structs" due to how the language is designed, so serialization/deserialization can be pain at first but once you realize the benefits of un/marshalling, it's amazing.

The batteries-included approach of the golang core libraries + golang.org/x is a nice dev experience, there's all kinds of libraries in there that you could ever need, already available in pure golang (with zero C dependencies, so CGO_ENABLED=0 makes it as cross platform as it can get).


Have you ever programmed a video game? It is a nice experience. And weird, if you are used to apps.

> I'm not a fan of the complexity

That is a very frequent trap many devs fall into when doing a video game. You start with the intention of programming a video game and you end up spending all your energy building a video game engine first. Resist that with all your might. I recommend trying to make a little game that "works" from the start, and then doing small improvements gradually while making sure that what you have is still a "working game". If you spend more than an hour with your game in a non-runnable state, revert to the previous commit and reassess.

Second problem complexity-wise is ... just incidental complexity. In general, 3D games are one order of magnitude more complex to do than 2d games, so I would recommend the later.

You could try doing something in PICO-8 [1]. It's a game dev environment with artificial limitations. Like the number of colors (16), the screen resolution (128x128) and others. It's programmed in a dialect of Lua, which is in itself a very tiny language. It is possible to make something overly complex with those limitations, but you have to try really hard. And it is fun.

[1] https://www.lexaloffle.com/pico-8.php


Everyone is different, I suppose, so ymmv.

I went back to coding stupid small games in a scheme-like Lisp on 8 and 16 bit cause.

I started out with Lisp in the 70s but followed the money to C, C++, Java and DotNet with side-trips into Smalltalk and Self. And a metric tonne of x86 16 bit assembly.

But I always had a fondness for Lisp and FORTH.

One thing I remember from the old days was (as Sussman pointed out) we used to build larger programs by composing smaller programs. Now we use monolithic blobs where you spend a lot of time writing tests to see how the API works because there's very little documentation (and it's a black box where a LOT of functionality is hidden behind a single API instead of smaller components you combine how you see fit. Look at any Microsoft Crypto API for an example.)

So my fun is now had on personal projects.

I have moved some professional projects over to Erlang and Elixr. Others use closure, and I get a similar feel. I feel like I'm in control. JavaScript used to give me that feeling, but my management chain insists we do things like import packages to test whether an object is null (and it turns out it does the comparison wrong.)

Your sense of "fun" will no doubt be different, but I guess my point is... the freedom to choose your development environment can provide a bit of happiness to your life. Not just what you work on.


If frontend stuff is fatiguing just use Bootstrap. You barely have to touch CSS with it (beyond using its classes on elements) and it is extremely polished and capable. Sure the stock output is a little corporate and bland but who cares, just get stuff done with it and worry about making it look unique later.

edit: Material design is another good frontend option that lets you stop worrying about fiddling with design and CSS. There isn't as nice of a single framework for it like bootstrap though.


I stopped using bootstrap for my side projects once I learned how to use grid/flex. Breaking free of the front-end frameworks feels like flying when you are working on solo projects. MDN is the only web reference you need if you go completely vanilla.

For team/professional work, I'd still stick with something like bootstrap.


This validates me. MDN is the bible.


Have you thought about learning new technologies? Maybe if you vary your tech stack, you would feel more motivated :) I recommend this article, if you're interested in Blockchain: https://www.ratherlabs.com/post/the-roadmap-to-become-a-bloc...

Let me know if it was useful for you! Good luck with everything!


> where I am not facing loads of incidental complexity

This is my dream. Unfortunately there is no easy path to get there. We have to replace all the languages. Build replacements without the noise.

> looked good using tools only in that language

I think you can have a universal syntax, but not a universal language. I think Racket's term "Language Oriented Programming" is the holy grail. You need lots of DSLs because you almost always work across different domains.

It is possible to have a universal syntax, however ;)


I am currently writing a small app for my partner. I asked friends what should I use. Decided on react native. It is literaly a slideshow of a praticular pdf (rules for a new dog-sport), just as dedicated app. It is maybe 100 lines. Maybe I will add some anki-like functionality if I feel like it. It was fun.

The crucial thing was, speed of feedback-loop? And the expo stuff is good. It does the bundling, it has hot reload. I don't mind typescript and the embedded xml.


Generally when this happens it is because of context. You are clearly setting out to have fun and searching for the joy you did find originally. Most of the time this context is either the problem space, team/political issues or the random tooling in the ecosystem that complicates a solution for better or worse.

I'd say your best bet is find something cool you would like to build. Ideally, there will be some part you have to deeply focus on a tech problem that will require you to stop thinking about anything else and really immerse yourself. This would count even if it is only a few hours.

I've found it fun and useful to have a small list of tools/utils or mini projects that I could use day to day or even something I could just randomly say I built. It is also usually the case that for tech people the most joy comes from the idea and early stages of creation and then finally shipping it. I'd say it would be best to have one or two small projects you can definitely wrap up instead of a massive one that becomes a drudge.

Also focus on truly how much power we have with computers. It is one of the only disciplines where the biggest and almost only limitation is what you can imagine and design.


Qt/QML? I have been doing cross-platform development with Qt for a few years now [1]. It does have a learning curve, but I do like the split of C++ logic and Qml for the UI. I can recommend the qml book [2].

[1] https://screen-play.app/

[2] https://www.qt.io/product/qt6/qml-book


Thanks, I've used it. I left another comment about it [0]. Perhaps I should give it another look. Qt doesn't really satisfy my desire to use something fun and relatively simple, but you and the other commenter are pointing out the obvious -- it is clearly a viable choice.

[0] https://news.ycombinator.com/item?id=34707057


Many seems to enjoy Elixer + Phoenix. https://www.phoenixframework.org/


Crystal is what you are looking for.

https://crystal-lang.org/

- Human friendly syntax

- Static compiled

- Type inference

- Incredible standard library

- Easy concurrency

- Incredible performance.


Sorry if this has been said elsewhere, but - Makepad! You should check out Makepad!

https://github.com/makepad/makepad

It's a Rust library for developing cross-platform apps. It's not 1.0 yet; there's still things to finish, but it's being actively developed (https://fosstodon.org/@rikarends#), and it's already pretty fun to play with. And the fact that it compiles and runs with the same widgets on Web as it does for Windows and Mac (Linux and Android are imminent, according to the dev's updates) makes it very appealing for my "write once, deploy anywhere" sensibilities.

Fast, easy, and free. Just waiting on it to be "live", for now! Don't forget to check out the demos.

https://makepad.nl/makepad/examples/fractal_zoom/src/index.h...

https://makepad.nl/makepad/examples/ironfish/src/index.html

https://makepad.nl/makepad/examples/simple/src/index.html

https://makepad.nl/makepad/examples/numbers/src/index.html


It says on the front page Mac and Web only

https://github.com/makepad/makepad#prerequisites

(windows and linux are coming )


Yeah, but check the mastodon updates and the commits. I've run my makepad app on Windows. And you can see from his updates that he's finishing up Linux and moving on to Android, now.


Modern OS's are to blame. If it's not your cup of tea but you still want to release on them I'd look into a framework, toolkit, or game engine.

I don't know what project you have in mind but what about targeting an older platform? If it's purely for fun/satisfaction try making an Amiga or DOS program. Plenty of emulators for modern platforms to help you run it on a Mac or Windows machine.

Depending on your project one route to consider is to build your UI with an immediate-mode style library (or write one yourself, it's not terribly difficult). You'd be sacrificing accessibility likely but it would get something out there fast that's pure code and doesn't require a ton of fiddling to get going.

Another "fun" area is to try Common Lisp or Emacs; both have options for UI and graphics programming and all usual facilities on modern systems. The benefit is that you can stay in warm-and-fuzzy parentheses and get a highly interactive development environment that you rarely have to leave.


How about Unity? https://unity.com/products/unity-platform

Or Racket? https://racket-lang.org/

---

I only have a little experience with the suggestions above; I personally like SvelteKit, but it doesn't fit your requirements.


Unity and application development are not a fun combination. Their UI system is notably terrible in both performance (not only the redraw-every-fraction-of-a-second paradigm, but just the plain ol' software architecture and layouting, or even simple things like culling offscreen elements) and features (Event bubbling/propagation? Naaah who needs that? It's not like you're putting a button inside another button! Or a button on a slippy map... Oh wait).

And while the prospect of cross-platform is appealing, it has 0 accessibility support and no way of embedding or being embedded into native widgets.

It's just a little bit better than passable for game UIs (non-interactive HUDs and one-screenful-at-a-time interactive menus), but once you start needing to implement things like drag&drop, virtualized scrolling, or non-trivial layouts, it get exponentially harder when compared to a "proper" application UI library.

Believe me I use it for a living :)


Go with Flutter. If you want, you can use Riverpod + GoRouter.

You will need a week or two learning curve if you are really good at picking up things. After that, the noise will fade away. You will be able to fully focus on building stuff and have fun.

If you are trying to interact with native platform in very advanced way, the non-fun parts will be back for a bit. It is still better than others.


I write lots of small shell scripts and aliases (using bash. I have only one script in zsh that does some globbing that zsh is better at out of the box) to do various things, like managing my music collection (on top of what git-annex does), converting and remuxing files, generating files etc.

The other day I wrote a little shell script to make a command-line radio player, which was rewarding.

I have a little shell script I wrote that is now a cron job on my laptop (running Arch GNU/Linux) that backs up my important files to a cloud using borg. That little bit of automation (a few dozen lines really) has been nice and fun to write, and gives me some good peace of mind.

Admittedly, some of shell script syntax (like that for hash maps) get take some time getting used to and is rather arcane, but I find running little scripts to do various day-to-day things around my life and the house rather fun.


If you're looking for the type safety afforded by swift I recommend two languages:

Elm and elm-ui for the front end. Elm is so safe that with the exception of the FFI and OOM it cannot have runtime errors.

Rust for the backend. You already know C++ so borrowing (move semantics) references and whatnot should be pretty familiar. Rust is like C++ but without all the horrible baggage and swift esque type safety.

Other people are like build stuff with this! Build stuff with that! They don't get it. I know what you're looking for: type safety in a good language without the garbage. Look into the two things above^^^^

Anyway the thing that's sort of related here is functional programming. Swift and Rust both share the same creator and the type systems from both are derived from Functional programming languages like haskell and OCaml. Elm derives its syntax from the same family, but elm is strictly functional while rust is not.


From the way you write, I get the impression that the project idea you have in mind isn't fun for you to implement.

If dealing with "front-end baggage" doesn't sound like fun to you, don't do a project that needs (much) front-end. Maybe you can build a bot (discord maybe?) instead? Or try some other interaction paradigm?

Or maybe abandon your project idea, and ask yourself what kind of project would be fun to implement, not fun to have finished implementing.

> I feel like there aren't really any good options in software development any more. It's always one big compromise with lots of possible decision fatigue. Every direction has drawbacks.

The beauty of a hobby project is that you can decide what's important for you. You can decide to screw portability, or accessibility, or security (as long as it's just on your device/home network), or whatever else feels like a burden to you.


I was looking for a tech stack like you describe and came up with this: https://github.com/hollingsworthd/micronaut-libgdx-teavm

It uses Java 17 and LibGdx for graphics, compiled to JS (Canvas) by TeaVM, and served by Micronaut.


I'm writing a book[1] with a variety of coding projects.

Programming is not always about building the app foo with the language bar. You can have fun by recreating and understanding how existing stuff works.

[1] https://build-your-own.org/b2a/


    I'm also attracted to implementing my app cross-platform.

    I just want to have some fun writing something without headaches
Building cross-platform native apps is like consuming the contents of a bottle labeled "CONCENTRATED HEADACHES". Those two goals are fairly incompatible...


I relate to this so much!

What I’ve been enjoying A TON lately is embedded development for hobby. Not Arduino, but bare metal, flipping registers and configuring devices in a STM32, writing linker scripts and scripting gdb.

It feels awesome to understand a system completely (sort of). I’m writing C but I also wrote the assembly that bootstraps my C environment and calls main()

That combined with some reverse engineering to figure out the MIDI protocol and a buzzer and LED and I’ve made a little instrument that I can play with my keyboard!

Next I’m planning to understand how USB works and maybe make the little instrument controllable over USB? Who knows!

I’ve realized that what I enjoy about programming is the puzzle, the thing that I don’t know, and then learning it, and then doing something fun with it.

Wish you the best and tons of fun in your journey!


Find out which sort of language features you find really cool that apply to your project. For example I have this idea in my head of writing ML stuff in Haskell, since everything is lazy and you could run models off disk. That would be really fun not only because of the end goal but because writing Haskell code is a borderline psychedelic experience. Using core language features tends to give you that feeling of using divine tools as opposed to writing a textbook in a second tongue.

Other than that I'd recommend C. It's ubiquitous and can be as simple as you want it to be. With macros or source to source transformation you can have your cake and eat it too by picking how you want your code to be written then figuring out how it would compile to C.


There is no purely fun way to build a production app. If there were everyone would do it. The hard part of building an app is the slog through the tedious parts. If you just want to build a toy app for fun, I recommend you just mess around with processing or pygame.


This! The fun of programming won't come out of a software project.

I find fun in programming by writing code solving small challenges. Something people really hate, e.g. LeetCode, is actually the fun place for me: I really enjoy writing some small size program to solve a made-up problem with my scattered time. I don't need to worry about language, library, framework, platform, UI, etc. The only thing matters is coding, and that's the thing makes me happy.


Best way I found to "have fun programming" is to not do it "for work"

That's personal experience, of course, but the most "fun" I have in almost any task/topic/field is when it's not 'forced' on me by $WORK


For me the fun of programming came back when I allowed myself to do things that are completely useless, apart from the fact that it brings me joy. It started with 6502 assembly programming for a breadboard computer I built. Right now I am programming C using old Borland tools on an old MS DOS computer. Again, super useless, but oh so fun.

And who knows, maybe this new knowledge will be useful professionally one day (I learned a lot about very low level computer concepts, and I didn’t know C before), but that is totally not the goal. Just the absence of the pressure to be useful brought back all the fun for me.


I remember I had the most fun when my code sucked. I made all sorts of silent tradeoffs because I didn't know that I was trading things off.

"Look! I built a whole App that does the thing! Isn't it cool? Oh, yea, you need to use this gnarly url and - crap - yea, use chrome. Refresh it... Hold on, let me restart the Raspberry Pi... Got it! Look at that! So cool! Wait - did someone HACK this?"

The grown up version of this might be just building for one platform, and one happy path. Who cares if lots of people can't use it? If it's popular, you can turn it into a job then. But until that happens - just make the computer do something cool!


Spend a while building a template for a Phaser game that has display and controls working nicely on mobile and in the main browser, package that up, and then start cranking out game prototypes. That’s what I do, minus the cross platform stuff since I don’t know or care much to do it for pet projects. The results have been fun as hell though. Examples:

https://explorerdude.net https://novagame.net https://choreomania.net


The premier cross-platform UI toolkits today are definitely:

- QT in C++

- Electron in JS/TS

But if you want to avoid those then you could try the Rust GUI ecosystem. That gives you a few options:

- gtk-rs which uses GTK but allows you to write in Rust rather than C

- Dioxus which does use CSS layout (renders using Tauri webview under the hood) but allows you to write the code generating that in Rust. And the "backend" code is entirely Rust.

- Iced which is pure Rust with it's layout system. But tbh it's still pretty immature and you'll be writing a lot of widgets yourself.

You could also look at Flutter which works cross-platform and works completely within Dart.


I am finding NextJS (React) + Tailwind + Typescript a great fun platform for side projects. Some investment in time is needed for each of those buzzwords, but once learnt and passed the painpoints and footguns its a cool way to develop fast web apps. But if you are not used to web there may be a few months to get proficient enough until it becomes enjoyable. And I think that is key for me: joy comes from proficiency with the tools and creating not from learning then tools themselves.


One thing that I like to do to keep motivate me building something is share how I do it. All comments, questions, and appreciation from the others keep motivate me working on something so I keep have a new knowledge to share.

People start build in public on Twitter. You might want to try it. Share your work, how you solve a problem, find a similar project that might be related with your work, have a discussion with the others to gain more ideas. I hope it help!. Good luck!


Come help us build a quantum physics game engine: https://github.com/quantumlib/unitary


I give remote math courses (GoStudent 4h per week). I also have a student in computer science. She sends me her lessons and I explain to her what she didn't understand. I help her to do her lab work. If a subject doesn't suit me, I tell her. The level on the theoretical courses is excellent. To explain something, you have to know the subject well. This allows me to progress on all subjects at a very fast pace without spending much time (it is in addition to my usual work).


> I don't mind challenging work, but I like an environment that feels sane and logical and where I am not facing loads of incidental complexity along the way.

> I'm not a fan of the complexity...

My recommendation that helps me having joy: Just do something other than writing code for that particular app. Write a decent (build scripts)|(CI/CD pipeline) that will abstract away that complexity and will reduce cognitive load of building/testing/deploying an app. That's a good feeling.


For any bored programmers here, I'd recommend donating some time towards open source projects. For some examples: Gnome, KDE, and Cosmic DE are all looking for contributors.


> I feel like there aren't really any good options in software development any more

Totally empathize. Why we ended up this way when "tech" has been eating the world for so long is another story...

One little corner that might be worth exploring is KDE apps based on QtQuick / Kirigami. You can leverage your C++ and deploy on android too.

https://develop.kde.org/frameworks/kirigami/


Top (currently) comment is, IMO, the most correct. Find a fun project, probably with Pi and/or Arduino.

Otherwise, my 2 cents is that I pretty much always have fun programming in Ruby.


> I like an environment that feels sane and logical and where I am not facing loads of incidental complexity along the way

You should try my (esoteric) programming language (theorem prover), Budge-TP :)

You might find useful my recent write-up about https://bor0.wordpress.com/2023/02/05/writing-your-third-pro...


The nuclear option is to transition to a job that isn't programming. Then let it rest a bit and most likely the itch to write some code will strike you, so go ahead and do it. Solve problems you care about the way you like. Treat it as a hobby again.

Of course, if your most marketable skill is programming, then that strategy will likely involve a reduction in compensation. Whether or not that trade-off is worth it is something only you can answer.


I found fun, recently, in helping out non-profit organizations or places that could use a programmer but just don't have one for whatever reason it might be. I am building a Digital Signage solution that can swap to a live seating availability chart for a performing arts theatre, I'm working with some local theatre groups on helping flesh out some cool custom QLab integrations, etc.

You can find some fun projects in places least expected.


Julia has agents.jl* with which you can do fun stuff like this: https://juliadynamics.github.io/AgentsExampleZoo.jl/dev/exam...

* https://github.com/JuliaDynamics/Agents.jl

Might be interesting.


My day job is boring to me but I build hardware projects on my own time. These I just code up/go at free will, no tedious testing or CI process.


If you want happiness and instant gratification try Ruby. https://www.ruby-lang.org/en/

If you want reliability, perpetuity and still some fun try Rust. https://www.rust-lang.org


Try using Jupyter Notebooks or another notebook based programming environment. Good way to change things up and very enjoyable to use :-)


"I just want to have fun programming again"

You can... just not as a professional. Work kills the joy. As only a hobby it could be fun again.


Not sure about the cross platform side but I am here to mention Elixir : I started learning some days ago and I am having a lot of fun so far doing exercises on the exercism learning platform.

My background is C and C++. I had tried fp before but it didn't stick. It gets awkward really quick. No such things with Elixir.


I'd recommend dropping your requirements to run on the web, and try out the fast, easy to use local GUI builder that is Lazarus/Free Pascal. It's cross platform, compiles to native code, and damned fast.

You build a form by dropping GUI elements into it, and hooking up events. It's almost trivial to build a CRUD application.


My two cents would be on F#.

Yes, isn't a mainstream language but there are a lot of interesting things with it:

- build for .NET or languages supported by Fable (JavaScript, Dart*, Python*, Rust*, PHP*) - I did build a proof of concept Flutter app with it

- multiparadigm - FP or OO, you choose

- clean syntax - based on indent just like Python

- Type providers, type inference, ...

* These are on Fable 4.0.0-theta-018 at moment


haskell, fp, ocaml, elixir/erlang, f#, racket, common lisp/scheme [for general enlightment] to broaden your horizons

monads, type-classes, pattern matching to get out of the imperative mindset from cpp, java,python, ruby

[to be clear avoid java, cpp,python, ruby]

c is needed for performance,

elixir/erlang for concurrency/parallelism,

haskell/racket/common lisp for enlightenment


I'm sensing that engineering compromises are what you'd call work, not fun? You may be asking for elegant cross platform tooling that may not exist because of the compromises it would require to hit a common denominator. I would pick my favorite platform and make something uncompromising using its strengths.


Last time I was in a serious rut I formatted my Thinkpad and setup an environment to fresh. Doing this alongside a small project was a good way to relearn some tricks and discover new workflows. Ultimately leaving me more proficient and happier.

I should probably work up the motivation to do that again come to think of it.


Find something wacky and fun project! I did this: https://github.com/curzel-it/pet-therapy Desktop pets for macOS, and having lots of fun.

Btw, I'm looking into porting it to Windows and Linux, if anyone is interested... :P


I wonder if you can pick your favorite language/framework and write a daemon that serves as the "backend". Then, write a UI in whatever you like, and send calls to the backend to modify state. It's the same concept as MVC, but implemented in different processes


If your true goal is to have fun while programming, why not just play a Zachtronics game (TIS-100 or Shenzhen I/O)? Same difficulty as programming a piece of software (if not more difficult), but no dealing with all of the complex annoyances of programming languages.


Maybe not a popular opinion, but after I bought a new MacBook, I decided to try out some iOS and Mac apps development. After years of frontend and backend development, it felt like fun thing to do. No more endless npm modules, css files, javascript quirks. Things just work.


Fun would be to build utilities for your own use that would actually enhance it. I can think of home type projects with embedded system that interfaces with HomeKit. It could be anything actually, maybe work with another person with similar needs on that fun project.


I've been building with Remix + Supabase with Chakra for my side projects. It feels great. I haven't open-sourced it yet, but I'd be happy to share it with you if you want to take a look.

There's no CSS. No useEffects. No BE vs FE. It's almost beautiful.


I’ve found that writing in Rust has re-ignited the spark of programming being fun for me again if you derive fun from writing some elegant and sexy code rather than finishing something per say, but that’s true of anything with coding


https://go-app.dev/ + https://github.com/ipfs/kubo

easily deploy wasm full-stack p2p apps


plus https://github.com/berty/go-orbit-db for a distributed p2p db


Seems like Haxe (https://haxe.org/) might be fun for you.

Per others, though, perhaps it's the motivation that's required. Do you want to write games?


> I'm also attracted to implementing my app cross-platform.

Depending on your project, you might consider working on the backend and API to drive this app and contract/partner with somebody who can do a killer job on a great frontend.



I've used Qt in past years. Qt is to C++ what C++ is to other languages. It's the "rich man's rich man." It has some nice qualities, but it takes the complexity of C++ to a new level IMO. Also its most easily-used editor (Qt Creator) has historically been buggy on mac, which I typically use.


For me its not the language its the tools. Writing code is getting easier but to deploy and monitor microservices on a cloud requires dozens(!?) of little tools, scripts, config files all different.


Do internet-of-things stuff on embedded devices. It's fun and you can run on bare metal or a minimal stack, but you don't have to compete with the entire internet on the same computer.


I've really been having fun with go compiled to wasm for the browser. Ebiten is a nice engine for pixel graphics/game stuff, but there are also more traditional canvas libraries.


Ruby on Rails is desperately waving hello. Though it's not x-platform...and I don't think the magical x-platform tool/framework you're looking for really exists.


You can achieve something useful and enjoyable at the same time if you don't set a goal too large.

Start with something you think is interesting and that you can do in an evening.

Do a little bit at a time.


Zig sounds logical to me if you already know C++.

It has grest WASM support, too.

Stuff like Bun.sh which is an entire JS platform is built upon Zig with a very small team. That speaks of Zig complexity.


Learn to love JavaScript. Then you'll always have fun building side projects.

Sounds snarky, but I'm serious. You can build anything with it, and it can be fun to use too.


In programming, the sky is literally limitless. But you have to find it within yourself to find what's "fun".

No one could possibly suggest "fun" to you.


Ok so basically how we have fun nowadays is

1) write some random control plane 2) create yaml interface for that control plane 3) watch how your users lose will to live

That is fun by definition


I'm sure this was funny in your head, but it was not helpful.


For me personally it helps to build something directly with my customers. Wow them with my solution, think of better ways to solve their problems.


For me personally it helps to build something directly with my customers. Wow them with my solution, think of better ways to solve their problems.


Honestly - if you like UIKit and Swift then build in that. Better to make progress and exercise the idea than hem and haw about the perfect tool.


Stop doing it professionally.

Try a project that's either completely useless or at least wildly impractical. Don't be afraid to throw away code.


Note down the good things you find in programming languages, and build your own language writing its compiler. That will be a good exercise.


F# via Fable or Webassembly. Rust via webassembly.


Write something for yourself. When you're the user, the motivation to continue working on it is much stronger.


Languages aren’t worse, you’re just better than you were. You’re aware of all the warts that you didn’t know before.


Try Flutter, it lets you build multi-platform apps without any HTML/JS/CSS and Dart is a pretty nice language


For fun use something you already know. Download needed stuff and offline documentation, then cut the Internet cable.



Sonic Pi - code-based music creation and performance tool is quite fun. Gentoo is fun, Funtoo is fun too.


Nothing in life worth doing is easy.


Somehow, your comment has convinced me to just learn native development. Cross-platform work feels like an absolute slog, with or without portable code. I guess I’ll find out which one is less tolerable.


So you will try to find least tolerable branch of programming to have the most fun. I love it!


Make apps--however you want regardless of current trends--that you will use and find useful.


You might be interested in a role change where you are coding less


I love browser add-ons and p5.js for artistic stuff.


Zig looks logical, It has amszong WASM support.


try doing GPU shaders, I have seen you could get decent ROI on effort.

you can try out your own shaders in a browser here: www.shadertoy.com


If something ceases to be fun, automate it.


Pico8


Check out Flutter?


Fun? C++? Bruh.


Well, I'm going to chime in with Java and JavaFX. Yes, its still used. Yes, its still active. Yes, its still updated.

Java is Java. A nice aspect of Java is that you can find pretty much anything in Java. Not written in something else and integrated with Java. Written IN Java. That helps limit the long running impact of "dependency hell". Of course you'll have dependencies, but in the end you have a static distribution, and its the same code, across the platforms. I'm currently working with Apache Jena and RDF (and this has nothing to do with the semantic web). For my purposes, RDF is a hoot, and adding Jena to my project was drag and drop.

There are exceptions. JavaFX is one in itself, as it does have a platform dependent binary component. If you're lazy on tooling (I'm lazy, I hate tooling, I should say I hate fiddling with tooling), just bundle all the platforms everywhere. But you can also make platform specific builds. In the end though, you don't have any environmental dependencies. All of them are brought with you. You can static link lots of things, but in Java, its routine.

Java is evolving into a multi-paradigm language. Still dominantly OOP, but it has the low hanging fruit of others as well. All of it is imperfect, but it's pragmatic as all get out.

JavaFX is a pretty solid piece of kit. It's modern, it's STILL modern. As old as it is, its held up really well. It's different, it's not Swing by any measure. My hurdles picking it up was taking preconceived notions learned from older frameworks and trying to square peg round hole them into FX. FX is opinionated enough to make that kind of effort frustrating.

But it comes with a scene graph. It comes with CSS. It comes with animation. It comes with 3D. It even has boolean 2D geometry operations. It comes with a bevy of layout containers. It has GUI screen builder. It has FXML, which is an XML based format for specifying scene graphs. With a bit of boiler plate, you can actually do entire screens and logic in an FXML file with embedded JavaScript, if you're so inclined. Perhaps not the greatest idea, but for certain applications the idea of being able to have an end user add a screen to your application can be very interesting.

I really like the Property and Binding mechanic. It's one of those things that's compelling and can lead to abuse and trouble. But that's OK. Just dial it back and it sings. It can also be used for simple rules, or as a simple constraint system.

Make no mistake, there will be battles. But for me, someone who hates Fiddly. Who tolerates tooling. Having everything underneath the one overarching canopy of the JDK is useful. But, it's still Java. Java can be wordy, to be sure. This doesn't bother me so much. Even my Common Lisp is wordy. CLOS isn't a poster child of terse coding. You still have your setters/getters (that can be sort of mitigated with the lombok project, but it doesn't have support for the JavaFX property idioms).

I do have one complaint about FX. The components and such are pretty locked down. It's really hard to extend them in ways they're not designed to be extended. Which means if something you're working with won't work for you, its baby out with the bathwater.

I've been playing with it all year. I have several half baked projects floating about. It's all been mostly fun for me. Desktop GUI work has a lot of minutia, which I've never been very good at. It's also a GUI, which is about presentation, and make this blue, and that 3 pts bigger and line all this up and can we have a shadow here. Most of which I hate. But that's an inner conflict unrelated to the environment. That's just GUIs and bike shedding. I've suffered this since they offered color to smart terminals.

GUIs also have a bunch of things that have nothing to do with your application per se. Global state, where do you put the logs, preferences (dare I mention Java has a cross platform preferences API built in?), perhaps capturing window layout on close, etc. I wish I could point to simple framework that supplies all that, but I can't. They exist, they're not simple, they come with a lot of baggage. That may or may not be "fun" for you.


You're over thinking minor stuff




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

Search: