Welcome

  • This is the blog for Intentional Software Corporation. We keep it open for comments as we seek a dialog with the community. Each participant will be trusted to participate with integrity, decency and respect for others.
  • Visit Intentional Software Corporation

« Hello out there | Main | ThoughtWorks and the Language Workbench »

May 31, 2005

TrackBack

TrackBack URL for this entry:
http://www.typepad.com/services/trackback/6a00d83451741069e200d8344792b653ef

Listed below are links to weblogs that reference Feature X Considered Harmful:

Comments

Sam Spadafora

You've mentioned C# a couple of times in this blog now, including a statement that it's your favorite programming language. I presume that your forthcoming product will be written in C#.

The comparison of current software devlopment to how nature generates a human from DNA was most pleasing. I also liked very much your exposition in "Things I Believe But Cannot Prove" of how eg today's flight control programs are bizarrely costly.

Why don't you use Lisp? Lisp of course stands alone in terms of simplicity. I understand that IP involves dynamic alteration of the parse tree, and Lisp stands alone here too. Furthermore, the progression of C, C++, Java, C# is one of more and more machinery. Is this not antagonistic to the notion of generating software from a seed?

Charles Simonyi

Dear Sam,

Re C#: It is my favorite language in the practical sense; given the current technology and considering the libraries, the development environment and costs we are indeed using Microsoft Visual C# .NET enhanced with JetBrains’ ReSharper. In my earlier post I actually used the expression “my choice” instead of “my favorite”. We are also in the process of bootstrapping to our own system so I can say that my real favorite is the Intentional system.

Re Lisp: This is a very interesting point. Lisp is historically very important and intentional software is more similar to Lisp with Lisp macros than to any other of the well-known languages. But Lisp is over 40 years old now and it was born in very modest circumstances (the list primitives CAR and CDR stood for the contents of the address register and the decrement register of the IBM 704.) So Lisp used its data model for three purposes:
1. to represent the program – this is the heritage that Intentional primarily builds on.
2. to be the syntax for editing the program text
3. for the run-time environment
The unification of these concepts was and has remained very profound and placed Lisp way ahead in its application to difficult problems. However, today we enjoy more resources and face a greater variety of problems. For this reason, intentional software separates the notation from the representation (using editable projections of the program representation), and also separates the issues of the run time environment (using generative programming.)
This of course means that the system is much more complex than Lisp. But I feel that simplicity is not the ultimate goal (otherwise we would be all working on Turing Machines ;-) but being close to the problem domain is the goal. So we need to be able to track the complexity of the domains as closely as we can – if we are more complex we get the harmful “superfluous degrees of freedom” and if we are less complex we will have to model the domain complexity with the implementation primitives and we will incur not only the conceptual costs of the inherent complexity but also the modeling overhead. This will show up in the program sources, and in run time debugging as a jumble of primitives instead of the underlying domain structures.

So my complaint with C# is not that it is too complex, but that its complexity can not track the domain.

Franz Bell

I'm really interested in the forthcoming International Software products. When do you plan to make them available to the public? There will be an Early Access program?

thanks, Franz

Magnus Christerson

Franz,

Thank you for your interest in the Intentional System. We are not yet ready to discuss timing of our product releases, but we will start to discuss more of the technology and how it applies to the problems we see in the industry. Part of that is this blog, so keep watching here.

And, yes, we do intend to run Early Access programs.

Werner Schulz

I disagree with the proposition that dataless objects are harmful.
As a usefull classification, objects can be divided into three groups, entities, value objects and services. The first has identity but its data content varies over its lifetime, value objects are immutable and have no identity, while services are neither. There are many cases where I want to encapsulate a service (simplest ones are algorithms) but where I need more than a procedure.

Secondly, the old argument about modules comes up again. Modules are not sufficient! They only provide namespace but otherwise still degenerate into global functions and data. Just look at VB6, Modula and Fortran 90 modules. They don't solve the problems but classes/objects do.

Charles Simonyi

Dear Werner,
I think your classification for object use is an example of a useful refinement that one can superimpose on the implementation language. The point is that most (all?) languages do not make this distinction in a natural way - do you put comments in your code or use a naming convention to distinguish "entities", "value objects" or "services"? Are there uniform ways in the IDE to communicate this to other people in the project, to enforce consequences, or to tune the distinctions when necessary? This is where language workbenches will be indispensable. Today Java or C# simply say "class" and your intentions and distinctions are either lost or relegated to comment status where it is impossible to process them (unless they are in xml, which creates other problems)

The old argument was indeed "classes vs. modules" and classes had to win because they did more. The new argument will be "classes with information hiding and with many other things" in a way where the intention will be clearer.

Pascal Costanza

You say that, in contrast to Lisp, you separate notation from representation, and you separate issues of the runtime evironment. I don't understand what you mean by the latter (wrt runtime environments). Could you explain this in more detail?

I think I understand what you mean by the former: Basically, you want to add more syntactic variations than Lisp allows you to have. However, I wonder what problems this effectively solves. I think that the semantic closeness to a problem domain is much more important than the notation one uses, right?

Are you aware that there exist a number of very advanced and modern Common Lisp implementations that fit nicely in today's programming tasks? See http://lisp.tech.coop/implementation for more information...

Magnus Christerson

Dear Pascal,

Lisp was a powerful and influential innovation as it unified notation, representation and runtime environment around a simple construct - Lists. This is a very powerful model, and of course it's easy to build more sophisticated structures like Trees etc around this model. As long as your domain is easily represented in lists and your data is easily represented, things are wonderful. But in a more general case, many notations and representation require different data structures. Think for example of mathematical formulas, a spread sheet or graphical images or for that matter SQL, C#, HTML or XML either in form as the program or the data. Yes, they could be done in lists, but for many uses it would be impractical and not the optimal structure, I think.

By separating the notation from the representation and also from the runtime environment, we introduce more degrees of freedom to optimize for the domain and the required implementation. As you correctly point out, the semantic closeness of a problem domain is very important. So we need the possibility to optimize there. And for practical purposes, the notation is similarly important, especially when we engage non-programmers. Tables might be the most natural notation for accountants, for example. And compatibility with other run time implementation structures is also important in today's heterogenous and interconnected environment. We really hope to have the Lisp cake and eat it too ;-).

And thanks for the list of Common Lisp environments - seems like the Lisp community is still healthy. Unfortunately I did not see Intellicorp's KEE environment on the list, a wonderful Lisp based environment I used heavily in graduate school.

Pascal Costanza

Dear Magnus,

Thanks for your reply. Here are some minor comments.

Your response seems to imply that lists are the only data structure available in Lisp. This is, of course, not the case. ANSI Common Lisp provides classes, structs, all kinds of numbers, extensible characters, single- and multi-dimensional arrays, strings, hash tables, streams, etc., as part of the standard. These data types do not feel "alien" in Lisp either.

I don't really buy the argument that notation plays an important role, not even for non-programmers. If you replace textual with graphical representation, there are typically no complaints that such representations don't reflect "traditional" notations either, so people seem to be able to adapt. However, only time will tell who's right in this regard. ;)

Thanks for the hint to KEE. Apparently, that tool was for an older dialect of Lisp. One of the steps that Common Lisp took was that it switched from dynamic scoping to lexical scoping, which was an important step forward. For that reason, you typically only find Common Lisp and Scheme as the Lisp dialects used nowadays, apart from a few exceptions, because they are the only ones that took lexical scoping seriously. Unfortunately, this indeed meant that some good ideas were thrown out as well. Let's hope that they will be properly rediscovered...

Magnus Christerson

Hello Pascal,

We take your point that Lisp has greatly evolved from its early days.

As for the notation question we will see. I think there is a spectrum here, so not black and white. Charles often tells the story about how the WYSIWYG metaphor emerged (and I'll ask him to write something about this here). I remember using a pre-wysiwyg text editor and typesetting systems. You could certainly produce nice looking documents with the commands available (italic, bold etc), but it was much easier once the Wysiwyg editors became mainstream. For younger readers, it's like comparing the coding to a good web design tool. The coding tools can typically control more properties (degrees of freedom as we discussed here http://blog.intentionalsoftware.com/intentional_software/2005/05/feature_x_is_co.html), but for most users the higher level design wysiwyg tools is easier to use, and therefore make it accessible to many more users, just like the wysiwyg text editors did.

schemeboy

The lisp people ask "why don't you use lisp?"

I think it is a waste of time to ask this question: those who know and understand what lisp is about use it. People who don't stick to what they know.

Asking this question is a bit like watching someone in a pool of water thrashing while doing the dog paddle and asking, "why don't you do the crawl instead?"

Magnus Christerson

Lisp still, after more than 35 years, has a large and active user base which shows its excellence; an excellence we think should, and could, be made available to a broader audience.

william johnson

very interesting. keep the good work! small ship set out: http://home6fnline.com/36/home-and-garden-accessories-home-gyms/ , through others who went there

Verify your Comment

Previewing your Comment

This is only a preview. Your comment has not yet been posted.

Working...
Your comment could not be posted. Error type:
Your comment has been posted. Post another comment

The letters and numbers you entered did not match the image. Please try again.

As a final step before posting your comment, enter the letters and numbers you see in the image below. This prevents automated programs from posting comments.

Having trouble reading this image? View an alternate.

Working...

Post a comment