Im sure my answer / comment on What is Gradle in Android Studio? will get downvoted into oblivion with short-shrift fairly soon. (Maybe deservedly).

But I’ll make it here :


At the risk of being discursive I think behind this is the question of why the Android Studio / Gradle experience is so bad.

Typical Clojure experience :

* download project with dependencies listed in project.clj.
* Leiningen gets the dependencies thanks to Clojars and Maven.
* Project compiles.

Typical Android Studio / Gradle experience :

* “Import my Eclipse project”.
* OK project imported.
* Gradle is doing it’s thang … wait … wait … wait … Gradle has finished.
* Compile … can’t compile because I don’t know what an X is / can’t find Y library.

I’m not sure this is Gradle’s fault exactly. But the “import from Eclipse project” seems pretty flaky. For all of Gradle’s alleged sophistication and the virtues of a build-system, Android Studio just doesn’t seem to import the build dependencies or build-process from Eclipse very well.

It doesn’t tell you when it’s failed to import a complete dependency graph. The Android Studio gives no useful help or tips as to how to solve the problem. It doesn’t tell you where you can manually look in the Eclipse folders. It doesn’t tell you which library seems to be missing. Or help you search Maven etc. for them.

In 2016 things like Leiningen / Clojars, or node’s npm, or Python’s pip, or the Debian apkg (and I’m sure many similar package managers for other languages and systems) all work beautifully … missing dependencies are thing of the past.

Except with Android. Android Studio is now the only place where I still seem to experience missing-dependency hell.

I’m inclined to say this is Google’s fault. They broke the Android ecosystem (and thousands of existing Android projects / online tutorials) when they cavalierly decided to shift from Eclipse to Android Studio / Gradle without producing a robust conversion process. People whose projects work in Eclipse aren’t adapting them to AS (presumably because it’s a pain for them). And people trying to use those projects in AS are hitting the same issues.

And anyway, if Gradle is this super-powerful build system, why am I still managing a whole lot of other dependencies in the sdk manager? Why can’t a project that needs, say, the ndk specify this in its Gradle file so that it gets automatically installed and built-against when needed? Why is NDK special? Similarly for target platforms? Why am I installing them explicitly in the IDE rather than just checking my project against them and having this all sorted for me behind the scenes?


Posted in Uncategorised.

I’m using Racket more than Clojure these days.

And I’m wondering, is this really about A Good IDE?

Because I still like Clojure better as a language. And I like the standard library a lot better. And love ParEdit in Emacs. It’s just that the all-in-one-ness of DrRacket is so darned convenient.

Posted in Uncategorised.

My Quora answer :

Simon Kinahan‘s answer is good, though I think he’s over-emphasizing the snobbery aspect.

What’s definitely true is that IDEs are often not particularly optimized for the application you want to write. And often they’re optimized for the application you DON’T want to write.

This is particularly true as, like most user-facing application software, IDEs tend to carry a lot of historical cruft; because radically changing interfaces really pisses people off.

So IDEs were born in the age when people wanted to build desktop GUIs, and maintain all the infrastructure and UI conventions for doing that, even when people want to use them to write something else : small command-line tools, web-applications, mobile apps. etc.

Ideally, IDEs would be highly optimised and tuned for the application we do want to write. In practice that usually becomes your IDE needs to be loaded up with a whole lot of new plugins for each new application, but because adding and taking away plugins is kind of clunky you’re left with all the historical plugins you installed for the last application; and anyway all the plugins are second-class citizens compared to the activities that were assumed to be standard when the IDE was originally released.

That translates into … the IDE is overloaded with options and SLOOOOW.

In 15 years, I’ve never owned a computer that was fast enough to run Eclipse without me feeling like I was trying to type through toffee. I’d like to install Android Studio … but it seems like I don’t even have enough anything on my computer to run Android Studio. Not memory, not disk space. Not screen resolution.

The ideal IDE would be nothing but a plain editor. And everything else would be a plugin. So that it could be radically reconfigured for each new application type. And that’s why people love Vim and Emacs, which work to that principle.

Apart from Emacs (which I have a love-hate relationship with.) I think I’ve liked two IDEs in my time : the original VB classic, which was perfect for me, when I wanted to write simple Windows GUI programs. And Processing, which is the perfect IDE to write little computer art programs. (Because that’s all it knows how to do.)

I’ve used a Python IDE which was OK. But I didn’t miss it when I moved back to a simple (tabbed) editor. I’ve used various IDEs to write C++ but they’ve always lacked the most obvious thing I’ve wanted in a C++ environment : useful help in finding and linking the libraries I’m trying to use. [rant]Despite library management being a big part of C / C++ development, most IDEs I’ve seen seem to treat finding the library you want and configuring the compiler to include it, to be some fiddly infrastructure thing that they’re embarrassed to get their hands dirty with. Why the hell don’t C++ IDEs have a big “Fix the fucking paths” button on their toolbar? Better still, why don’t they just fix the fucking paths without me having to do anything?[/rant]

tl;dr : what’s wrong with IDEs?

1) Too slow.
2) Cluttered up with too many irrelevant options. Why can’t they focus on the ones relevant to me now?

I think we’re partly to blame though. I think we kind of hope for one big tool that will do everything. Rather than accept that we need different tools for different applications. I’m hoping that, in the future, we’ll end up with specialized development editors, perhaps delivered in the browser. So you want to write C++ for games on Windows, go to and select the C++ for games on Windows page and get an editor / dev environment that’s specialized just for that.

Posted in Uncategorised.
Interesting this new surge of dynamic IDEs. First there was Brett Victor’s awesome demo. Now there’s LightTable (promoted on KickStarter, discussed on Quora)

Sporadic thoughts.

Is this implemented in the browser? (Bespin? CodeMirror)? Perhaps we’re seeing this explosion of innovation as IDE authors move to the cloud.

A Kickstarter project? That’s cool. But motivated by early investors getting licenses? Does it also mean that this next wave of software innovation will be abandoning Open Source as a model?

Elements of Jonathan Edwards’s Subtext in the tree of updates. Of course, he’s paying attention.

Posted in Uncategorised.

I’m expounding my usual “late-bound” tabs model of IDEs again, over on StackOverflow.

… late binding between the buffer in the editor and actual concrete thing you’re working on, gives the editing environment more flexibility and power.

Think this is out of date? One place where the idea is back with a vengeance is in the browser, where you don’t have 1-1 correspondence between tabs and web-pages. Instead, inside each tab you can navigate forwards and backwards between multiple pages. No-one would try to make an MDI type interface to the web, where each page had it’s own inner window. It would be impossibly fiddly to use. It just wouldn’t scale.

Personally, I think IDEs are getting way too complicated these days, and the static binding between documents and buffers is one reason for this. I expect at some point there’ll be a breakthrough as they move to the browser-like tabbed-buffer model where :

a) you’ll be able to hyperlink between multiple files within the same buffer/tab (and there’ll be a back-button etc.)

b) the generic buffers will be able to hold any type of data : source-code, command-line, dynamically generated graphic output, project outline etc.

Posted in Uncategorised.