Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: In which modern language/environment/framework is programming a joy?
53 points by reedlaw on May 30, 2009 | hide | past | web | favorite | 92 comments
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?

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.

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.

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.

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.

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

None of them.



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.

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

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.

On the subject of Mathematica vs Lisp, I found this[1] thread interesting especially as it contains a lengthy review[2] by Fateman. While my own personal experience with it is limited, I have to say its rules for evaluating expressions are quite tricky to master compared to Lisp.

1- http://coding.derkeiler.com/Archive/Lisp/comp.lang.lisp/2004...

2- http://www.cs.berkeley.edu/~fateman/papers/mma.review.pdf

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".

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?

Lisp + Emacs + Slime felt like a total joy to me. Python with its REPL and a "batteries included" approach was a distant second, with Perl (with emacs' cperl-mode integrated with perl's debugger as well as the extensive and easy to use CPAN library) being a closed third.

I might also get branded heretic for saying this on HN, but lately I've been also able to enjoy Java development: with git for revision control, maven for project lifecycle management/pulling dependencies in an almost CPAN-esque manner, IntelliJ for an IDE (which, I've been told comes close to the capabilities that the Lisp machines had as far being an IDE goes) and jetty (invoked through maven) for a servlet container (a breath of fresh air compared to Apache as well as tomcat).

I'm enjoying my time with maven/jetty too. It was a steep learning curve but once it works its very smooth. I also recently substituted Java for Scala and can recommend that highly if you're doing the coding for the fun of it.

I'm going to take what is probably an extremely unpopular position here and bring up .net (C# in paticular). I say this for two reasons...

1. Visual Studio is still one of the if not the most powerful programming enviornment out there. It's ability to predict what you are about to type and fill in the blanks for you makes a lot of programming tasks fly by. I know there are a lot of places where I could get by with less code if I was using a language like Python but autocomplete more than makes up for it.

2. If you're building a serious, business application that will have to serve thousands of users than a technology like ASP.NET probably isn't for you. But if you're building a smaller app the abstraction that ASP.NET Webforms provide is a real time saver. You can literally just draw your interface and then fill in the events. Again, it comes with a performance penalty for sure, but if you're looking for joy there's nothing cooler than being able to whip up an app in under an hour.

I've never programmed in C# with Visual Studio but I have no trouble believing that what you are saying is absolutely true.

For the last two years I've been programming exclusively in Java inside Eclipse and the experience is far better than any other language/tool combination I've worked with before.

Auto-completion and inline documentation is great, but the IDE features that really have me sold are powerful navigation, painless refactoring, incremental compilation, and adding imports with a single keystroke.

I don't have nearly as many complaints about Java as the rest of the world, but I do admit that I've been getting pretty excited about Scala lately.


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.


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.

Might not be a popular suggestion, but I have been playing with Flash 10, Action Script 3 and really enjoying it.

The beauty of JavaScript with a nice graphics library and a few other little bonus.

Much improved over the early days of Flash.

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.

As an environment, I loved CMUCL, PC-FORTH, Self, and VGA programming with Turbo C; none of them are "easy" for most beginners.

For the "woah" factor: Mozart/OZ, Prolog, Scheme and J. The first two days you discover prolog I don't think you will be able to function socially; you might need to miss a few phones calls. J will have you asking "WTF?" a lot.

Most enjoyable? if I said Perl I am afraid I will be chased out of this place :-P

if I said Perl I am afraid I will be chased out of this place

I would hope not, but one never knows. There does seem to be some bigotry against Perl in some circles.

But, one can't argue with statistics, right?


Anyway, I also find Perl a lot of fun to work with. I write fewer bugs in Ruby (shockingly few, actually, despite never having spent much time with the language), but Perl has the CPAN which makes almost any project like playing with a really nice Lego set: You just plug lots of cool looking colorful pieces together and at the end you've got a spaceship.

I've used Python heavily in the past, and enjoyed it, but I certainly haven't experienced any pain going back to Perl. If I were starting a project from scratch today, odds are at least even that it'd be in Perl (though new-fangled stuff like Haskell has some appeal, just by virtue of being all new all the time). JavaScript is probably also a strong contender for pretty much anything...I'm pretty confident that JavaScript is going to be the worlds most popular language both client and server side, and it's a language that I enjoy working with.

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.


Processing! http://processing.org/

(Not general purpose, admittedly, but very very satisfying.)

Take a look at the Appcelerator/Titanium platform http://appcelerator.org/ it's like Adobe AIR but you can build using Javascript, C, Ruby, and/or Python, UIs in HTML/CSS on top of Webkit. So you can use your existing knowledge, know you have a capable rendering engine by default and build desktop apps that can deploy to Windows, Mac and Linux. And it's Open Source (another difference vs. AIR). It's still in development, beta coming out in a couple of weeks, but certainly looks very promising.

Alternatively, if you'd like to try doing some games, there's LÖVE, a 2D game engine in Lua: http://love2d.org/

Who knows, either may provide the new air of excitement you're looking for.

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.


In all seriousness, I'd say Ruby. Whether you use Rails or not, Ruby really is a beautiful language.

I find Scheme + C to be the most satisfying combination. I love the abstractions that Scheme provides and good C bindings means I don't have to worry about what libraries may or may not be available.

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

One of the most enjoyable experiences I've had recently was with Arduino. It's amazingly easy to build cool shit with it. It's both rewarding and fun.

An example (since I haven't recorded any of my projects yet; also sorry it's in Portuguese): http://blog.bsoares.com.br/processing/controlling-rgb-led-wi...

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 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 + Merb. Spend the entire time with both my code and Merb framework code open. It's well written and easy to understand, so there's no blockers.

Lua and Python.

For real projects, Lua will expect you to know C, but in exchange, it avoids duplicating a bunch of functionality that you already have on hand. (Calling C from Lua is trivial.) The designers have done an excellent job of keeping the language simple and clean without detracting from its expressiveness. (Lua is to Scheme as Python is to Common Lisp.)

Python is bigger, and has more design quirks for backward compatibility, though Python 3 attempts to fix this. OTOH, it also has far more off-the-shelf libraries, and a significantly larger community.

(Forth is also fun. I'd be lying if I said I've ever done anything useful with it, but it really captures the wonder of being a kid and playing with Basic.)

This isn't a programming language, and I'm very young, and obviously you're past this ...

but I'm taking my first baby steps in Vim, and damn but it's bringing me joy! (I like it so much, this post comes to you courtesy of vimperator firefox plugin).

I find Ruby + C combination the most enjoyable for non-web things.

But for web I prefer Python/Django.

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.

JavaScript is the new BASIC. It runs in any browser. Or you can also run your scripts with a dedicated interpreter.

Lua. Minimalistic elegance.

I have a similar background, apple II and then amiga programming when I was young. There are few (no?) programming environments as simple and "fun". That said, I really enjoy iPhone programming. If only because the hardware, UI and "form factor" let you do fun things that simply aren't possible on a desktop or laptop computer. Software like the Smule Ocarina is only possible with a device like the iphone. The simulator leaves much to be desired but am having a lot of tun testing on the phone.

If Palm Pre takes off, I can imagine the development environment for that being a joy to code. Since its all webkit based, with html+css+javascript, it should be easy to work with.

I haven't dived in yet, as I'm waiting for them to establish some hold on the market, but as a web developer anticipating doing mobile apps, I'm hoping for some success.

Would be cool if Android 3.0 would take up this idea of using web technologies to interface with mobile apps. If anyone had a vested interest in web technologies, its Google.

For making web sites/apps, CodeIgniter (PHP framework) made the server-side fun again. Same for jQuery on the front-end. Especially with CI, I feel like I can get into a good groove and get lots done.

Of course, I'm probably biased: at my day job they've chosen Java for web develoment. (The "approved" libraries/frameworks are not only years behind, but onerous.) So, in my spare time, almost anything that's not-Java is fun.

I'd definetively say that the Unix environment are fun to have around as a platform for programming almost any modern programming language.

Eclipse with its basic features for java development are fun. When you have learnt how to exploit the features and learnt to live with it's limitations, it's at least not getting in your way. But I guess you can say that about most Ide's when you have learnt it well and grasped an understanding of what you can and can not do with it. So now I fire up an Ide for the project and management off and do the hardcore editing in Vim, leveraging the best of the two worlds. And are having fun too.

The day's for the "one size fits" all may be gone.

I think they days for small beautiful fun to use languages are finally gone with the end of Moore's Law. Everything will become more complex to deal with. Thinks the trick to leverage the fun for a project is to use different environment for different contexts of the project, and create tools for dealing with your specific needs.

Does nobody else like like straight up C++? When I was young I enjoyed BASIC languages, but ever since graduating middle school I've been a C++ guy. I love the intricacies of the language and crazy things you can do with it, and still get a huge amount of satisfaction out of being able to write really simple code that does really complex stuff.

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.

Ruby + Rails + MySQL + nginx + mod_rails

Until now I have done Lisp programming only for academic purposes ,but it was still a lot of fun.

Django! http://www.djangoproject.com/

Developing on this Python web framework is really a joy.

You can instantly start coding and testing by reading the official tutorial.

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.

Yes, in my personal opinion NOLOH (http://www.noloh.com) is quite a joy to develop with.

I'm getting surprising amounts of joy from Qt (via c++). It's well thought though, has proved to be fairly painless to use, and is getting very comprehensive in it's current version. Also, I love the performance.

Interestingly, I haven't got the same feeling for XAML, which I thought I would before starting to use it as there are conceptually nice things about this framework.

I find Python a real joy generally.

JavaScript is fun in the sense that you can do some very cool and interesting stuff fairly easily.

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...

haven't tried it yet, but hacking around with arduino looks pretty fun and is on my list of things to try

OCaml :)

Just be warned that until you understand how OCaml "thinks", it'll seem like the language that whacks you on the wrist with a ruler whenever you try to do anything. Awesome language, kind of a quirky implementation though.

Of the books I've read, _The Little MLer_ conveys the mindset the best. (It's in the same style as _The Little Schemer_, but is about ML, type systems, and type inference in general.) For learning OCaml and its toolchain, the French OReilly book (free English translation: http://caml.inria.fr/pub/docs/oreilly-book/) is a good text.

Coding something that excites you overcomes the annoyances of the language/environment doesn't it?

Depends on the environment. I've never been able to finish something in Visual C++ using the Windows API.

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.

I like Python on Google App Engine + Prototype.js

Why pick one or two? All of them are a joy. I get paid to play with software and computers.


I took a p4 2.4ghz w/ 1gb ram out of the closet and have been partitioning, compiling, bootstrapping, to my heart's content. To be honest, working with a super minimal system at the cli is a lot like coding in all caps on my old Apple II+.



Joy is a your own product, at least for a half. It comes from combination of state of the mind, which you can cultivate, along with your current mood which is based on what you think.

For example, if you can think about vi editor not the way that it is a mess of one-letter commands and beeps, but that it is very rare almost 40 years old masterpiece of smart design, efficiency and minimalism this approach might work. Think that it was created for text-typing pros, who types very fast without even looking on keyboard, and so on. If you prepare yourself for the way of discovering its wonders and ideas, and do realize that it is the best tools for storming throught dozens of files in /etc, and the sequences like '/^debug[Enter]I#[Esc]ZZ' are beautiful you will probably feel a joy.

Same thing, if you will think about emacs (in console mode, without gtk gui) that it was designed to work via hardware terminals, like this lovely DEC's vt-i-didn't-remember-the-numbers boxes, with green letters and that wonderful hardware scrolling, you will probably understand, why there are so many of those Ctrl-x Crtl-x commands in it, and how smartly these commands was arranged.

The power and beauty of 'screen' utility is a common knowledge.

As for programming languages, just think about ideas behind them. Think that C is a great engineering masterpeice, that Perl is a most beautiful way to create a completely mess that works, that Ruby was developed by truly eastern mind, and lisp.. you know.

I can't tell something about PHP except that it is an swiss-knife stuffed with low quality blades, and Java is the biggest buzzword ever (anyone can run some once-written spring-hibernate-jsf-with-all-depencies mess everywhere? on ARM?

We are what we think. =)

Shell script keeps me happy, you've not lived until you've used join(1) in production. http://man.cat-v.org/plan_9/1/join

Assembler is good especially on something clean like a microcontroller. I like the AVR instruction set. http://www.maht0x0r.net/library/computing/avr/docs/8bit_avr_...

Hook up an AVR to a GSM module and a SIM and you've got you're own programmable cell phone, like this one http://www.sparkfun.com/commerce/product_info.php?products_i...

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.

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.

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.

Side scroller...PyGame?

Do you really love the lamp or are you just saying that because you saw it?


I love LAMP! I love LAMP.

Applications are open for YC Winter 2020

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