I recently had a yearning to debug using something more sophisticated than print statements. As a technique it works fine (I believe Linus Torvalds uses it in hacking Linux for example) but it does end to leave one’s code splattered with geek droppings: lots of Print “foobar #{var1}” all over the place. In all honestly I feel a bit embarrassed by these when anyone else looks at my code. So I was hoping for a debugger to reduce these droppings. Most languages have a command line debug program like dbg etc but these all have a huge learning curve & are about as friendly a rabid ferret. I hoped to use an IDE to get a well integrated debugging experience where the bells & whistles editing and version control stuff was nice but not a deal breaker.
So what to choose? The three main contenders for OSX Yosemite (I use a Macbook Pro) seemed to be Eclipse, Intellij and Netbeans. There are lots of other IDEs but most seemed to be specific to a language whereas these were all multi-platform and multi-language. I also took the aesthetic choice to avoid Emacs: although it has support for many languages & debug tools it’s a piece of shit. It has a learning curve steeper than the Eiger, is as usable as a severed 400V cable in the rain, and – visually – it looks like it was written in the 1970‘s. I’m just not that masochistic. My intention was: install the IDE, install the language plugins, test debugging for a Hello World app in each language. That was the intention. I’m that dumb.
My hopes were that I could use one IDE for all the languages I play or experiment with: Erlang, Clojure, Scala, Java, Python, PHP, Ruby and C#. Having used Intellij a couple of years back I thought I’d give that the first try. It was that or Eclipse and I remember Eclipse being a bit unwieldy when I last used it with Erlang.
Installing in Intellij/IDEA was dead easy. Plugins are found by clicking ‘Preferences -> Plugins’ from the main menu. There is an Erlang plugin so I installed that. An immediate irritation is that you have to set the SDK manually. I’m not sure how hard it is to search $PATH for the erlc but it didn’t find it so I had to do it manually. Annoying. When compiling my test code I kept getting errors. “SDK not found” which I eventually nailed with Google (what did people do before Google & Stackoverflow?), then I would be unable to set any breakpoints. Then I found I needed to start the Erlang Port Mapper Daemon (epmd) by running “erl -sname foo -s init stop -noshell” in a shell. Even with the mapper daemon running it still wouldn’t do anything.
Running Clojure was equally painful: I found the plugin & installed it. Did a 2 line test program. Compiled it OK. Then when I ran it got a dialog saying ‘Clojure classes’ not attached to project’. So I had to find those, manually, add them manually by digging around in the config dialogs. Then I was still unable to debug by stopping on a breakpoint as all the options were greyed out. I think there is a jvm remote debug option to add ‘somewhere’. After may hours I gave up and tried the same experiment on Netbeans. Success out of the box!! It Just Worked™. But Oh, on Netbeans Scala didn’t work due to some weird XML related ‘make transitive’ error. PHP didnt work either. There was no Erlang plugin. But hey, OK, I now have a viable Java IDE. Intellij also didn’t do PHP though it seems that the core developers Jetbrains have realised there is a money making option in forking a dedicated PHP only version rather than relying on open source plugins from volunteers. Great. Except that for playing about with personal projects I’m not much minded to cough up money that could better be spend in the pub. As it was, after moaning on Twitter, I acquired a working copy of PHPStorm which installed fine and debugs perfectly. But it’s not free and I’d have like it to use PHP with Intellij/IDEA.
None of my development languages worked in Eclipse. Either there was no plugin, it didn’t work or it may have worked but in the maze of options I lost the will to live. Actually, I think Clojure may work in Eclipse but I’m not that sure & I’m too traumatised from the last attempt to go back and try again.
I didn’t find any solution for Ruby with any of these IDEs.
Conclusion
These are tools that ought to be doing the heavy lifting for me, but aren’t. The configuration of the systems was a nightmare & instead of having One IDE To Rule Them All I’ve now got three. I’ve done enough one man projects to know how hard it is get code to the point where it ships without problems when users play with it; I’m not too inclined to slag off the developers who are doing this stuff for free (because tightwads like me won’t pay) but god it’s frustrating. I suddenly realise the virtues of a good code editor like Textmate and a bash shell.
Update: for Netbeans & Scala apparently one removes “-make:transitive” from an option in nbproject/build-impl.xml