Software Reality
Programming with
a dose of satire.

Site Map Search


Agile Development
 
Extreme Programming
 
Code Generation


Articles
Lifecycle
Design
Programming
Soapbox
Reviews
Cthulhu

Java Swing
Swing's greatest threat isn't SWT, it's Flash
Swing Survival Guide


 
Check out our ageing Reviews Section


Use Case Driven
Use Case Driven Object Modeling with UML: Theory and Practice
Get from use cases to working, maintainable source code. Examples use Spring Framework, JUnit and Enterprise Architect

Agile UML
Agile Development with ICONIX Process
A practical subset of agile development techniques, illustrated by example

Get Controversial!
Extreme Programming Refactored
Extreme Programming with a dose of satire
Available now:



Programming

Component Oriented Software (Page 2)

<< Page 1 (Introduction & Message Forum)


Language Evolution

The evolution of programming languages is best characterized as moving closer to the problem (business) domain. Moving closer to the problem domain means allowing a language to better express problem domains. This is contrasted to language development, which can be expressed as moving closer to the solution (technical) domain.

A classic example of moving closer to the problem domain is the move from functional programming to Object-Oriented programming. A classic example of moving closer to the technical domain is the development of networking API's from TCP to HTTPS.

Programming language evolution must be differentiated from technological evolution. Language and technical evolution have different frequencies and different manifestations. Technology's lifecycle is based on innovation and technical evolution and is generally manifested in declarative standards, for example TCP, SQL, HTML and XML. These standards, whilst disrupted by new languages, continue evolving independently.

As a programming language goes through its lifecycle, API's evolve to solve problems. When the language becomes inefficient, a new language emerges by extracting patterns from previous generation solutions.

Interesting fuel for language evolution does not come from the positive path of API successes, but the negative path of API inefficiencies. For example, the motivation for the uptake of C++ was that rigorously well written Object-Oriented software ended up passing a this pointer to method pointers on structures.

When watching language evolution it is important to separate the emergence of API features that represent language evolution from the emergence of APIs that represent technical evolution.

In terms of programming language evolution less is often more. Language evolution often takes the form of small extensions and small restrictions - assumptions are everything, and one-step backwards means two-steps forward. Adding and removing a few small features often opens the door to new and efficient programming models. An example of an extension would be the movement from function pointers in C structures to methods as first class objects. An example of a restriction would be the removal of goto statements and then functions.

To date languages have evolved in 10 year cycles, and have taken off in economic upswings. The current state of the computing market sees Java and C# competing as two dominant programming models with enormous barriers to entry in terms of their libraries. Given these barriers to entry, Java and C# will probably remain competing languages over at least the next generation. The component oriented aspects of C# means it has leapfrogged over Java's libraries and VM.

It is important to understand where Java and C# are in their life cycles. Java is on the cusp of its maturity phase and its inefficient stage, whilst C# is still early in it's adoption stage.


>> Page 3 (Language Lifecycle)

<< Back to Programming

All trademarks and copyrights on this page are owned by their respective owners.
Stories and articles are owned by the original author.
All the rest Copyright © 1998-2008 Matt Stephens. ALL RIGHTS RESERVED.