Scripting Languages Your Developers Want to Use
However, while we've covered several in depth, those five dynamic languages are not the only ones developers use. Since every programming language is a tool suited to solve a particular problem, it behooves each IT shop to use the best tool for the job. So in this article, I share a few up-and-coming scripting languages that really ought to be on your company's radar, with a few passionate arguments from developers who have adopted them.
Scala is particularly attractive to Java developers. Per its website: "Scala... is both object-oriented (think inheritance, methods, ...) and functional (think closures). It blends a number of modern language features, while maintaining close compatibility with Java."
Dean Wampler, senior consultant at Object Mentor, is currently co-writing a book on Scala for O'Reilly. "Scala is the best language I have seen that meets the 'one size fits all' goal," he says. "Scala fixes problems with Java, like verbosity and limitations in Java's support for object-oriented programming. In addition, Scala supports functional programming-an approach that has been around for a long time in academic computer science, but is now proving to be very useful for writing robust concurrent software. Concurrency is very important for scaling up software at large websites and enterprises."
For David Ritchie MacIver, a developer at Trampoline Systems, Scala's primary benefit is that he can avoid Java. "I can match [Java] in terms of library support, performance and ease of deployment," he says. Many Java tools carry over to Scala, too. MacIver says his company is adopting Scala for some of their visualization software as the software is updated, and reducing its use of Java and Ruby.
MacIver doesn't recommend Scala for everything, though. "People will push Scala for concurrency advantages. Please don't succumb to the temptation. It doesn't particularly have any. Any more than Java does, that is."
Another language gaining ground in the Java community is Groovy. According to its website, Groovy is an agile and dynamic language for the Java Virtual Machine (JVM). It builds on Java's strengths but has additional power features inspired by languages like Python, Ruby and Smalltalk.
So, what's Groovy's compelling feature? According to the slashdot commenter who first brought it up (and inspired this entire project... see what he or she started?), "I was surprised that Groovy didn't appear anywhere in the article. If there's a dynamic language poised to convert the enterprise crowd, it's Groovy. [It's] able to compile into Java bytecode, compile Java code and directly exploit the huge base of Java, but without the cumbersome Java syntax. I wouldn't be surprised to see Python and Ruby supplanted by Groovy in a couple of years."
Java developer Chris Broadfoot agrees. "Groovy lets Java developers code in an effective, expressive manner, while maintaining cross-compatibility with legacy Java code," he says.
Your company may be adopting the latest hardware, but can your software take advantage of its multithreading capabilities? You might want to look at Clojure, a dynamic programming language that targets the JVM. Explains its website, Clojure is "designed to be a general-purpose language, combining the approachability and interactive development of a scripting language with an efficient and robust infrastructure for multithreaded programming. Clojure is a compiled language-it compiles directly to JVM bytecode, yet remains completely dynamic. Every feature supported by Clojure is supported at runtime. Clojure provides easy access to the Java frameworks, with optional type hints and type inference, to ensure that calls to Java can avoid reflection."
Small? Powerful? Java? Can those three co-exist? Chris Houser, member of the technical staff at Four D Development in Fort Wayne says, "Clojure is a small, powerful language that compiles and runs on the JVM, so no new infrastructure [is needed]. Plus it lets you get more done with less code, which is good for development schedules and maintenance. It's particularly good at taking advantage of multicore hardware without as much programmer overhead as Java."
"The most pressing issue in software development today is how to better take advantage of multicore CPUs to increase performance and reduce energy costs," explains J. McConnell, founder of Übermensch Consulting. "Clojure provides a fundamentally better approach (in terms of ease and safety) to concurrency than other languages out there. Its Lisp heritage gives it the power to greatly increase programmer productivity in a way that grows over time and to enable easy DSL creation to allow business owners to verify the correctness of programs. The fact that it runs on the JVM and can smoothly integrate with the millions of lines of legacy Java code are just icing on a very tall cake."
Formally, Lua is "a powerful, fast, light-weight, embeddable scripting language. Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode for a register-based virtual machine and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping."
Less formally: "It's just a really slick little language overall," says Evan DeMond, a junior software engineer at a Midwest custom software development shop. "I enjoy programming in it, and I get things done in it quickly." DeMond has been using Lua for scripts and small tools. He has also experimented with writing larger apps in it lately, which "has been going pretty well so far," he says.
Developer Ralph Hempel describes Lua as "one of the best little secrets in programming languages, and I've been through a lot of them in the last 30 years." While it lacks a formally approved library distribution mechanism, Hempel says, there are plenty of de facto standard libraries for file system access, network connectivity, database access and so on. "For me, the best part of the Lua system is the rock-solid language core and the carefully considered upgrades and patches. The releases of Lua are controlled by the ' three amigos' that have been involved with the language from the start." Hempel has ported Lua to the LEGO Mindstorms NXT.
Matthew Wild, director of software consultancy Heavy Horse Ltd., sees Lua's advantages in terms of rapid Agile development, exceeding what is possible with more traditional languages. Lua doesn't try to do too much, Wild says. "Instead, it gives you the required building blocks out of which it is possible to build anything you want, in any way you want. The key benefits unique to Lua are the fact that it is amazingly small, fast, and on a technical level a masterpiece. Not every project manages to achieve so much with so little of the dreaded 'bloat.'"
Wild adds, "I've become so hopelessly in love with Lua, I've incorporated it into nearly all my recent projects, and yet it fits in nicely every time." Wild is starting to use Lua as a standalone, rather than embedded, language. "It is still fitting the job perfectly. Thanks to Lua, I'm now looking at weeks, rather than months, in our development schedule."