I remember when Ruby on Rails hit it big, one of its mantras was that it made coding fun. As Rails has waned in popularity, has any other tech stack taken that crown?
What do you all think?
EDIT: Obviously this is highly subjective so if you can provide your motivations for why you feel how you do, that would help us all. Thanks!
1. Sensible defaults, can go very with just the stdlib: no choice paralysis between frameworks, mental overhead of setting up a project or ecosystem fragments to pick from. Just start with a main.go with net/http, add things along as you need them.
2. No ecosystem churn, whatever you write now will be idiomatic Go and build without issues for years to come.
3. Enough of a type system to catch typos, but not enough to bog you down in mental gymnastics on how to solve every problem perfectly. And definitely not enough to slow down builds and your iteration/test cycle.
4. Concurrency model that lets you spin up things in the background and keep processing in memory before you go into databases, worker queues, and whatnot. If you want to cache something slow, just put it in a map behind an RWMutex, and your single-process Go binary will scale way past any prototype stage.
You get things done, you don't spend your life obsessing over 'elegance', and whatever you build is probably high quality enough that you can make use of it for years to come.
5. Good documentation (and good culture of documentation)
Whenever I have to go look up a Go package[0] and figure out how to use it, I am impressed with how good most of the documentation is. Yes, you have to be familiar with the golang conventions, but it seems like accurately documenting libraries is just a thing people take seriously in the ecosystem, and in many others it stops at the good intentions.
Also I really like how explicit it all is. I usually learn something more than just an API when I dig into a Go package.
So, if you like to nerd out on that kind of thing, Go is one of the best places to do it.
[0]: I hate that they replaced godoc.org with this, but: https://pkg.go.dev
In my eyes, Go is a pretty reasonable choice: the language is decent, simple enough to be learnt in a relatively short amount of time, is reasonably readable and doesn't force you to work in a really low level of abstraction.
The runtime is also pretty good and the static executables that can be generated are a major boon in my eyes! None of the pain of Python's packaging challenges and performance that's generally pretty good when compared to many of the alternatives.
Sure, it's not as established like Java or .NET are, especially in the enterprise space, but nonetheless it is very capable for everything from utilities and small tools to web apps.
Edit:
> As Rails has waned in popularity, has any other tech stack taken that crown?
Actually, after re-reading the original post, i'm not sure what the question is, exactly. In my eyes, the languages that are fun are whatever allows me to solve problems and see results (which is where a lot of satisfaction lies for me) relatively quickly: so anything from aforementioned Ruby, PHP (with select frameworks), Java (with select frameworks), .NET (Core or newer), Python, Node and so on are still fun in my eyes.
Was OP perhaps looking for languages that feel more "fresh" and are more hyped, while still having vibrant communities around them?
For me, it's more about the day-to-day experience, hence the reference to React Native. I'm dismayed by its popularity, because it feels like such a step backwards - the ugly language (Typescript is slightly better than JS but still not great), the massive amounts of external dependencies required for even simple projects, the bugs, the lack of a decent debugger, and so on. All those things take away from the day-to-day enjoyment of programming.
It repeatedly get raked over the coals here for being dumb, inelegant, stuck in the 80's and an overall Bad Language Which Cannot Be Taken Seriously. :)
This the big one IMO when comparing to nodejs but a showstopper for some apps in ditching nodejs for Go is needing a nodejs process for SSR.
I think the second part (not enough to slow down builds and your iteration/test cycle) is a false dichotomy between "languages that have 'advanced' type systems" and "language that compiles fast". OCaml has a more "advanced" type system than Go, and still compiles really fast. My understanding is that both have influence from Pascal and its descendants, and Pascal made some tradeoffs to ensure fast compile times. For example, OCaml has no forward definitions. I used the word "advanced" here but I'm not sure if it's the correct one, as in I don't want to imply that one is better than the other. Maybe "fuller" could work too, but it sounds very weird to me. Complete maybe?
To continue on why I think OCaml is a good choice, replying to your points:
1. Sensible defaults are definitely missing in some parts, though with frameworks like Dream (https://aantron.github.io/dream/) this is less of a problem. There are small things missing in Go, like CSRF prevention. Where you have a point is that you don't have a big transition from "writing Go code" to "using a framework", which is a problem that can lead to analysis paralysis in other languages. With Go, you can just start with Go.
2. No ecosystem churn: This is a bit of a hard one. I feel like "churn" in OCaml is closer to the one in Go, adding things that are actually needed and after having a good understanding of the problem. For example, OCaml is adding multicore, and doing it in a backwards-compatible way. I feel like the approach is a lot like generics in Go: existing code will continue to work, code that went around this feature before will probably need to be rewritten, but that's for the better.
4. This is the big one. Concurrency in Go is a pleasure. You can write direct-style code, maybe put a channel or a waitgroup or something and everything just works. This is a point where OCaml is not as good as Go. Concurrency works with colored functions/monads (they're the same thing), like in many other languages, or just plain old threads. Multicore may allow people to build a preemptive multitasking runtime, just like in Go, but it's not there yet.
For the other stuff:
Dev tooling is not as "intergrated" as with Go, probably not as good, but the language server, package manager and build tool are all good. The debugger is a pleasure to use, and having a shell/toplevel/REPL is great.
Performance is great. Not as good as Go (though it does beat it in a few benchmarks on the multicore branch for HTTP servers), but still better than almost all of scripting languages, especially the popular ones.
As for OSes, it's mostly good on Linux. The windows support is so-so, the mac support too.
Lastly, for the learning experience, it's hard to say. I find it harder to learn something in OCaml, in that it forces me to understand what I'm doing more than with other languages. This can be frustrating at times, but also deeply rewarding.
Finally, all of the boilerplate and over-engineered components are gone.
You’re finally free to solve the just business problems. And you’ll be fighting integration issues a whole lot less.
I have no idea why any saas based startup, whether it’s one person or VC backed, would start with anything less.
The day will come when a small team IPOs with this stack. It's just that productive.
> Pricing Plans
> Simple, straightforward pricing to get your online business up and running
> Rails Single Site - Build one application with Jumpstart Pro - $249 /year
> Rails Unlimited - Build unlimited apps with Jumpstart Pro - $749 /year
Might be useful to be aware of the commercial nature of the project, not that it's a bad thing in of itself, just not accessible to everyone.
The features list is promising, though: https://jumpstartrails.com/#features
You will only get in life what you ask for.
They may say no, but you owe it to yourself to try.
Software maintenance never ends. And programmers just like every one else, need to eat.
Assuming even a modest $50/hr rate, you’d chew through $250 just trying to get the team invite functionality working, let alone the other 15 features.
You’re worth $250 a year for something that will make you a happier engineer.
Why burn nights and weekends implementing api tokens or 2fa or user invites when it gives you zero competitive advantage and you could pay $250 and all of that is provided for you?
Spend your dev time where you bring the most value.
You’re worth it. Your ideas are worth it. Be kind to yourself.
I'm not affiliated or even a user.
No client/server division to worry about, all of the desktop environment's capabilities developed over decades, insane CPU and GPU power and memory bandwidth (now on Apple's industry-leading ARM chips). Obj-C gives seamless access to both C/C++ APIs and the best desktop GUI with incredibly powerful features like the Cocoa text system.
After switching from Linux both on desktop/laptop and servers I really got comfortable and fun on FreeBSD. Of course its has its ups and downs - like everything in life - but after using FreeBSD for about 16 years now I know one thing - this is the OS that sucks the LEAST from all of them.
Here are some thoughts to conquer:
https://vermaden.wordpress.com/2020/09/07/quare-freebsd/
Regards.
I'm a NixOS user, I have a strange attraction to FreeBSD for years even though I used it only briefly (it sounds silly but running "top" on a bare FreeBSD is so... satisfying and peaceful). Overall I wonder if there's anything to be missing from Linux. Why wouldn't I use FreeBSD?
For example?
I use Cargo packages for some software that was not in the Ports and it worked well. Also downloading binaries for both FreeBSD and Linux and running them works. For Linux version I would say it depends - mostly works.
> How's the Wayland situation?
Dunno. I use X11.
> Why wouldn't I use FreeBSD?
If you need KVM virtualization or 'fat' desktop clients like Discord or Slack for example.
There are no USB 2.0 or USB 3.0 features for VirtualBox (as they are closed source and for Linux only).
There is no Opera or Brave browser as they are not open source ...
Currently 802.11ac and 802.11ax WiFi does not work on FreeBSD. There is some first work committed for Intel AX200 and AX201 likes committed to 14-CURRENT but not sure how it works. Most 802.11n WiFi cards should just work. I have Intel 6300 WiFi - which is rather old as it comes from 2011 ThinkPad W520 - but a lot newer WiFi cards also work.
Hope that helps.
Besides that I do not see anything special on DragonflyBSD ... I have read that they have very sophisticated and fast SMP implementation ... but a lot things just are absent there - like on OpenBSD land. No virtualization for example ... while FreeBSD has *VirtualBox* and *Bhyve* and *Xen DOM0* ...
*WINE* probably does not work (or does not work well) as last WINE commits for DragonflyBSD are from almost a decade ago:
- https://source.winehq.org/git/wine.git/?a=search&h=HEAD&st=c...
FreeBSD also has *VNET Jails* while DragonflyBSD only has 'classic' Jails.
FreeBSD comes with GEOM for storage which is just great - https://is.gd/bsdstg - more here. I myself also wrote *lsblk(8)* implementation for FreeBSD - this is also missing on DragonflyBSD.
Hope that helps.
# available at /style.css
proc wapp-page-style.css {} {
wapp-mimetype text/css
wapp-cache-control max-age=3600
wapp-trim {
body {
background: aliceblue;
}
}
}
# available at /hello
proc wapp-page-hello {} {
wapp-trim {
<html>
<head>
<link href="%url(style.css)" rel="stylesheet">
</head>
<body>
<h1>Hello HN!</h1>
</body>
</html>
}
}I enjoyed the little bit of exposure that I had to Tcl/Tk through EXPECT, I used to write a lot of embedded test scaffolding using it back in the 00s. I've also been interested in checking out Little Language [0].
Wapp looks like a great place to start with Tcl.
I especially like the shoplist one. Such a simple application that's immediately useful.
It's really fun and easy to make front and back-end apps with any combination of pre-rendering, client-side navigation, and server-side rendering on server-based or serverless platforms. To me SvelteKit makes it feel like there's finally a harmonious unity between the front and backends. Plus the dev experience is straight fire. Not quite at a 1.0 release unfortunately but I still love it.
Plus, Svelte was rated the most-loved framework in the StackOverflow developer survey this year: https://www.infoworld.com/article/3628231/developers-love-ru...
And yeah, I think if you want to use SvelteKit the endpoints need to be in something that compiles to JS — not 100% sure.
But it's quite possible to hook Svelte itself into any stack you want. SvelteKit is the bundling up of a bunch of nice defaults whereas Svelte is completely stack agnostic.
* Getting something up and running quickly. Something that does what you want.
* Iterating quickly on the thing you're building. Need a library (gem)? There's very likely a pretty good one.
* Building the thing in a fairly clean way (tests, code organization) in a way that's not too bureaucratic and tedious.
* Friendly community of people.
I've done some playing around with Elixir/Phoenix, coming from the background of a long-time Erlang user as well as Rails, and it's fun to learn, but I'm not 100% convinced that it's more productive than Rails outside of some niches. It's certainly not a bad thing to learn, though.
I simply just don't have as much fun with other languages anymore. Clojure let me write some of the most elegant code I have ever written, and knowing certain nooks and crannies of Clojure lets me pull off some...interesting stuff.
Clojurians don't tend to like frameworks and stuff. They're less frameworks, and more toolkits, a collection of popular libraries with config out of the box. Popular ones are Pedestal, Luminus, Edge, Compojure+ring. I started with Compojure, and I've played with luminus, Juxt's Edge, but lately I almost always bring together Reitit (a router) and Ring (jetty adapter for Clojure).
Front-end frameworks are a different story though. There are two big contenders: Reagent and Re-frame. Reagent is a Clojurescript wrapper around React that uses Hiccup (an http DSL for clojure) syntax to define components. Re-frame extends Reagent by providing a side-effects-under-the-hood framework for building single page applications. Recently, I've taken to really liking re-frame, especially with the Material-UI Reagent wrapper to ship fast.
clojure.test is the core testing library, and it's pretty robust out of the box with assertions and macros for testing conditions like Exceptions being thrown. By default it provides diffs when the test fails. There are libraries to help with testing/mocks and stuff, but I almost never use them.
It's also possible to use clojure.spec to create data generators for generative testing; however, the caveat of using clojure.spec for generators is typing your functions/type/etc too much, you'll lose the benefits of a dynamically typed programming language and probably spend more time writing the specs instead of the code. I typically use spec, or a competitor like Malli, to validate input at the system boundaries and critical code pathways.
There is so much to the Clojure ecosystem, this really only scratches the surface. I hope this helps though.
The stack for my project is:
Backend:
Redis (no relational DB needed for my use case)
Clojure:
Carmine - (redis interop)
Reitit - Nice API definition and routing
Malli - Nice schema validation and coercion
Timbre - Logging without known RCE vulnerability ;)
Frontend:
Clojurescript
Figwheel - CLJS compiling and hot-reloading in browser. Would probably use ShadowCLJS these days though.
Rum - It's a simple wrapper around react, with Hiccup-style list syntax for HTML. Though in a do-over I'd probably try Reagent since it seems to have a bigger ecosystem of wrapped react libraries, but I really like Rum best. That said, it's also not that hard to use native JS React components with Rum.
All of the libraries and idioms in this stack guide the design to push side effects out to the edges of the program - this makes testing easier in a lot of cases. E.g., for a web request you can craft a test request, or pretty-print a literal request object and paste it into your code, then pass it to your API in Reitit without an http-server attached, and get back the result object, and assert that it matches the desired output. Clojure's mutability make it pretty simple to stub or mock calls to storage, or to create a fixture to use a test database.
Thanks!
Previously I've used compojure and all that.
I've only done the data/backend stuff, so I've personally never seriously used cljs, and my companies would use a regular reactjs frontend.
But Clojure is definitely a joy and if I had to make a frontend I'd probably reach for something like reagent.
ruby on rails is still awesome. But since you might have to work with react anyways...nextjs is a second.
On the mobile side - Flutter is unparalleled. No seriously - im a react guy. And Dart is weird. But Flutter is seriously the Ruby on Rails of the mobile world.
Definitely worth a look if you just want to build clean, efficient, platform-agnostic code that will run everywhere and be performant to boot. Plus, you have native integration for almost everything, and best of all: you don't have to use the repugnant mess of web abstractions to build something cool.
EDIT: Plus, you get to learn how to build apps in the 21st century: through CI and automated builds, like Cthulhu intended.
Pretty expensive for indie devs, though.
>expensive
I mean, I've made 50x what I invested in JUCE already, and its only been a year of development .. but yeah, I guess it is pretty expensive when you are just getting started. Still, the Personal Use -> Indie step is an attainable one, and it shouldn't be terribly difficult to recover the cost relatively quickly once you come up with something, built with the Personal license, that might finally be qualified for an Indie release.
For personal projects? Ruby and Elixir, though ruby's documentation has fallen off of shape as of late, that or Elixir's has spoiled me by setting higher bar
I see you mentioned RoR, you can try Phoenix in its place for Elixir.
What are those, in your experience? The BEAM platform is certainly better for concurrent work where you might be holding open something like a web socket. But other stuff...? I'm a pretty happy Erlang programmer and feel like I 'get' the functional programming aspect of things, but to me ActiveRecord just feels like such a great fit for DB work in that it makes the simple things really easy and intuitive, lets you do some more complex stuff, and gets out of your way if you just want to go to SQL. I don't have too much experience with Ecto. It feels like it "does the job", but is maybe not quite so quick and intuitive for basic/simple stuff like AR.
But I must say I have no stack actually. I'm also not working as a dev, I'm an entrepreneur. The only stack that I seem to have is maybe Selenium. I totally like Selenium. And it also looks like that I enjoy QA. Together with web scraping and automation.
I’m also into hacking and bug bounty hunting. The advantage there is that you’re totally free to use whatever you want to. No one tells you which framework or tools to use. I can just use Python scripts for everything. I’m also not too much interested in big projects. I prefer small projects.
I wanted to learn Django for a long time, but haven’t done it yet. I was just using a bit of Flask for some projects. Which was pretty cool. But actually I think it’s only a matter of time until I will start to learn Django.
I’m also very much interested in Machine Learning and am starting to learn it right now. I would rather work in Data Science and Machine Learning than in Web Development. Seems to be much more interesting to me. It’s also more mathematical I think, I’m a pretty much mathematical person.
So many good options to choose from
What I really like about the Python realm is that everything just seems to work easily. The whole ecosystem just seems to work so well as a whole. In the currently rather rare moments when I use another language and its ecosystem, I at once seem to encounter kind of annoying little problems. It's a bit difficult to grasp why.
Python's syntax simplicity is also great. You can often really guess the code, even if you don't know a function. Compared to that, when I'm seeing super complicated bash scripts for example in the context of hacking, I always think "wow, in Python would be so much easier". I mean I can deal with complicated stuff, too. But with Python, I'm getting lazy lol.
I'm also pretty much a universalist. So I like that jack-of-all-trades aspect of Python. I also like the scientific possibilities of it. Am constantly thinking if I should go back to university and study physics (or mathematics). I think Python would be a good tool there.
What is also nice is that the Python ecosystem is not moving too fast. You have pretty much basic tools which will stay for quite a long time. There's Django for professional and Flask for easier stuff in the context of web development, and that's it pretty much. I don't want to learn constantly new technologies. I want to use them. So when I learn Python technologies, my knowledge will stay for kind of a long time. Totally different from JavaScript for example where there are constantly new frameworks emerging. That's not too much for me.
*Your mileage may vary
Whether you should use them professionally is questionably. But for me they made writing C fun again.
When it comes to a career change I’d focus less on lang/stack and more on engineering culture, approach, practice. A team that builds good software, regardless of language or stack, will be a pleasure to work with.
I think that functional programming ideals lend themselves to this nicely. Specifically: data as a first principle, with actions/mutations/calculations of that data being separate.
Am I messed up for finding modern C++ on Linux with CLion to be "most fun"? Is there hope for me?
Zig looks fun. Elixir looks fun. I thought Julia would be fun -- because I like multiple dispatch -- but I didn't find it "fun."
I want to love Rust and have been following it for years but as much as I like the language I don't find borrow checking "fun". Which is arguably a good thing, but maybe not good for language adoption.
Definitely fun.
I might enjoy what you find distasteful and vice versa.
Personally, I enjoy using Python and C. I am curious about Rust but haven't had an opportunity to use it much.
Your mileage may vary. I recommend trying a few different languages and see what you enjoy.
Edit: I like C because it feels simple and has a "what you see is what you get" property. The amount of "hidden" code feels like zero.
I like Python because the syntax is elegant and it is easy to get a lot done with a few lines of code.
Older versions of Laravel were superb - but when I went back recently I was shocked at what a clusterfudge had been made of shoehorning a frontend framework in.
Writing raw SQL, paired with the structs feels gooood. I thought it was gonna take me longer than python, but so far seems the opposite.
Personally I love Elm on the frontend, for being so orthogonal to mainstream platforms. On backend, rust is great but maybe too intense. Go is bland but overall easy-going.
Unity people, go ahead use this in your ads :D
I think Phoenix and Elixir are trying to. I like them.
I like Objective-C a lot too. It's a reasonably thin layer on top of C and has a dynamic flavor (which I prefer). The documentation is showing its age.
When Delphi came along, it was easy to use, but the layers of code made knowing what was going on effectively impossible.
Now we're in the age of trying to force a GUI to appear on the other end of the tech stack that includes hardware not owned by the people who should be their owners, but rather companies driven by profit motives. Connected by a series of privately driven networks, snooped upon by hundreds of competing national agencies and companies from everywhere, and it all sits on top of something that doesn't have capability based security at its core.
I'm used to a GUI, so Delphi would be it, except it's now insanely expensive, and I can't afford it. Lazarus is an open source alternative that works well enough... so that's my choice for fun these days.
As for working a job, which I'll have to do, soon enough... I expect that I'll be stuck using some form of case sensitive, macro encrusted C derivative, or perhaps something "memory safe" and unintuitive like Rust, or "functional" that forbids useful things like goto and global variables like Haskell.
The tech stack that I love the most, however.. is the tech stack we all use, that starts with raw inputs pulled out of the ground, and refined in many ways, until we get laptops and smartphones. It's an amazing technology stack, capable of producing wondrous things that even Absolute Monarchs of the past couldn't have dreamed of wishing for, in quantity and quality that even working class folks can afford.
We live in amazing times, thanks to our shared tech stack.
But I admit that's stretching the term probably past breaking since it's not a 'general purpose' stack.
But I'm a data person. I've built my career staying away from the UI as much as possible because I find it so frustrating and tedious. So I'm curious to see what others have to say in this thread.
My solution is generally to work at many different things in parallell, but that largely works because I’m a senior engineer and I’m naturally pulled to step in and assist in various places. I don’t think there’s an universal answer. Fundamentally, it’s probably not reasonable to expect that all aspects of once work should be thoroughly enjoyable.
- No environment configuration at all (third-party or otherwise). This is the most pain inducing part of Javascript projects.
- The code you write comes with a lot of confidence thanks to the compiler. Minimization of worry really contributed to a fun environment.
- The code you write is 'proximate to behavior'. In other words, you don't inherit some class or write some configuration file. You just write what you want the thing to do. To effectively program, code must be compiled by the mind.
- The code itself is very expressive so your code is minimal but communicates fully the breadth and depth of behavior. Overly verbose code is fatiguing to write and tedious to read!
- The language is reasonable fast so tests pass quickly. Slow tests are fatiguing and no fun!
I've heard a lot of people like Rails. I haven't used it. But I don't see much of a difference between Rails and every other framework out there. Maybe it has more "batteries included" but I don't want batteries! Batteries require trusting someone else which is not fun!
For me, because I know it so well, that is C#/dotnet core.
In Rails I can spin up very quickly a prototype, either with frontend or without and do some small experiments, consume an external API.
For me is also a great way to find ways to express my ideas in coding as Ruby is a somehow permissive language, allowing multiple ways of doing something thus one can find lets say their "coding voice"
Also, an important factor I feel I should disclose is that my idea of fun does not involve my code being able to run in other people's computers. Though it is important that I can understand myself three months down the line. That said, my definitions of fun are:
1. I'm productive in it. The tech stack would definitely include Python for very subjective reasons. The decisions PSF makes for their batteries-included standard library really suit me. Did you know they now include basic stats functions too?[1] I have a single-file lib that does this which I copy-paste around as a utility script (never bothered to package it properly); I use this whenever I want to do benchmarks or other standard software eng'g/CS stats analysis. Now, I don't need this script anymore!
If I have to design a UI though, I tend to stick with JS, maybe Android if the use-case makes sense. But with JS it's either very vanilla or I'm making a game with Phaser. (My thoughts on Phaser is another post...)
2. It teaches me something new. This is the part where I just learn a new language (Scheme, even Ruby ha!, one of these days Prolog or Haskell). Most of the time I just work through some textbook or maybe Advent of Code/HackerRank.
For a combination of 1 and 2, I program in---drumroll please---C! Good old, restrictive C, though still with a wealth of libraries and real-life examples available. I've been implementing some 1980s-era game listings in C; what I thought was a straightforward exercise (these are text-based BASIC programs) ended up being a deep dive into Linux signals and buffers (I won't pretend I've mastered this). It turns out, these 1980s platforms (ZX, Apple, TRS-80, etc) has some "syscalls" that don't have a direct equivalent in modern Linux (maybe ever?).
Hands down the most fun. Using same language for everything. Opening a page and REPL-ing it to hearts desire without having to reload the page. Seeing your coworkers' blank, befuddled stares...
I've had immense amounts of fun writing JS apps, GLSL shaders, PHP backends, VB apps, and more. And I've found all those things to be horrible and tedious and boring on other projects too. Give me a project I believe in and I'll probably have fun building it.
1. every other mainstream language is one step below the Abstractions Ladder and Haskell knowledge converts naturally to any other $mainstream flavour of the day.
2. every other academic/research language either directly or indirectly assumes you are familiar with higher-kinded interfaces and compositions that all practitioners of Haskell are familiar with, which converts naturally to the desire to achieve more (dependent types and formal proofs, effect systems, and so on).
3. map/fold/traverse are ubiquitous patterns across all FP languages, even their syntax and signatures hardly ever vary.
4. you begin to understand and appreciate simple mathematical concepts in the context of industrial programming.
- do I have an ide with an integrated debugger
- do I have to use external libraries
I honestly find that 99% of the un-fun stuff comes from integrating third party code. Whether it's built system awkwardness, messy package managers, debugger not working on third party libs, it's just a pain. When I write c++ I just vendor everything and that helps but it's still a chore to do the vendoring.
In general, I enjoy c++ and c#, except when I have to interact with third party libs. So when I do something for fun, I just try to diy everything (NGL, I kinda try to diy as much as is reasonable when it's "real work" also)
Jester+custom HTML dsl+compiling nim to js makes for a good experience, imho
That being said, in side projects I always like to work on new things that I can’t use at work. In the past those have led me to career changes. I learned React on the side then decided I wanted to use it full time. After a few years I switched to Golang. Now I’m back to a full stack roll with lots of React.
My new side interest is Rust. Who knows, maybe I’ll be working full time in Rust. The reason I bring up my own personal habits is because side projects help me stay interested at work. Maybe that will help you too.
I feel like I can use those and hit the ground running on my ideas immediately.
I also know Python and JavaScript quite well, but I don't look forward to using those tools and I feel like I spend too much time in the initial phase, instead of getting right into implementing ideas.
If you just want something to manage a web site with as low effort as possible, go for either Wordpress or Drupal. Every web hoster offers some form of hosting for these platforms.
If you're in for something a bit more fancy frontend-wise, go for ReactJS combined with Parcel - the latter is multiple lightyears better than Webpack or, heaven forbid, Gulp. Seriously, discovering Parcel was an eye-opener. Beware though, a lot of Parcel plugins haven't been updated to Parcel v2 yet - backwards compatibility still isn't regarded highly in the frontend world.
If you're more interested in building APIs and know PHP - dive into Symfony, the progress there has been massive over the last years.
https://imba.io or discussed a few times here on HN
That's where a lot of the fun-for-greenfield ones are way less fun, including Rails.
As an example, do you want a statically typed Scheme? Just change the language directive at the top of the file from `#lang racket` to `#lang racket/typed` and add your type annotations. You only have to add them when the type can’t be inferred. In practice this means when you have some mutation.
I highly suggest you take a look at Beautiful Racket [1] for some examples of what it means to be a language-oriented programming language. The book is written using Pollen, a typesetting language (a la LaTeX but not insane) written using Racket.
[1]: beautifulracket.com
But for pure joy and play, Swift/SwiftUI/XCode/MacOS. I have just got into it, I love how everything just works. Another comment mentions that Apple docs are not that great but so far I haven't run into any issues.
I am also exploring Unity/VR/C# ecosystem, that seems fun too. At work, I spend enough time dealing with non-dev tasks. So at home, I just want to write code and make it do something.
This allows me to quickly start coding while not focusing on the tedious configuration tasks that usually accompany a new project. I've been using it for over a year for personal and professional projects. It's not perfect, but it helps. I wrote this open-source template, so I am, of course biased :)
I have been using React and React Native for 5 years and noticed that a lot of developers are complaining that it's hard to learn. Actually better to say its hard to intuitively get it without diving deeper into the documentation
Recently I've tried Vue JS and I ma surprised that React is still way more popular.
Vue JS is way more simple and easier to understand, and the code syntax is way more shorter and cleaner. I wish there will be more support and libraries for Vue JS.
Personally what motivates me is the domain of the problems I am trying to solve, such as contributing to the digitization of my countries' companies and industries.
Once you find that for you, you won't think much about technological stacks, unless the one you are stuck with is god-awful.
At home I contribute to Tor's Rust codebase and it feels much more enjoyable than C#/.NET. Even unsexy languages are more enjoyable on Unix.
No wonder my home desktop and laptop run FreeBSD, as per personal email being self-hosted Postfix, even when I work in the Exchange umbrella. Old habits die hard
I've been working with rails for 10 years, got bored, switched to Django and it's been a lot of fun for me.
[0]https://flask.palletsprojects.com/en/2.0.x/quickstart/#a-min...
After years of working with Angular + Node as my main tech stack, I found myself having lots of fun doing just that.
People say that the "fashion" in chose stack is about shinny new things, but I think, instead, is the joy of have a chance of rebuild the wheel, better (hopefully!), this time.
That is what I see when Ruby/Django hit the market, and now with Rust.
Having the control of your own destiny that you don't unintentionally end up on a particular project with a particular tech stack.
So that might be Phoenix/Elixir one day, F# the next, and Go or Kotlin another. For front-end I typically use Vue, often in the same repo as the backend with 'git push' deployments.
My least favourite is PHP.
It is a total joy to code entirely in typescript.
A simple setup and loop function and you can make hardware do stuff.
- Blink a light - toggle a switch - measure stuff - react to motion
It’s fun