SlideShare a Scribd company logo
@gfraiteur
a fresh view on design patterns, programming languages,
and agile methodologies
Design Pattern Automation
Gaël Fraiteur
PostSharp Technologies
Founder & Principal Engineer
@gfraiteur
Hello!
My name is GAEL.
No, I don’t think
my accent is funny.
my twitter
@gfraiteur
My commitment to you:
to seed a vision, not to sell a tool.
@gfraiteur
The vision:
Code at the right level of abstraction,
with compiler-supported design patterns

Recommended for you

PHP Annotations: They exist! - JetBrains Webinar
 PHP Annotations: They exist! - JetBrains Webinar PHP Annotations: They exist! - JetBrains Webinar
PHP Annotations: They exist! - JetBrains Webinar

Annotations are more than PHPDoc comments, they’re a fully-featured way of including additional information alongside your code. We might have rejected an RFC to add support into the PHP core, but the community has embraced this tool anyway! This session shows you who is doing what with annotations, and will give you some ideas on how to use the existing tools in your own projects to keep life simple. Developers, architects and anyone responsible for the technical direction of an application should attend this session.

rafael dohmsdoctrinephp
(4) c sharp introduction_object_orientation_part_i
(4) c sharp introduction_object_orientation_part_i(4) c sharp introduction_object_orientation_part_i
(4) c sharp introduction_object_orientation_part_i

This document provides an introduction to object-oriented programming concepts in C#, including: - Simulating reality through modeling real-world entities as classes with data fields and behavior methods. - Relationships between classes like aggregation ("has-a") and generalization ("is-a") hierarchies. - Defining classes with fields to represent an object's state, and methods to represent its behavior. - Inheritance and specialization, where derived classes extend base classes while maintaining the substitution principle. - Other concepts like encapsulation, properties, and class diagrams using UML notation.

simulation of realityfieldsintroduction
Model-Driven Engineering: a bottom-up approach based on meta-programming (ELA...
Model-Driven Engineering: a bottom-up approach based on meta-programming (ELA...Model-Driven Engineering: a bottom-up approach based on meta-programming (ELA...
Model-Driven Engineering: a bottom-up approach based on meta-programming (ELA...

This document discusses model-driven engineering and metaprogramming. It begins by explaining why learning model-driven engineering from code is useful. It then discusses the relationships between models and code, including code generation from models and reverse engineering models from code. The document introduces concepts like metaprogramming and reflection. It also discusses aspect-oriented programming and how it relates to manipulating classes and objects. Finally, it provides an example of implementing the observer design pattern in Java and aspect-oriented programming.

meta-programming meta-modeling uml model-driven en
@gfraiteur
NotifyPropertyChanged,
the wrong way
LAB 1
@gfraiteur
1. A history of programming
languages and patterns
2. Defining Design Pattern Automation
3. Pattern-Oriented Software Development
4. Tools for Design Pattern Automation
5. Agile Methodologies and Patterns
6. A last example
7. Q&A
8. Summary
Section
@gfraiteur
Univac Assembly Language
@gfraiteur
FORTRAN (1955)
• 1955 - FORTRAN I
• Global Variables
• Arrays
• 1958 - FORTRAN II
• Procedural Programming
(no recursion)
• Modules

Recommended for you

Presentation
PresentationPresentation
Presentation

Paul Nathan gave a presentation on practical functional programming. He began by introducing himself and explaining why functional programming is an important paradigm to learn. He then defined key concepts in functional programming like first class functions, differences from object oriented programming, avoiding side effects, and advanced type systems. The presentation included examples in Haskell and Common Lisp to demonstrate how functional programming is implemented in different languages.

Executable specifications for xtext
Executable specifications for xtextExecutable specifications for xtext
Executable specifications for xtext

This document discusses using examples and executable specifications to communicate how to use a new domain-specific language. It describes three roles in language development - the language designer, domain expert, and language users. Four important use cases are outlined: specifying the language, developing an IDE, acceptance testing, and teaching the language. Xpect is introduced as a tool that allows writing executable specifications and tests using examples as test data.

unit testxtextdsl
The Ring programming language version 1.6 book - Part 181 of 189
The Ring programming language version 1.6 book - Part 181 of 189The Ring programming language version 1.6 book - Part 181 of 189
The Ring programming language version 1.6 book - Part 181 of 189

The document provides documentation on the Ring programming language, including details on various Ring classes and their methods. It describes classes like QCoreApplication, QTextBrowser, and QRegion that are part of the Qt framework. It also includes frequently asked questions about Ring and comparisons to other programming languages.

ringring programmingring programming language
@gfraiteur
COBOL (1959)
• Data Structures
• Natural Language
@gfraiteur
LISP (1959)
• Variable Scopes (Stack)
• Garbage Collection
@gfraiteur
Simula (1967)
• Classes as
abstraction mechanism
• Virtual procedures
• Object references
• Coroutines
Begin
Class Glyph;
Virtual: Procedure print Is Procedure print;
Begin
End;
Glyph Class Char (c);
Character c;
Begin
Procedure print;
OutChar(c);
End;
Glyph Class Line (elements);
Ref (Glyph) Array elements;
Begin
Procedure print;
Begin
Integer i;
For i:= 1 Step 1 Until UpperBound (elements, 1) Do
elements (i).print;
OutImage;
End;
End;
Ref (Glyph) rg;
Ref (Glyph) Array rgs (1 : 4);
! Main program;
rgs (1):- New Char ('A');
rgs (2):- New Char ('b');
rgs (3):- New Char ('b');
rgs (4):- New Char ('a');
rg:- New Line (rgs);
rg.print;
End;
@gfraiteurCopyright © by Arild Vågen
Human Language
Cognition
Communication
Social Organization
Machine Language
Execution
Programming Languages

Recommended for you

Coding standard
Coding standardCoding standard
Coding standard

This document discusses various code quality tools such as FindBugs, PMD, and Checkstyle. It provides information on what each tool is used for, how to install plugins for them in Eclipse, and how to configure them for use with Ant builds. FindBugs looks for potential bugs in Java bytecode. PMD scans source code for coding mistakes, dead code, complicated expressions, and duplicate code. Checkstyle checks that code complies with coding style rules. The document explains how to download and configure each tool so it can be run from Eclipse or as part of an Ant build.

source codecoding standardcodes
New c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNew c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_iv

This document discusses LINQ (Language Integrated Query) features in C#, including introducing LINQ to Objects, basic query expressions for projection and selection, and anonymous types. It provides examples of how LINQ to Objects maps to extension methods, functional and declarative expressibility using LINQ, details about the LINQ translation process from query expressions to method calls, and examples of using anonymous types.

Bab satu
Bab satuBab satu
Bab satu

This document provides an introduction to object-oriented programming (OOP) concepts. It discusses the history and advantages of OOP, including enabling code reuse through inheritance and encapsulation. Key OOP concepts covered include classes, objects, encapsulation, abstraction, inheritance, polymorphism, and the differences between abstraction and encapsulation. Examples are provided to illustrate classes, objects, encapsulation, and the differences between structured and object-oriented programming.

@gfraiteurHolašovice, Czech Republic
How is it possible that any simple farmer could make a
house, a thousand times more beautiful than all the
struggling architects of the last fifty years could do?
Christopher Alexander
in The Timeless Way of Building, 1977
Pattern Thinking (1977)
@gfraiteur
A world of
patterns
LANGUAGE
REGULARITY
RESOLUTION
OF FORCES
SELF-
SUSTAINABILITY
VARIETY UBIQUITY
@gfraiteurLanguage Enables Cognition
@gfraiteur
Copyright ©
Stijn NieuwendijkLanguage Enables Communication

Recommended for you

Functional Leap of Faith (Keynote at JDay Lviv 2014)
Functional Leap of Faith (Keynote at JDay Lviv 2014)Functional Leap of Faith (Keynote at JDay Lviv 2014)
Functional Leap of Faith (Keynote at JDay Lviv 2014)

Keynote talk given at JDay Lviv 2014 in Ukraine (http://www.jday.com.ua/). Video coming soon. Abstract: Some say that there's nothing new under the sun. However, looking back on five to six decades of computing, it's easy to see that things progress at their own leisurly pace. Structured programming, originating in the '60s, did not gain mainstream adoption until the '80s; object-oriented programming was hotly debated in the '70s and '80s but only gained widespread acceptance in the '90s. Every couple of decades sees an engineering leap that radically improves the software engineering discipline across the board. I believe we are now at such an inflection point, with functional programming concepts slowly sifting into the mainstream. After this talk, I hope you will too.

historyjava8functional programming
Chapter 4 computer language
Chapter 4 computer languageChapter 4 computer language
Chapter 4 computer language

This document provides an overview of computer languages and the programming process. It discusses machine language as the lowest-level language understood by computers. Higher-level languages like assembly and programming languages make programming easier for humans. It also describes the programming process, which involves defining problems, planning solutions, coding, testing, and documenting programs. Finally, it discusses different types of program translators like assemblers, compilers, and interpreters that translate human-readable code into machine-readable code.

Maglev-A different way to develop with Ruby
Maglev-A different way to develop with RubyMaglev-A different way to develop with Ruby
Maglev-A different way to develop with Ruby

The presentation was about Maglev, an object server that provides automatically persisted objects without using an ORM or SQL. It allows objects to be transactional and multi-VM. The goals of Maglev include having no object to RDB mapping, no SQL queries, no save or update methods, separation of transactional code from model code, and no coupling between models and web frameworks. Examples showed using Maglev to develop investment portfolio applications with accounts, portfolios, and transactions just as objects without persistence concerns. Conclusions were that Maglev allows simpler, easier, and cheaper development just with objects.

ruby maglev persistance sinatra
@gfraiteurLanguage for the Trade
@gfraiteur
Patterns as
WISDOM
in canonical form
• Name
• Also Known As
• Problem
• Context
• Forces
• Example
• Solution
• Structure and Dynamics
• Implementation
• Example Resolved
• Known Uses
• Variants
• Consequences
• Relationships
• Name
• Also Known As
• Problem
• Context
• Forces
• Example
• Solution
• Structure and Dynamics
• Implementation
• Example Resolved
• Known Uses
• Variants
• Consequences
• Relationships
• Name
• Also Known As
• Problem
• Context
• Forces
• Example
• Solution
• Structure and Dynamics
• Implementation
• Example Resolved
• Known Uses
• Variants
• Consequences
• Relationships
• Name
• Also Known As
• Problem
• Context
• Forces
• Example
• Solution
• Description
• Example Resolved
• Known Uses
• Variants
• Consequences
• Relationships
@gfraiteur
Software Patterns (1995)
• Apply to OO design
• Canonic pattern description
• First catalogue of
23 patterns
@gfraiteur
In 2013, eighteen years later, design patterns still live in
their parent’s house – books.

Recommended for you

Avoiding to Reinvent the flat tire
Avoiding to Reinvent the flat tireAvoiding to Reinvent the flat tire
Avoiding to Reinvent the flat tire

This document discusses the history of computing and programming languages. It notes that many revolutionary ideas from the past are not yet common, such as treating code as objects and dynamic programs that can change as they run. The document advocates learning from the past by reading seminal works and learning languages like Lisp, Smalltalk, and Self to challenge current assumptions. Understanding our history can help us avoid reinventing solutions and using better approaches.

lisp smalltalk scrum rsgbol2014
Design Pattern From Java To Ruby
Design Pattern    From Java To RubyDesign Pattern    From Java To Ruby
Design Pattern From Java To Ruby

The document discusses design patterns in Ruby compared to Java. Some key points: - Ruby classes are objects while Java uses classes and objects. Ruby uses message passing while Java uses method calls. - Ruby has built-in support for common patterns like Singleton, Observer, Iterator through mixins. These are implemented differently in Java. - Other patterns like Factory Method, Command are easily implemented in Ruby thanks to features like mixins and blocks/procs. - The document provides an overview of several design patterns and how they translate from Java to Ruby.

ruby
History of computer language
History of computer languageHistory of computer language
History of computer language

Programming languages have evolved significantly since the earliest examples in the 18th century. The document then lists over 100 programming languages in chronological order from 1949 to 1991, showing how each new language was influenced by its predecessors and developed new capabilities. Major languages included FORTRAN, COBOL, ALGOL, LISP, Pascal, C, Ada, Smalltalk, and Haskell.

@gfraiteur
Latent Redundancy
Bad OO code Good OO code Ideal code
Intrinsic variability Latent redundancy Bad redundancy
@gfraiteur
Cost of low abstraction
• Boilerplate code
• More bugs
• Code review
• Changing the pattern implementation
@gfraiteur
1. A history of programming languages and patterns
2. Defining Design Pattern
Automation
3. Pattern-Oriented Software Development
4. Tools for Design Pattern Automation
5. Agile Methodologies and Patterns
6. A last example
7. Q&A
8. Summary
Section
@gfraiteur
Pattern Automation
Automation
is the use of
machines, control systems
and information technologies
to optimize productivity in
the production of goods and
delivery of services.
Wikipedia
Design Pattern Automation
is the use of tools to optimize
productivity in the
implementation of software
based on patterns.

Recommended for you

Multithreading Design Patterns
Multithreading Design PatternsMultithreading Design Patterns
Multithreading Design Patterns

Gael Fraiteur argues that multithreaded programming needs to be addressed at the right level of abstraction, with design patterns like Actor, Immutable, Freezable, Thread Affine, Reader-Writer-Synchronized. Design patterns form a language and serve as a model against which code can be expressed. Compilers must support design patterns to allow code to be deterministically validated against the model, and of course to generate the low-level instructions that would be otherwise written manually.

computer programmingprogrammingdesign patterns
Software Engineering Best Practices @ Nylas
Software Engineering Best Practices @ NylasSoftware Engineering Best Practices @ Nylas
Software Engineering Best Practices @ Nylas

Part of an introductory series given to new hires and interns, this talk is a crash course in design patterns and engineering best practices for new-grads with mostly academic computer science experience. Focuses on the things they don't teach you: naming things, working on a team, optimizing for maintainability.

softwaremaintainabilityeslint
Js tips & tricks
Js tips & tricksJs tips & tricks
Js tips & tricks

This document discusses various JavaScript design patterns and best practices including: - Common design patterns like singleton, factory, decorator, and observer. - Minimizing global variables by declaring variables with a single var statement. - Hoisting and how it provides access to function and variable declarations. - Classical inheritance patterns like using the prototype, renting a constructor, and sharing the prototype. - Defining functions as expressions vs declarations and how hoisting works. - Using immediate functions to provide scope and execute initialization code. - Callbacks and how they are used in asynchronous code.

@gfraiteur
Pattern-Aware Compilers allow for coding at the level of
abstraction of design patterns.
@gfraiteur
Design Pattern Automation is new
© hellraiser
MYTH 1
@gfraiteur
Pattern C# Keyword
Dispose using
Lock lock
Publish-Subscribe event
C# implements several patterns
TRUTH 1
@gfraiteur
But C# does not let you
implement your own patterns.

Recommended for you

Introduction to Design Patterns in Javascript
Introduction to Design Patterns in JavascriptIntroduction to Design Patterns in Javascript
Introduction to Design Patterns in Javascript

This is a very basic introduction to implementing in design patterns in JS in order to properly organize and structure the code.

design patternsjavascript
Guide to Destroying Codebases The Demise of Clever Code
Guide to Destroying Codebases   The Demise of Clever CodeGuide to Destroying Codebases   The Demise of Clever Code
Guide to Destroying Codebases The Demise of Clever Code

Talk on how to make codebases unmaintainable and a nightmare, increasing complexity and stumbling towards the eventually inevitable rewrite

best practicescodemaintainability
10-DesignPatterns.ppt
10-DesignPatterns.ppt10-DesignPatterns.ppt
10-DesignPatterns.ppt

The document discusses several object-oriented design patterns including Iterator, Decorator, Strategy, and Observer providing an overview and examples of each pattern describing how they address common programming problems and their benefits for reusable and flexible code. It also discusses how design patterns were documented in influential books and how they provide solutions to problems that occur frequently in software design through interfaces and classes that can be implemented in many different ways.

design
@gfraiteur
code generators were proved wrong
You can’t automate patterns because…
MYTH 2
@gfraiteur
pattern-aware programming languages
and compilers
we don’t need code generators but
TRUTH 2
@gfraiteur
there are too many skills involved
You can’t automate patterns because…
MYTH 3
@gfraiteur
industrial revolution
Skill scarcity motivated the
TRUTH 3

Recommended for you

Design patterns represent the best practices used by experienced object-orien...
Design patterns represent the best practices used by experienced object-orien...Design patterns represent the best practices used by experienced object-orien...
Design patterns represent the best practices used by experienced object-orien...

Design patterns represent the best practices used by experienced object-oriented software developers

software development
TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!

Slides of the session: TypeScript - the JavaScript developer best friend held at the Web European Conference 2015

typescript
DSL's with Groovy
DSL's with GroovyDSL's with Groovy
DSL's with Groovy

This document discusses using Groovy to create domain-specific languages (DSLs). It explains that DSLs use specialized syntax and grammar to interact with a specific domain. Groovy is well-suited for building DSLs through features like builders, categories, meta-object protocol (MOP), and abstract syntax tree (AST) transformations. Builders allow hierarchical structures to be defined concisely. Categories extend functionality without inheritance. MOP allows dynamic methods and properties. AST transformations hook into the compilation process. The document provides examples of each technique and describes a case study of a Groovy DSL called Grint for integration patterns.

groovydsl
@gfraiteur
Our own industrial revolution:
Making it easier
to build good software
@gfraiteur
1. A history of programming languages and patterns
2. Defining Design Pattern Automation
3.Pattern-Oriented Software
Development
4. Tools for Design Pattern Automation
5. Agile Methodologies and Patterns
6. A last example
7. Q&A
8. Summary
Section
@gfraiteur
they are way too complex general abstract
You can’t automate patterns because…
MYTH 4
@gfraiteur
a normal part of any engineering process
Making abstract things concrete is
TRUTH 4
ConcreteAbstract
Automatable
Non-
Automatable

Recommended for you

Style & Design Principles 02 - Design Patterns
Style & Design Principles 02 - Design PatternsStyle & Design Principles 02 - Design Patterns
Style & Design Principles 02 - Design Patterns

Chapter 02 of the lecture Style & Design Principles taught at SAE Institute Hamburg. Introduction to advanced concepts of object-oriented design, such as delegation, polymorphism, cohesion and coupling, and to behavioral, creational and structural design patterns.

c#software developmentobject-oriented programming
cf.Objective() 2017 - Design patterns - Brad Wood
cf.Objective() 2017 - Design patterns - Brad Woodcf.Objective() 2017 - Design patterns - Brad Wood
cf.Objective() 2017 - Design patterns - Brad Wood

This session covers what programming design patterns are, how they got their start, and reviews common design patterns and antipatterns.

coldfusion cfml design patterns
Online TechTalk  "Patterns in Embedded SW Design"
Online TechTalk  "Patterns in Embedded SW Design"Online TechTalk  "Patterns in Embedded SW Design"
Online TechTalk  "Patterns in Embedded SW Design"

В рамках C/C++/Embedded місяця у GlobalLogic нещодавно відбувся Online TechTalk  "Patterns in Embedded SW Design" Спікер розібрав паттерни на кісточки: від поняття до практичного використання з прикладом проєктного коду. У доповіді спеціаліст розглянув: - Поняття патернів у програмному забезпеченні з акцентом на Embedded розробку. - Основні переваги використання патернів. - Класифікацію патернів для Embedded напрямку, деякі з них було розглянуто. - Було наведено приклад використання на прикладі проєктного коду. Деталі та відео заходу: https://bit.ly/3DaKx7t

embeddedembedded communityc++
@gfraiteur
Pattern-Oriented
Implementation Process
Architecture
Pattern
• Defines Subsystems
Design Pattern
• Define Components
• General problem
• Language-
independent
Implementation
Pattern
• Defines source
artefacts
• Language-specific
• Framework-specific
• Application-specific
• Implementation
guidelines
Source code
• Executable
High Abstraction Zero Abstraction
@gfraiteur
Example: Observer Pattern
1. Vanilla Design Pattern (GoF)
@gfraiteur
Example: Observer Pattern
1
2
3 Call OnPropertyChanged whenever a property has changed.
2. Language-Specific Pattern (C#)
@gfraiteur
• Analyze property-field
dependencies
• Modify all non-const
methods
• Whenever a relevant
field has changed
• When invariants are
valid (after all changes
in the object have been
done)
Example: Observer Pattern
When? How?
3. Application-Specific Pattern (C#)

Recommended for you

10 Ways To Improve Your Code
10 Ways To Improve Your Code10 Ways To Improve Your Code
10 Ways To Improve Your Code

This document summarizes 10 ways to improve code based on a presentation by Neal Ford. The techniques discussed include composing methods to perform single tasks, test-driven development to design through tests, using static analysis tools to find bugs, avoiding singletons, applying the YAGNI principle to only build what is needed, questioning conventions, embracing polyglot programming, learning Java nuances, enforcing the single level of abstraction principle, and considering "anti-objects" that go against object-oriented design. Questions from the audience are then addressed.

programmingjavanet
Going to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific LanguagesGoing to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific Languages

Practical example of implementing and evolving a simple DSL in Groovy, to drive a robot rover on the planet Mars.

groovydsl
Design pattern
Design patternDesign pattern
Design pattern

[1] Design patterns provide flexible and reusable solutions to common software design problems. They improve code quality by avoiding reinventing solutions and allowing knowledge sharing. [2] The Strategy pattern allows algorithms to be changed independently of clients that use them. This decouples classes from specific implementations so one class can support multiple behaviors. [3] Tightly coupled patterns have high dependency between common classes, while loosely coupled patterns connect classes loosely to improve maintainability and reusability. The Abstract Factory and Visitor patterns can be loosely coupled to benefit software quality.

design pattern software quality
@gfraiteur
Example: Observer Pattern
4. Source code
@gfraiteur
NotifyPropertyChanged
with PostSharp
LAB 2
@gfraiteur
1. A history of programming languages and patterns
2. Defining Design Pattern Automation
3. Pattern-Oriented Software Development
4.Tools for Design Pattern
Automation
5. Agile Methodologies and Patterns
6. A last example
7. Q&A
8. Summary
Section
@gfraiteur
Transformation
Verification

Recommended for you

Data Science Accelerator Program
Data Science Accelerator ProgramData Science Accelerator Program
Data Science Accelerator Program

More information, visit: http://www.godatadriven.com/accelerator.html Data scientists aren’t a nice-to-have anymore, they are a must-have. Businesses of all sizes are scooping up this new breed of engineering professional. But how do you find the right one for your business? The Data Science Accelerator Program is a one year program, delivered in Amsterdam by world-class industry practitioners. It provides your aspiring data scientists with intensive on- and off-site instruction, access to an extensive network of speakers and mentors and coaching. The Data Science Accelerator Program helps you assess and radically develop the skills of your data science staff or recruits. Our goal is to deliver you excellent data scientists that help you become a data driven enterprise. The right tools We teach your organisation the proven data science tools. The right hands We are trusted by many industry leading partners. The right experience We've done big data and data science at many clients, we know what the real world is like. The right experts We have a world class selection of lecturers that you will be working with. Vincent D. Warmerdam Jonathan Samoocha Ivo Everts Rogier van der Geer Ron van Weverwijk Giovanni Lanzani The right curriculum We meet twice a month. Once for a lecture, once for a hackathon. Lectures The RStudio stack. The art of simulation. The iPython stack. Linear modelling. Operations research. Nonlinear modelling. Clustering & ensemble methods. Natural language processing. Time series. Visualisation. Scaling to big data. Advanced topics. Hackathons Scrape and mine the internet. Solving multiarmed bandit problems. Webdev with flask and pandas as a backend. Build an automation script for linear models. Build a heuristic tsp solver. Code review your automation for nonlinear models. Build a method that outperforms random forests. Build a markov chain to generate song lyrics. Predict an optimal portfolio for the stock market. Create an interactive d3 app with backend. Start up a spark cluster with large s3 data. You pick! Interested? Ping us here. signal@godatadriven.com

data scienceeducationbig data
Design Patterns
Design PatternsDesign Patterns
Design Patterns

This document discusses design patterns and provides an example of applying the Observer pattern. It begins with an introduction to design patterns and issues in software development. It then explains the Observer pattern, how it is implemented in Java using the Observable and Observer classes, and provides a code example to demonstrate how the pattern can be used with a ConcreteSubject, NameObserver, and PriceObserver classes. The example shows how the observers are notified of changes to the subject.

How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018

I never wrote it; everybody else did! How many times have you waded through an ageing, decaying, tangled forrest of code and wished it would just die? How many times have you heard someone say that what really needs to happen is a complete rewrite? I have heard this many times, and, have uttered that fatal sentence myself. But shouldn’t we love our legacy code? Doesn’t it represent our investment and the hard work of ourselves and our predecessors? Throwing it away is dangerous, because, before we do, we’ll need to work out exactly what it does, and we’ll need to tweeze out that critical business logic nestled in a deeply entangled knot of IF statements. It could take us years to do, and we’ll have to maintain two systems whilst we do it, inevitably adding new features to them both. Yes we get to reimplement using the latest, coolest programming language, instead of an old behemoth, but how long will our new cool language be around, and who will maintain that code, when it itself inevitably turns to legacy? We can throw our arms in the air, complaining and grumbling about how we didn’t write the code, how we would never have written it the way it is, how those that wrote it were lesser programmers, possibly lesser humans themselves, but the code still remains, staring us in the face and hanging around for longer that we could possibly imagine. We can sort it out, we can improve it, we can make it testable, and we can learn to love our legacy code. https://www.youtube.com/watch?v=qRP45l5UugE

software developmentsoftware engineeringtesting
@gfraiteur
Pattern
Automation
Technologies
Pattern
Automation
@gfraiteur
Example:
Richman’s Singleton
• Static validation rules:
• A single constructor
• Constructor never called
• Code transformation:
• Introduce static field
• Introduce static method GetInstance
• Make constructor private
@gfraiteur
[Nemerle.MacroUsage (Nemerle.MacroPhase.BeforeInheritance,
Nemerle.MacroTargets.Class)]
macro Singleton (t : TypeBuilder)
{
def mems = t.GetParsedMembers();
// find constructor, which we will need to call to create instance
def ctor = mems.Filter(fun (x) {
| <[ decl: ..$_ this (..$_) $_ ]> => true
| _ => false
});
match (ctor)
{
| [ <[ decl: ..$_ this (..$parms) $_ ]> as constructor ] => {
// we must prepare expressions for invoking constructor
def invoke_parms = parms.Map(x => <[ $(x.ParsedName : name) ]>);
// first define the field, where a single instance will be stored
t.Define(<[ decl:
private static mutable instance : $(t.ParsedName : name);
]>);
@gfraiteur
// finally, define getter
t.Define (<[ decl:
public static Instance : $(t.ParsedName : name)
{
get
{
// lazy initialization in generated code
when (instance == null)
instance = $(t.ParsedName : name) (..$invoke_parms);
instance;
}
}
]>);
// make sure constructor is protected
constructor.Attributes |= NemerleAttributes.Protected;
| _ => Message.Error ("Singleton design pattern requires exactly one constru
}
}

Recommended for you

Software design and Architecture.pptx
Software design and Architecture.pptxSoftware design and Architecture.pptx
Software design and Architecture.pptx

This document discusses software design patterns. It defines a design pattern as a general reusable solution to common problems in software design. It describes the Gang of Four (GOF) design patterns book, which introduced and popularized design patterns. The GOF patterns are divided into creational, structural, and behavioral categories. Creational patterns deal with object creation. Structural patterns concern class and object composition. Behavioral patterns address communication between objects. Examples are provided for some of the most common patterns.

10 Ways To Improve Your Code( Neal Ford)
10  Ways To  Improve  Your  Code( Neal  Ford)10  Ways To  Improve  Your  Code( Neal  Ford)
10 Ways To Improve Your Code( Neal Ford)

This document discusses 10 ways to improve programming code through practices like composing methods, test-driven development, static analysis, and questioning assumptions. It encourages techniques like short single-purpose methods, writing tests before code, using tools like FindBugs, avoiding unnecessary complexity, and continually learning language nuances. Examples show refactoring code to follow these practices. Resources are provided on related topics like pair programming and anti-object-oriented design.

Advanced Defensive Coding Techniques (with Introduction to Design by Contract)
Advanced Defensive Coding Techniques (with Introduction to Design by Contract)Advanced Defensive Coding Techniques (with Introduction to Design by Contract)
Advanced Defensive Coding Techniques (with Introduction to Design by Contract)

Structured exception handling and defensive programming are the two pillars of robust software. Both pillars fail however when it comes to handling internal faults, those that normally originate in software defects rather than in any external factors. In this webinar, Zoran Horvat demonstrates advanced defensive coding techniques that can bring the quality of your code to an entirely new level. Watch the webinar and learn: When throwing an exception is the right thing to do Why exceptions and defensive coding cannot be applied to recover from defects How to handle situations when internal software defect is causing the fault How to treat fault detection as an orthogonal concern to normal operation The webinar recording can be found here: http://www.postsharp.net/blog/post/webinar-recording-defensive-programming

programmingc#.net
@gfraiteur
[Singleton]
class LoadBalancer
{
// Details omitted
}
public class SingletonApp
{
public static Main() : void
{
def b1 = LoadBalancer.Instance;
def b2 = LoadBalancer.Instance;
// Same instance?
when ((b1 : object == b2) && (b2 : object == b3) && (b3 : object == b4))
Console.WriteLine( "Same instance" );
// Do the load balancing
Console.WriteLine( b1.Server );
Console.WriteLine( b2.Server );
}
}
@gfraiteur
Macro-enabled .NET languages
• Nemerle
• Scala
• Boo
@gfraiteur
Poorman’s Pattern Automation:
Static Analysis
Pattern
Automation
@gfraiteur
Example:
Poorman’s Singleton
• Static validation rules:
• Static private readonly field named
‘singleton’, whose type is the current type.
• Static public method GetInstance() whose return
type is the current type, returns field ‘singleton’.
• Class constructors are private.

Recommended for you

Applying Object Composition to Build Rich Domain Models
Applying Object Composition to Build Rich Domain ModelsApplying Object Composition to Build Rich Domain Models
Applying Object Composition to Build Rich Domain Models

Modern business applications rely heavily on rich domain classes, which in turn rely heavily on polymorphic execution, code reuse and similar concepts. How can we extend rich domain classes to support complex requirements? In this presentation, Zoran Horvat will show why an object composition approach is favored over class inheritance when it comes to code reuse and polymorphism. The presentation covers: How class inheritance can lead to combinatorial explosion of classes What the limitations of object composition are What design patterns help consume composed objects Techniques for creating rich features on composed objects Watch the webinar recording here: http://www.postsharp.net/blog/post/webinar-recording-object-composition

programmingsoftware developmentdesign patterns
Performance is a Feature!
Performance is a Feature!Performance is a Feature!
Performance is a Feature!

Starting with the premise that "Performance is a Feature", Matt Warren will show you how to measure, what to measure and how to get the best performance from your .NET code. We will look at real-world examples from the Roslyn code-base and StackOverflow (the product), including how the .NET Garbage Collector needs to be tamed! The presentation covers: Why we should care about performance Pitfalls to avoid when measuring performance How the .NET Garbage Collector can hurt performance Real-world performance lessons from open-source code The webinar recording can be found here: http://www.postsharp.net/blog/post/webinar-recording-performance-is-a-feature

performancec#software development
Building Better Architecture with UX-Driven Design
Building Better Architecture with UX-Driven DesignBuilding Better Architecture with UX-Driven Design
Building Better Architecture with UX-Driven Design

How do you avoid the dreaded "this is not what we asked for" and ensure customer satisfaction when building a new system? In this webinar, Dino Esposito demonstrates a top-down methodology, sometimes mistaken for plain common sense and often boldly ignored, called UX-Driven Design (UXDD). UXDD means coming to a visual agreement with customers by using wireframing tools to iterate on sketches of the new system before building it. Then, rather than building the system from the data model, you proceed in a top-down fashion instead. The resulting system may be slow or even inefficient but it will never be the “wrong” system! In addition, UXDD leads to clarity on a few of today’s most popular patterns that are sometimes difficult to understand like CQRS and Event Sourcing. The presentation covers: An introduction to Wireframing tools Proven ways to save on post-first deployment costs Insights into better customer relationships Better focus on development without 'analysis paralysis' You can watch the webinar recording here: http://www.postsharp.net/blog/post/webinar-recording-ux-driven-design

designprogrammingsoftware development
@gfraiteur
Singleton
with Architecture Unit Tests
LAB 3
@gfraiteur
• Limitations
• Inadequate UI and
error reporting
• Limited reflection
API
• Alternatives
• FxCop
• PostSharp
Architecture
Framework
Architecture Unit Tests
@gfraiteur
1. A history of programming languages and patterns
2. Defining Design Pattern Automation
3. Pattern-Oriented Software Development
4. Tools for Design Pattern Automation
5. Agile Methodologies
and Patterns
6. A last example
7. Q&A
8. Summary
Section
@gfraiteur
All design patterns are found in books
MYTH 5

Recommended for you

Solving Localization Challenges with Design Pattern Automation
Solving Localization Challenges with Design Pattern AutomationSolving Localization Challenges with Design Pattern Automation
Solving Localization Challenges with Design Pattern Automation

Localization is crucial for reaching out to a global audience, however, it’s often an afterthought for most developers and non-trivial to implement. Traditionally, game developers have outsourced this task due to its time consuming nature. But it doesn’t have to be this way. Yan Cui will show you a simple technique his team used at GameSys which allowed them to localize an entire story-driven, episodic MMORPG (with over 5000 items and 1500 quests) in under an hour of work and 50 lines of code, with the help of PostSharp.

localization
Applying a Methodical Approach to Website Performance
Applying a Methodical Approach to Website PerformanceApplying a Methodical Approach to Website Performance
Applying a Methodical Approach to Website Performance

When addressing website performance issues, developers typically jump to conclusions, focusing on the perceived causes rather than uncovering the real causes through research. Mitchel Sellers will show you how to approach website performance issues with a level of consistency that ensures they're properly identified and resolved so you'll avoid jumping to conclusions in the future. You can watch the webinar recording here: https://www.postsharp.net/documentation/video?id=190066128

performancewebsite
10 Reasons You MUST Consider Pattern-Aware Programming
10 Reasons You MUST Consider Pattern-Aware Programming10 Reasons You MUST Consider Pattern-Aware Programming
10 Reasons You MUST Consider Pattern-Aware Programming

Developers spend up to 20% of their time writing repetitive code that machines could generate more reliably. This presentation explores the problem of duplicated source code that stems from manual implementation of patterns and reveals how to automate the boring side of programming and get a 19x ROI. The presentation provides insight into: - the problem of manual implementation of patterns, resulting in boilerplate code - the cost of boilerplate for companies - existing technologies for pattern automation - the key reasons to consider pattern-aware compiler extensions The white paper was written for CTOs, software architects and senior developers in software-driven organizations—specifically in financial, insurance, healthcare, energy and IT industries that typically write a lot of repetitive code.

design patterns
@gfraiteur
spinning into
Emergent
Design
@gfraiteur
Quality
Eroding Design
Quality
Distance from design
@gfraiteur
Quality
Emergent Design
Quality
Knowledge
@gfraiteur
Iterative Design
• Unit Tests
• Load Tests
• Integration Tests
• Project
• Team
• Design
• Abstract
• Design
• Refactor
• Implement
• Time
• User Stories
Planning Development
TestingReview

Recommended for you

Multithreading Fundamentals
Multithreading FundamentalsMultithreading Fundamentals
Multithreading Fundamentals

Everybody knows the lock keyword, but how does it implemented? What are its performance characteristics. Gael Fraiteur scratches the surface of multithreaded programming in .NET and goes deep through the Windows Kernel down to CPU microarchitecture.

computer programmingprogrammingmultithreading
Produce Cleaner Code with Aspect-Oriented Programming
Produce Cleaner Code with Aspect-Oriented ProgrammingProduce Cleaner Code with Aspect-Oriented Programming
Produce Cleaner Code with Aspect-Oriented Programming

This document introduces aspect-oriented programming (AOP) and how it can be used to separate cross-cutting concerns from core business logic. It discusses how AOP frameworks like PostSharp allow aspects to modularize features like logging, transactions, and security. The document provides an example of how a rental booking method grows over time to include these concerns. It compares different AOP frameworks and concludes that PostSharp allows building aspects with strong robustness while minimizing code invasiveness.

aopaosdc
How to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptxHow to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptx

How do we build an IoT product, and make it profitable? Talk from the IoT meetup in March 2024. https://www.meetup.com/iot-sweden/events/299487375/

iot
@gfraiteur
Agile & Continuous Improvement
Design
Refactor
Implement
new stuff
Learn
Knowledge
Patterns
Language
Requirements
Code
@gfraiteur
We’re a part of a whole
Software
Engineering
Discipline
Company /
Personal
Know-How
Project
Engineering
Discipline
@gfraiteurHolašovice, Czech Republic
Patterns emerge naturally from iterative
design processes.
TRUTH 5
@gfraiteur
Example of application-specific pattern:
Business Rule Pattern
• For any class derived from BusinessRule:
• Name ends with “BusinessRule”
• No public constructor
• Has nested class named “Factory”
• Has parameterless public constructor
• Annotated with
[Export(typeof(IBusinessRuleFactory))]

Recommended for you

What’s New in Teams Calling, Meetings and Devices May 2024
What’s New in Teams Calling, Meetings and Devices May 2024What’s New in Teams Calling, Meetings and Devices May 2024
What’s New in Teams Calling, Meetings and Devices May 2024

This is a powerpoint that features Microsoft Teams Devices and everything that is new including updates to its software and devices for May 2024

microsoft teamsmicrosoft
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-InTrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In

Six months into 2024, and it is clear the privacy ecosystem takes no days off!! Regulators continue to implement and enforce new regulations, businesses strive to meet requirements, and technology advances like AI have privacy professionals scratching their heads about managing risk. What can we learn about the first six months of data privacy trends and events in 2024? How should this inform your privacy program management for the rest of the year? Join TrustArc, Goodwin, and Snyk privacy experts as they discuss the changes we’ve seen in the first half of 2024 and gain insight into the concrete, actionable steps you can take to up-level your privacy program in the second half of the year. This webinar will review: - Key changes to privacy regulations in 2024 - Key themes in privacy and data governance in 2024 - How to maximize your privacy program in the second half of 2024

data privacyprivacy complianceai
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation

Java Servlet programs

@gfraiteur
1. A history of programming languages and patterns
2. Defining Design Pattern Automation
3. Pattern-Oriented Software Development
4. Tools for Design Pattern Automation
5. Agile Methodologies and Patterns
6. A last example
7. Q&A
8. Summary
Section
@gfraiteur
Example:
Reader-Writer Synchronized Object
• Code Generation
• Introduce interface IReaderWriterSynchronized
• [ReaderLock], [WriterLock] executes the method with
the right locking level
• Code Verification
• All fields must be private
• Cannot access field without proper lock
@gfraiteur
ReaderWriterSynchronized
with PostSharp
LAB 4
@gfraiteur
Q&A
Gael Fraiteur
gael@postsharp.net
@gfraiteur

Recommended for you

Measuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at TwitterMeasuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at Twitter

Widya Salim and Victor Ma will outline the causal impact analysis, framework, and key learnings used to quantify the impact of reducing Twitter's network latency.

RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptxRPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx

Your comprehensive guide to RPA in healthcare for 2024. Explore the benefits, use cases, and emerging trends of robotic process automation. Understand the challenges and prepare for the future of healthcare automation

rpa in healthcarerpa in healthcare usarpa in healthcare industry
Password Rotation in 2024 is still Relevant
Password Rotation in 2024 is still RelevantPassword Rotation in 2024 is still Relevant
Password Rotation in 2024 is still Relevant

Password Rotation in 2024 is still Relevant

passwordmanagementrotation
@gfraiteurCopyright © by Arild Vågen
Summary
• Compilers must do more to raise abstraction level
• Patterns stem from continuous improvement
BETTER SOFTWARE THROUGH SIMPLER CODE

More Related Content

What's hot

Annotations in PHP, They Exist.
Annotations in PHP, They Exist.Annotations in PHP, They Exist.
Annotations in PHP, They Exist.
Rafael Dohms
 
F# and the DLR
F# and the DLRF# and the DLR
F# and the DLR
Richard Minerich
 
F# for Scala developers
F# for Scala developersF# for Scala developers
F# for Scala developers
Alfonso Garcia-Caro
 
PHP Annotations: They exist! - JetBrains Webinar
 PHP Annotations: They exist! - JetBrains Webinar PHP Annotations: They exist! - JetBrains Webinar
PHP Annotations: They exist! - JetBrains Webinar
Rafael Dohms
 
(4) c sharp introduction_object_orientation_part_i
(4) c sharp introduction_object_orientation_part_i(4) c sharp introduction_object_orientation_part_i
(4) c sharp introduction_object_orientation_part_i
Nico Ludwig
 
Model-Driven Engineering: a bottom-up approach based on meta-programming (ELA...
Model-Driven Engineering: a bottom-up approach based on meta-programming (ELA...Model-Driven Engineering: a bottom-up approach based on meta-programming (ELA...
Model-Driven Engineering: a bottom-up approach based on meta-programming (ELA...
Jean-Michel Bruel
 
Presentation
PresentationPresentation
Presentation
pnathan_logos
 
Executable specifications for xtext
Executable specifications for xtextExecutable specifications for xtext
Executable specifications for xtext
meysholdt
 
The Ring programming language version 1.6 book - Part 181 of 189
The Ring programming language version 1.6 book - Part 181 of 189The Ring programming language version 1.6 book - Part 181 of 189
The Ring programming language version 1.6 book - Part 181 of 189
Mahmoud Samir Fayed
 
Coding standard
Coding standardCoding standard
Coding standard
FAROOK Samath
 
New c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNew c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_iv
Nico Ludwig
 

What's hot (11)

Annotations in PHP, They Exist.
Annotations in PHP, They Exist.Annotations in PHP, They Exist.
Annotations in PHP, They Exist.
 
F# and the DLR
F# and the DLRF# and the DLR
F# and the DLR
 
F# for Scala developers
F# for Scala developersF# for Scala developers
F# for Scala developers
 
PHP Annotations: They exist! - JetBrains Webinar
 PHP Annotations: They exist! - JetBrains Webinar PHP Annotations: They exist! - JetBrains Webinar
PHP Annotations: They exist! - JetBrains Webinar
 
(4) c sharp introduction_object_orientation_part_i
(4) c sharp introduction_object_orientation_part_i(4) c sharp introduction_object_orientation_part_i
(4) c sharp introduction_object_orientation_part_i
 
Model-Driven Engineering: a bottom-up approach based on meta-programming (ELA...
Model-Driven Engineering: a bottom-up approach based on meta-programming (ELA...Model-Driven Engineering: a bottom-up approach based on meta-programming (ELA...
Model-Driven Engineering: a bottom-up approach based on meta-programming (ELA...
 
Presentation
PresentationPresentation
Presentation
 
Executable specifications for xtext
Executable specifications for xtextExecutable specifications for xtext
Executable specifications for xtext
 
The Ring programming language version 1.6 book - Part 181 of 189
The Ring programming language version 1.6 book - Part 181 of 189The Ring programming language version 1.6 book - Part 181 of 189
The Ring programming language version 1.6 book - Part 181 of 189
 
Coding standard
Coding standardCoding standard
Coding standard
 
New c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_ivNew c sharp3_features_(linq)_part_iv
New c sharp3_features_(linq)_part_iv
 

Viewers also liked

Bab satu
Bab satuBab satu
Bab satu
Aida Ramlan II
 
Functional Leap of Faith (Keynote at JDay Lviv 2014)
Functional Leap of Faith (Keynote at JDay Lviv 2014)Functional Leap of Faith (Keynote at JDay Lviv 2014)
Functional Leap of Faith (Keynote at JDay Lviv 2014)
Tomer Gabel
 
Chapter 4 computer language
Chapter 4 computer languageChapter 4 computer language
Chapter 4 computer language
Azimjon Khamdamov
 
Maglev-A different way to develop with Ruby
Maglev-A different way to develop with RubyMaglev-A different way to develop with Ruby
Maglev-A different way to develop with Ruby
Hernan Wilkinson
 
Avoiding to Reinvent the flat tire
Avoiding to Reinvent the flat tireAvoiding to Reinvent the flat tire
Avoiding to Reinvent the flat tire
Hernan Wilkinson
 
Design Pattern From Java To Ruby
Design Pattern    From Java To RubyDesign Pattern    From Java To Ruby
Design Pattern From Java To Ruby
Robbin Fan
 
History of computer language
History of computer languageHistory of computer language
History of computer language
Claire Punkcor
 

Viewers also liked (7)

Bab satu
Bab satuBab satu
Bab satu
 
Functional Leap of Faith (Keynote at JDay Lviv 2014)
Functional Leap of Faith (Keynote at JDay Lviv 2014)Functional Leap of Faith (Keynote at JDay Lviv 2014)
Functional Leap of Faith (Keynote at JDay Lviv 2014)
 
Chapter 4 computer language
Chapter 4 computer languageChapter 4 computer language
Chapter 4 computer language
 
Maglev-A different way to develop with Ruby
Maglev-A different way to develop with RubyMaglev-A different way to develop with Ruby
Maglev-A different way to develop with Ruby
 
Avoiding to Reinvent the flat tire
Avoiding to Reinvent the flat tireAvoiding to Reinvent the flat tire
Avoiding to Reinvent the flat tire
 
Design Pattern From Java To Ruby
Design Pattern    From Java To RubyDesign Pattern    From Java To Ruby
Design Pattern From Java To Ruby
 
History of computer language
History of computer languageHistory of computer language
History of computer language
 

Similar to Design Pattern Automation

Multithreading Design Patterns
Multithreading Design PatternsMultithreading Design Patterns
Multithreading Design Patterns
PostSharp Technologies
 
Software Engineering Best Practices @ Nylas
Software Engineering Best Practices @ NylasSoftware Engineering Best Practices @ Nylas
Software Engineering Best Practices @ Nylas
Ben Gotow
 
Js tips & tricks
Js tips & tricksJs tips & tricks
Js tips & tricks
Asia Tyshchenko
 
Introduction to Design Patterns in Javascript
Introduction to Design Patterns in JavascriptIntroduction to Design Patterns in Javascript
Introduction to Design Patterns in Javascript
Santhosh Kumar Srinivasan
 
Guide to Destroying Codebases The Demise of Clever Code
Guide to Destroying Codebases   The Demise of Clever CodeGuide to Destroying Codebases   The Demise of Clever Code
Guide to Destroying Codebases The Demise of Clever Code
Gabor Varadi
 
10-DesignPatterns.ppt
10-DesignPatterns.ppt10-DesignPatterns.ppt
10-DesignPatterns.ppt
TAGADPALLEWARPARTHVA
 
Design patterns represent the best practices used by experienced object-orien...
Design patterns represent the best practices used by experienced object-orien...Design patterns represent the best practices used by experienced object-orien...
Design patterns represent the best practices used by experienced object-orien...
nevanak569
 
TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!
Alessandro Giorgetti
 
DSL's with Groovy
DSL's with GroovyDSL's with Groovy
DSL's with Groovy
paulbowler
 
Style & Design Principles 02 - Design Patterns
Style & Design Principles 02 - Design PatternsStyle & Design Principles 02 - Design Patterns
Style & Design Principles 02 - Design Patterns
Nick Pruehs
 
cf.Objective() 2017 - Design patterns - Brad Wood
cf.Objective() 2017 - Design patterns - Brad Woodcf.Objective() 2017 - Design patterns - Brad Wood
cf.Objective() 2017 - Design patterns - Brad Wood
Ortus Solutions, Corp
 
Online TechTalk  "Patterns in Embedded SW Design"
Online TechTalk  "Patterns in Embedded SW Design"Online TechTalk  "Patterns in Embedded SW Design"
Online TechTalk  "Patterns in Embedded SW Design"
GlobalLogic Ukraine
 
10 Ways To Improve Your Code
10 Ways To Improve Your Code10 Ways To Improve Your Code
10 Ways To Improve Your Code
ConSanFrancisco123
 
Going to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific LanguagesGoing to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific Languages
Guillaume Laforge
 
Design pattern
Design patternDesign pattern
Design pattern
Omar Isaid
 
Data Science Accelerator Program
Data Science Accelerator ProgramData Science Accelerator Program
Data Science Accelerator Program
GoDataDriven
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
Srikrishnan Suresh
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
Mike Harris
 
Software design and Architecture.pptx
Software design and Architecture.pptxSoftware design and Architecture.pptx
Software design and Architecture.pptx
SHAHZAIBABBAS13
 
10 Ways To Improve Your Code( Neal Ford)
10  Ways To  Improve  Your  Code( Neal  Ford)10  Ways To  Improve  Your  Code( Neal  Ford)
10 Ways To Improve Your Code( Neal Ford)
guestebde
 

Similar to Design Pattern Automation (20)

Multithreading Design Patterns
Multithreading Design PatternsMultithreading Design Patterns
Multithreading Design Patterns
 
Software Engineering Best Practices @ Nylas
Software Engineering Best Practices @ NylasSoftware Engineering Best Practices @ Nylas
Software Engineering Best Practices @ Nylas
 
Js tips & tricks
Js tips & tricksJs tips & tricks
Js tips & tricks
 
Introduction to Design Patterns in Javascript
Introduction to Design Patterns in JavascriptIntroduction to Design Patterns in Javascript
Introduction to Design Patterns in Javascript
 
Guide to Destroying Codebases The Demise of Clever Code
Guide to Destroying Codebases   The Demise of Clever CodeGuide to Destroying Codebases   The Demise of Clever Code
Guide to Destroying Codebases The Demise of Clever Code
 
10-DesignPatterns.ppt
10-DesignPatterns.ppt10-DesignPatterns.ppt
10-DesignPatterns.ppt
 
Design patterns represent the best practices used by experienced object-orien...
Design patterns represent the best practices used by experienced object-orien...Design patterns represent the best practices used by experienced object-orien...
Design patterns represent the best practices used by experienced object-orien...
 
TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!TypeScript . the JavaScript developer best friend!
TypeScript . the JavaScript developer best friend!
 
DSL's with Groovy
DSL's with GroovyDSL's with Groovy
DSL's with Groovy
 
Style & Design Principles 02 - Design Patterns
Style & Design Principles 02 - Design PatternsStyle & Design Principles 02 - Design Patterns
Style & Design Principles 02 - Design Patterns
 
cf.Objective() 2017 - Design patterns - Brad Wood
cf.Objective() 2017 - Design patterns - Brad Woodcf.Objective() 2017 - Design patterns - Brad Wood
cf.Objective() 2017 - Design patterns - Brad Wood
 
Online TechTalk  "Patterns in Embedded SW Design"
Online TechTalk  "Patterns in Embedded SW Design"Online TechTalk  "Patterns in Embedded SW Design"
Online TechTalk  "Patterns in Embedded SW Design"
 
10 Ways To Improve Your Code
10 Ways To Improve Your Code10 Ways To Improve Your Code
10 Ways To Improve Your Code
 
Going to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific LanguagesGoing to Mars with Groovy Domain-Specific Languages
Going to Mars with Groovy Domain-Specific Languages
 
Design pattern
Design patternDesign pattern
Design pattern
 
Data Science Accelerator Program
Data Science Accelerator ProgramData Science Accelerator Program
Data Science Accelerator Program
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
 
Software design and Architecture.pptx
Software design and Architecture.pptxSoftware design and Architecture.pptx
Software design and Architecture.pptx
 
10 Ways To Improve Your Code( Neal Ford)
10  Ways To  Improve  Your  Code( Neal  Ford)10  Ways To  Improve  Your  Code( Neal  Ford)
10 Ways To Improve Your Code( Neal Ford)
 

More from PostSharp Technologies

Advanced Defensive Coding Techniques (with Introduction to Design by Contract)
Advanced Defensive Coding Techniques (with Introduction to Design by Contract)Advanced Defensive Coding Techniques (with Introduction to Design by Contract)
Advanced Defensive Coding Techniques (with Introduction to Design by Contract)
PostSharp Technologies
 
Applying Object Composition to Build Rich Domain Models
Applying Object Composition to Build Rich Domain ModelsApplying Object Composition to Build Rich Domain Models
Applying Object Composition to Build Rich Domain Models
PostSharp Technologies
 
Performance is a Feature!
Performance is a Feature!Performance is a Feature!
Performance is a Feature!
PostSharp Technologies
 
Building Better Architecture with UX-Driven Design
Building Better Architecture with UX-Driven DesignBuilding Better Architecture with UX-Driven Design
Building Better Architecture with UX-Driven Design
PostSharp Technologies
 
Solving Localization Challenges with Design Pattern Automation
Solving Localization Challenges with Design Pattern AutomationSolving Localization Challenges with Design Pattern Automation
Solving Localization Challenges with Design Pattern Automation
PostSharp Technologies
 
Applying a Methodical Approach to Website Performance
Applying a Methodical Approach to Website PerformanceApplying a Methodical Approach to Website Performance
Applying a Methodical Approach to Website Performance
PostSharp Technologies
 
10 Reasons You MUST Consider Pattern-Aware Programming
10 Reasons You MUST Consider Pattern-Aware Programming10 Reasons You MUST Consider Pattern-Aware Programming
10 Reasons You MUST Consider Pattern-Aware Programming
PostSharp Technologies
 
Multithreading Fundamentals
Multithreading FundamentalsMultithreading Fundamentals
Multithreading Fundamentals
PostSharp Technologies
 
Produce Cleaner Code with Aspect-Oriented Programming
Produce Cleaner Code with Aspect-Oriented ProgrammingProduce Cleaner Code with Aspect-Oriented Programming
Produce Cleaner Code with Aspect-Oriented Programming
PostSharp Technologies
 

More from PostSharp Technologies (9)

Advanced Defensive Coding Techniques (with Introduction to Design by Contract)
Advanced Defensive Coding Techniques (with Introduction to Design by Contract)Advanced Defensive Coding Techniques (with Introduction to Design by Contract)
Advanced Defensive Coding Techniques (with Introduction to Design by Contract)
 
Applying Object Composition to Build Rich Domain Models
Applying Object Composition to Build Rich Domain ModelsApplying Object Composition to Build Rich Domain Models
Applying Object Composition to Build Rich Domain Models
 
Performance is a Feature!
Performance is a Feature!Performance is a Feature!
Performance is a Feature!
 
Building Better Architecture with UX-Driven Design
Building Better Architecture with UX-Driven DesignBuilding Better Architecture with UX-Driven Design
Building Better Architecture with UX-Driven Design
 
Solving Localization Challenges with Design Pattern Automation
Solving Localization Challenges with Design Pattern AutomationSolving Localization Challenges with Design Pattern Automation
Solving Localization Challenges with Design Pattern Automation
 
Applying a Methodical Approach to Website Performance
Applying a Methodical Approach to Website PerformanceApplying a Methodical Approach to Website Performance
Applying a Methodical Approach to Website Performance
 
10 Reasons You MUST Consider Pattern-Aware Programming
10 Reasons You MUST Consider Pattern-Aware Programming10 Reasons You MUST Consider Pattern-Aware Programming
10 Reasons You MUST Consider Pattern-Aware Programming
 
Multithreading Fundamentals
Multithreading FundamentalsMultithreading Fundamentals
Multithreading Fundamentals
 
Produce Cleaner Code with Aspect-Oriented Programming
Produce Cleaner Code with Aspect-Oriented ProgrammingProduce Cleaner Code with Aspect-Oriented Programming
Produce Cleaner Code with Aspect-Oriented Programming
 

Recently uploaded

How to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptxHow to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptx
Adam Dunkels
 
What’s New in Teams Calling, Meetings and Devices May 2024
What’s New in Teams Calling, Meetings and Devices May 2024What’s New in Teams Calling, Meetings and Devices May 2024
What’s New in Teams Calling, Meetings and Devices May 2024
Stephanie Beckett
 
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-InTrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc
 
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation
shanthidl1
 
Measuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at TwitterMeasuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at Twitter
ScyllaDB
 
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptxRPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
SynapseIndia
 
Password Rotation in 2024 is still Relevant
Password Rotation in 2024 is still RelevantPassword Rotation in 2024 is still Relevant
Password Rotation in 2024 is still Relevant
Bert Blevins
 
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsScaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Mydbops
 
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdfINDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
jackson110191
 
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Erasmo Purificato
 
Observability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetryObservability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetry
Eric D. Schabell
 
UiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs ConferenceUiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs Conference
UiPathCommunity
 
Quality Patents: Patents That Stand the Test of Time
Quality Patents: Patents That Stand the Test of TimeQuality Patents: Patents That Stand the Test of Time
Quality Patents: Patents That Stand the Test of Time
Aurora Consulting
 
The Rise of Supernetwork Data Intensive Computing
The Rise of Supernetwork Data Intensive ComputingThe Rise of Supernetwork Data Intensive Computing
The Rise of Supernetwork Data Intensive Computing
Larry Smarr
 
20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf
Sally Laouacheria
 
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdfBT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
Neo4j
 
The Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU CampusesThe Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU Campuses
Larry Smarr
 
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly DetectionAdvanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Bert Blevins
 
7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf
Enterprise Wired
 
20240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 202420240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 2024
Matthew Sinclair
 

Recently uploaded (20)

How to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptxHow to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptx
 
What’s New in Teams Calling, Meetings and Devices May 2024
What’s New in Teams Calling, Meetings and Devices May 2024What’s New in Teams Calling, Meetings and Devices May 2024
What’s New in Teams Calling, Meetings and Devices May 2024
 
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-InTrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
TrustArc Webinar - 2024 Data Privacy Trends: A Mid-Year Check-In
 
Cookies program to display the information though cookie creation
Cookies program to display the information though cookie creationCookies program to display the information though cookie creation
Cookies program to display the information though cookie creation
 
Measuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at TwitterMeasuring the Impact of Network Latency at Twitter
Measuring the Impact of Network Latency at Twitter
 
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptxRPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
 
Password Rotation in 2024 is still Relevant
Password Rotation in 2024 is still RelevantPassword Rotation in 2024 is still Relevant
Password Rotation in 2024 is still Relevant
 
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - MydbopsScaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
Scaling Connections in PostgreSQL Postgres Bangalore(PGBLR) Meetup-2 - Mydbops
 
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdfINDIAN AIR FORCE FIGHTER PLANES LIST.pdf
INDIAN AIR FORCE FIGHTER PLANES LIST.pdf
 
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
Paradigm Shifts in User Modeling: A Journey from Historical Foundations to Em...
 
Observability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetryObservability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetry
 
UiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs ConferenceUiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs Conference
 
Quality Patents: Patents That Stand the Test of Time
Quality Patents: Patents That Stand the Test of TimeQuality Patents: Patents That Stand the Test of Time
Quality Patents: Patents That Stand the Test of Time
 
The Rise of Supernetwork Data Intensive Computing
The Rise of Supernetwork Data Intensive ComputingThe Rise of Supernetwork Data Intensive Computing
The Rise of Supernetwork Data Intensive Computing
 
20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf20240702 Présentation Plateforme GenAI.pdf
20240702 Présentation Plateforme GenAI.pdf
 
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdfBT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
 
The Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU CampusesThe Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU Campuses
 
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly DetectionAdvanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
 
7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf7 Most Powerful Solar Storms in the History of Earth.pdf
7 Most Powerful Solar Storms in the History of Earth.pdf
 
20240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 202420240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 2024
 

Design Pattern Automation

Editor's Notes

  1. First I would like to thank you all for being present here today. I appreciate the time you are spending here. Imagine the total opportunity cost of this couple of hours we will be spending here together – if we all billed our standard rate. Obviously, I would like to serve you during that time. And I don’t only want to serve you, but the larger community too. Today, I would like to serve by planting a seed. An idea that can grow or perish, depending on you. But if we allow the seed to grow, together, we are going to improve the software development industry. We are going to make it easier to build good software. Make it easier to build good software. This idea is to change the way we think about design patterns.
  2. Good morning! My name is Gael Fraiteur. You may think I have a weird accent and even think I am French, but actually I was grown in Belgium and have lived in Czech Republic for the last 12 years.(it’s wonderful being here in the US. Appreciate you take time outside of working hours to improve your skills and the profession. Not everybody does that and there’re many(?) here in the US. I’ll like to thank you guys for being what you are and doing what you do).When I was 15, that was 20 years ago, my English teacher came to me and asked whether I would be skilled enough to manage students’ test results and generate school reports. I said yes, although today I know I was not, and spent the largest part of the summer coding a client-server application in PowerBuilder – an amazing development environment. I have been coding for 4 years at that time, several hours per day, but my previous programs were mere “hacking”. So from a technical point of view, I was prepared. What was really new for me was to build a technology for real users, not for IT specialists. My first version was basically a set of table editors based on the relational database model. With time, I understood that the user interface of a technology should be as close as possible to the way users think and work, and not close to the platform it is built on (a relational database).Nine years ago I started another project: PostSharp. It was a small aspect-oriented framework for Microsoft .NET. It was not the first AOP framework, but I was very fortunate that the community let the seed grow and it became the most popular. The reason of this success, I think, is that I applied the lesson learned years before: the user interface of a technology should be as close as possible to the way users think and work. But this time, the user interface was PostSharp’s public API.The same principle applies to the design of programming languages. And I believe that today, if we want to get programming languages closer to the way human think, we need to look in the direction of patterns. I would like to communicate this vision to you in this talk.
  3. Three years ago, PostSharp outgrew my capacity to maintain it as a free open-source project and, out of necessity, became a commercial product. In an industry dominated by open source and big platform vendors, to make a living from development tools is extraordinarily difficult. We at PostSharp Technologies have been fortunate enough to succeed in this endeavor. We are grateful for the trust we receive from our customers – from the one-man shop to the largest corporations.This remark should also serve as a disclaimer that this talk shall undoubted be biased by my very source of revenues.However, my commitment to you in this talk is to share the vision which motivates us day after day. This vision is much larger than our product itself, and you can implement it with other tools, perhaps less appropriate – and, hopefully we will be able to spark an idea that will influence the design of future language and compilers.
  4. Programming for the UNIVAC FAC-TRONIC system, 1935 by Remington Rand inchttp://bitsavers.informatik.uni-stuttgart.de/pdf/univac/univac1/UNIVAC_Programming_Jan53.pdf
  5. http://en.wikipedia.org/wiki/File:FortranCardPROJ039.agr.jpg
  6. LISP 1.5 Programmer’s Manual
  7. LISP 1.5 Programmer’s Manual
  8. http://www.flickr.com/photos/62405357@N03/8519808328To bridge the gap between the way human think and how machine work.Both humans and machines have limitations.At the beginning there was assembly language and punch cards, then symbolic memory and procedural languages.
  9. In his book “the timeless way of building”, Christopher Alexander asks the question:How is it possible that any simple farmer could make a house, a thousand times more beautiful than all the struggling architects of the last fifty years could do?Answer:Shared knowledge, and the knowledge was in the languageIncremental process, centuries of experienceVernacular architecture (folk architecture)http://whc.unesco.org/en/list/861http://www.holasovice.eu/fotogalerie-1/holasovice/
  10. What is a pattern?RepetitionResolution of forcesSelf-sustainingCommonality / variability -&gt; All humans are equal but some are more equal than othershttp://www.flickr.com/photos/docman/1516309490http://en.wikipedia.org/wiki/Pando_(tree)Pando (Latin for &quot;I spread&quot;), also known as The Trembling Giant,[1][2] is a clonal colony of a single male quaking aspen (Populustremuloides) determined to be a single living organism by identical genetic markers[3] and one massive underground root system. The plant is estimated to weigh collectively 6,000,000 kg (6,600 short tons),[4] making it the heaviest known organism.[5] The root system of Pando, at an estimated 80,000 years old, is among the oldest known living organisms.[6]Pando is located in the Fishlake National Forest, near Fish Lake at the western edge of the Colorado Plateau in South-central Utah.
  11. http://www.flickr.com/photos/stijnnieuwendijk/3098445189
  12. http://www.basiccarpentrytechniques.com/Carpentry%20for%20Boys/Carpentry%20For%20Boys1.htmlCARPENTRY FOR BOYSWITH 250 ORIGINAL ILLUSTRATIONSBy J. S. ZERBE, M.E.Copyright, 1914, byTHE NEW YORK BOOK COMPANY
  13. There are still some patterns in objects that we are not able to represent in a programming language
  14. http://www.flickr.com/photos/abstractstv/4358678510
  15. http://www.flickr.com/photos/drewmaughan/7122608959
  16. Before as after the industrial revolution, talent is the rare commodity. We want talented people to have a maximal output.The industrial revolution is not just about technology, this is also a revolution in social organization, through division of labor, specialization of professions, specialized schools, … There are no fewer skills involved in industrial shoes production – there are actually much more. But the production process makes better use of these skills.
  17. Better technology triggers better output per worker.Our parentsWhat is going to be the contribution of our generation to the software industry? How is it going to become more of an industry and less of an art, to achieve the same productivity enhancements that are required to meet increasing demand?&apos;Increase the speed of agricultural mechanisation, to struggle for the modernization of agriculture. Printno. 8027.6288.
  18. http://www.flickr.com/photos/abstractstv/4358678510Abstract means much variability and little commonality
  19. http://en.wikipedia.org/wiki/Observer_pattern
  20. http://www.flickr.com/photos/liz/8712469709Caïn by Henri Vidal, Tuileries Garden, Paris, 1896
  21. http://nemerle.org/wiki/index.php?title=Design_patterns
  22. http://www.flickr.com/photos/abstractstv/4358678510Abstract means much variability and little commonality
  23. Knowledge increases. With continuous refactoring, a better design is emerging.
  24. Knowledge increases. With continuous refactoring, a better design is emerging.
  25. http://www.jasonmundok.com/wp-content/uploads/2012/02/Agile-Iteration-Diagram.jpg
  26. As a result of the iterative development process, you are already creating reusable designs = design patterns
  27. In his book “the timeless way of building”, Christopher Alexander asks the question:Why was an 19th century farmer, without formal education, able to build a house a thousand times more beautiful that anything that was build in the 20th century by formally-educated architects? Where people lived happier?Answer:Shared knowledge, and the knowledge was in the languageIncremental process, centuries of experienceVernacular architecture (folk architecture)TODO: Add a quote from Alexanderhttp://whc.unesco.org/en/list/861http://www.holasovice.eu/fotogalerie-1/holasovice/
  28. I believe that it should become fundamentally easier to write good software.Look at the way we work today. We are working at a ridiculously low level of abstraction. We are implementing change notification and change tracking manually, are struggling with locks to cope with multithreading, relying on code reviews to ensure design compliance. Programming is so complex that companies can’t find enough qualified people to make it. Underqualified people write crap and there seems nothing to do about that.Our society runs on software. Our daily life is ruled by hundreds of millions of lines of code, from our mobile devices to transportation to tax collection. How do we build increasingly complex systems if the technology itself does not make it increasingly simpler? I believe that programming languages should make it fundamentally easier to write good software.And I think we should look in the direction of patterns. Patterns are fundamental to the way humans think. We learn pattern recognition is the first months of our existence. Patterns are intrinsic to the very way we perceive the nature. Regularity and variety only make sense if we have this notion of patterns. Patterns, concepts, objects, are same thing. Object orientation was a first step to make programming language closer to the structure of human cognition. But why stopping there? We need programming languages that are able to represent more complex patterns than what we now say “objects”.There are two principal ideas in this talk. The first idea is that the implementation of design patterns can be automated, and actually is already being automated, if we look at some features of the C# language. Working with design patterns means that the source code is built against a model that is of higher abstraction than the machine on which it runs. Smarter compilers can validate the source code against this model and generate instructions to map higher abstraction to lower abstraction. The second idea is that design patterns don’t live in books but in software, and that discovering and designing good patterns is a natural part of an agile development process -- because to learn is to identify patterns. So, there is a great chain of being, where the industry benefits individual projects and projects contribute back to the industry.With PostSharp, we are proud to contribute to this effort.Thank you.