Conceptual Integrity in Large Systems

The central argument of the Mythical Man Month from Fred Brooks is that conceptual integrity is the most important consideration in system design, and that conceptual integrity will only be achieved if the design comes from one, or a few resonant minds. I will contend that conceptual integrity is the most important consideration in system … Continue reading Conceptual Integrity in Large Systems


Why a Calendar App is a Great Design Exercise

To check if a salesman is good, one classic is the "Sell me this pen" test. To check if a software designer is good, I propose the "Design me a calendar app" test. That was one of the topic we chose for the software engineering lab, and I loved the results. There are several reasons … Continue reading Why a Calendar App is a Great Design Exercise

Your Language is a Start-up

Watching the TIOBE index of programming language popularity is depressing. PHP and Javascript rule the web, despite the consensus that they are horrible; Haskell and SmalltalkĀ are relegated to academic prototyping, but unanimously praised for the conceptual purity. How technolgy adoptionĀ happens is a puzzling question. Evidences seem to suggest that what matters is to attract a … Continue reading Your Language is a Start-up

Programming Languages Gotchas

Hoare's famous paper "Hints on Programming Language Design" distinguishes two main aspects of language design: Part of language design consists of innovation. This activity leads to new language features in isolation. The most difficult part of language design lies in integration: selecting a limited set of language features and polishing them until the result is … Continue reading Programming Languages Gotchas

Abstraction-Level vs. Meta-Level

As per wikipedia, a model is a pattern, plan, representation (especially in miniature), or description designed to show the main object or workings of an object, system, or concept. In the case of software engineering, models are used to represent specific aspects of the software system, such as static structures, communication paths, algorithms, etc. Models … Continue reading Abstraction-Level vs. Meta-Level