PAPERS @ PRESENTATIONS
infoQ
Intentional Software @ Work,
Magnus Christerson, May 19, 2009
DSL Dev Con
Intentional Software @ Microsoft DSL Dev Con,
Magnus Christerson, April 17, 2009
QCon
Domain Expert DSLs,
Magnus Christerson, Henk Kolk (Capgemini), March 18, 2009
QCon
OOPSLA Onward Research Paper and presentation,
Charles Simonyi, Magnus Christerson, Shane Clifford (Intentional Software)

GLOSSARY

We are using these terms on our website and our blog.



Comments
Comments are free-form text included in programs to record or explain important information, such as the Programmer’s intentions that are not expressible in the programming language.

Back to Top

Domain
A domain is an area of business, engineering or society for which a body of knowledge exists. Examples include health care administration, telecommunications, banking, accounting, avionics, computer games and software engineering.

Back to Top

Domain Code
Domain code is the Structured Code used in Intentional Software™ to represent the intentions contributed by Domain Experts for the problem being solved. Domain code includes contributions from all domains relevant to the software problem. Domain code is not executable (as traditional source code is - by compilation or interpretation), but it can be transformed into an implementation solution when it is input to a generator that has been programmed to perform that transformation process.

Back to Top

Domain Expert
A domain expert is a person who has specific domain knowledge about the problem that is to be solved by software. Typically the domain expert must communicate enough domain knowledge to the Programmer for the programmer to be able to build the software solution.

Back to Top

Domain-Oriented Development
Domain-oriented development is the process of separating the contributions of domain experts and programmers to the maximum extent so that generative programming can be applied to structured Domain Code. This greatly simplifies improvements to the domain and implementation solutions.

Back to Top

Domain Schema
A domain schema is a Schema for a specific domain. The domain schema defines the Domain Terminology and any other information that is needed for the Intentional Editor and generator – such as parameters, help text, default values, applicable notations and other structure of the domain code. Domain schemas are created by the Domain Experts and Programmers working together, and are expressed in a schema language.

Back to Top

Domain Terminology
Domain terminology means the terms of art (words with a special meaning) in a domain, for example “claim payment” in health care administration. Domain terminology is important because it is the usual way to express intentions. Broadly speaking, terminology includes notations normally used by a Domain Expert, such as tables, flowcharts and other symbols. The meaning of the terms is part of the domain knowledge that is shared between Domain Experts and Programmers to the extent necessary and ultimately designed into Domain Schemas and the generator.

Back to Top

Generative Programming
Generative programming means writing a program, the generator, whose input is some parametric description of the problem and the output is the desired solution. With Intentional Software, generative programming is used to transform Domain Code into an implementation solution.
See further www.generative-proramming.org.

Back to Top

Hungarian Notation
Hungarian notation is a set of conventions, first proposed by Charles Simonyi in 1974, that may be used to name variables, procedures, and other quantities in programming using their types and possibly a standardized ending. A good description of the original conventions can be found here.

Back to Top

Integrated Development Environments
Integrated development environments are tools that help Programmers develop complex software systems. Current IDEs, such as Eclipse and Microsoft Visual Studio, facilitate working with large systems and class libraries. IDEs should also help programmers visualize more of the high-level structure of complex systems.

Back to Top

Intentional Editor
An intentional editor is a modeless Structured Editor capable of editing and visualizing Structured Code by projecting multiple editable notations in a group environment.

Back to Top

Intentional Software™
Intentional Software is a new type of software for Language-Oriented Development and Domain-Oriented Development. Domain Experts and Programmers work more actively and efficiently together using an Intentional Editor. The intentions that underlie the software are recorded explicitly as Domain Code, and Generative Programming techniques are used to generate the implementation of the software. To make generative programming practical using the input from Domain Experts, Structured Editors and Structured Code techniques are used.

Back to Top

Intentional Technology
Intentional technology is being developed by Intentional Software Corporation for building Intentional Software™.

Back to Top

Language-Oriented Development
Language-oriented development is the process of using Structured Code and Intentional Editors in concert with existing computer languages to simplify programming and to enable language extensions that represent more intentional information in the source code.

Back to Top

Notation
A notation is a technical system of symbols used to represent unique things, such as ∑ for sum, € for Euro currency and ∞ for infinity. For high level computer languages, the notation is defined by a syntax that varies from language to language. For Domain-Oriented Development, the Domain Terminology defines the domain notation. In each case, Intentional Software™ separates the Notation from the code so that multiple notations can be used to express the same thing.

Back to Top

Programmer
A programmer is a person who masters software engineering and writes source code in the course of software development. In Language-Oriented Development, the programmer has to learn the details of the domain to be able to write a direct solution. In Domain-Oriented Development, the programmer writes code for a generator instead of a direct solution. The generator creates the solution and remains an executable representation of the programmers’ work-process because it can be run again on changed inputs.

Back to Top

Schema
A schema defines vocabularies, structure and rules by which each type of element within an information set are interrelated and stored for further processing.

Back to Top

Stakeholder
A stakeholder is a person who has an interest in a software development project. Programmers and Domain Experts in multiple domains are very important stakeholders. Others may include, for example, project managers, graphic artists, technical writers and project sponsors.

Back to Top

Structured Editor
A structured editor is any document editor that is cognizant of the documents’ syntax and other structure. CAD systems and Microsoft Word and PowerPoint are examples of structured editors.

Back to Top

Structured Code
Structured code is code stored in a data structure instead of in typical text files. Text file source code must follow restrictive syntax rules in order for the source code to be parsed by a compiler into a structure called the abstract syntax tree (AST). Structured source code, however, has much less restrictive syntax rules because it is created and edited by Structured Editors directly on the abstract syntax tree and the parsing step is bypassed. This also separates the Notation from the software content, which in turn increases substantially the variety of possible notations available for Domain Experts and Programmers to express their intentions.

Back to Top