56
Coding Defines Reality Code Mania #101 @varokas BIGBEARS.

Coding defines reality

Embed Size (px)

Citation preview

Page 1: Coding defines reality

Coding Defines RealityCode Mania #101

@varokas BIGBEARS.

Page 2: Coding defines reality
Page 3: Coding defines reality

Design

Page 4: Coding defines reality

Design

Creating Solutions based on

1. Requirements

2. Desired Properties

Page 5: Coding defines reality

• Available

• Reliable

• Performance

• Maintainable

• Reusable

• Usable

Page 6: Coding defines reality
Page 7: Coding defines reality
Page 8: Coding defines reality

Design is very easyKnowing what you want is very hard

Page 9: Coding defines reality

Christopher Alexander

Page 10: Coding defines reality

Christopher Alexander

Page 11: Coding defines reality

Principles of Emergent Design

Page 12: Coding defines reality

Contextual Force

Page 13: Coding defines reality

Force

Force

Force

Force

Force

Force

Force ForceDesign

Page 14: Coding defines reality

Force Force

Force

Force

Force

Force

Force

Force

Design

Page 15: Coding defines reality

–Johnny Appleseed

“Type a quote here.” Force Force

Force

Force

Force

Force

Force

Force

Design

Page 16: Coding defines reality
Page 17: Coding defines reality
Page 18: Coding defines reality
Page 19: Coding defines reality
Page 20: Coding defines reality

Feel the force!Do not put in one that does not exist

Page 21: Coding defines reality

Patterns

Page 22: Coding defines reality

Design Patterns

Page 23: Coding defines reality

Patterns

Page 24: Coding defines reality

“The Pattern is in the problem”

Page 25: Coding defines reality

–Johnny Appleseed

“Type a quote here.”

Pattern

Problem

Page 26: Coding defines reality

“Don't Solve the Problem. Discover the Pattern”

Page 27: Coding defines reality

Emergent Design

Change from Create Solutions

to Discover Solutions

Page 28: Coding defines reality

Discovering Techniques

• Code Properties Analysis

• Commonality Variability Analysis

• Programming by Intention

• Tests (TDD)

Page 29: Coding defines reality

CommonalityVariabilityAnalysis

Page 30: Coding defines reality

CommonalityVariabilityAnalysis

• What is in Common?

• What Varies?

• Under a certain Context of Use

Page 31: Coding defines reality

CVA Example (non-software)

Page 32: Coding defines reality

CVA Exercise (Pen-Pencil)

Pen

• write with ink • can't erase

Pencil

• write with lead • can erase

?

• write • cylinder • can put in a box • breakable • ....

Page 33: Coding defines reality

CVA Exercise (Pen-Pencil)

Pen

• write with ink• can't erase

Pencil

• write with lead• can erase

WritingTool

• write• cylinder • can put in a box

WritingUser

Page 34: Coding defines reality

CVA Exercise (Pen-Pencil)

Pen

write() { //inkImpl}

Pencil

write() { //leadImpl}

WritingTool

write()

WritingUser

Page 35: Coding defines reality

CVA Exercise (Pen-Pencil)

Penwrite() { //inkImpl}

Pencil

write() { //leadImpl}

WritingTool

write()

interface WritingTool { def write() }

class Pen extends WritingTool { def write() { //ink impl } }

class Pencil extends WritingTool { def write() { //lead impl } }

Page 36: Coding defines reality

CVA Exercise (Pen-Pencil)

Pen

write() { //inkImpl}

Pencil

write() { //leadImpl}

WritingTool

write()

WritingUser

Page 37: Coding defines reality

CVA Exercise (2)

• There are two types of shape (Circle, Square)

• There are two types of writer (Pen, Pencil)

• Each shape can print itself on different writers

Page 38: Coding defines reality

CVA Exercise (2)

Pen

write() { //inkImpl}

Pencil

write() { //leadImpl}

Writer

write() • There are two types of shape (Circle, Square)

• There are two types of writer (Pen, Pencil)

• Each shape can print itself on different writers

Page 39: Coding defines reality

CVA Exercise (2)

Pen

write() { //inkImpl}

Pencil

write() { //leadImpl}

Writer

write()

Square

Shape

• There are two types of shape (Circle, Square)

Circle

Page 40: Coding defines reality

CVA Exercise (2)

Pen

write() { //inkImpl}

Pencil

write() { //leadImpl}

Writer

write()

Square

Shape

print()

• Each shape can print itself on different writers

Circle

Page 41: Coding defines reality

Programming by Intention

• "So what do we want to do"?

Page 42: Coding defines reality

Perspective

• Conceptual

• Specification

• Implementation

Page 43: Coding defines reality

Starbucks

• Create a software for cashier and barista

• A program accepts order from user

• Retrieve cost based on the order

• A program shows the barista what to do

Page 44: Coding defines reality

Starbucks• A program creates

order from user

• Retrieve cost based on the order

• A program shows the barista what to do

order = user.createOrder()

cost = order.getCost()

inst = order.whatToDo()

Page 45: Coding defines reality

Starbucks

• Select Size of cup (S,M,L)

• (S) Cup -> Coffee

• (M) Cup -> Coffee x 2

• (L) Cup -> Coffee x 3

• S = 100, M = 120, L = 150

order = user.createOrder() { selectSize() }

cost = order.getCost() inst = order.whatToDo()

Page 46: Coding defines reality

Starbucks

• Select Size of cup (S,M,L)

• (S) Cup -> Coffee

• (M) Cup -> Coffee x 2

• (L) Cup -> Coffee x 3

• S = 100, M = 120, L = 150

M

coffee() { //2}price() { //120}

Cup

coffee()price()

S

coffee() { //1}price() { //100}

L

coffee() { //3}price() { //150}

Page 47: Coding defines reality

Starbucks

order = user.createOrder() { selectSize() }

cost = order.getCost() { order.getCup().getPrice() } M

coffee() { //2}price() { //120}

Cup

coffee()price()

S

coffee() { //1}price() { //100}

L

coffee() { //3}price() { //150}

Order

Page 48: Coding defines reality

Closing Thoughts

Page 49: Coding defines reality

When does design starts?When does it end?

Page 50: Coding defines reality
Page 52: Coding defines reality
Page 53: Coding defines reality

Happy Coding! (Designing)

Page 54: Coding defines reality

Other slides

Page 55: Coding defines reality

Starbucks (v2)• Select Coffee Type (Hot/Cold) [ cold serve with ice ]

• Select Size of cup (S,M,L)

• (S) Cup -> Coffee

• (M) Cup -> Coffee x 2

• (L) Cup -> Coffee x 3

• S = 100, M = 120, L = 150, Hot/Cold = Same price

Page 56: Coding defines reality

Starbucks (v3)• Select Coffee Type (Hot/Cold) [ cold serve with ice ]

• Americano [ Coffee + Water ]

• Cappuccino [ Coffee + Milk + Whip the milk ]

• Latte [ Coffee + Milk ]

• Select Size of cup (S,M,L)

• (S) Cup -> Coffee

• (M) Cup -> Coffee x 2

• (L) Cup -> Coffee x 3

• S = 100, M = 120, L = 150, Hot/Cold = Same price, Latte +10, Cappucino + 20