State of the Art

This article is a copy of a research work I did today, to draw a map of today’s development technologies. It is not finished (it will never be, actually) but I think it is rather interesting. Hope you find it interesting too :)

Technology Chart

Because software development is an art… the following table gives a quick overview of available object-oriented application blocks & frameworks, with references. This list is not intensive and will most likely change in the future.

Java .NET PHP JavaScript
Unit Testing JUnit NUnit, NMock, TestDriven.NET PhpUnit JSUnit
Code Documentation Javadoc XML Code Comments + NDoc PHPDoctor JSDoc
Build tools Ant NAnt n/a n/a
Persistence Hibernate, iBATIS NHibernate, Olero ORM, iBATIS, NPersist; Article about Solutions for object persistence in the .NET architecture Propel n/a
Web Applications Spring Framework, Struts, Velocity, JavaServerFaces Spring.NET, ASP.NET, Castle Project n/a n/a
Smart Clients JFC/Swing Windows Forms PHP-GTK XUL
Aspect-Oriented Programming AspectJ AspectSharp, SetPoint aoPHP JavaScript and AOP
AJAX For Java, JSON-RPC For .NET JPSPAN, Flexible AJAX, AjaxAC n/a
Logging log4j log4net log4php n/a
IDE Sun Java Studio Creator, Eclipse, Borland JBuilder, IntelliJ IDEA, Apple Xcode, NetBeans, JCreator, BlueJ, NetComputing AnyJ, DrJava Visual Studio.NET, Macromedia Dreamweaver, Eclipse, Borland Delphi, #develop, Mainsoft Visual MainWin for Linux, ASP.NET WebMatrix, CodeSmithStudio Eclipse, NuSphere, IDE.PHP, Macromedia Dreamweaver Eclipse, Macromedia Dreamweaver
Business Rules Engine JESS, JxBRE, ILOG NxBRE, InRule, ILOG n/a n/a
Apple Macintosh Microsoft Alternative C++ Ruby on Rails
Unit Testing OCUnit Visual Studio Team System CppUnit Test::Unit
Code Documentation HeaderDoc n/a CppDoc RDoc
Build tools Ant MSBuild GNU Make Rant
Persistence CoreData, DataCrux ObjectSpaces Progress EdgeXtend Ruby on Rails
Web Applications WebObjects Classic ASP (unsupported & unsupportable) ASP.NET, C++ Server Pages Ruby on Rails, Comparison of Ruby on Rails against Spring + Hibernate
Smart Clients Cocoa Avalon + XAML, MFC n/a n/a
Aspect-Oriented Programming AspectCocoa Native .NET functionality AspectC++ AspectR
AJAX (idem Java) Announced n/a Ruby on Rails
Logging log4cocoa Enterprise Library’s Logging Application Block log4cpp log4r
IDE Apple Xcode, Metrowerks CodeWarrior n/a Eclipse, Apple Xcode, Metrowerks CodeWarrior, Microsoft Visual C++, Borland C++ Builder, Bloodshed Software Dev-C++ Mondrian, Arachno Ruby, Eclipse
Business Rules Engine n/a n/a ILOG n/a

Global information

Some information about the object-oriented application frameworks above:

Platform Main Programming Languages Multiplatform Single Inheritance Late-binding Open source ISO Standard Inspired from
Java Java NeXT OpenStep, C++
.NET C#, Visual Basic.NET, Java, JavaScript, C++ (C#: ISO 23270, CLI: ISO 23271 & 23272) Java, COM
JavaScript JavaScript (ISO 16262) Self, C (NOT from Java!)
Cocoa Objective-C, Java, C++ NeXT OpenStep, Smalltalk
C++ STL + GCC C++ (ISO 14882) C
Ruby on Rails Ruby Eiffel, Ada, Perl

(Useless) Comments

As you can see, there are common patterns appearing in the table above:

From an historical point of view, however, the fact that most object-oriented frameworks (that is, those not based on a scripting language) use single inheritance is interesting, and not casual: Objective-C, used for the development of the software created for the NeXT workstation, introduced the notion of “interfaces” first (originally named “protocols”), and this idea was taken lately to Java and .NET.