jueves, febrero 01, 2007

Design & Programming Trends

Debido que en las próximas dos semanas recibimos visitas a IBM Argentina de India (1) y USA (3) para llevar a cabo unas sesiones de diseño y arquitectura para la nueva release del proyecto, me tomé el tiempo de poner a todo el team "on top" de las últimas tendencias (patterns, principios, tecnologías, etc) en lo que refiere a diseño y programación. Básicamente son las cosas que se vienen utilizando y desarrollando en la industria y tiene mucho sentido tenerlas en cuenta.
El mail lo mandé en ingles, pero bueh, cuando tenga un rato lo traduzco :) (mil disculpas para quienes no entiendan el idioma o mi ingles ladri)

  • Test Driven Development has become as one of the best design technique and was the most acceptable XP practice. (plus Refactoring). UI Arg team had great result using it during R2. I have also gave a 2 hours course about it here. Finally I have also hear about Behavior Driven Development, it is a step beyond TDD.
  • Inversion of Control Design Principle and Dependency Injection Pattern had become de facto technique to deal with dependencies and object life cycle. Spring Framework is example of how important is this technique. During R2 We were implementing IoC in some part of the UIFramework.
  • Ruby On Rails web framework has impulsed a revolution against Big-Complex-HardToUse-HyperXMLConfigurable Java Web frameworks, Ruby On Rails gives different approach for Web Development, using principles like "Convention Over Configuration", "AJAX is part of the framework", "Flash Memory Context" and "Easy and Rapid web development"... those are important concepts, many Java Frameworks have been introducing something similar to RoR, i.e. Rife, Grails, AppFuse, Trails, xFramework, etc.
  • Domain Driven Design (DDD) is a technique that reinforces the use of Object Oriented Design to solve domain problems and complexity.
  • Web Flows this kind of frameworks allows to implement continuation concepts that gives the ability to keep track on double submitions and back buttons.
  • RIA - Rich Internet Applications (AJAX).
  • Defensive Code / Design By Contract. I think that we have to insist on this principle, mainly with Dependencies, there are interesting ways to solve this with Aspect Oriented Programing or using annotations (with Java 1.5)

Tengan en cuenta que es un Team de UI, por lo tanto está un poco acotado.

Se les ocurre algo más?

1 comentario:

Gustavo Andrés Brey dijo...

Uno de los mejores (a mi criterio) y con un futuro increible IT Specialist de IBM, trabaja en el mismo team, respondió lo siguiente, Gracias Andres Calabrese!

There is another trend that Gustavo included in one of the items of the list but not mentioned directly. When talking about Ruby On Rails we need to take into account that Ruby is a Dynamic Programming Language.
In the Java world there are a lot of ways to include dynamic programming languages in java applications. Some of them are JRuby, Jython and Groovy.

Most common uses of dynamic programming languages inside java applications are for configuration and testing tasks.
We can see this as a trend because in Java 1.6 (released recently), there is a module dedicated to intregation with these kind of languages. Also, for example in Spring Framework, you can use for configuration a XML file or a Groovy script indifferently.