The World’s Most Mind-Bending Language Has the Best Development Environment
Programming in the 21st Century - James Hague - August 24, 2009I highly recommend that all programmers learn J. I doubt most will end up using it for daily work, but the process of learning it will stick with you. J is so completely different from everything else out there, and all your knowledge of C++ and Python and Scheme goes right out the window, leaving you an abject, confused beginner. In short. J will make you cry.
But that’s not what I want to talk about. Though it’s a bizarre and fringe language (yet not one of those programmer attempts at high humor), J is the most beautiful and useful development system I’ve come across. I’m not talking about the language itself, but the standard environment and add-ons that come with the language.
The IDE is more akin to Python’s IDLE than monstrosities which may come to mind. There’s a window for entering commands and seeing the results, and you can open up separate, syntax-colored editor windows, running the contents of each with a keypress. It’s nothing groundbreaking, but it’s something that most languages don’t provide. And in the spirit of IDLE, J’s IDE is written in J.
(I’ll interject that J is cross-platform for Windows, OS X, and Linux, including 64-bit support, just in case anyone is preparing to deride it as as a Windows-only.)
Then there are the standard libraries: 3D graphics via OpenGL; full GUI support including an interface builder; memory-mapped files; performance profiling tools; a full interface to arbitrary DLLs; regular-expressions; sockets. Again, nothing tremendously unusual, except maybe memory-mapped files and the DLL hooks, but having it all right there and well-documented is a big win. Beginner questions like “What windowing library should I use?” just don’t get asked.
The first really interesting improvements over most languages are the visualization tools. It’s one line of code to graph arbitrary data. Think about that: no need to use a graphing calculator, no need to export to some separate tool, and most importantly the presence of such easy graphing ability means that you will use it. Once you get started running all kinds of data through visualization tools, you’ll find you use them to spot-check for errors or to get a better understanding of what kinds of input you’re dealing with. It goes further than just 2D graphs. For example, there’s a nifty tool that color codes elements of a table, where identical elements have the same colors. It makes patterns obvious. (Color code a matrix, and you can easily tell if all the elements on a diagonal are the same.)
What makes me happiest is the built-in tutorial system, called “Labs” in J lingo. It’s a mix of explanatory text, expressions which are automatically evaluated so you can see the results, and pauses after each small bit of exposition so you can experiment in the live J environment. Labs can be broken into chapters (so you can work through them in parts), and the tool for creating your own labs is part of the standard J download.
While many of the supplied labs are along the lines of “How to use sockets,” the best ones aren’t about J at all. They’re about geometry or statistics or image processing, and you end up learning J while exploring those topics. J co-creator Ken Iverson‘s labs are the most striking, because they forgo the usual pedantic nature of language tutorials and come across as downright casual. Every “Learn Haskell” tutorial I’ve read wallows in type systems and currying and all the trappings of the language itself. And after a while it all gets to be too much, and I lose interest. Iverson just goes along talking about some interesting number theory, tosses out some short executable expressions to illustrate his points, and drops in a key bit of J terminology almost as an afterthought.
If you’re wondering why I love the J environment so much but don’t use it as my primary programming language, that’s because, to me, J isn’t suited for most projects I’m interested in. But for exploration and learning there’s no finer system.
(If you want to see some real J code, try Functional Programming Archaeology.)
Categories: Blogs Programming in the 21st Century
Erlang on Twitter
» nivertech (Zvi): RT @t_sloughter: Who needs ruby/python when you can deploy @elixirlang Dynamo apps to Heroku? https://t.co/5GJ0cxK6ZY #erlang
» nivertech (Zvi): RT @InfoQ: Over 40 Erlang experts at #Erlang User Conference 2013 13-14 June Stockholm. 25% off with code INFOQ2013 http://t.co/yWMO0IiF45
» Erlang_Bolank7 (Erlang siBolanx): Aq lagi ngimpi
» PseudoIO (Pseudo.io): http://t.co/5vUwNGTk9a, Bringing Erlang style pattern matching to Ruby | http://t.co/eREWrnqunJ
» NotDoctorOk (Not Richard O'Keefe): the COBOL standard is 910 pages. I have in fact been reading it on an iPad […]. The SQL standard dwarfs it. http://t.co/rv1JJrnZZY
» mfilippovich (Maxim Filippovich): “Frej Drejhammar, The Brains behind the Erlang JIT” http://t.co/82fWDBLZCs - recommended via @Prismatic
» shibukawa (Yoshiki Shibukawa): RT @InfoQ: Over 40 Erlang experts at #Erlang User Conference 2013 13-14 June Stockholm. 25% off with code INFOQ2013 http://t.co/yWMO0IiF45
» rsslldnphy (Russell Dunphy): .@nwrug for anyone interested in the crazy gem I sort of glossed over in my talk last week, I wrote a blog about it: http://t.co/kyXchPa5Ws
» we_are_se (システムエンジニア支援!BOT): RT @SNSList: Apache Thrift:これはソフトウェアスタックとコード生成エンジンを組み合わせることで、 C++ C# Java Perl Python PHP Erlang Ruby などの言語間にて効率的かつシームレスに動作するサービ http://t.c…
» lhoguin (Loïc Hoguin): RT @InfoQ: Over 40 Erlang experts at #Erlang User Conference 2013 13-14 June Stockholm. 25% off with code INFOQ2013 http://t.co/yWMO0IiF45
Statistics
Number of aggregated posts: 10649
Most recent article: May 19, 2013
Latest comments
» Moraru on This is Why You Spent All that Time Learning to Program: It is true that computer science was a pain in the back at time that i’ve had to learn it…
» Commercial hand dryers on Couchbase Meetup at new HQ: Buy online from here where you will get so much of variety in Commercial hand dryers for people. If you…
» Fort McMurray Homes on Motivated Reasoning and Erlang vs Python vs Node: I don’t really understand why this post is motivational? I don’t even see a post, just a title. Fort McMurray…