Monday, August 08, 2005

The mythical "software architect"

After so many years spent in ICT projects, many times I heard the term "archietct" (re: "*architect*") within many different contexts and maining many different things. But that isn't enough, also for the same role I knew really different cases. I knew architects very skilled in five or six programming languages and yet another three or four sripting languages, two or three DBMSs, discrete mathemathics, algorithms, data structures, design at large ... and other ones wondering if Java had the required support for TCP. Is it the same job or not? How many other industries are there having these anomalies? If you are looking for a carpenter you probably will trust him/her in action with tools such as hammers; if you are looking for a mechanical engineer, you probably will trust his/her technical backgroung from college on ... but, if you are looking for a "[sofware]*[solution]*[tecnical]*architect*" what should you trust?


-- Rational Unified Process
“Software architecture encompasses the significant decisions about the organization of a
software system. The selection of the structural elements and their interfaces by which
the system is composed together with their behavior as specified in the collaboration
among those elements. The composition of the structural and behavioral elements into
progressively larger subsystems, the architectural style that guides this organization, these
elements, and their interfaces, their collaborations, and their composition. Software
architecture is concerned not only with structure and behavior but also with usage,
functionality, performance, resilience, reuse, comprehensibility, economic and
technology constraints and trade-offs, and aesthetic issues.”


-- SunTone Architecture Methodology:
Architecture is a set of structuring principles that enables a system to be comprised of a
set of simpler systems each with its own local context that is independent of but not
inconsistent with the context of the larger system as a whole.


--Vitruvius, circa 25 BC:
“The ideal architect should be a person of letters, a mathematician, familiar with
historical studies, a diligent student of philosophy, acquainted with music, not ignorant of
medicine, learned in the responses of jurisconsults, familiar with astronomy and
astronomical calculations.”


-- Mark Cade, Simon Roberts, Sun Certified Enterprise Architect for J2EE™
"[..] What does the architect do? What is the difference between an architect compared with a

senior developer? These are some of the common questions asked. The designer is
concerned with what happens when a user presses a button and the architect is concerned
with what happens when ten thousand users press a button. An architect mitigates the
technical risks associated with a system. A technical risk is something that is unknown,
unproven, or untested. Risks are usually associated with the service-level requirements
and can occasionally be associated with a business requirement. Regardless of the type of
risk, it is easier to address the risks early in the project while creating an architecture,
then to wait until construction when you have a large developer base that could
potentially be waiting while risks are solved[..]"


-- Becoming an Architect, A Conversation with Luke Hohmann, Part IV
[..] Most people think of architecture as technical, and the architect as a technical person. And absolutely, the architect must be technical. But there's also a social aspect of the architect role that I think is not well communicated or understood. The architect is the person who will say, "This is the way we do things."

An architecture is like a dirt road. The first time a car drives over it, the road looks about the same. By the time the 10,000th car drives over it, though, there will be grooves in the road. As an architecture mature, it gets grooves.

For example, one kind of groove that is common in architecture is error handling strategy. Whether you handle errors by returning error codes or throwing exceptions is part of your architecture. In practice, most teams will choose one error handling mechanism as the dominant approach, the other as the subordinate approach, because you often need to use both. Among the roles of the architect is choosing the dominant approach to error handling, keeping the flame of the dominant approach, and educating the team on when the subordinate approach is an acceptable alternative. That's one aspect of the architect's job, and that's a social role.

Conversely, you can tell when a system hasn't had an architect, because it lacks consistency in things like error handling, naming, and so on. In a system I'm working on right now, for example, I noticed that some of the database tables have a unique identifier column named id, other tables have a unique identifier column named table id, and other tables do something completely different. So table foo would have a fooid column, and table bar would have an id column. I finally went to the development team and said, "Let me guess. You've had more than one DBA [Database Administrator] in your time here." And they said, "Oh yeah, we've had five of them." Every DBA had their own way of naming columns. They didn't have an architect to ensure a technical consistency in column naming. There wasn't a notion of conceptual integrity from a technical perspective[..]


-- Tarchitects and Marketects, A Conversation with Luke Hohmann, Part V
Envisioning the future on behalf of customers, even when they can't articulate what they want, is the world-class marketect's key distinguishing feature


--Martin Fowler, Patterns of Enterprise Application Architectues
[..] Architecture is a terms that a lots of people try to define, with little agreement. There are two common elements: One is the highest-level breakdowm of a system into its parts; the other, decisions that are hard to change. It's also increasingly realized that there isn't just one way to state a system architecture; rather, there are multiple architectures in a system, and the view of what is architecturally significant is one that can change over a system's lifetime [...] architecture is a subjective thing, a shared understanding of a system's design by the experts developers on a project. Commonly this shared understanding is in the form of major components of the system and they interact. It's also about decisions that developers wish they could get rigth early on because there're perceived as hard to change. The subjectivity comes in here as well because, if you find that something is easier to change than once thought, then it's no longer architectural. In the end architecture boils down to the important stuff -- whatever that is.



Tuesday, May 03, 2005

Brazilian Java Technology Users Join Java Community Process (JCP)

SouJava is Brazil's largest Java user group, with more than 12,000 members, has become a member of the JCP. The group has been involved in the Javali Project, an effort sponsored by the Brazilian government to produce open-source technology, including an open-source Java Virtual Machine [See Bruno Souza's explanation for why].

Friday, April 29, 2005

Aspect-Oriented Programming Considered as Harmful as GOTO

Reading yesterday news I remained rather shocked to find this link to a Forrester research

From the article: Aspect-oriented programming (AOP) is intended to address common problems that object-oriented programming (OOP) doesn't address well, plus some problems that OOP itself created. However, AOP is a risky solution: It is a very generic mechanism for solving some very specific concerns and has been likened to a kind of "GOTO" statement for OOP. Like GOTO, it can cause more harm than good.

The research seems based on two papers from the University of Passau:

Dijkstra in his letter observed: " ... that the quality of programers is indirectly proportional to the amount of Go To statemets they use in their programs.". As currently most AOP research is not about methodolgy but about more dynamicity in the future this might be rephrased to " ... indirectly proportional to the amount of advice they use in their programs.

Aspect oriented programming has been proposed as a way to improve modularity of software systems by allowing encapsulation of cross-cutting concerns. To do so, aspects specify where new functionality should apply using pointcuts. Unfortunately todays mainstream aspect oriented languages suffer from pointcut languages where pointcut declarations result in a high coupling between aspect and base system. Additionally, these pointcuts are fragile, as non-local changes easily may break pointcut semantics. These properties are a major obstacle for program evolution of aspect oriented software. This paper introduces a pointcut delta analysis to deal with this problem.

This research has been widley commented on aosd-discuss.

Friday, April 22, 2005

The first 40 years of Moore's Law



His famous dictum turned 40 by April 19.

Intel last week offered $10,000 for a mint-condition copy of the April 19, 1965, issue of Electronics magazine. In that issue, Gordon Moore declared the integrated circuit was the future of electronics and predicted the rate of improvement for the semiconductor industry.

At least one copy is already missing from the University of Illinois.

He spoke to reporters recently about the electronics industry's progress, artificial intelligence, the emergence of China and the early days of the industry.

Is there anything coming down the pike that could replace silicon?
Moore: Some of these other things, quantum dots and nanotechnology and that kind of thing--I will admit to being a skeptic around those things replacing mainstream digital silicon. You can clearly make a tiny little transistor by these techniques with potentially great high frequency, but can you connect a billion of them together? That's really the problem; it's not making a small transistor. I view the technology that has developed around integrated circuits to be a fundamental way of building complex microstructures. Rather than being replaced, it's actually infiltrating a lot of other fields. You have MEMS and gene chips. Some of these microfluidic

How many times did people predict the end of Moore's Law, and how many times were you actually concerned it was going to happen?
Moore: It seems to me in the last 10 years I read a lot of articles that did. There was a time when I believed one micron was probably going to be the limit. We went through that so fast it wasn't a barrier at all. Then I thought a quarter of a micron might be, but it didn't stop it. Now we're below a tenth of a micron. Heck, we're doing one-sixty-fifth of a micron, and I don't see it stopping, short term anyhow.

His presentation for IEEE International Solid-State Circuits Conference : No Exponential is Forever … but We Can Delay "Forever" (Acrobat PDF file, 2005 KB)



Monday, April 18, 2005

AJAX, Part 1: resources

AJAX: short for "Advanced Javascripting and XML" or "Asynchronous JavaScripting and XML"
XMLHTTPRequest Libraries and Code Samples:
  • JSON-RPC-Java: JSON-RPC-Java is a key piece of Java web application middleware that allows JavaScript DHTML web applications to call remote methods in a Java Application Server (remote scripting) without the need for page reloading (as is the case with the vast majority of current web applications). It enables a new breed of fast and highly dynamic enterprise Java web applications (using similar techniques to Gmail and Google Suggests).
  • XMLHttpRequest Demo: 3 demos in one using Borges for the back end.

Monday, April 11, 2005

Tagging vs Searching

Looking up the word "tiger" on Virgilio (or other search engines :) you get a list of results throws together sites about the professional golfer Tiger Woods, the Mac OS X operating system, or the last Java 2 Platform Standard Edition (J2SE) 1.5 —code named "Tiger". In order to force a context , you can refine the search appending a further word, e.g. "tiger golf", "tiger apple" or "tiger java". Anyway, you probably have to sift through pages of irrilevant results to find what you want.

A different approach to avoid such a confusion is let users categorize their Web resources (link, photos, ...) by category, title, interest ... using a tag.

This is the approach of
del.icio.us, the Web site opened at the end of 2003 by the 30-years-old New Yorker software programmer Joshua Schachter. With del.icio.us people are able to tag any link they choose for easy retrival later and to share easily with other people. Today more than 85,000 people are using the free service. I tried the service finding Web resources about Ajax, a new rising Web Technology and I have been very impressed. Comparison with traditional search engines is even not practicable for this topic.

Other interesting examples are Technorati.com and Flickr.com. The latter, a year-old photo-sharing service, has been
bought by the giant Yahoo! Inc for an undisclosed sum in March with its 420,000 subscribers, while the former, a blog index, offers a set of interesting services such as a pluggable searchlet for searching information inside blogs (as this :).