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!
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.
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.
# 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 {
Hello HN!
}
}
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.
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...
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.
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.
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.
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.
* 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.
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!
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.
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.
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?).
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.
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
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.
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.
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.
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)
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.
Jester+custom HTML dsl+compiling nim to js makes for a good experience, imho
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.
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.
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.
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 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.
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.
*Your mileage may vary
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