I've been giving a lot of thought, lately, to enterprise coding standards, development policies, and so on. I've also been following the largely laughable marketing buzz that is "Enterprise Software". This Meditation is the result of pondering the pragmatic decisions I might make were I to be asked to set policies and standards for an organization.
Don't buy the media buzz: enterprise software doesn't mean "enterprisey". The term "enterprise software" has some merit, if thought about in some kind of sane context. Since the term has turned into some bastard child of marketing, I feel the need to clarify the term at the outset.
Enterprise development has three main components:
Development standards include choice of language, requirements for interacting with other code (e.g. libraries, IPC), vetting of technologies and modules, and choice of methodology. This is primarly what this meditation is about.
Change control standards deal with language and interpreter/compiler versions, library versions, source control systems, coding styles0, and deployment methods. In general, I support use of the most recent well-tested and stable versions, and the use of a good merging source control system (often CVS1).
Documentation standards address content and style of in-code comments, user and technical documents, documentation of third-party modules, publishing standards, and so on. I tend to recommend established best-practices for each chosen language -- e.g. use Javadoc for Java code, POD for Perl code.
I mostly want to focus on choices of language for this Meditation.
Most organizations of any size have some combination of UNIX-alikes (UNIX, Linux, BSD, etc.) and MS-Windows. And, they have a combination of web/server, desktop, and script environments2.
Java is immediately appealing: it meets all of the requirements to some degree, the framework itself costs nothing, and the available tools for web and desktop application development are excellent (think Eclipse {free} and RSA, not to mention Ant and the like). The spec for the language is open and a ratified standard. Sun is even moving toward open-sourcing the kit. Plenty of developers are available, and the nature of the language (and available tools) provide some measure of protection against mediocre developers.
Java, though, tends to be slow at runtime (well, mostly during startup). Besides that, it runs up against a wall when doing things in script environments. Yes, you can shoe-horn it, but it's not easy to write, say, Windows automation in Java. So, while Java is a good choice, it isn't a complete one.
Many organizations turn to the .NET framework to address their Windows needs. This is largely a result of an object model that makes Windows features available to developers in a way that a language like Java just isn't intended to. .NET languages satisfy most of the enterprise requirements, and their ability to rapidly solve Windows-specific problems is simply a requirement in most organizations. C#, while somewhat unweildy, is a good choice to complement Java -- the syntax and program structure are so close to Java that Java developers can often be retrained as C# developers in short order. This allows better management of a development staff, as you can have cross-functional teams allocated to whichever dev group is in need at the moment.
But, with C#.NET and Java, you still have rather large frameworks. And, while C#.NET works very well in Windows scripting environments, it doesn't do the job on other platforms. Add to that, both languages are horrible for the "quick one-off" applications that solve so many business problems in the typical organization.
Unfortunately, most organizations I've had the opportunity to work with can't see that shortcoming. They've standardized on the .NET and Java platforms, and when problems inevitably arise that don't fit the development model or capabilities of these systems, the dev team steps outside them. And, as a result, you wind up with a huge tangle of scripts in four different UNIX shells, the abomination that is WinBatch, and some obscure language-du-jour that one particular developer has been playing with.
Enter Perl3. Perl meets all of the requirements for enterprise languages. It's a little harder to find quality Perl developers than for Java or C#.NET, but still relatively easy. And, Perl fills the hole left by the giant .NET/Java machines that are most corporations' development groups. It works in all the necessary environments, and it really shines in the script environment. Its ability to cross platform boundaries with ease, its huge library of existing solutions to common problems4, and the ease with which it can be tasked to handle a range of problems make Perl an ideal addition to the common .NET/Java platforms.
The desire to standardize development platforms in the enterprise is an understandable one. And, choosing the Java and .NET platforms -- as so many organizations do -- is a wise first step. However, it's insufficient to solve the full range of business problems across the majority of enterprise platforms.
To truly have a complete standard framework, an enterprise would do well to adopt Perl in addition to Java and .NET.
I consider myself a Perl advocate. However, advocacy in general tends to turn into zealotry, which in turn ignites a sort of techno-jihad, which ultimately results in harming the reputation of that which one set out to advocate. I think this often stems from a personal ego-attachment.
However, I think an important piece of this Perl-advocacy-cum-zealotry phenomenon is the desire to see Perl replace such popular langauges as Java and VisualBasic. The problem is, managment has seen a business benefit from using these, and are unlikely to switch away from something even on the merit of technical superiority -- much less so on philosophical superiority, which is where the bulk of Perl zealotry lies.
This meditation developed as a sort of expression of how I see Perl from a management point of view. That is, I see Perl as a way to augment the gains management sees from their established platforms. If organizations can be convinced of the value Perl has as part of the Enterprise Language Trilogy, then the Perl community has an opportunity to demonstrate how often Perl is a good choice. This, I hope, would help to undo the years of "bad blood" Perl has somehow accumulated through zealotry and very bad, very public Perl scripts.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: The Enterprise Language Trinity
by xdg (Monsignor) on Jul 24, 2006 at 21:00 UTC | |
by radiantmatrix (Parson) on Jul 24, 2006 at 21:51 UTC | |
|
Re: The Enterprise Language Trinity
by Aristotle (Chancellor) on Jul 24, 2006 at 21:48 UTC | |
by radiantmatrix (Parson) on Jul 25, 2006 at 12:47 UTC | |
|
Re: The Enterprise Language Trinity
by rodion (Chaplain) on Jul 26, 2006 at 04:51 UTC | |
by radiantmatrix (Parson) on Jul 26, 2006 at 13:47 UTC | |
|
Re: The Enterprise Language Trinity
by Moron (Curate) on Jul 27, 2006 at 14:10 UTC | |
|
Re: The Enterprise Language Trinity
by metaperl (Curate) on Jul 25, 2006 at 18:48 UTC | |
by radiantmatrix (Parson) on Jul 25, 2006 at 20:27 UTC | |
by Jenda (Abbot) on Jul 29, 2006 at 14:09 UTC |