Ask HN: In which modern language/environment/framework is programming a joy?

53 points by reedlaw ↗ HN
When I was a boy, I learned BASIC on the Apple II+. It was a joy, because I could turn on the computer and instantly find myself in a programming environment that was easy to learn and fun. Granted, I had to plot sprites on graphing paper and then convert them to hex digits. Still images were created much like an etch-a-sketch, but using cursor movement keys instead of dials.

Later, I purchased an Amiga and was full of excitement and joy when I learned how to use AMOS BASIC. It was more powerful than Apple BASIC, and I could use a mouse and graphics utilities such as Digi Paint to create bitmaps for sprites.

In recent years there have been few programming experiences that rival those early days. Ruby on Rails was a joy to discover after Perl and PHP. But as it evolves, I find keeping up with new features and best practices tiresome.

Yesterday I downloaded the Android SDK and followed the "hello world" tutorial. After completing it I had almost no desire to continue developing on that platform. The emulator took several minutes to load and many of the instructions on the developer site were confusing or plain wrong.

Are there any modern programming environments that are simple, fun, and a joy to use? It seems strange to me that as computer hardware has grown increasingly powerful and software tools more sophisticated, making programs that take advantage of these advances has not become easier or more enjoyable. On the contrary, programming seems to become more frustrating as it advances, like always trying to keep up with a frantically moving target. Am I missing something that can bring back my early joy or discovery, or am I just being nostalgic?

93 comments

[ 2.8 ms ] story [ 150 ms ] thread
I love LAMP.

It sounds like you might like Smalltalk or even XCode and Cocoa (Interface Builder, etc.).

Erlang/OTP and Erlang web stacks (Mnesia/CouchDB, Yaws/MochiWeb) are a lot of fun.

I do love Smalltalk (I'm reading SICP). Can it do graphics/UI stuff? One measure of joy in programming for me is to be able to easily build a simple side-scroller. I'll have to get a Mac to try Cocoa I suppose.
One vote for Erlang - sending messages between processes on separate machines after only a few hours reading Programming Erlang truly had that magical "whoa" factor I remember from days or yore.
Python. Easy to learn, easy to use, easy to maintain.

I'm also trying Pygame and Pyglet and for a hobbyist game programmer it's very enjoyable not having to deal with C/C++ memory management crap.

PS: I think most programmer still have a fondness for their first coding environment because when your young everything is awesome, especially computers :) I have good memories of writing an adventure game using QBasic.

Python has iPython going for it, which is drop dead awesome to tinker with. I'm back to Perl, but the time I spent with Python was definitely made even more fun by iPython.
IPython is fantastic. I'm working through project Euler with Python, IPython and notepad++. I work with C#, asp.net during my day job. While C# is a great language and the .net framework is the most sane API I've ever used, I was able to do some of the Euler problems in one, easy to understand line.
Imagine I'm in fifth grade and I hit open apple + control + reset. Instead of a blinking prompt, an editor opens where I see a bunch of curly braces and "Public static void main (String args[])"

Yeah, not as fun.

I've been teaching a couple of teenagers programming using Python and Pygame, and surprisingly, I found myself yearning for QBasic. Because...

- Already installed on the Windows 3.1 machines.

- Whitespace isn't significant. It's obvious to me how a program should be indented, but it's not to a beginner. Missing ENDFOR is much clearer than Incorrect Indentation.

- No modules. Anything I have to explain as "it's magic" is a potential source of problem.

- LINE (30,40)-(100,50), BF to draw a rectangle. The Pygame equivalent is somewhat longer, mostly due to having to setup a window.

- The IDE was better. The help facility, in particular, was positively wonderful compared to what you get with help(...)

Once these hurdles are overcome, Python does provide better capabilities, but it's not quite the perfect beginner language that I expected it to be.

I'm sure there are those who would disagree with me on this, but I've found Adobe Flex an absolute joy to work with. It certainly has it's limitations, but it's so easy to make your application just plain 'look great'. It only took me a few months before I really felt like I understood everything about the underlying architecture. I love programming in it now.

Of course, once a person feels comfortable with virtually any LISP dialect, they usually LOVE it.

Coding something that excites you overcomes the annoyances of the language/environment doesn't it?
i had a project years ago that was a ton of fun, but we were required to use cold fusion. the fun of the project couldn't overcome the pain of cf.
Depends on the environment. I've never been able to finish something in Visual C++ using the Windows API.
I <3 AS3

Really! Flash got me hooked on programming. In school everyone else was bored making loops in Java and I was making a Ball bounce around the screen. Draw, code, play, repeat. Plus it runs everywhere! Personally, I suggest skipping the IDE and compile it directly from classes for free.

http://www.senocular.com/flash/tutorials/as3withmxmlc/

haskell.

the type system is divine, its hard at first put 'real world haskell' can really help with that.

others that i've had great joy with recently...

smalltalk - now using everyday and loving it ( might not meet the modern criteria ) clojure - purr

if you are looking to do web dev, give the smalltalk framework seaside a look.

haven't tried it yet, but hacking around with arduino looks pretty fun and is on my list of things to try
Ruby. It almost feels like I'm not programming, the syntax is simple and beautiful, and you can do a hell of a lot without much code (especially if you include the thousands of gems!)

For web frameworks, Rails for me is still awesome. Merb is also nice (even though I've used it less since the news it's being merged into rails), as is sinatra.

I've always found the joy comes from what I was building and not too much the tools I was using. Perhaps if you found a new, exciting project that you really wanted to build, you could use one of the languages you once enjoyed and the joy would return?
JavaScript.

What to develop for the clientside and serverside? What about Firefox? maybe a desktop application? I have recently become obsessed with learning this wonderful language that has so much potential.

I think Javascript is great but the tooling needs some work for development to be a joy. I haven't found a decent Emacs mode for it yet and while I enjoy the repl that Chrome and Firebug offer, it can be a pain to jump back and forth. Here's hoping the future offers a little more integration.
you don't like js2-mode? With mozrepl integration? I really like them... (although at the moment I'm using vim mostly for javascript just for the raw vim comfort)
JavaScript + jQuery is a lot of fun. I'm always amazed at how easy it makes things.
I'm a big fan for XNA for messing around. It lets you draw with minimal BS. And the tutorials actually work.
I thought XNA was more a gaming library than a language...
(comment deleted)
I bet that the changes in technology are a smaller factor than the changes in you. Most things are more exciting when done for the first (or nearly first) time.

To measure this properly, perhaps we could look at the eagerness with which children learn programming now as compared to fifteen or twenty years ago.

Ruby + Heroku + Git + Sinatra + Markaby

That combo makes it crazy easy to maintain a bunch of web apps and explore/publish different ideas.

Long-term, I want to drop Ruby and go to Factor (http://factorcode.org/). You can do some amazing cool stuff in Factor that is next-to-impossible in Ruby/Python/Java/etc. It's hard to find a blog post or a screencast that shows you stuff like parsing functions and macros that let you mold the language to your needs. (The documentation on them is pretty straightforward after you learn the basics.)

Then there's the postfix notation. Most people think that's Satan's love child. It takes some time to get used to.

In Ruby:

   loop { print( eval( read ) ) }
In Factor:

   [ read eval print ] loop
Just learned about Factor from the HN story a couple of days ago, I've enjoyed playing with it quite a bit. But then, Forth was my main programming language for a few years back in the 80s.
smalltalk. specifically, Digitalk's Smalltalk/V (DOS, Windows, OS/2, Mac) and their final version Visual Smalltalk Enterprise. I have never been more productive than with that environment. Squeak doesn't do it for me.

[EDIT] earlier today I cleaned out several bookshelves. I tossed about 100 old tech manuals...I kept all the Smalltalk/V books ;)

This was one of the most fun ones. Need to try squeak.
If you are on Windows, you need to try Dolphin first.
I don't do any windows anymore, but Dolphin looks like quite the thing.
Me too. Squeak/Pharo are nice (and I use them), but if someone is new to Smalltalk, Dolphin does a much better job of converting them. Very clean and compact libraries, excellent UI framework and nice UI.
I haven't used it, but _why's "Shoes" is supposed to recapture some of that early programming magic.

http://shoooes.net/

I've recently started using Clojure. Writing Clojure in Emacs (using Slime) is a joy. The integration is just fantastic; write code, send it to the repl, then occasionally switch over directly to run commands.

(Writing SBCL instead of clojure was also nice, but ultimately the cruft of common lisp made it difficult to continue.)

Paredit mode makes it even prettier. Paredit mode makes sure that a) the buffer contents are always a balanced sexp and b) you can mostly use the same keystrokes as normal editing.

Yay Paredit. I can't live without it now. Someone told me it's based on the old Interlisp s-expression editor, which is kind of neat.

the cruft of common lisp made it difficult to continue

What, specifically? Perhaps I've simply adapted to not noticing it, because apart from its relative verbosity (for a Lisp) I find CL quite nice.

Clojure is pretty joyous, but I hated the error messages the last time I was using it. They were rarely useful. Has anything changed recently?
Seconded the error messages. I am used to restarts, M-., 'v', and other stuff that has been jumping between backtrace and source code.

Clojure's error messages reminded of Microsoft C: "syntax error".

Ruby. The language was designed specifically for this.
Ruby is SO much more than rails, which I think people need to be reminded of from time to time.
I think there are many high-level languages that are fun to use -- various Lisps, Python, Ruby, even JavaScript.But if you are finding RoR tiresome to keep up with, I suspect it is more a question of the pace of change than the language itself.

In an ideal world, what kind of programming would you want to do? That might point you in a direction.

> In which modern language/environment/framework is programming a joy?

None of them.

http://www.loper-os.org/?p=16

http://www.reddit.com/r/programming/comments/64g7p/old_basic...

The disease is systemic. It pervades all modern computing systems. The name of the disease is ratcheting accidental complexity. The only cure is a from-bare-silicon reboot of all of computing.

> On the contrary, programming seems to become more frustrating as it advances

This is because it is not actually advancing. Incompetently and half-heartedly cribbing feature after feature from Common Lisp is not advancement.

> Am I missing something that can bring back my early joy or discovery

What you are missing is (was?) very real. There once was a time when computer technology was actually advancing in meaningful, qualitative ways. And when the future seemed alive with infinite possibilities. Don't let anyone convince you that all of it never existed.

I do agree with you. But what is the solution? Even if I can't change a global trend, what can I do to side step it and still keep it enjoyable to myself?
Try Mathematica. Currently it is the only programming environment I find tolerable.
Out of interest, why?
Well, among other things:

Sufficiently Lispy to not feel like a straightjacket; integrated documentation with worked examples for literally every language feature; vector/bitmap graphics, audio, as first-class data types; pattern rewrites as a superior form of macro system; higher-order programming of every kind (if you like Haskell, you can "write it" in Mathematica); the ability to execute individual lines of code and see immediate feedback; a parsing system which obsoletes regexps; syntax which never leads to tears (Perl, I'm looking at you); a library of curated data on almost every topic; seamless file and www i/o; debugging facilities unmatched by anything short of Symbolics Genera. I also ought to add that I have been programming in Mathematica full-time for almost half a year, and have never needed to use an external library of any kind.

This is only a small subset of the useful aspects. The biggest downside, however, is that Mathematica is proprietary and expensive. On top of that, it is also rather slow.

All of the features I've listed should be expected as basic and factory-standard on every computer. The fact that our expectations are as low as they are shows just how little actual progress has taken place in the industry at large in the past two decades.

The only cure is a from-bare-silicon reboot of all of computing.

I don't think that can practically happen. If you're using some not-too-powerful language to do it, it will take too long and you'll never catch up. If you're using a language powerful enough to actually accomplish it, you'll never develop a community or a culture of libraries, because the number of people who feel they can just build what they need faster than learning and using someone else's library will be high enough that libraries never get enough attention, and you'll end up with an archipelago instead of a continent of libraries. That's pretty much what happened to the lisps.

have you seen Alan Kay and company's "STEPS Toward The Reinvention of Programming" ? They're doing almost exactly that -- making small, powerful programming languages that make it easier to re-describe the fundamentals of computing. There's a pdf: http://www.vpri.org/pdf/tr2007008_steps.pdf
Lua. Minimalistic elegance.
the problem is, modern tools are too complex. they are trying to be smarter than the user

i like dumb, old power tools that don't get in my way -> unix+vim+lisp

PLT Scheme is hands down the most powerful programming environment in existence. It's sort of like the McLaren F1...those who know, know. And those who don't mistake it for a Mazda Miata.
I'm getting into scheme for a project I'm working on. Sometimes I'm really impressed by how much can be done with some tight coding. I've done some Arc coding as well, and I think that it could have the edge if it matures and gets some library support.