SlideShare a Scribd company logo
1 of 45
Download to read offline
E                    A   ™
        INT NTION L
        S O      F T W A R E




Domain Expert DSLs
    Magnus Christerson
 Intentional Software Corporation
           Henk Kolk
 CTO Financial Services, Capgemini
The Challenge
                         Business to accelerate

                Business Domain Expert
Collaboration




                                                                             Innovation
                Programmer




                         Software main tool
                                   © 2008 Intentional Software Corporation
The Key Players




Domain Expert                  Programmer



         © 2008 Intentional Software Corporation
A brief history of software
• A struggle to distinguish and treat separately
  problem and program
   1954:




                 © 2008 Intentional Software Corporation
Software progress?
                           public CodeTable()
                           {
                              rgcod = new ArrayList();
                           }

                           public ArrayList rgcod;                    2008
  1963                     public void Pass4(XCOD xcod, int i, NTE nte)
                           {
                              Console.WriteLine(quot;P4: quot; + xcod.ToString());
                              this.rgcod.Add(new MICOP(xcod, i, nte));
                           }

                           public MICOP MicopLast()
                           {
                              return (MICOP)this.rgcod[this.rgcod.Count - 1];
                           }

                           public void DeleteLastMicop()
                           {
                              this.rgcod.RemoveAt(this.rgcod.Count - 1);
                           }

                           public void Px()
                           {
                              Console.WriteLine(quot;Produced codequot;);
                              int i = 0;
                              foreach (MICOP micop in this.rgcod)
                              {
                                 Console.WriteLine(quot;{0,4}t{1,-14}t{2}t{3}quot;,
                                          i++,
                                          micop.xcod.ToString(),
                                          micop.i,
                                          micop.nte == null ? quot; quot; : micop.nte.ToString());
                              }

                           }




    © 2008 Intentional Software Corporation
A brief history continued
• When we fail to treat separately the problem and
  the program

  – The problem and the program get mixed up creating
    the complexity we hear about

  – Complexity becomes (problem x program), not
    (problem + program)

  – We get stuck with improving the resulting complex
    mess

                   © 2008 Intentional Software Corporation
Complexity of scrambled eggs
•   Scrambled
•   Before preparation
•   Neatly arranged on plate – after CASE
    slide?




               © 2007 Intentional Software Corporation
Input + Process
•   Scrambled
•   Before preparation
•   Neatly arranged on plate – after CASE
    slide?




             © 2007 Intentional Software Corporation
After refactoring ;-)




   © 2007 Intentional Software Corporation
Software Development Today
                                                                        public CodeTable()
                                                                        {
Domain Knowledge                                                        }
                                                                           rgcod = new ArrayList();


                                                                        public ArrayList rgcod;

                                                                        public void Pass4(XCOD xcod, int i,
                                                                        NTE nte)
                                                                        {
                                                                           Console.WriteLine(quot;P4: quot; +
                                                                        xcod.ToString());
                                                                           this.rgcod.Add(new MICOP(xcod,
                                                                        i, nte));
                                                                        }

                                                                        public MICOP MicopLast()
                                                                        {
                                                                           return
                                                                        (MICOP)this.rgcod[this.rgcod.Count
                                                                        - 1];
                                                                        }
      Edits




                                                                        public void DeleteLastMicop()
                                                                        {

                                                                        this.rgcod.RemoveAt(this.rgcod.Coun
                                                                        t - 1);
                                                                        }

                                                                        public void Px()
                                                                        {
                                                                           Console.WriteLine(quot;Produced
                                                                        codequot;);
                                                                           int i = 0;
                                                                           foreach (MICOP micop in
                                                                        this.rgcod)
                                                                           {


                   Explains                                    Edits    Console.WriteLine(quot;{0,4}t{1,-
                                                                        14}t{2}t{3}quot;,
                                                                                            i++,

                                                                                           micop.xcod.ToSt
                                                                        ring(),
                                                                                            micop.i,
                                                                                            micop.nte ==
 Domain Expert                    Programmer                            null ? quot; quot; : micop.nte.ToString());
                                                                           }

                                                                        }



                              © 2008 Intentional Software Corporation
Intentional: Input + Process
                                                                     public CodeTable()
                                                                     {
Domain Code                  Generator                               }
                                                                        rgcod = new ArrayList();


                                                                     public ArrayList rgcod;

                                                                     public void Pass4(XCOD xcod, int i,
                                                                     NTE nte)
                                                                     {
                input                                       output      Console.WriteLine(quot;P4: quot; +
                                                                     xcod.ToString());
                                                                        this.rgcod.Add(new MICOP(xcod,
                                                                     i, nte));
                                                                     }

                                                                     public MICOP MicopLast()
                                                                     {
                                                                        return
                                                                     (MICOP)this.rgcod[this.rgcod.Count
                                                                     - 1];
                                                                     }




                                    Creates
     Edits




                                                                     public void DeleteLastMicop()
                                                                     {

                                                                     this.rgcod.RemoveAt(this.rgcod.Coun
                                                                     t - 1);
                                                                     }

                                                                     public void Px()
                                                                     {
                                                                        Console.WriteLine(quot;Produced
                                                                     codequot;);
                                                                        int i = 0;
                                                                        foreach (MICOP micop in
                                                                     this.rgcod)
                                                                        {

                                                                     Console.WriteLine(quot;{0,4}t{1,-
                                                                     14}t{2}t{3}quot;,
                                                                                         i++,

                                                                                        micop.xcod.ToSt
                                                                     ring(),
                                                                                         micop.i,
                                                                                         micop.nte ==
Domain Expert               Programmer                               null ? quot; quot; : micop.nte.ToString());
                                                                        }

                                                                     }



                        © 2008 Intentional Software Corporation
Analogy: Blog Software




As viewed

              As edited
               (input)                               As generated
             © 2008 Intentional Software Corporation   (output)
More ”Input + Process” Analogies
• DNA
  – Growing an organ, e.g. Optic nerve
  – Brevity of DNA makes evolution possible


• Kolmogorov complexity




                  © 2008 Intentional Software Corporation
Separating and Weaving Domains
 Business
 Domain             PowerPoint
Orientation                                                                Domain
                   Word   Excel                                           Workbench

Business Experts




                                                                         Ruby
   Programmers                                                          Java/C#

                                                                            C/C++

                                                                         Computing Power
                            Non-executable                               Executable

                              © 2008 Intentional Software Corporation
Key Benefits
• Domain Expert participation feasible – domain
  knowledge isolated from technology

• Separation of concerns – complexity is
  reduced

• Programmers create a more valuable artifact:
  Generator –weaves domain input with
  Software Engineering knowledge
                 © 2008 Intentional Software Corporation
Domain Orientation Trends:
•   Domain Specific Languages (DSL)
•   Code Generation/Generative Programming (GP)
•   Domain Specific Modeling (DSM)
•   Domain Driven Design (DDD)
•   Model Driven Development (MDD)
•   Meta Programming
•   ...

                 © 2008 Intentional Software Corporation
What prevents DSL mainstream use?
• Integrate Domain Experts fully
   – Matching existing notations
   – Mixing graphical/textual notations

• Multi-domain
   – Compose independent domains
   – References between domains

• Domain evolution, domains must be able to evolve without
  limitations (structure and notation)

• Groupware for domain experts

                       © 2008 Intentional Software Corporation
Programming Languages as Base?
• Programming languages as the model leaves
  major issues:
  – Text-only not satisfactory
  – Parsing requirement constrains language design
  – Multi-domain is unaddressed
  – Domain evolution is unaddressed
  – Current groupware (CM) not feasible for domain
    experts


                 © 2008 Intentional Software Corporation
Intentional Domain Workbench


• Bring domain orientation to a new level by
  changing software creation to truly integrate
  Domain Experts




                 © 2008 Intentional Software Corporation
Def Domain Workbench (Martin Fowler)
1. Users can freely define new domains, including languages, that
   are fully integrated with each other.
2. The primary source of information is a persistent abstract
   representation.
3. Domain designers define domains in three main parts: schemas,
   editors, and generators.
4. Domain users manipulate a domain through a projectional editor.
5. A domain workbench can work with incomplete and
   contradictory information.



 CONFIDENTIAL          © 2007 Intentional Software Corporation
Inside the Domain Workbench

                                                                             public CodeTable()
                                                                             {
                                                                                rgcod = new ArrayList();
                                                                             }

                                                                             public ArrayList rgcod;

                                                                             public void Pass4(XCOD xcod, int i, NTE nte)
                                                                             {
                                                                                Console.WriteLine(quot;P4: quot; + xcod.ToString());
                                                                                this.rgcod.Add(new MICOP(xcod, i, nte));
                                                                             }

                                                                             public MICOP MicopLast()
                                                                             {
                                                                                return (MICOP)this.rgcod[this.rgcod.Count - 1];
                                                                             }



             Projector                                           Generator
                                                                             public void DeleteLastMicop()
                                                                             {

                                                                             }
                                                                                this.rgcod.RemoveAt(this.rgcod.Count - 1);


                                                                             public void Px()
                                                                             {
                                                                                Console.WriteLine(quot;Produced codequot;);
                                                                                int i = 0;
                                                                                foreach (MICOP micop in this.rgcod)
                                                                                {
                                                                                   Console.WriteLine(quot;{0,4}t{1,-14}t{2}t{3}quot;,
                                                                                                                      i++,

                                                                                                                      micop.xcod.T
                                                                             oString(),
                                                                                                                      micop.i,
                                                                                                                      micop.nte ==
                                                                             null ? quot; quot; : micop.nte.ToString());
                                                                                }



 Projectional editor                Intentional Tree                         }




                                       (Schema)




                       © 2008 Intentional Software Corporation
Intentional Tree
• Extendible, uniform representation
• Strong identities throughout
• No fixed meta-levels
• Versioned
                            Domain Code                                           Domain Schema
  storage                                               Return
                                                                                      Def Assign...


• Separated                                             Assign
                                                                                        Def Div...

  concerns                                          a            Div


                                                            b          Plus


                                                                  c           1



                  © 2008 Intentional Software Corporation
Projectional editing
• Separates underlying representation from notation
  (syntax)
• Works in two directions: output and editing
• Special selections that take tree structure into account
• Large number of notations for:
   –   matching existing notations
   –   multi-domain
   –   ambiguity resolving
   –   domain evolution
• Can also edit Programs, Schema, Generators
Some Notational Examples
                         or



                         or


                         or




       © 2008 Intentional Software Corporation
Integrate Domain Experts
••   Projectional editor supplies appropriate notation
     Matching existing notations
•    Mixing notation graphics / text

• Projectional editor decouples domain code from
  notation
      – Multi-view, embedding, extension…

• Graphics / text are treated uniformly

• Notation can change on domain or other selected
  boundaries

                                © 2008 Intentional Software Corporation
Multi domain
•   Compose independent domains
•   References between domains




• Tree structure accommodates composition

• Inter-domain references connecting domains



                          © 2008 Intentional Software Corporation
Domain evolution
• Tree storage is independent of schema – will not
  “break” if schema changes

• Notation can keep up with evolution

• Further parameterization is always possible

• Independent concerns can be added without
  interfering with others

                  © 2008 Intentional Software Corporation
Groupware
• Tree storage requires rethinking groupware
  – Change logs for fully general solution
  – Edit “conflicts” are a “mini domain” – integrated
    with notations
  – Versioning and audit trails


• Familiar metaphors: versions, branches, open,
  update, commit, merge

                  © 2008 Intentional Software Corporation
Intentional Domain Workbench Status
• Technology is fully capable of handling the
  Domain Workbench requirements.

• Nearing operational use in selected domains

• Working with selected customers only, for
  example with Capgemini.


                 © 2008 Intentional Software Corporation
Henk Kolk
CTO Financial Services Capgemini
Problems for Pension Companies
• Need for pension product innovation
• Governmental interest
    – New Pension Laws
• Mergers
• Transparency

•   Problems
•   Time to market
•   Abstract product models
•   Ensuring quality
                   © 2008 Intentional Software Corporation
Old way: disconnected domains
Pension Plan                                              Current issues:
  Analysis
                                                          • Expensive handovers
                                                          • Traceability
               Functional
               design


                            Technical
                             design


                                                 Program


Validation
                                                               Execute
Handover            © 2008 Intentional Software Corporation
New way: connected domains
Pension Plan                                         No apparent handover
  Analysis                                           Traceability comes for free

                        Functional
                        design

       Technical
        design


                          Program


Validation &
                                                             Execute
Handover           © 2008 Intentional Software Corporation
Old way: Excel & Word
New way: Pension Workbench
• Matching existing notations
  – Pension experts record pension world in their
    notations
   Old spreadsheet                Pension Workbench
Multiple Views with Graphics

Pension Plan versions                                   Rule dependencies




                        © 2008 Intentional Software Corporation
Compose Business Domain
• Domain Schema
• Projectional Editors




                 © 2008 Intentional Software Corporation
Integrate Rule Test Domain
• Unit Tests for pension rules
• Real time evaluation




                 © 2008 Intentional Software Corporation
Integrate System Test Domain
• Test cascading rules and their interrelations
• Real time evaluation




                 © 2008 Intentional Software Corporation
Build Code Generators
• Multiple implementation target languages




                © 2008 Intentional Software Corporation
Domain Language Evolution
 Jan    March   May    July                   Oct


Capgemini       Capgemini Pension Language

       Capgemini      Unified Pension Language

            Capgemini         Capgemini Pension expert discussion

                      Client 1         Client Pension Language 1

                                 Client 2           Client Pension Language 2

                                                                        Client 1: “Please
                                                       Client 1         raise abstraction
                              © 2008 Intentional Software Corporation
                                                                        level of my language”
Testing – Lack of “groupware”                                                   •   Rules domain
                                                                                          •   Rules
                                                                                          •   Test cases (VBA)
                      A   Automated support             M     Manual Handover             •   XML Export domain
 Input                                          Excel
                                                                                          •   Multiple users



   TD                 M
                  M                        Version Control
Pseudo code
 MS Access


                                                                                                         Output
                                            M                          A                 A
FD’s                         Rules             Test cases
 Text         M               Entry                                      Test results           XML
MS Word                                        Programming
                          (pseudo code)                                    Calculation          Export
                                                  (VBA)


                                                                               • Issues
                      M                     M                                  • Version control
                          Rules Issue
                                                Test Case                      • Consistency of 800+
Changes           M                             Debugging                        separate files
                            Mgmt
                                                  (VBA)
                                                                               • Debugging VBA code
                                     © 2008 Intentional Software Corporation
New Groupware
                      A   Automated support             M     Manual Handover
 Input                           Pension Workbench
   TD                 A
                  A                             Groupware
Pseudo code
 MS Access
                                            Version control

                                                                                                      Output
                                            A                          A                 A
FD’s                         Rules             Test cases
 Text         M               Entry                                      Test results        XML
MS Word                                            Entry
                          (pseudo code)                                    Calculation       Export
                                                (automated)




                      M
Changes           M       Rules Issue
                            Mgmt

                                     © 2008 Intentional Software Corporation
Integrating Pension Experts
Herman Gerbscheid, Pension Architect:
• “This is the stuff I had to do mentally and keep
  consistent in my head all the time. It’s great to finally
  have tools for it.”

Suzanne Pront, Pension Expert:
• “Normally I know what I want, but don’t know how to
   tell engineers. Now I can do this myself. This is a
   revolution!”

Sybren den Hartog, Java Architect:
• “Now we can generate business rules and domain
   structure, which we could not do in UML based MDA.”



                          © 2008 Intentional Software Corporation
Summary
• Intentional Software is helping us to
  accelerate Pension Product innovation for our
  clients

• We were able to demonstrate a radical change
  in time to market and quality

• We used Pensions as a pilot, but we see many
  opportunities in other domains

                © 2008 Intentional Software Corporation

More Related Content

Viewers also liked

Anxa Corporate Presentation 2010 (english version)
Anxa Corporate Presentation 2010 (english version)Anxa Corporate Presentation 2010 (english version)
Anxa Corporate Presentation 2010 (english version)Anxa.com
 
SEO blogging best practices
SEO blogging best practicesSEO blogging best practices
SEO blogging best practicesIan Lurie
 
Libraries and Transliteracy: An Introduction for Medical Librarians
Libraries and Transliteracy: An Introduction for Medical Librarians Libraries and Transliteracy: An Introduction for Medical Librarians
Libraries and Transliteracy: An Introduction for Medical Librarians Bobbi Newman
 
Academic research
Academic researchAcademic research
Academic researchlibrfun
 
Utah 08 Welcome 091808 Ocwc
Utah 08 Welcome 091808 OcwcUtah 08 Welcome 091808 Ocwc
Utah 08 Welcome 091808 OcwcTerri Bays
 
So What and Who Cares: Getting Your Message Right
So What and Who Cares: Getting Your Message RightSo What and Who Cares: Getting Your Message Right
So What and Who Cares: Getting Your Message RightKivi Leroux Miller
 
SNCR Award Winning Case Study on Reputation Management 2011
SNCR Award Winning Case Study on Reputation Management 2011SNCR Award Winning Case Study on Reputation Management 2011
SNCR Award Winning Case Study on Reputation Management 2011Shashi Bellamkonda
 
3rd day of class
3rd day of class3rd day of class
3rd day of classcristiarnau
 
My HBA Presentation - Social Media and James Brown
My HBA Presentation - Social Media and James BrownMy HBA Presentation - Social Media and James Brown
My HBA Presentation - Social Media and James BrownMichael Street
 
Christmas Tradition
Christmas TraditionChristmas Tradition
Christmas Traditiongaizfra
 
E S P AÑ A T E N E C E S I T A
E S P AÑ A  T E  N E C E S I T AE S P AÑ A  T E  N E C E S I T A
E S P AÑ A T E N E C E S I T Ahartosdezporky
 
How2 Start Ocw
How2 Start OcwHow2 Start Ocw
How2 Start OcwTerri Bays
 
Introduction to Libraries and Transliteracy
Introduction to Libraries and TransliteracyIntroduction to Libraries and Transliteracy
Introduction to Libraries and TransliteracyBobbi Newman
 
Web analytics for sane people
Web analytics for sane peopleWeb analytics for sane people
Web analytics for sane peopleIan Lurie
 
Measuring Your Nonprofit Marketing Success
Measuring Your Nonprofit Marketing SuccessMeasuring Your Nonprofit Marketing Success
Measuring Your Nonprofit Marketing SuccessKivi Leroux Miller
 
APG Awards: Tate Collections
APG Awards: Tate Collections APG Awards: Tate Collections
APG Awards: Tate Collections Matt Springate
 

Viewers also liked (20)

Anxa Corporate Presentation 2010 (english version)
Anxa Corporate Presentation 2010 (english version)Anxa Corporate Presentation 2010 (english version)
Anxa Corporate Presentation 2010 (english version)
 
SEO blogging best practices
SEO blogging best practicesSEO blogging best practices
SEO blogging best practices
 
Libraries and Transliteracy: An Introduction for Medical Librarians
Libraries and Transliteracy: An Introduction for Medical Librarians Libraries and Transliteracy: An Introduction for Medical Librarians
Libraries and Transliteracy: An Introduction for Medical Librarians
 
Academic research
Academic researchAcademic research
Academic research
 
Utah 08 Welcome 091808 Ocwc
Utah 08 Welcome 091808 OcwcUtah 08 Welcome 091808 Ocwc
Utah 08 Welcome 091808 Ocwc
 
Flyer icid & hathi
Flyer icid & hathiFlyer icid & hathi
Flyer icid & hathi
 
So What and Who Cares: Getting Your Message Right
So What and Who Cares: Getting Your Message RightSo What and Who Cares: Getting Your Message Right
So What and Who Cares: Getting Your Message Right
 
SNCR Award Winning Case Study on Reputation Management 2011
SNCR Award Winning Case Study on Reputation Management 2011SNCR Award Winning Case Study on Reputation Management 2011
SNCR Award Winning Case Study on Reputation Management 2011
 
3rd day of class
3rd day of class3rd day of class
3rd day of class
 
My HBA Presentation - Social Media and James Brown
My HBA Presentation - Social Media and James BrownMy HBA Presentation - Social Media and James Brown
My HBA Presentation - Social Media and James Brown
 
Last day
Last dayLast day
Last day
 
Christmas Tradition
Christmas TraditionChristmas Tradition
Christmas Tradition
 
E S P AÑ A T E N E C E S I T A
E S P AÑ A  T E  N E C E S I T AE S P AÑ A  T E  N E C E S I T A
E S P AÑ A T E N E C E S I T A
 
Parent pyp intro 2010
Parent pyp intro 2010Parent pyp intro 2010
Parent pyp intro 2010
 
How2 Start Ocw
How2 Start OcwHow2 Start Ocw
How2 Start Ocw
 
Introduction to Libraries and Transliteracy
Introduction to Libraries and TransliteracyIntroduction to Libraries and Transliteracy
Introduction to Libraries and Transliteracy
 
Web analytics for sane people
Web analytics for sane peopleWeb analytics for sane people
Web analytics for sane people
 
Measuring Your Nonprofit Marketing Success
Measuring Your Nonprofit Marketing SuccessMeasuring Your Nonprofit Marketing Success
Measuring Your Nonprofit Marketing Success
 
APG Awards: Tate Collections
APG Awards: Tate Collections APG Awards: Tate Collections
APG Awards: Tate Collections
 
Bright Ideas
Bright IdeasBright Ideas
Bright Ideas
 

Similar to Domain Experts and Programmers Collaborate with DSLs

Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)
Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)
Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)Igalia
 
Watermarking in Source Code: Applications and Security Challenges
Watermarking in Source Code: Applications and Security ChallengesWatermarking in Source Code: Applications and Security Challenges
Watermarking in Source Code: Applications and Security ChallengesShyamsundar Das
 
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...Andrey Karpov
 
Computer science-2010-cbse-question-paper
Computer science-2010-cbse-question-paperComputer science-2010-cbse-question-paper
Computer science-2010-cbse-question-paperDeepak Singh
 
Apache PIG - User Defined Functions
Apache PIG - User Defined FunctionsApache PIG - User Defined Functions
Apache PIG - User Defined FunctionsChristoph Bauer
 
TinyOS 2.1 Tutorial: Hands-on Session
TinyOS 2.1 Tutorial: Hands-on SessionTinyOS 2.1 Tutorial: Hands-on Session
TinyOS 2.1 Tutorial: Hands-on SessionRazvan Musaloiu-E.
 
Tiramisu をちょっと、味見してみました。
Tiramisu をちょっと、味見してみました。Tiramisu をちょっと、味見してみました。
Tiramisu をちょっと、味見してみました。Mr. Vengineer
 
IL2CPP: Debugging and Profiling
IL2CPP: Debugging and ProfilingIL2CPP: Debugging and Profiling
IL2CPP: Debugging and Profilingjoncham
 
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...David Walker
 
Text Rendering Tech
Text Rendering TechText Rendering Tech
Text Rendering TechDavid Ding
 
Global Interpreter Lock: Episode III - cat < /dev/zero > GIL;
Global Interpreter Lock: Episode III - cat < /dev/zero > GIL;Global Interpreter Lock: Episode III - cat < /dev/zero > GIL;
Global Interpreter Lock: Episode III - cat < /dev/zero > GIL;Tzung-Bi Shih
 
Lies Told By The Kotlin Compiler
Lies Told By The Kotlin CompilerLies Told By The Kotlin Compiler
Lies Told By The Kotlin CompilerGarth Gilmour
 
Python GTK (Hacking Camp)
Python GTK (Hacking Camp)Python GTK (Hacking Camp)
Python GTK (Hacking Camp)Yuren Ju
 
Univ of va intentional introduction 2013 01-31
Univ of va intentional introduction 2013 01-31Univ of va intentional introduction 2013 01-31
Univ of va intentional introduction 2013 01-31Magnus Christerson
 
Show Us: SS7 Update
Show Us: SS7 UpdateShow Us: SS7 Update
Show Us: SS7 UpdateESUG
 

Similar to Domain Experts and Programmers Collaborate with DSLs (20)

Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)
Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)
Stranger in These Parts. A Hired Gun in the JS Corral (JSConf US 2012)
 
Watermarking in Source Code: Applications and Security Challenges
Watermarking in Source Code: Applications and Security ChallengesWatermarking in Source Code: Applications and Security Challenges
Watermarking in Source Code: Applications and Security Challenges
 
Libtcc and gwan
Libtcc and gwanLibtcc and gwan
Libtcc and gwan
 
Libtcc and gwan
Libtcc and gwanLibtcc and gwan
Libtcc and gwan
 
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
PVS-Studio 5.00, a solution for developers of modern resource-intensive appl...
 
#JavaFX.forReal() - ElsassJUG
#JavaFX.forReal() - ElsassJUG#JavaFX.forReal() - ElsassJUG
#JavaFX.forReal() - ElsassJUG
 
Computer science-2010-cbse-question-paper
Computer science-2010-cbse-question-paperComputer science-2010-cbse-question-paper
Computer science-2010-cbse-question-paper
 
Apache PIG - User Defined Functions
Apache PIG - User Defined FunctionsApache PIG - User Defined Functions
Apache PIG - User Defined Functions
 
TinyOS 2.1 Tutorial: Hands-on Session
TinyOS 2.1 Tutorial: Hands-on SessionTinyOS 2.1 Tutorial: Hands-on Session
TinyOS 2.1 Tutorial: Hands-on Session
 
Tiramisu をちょっと、味見してみました。
Tiramisu をちょっと、味見してみました。Tiramisu をちょっと、味見してみました。
Tiramisu をちょっと、味見してみました。
 
IL2CPP: Debugging and Profiling
IL2CPP: Debugging and ProfilingIL2CPP: Debugging and Profiling
IL2CPP: Debugging and Profiling
 
Extending and scripting PDT
Extending and scripting PDTExtending and scripting PDT
Extending and scripting PDT
 
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
The Effect of Hierarchical Memory on the Design of Parallel Algorithms and th...
 
Text Rendering Tech
Text Rendering TechText Rendering Tech
Text Rendering Tech
 
Global Interpreter Lock: Episode III - cat < /dev/zero > GIL;
Global Interpreter Lock: Episode III - cat < /dev/zero > GIL;Global Interpreter Lock: Episode III - cat < /dev/zero > GIL;
Global Interpreter Lock: Episode III - cat < /dev/zero > GIL;
 
Lies Told By The Kotlin Compiler
Lies Told By The Kotlin CompilerLies Told By The Kotlin Compiler
Lies Told By The Kotlin Compiler
 
Python GTK (Hacking Camp)
Python GTK (Hacking Camp)Python GTK (Hacking Camp)
Python GTK (Hacking Camp)
 
Univ of va intentional introduction 2013 01-31
Univ of va intentional introduction 2013 01-31Univ of va intentional introduction 2013 01-31
Univ of va intentional introduction 2013 01-31
 
Show Us: SS7 Update
Show Us: SS7 UpdateShow Us: SS7 Update
Show Us: SS7 Update
 
ESUG15: SS7 Update
ESUG15: SS7 UpdateESUG15: SS7 Update
ESUG15: SS7 Update
 

More from deimos

Aspect Orientated Programming in Ruby
Aspect Orientated Programming in RubyAspect Orientated Programming in Ruby
Aspect Orientated Programming in Rubydeimos
 
Randy Shoup eBays Architectural Principles
Randy Shoup eBays Architectural PrinciplesRandy Shoup eBays Architectural Principles
Randy Shoup eBays Architectural Principlesdeimos
 
Remy Sharp The DOM scripting toolkit jQuery
Remy Sharp The DOM scripting toolkit jQueryRemy Sharp The DOM scripting toolkit jQuery
Remy Sharp The DOM scripting toolkit jQuerydeimos
 
Ola Bini J Ruby Power On The Jvm
Ola Bini J Ruby Power On The JvmOla Bini J Ruby Power On The Jvm
Ola Bini J Ruby Power On The Jvmdeimos
 
Joe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand DwrJoe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand Dwrdeimos
 
Aslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec BddAslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec Bdddeimos
 
Venkat Subramaniam Building DSLs In Groovy
Venkat Subramaniam Building DSLs In GroovyVenkat Subramaniam Building DSLs In Groovy
Venkat Subramaniam Building DSLs In Groovydeimos
 
Venkat Subramaniam Blending Java With Dynamic Languages
Venkat Subramaniam Blending Java With Dynamic LanguagesVenkat Subramaniam Blending Java With Dynamic Languages
Venkat Subramaniam Blending Java With Dynamic Languagesdeimos
 
Udi Dahan Intentions And Interfaces
Udi Dahan Intentions And InterfacesUdi Dahan Intentions And Interfaces
Udi Dahan Intentions And Interfacesdeimos
 
Tim Mackinnon Agile And Beyond
Tim Mackinnon Agile And BeyondTim Mackinnon Agile And Beyond
Tim Mackinnon Agile And Beyonddeimos
 
Steve Vinoski Rest And Reuse And Serendipity
Steve Vinoski Rest And Reuse And SerendipitySteve Vinoski Rest And Reuse And Serendipity
Steve Vinoski Rest And Reuse And Serendipitydeimos
 
Stefan Tilkov Soa Rest And The Web
Stefan Tilkov Soa Rest And The WebStefan Tilkov Soa Rest And The Web
Stefan Tilkov Soa Rest And The Webdeimos
 
Stefan Tilkov Pragmatic Intro To Rest
Stefan Tilkov Pragmatic Intro To RestStefan Tilkov Pragmatic Intro To Rest
Stefan Tilkov Pragmatic Intro To Restdeimos
 
Rod Johnson Cathedral
Rod Johnson CathedralRod Johnson Cathedral
Rod Johnson Cathedraldeimos
 
Mike Stolz Dramatic Scalability
Mike Stolz Dramatic ScalabilityMike Stolz Dramatic Scalability
Mike Stolz Dramatic Scalabilitydeimos
 
Matt Youill Betfair
Matt Youill BetfairMatt Youill Betfair
Matt Youill Betfairdeimos
 
Pete Goodliffe A Tale Of Two Systems
Pete Goodliffe A Tale Of Two SystemsPete Goodliffe A Tale Of Two Systems
Pete Goodliffe A Tale Of Two Systemsdeimos
 
Paul Fremantle Restful SOA Registry
Paul Fremantle Restful SOA RegistryPaul Fremantle Restful SOA Registry
Paul Fremantle Restful SOA Registrydeimos
 
Ola Bini Evolving The Java Platform
Ola Bini Evolving The Java PlatformOla Bini Evolving The Java Platform
Ola Bini Evolving The Java Platformdeimos
 
Neal Gafter Java Evolution
Neal Gafter Java EvolutionNeal Gafter Java Evolution
Neal Gafter Java Evolutiondeimos
 

More from deimos (20)

Aspect Orientated Programming in Ruby
Aspect Orientated Programming in RubyAspect Orientated Programming in Ruby
Aspect Orientated Programming in Ruby
 
Randy Shoup eBays Architectural Principles
Randy Shoup eBays Architectural PrinciplesRandy Shoup eBays Architectural Principles
Randy Shoup eBays Architectural Principles
 
Remy Sharp The DOM scripting toolkit jQuery
Remy Sharp The DOM scripting toolkit jQueryRemy Sharp The DOM scripting toolkit jQuery
Remy Sharp The DOM scripting toolkit jQuery
 
Ola Bini J Ruby Power On The Jvm
Ola Bini J Ruby Power On The JvmOla Bini J Ruby Power On The Jvm
Ola Bini J Ruby Power On The Jvm
 
Joe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand DwrJoe Walker Interactivewebsites Cometand Dwr
Joe Walker Interactivewebsites Cometand Dwr
 
Aslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec BddAslak Hellesoy Executable User Stories R Spec Bdd
Aslak Hellesoy Executable User Stories R Spec Bdd
 
Venkat Subramaniam Building DSLs In Groovy
Venkat Subramaniam Building DSLs In GroovyVenkat Subramaniam Building DSLs In Groovy
Venkat Subramaniam Building DSLs In Groovy
 
Venkat Subramaniam Blending Java With Dynamic Languages
Venkat Subramaniam Blending Java With Dynamic LanguagesVenkat Subramaniam Blending Java With Dynamic Languages
Venkat Subramaniam Blending Java With Dynamic Languages
 
Udi Dahan Intentions And Interfaces
Udi Dahan Intentions And InterfacesUdi Dahan Intentions And Interfaces
Udi Dahan Intentions And Interfaces
 
Tim Mackinnon Agile And Beyond
Tim Mackinnon Agile And BeyondTim Mackinnon Agile And Beyond
Tim Mackinnon Agile And Beyond
 
Steve Vinoski Rest And Reuse And Serendipity
Steve Vinoski Rest And Reuse And SerendipitySteve Vinoski Rest And Reuse And Serendipity
Steve Vinoski Rest And Reuse And Serendipity
 
Stefan Tilkov Soa Rest And The Web
Stefan Tilkov Soa Rest And The WebStefan Tilkov Soa Rest And The Web
Stefan Tilkov Soa Rest And The Web
 
Stefan Tilkov Pragmatic Intro To Rest
Stefan Tilkov Pragmatic Intro To RestStefan Tilkov Pragmatic Intro To Rest
Stefan Tilkov Pragmatic Intro To Rest
 
Rod Johnson Cathedral
Rod Johnson CathedralRod Johnson Cathedral
Rod Johnson Cathedral
 
Mike Stolz Dramatic Scalability
Mike Stolz Dramatic ScalabilityMike Stolz Dramatic Scalability
Mike Stolz Dramatic Scalability
 
Matt Youill Betfair
Matt Youill BetfairMatt Youill Betfair
Matt Youill Betfair
 
Pete Goodliffe A Tale Of Two Systems
Pete Goodliffe A Tale Of Two SystemsPete Goodliffe A Tale Of Two Systems
Pete Goodliffe A Tale Of Two Systems
 
Paul Fremantle Restful SOA Registry
Paul Fremantle Restful SOA RegistryPaul Fremantle Restful SOA Registry
Paul Fremantle Restful SOA Registry
 
Ola Bini Evolving The Java Platform
Ola Bini Evolving The Java PlatformOla Bini Evolving The Java Platform
Ola Bini Evolving The Java Platform
 
Neal Gafter Java Evolution
Neal Gafter Java EvolutionNeal Gafter Java Evolution
Neal Gafter Java Evolution
 

Recently uploaded

M.C Lodges -- Guest House in Jhang.
M.C Lodges --  Guest House in Jhang.M.C Lodges --  Guest House in Jhang.
M.C Lodges -- Guest House in Jhang.Aaiza Hassan
 
Mondelez State of Snacking and Future Trends 2023
Mondelez State of Snacking and Future Trends 2023Mondelez State of Snacking and Future Trends 2023
Mondelez State of Snacking and Future Trends 2023Neil Kimberley
 
Eni 2024 1Q Results - 24.04.24 business.
Eni 2024 1Q Results - 24.04.24 business.Eni 2024 1Q Results - 24.04.24 business.
Eni 2024 1Q Results - 24.04.24 business.Eni
 
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...anilsa9823
 
Grateful 7 speech thanking everyone that has helped.pdf
Grateful 7 speech thanking everyone that has helped.pdfGrateful 7 speech thanking everyone that has helped.pdf
Grateful 7 speech thanking everyone that has helped.pdfPaul Menig
 
Regression analysis: Simple Linear Regression Multiple Linear Regression
Regression analysis:  Simple Linear Regression Multiple Linear RegressionRegression analysis:  Simple Linear Regression Multiple Linear Regression
Regression analysis: Simple Linear Regression Multiple Linear RegressionRavindra Nath Shukla
 
Call Girls In DLf Gurgaon ➥99902@11544 ( Best price)100% Genuine Escort In 24...
Call Girls In DLf Gurgaon ➥99902@11544 ( Best price)100% Genuine Escort In 24...Call Girls In DLf Gurgaon ➥99902@11544 ( Best price)100% Genuine Escort In 24...
Call Girls In DLf Gurgaon ➥99902@11544 ( Best price)100% Genuine Escort In 24...lizamodels9
 
DEPED Work From Home WORKWEEK-PLAN.docx
DEPED Work From Home  WORKWEEK-PLAN.docxDEPED Work From Home  WORKWEEK-PLAN.docx
DEPED Work From Home WORKWEEK-PLAN.docxRodelinaLaud
 
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best ServicesMysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best ServicesDipal Arora
 
RE Capital's Visionary Leadership under Newman Leech
RE Capital's Visionary Leadership under Newman LeechRE Capital's Visionary Leadership under Newman Leech
RE Capital's Visionary Leadership under Newman LeechNewman George Leech
 
Insurers' journeys to build a mastery in the IoT usage
Insurers' journeys to build a mastery in the IoT usageInsurers' journeys to build a mastery in the IoT usage
Insurers' journeys to build a mastery in the IoT usageMatteo Carbone
 
The CMO Survey - Highlights and Insights Report - Spring 2024
The CMO Survey - Highlights and Insights Report - Spring 2024The CMO Survey - Highlights and Insights Report - Spring 2024
The CMO Survey - Highlights and Insights Report - Spring 2024christinemoorman
 
Call Girls Navi Mumbai Just Call 9907093804 Top Class Call Girl Service Avail...
Call Girls Navi Mumbai Just Call 9907093804 Top Class Call Girl Service Avail...Call Girls Navi Mumbai Just Call 9907093804 Top Class Call Girl Service Avail...
Call Girls Navi Mumbai Just Call 9907093804 Top Class Call Girl Service Avail...Dipal Arora
 
MONA 98765-12871 CALL GIRLS IN LUDHIANA LUDHIANA CALL GIRL
MONA 98765-12871 CALL GIRLS IN LUDHIANA LUDHIANA CALL GIRLMONA 98765-12871 CALL GIRLS IN LUDHIANA LUDHIANA CALL GIRL
MONA 98765-12871 CALL GIRLS IN LUDHIANA LUDHIANA CALL GIRLSeo
 
A DAY IN THE LIFE OF A SALESMAN / WOMAN
A DAY IN THE LIFE OF A  SALESMAN / WOMANA DAY IN THE LIFE OF A  SALESMAN / WOMAN
A DAY IN THE LIFE OF A SALESMAN / WOMANIlamathiKannappan
 
Sales & Marketing Alignment: How to Synergize for Success
Sales & Marketing Alignment: How to Synergize for SuccessSales & Marketing Alignment: How to Synergize for Success
Sales & Marketing Alignment: How to Synergize for SuccessAggregage
 
Monte Carlo simulation : Simulation using MCSM
Monte Carlo simulation : Simulation using MCSMMonte Carlo simulation : Simulation using MCSM
Monte Carlo simulation : Simulation using MCSMRavindra Nath Shukla
 
The Coffee Bean & Tea Leaf(CBTL), Business strategy case study
The Coffee Bean & Tea Leaf(CBTL), Business strategy case studyThe Coffee Bean & Tea Leaf(CBTL), Business strategy case study
The Coffee Bean & Tea Leaf(CBTL), Business strategy case studyEthan lee
 

Recently uploaded (20)

M.C Lodges -- Guest House in Jhang.
M.C Lodges --  Guest House in Jhang.M.C Lodges --  Guest House in Jhang.
M.C Lodges -- Guest House in Jhang.
 
Mondelez State of Snacking and Future Trends 2023
Mondelez State of Snacking and Future Trends 2023Mondelez State of Snacking and Future Trends 2023
Mondelez State of Snacking and Future Trends 2023
 
Eni 2024 1Q Results - 24.04.24 business.
Eni 2024 1Q Results - 24.04.24 business.Eni 2024 1Q Results - 24.04.24 business.
Eni 2024 1Q Results - 24.04.24 business.
 
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
Lucknow 💋 Escorts in Lucknow - 450+ Call Girl Cash Payment 8923113531 Neha Th...
 
Grateful 7 speech thanking everyone that has helped.pdf
Grateful 7 speech thanking everyone that has helped.pdfGrateful 7 speech thanking everyone that has helped.pdf
Grateful 7 speech thanking everyone that has helped.pdf
 
Regression analysis: Simple Linear Regression Multiple Linear Regression
Regression analysis:  Simple Linear Regression Multiple Linear RegressionRegression analysis:  Simple Linear Regression Multiple Linear Regression
Regression analysis: Simple Linear Regression Multiple Linear Regression
 
Call Girls In DLf Gurgaon ➥99902@11544 ( Best price)100% Genuine Escort In 24...
Call Girls In DLf Gurgaon ➥99902@11544 ( Best price)100% Genuine Escort In 24...Call Girls In DLf Gurgaon ➥99902@11544 ( Best price)100% Genuine Escort In 24...
Call Girls In DLf Gurgaon ➥99902@11544 ( Best price)100% Genuine Escort In 24...
 
KestrelPro Flyer Japan IT Week 2024 (English)
KestrelPro Flyer Japan IT Week 2024 (English)KestrelPro Flyer Japan IT Week 2024 (English)
KestrelPro Flyer Japan IT Week 2024 (English)
 
DEPED Work From Home WORKWEEK-PLAN.docx
DEPED Work From Home  WORKWEEK-PLAN.docxDEPED Work From Home  WORKWEEK-PLAN.docx
DEPED Work From Home WORKWEEK-PLAN.docx
 
Best Practices for Implementing an External Recruiting Partnership
Best Practices for Implementing an External Recruiting PartnershipBest Practices for Implementing an External Recruiting Partnership
Best Practices for Implementing an External Recruiting Partnership
 
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best ServicesMysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
Mysore Call Girls 8617370543 WhatsApp Number 24x7 Best Services
 
RE Capital's Visionary Leadership under Newman Leech
RE Capital's Visionary Leadership under Newman LeechRE Capital's Visionary Leadership under Newman Leech
RE Capital's Visionary Leadership under Newman Leech
 
Insurers' journeys to build a mastery in the IoT usage
Insurers' journeys to build a mastery in the IoT usageInsurers' journeys to build a mastery in the IoT usage
Insurers' journeys to build a mastery in the IoT usage
 
The CMO Survey - Highlights and Insights Report - Spring 2024
The CMO Survey - Highlights and Insights Report - Spring 2024The CMO Survey - Highlights and Insights Report - Spring 2024
The CMO Survey - Highlights and Insights Report - Spring 2024
 
Call Girls Navi Mumbai Just Call 9907093804 Top Class Call Girl Service Avail...
Call Girls Navi Mumbai Just Call 9907093804 Top Class Call Girl Service Avail...Call Girls Navi Mumbai Just Call 9907093804 Top Class Call Girl Service Avail...
Call Girls Navi Mumbai Just Call 9907093804 Top Class Call Girl Service Avail...
 
MONA 98765-12871 CALL GIRLS IN LUDHIANA LUDHIANA CALL GIRL
MONA 98765-12871 CALL GIRLS IN LUDHIANA LUDHIANA CALL GIRLMONA 98765-12871 CALL GIRLS IN LUDHIANA LUDHIANA CALL GIRL
MONA 98765-12871 CALL GIRLS IN LUDHIANA LUDHIANA CALL GIRL
 
A DAY IN THE LIFE OF A SALESMAN / WOMAN
A DAY IN THE LIFE OF A  SALESMAN / WOMANA DAY IN THE LIFE OF A  SALESMAN / WOMAN
A DAY IN THE LIFE OF A SALESMAN / WOMAN
 
Sales & Marketing Alignment: How to Synergize for Success
Sales & Marketing Alignment: How to Synergize for SuccessSales & Marketing Alignment: How to Synergize for Success
Sales & Marketing Alignment: How to Synergize for Success
 
Monte Carlo simulation : Simulation using MCSM
Monte Carlo simulation : Simulation using MCSMMonte Carlo simulation : Simulation using MCSM
Monte Carlo simulation : Simulation using MCSM
 
The Coffee Bean & Tea Leaf(CBTL), Business strategy case study
The Coffee Bean & Tea Leaf(CBTL), Business strategy case studyThe Coffee Bean & Tea Leaf(CBTL), Business strategy case study
The Coffee Bean & Tea Leaf(CBTL), Business strategy case study
 

Domain Experts and Programmers Collaborate with DSLs

  • 1. E A ™ INT NTION L S O F T W A R E Domain Expert DSLs Magnus Christerson Intentional Software Corporation Henk Kolk CTO Financial Services, Capgemini
  • 2. The Challenge Business to accelerate Business Domain Expert Collaboration Innovation Programmer Software main tool © 2008 Intentional Software Corporation
  • 3. The Key Players Domain Expert Programmer © 2008 Intentional Software Corporation
  • 4. A brief history of software • A struggle to distinguish and treat separately problem and program 1954: © 2008 Intentional Software Corporation
  • 5. Software progress? public CodeTable() { rgcod = new ArrayList(); } public ArrayList rgcod; 2008 1963 public void Pass4(XCOD xcod, int i, NTE nte) { Console.WriteLine(quot;P4: quot; + xcod.ToString()); this.rgcod.Add(new MICOP(xcod, i, nte)); } public MICOP MicopLast() { return (MICOP)this.rgcod[this.rgcod.Count - 1]; } public void DeleteLastMicop() { this.rgcod.RemoveAt(this.rgcod.Count - 1); } public void Px() { Console.WriteLine(quot;Produced codequot;); int i = 0; foreach (MICOP micop in this.rgcod) { Console.WriteLine(quot;{0,4}t{1,-14}t{2}t{3}quot;, i++, micop.xcod.ToString(), micop.i, micop.nte == null ? quot; quot; : micop.nte.ToString()); } } © 2008 Intentional Software Corporation
  • 6. A brief history continued • When we fail to treat separately the problem and the program – The problem and the program get mixed up creating the complexity we hear about – Complexity becomes (problem x program), not (problem + program) – We get stuck with improving the resulting complex mess © 2008 Intentional Software Corporation
  • 7. Complexity of scrambled eggs • Scrambled • Before preparation • Neatly arranged on plate – after CASE slide? © 2007 Intentional Software Corporation
  • 8. Input + Process • Scrambled • Before preparation • Neatly arranged on plate – after CASE slide? © 2007 Intentional Software Corporation
  • 9. After refactoring ;-) © 2007 Intentional Software Corporation
  • 10. Software Development Today public CodeTable() { Domain Knowledge } rgcod = new ArrayList(); public ArrayList rgcod; public void Pass4(XCOD xcod, int i, NTE nte) { Console.WriteLine(quot;P4: quot; + xcod.ToString()); this.rgcod.Add(new MICOP(xcod, i, nte)); } public MICOP MicopLast() { return (MICOP)this.rgcod[this.rgcod.Count - 1]; } Edits public void DeleteLastMicop() { this.rgcod.RemoveAt(this.rgcod.Coun t - 1); } public void Px() { Console.WriteLine(quot;Produced codequot;); int i = 0; foreach (MICOP micop in this.rgcod) { Explains Edits Console.WriteLine(quot;{0,4}t{1,- 14}t{2}t{3}quot;, i++, micop.xcod.ToSt ring(), micop.i, micop.nte == Domain Expert Programmer null ? quot; quot; : micop.nte.ToString()); } } © 2008 Intentional Software Corporation
  • 11. Intentional: Input + Process public CodeTable() { Domain Code Generator } rgcod = new ArrayList(); public ArrayList rgcod; public void Pass4(XCOD xcod, int i, NTE nte) { input output Console.WriteLine(quot;P4: quot; + xcod.ToString()); this.rgcod.Add(new MICOP(xcod, i, nte)); } public MICOP MicopLast() { return (MICOP)this.rgcod[this.rgcod.Count - 1]; } Creates Edits public void DeleteLastMicop() { this.rgcod.RemoveAt(this.rgcod.Coun t - 1); } public void Px() { Console.WriteLine(quot;Produced codequot;); int i = 0; foreach (MICOP micop in this.rgcod) { Console.WriteLine(quot;{0,4}t{1,- 14}t{2}t{3}quot;, i++, micop.xcod.ToSt ring(), micop.i, micop.nte == Domain Expert Programmer null ? quot; quot; : micop.nte.ToString()); } } © 2008 Intentional Software Corporation
  • 12. Analogy: Blog Software As viewed As edited (input) As generated © 2008 Intentional Software Corporation (output)
  • 13. More ”Input + Process” Analogies • DNA – Growing an organ, e.g. Optic nerve – Brevity of DNA makes evolution possible • Kolmogorov complexity © 2008 Intentional Software Corporation
  • 14. Separating and Weaving Domains Business Domain PowerPoint Orientation Domain Word Excel Workbench Business Experts Ruby Programmers Java/C# C/C++ Computing Power Non-executable Executable © 2008 Intentional Software Corporation
  • 15. Key Benefits • Domain Expert participation feasible – domain knowledge isolated from technology • Separation of concerns – complexity is reduced • Programmers create a more valuable artifact: Generator –weaves domain input with Software Engineering knowledge © 2008 Intentional Software Corporation
  • 16. Domain Orientation Trends: • Domain Specific Languages (DSL) • Code Generation/Generative Programming (GP) • Domain Specific Modeling (DSM) • Domain Driven Design (DDD) • Model Driven Development (MDD) • Meta Programming • ... © 2008 Intentional Software Corporation
  • 17. What prevents DSL mainstream use? • Integrate Domain Experts fully – Matching existing notations – Mixing graphical/textual notations • Multi-domain – Compose independent domains – References between domains • Domain evolution, domains must be able to evolve without limitations (structure and notation) • Groupware for domain experts © 2008 Intentional Software Corporation
  • 18. Programming Languages as Base? • Programming languages as the model leaves major issues: – Text-only not satisfactory – Parsing requirement constrains language design – Multi-domain is unaddressed – Domain evolution is unaddressed – Current groupware (CM) not feasible for domain experts © 2008 Intentional Software Corporation
  • 19. Intentional Domain Workbench • Bring domain orientation to a new level by changing software creation to truly integrate Domain Experts © 2008 Intentional Software Corporation
  • 20. Def Domain Workbench (Martin Fowler) 1. Users can freely define new domains, including languages, that are fully integrated with each other. 2. The primary source of information is a persistent abstract representation. 3. Domain designers define domains in three main parts: schemas, editors, and generators. 4. Domain users manipulate a domain through a projectional editor. 5. A domain workbench can work with incomplete and contradictory information. CONFIDENTIAL © 2007 Intentional Software Corporation
  • 21. Inside the Domain Workbench public CodeTable() { rgcod = new ArrayList(); } public ArrayList rgcod; public void Pass4(XCOD xcod, int i, NTE nte) { Console.WriteLine(quot;P4: quot; + xcod.ToString()); this.rgcod.Add(new MICOP(xcod, i, nte)); } public MICOP MicopLast() { return (MICOP)this.rgcod[this.rgcod.Count - 1]; } Projector Generator public void DeleteLastMicop() { } this.rgcod.RemoveAt(this.rgcod.Count - 1); public void Px() { Console.WriteLine(quot;Produced codequot;); int i = 0; foreach (MICOP micop in this.rgcod) { Console.WriteLine(quot;{0,4}t{1,-14}t{2}t{3}quot;, i++, micop.xcod.T oString(), micop.i, micop.nte == null ? quot; quot; : micop.nte.ToString()); } Projectional editor Intentional Tree } (Schema) © 2008 Intentional Software Corporation
  • 22. Intentional Tree • Extendible, uniform representation • Strong identities throughout • No fixed meta-levels • Versioned Domain Code Domain Schema storage Return Def Assign... • Separated Assign Def Div... concerns a Div b Plus c 1 © 2008 Intentional Software Corporation
  • 23. Projectional editing • Separates underlying representation from notation (syntax) • Works in two directions: output and editing • Special selections that take tree structure into account • Large number of notations for: – matching existing notations – multi-domain – ambiguity resolving – domain evolution • Can also edit Programs, Schema, Generators
  • 24. Some Notational Examples or or or © 2008 Intentional Software Corporation
  • 25. Integrate Domain Experts •• Projectional editor supplies appropriate notation Matching existing notations • Mixing notation graphics / text • Projectional editor decouples domain code from notation – Multi-view, embedding, extension… • Graphics / text are treated uniformly • Notation can change on domain or other selected boundaries © 2008 Intentional Software Corporation
  • 26. Multi domain • Compose independent domains • References between domains • Tree structure accommodates composition • Inter-domain references connecting domains © 2008 Intentional Software Corporation
  • 27. Domain evolution • Tree storage is independent of schema – will not “break” if schema changes • Notation can keep up with evolution • Further parameterization is always possible • Independent concerns can be added without interfering with others © 2008 Intentional Software Corporation
  • 28. Groupware • Tree storage requires rethinking groupware – Change logs for fully general solution – Edit “conflicts” are a “mini domain” – integrated with notations – Versioning and audit trails • Familiar metaphors: versions, branches, open, update, commit, merge © 2008 Intentional Software Corporation
  • 29. Intentional Domain Workbench Status • Technology is fully capable of handling the Domain Workbench requirements. • Nearing operational use in selected domains • Working with selected customers only, for example with Capgemini. © 2008 Intentional Software Corporation
  • 30. Henk Kolk CTO Financial Services Capgemini
  • 31. Problems for Pension Companies • Need for pension product innovation • Governmental interest – New Pension Laws • Mergers • Transparency • Problems • Time to market • Abstract product models • Ensuring quality © 2008 Intentional Software Corporation
  • 32. Old way: disconnected domains Pension Plan Current issues: Analysis • Expensive handovers • Traceability Functional design Technical design Program Validation Execute Handover © 2008 Intentional Software Corporation
  • 33. New way: connected domains Pension Plan No apparent handover Analysis Traceability comes for free Functional design Technical design Program Validation & Execute Handover © 2008 Intentional Software Corporation
  • 34. Old way: Excel & Word
  • 35. New way: Pension Workbench • Matching existing notations – Pension experts record pension world in their notations Old spreadsheet Pension Workbench
  • 36. Multiple Views with Graphics Pension Plan versions Rule dependencies © 2008 Intentional Software Corporation
  • 37. Compose Business Domain • Domain Schema • Projectional Editors © 2008 Intentional Software Corporation
  • 38. Integrate Rule Test Domain • Unit Tests for pension rules • Real time evaluation © 2008 Intentional Software Corporation
  • 39. Integrate System Test Domain • Test cascading rules and their interrelations • Real time evaluation © 2008 Intentional Software Corporation
  • 40. Build Code Generators • Multiple implementation target languages © 2008 Intentional Software Corporation
  • 41. Domain Language Evolution Jan March May July Oct Capgemini Capgemini Pension Language Capgemini Unified Pension Language Capgemini Capgemini Pension expert discussion Client 1 Client Pension Language 1 Client 2 Client Pension Language 2 Client 1: “Please Client 1 raise abstraction © 2008 Intentional Software Corporation level of my language”
  • 42. Testing – Lack of “groupware” • Rules domain • Rules • Test cases (VBA) A Automated support M Manual Handover • XML Export domain Input Excel • Multiple users TD M M Version Control Pseudo code MS Access Output M A A FD’s Rules Test cases Text M Entry Test results XML MS Word Programming (pseudo code) Calculation Export (VBA) • Issues M M • Version control Rules Issue Test Case • Consistency of 800+ Changes M Debugging separate files Mgmt (VBA) • Debugging VBA code © 2008 Intentional Software Corporation
  • 43. New Groupware A Automated support M Manual Handover Input Pension Workbench TD A A Groupware Pseudo code MS Access Version control Output A A A FD’s Rules Test cases Text M Entry Test results XML MS Word Entry (pseudo code) Calculation Export (automated) M Changes M Rules Issue Mgmt © 2008 Intentional Software Corporation
  • 44. Integrating Pension Experts Herman Gerbscheid, Pension Architect: • “This is the stuff I had to do mentally and keep consistent in my head all the time. It’s great to finally have tools for it.” Suzanne Pront, Pension Expert: • “Normally I know what I want, but don’t know how to tell engineers. Now I can do this myself. This is a revolution!” Sybren den Hartog, Java Architect: • “Now we can generate business rules and domain structure, which we could not do in UML based MDA.” © 2008 Intentional Software Corporation
  • 45. Summary • Intentional Software is helping us to accelerate Pension Product innovation for our clients • We were able to demonstrate a radical change in time to market and quality • We used Pensions as a pilot, but we see many opportunities in other domains © 2008 Intentional Software Corporation