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

February 29, 2008

Programmers at Work

Those old enough might remember the 1986 book Programmers at Work. It was a set of in depth interviews with 19 programmer pioneers at the time. The pioneers included people like Dan Bricklin (VisiCalc), Ray Ozzie (Lotus Symphony, Lotus Notes), John Warnock (PostScript, Adobe), Jeff Raskin (Macintosh), Andy Hertzfeld (MacOS), Bill Gates (MS Basic), Gary Kildall (CP/M) and our very own Charles Simonyi.

I remember my fascination with this book at the time. When re-reading the interviews today, I get mixed feelings:

On the one hand side, although the book is over 20 years old, the insights and issues discussed are still highly relevant to what we face today in the software industry. The terminology and examples might be a bit dated, and the views expressed might at the time have been radical whereas they today are main stream. But overall, the interviews are still relevant today and we can learn a lot from them. So in this regard it is still a fascinating read.

On the other hand, when you read the book you see that our profession has not evolved much over the last quarter of a century. We still face the same challenges of handling complexity, good design is still critical and still very hard, we still debate whether software is engineering, art, science or a craft, we still use programming languages that mirror the execution model of our computers, we still use only textual programming languages that has to be parsed from text like the punch cards legacy forced us to do, we still only have very primitive tools, quality is still a big problem, finding and nurturing programming talent is still a challenge, programmer training and education is still broken, and so on. So in this regard it is a depressing read.

Susan Lammers, the author of the original book, just started a blog about the book and is starting to republish the interviews online. First out, both in the book and on-line this week, is the interview with Charles Simonyi. Interestingly, a lot of what Charles discuss in the interview are also hot topics for him today. (I’ll see if I can get Charles to reflect on this here.) By the way, in addition to Susan’s blog, there is also a discussion about this book at one of our favorite blogs - Lambda the Ultimate.

January 15, 2008

Recent and Upcoming Conferences

Last fall we gave a few talks at some conferences. In case you missed them, I have posted the presentations here.

We also have a few conferences coming up. If you want to learn more about Intentional, stop by and say hello.

We will be presenting at:

OOP Conference, January 21-25, 2008, Munich, Germany

QCon March 12-14, 2008, London, United Kingdom

August 29, 2007

Intentional Software In The News

We are featured in two top-tier journals this week. First, Charles is the subject of the InformationWeek “High Five” interview written by Nick Hoover. We especially like Nick’s description of our goals here at Intentional Software, “… aims to commercialize a new form of software development that allows line-of-business employees to help write programs.” 

We want to put the emphasis here on the word “help”. The Intentional Software approach gives line-of-business employees, or, as we like to call them, domain experts, an active role in software creation. But, there is still a vital role for programmers as they must provide the necessary software programming know-how to ultimately deliver the end-user software.

In the second piece, published in Business 2.0 magazine, and on-line by CNN Money, Michael Myser delves deeper into the specifics. The article says that we are making software that “will write its own code.” To be sure, there is a high level of automation as the Intentional Software approach features a heavy dose of code generation. There is still plenty of work for programmers to create these domain specific generators to generate correct code. But it’s higher level work, we believe, avoiding the drudgery of endless  requirement changes.

The analogy to blog software is a good one. Before blog software, anyone who published on the web had to edit HTML code. With blog software, millions of users can now simply use a text editor to author and push a PUBLISH button to publish on the web, correctly and nicely formatted. The PUBLISH button essentially invokes a code generator that integrates the blog text into HTML code that makes up the blog website. Similarly the Intentional Domain Workbench includes an editor domain experts use to edit, in their domain language, and then “just” press a button to invoke the code generator.

Further down in the piece, “Intentional is making software so smart that you can simply tell it what you want to do. Lay down a few basic parameters, and it will write its own code. No programming skills are necessary” might be the view from the domain experts. With Intentional Software, domain experts play a vital role at the front-end of the process when they define their problem in a domain language. But, skilled programmers build a generator that becomes the “engine” to provide interpretations of the domain language. The result is a more flexible, efficient way of creating software. It’s an approach that, we believe, will accelerate innovation within the enterprise by focusing domain experts and programmers on the area of their interest and expertise.

Later, Mike makes this point himself, “Intentional users must still have a software engineer on hand…”  And, our early pilot user, Henk Kolk of Capgemini gives an excellent description based on their work with the Intentional Domain Workbench.

Check out the articles! And thanks to both InformationWeek and CNN Money/Business2.0 for these inside looks at Charles and Intentional Software.

April 03, 2007

Spaceflight

Dear Friends,

Today I've been visiting buildings 254 and 120 in Baykonur. Building 254 has the Soyuz TMA-10 #220 spacecraft already under its launch shroud, and all the cargo loaded in the living compartment. Building 120 has the booster rocket with the first stages and the core second stage mated, but the third stage is still separate. By Saturday they all will be together and the Soyuz will be launched on time, the 442nd launch of this booster.

If you are interested in more details of the spaceflight, please check out charlesinspace.com. The site will be updated during the flight itself via an email connection.

I am looking forward to the flight and I am looking forward to return full time to Intentional Software. A lot has happened in my absence. We are working very closely with Capgemini and we are also continuing our cooperation with Thoughtworks. Our customers appreciate greatly the unique capabilities of our system and the competitive possibilities that it opens up to organizations with deep domain expertise. And do not forget - we are always looking at exceptional programmers to work with us in Bellevue, WA, and in Budapest.

Charles Simonyi, Spaceflight Participant, Soyuz TMA-10.

February 14, 2007

Trusting Relationships

In their 2005 book John Seely Brown and John Hagel III advise that The Only Sustainable Edge for a business is to accelerate and leverage distinctive capabilities and knowledge.They advise each business to work closely with others in networks of companies that have diverse, complementary capabilities, and to build long-term reciprocal, trust-based relationships through shared meaning.

Brown and Hagel’s book is the first place we have seen articulated so many of the objectives our company is working to achieve.

Long-term reciprocal, trust-based relationships are the fundamental common denominator.

And Building shared meaning is, in my judgment, the single most critical specific action that Brown and Hagel prescribe for building those relationships. Long-term reciprocal, trust-based relationships simply cannot survive unless all participants understand each term in precisely the same way. During my career as a business attorney, lack of shared meaning caused by far the most disastrous disputes and uncertainties my clients ever faced.

In fact, our Intentional Software™implements much of Brown and Hagel’s advice by representing precise, unambiguous, shared meanings that are recorded in one internally-consistent data structure from which applications are generated, modified, maintained and regenerated by computer. This data constitutes an understandable “IP Bank” repository of learning and knowledge for reuse throughout the life of an enterprise.

Implementing reciprocal, positive forward looking incentives is the primary action Brown and Hagel prescribe for building trust quickly in any network of enterprises. They explain why the opportunity to build mutual capabilities that result in more aggregate value for all participants is a very powerful incentive to help build trust in the near term. Each participant thus has an incentive to contribute its distinctive, specialized yet complementary capabilities and knowledge because it can reasonably expect to accelerate and leverage its own capability building, learning and innovation through reciprocal contributions by others in the network. These positive incentives are contrasted against negative incentives that often cause disputes in typical partnerships that simply agree to divide a fixed set of resources among the partners.

Clearly specifying performance metrics for each participant is also prescribed by Brown and Hagel to reduce misunderstandings and mistrust and to define reciprocal expectations. Each participant thus retains control over its own actions and ability to perform, rather than being constrained to perform specified activities. Critical uncertainties are identified, and plans are made to deal with them. Tight performance feedback loops, and event notification and rapid exception resolution procedures are employed to help refine performances and to serve as safety nets. Steps are also taken to minimize a participant’s feeling that it is locked into a relationship with no fallbacks.

When we formed our company in 2002, we defined our fundamental objectives in words very similar to Brown and Hagel’s. And since then we have in fact been working “to accelerate and leverage distinctive capabilities and knowledge by working closely with others in networks of companies that have diverse, complementary capabilities, and by building long-term reciprocal, trust-based relationships through shared meaning”. No doubt that is why Brown and Hagel’s 2005 book fascinates us so much.

Fundamentally we work hard to reduce uncertainties and to build foundations for long-term relationships. Our litmus tests are to verify that all participants communicate their own intentions openly and clearly, and to structure each business relationship affirmatively to implement the intentions of all participants (not just our own). We seek to align the interests and incentives of all participants equitably in form and substance, measured by objective standards.

To the same ends we are keeping our company as innovative, efficient, persistent, opportunistic and evolutionary as possible. We love bright, enthusiastic, imaginative, risk taking, fun loving, trusted individuals who enjoy working together.

Our company’s business is accelerating innovation for business. Intentional Software is our means.

January 15, 2007

MIT Technology Review Article

We are delighted to be the cover feature of the current issue of MIT Technology Review. It was fun for me to spend time with Scott Rosenberg, and to show him what we are doing here at Intentional Software.

The article discusses our ambitious goals. We are working on a very tough and very technical problem and we understand the skepticism. We have early users, they are very supportive of our goals and their feedback is vital during this critical stage of development.

Because the content is so technical, readers might have some additional questions on the details. We have addressed some of these topics such as Degrees of Freedom which addresses the concept of the “Law of Leaky Abstractions”, or what is the role of the Generator, or on Hungarian Notation.

Thank you again to Scott for taking the time to delve into Intentional Software, and congratulations for the publication of your new book, “Dreaming in Code”!

And, lastly, thanks to all of you who are following us on this journey. We will continue to keep you informed of our progress.

By the way, I’m posting this from Star City in Russia where my space mission training is continuing for the April launch.

Charles Simonyi

ps. We are always looking for talented programmers. Please send us your resume if you want to join a great group and have an impact on the most exciting area in software.

November 30, 2006

Rosetta Code

Not long ago Charles gave a talk at the Society of Computer-Archeologists in Denmark entitled "The Rosetta Code". The title refers to the Rosetta Stone which was key to the deciphering of hieroglyphs as it contains the same text in two languages and three different alphabets. You can still see it in The British Museum.

Software history buffs will appreciate the talk as it draws upon examples of how the Algol compiler designed by Peter Naur was implemented. (Charles first job after he left Hungary was to maintain this code...). Peter Naur had been the editor of the very influential Algol report from 1960 which ended up shaping the design of most programming languages in use today. Naur recently received the Turing Award for these achievements.

The analogy to the Rosetta Stone refers to the three levels of the compiler: the implementation, the comments and the overall design.

  • The implementation is in machine code.
  • The comments use a high level langauge to express the design intentions. The "comment language" looks very much like Algol itself, although often extended in various ways. Today we take the high level language for granted and we seek other, more powerful means to express our intentions. Also note that already in those days they introduced notations that we today would consider revolutionary in a programming language like ≡ ¬ ≠ and 10. It is also impressive to see how efficient the machine code is; it is often less than the actual pseudo Algol code it is implementing!
  • The design intention itself is a piece of handwritten paper.

Here is the presentation.

October 19, 2006

Wysiwyg

The introduction of Wysiwyg editors is a useful historical metaphor to what can be done to deal with complexity when expression and manipulation of non-trivial data is required. Before Wysiwyg editors became popular, document editors were called text-editors, since they represented only the text contents of documents. As an intermediate stage of development, special character combinations (or “control codes”) were used to encode and represent what the formatting should be, for example ^i might turn on italics, and so on. This style of encoding is still in use in HTML and its successors where <i>italic</i> are the control codes to italicize. Today, a user of a word-processor does not have to make a distinction between the italic character i and its representation. A word processor allows a user to express their intention to italicize certain text elements.

A more telling example is justification, for example right margins. Pre-wysiwyg, when a user invoked the Justify command, the word processor went through the document and added extra spaces to create the justification. When the user added or removed some text, the spaces often ended up in the wrong place and it was a manual process to remove them all and again justify the text. Running the justify command was a big decision you rarely invoked until you were pretty convinced it was the final version of the text you were justifying. Of course, computer supported justification was still much better compared to what was before, namely manual typesetting, where justification was even more manual.

Today, we express the intentions of italicizing and to keep a text justified in a word processor, not by special control codes or running a command, but the editor keeps and maintains it justified on the screen for editing and also for printing by an internal representation. This is an example where intentional information is not only more compact and effective, but also improves tremendously the usefulness during editing and maintenance.

The word processing software effectively separates the look and feel of the document (“What you see”) from the underlying representation which is used during editing and printing (“what you get”). It thereby makes it possible for the user to create and edit much more complex and effective documents without mastering the control codes or commands.

We see that in Wysiwyg editors the user express intentions which are projected as the text is imaged either on the screen or on the printer. Intentional Software applies a similar Wysiwyg technique to the creation and maintenance of software by separating the representation from the looks and the editing interface. In the realm of software creation we can observe a similar trend where we used to encode only the most critical information – namely the executable algorithm – but we more and more find it useful to encode information about the problem and the process itself – the intentional information, for example as meta data in XML configuration files.

But there is an even closer connection between the use of Wysiwyg and the use of Intentional Software when we investigate the process of software creation.

What was the core Wysiwig idea? Superficially it was the emulation and improvement over the typewriter. But this is clearly not the whole story – for example on a typewriter words do not automatically flow from one line to the next. How did people make words flow on a typewriter after a document had been changed – whether it was a contract, a movie script, or a doctoral thesis? Why, they gave it to a typist who retyped the text. I remember the time when the first thing a graduate student preparing to write a thesis would do was to hire a typist. You may not remember, but before Wysiwyg there were many professional typists. They were employed not so much because people could not type- that was just part of it, but because people could not re-type. They not only originated documents from notes or dictation, but they spent most of their time re-typing already typed drafts which were marked up with corrections or changes.

This was terribly error prone, because when a page was re-typed to fix a sentence or a number, errors could be introduced in other places. So when someone wanted to make a few changes in a contract, there was a lot of discussion in how to make sure that the rest was still OK, in effect the proofreading had to start from scratch. We tend to forget how tricky it was at that time to decide whether an important contract should be retyped after a small change: because the process of retyping could easily cause some mistakes in an unrelated part. If the contract was retyped for a clean copy, the whole page or more would have to be re-checked by all parties. This was completely eliminated by Wysiwyg. We still need to originate documents, but we never have to retype them and suffer the risk of those errors. Of course this is exactly how software creation is working today. When a small change is contemplated, its possible effects on the whole system have to be taken into account.

So in effect, the Wysiwig word flow feature was the emulation of the typist, not an emulation of the typewriter. In other words, Wysiwyg was not just an improvement on the typewriter, Wysiwyg was an improvement on the document creation process. 

There is a very strong parallel with Intentional Software. The parallel to the author of the contract, the script, or the thesis, in other words to the content creator is the domain expert. The parallel to the typist is the programmer (or more, accurately one of the roles of the programmer). Once the first implementation exists, the programmers’ job becomes very much like the typists’ job used to be: to do the repetitive work of accommodating the changes, small and large, and to propagate the consequences of the changes in the software code, in effect doing the word flow.

Programmers are terrible at this. Remember how the frequent retyping before Wysiwyg caused many mistakes. But today software is still created this way. When a change is introduced, other bugs creep in. Many seemingly unrelated parts of the software has to be re-checked. Interaction between different parts of the software is becoming increasingly hard to understand and deal with as the complexity and size of our software grows.

The analogy suggests more parallels. Corresponding to the typewriter we now have conventional programming technologies, tools, processes and platforms. Note how incremental improvements to the typewriter, such as the “correcting white-out tape” did not help with the underlying problem of constant retyping. Similarly, the incremental improvements to the programming techniques will not help with the need for re-doing the “change propagation analysis” or “coding pattern expression” every time a change is made to the code. We also see that a job role, such as typist or programmer, includes many different activities some requiring considerable skills, while others can be readily automated. It is pointless to try to “automate” a programmer, but it can be very valuable to organize the programmers’ job so that some of these simple repetitive activities are done by the machine, freeing up the programmer to do more of the knowledge-intensive tasks. That is what generative programming can do, by recording, in effect, the process by which the resulting software can be related to the domain experts’ intentions, so that this process can be mechanically re-played, just as the retyping and reformatting of the documents of yesteryear is now done automatically by the Wysiwyg editors.

Wysiwyg transformed the document creation process by giving content creators direct control of the process. Similarly, Intentional Software intends to transform the software creation process by giving the business domain experts – the content creators - direct control of the process. Wysiwyg empowered millions of more users to author great looking documents – it is time to do the same for software users.

Recent Posts

Recent Comments

May 2008

Sun Mon Tue Wed Thu Fri Sat
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31