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 | |
---|---|---|
Unit Testing | JUnit | NUnit, NMock, TestDriven.NET |
Code Documentation | Javadoc | XML Code Comments + NDoc |
Build tools | Ant | NAnt |
Persistence | Hibernate, iBATIS | NHibernate, Olero ORM, iBATIS, NPersist; Article about Solutions for object persistence in the .NET architecture |
Web Applications | Spring Framework, Struts, Velocity, JavaServerFaces | Spring.NET, ASP.NET, Castle Project |
Smart Clients | JFC/Swing | Windows Forms |
Aspect-Oriented Programming | AspectJ | AspectSharp, SetPoint |
AJAX | For Java, JSON-RPC | For .NET |
Logging | log4j | log4net |
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 |
Business Rules Engine | JESS, JxBRE, ILOG | NxBRE, InRule, ILOG |
PHP | JavaScript | |
---|---|---|
Unit Testing | PhpUnit | JSUnit |
Code Documentation | PHPDoctor | JSDoc |
Build tools | n/a | n/a |
Persistence | Propel | n/a |
Web Applications | n/a | n/a |
Smart Clients | PHP-GTK | XUL |
Aspect-Oriented Programming | aoPHP | JavaScript and AOP |
AJAX | JPSPAN, Flexible AJAX, AjaxAC | n/a |
Logging | log4php | n/a |
IDE | Eclipse, NuSphere, IDE.PHP, Macromedia Dreamweaver | Eclipse, Macromedia Dreamweaver |
Business Rules Engine | n/a | n/a |
Apple Macintosh | Microsoft Alternative | |
---|---|---|
Unit Testing | OCUnit | Visual Studio Team System |
Code Documentation | HeaderDoc | n/a |
Build tools | Ant | MSBuild |
Persistence | CoreData, DataCrux | ObjectSpaces |
Web Applications | WebObjects | Classic ASP (unsupported & unsupportable) |
Smart Clients | Cocoa | Avalon + XAML, MFC |
Aspect-Oriented Programming | AspectCocoa | Native .NET functionality |
AJAX | (idem Java) | Announced |
Logging | log4cocoa | Enterprise Library’s Logging Application Block |
IDE | Apple Xcode, Metrowerks CodeWarrior | n/a |
Business Rules Engine | n/a | n/a |
C++ | Ruby on Rails | |
---|---|---|
Unit Testing | CppUnit | Test::Unit |
Code Documentation | CppDoc | RDoc |
Build tools | GNU Make | Rant |
Persistence | Progress EdgeXtend | Ruby on Rails |
Web Applications | ASP.NET, C++ Server Pages | Ruby on Rails, Comparison of Ruby on Rails against Spring + Hibernate |
Smart Clients | n/a | n/a |
Aspect-Oriented Programming | AspectC++ | AspectR |
AJAX | n/a | Ruby on Rails |
Logging | log4cpp | log4r |
IDE | Eclipse, Apple Xcode, Metrowerks CodeWarrior, Microsoft Visual C++, Borland C++ Builder, Bloodshed Software Dev-C++ | Mondrian, Arachno Ruby, Eclipse |
Business Rules Engine | 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++ | 1 | Java, COM | ||||
PHP | PHP | C | |||||
JavaScript | JavaScript | 2 | Self, C (NOT from Java!) | ||||
Cocoa | Objective-C, Java, C++ | NeXT OpenStep, Smalltalk | |||||
C++ STL + GCC | C++ | 3 | C | ||||
Ruby on Rails | Ruby | Eiffel, Ada, Perl |
(Useless) Comments
As you can see, there are common patterns appearing in the table above:
- Eclipse can build whatever you want
- .NET-related project names tend to begin with the letter N
- PHP-related project names tend to begin with the letter P
- JavaScript-related project names tend to begin with JS
- Ruby-related project names tend to begin or end with R
- Logging frameworks have all the same log4xxx name
- Java-related project names tend to… come from Indonesia :)
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.