SlideShare a Scribd company logo
Programming fromtoModeling…and back againMarkus VoelterIndependent/itemisvoelter@acm.org
A Journey…
„Houston,we have aProblem!“
Programming LanguagesErlangC# C++PythonJavaRubyGroovyFortranC
Programming Languagesare notexpressiveenough.ErlangC# C++PythonJavaRubyGroovyFortranC
Programming Languagesare nothigh-levelenough.ErlangC# C++PythonJavaRubyGroovyFortranC
Programming Languagesare notabstractenough.ErlangC# C++PythonJavaRubyGroovyFortranC
Programming Languagesare notdomain-specificenough.ErlangC# C++PythonJavaRubyGroovyFortranC
Programming Languagesare notenough.ErlangC# C++PythonJavaRubyGroovyFortranC
Programming LanguagesFormatsErlangC# C++PythonJavaRubyGroovyFortranjsonCHTMLCSSyamlXML
Programming LanguagesFormatsFrameworksErlangC# C++PythonJavaDjangoRubyGroovyWPFFortranjsonCJEEJMSHTMLCSSRailsyamlXMLlift
Programming LanguagesFormatsFrameworksenough.are notErlangC# C++PythonJavaDjangoRubyGroovyWPFFortranjsonCJEEJMSHTMLCSSRailsyamlXMLlift
not enough?for what?
not enough?for what?
not enough?for what?
So?
Modeling… Higher Level… Domain SpecificConcepts & Notations… Code GenerationInterpretation
Modeling… Higher Level… Domain SpecificConcepts & Notations… Code GenerationInterpretationSolvestheProblem!
But:
Different WorldsProgramming Tools!=Modeling Tools
Different WorldsModeling Tool!=Modeling Tool
Different WorldsMix Models and Programs
Different WorldsMix Models and ProgramsAST Navigation & Query
Different WorldsMix Models and ProgramsAST Navigation & QueryIntegration of 3GL code
Different WorldsMix Models and ProgramsAST Navigation & QueryIntegration of 3GL codeCode Constraints
pareCom
pareCom
Domain SpecificNotationsandAbstractionsFlexible!Limited!FrameworksLibraries(Fluent) APIs
GraphicalTextualFormsTablesLimited!Flexible!TextualTrees
CustomizeGeneratororInterpreterLimited!Flexible!ReflectionMeta ProgramsOpen Compilers
Define customQueryorNavigateorTransformLimited!Flexible!AST APIsStatic AnalysisRegex
CustomValidationorError ChecksLimited!Flexible!IDE pluginsStatic AnalysisOpen Compilers
DifferentRepresentationsandProjectionsLimited!Flexible!Text is TextCode FoldingTree ViewsVisualizations
MixingandComposingLanguagesLimited!Flexible?Python-to-C-likeInternal DSLsEmbed-As-StringSpecific: LINQ
ScalableUsableIDE SupportMature!Brittle!Modeling Tools…!?
DebuggingRefactoringTestingMature!Brittle!?
VersioningDiff, MergeBranchingMature!Brittle!for some tools…
Gets theGets someJob Done!Jobs done.some people doubt that…everybody agrees…
Whythe difference?
History?
ModelingProgramming
ModelingProgramming… (Mostly) Textual     Notations… Concrete Syntax     Storage… (Fancy) ASCII Editors… Read-Only     Visualizations
ModelingProgramming… (Mostly) Graphical    Notations… Abstract Syntax     Storage… Projecting Editors… Different editable    views for model… (Mostly) Textual     Notations… Concrete Syntax     Storage… (Fancy) ASCII Editors… Read-Only     Visualizations
Whythe difference?
It is time for …
… a Different Perspective
Programmingthe waywe doModeling?Modelingthe waywe doProgramming?
ModelingProgramming====ProgrammingModeling
We don‘t want tomodel,we want toprogram!
We don‘t want tomodel,we want toprogram!… at different levels of abstaction… from different viewpoints… integrated!
We don‘t want tomodel,we want toprogram!… with different degrees of domain-specificity… with suitable notations… with suitable expressiveness
We don‘t want tomodel,we want toprogram!And always:precise and tool processable
Where do we go from here?
A vision forprogramming
A vision forprogrammingEnablingTechnologies
A vision forprogrammingEnablingTechnologiesAvailableTooling
A vision forProgramming
Programming Languagesare notMODULARenough.
Programming Languagesare notCOMPOSABLEenough.
Programming Languagesare notCONFIGURABLEenough.
Programming Languagesare notADAPTABLEenough.
Programming Language Syntaxis notFLEXIBLEenough.
Big Language?withmany first class concepts!
Small Language?with a few, orthogonaland poweful concepts
abcdefghijklModular Languagewith many optional,composable  concepts
Modular LanguageLikeframeworksandlibraries,
Modular LanguageLikeframeworksandlibraries, but withsyntaxand IDE support
Not a new idea…
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
Growing A Language(Guy L Steele)
LanguageWorkbench(Martin Fowler)
LanguageWorkbench(Martin Fowler)Freelydefinelanguages andintegratethem
LanguageWorkbench(Martin Fowler)use?persistentabstractrepresentation
LanguageWorkbench(Martin Fowler)language ::=schemaeditors+generators+
LanguageWorkbench(Martin Fowler)?projectionalediting
LanguageWorkbench(Martin Fowler)persistincompleteorcontradictoryinformation
LanguageWorkbench(Martin Fowler)powerful+editingtestingrefactoringdebugginggroupwarelanguage definitionimpliesIDE definition
LanguageWorkbench(Martin Fowler)+support for„classical“programmingand„classical“modeling
Syntaxprimarilytextual
Syntaxprimarilytextualwithmoresymbolsthink: mathematics
Syntaxprimarilytextualsometimesbox&line style
Syntaxprimarilytextualsophisticatedvisualizations
Viewpoints
Viewpointssuitableabstractionsandnotationsforeach
ViewpointsIntegratedviasymbolicreferencesandseamlesstransitions
ViewpointsBusinesscustompurpose-builtcreate/include
ViewpointsBusinessCustomNotationsrealbusinessexpert integration
ViewpointsBusinessCustomNotationsrealbusinessexpert integrationBut that‘s another talk…
ViewpointsTechnicalpredefinedlibraryconfigure
Example Languages
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
(Seemingly)Simple ExampleAddingmatricesto C in an embeddedenvironment.
Currently:
Currently:Matricesnot supportedin XML format and generator
Currently:Tool teamwould have todo the extension… a lot of work… busy… one central tool
Currently:No real compiler supportin the resulting C code… type checks… operator overloading… generics (matrix<int>)… matrix syntax?
From Programming to Modeling And Back Again
Better Solution
Better Solutiongeneric matrix and vector types
Better Solutionreal matrix and vector literals
Better Solutionsyntaxhighlights for vectors and matrices
Better Solution operatoroverloading
Better Solution operatoroverloadingstaticoptimization… symmetrical  matrices… identity matrix… diagonal matrices
Better Solutionmathnotation
Better Solutionaseparate language moduleused only bythose whoreally need it
From Programming to Modeling And Back Again
In addition: PLE Variabilityannotatingvariabilityexpressionsto arbitrary regions
In addition: PLE Variabilityannotatingvariabilityexpressionsto arbitrary regions statically  checked
In addition: PLE Variabilityannotatingvariabilityexpressionsto arbitrary regions project variant
From Programming to Modeling And Back Again
more later…(tool examples)
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
EnablingTechnologies
EnablingTechnologiesAdvancedParserGenerators
Modeling as Programmig… (Mostly) Textual     Notations… Concrete Syntax     Storage… (Fancy) ASCII Editors… Read-Only     Visualizations
Custom SyntaxGraphicalTextualSymbolic++
IDESupportTeamworkDebuggingCustom Editors
CompleteSymbolicIntegrationGoto DefFind RefsRefactoring
Xtext-like Toolsprovide editor supportCustom EditorsTeamworkGoto DefFind RefsRefactoring
Limited toUnicodehow to handlenon-character symbols
Graphics !=Texttwo worlds…separate editors… per syntax/viewpoint… models can still be ref integrated
From Programming to Modeling And Back Again
What if!combine languagessame seq<Char> asdifferent tokens?
Ambiguous!Not Parsable.Bad Luck.
Traditionally:Language ::=      Token* | Rule*;
Traditionally:Language ::=      Token* | Rule*;Token ::=      Character*;
Traditionally:Language ::=      Token* | Rule*;Token ::=      Character*;Rule ::=      Token* | Rule;
Traditionally:Language ::=      Token* | Rule*;2 Phases:1. Global Tokenization(aka Scanning)2. Grammar Recognition(aka Parsing)
Modern:Language ::=             Rule*;Rule ::=             Char* | Rule*;1 Phase:Grammar Recognitiondirectly on char*
ScannerlessParsingNo Ambiguitywhen combining languagesAlways Parsable.(well, almost. There are some corner cases…)
From Programming to Modeling And Back Again
EnablingTechnologiesProjectionalEditing
text… to tree… to textParser-based
Projectionaltree… to text-lookalike (editor)… to other trees … [*]… to text
Programming as Modeling… (Mostly) Graphical    Notations… Abstract Syntax     Storage… Projecting Editors… Different editable    views for model
Programming as Modeling… (Mostly) Graphical Any kind of    Notations… Abstract Syntax     Storage… Projecting Editors… Different editable    views for model
LanguageCompositionThere‘sno parsing.Unique Language Element Identity.Unlimted language composition.
FlexibleNotationsTextuallike ASCIItreated the same}Graphicalcan be mixedbox & lineSemi-Graphicalmathematical
AutomaticIDE Extensiontool support is inherentfor languages build withprojectional toolslanguage definitionimpliesIDE definition
MultipleNotations… for the same conceptse.g. in different contextsor for different tasks
PartialProjections… different views… for different roles/people… only a particular variant
Storage!= Schema… store arbitraty meta datachange logconflicting informationvariability annotations… independent of language schema!… „aspects“, overlay
LiveProgramsthink: spreadsheeta change to one part of programcan lead to (dependent) changesin other parts
Tree Editing… is different from editing text… try to make it feel like text… takes some gettingused tobut: for more flexible notations a more general editing paradigm is needed
InfrastructureIntegration… storage is not text… diff/merge must be in tool… existing text tools don‘t work
ProprietaryTools… no standards… no interop
From Programming to Modeling And Back Again
AvailableTooling
AvailableToolingEclipseXtext
http://eclipse.org/modeling
http://eclipse.org/xtext
Eclipse XtextBuilding Textual Editors
Eclipse XtextBuilding Textual Editors
Xtext: Specify Grammar
Xtext: Gen. Meta Model
Xtext: Constraints
Xtext: Generated Editor
Xtext: Generated EditorCode Completion
Xtext: Generated EditorSyntax ColoringCustom KeywordColoring
Xtext: Generated EditorRealtimeConstraintValidation
Xtext: Generated EditorCustomizableOutlines
Xtext: Generated EditorCode Folding
Xtext: Generated EditorGoto Definition Find ReferencesCross-File ReferencesModel as EMF
Xtext: Generated Editor
From Programming to Modeling And Back Again
PlatformArchitectureDSL
As you understandanddevelopyourPlatformArchitecture…
Develop a language to express it!
Language resembles architectural concepts…
Express the applications with the language.
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
Another Story…Architecture As Language
From Programming to Modeling And Back Again
DEMO IBuilding DSLs with Eclipse Xtext
From Programming to Modeling And Back Again
AvailableTooling
AvailableToolingJetbrains‘Meta ProgrammingSystem
also do…IntelliJ IDEAResharper
released inQ3 2009currently 1.1 RC1
licensed underApache 2.0
Build new standalone DSLs
Build new standalone DSLsBuild DSLs that reuse partsof other languages
Build new standalone DSLsBuild DSLs that reuse partsof other languagesJava++(MPS comes with BaseLanguage)extend base language
Build new standalone DSLsBuild DSLs that reuse partsof other languagesJava++(MPS comes with BaseLanguage)extend base languagebuild DSLs that reuse partsof BaseLanguage
Language Extension ExampleJava + Extension
Language Extension ExampleOldJavaJava + ExtensionReadWriteLock l = …l.readLock().lock();try {  //code} finally {  l.readLock().unlock();}
Language Extension ExampleOldNewJavaJava + ExtensionReadWriteLock l = …l.readLock().lock();try {  //code} finally {  l.readLock().unlock();}ReadWriteLock l = …lock (l) {  //code}
Structure  Editor   Typesystem  Generator
Structure  Editor   Typesystem  Generator
Structure  Editor   Typesystem  Generator
Structure  Editor   Typesystem  Generator
Structure  Editor   Typesystem  Generator
Structure  Editor   Typesystem  Generator
Structure  Editor   Typesystem  Generator
Structure  Editor   Typesystem  Generator
Structure  Editor   Typesystem  Generator
Language Extension ExampleResult behaves like a nativebase language construct
Language Extension ExampleResult behaves like a nativebase language construct
Language Extension ExampleTranslated to regular Java codebased on the generatorpackage jaxdemo.sandbox.sandbox;import java.util.concurrent.locks.Lock;public class DemoClass {  private Lock lock;  public DemoClass() {    try {      this.getLock().lock();      SharedResouce.instance().doSomething();    } finally {      this.getLock().unlock();    }  }  private Lock getLock() {   return this.lock;  }}
From Programming to Modeling And Back Again
Example LanguagesUI Language
Example LanguagesHTML Templates
Example LanguagesPersistent Classes
From Programming to Modeling And Back Again
DEMO IBuilding DSLs with JetBrains MPS
From Programming to Modeling And Back Again
AvailableTooling
AvailableToolingIntentional SoftwareDomainWorkbench
From Programming to Modeling And Back Again
Version 1.0 released inDec 15, 2008currently at 1.4
CommercialProduct
Eval availableupon request
Statemachine ExampleNative Projection
Statemachine ExampleTabular Projection
Statemachine ExampleTextual DSL Projection
Statemachine ExampleJava Projection
Statemachine ExampleRuby Projection
Statemachine ExampleTwo projections side/side
Statemachine ExampleTwo projections side/side
From Programming to Modeling And Back Again
Pension Workbench ExampleText Editing Domain
Pension Workbench ExampleInsurance Mathematics Domain
Pension Workbench ExamplePension Contract Rules Domain
Pension Workbench ExampleAll in one Document
Pension Workbench ExampleSymbolically integrated
From Programming to Modeling And Back Again
A Journey…Arewethere?
A Journey….coordinatesweb email skypexinglinkedinwww.voelter.devoelter@acm.orgschoggladhttp://www.xing.com/profile/Markus_Voelterhttp://www.linkedin.com/pub/0/377/a31
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again
From Programming to Modeling And Back Again

More Related Content

PPTX
Architecting Domain-Specific Languages
PPTX
Domain Specific Language Design
PDF
Programing paradigm & implementation
PPTX
Go programing language
PDF
Principles of-programming-languages-lecture-notes-
PPT
Programming language design and implemenation
PPTX
Imperative programming
PPTX
Programming Languages
Architecting Domain-Specific Languages
Domain Specific Language Design
Programing paradigm & implementation
Go programing language
Principles of-programming-languages-lecture-notes-
Programming language design and implemenation
Imperative programming
Programming Languages

What's hot (20)

PPT
Programing Language
PPTX
Paradigms
PDF
C Language
PPT
Comparative Study of programming Languages
PPT
Programming Languages An Intro
PPT
SD & D Types of programming language
PDF
Programming languages and concepts by vivek parihar
PPTX
Introduction to programming c
PDF
Programing language
PPT
Lect 1. introduction to programming languages
PPT
Mps Presentation
PPTX
CS152 Programming Paradigm
PPTX
Programming languages
PPTX
Programming Language
KEY
Test-driven language development
PPTX
Programming paradigm
PPTX
Ndu06 typesof language
PPT
SD & D Implementation
PPTX
Prgramming paradigms
PPTX
Computer Programming Overview
Programing Language
Paradigms
C Language
Comparative Study of programming Languages
Programming Languages An Intro
SD & D Types of programming language
Programming languages and concepts by vivek parihar
Introduction to programming c
Programing language
Lect 1. introduction to programming languages
Mps Presentation
CS152 Programming Paradigm
Programming languages
Programming Language
Test-driven language development
Programming paradigm
Ndu06 typesof language
SD & D Implementation
Prgramming paradigms
Computer Programming Overview
Ad

Viewers also liked (15)

PDF
Model driven development using smart use cases and domain driven design
PPT
Visual Profile - Markus Voelter, Jan 1, 2009
PDF
Agile IT: Modern Architecture for Rapid Mobile App Development
PDF
An introduction to smart use cases
PDF
Using Mobile-D methodology in development of mobile applications: Challenges ...
PPTX
Model driven development and code generation of software systems
PPTX
Introduction to problem solving in C
PPTX
C programming-apurbo datta
PDF
C Prog. - Introduction to Hardware, Software, Algorithm & Flowchart
PPT
Programming in c
PPTX
C Programming Language Tutorial for beginners - JavaTpoint
PPTX
Programming flowcharts for C Language
PPT
Algorithmsandflowcharts1
PPTX
Algorithms and Flowcharts
PPTX
Algorithm and flowchart
Model driven development using smart use cases and domain driven design
Visual Profile - Markus Voelter, Jan 1, 2009
Agile IT: Modern Architecture for Rapid Mobile App Development
An introduction to smart use cases
Using Mobile-D methodology in development of mobile applications: Challenges ...
Model driven development and code generation of software systems
Introduction to problem solving in C
C programming-apurbo datta
C Prog. - Introduction to Hardware, Software, Algorithm & Flowchart
Programming in c
C Programming Language Tutorial for beginners - JavaTpoint
Programming flowcharts for C Language
Algorithmsandflowcharts1
Algorithms and Flowcharts
Algorithm and flowchart
Ad

Similar to From Programming to Modeling And Back Again (20)

PPT
brief intro for Programming Languages 02-chapter-1
PPT
02-chapter-1.ppt programming languages 10
PDF
Programming Languages: some news for the last N years
PPTX
Modelling and Programming: Isn’t it all the same?
PDF
Programming Languages #devcon2013
PDF
Programming Languages Lectures Slides Oscar Nierstrasz
PPTX
Ch1 language design issue
PPTX
Plc part 1
PDF
Os Keysholistic
PDF
CS-321 Compiler Design computer engineering PPT.pdf
PDF
Programming Languages Principles And Practices 3rd Edition Kenneth C Louden
PPT
02-chapter-1.ppt
PPTX
java programming for students UNIT 1.pptx
PPTX
PROGRAMMING, the presentation is about,,
PDF
Inventing The Next Business Programming Language
PPT
02paradigms.ppt
PPTX
Programming introduction
PPT
English de lenguaje de programacion
PPT
PROGRAMMING LANGUAGES
PPTX
L1.1 Introduction to Programming Languages.pptx
brief intro for Programming Languages 02-chapter-1
02-chapter-1.ppt programming languages 10
Programming Languages: some news for the last N years
Modelling and Programming: Isn’t it all the same?
Programming Languages #devcon2013
Programming Languages Lectures Slides Oscar Nierstrasz
Ch1 language design issue
Plc part 1
Os Keysholistic
CS-321 Compiler Design computer engineering PPT.pdf
Programming Languages Principles And Practices 3rd Edition Kenneth C Louden
02-chapter-1.ppt
java programming for students UNIT 1.pptx
PROGRAMMING, the presentation is about,,
Inventing The Next Business Programming Language
02paradigms.ppt
Programming introduction
English de lenguaje de programacion
PROGRAMMING LANGUAGES
L1.1 Introduction to Programming Languages.pptx

More from Markus Voelter (20)

PPTX
Consulting
PDF
Build your own Language - Why and How?
PDF
Deklarative Smart Contracts
PDF
Using language workbenches and domain-specific languages for safety-critical ...
PDF
What's Missing in Language Workbenches
PDF
How Domains Shape Languages
PDF
Why Modeling Suck Sucks
PDF
Fusing Modeling and Programming into Language-Oriented Programming
PDF
The future of DSLs - functions and formal methods
PDF
Lessons Learned from building mbeddr
PDF
The Design, Evolution and Use of KernelF
PDF
Envisioning the Future of Language Workbenches
PPTX
Generic Tools - Specific Languages (PhD Defense Slides)
PPTX
Language-Oriented Business Applications
PPTX
Generic Tools, Specific Laguages
PPTX
Faszination Segelfliegen
PPTX
Introduction To MDD
PPTX
Professional Podcasting Guide
PPTX
DSL Best Practices
PPTX
Fundamentals Of Software Architecture
Consulting
Build your own Language - Why and How?
Deklarative Smart Contracts
Using language workbenches and domain-specific languages for safety-critical ...
What's Missing in Language Workbenches
How Domains Shape Languages
Why Modeling Suck Sucks
Fusing Modeling and Programming into Language-Oriented Programming
The future of DSLs - functions and formal methods
Lessons Learned from building mbeddr
The Design, Evolution and Use of KernelF
Envisioning the Future of Language Workbenches
Generic Tools - Specific Languages (PhD Defense Slides)
Language-Oriented Business Applications
Generic Tools, Specific Laguages
Faszination Segelfliegen
Introduction To MDD
Professional Podcasting Guide
DSL Best Practices
Fundamentals Of Software Architecture

Recently uploaded (20)

PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
cuic standard and advanced reporting.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Encapsulation theory and applications.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Electronic commerce courselecture one. Pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Empathic Computing: Creating Shared Understanding
PPTX
A Presentation on Artificial Intelligence
Per capita expenditure prediction using model stacking based on satellite ima...
cuic standard and advanced reporting.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
NewMind AI Monthly Chronicles - July 2025
Building Integrated photovoltaic BIPV_UPV.pdf
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Encapsulation theory and applications.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Encapsulation_ Review paper, used for researhc scholars
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Electronic commerce courselecture one. Pdf
Review of recent advances in non-invasive hemoglobin estimation
20250228 LYD VKU AI Blended-Learning.pptx
Empathic Computing: Creating Shared Understanding
A Presentation on Artificial Intelligence

From Programming to Modeling And Back Again