The state of the scripting universe
The former second-class citizens of the programming world have leaped to the fore, changing the face of enterprise software development. With the rise of Web 2.0, scripting languages (also called dynamic languages) are now often considered important tools in a developer's arsenal. That's a far cry from than their old reputation as lesser tools for those who can't handle "real" programming.
However, like any other tool, dynamic languages are not necessarily interchangeable. Each has its place in a programmer's toolkit. We asked a group of luminaries in the scripting world for their perspectives on the current state of the scripting universe, and how it has changed since we last looked at the scripting language scene in 2005.
- Richard Dice is the president of the Perl Foundation, the organization which has responsibility for Perl's legal, organizational, technical and administrative infrastructure.
- Jeff Hobbs is director of languages and Tcl tech lead at ActiveState Software and a member of the Tcl core team.
- Steve Holden is chairman of the Python Software Foundation, and author of Python Web Programming.
- John Lam leads the IronRuby team at Microsoft.
- Rohan Pall, representing PHP, is a consultant who has been programming Web applications for almost a decade.
CIO.com: What place do scripting languages have in today's computing environment?
There's also been a lot of interest in Ruby, another dynamic language, spurred by the release and growth of Ruby on Rails. As a result of these changes, many developers are becoming more comfortable with dynamic languages.
Dice: Since 2005, there haven't been any singular events that changed the way scripting languages are used or their capabilities. They have evolved (more in perception than in real capability) from a place where they were used only for simple tasks or prototyping of new systems into much more general use. The general upward slope in their acceptance and capabilities in that time, though, means that CIOs definitely need to put them on their radar and develop "scripting language awareness." In late 2007, Forrester Research published its Forrester Dynamic Language Wave survey, so research on the topic is out there to work with.
Hobbs: Scripting languages are increasingly prevalent in Web applications, with PHP's growing popularity and the rise of Ruby on Rails, while maintaining their dominance in important daily tasks such as machine and test automation with Tcl and data manipulation with Perl. Python is finding increasing use in the scientific communities.
Holden: Scripting languages are being used in a wide range of application areas. Python has recently achieved increased visibility in many areas of science and engineering, particularly in bioinformatics. Three significant Web frameworks ( Django, TurboGears and Pylons) have reached maturity in the last three years.
Scripting languages have a place anywhere that a systems programming language (e.g., implementing an operating system) is not required. Otherwise they fit basically anywhere, whether it be on the server or the desktop. Python excels in all these areas!
Lam: In general, it's easier to create and change code written in a dynamic language. Much of the Web has traditionally been created using dynamic languages, from Ajax on the client to server code written in PHP, Perl, Python and Ruby. Ruby on Rails in particular has driven a lot of interest towards Ruby, and is one of the preferred platforms to build Web 2.0 startups on.
Pall: In the last three years, we've seen the adoption of very fast CPUs, namely the Intel Core 2 line. Breaking the 3GHz barrier on this architecture-and now pushing 4GHz-has sped up dynamic language code to the point where many algorithms that simply weren't feasible to implement in PHP are now possible on commodity hardware.
In the last year, I've participated in writing text analysis software for auto-classifying documents. Our initial plan was to use C to do the heavy processing and PHP for the rest. As it turned out, on midrange commodity hardware, we were able to use PHP throughout and maintain solid performance. Web applications are commonly scripted, but in my experience, even internal processing-intensive applications are now commonly being implemented in modern, dynamic, scripting programming languages. The bulwarks have been breached and progress is now ushered in.
CIO.com: What changes are you seeing in attitudes towards scripting (dynamic) languages?
Dice: I'm noticing changing attitudes from several angles. As I mentioned before, Forrester Research released a Wave survey paper last year regarding dynamic languages. This was motivated by their noticing that their customers were using more dynamic languages and requesting information on the competitive landscape in the field of dynamic languages.
Tools companies, including Eclipse and ActiveState, are offering more and better products for working with dynamic languages.
A segment of Java programmers seem to be embracing Ruby (and Rails) in particular. A new dynamic language, Groovy, is capitalizing on this trend by providing a dynamic language on the Java Virtual Machine (JVM) that incorporates elements of both Java and Ruby.
Support for independent software vendors (ISVs) with dynamic languages is also improving. The Linux Foundation's recently-released LSB 3.2 spec includes Perl and Python as first-class supported languages within the spec, so ISVs who target this spec for their software can depend on Perl and Python being present in regularized configurations.
Hobbs: The dynamic languages are becoming more accepted. This is in part through more acceptance of open-source software, which all the dominant dynamic languages are (versus Java and .Net, which are questionably open in their process and/or sources). It is also due to good frameworks being developed using newer languages such as Ruby on Rails. You also see larger organizations fostering support for the languages, such as Google's support of Python, which was made their primary development language for Google App Engine.
Holden: People seem more positive towards scripting languages. They have, over time, come to realize that their performance is such that they work for most problems and have also learned that the compilation step can be heavy-handed and a huge time sink in the development cycle.
There is now a more general appreciation of the advantages of dynamic languages, whose characteristics are well-suited to Agile test-driven development techniques that have also become more popular in the same time frame.
The last three years have seen increased uptake in dynamic languages in many application areas. For Python in particular, the IronPython (now a Microsoft open-source project) and Jython (whose primary developer was recently hired by Sun Microsystems) implementations have had a positive impact.
Lam: Compilation is orthogonal to static/dynamic. IronRuby is a compiled language (and an interpreted one too- we offer both options), yet it is clearly a dynamic language. So it's better to say that there are changes in attitude between static versus dynamic languages.
There is a "polyglot programmer" meme going around which roughly says that future systems will be built on a statically typed library foundation (e.g. BCL in .Net) with a dynamically typed language used in a dual role to both script those static types as well as define a domain-specific language (DSL) which will be used to implement the high level app logic.
Pall: For a large number of applications, when deciding what technology to use, it is no longer the case that the debate centers around dynamic languages versus compiled languages. Scripting is now considered real programming, and indeed most people don't even use the word "scripting" when describing what they do, but instead call it "programming." These days, it boils down to which dynamic programming language to use, not if you should use one.
Boyd: Other than a greater comfort with dynamic languages, I don't know of specific impacts of Ajax on other languages. The techniques of Ajax are really only applicable inside the browser.
The first scripting language to benefit from Ajax in a big way was Ruby, though this was much more an accident than anything else. A Ruby Web rapid application development framework called Ruby on Rails started gaining attention in 2005. It had three things in its favor: it was based on the Ruby language (which a lot of people find quite nice to program with), developers found it to be a significant boost to productivity, and it was the first framework to integrate with any Ajax library. So it quickly became identified with Ajax and vice versa. Nowadays, every major scripting language has decent integration with every major Ajax library.
In the Python world, the TurboGears framework in particular accommodates support for several well-known Ajax toolkits, but the emergence of Ajax is essentially orthogonal to the language used for Web development, and is as likely to be used in the ASP.Net environment as by Python users.
Top Fortune 500 companies have limitations in their technology choices that must be adhered to, and Ajax has brought needed functionality to Web applications that are now replacing legacy Visual Basic applications, and doing it while being compatible across operating systems. Using Firefox to run Web applications internally on GNU/Linux based operating systems, with its solid Ajax implementation, has cut down licensing costs for many school boards across the province of Ontario, Canada, for example. This savings can be translated into hundreds of thousands of dollars saved.
CIO.com: What is the one thing you would tell a CIO who is considering scripting languages?
Dice: Scripting languages are the expanding frontier of programmer productivity and they are the first technologies to expand into whatever new niches appear in IT. They're the best way to future-proof your efforts without sacrificing new opportunities.
Of all the scripting languages, Perl offers the biggest installed base of applications, of code, of integrated systems, of skilled programmers. It has the lowest defect rate of any open-source software product. It is ported to essentially every hardware architecture and operating systems, from embedded control systems to mainframes. It is optimized for speed, for memory footprint, for programmer productivity. It has readily-accessible libraries for all types of programming tasks: Web application development, systems and network integration and management, end-user application development, middleware programming, REST and service-oriented architecture programming. Perl is ideal for the organization that takes charge of its own IT future.
Hobbs: First and foremost, scripting (dynamic) languages are here to stay. Dynamic languages better support an adaptive/iterative development model, and so are of increasing importance in the fast changing IT landscape of the early 21st century. They provide an excellent complement and often a better outright replacement for systems languages (such as Java, C++ and C#).
At ActiveState we are addressing similar issues around the misconceptions of open-source software in general and dynamic languages in particular with whitepapers like 10 Myths About Running Open Source Software in Your Business. (PDF)
Holden: Don't discount scripting languages in general or Python in particular because of a lack of explicit typing or assumptions of poor performance. Requiring the declaration of types only catches a minor set of potential bugs that are easily discovered by typical unit testing. As for performance, Python might just surprise you.
And on the off-chance something is not fast enough, you have the option to go back and rewriting it in C/C++ (or in Java or any .Net language if you use Jython or IronPython) as needed, allowing you to still benefit from Python's high level of productivity.
Scripting languages in general and Python in particular can offer massive increases in productivity with little or no negative effects on eventual system performance. Where performance gains are required extensions can be crafted in compiled languages if necessary.
Lam: Dynamic languages offer better productivity in many cases. Future programs will be written using a mix of static and dynamic typed languages. Use each language where it is best suited: dynamic languages to define DSLs, and static languages where you want to leverage the power of a strong type system for things like static verification of programs or increased performance.
Pall: Dynamic languages improve productivity and reduce complexity leading to simpler less error-prone solutions. PHP has a large, helpful, intelligent community that offers a mature product, without too many surprises.