SlideShare a Scribd company logo
1 of 63
Download to read offline
Raising The Bar
Alex Bolboacă,  @alexboly,  alex.bolboaca@mozaicworks.com
October 2018
Intro
This talks is inspired by
Intersection #1: Software Design + UX = ?
Intersection #2: Other design disciplines + software design = ?
Intersection #3: Materials Science + Software Design = ???
Intersection #4: Maths + Software Design = ?
Intersection #5: Engineering + Software = ?
Intersection #6: Reaching out to scientists
Extra idea: How could development change fundamentally?
Intro
Software Craftsmanship Manifesto
10 years!
My Journey
• Software Craftsmanship
• First coderetreat outside US
• Many meetings
• Many travels to European communities
• I TAKE Unconference
• SoftDevGang
But that wasn’t enough for me
I’m a child of SciFi, born and raised in communist Romania
Raising the Bar
As aspiring Software Craftsmen we are raising the bar of profes-
sional software development by practicing it and helping others
learn the craft
What I heard
Innovation, Collaboration, Breaking Silos
So I’m very surprised to hear…
I’m Software Crafter, don’t want to hear about agile
I’m doing DevOps, not agile or software development
We want to scale agile, should we do SAFE or LESS?
I’m a CSM, CSPO, CSP, …
I’m interested in code, what relevance do Math / Physics / Human-
ities have ?
Everything is Connected
Connections
Intersectionality
What if we combine ideas from various domains with software development?
This talks is inspired by
David Hussman
David Hussman
Dude’s Law
Dude’s Law
Intersection #1: Software Design +
UX = ?
Usable Software Design
Who uses software designs? Developers (in agile sense, including
programmers, testers, ops, etc)
What if we apply UX techniques to inform our design decisions?
• Personas
• User journeys
• Usability tests
What is Usability?
Usability design qualities
By analogy, Usable Software Design helps
• Shorten the time from new developer to productive
• Reduce the number of mistakes the teams make
• Improve team motivation
• Improve team productivity
Result: The book
Intersection #2: Other design
disciplines + software design = ?
How do other designers build intuition and learn to design?
Never ever a single solution!
Design studies as part of software design education
Intersection #3: Materials Science +
Software Design = ???
Code is a Material we use for Prototyping
Is it a …
• Crystalline / non-crystalline Solid?
• Gas?
• Liquid?
• Plasma?
• Non-newtonian fluid?
• Something else?
Code as a “Physical” material
Forces:
• Change - add some more code, remove some code, modify some code
• Execution - pass some inputs, read the outputs
Constraint:
• Coherence - code runs and produces desirable results
Mechanical properties:
• Rigidity: unevenly distributed
Code is like ?
Weird type of plasticine?
Materials Science + Software Design = Some Equations and new approaches?
• Could we compute the rigidity distribution of code? Aka an integration
of coupling over the code topology ?
• Could we compute the effect of change on the rigidity distribution?
• Could we visualize the rigidity distribution?
• Could we interact with code through the plasticine-like view?
Result: ?
Who knows?
Intersection #4: Maths + Software
Design = ?
Maths is Fun!
1 + 2 + 3 + 4 + … = ?
Ramanujan extension to addition gives the result -1/12.
This is used in physics (eg. string theory).
Watch the video here: Mathologer: Ramanujan: Making sense of 1+2+3+… =
-1/12 and Co.
Maths is based on
Proofs
Theorems
Axioms
Standard of proof in software development is …
This has worked for a team
What is a program?
outputs = f(t, inputs)
Hypothesis
∀f(t, inputs)∃g1, g2, g3, ...s.th.f(t, inputs) = g1(t) ◦ g2(i1) ◦ g3(i2) ◦ ...
Biggest problem when refactoring legacy code?
Dependencies
Idea: Use Lambda calculus to refactor legacy code
1. Pick a region of code to refactor
2. Turn it into a big, ugly lambda through safe refactoring (aka separate
from state and dependencies)
3. Decompose the big ugly lambda into small nice lambdas
4. Reorganize lambdas into small objects based on cohesion or
duplication of parameters
Algorithm v2
From any code region to big, ugly lambda:
1. Pick a set of statements
2. Extract to a function
3. Make the function static and immutable
4. For each compilation error, either: replace state with parameters and
return values or extract another lambda
5. Simplify through currying, functional composition or lambda injection
Experimental result
// Groovy version of trivia legacy code base
private static pure_Roll(
final currentPlayerInPenaltyBoxFunction,
final printCurrentPlayerNameFunction,
final printRollFunction,
final isRollOddFunction,
final rollOddAndPlayerInPenaltyBoxFunction,
final playerInPenaltyBoxAndRollEvenFunction,
final playerNotInPenaltyBoxFunction
)
Source:
https://github.com/MozaicWorks/trivia/blob/decomposeLambdasTry2/
groovy/src/main/groovy/com/adaptionsoft/games/uglytrivia/Game.groovy
Experimental result: method body
printCurrentPlayerNameFunction()
printRollFunction()
if (currentPlayerInPenaltyBoxFunction()) {
if (isRollOddFunction()) {
return rollOddAndPlayerInPenaltyBoxFunction()
} else {
return playerInPenaltyBoxAndRollEvenFunction()
}
} else {
return playerNotInPenaltyBoxFunction()
}
More code
private static playerNotInPenaltyBox(
printNewLocationFunction,
printCurrentCategoryFunction,
askQuestionFunction,
final boolean isGettingOutOfPenaltyBox,
movePlayerFunction) {
printNewLocationFunction()
printCurrentCategoryFunction()
askQuestionFunction()
return [
isGettingOutOfPenaltyBox,
movePlayerFunction()
]
}
Maths + Legacy code = ?
• Can we create a method that is mathematically proven to maintain
code behavior?
• And simple enough to learn and apply with modern tools?
Intersection #5: Engineering +
Software = ?
Built-in self test
A built-in self-test (BIST) or built-in test (BIT) is a mechanism that
permits a machine to test itself. Engineers design BISTs to meet
requirements such as:
• high reliability
• lower repair cycle times
or constraints such as:
• limited technician accessibility
• cost of testing during manufacture
Source: Wikipedia
Software tests
src/…
test/…
Why not self-testable programs?
createUser -selfTest
Why not self-contained programs?
usage: createUser -[create|selfSetup|selfTest|selfCleanup]
-create,--create creates a user
-help,--help show usage information
-selfBackup,--self-backup backs up the database
-selfCleanup,--self-cleanup drops database and user
-selfRestore,--self-restore restores the last backup
-selfSetup,--self-setup creates database and user
-selfTest,--self-test runs self test
Source code: https://github.com/MozaicWorks/
SelfContainedProcessesAsMicroservicesDesignStudy
Built-in self test, setup, backup, restore + code = ?
• Psychological: No separation between operational needs and
“production” code
• Software engineering: All requirements taken into account, including
ops
• Technical: Little change
Intersection #6: Reaching out to
scientists
Problem
Scientific experiments with software development have weird results. Why?
Maybe access issue. Scientists can run experiments either on students, on
open source code bases, or in large companies.
Results don’t fit with software crafters, small / medium companies or
experienced developers.
Possible Solution
A CI plugin easy to install and with good default configuration that publishes
anonymous code-related metrics (without the code) to a public repository
accessible to scientists.
Extra idea: How could development
change fundamentally?
Fundamental difficulty of software development
Turning fuzzy needs and wants into very precise code
What if …
We define very precise requirements that are then fed into a machine to
generate the code
Extend the Turing machine?
Turing machine
If we remove all the other difficulties …
Imagine an ideal generation machine.
We turn the requirements into a very specific language:
Given ...
When ...
Then ...
We feed the machine with the requirements.
We get out generated code that matches the requirements.
Consequence: turning back time
Did you make a mistake in your requirements? No worries, plug in the
correct ones and get the right code out
Do you want to change something fundamental? No worries, same process
No more design mistakes, no more rigidity
How would the ideal generative machine work?
Intuitively:
• Generate more specialized tests from the given / when / then
• Use TDD cycles + Transformations to adjust the code
Is this even remotely possible?
I don’t know. Where to start?
Closing
Your turn
• Software development + biology = ?
• Software development + chemistry = ?
• Software development + quantum physics = ?
• Software development + art = ?
• Software development + writing = ?
• Software development + typography = ?
Start your workgroups!
Thank you!
Let’s raise the bar together!
I’ve been Alex Bolboacă, @alexboly, alex.bolboaca@mozaicworks.com
programmer, trainer, mentor, writer
at Mozaic Works
Think. Design. Work Smart.
50% off my books with the code LSCC
Usable Software Design: https://leanpub.com/usablesoftwaredesign/c/lscc
Coderetreat, Hosting and Facilitating:
https://leanpub.com/coderetreat/c/lscc
Q&A
Q&A

More Related Content

What's hot

Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Zohirul Alam Tiemoon
 
Sandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, Bucharest
Sandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, BucharestSandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, Bucharest
Sandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, Bucharest
Mozaic Works
 
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard WorkTaming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
Joseph Yoder
 

What's hot (20)

DDT Testing Library for Android
DDT Testing Library for AndroidDDT Testing Library for Android
DDT Testing Library for Android
 
Do Bugs Reside in Complex Code?
Do Bugs Reside in Complex Code?Do Bugs Reside in Complex Code?
Do Bugs Reside in Complex Code?
 
TDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & WhereTDD vs. ATDD - What, Why, Which, When & Where
TDD vs. ATDD - What, Why, Which, When & Where
 
Code quality
Code quality Code quality
Code quality
 
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
Overview on TDD (Test Driven Development) & ATDD (Acceptance Test Driven Deve...
 
Boost Your IT Career with IEEE's Software Engineering Certifications
Boost Your IT Career with IEEE's Software Engineering Certifications Boost Your IT Career with IEEE's Software Engineering Certifications
Boost Your IT Career with IEEE's Software Engineering Certifications
 
Agile Test Driven Development
Agile Test Driven DevelopmentAgile Test Driven Development
Agile Test Driven Development
 
Test Drive Development
Test Drive DevelopmentTest Drive Development
Test Drive Development
 
(A)TDD The what, why and how
(A)TDD The what, why and how(A)TDD The what, why and how
(A)TDD The what, why and how
 
Refactoring legacy code driven by tests - ITA
Refactoring legacy code driven by tests -  ITARefactoring legacy code driven by tests -  ITA
Refactoring legacy code driven by tests - ITA
 
Euro python 2015 writing quality code
Euro python 2015   writing quality codeEuro python 2015   writing quality code
Euro python 2015 writing quality code
 
How does pair programming work?
How does pair programming work?How does pair programming work?
How does pair programming work?
 
tem7
tem7tem7
tem7
 
Unit testing & TDD concepts with best practice guidelines.
Unit testing & TDD concepts with best practice guidelines.Unit testing & TDD concepts with best practice guidelines.
Unit testing & TDD concepts with best practice guidelines.
 
Sandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, Bucharest
Sandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, BucharestSandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, Bucharest
Sandro Mancuso - Software Craftmanship @ I T.A.K.E. Unconference 2013, Bucharest
 
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard WorkTaming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work
 
Caring about Code Quality
Caring about Code QualityCaring about Code Quality
Caring about Code Quality
 
Pair programming and introduction to TDD
Pair programming and introduction to TDDPair programming and introduction to TDD
Pair programming and introduction to TDD
 
Professionalism and Industry Expectations related to IT industry
Professionalism and Industry Expectations related to IT industry  Professionalism and Industry Expectations related to IT industry
Professionalism and Industry Expectations related to IT industry
 
Capability Building for Cyber Defense: Software Walk through and Screening
Capability Building for Cyber Defense: Software Walk through and Screening Capability Building for Cyber Defense: Software Walk through and Screening
Capability Building for Cyber Defense: Software Walk through and Screening
 

Similar to Raising the Bar

Introducing Systems Analysis Design Development
Introducing Systems Analysis Design DevelopmentIntroducing Systems Analysis Design Development
Introducing Systems Analysis Design Development
bsadd
 
Agile Development Ultimate Slides
Agile Development Ultimate SlidesAgile Development Ultimate Slides
Agile Development Ultimate Slides
gilashikwa
 

Similar to Raising the Bar (20)

TDD - Seriously, try it! - Opensouthcode
TDD - Seriously, try it! - OpensouthcodeTDD - Seriously, try it! - Opensouthcode
TDD - Seriously, try it! - Opensouthcode
 
TDD - Seriously, try it! (updated '22)
TDD - Seriously, try it! (updated '22)TDD - Seriously, try it! (updated '22)
TDD - Seriously, try it! (updated '22)
 
Debugging
DebuggingDebugging
Debugging
 
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
TDD - Seriously, try it! - Trójmiasto Java User Group (17th May '23)
 
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
TDD - Seriously, try it! - Trjjmiasto JUG (17th May '23)
 
TDD - Seriously, try it! - Bucarest Tech Week
TDD - Seriously, try it! - Bucarest Tech WeekTDD - Seriously, try it! - Bucarest Tech Week
TDD - Seriously, try it! - Bucarest Tech Week
 
Transferring Software Testing Tools to Practice
Transferring Software Testing Tools to PracticeTransferring Software Testing Tools to Practice
Transferring Software Testing Tools to Practice
 
Prashant technical practices-tdd for xebia event
Prashant   technical practices-tdd for xebia eventPrashant   technical practices-tdd for xebia event
Prashant technical practices-tdd for xebia event
 
From open source labs to ceo methods and advice by sysfera
From open source labs to ceo methods and advice by sysferaFrom open source labs to ceo methods and advice by sysfera
From open source labs to ceo methods and advice by sysfera
 
Technical debt management strategies
Technical debt management strategiesTechnical debt management strategies
Technical debt management strategies
 
2014 01-ticosa
2014 01-ticosa2014 01-ticosa
2014 01-ticosa
 
Introducing Systems Analysis Design Development
Introducing Systems Analysis Design DevelopmentIntroducing Systems Analysis Design Development
Introducing Systems Analysis Design Development
 
A modern architecturereview–usingcodereviewtools-ver-3.5
A modern architecturereview–usingcodereviewtools-ver-3.5A modern architecturereview–usingcodereviewtools-ver-3.5
A modern architecturereview–usingcodereviewtools-ver-3.5
 
Introducing systems analysis, design & development Concepts
Introducing systems analysis, design & development ConceptsIntroducing systems analysis, design & development Concepts
Introducing systems analysis, design & development Concepts
 
DevOps interview questions and answers
DevOps interview questions and answersDevOps interview questions and answers
DevOps interview questions and answers
 
Agile Development Ultimate Slides
Agile Development Ultimate SlidesAgile Development Ultimate Slides
Agile Development Ultimate Slides
 
Agility via Software Engineering Practices - Agile Tour Montreal 2015
Agility via Software Engineering Practices - Agile Tour Montreal 2015Agility via Software Engineering Practices - Agile Tour Montreal 2015
Agility via Software Engineering Practices - Agile Tour Montreal 2015
 
iOS Development at Scale @Chegg
iOS Development at Scale @CheggiOS Development at Scale @Chegg
iOS Development at Scale @Chegg
 
Dev Ops for systems of record - Talk at Agile Australia 2015
Dev Ops for systems of record - Talk at Agile Australia 2015Dev Ops for systems of record - Talk at Agile Australia 2015
Dev Ops for systems of record - Talk at Agile Australia 2015
 
agile refactoring and integration techniques.pdf
agile refactoring and integration techniques.pdfagile refactoring and integration techniques.pdf
agile refactoring and integration techniques.pdf
 

More from Alexandru Bolboaca

More from Alexandru Bolboaca (20)

Refactor legacy code through pure functions
Refactor legacy code through pure functionsRefactor legacy code through pure functions
Refactor legacy code through pure functions
 
Design Without Types
Design Without TypesDesign Without Types
Design Without Types
 
Thinking in Functions
Thinking in FunctionsThinking in Functions
Thinking in Functions
 
The Journey to Master Code Design
The Journey to Master Code DesignThe Journey to Master Code Design
The Journey to Master Code Design
 
What is good software design? And why it matters?
What is good software design? And why it matters?What is good software design? And why it matters?
What is good software design? And why it matters?
 
Functional programming in C++
Functional programming in C++Functional programming in C++
Functional programming in C++
 
Agile Technical Leadership
Agile Technical LeadershipAgile Technical Leadership
Agile Technical Leadership
 
TDD As If You Meant It
TDD As If You Meant ItTDD As If You Meant It
TDD As If You Meant It
 
Usable Software Design
Usable Software DesignUsable Software Design
Usable Software Design
 
Hidden loops
Hidden loopsHidden loops
Hidden loops
 
Removing structural duplication
Removing structural duplicationRemoving structural duplication
Removing structural duplication
 
Continuous delivery
Continuous deliveryContinuous delivery
Continuous delivery
 
Why You Should Start Using Docker
Why You Should Start Using DockerWhy You Should Start Using Docker
Why You Should Start Using Docker
 
Pyramid of-developer-skills
Pyramid of-developer-skillsPyramid of-developer-skills
Pyramid of-developer-skills
 
Applied craftsmanship
Applied craftsmanshipApplied craftsmanship
Applied craftsmanship
 
Pyramid of-developer-skills
Pyramid of-developer-skillsPyramid of-developer-skills
Pyramid of-developer-skills
 
Stay focused
Stay focusedStay focused
Stay focused
 
Kanban intro
Kanban introKanban intro
Kanban intro
 
Unit testing-patterns
Unit testing-patternsUnit testing-patterns
Unit testing-patterns
 
Incremental design, simply explained
Incremental design, simply explainedIncremental design, simply explained
Incremental design, simply explained
 

Recently uploaded

+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 

Recently uploaded (20)

The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 

Raising the Bar

  • 1. Raising The Bar Alex Bolboacă,  @alexboly,  alex.bolboaca@mozaicworks.com October 2018
  • 2. Intro This talks is inspired by Intersection #1: Software Design + UX = ? Intersection #2: Other design disciplines + software design = ? Intersection #3: Materials Science + Software Design = ??? Intersection #4: Maths + Software Design = ? Intersection #5: Engineering + Software = ? Intersection #6: Reaching out to scientists Extra idea: How could development change fundamentally?
  • 5. My Journey • Software Craftsmanship • First coderetreat outside US • Many meetings • Many travels to European communities • I TAKE Unconference • SoftDevGang
  • 6. But that wasn’t enough for me I’m a child of SciFi, born and raised in communist Romania
  • 7. Raising the Bar As aspiring Software Craftsmen we are raising the bar of profes- sional software development by practicing it and helping others learn the craft
  • 8. What I heard Innovation, Collaboration, Breaking Silos
  • 9. So I’m very surprised to hear… I’m Software Crafter, don’t want to hear about agile I’m doing DevOps, not agile or software development We want to scale agile, should we do SAFE or LESS? I’m a CSM, CSPO, CSP, … I’m interested in code, what relevance do Math / Physics / Human- ities have ?
  • 11. Intersectionality What if we combine ideas from various domains with software development?
  • 12. This talks is inspired by
  • 15. Intersection #1: Software Design + UX = ?
  • 16. Usable Software Design Who uses software designs? Developers (in agile sense, including programmers, testers, ops, etc) What if we apply UX techniques to inform our design decisions? • Personas • User journeys • Usability tests
  • 17. What is Usability? Usability design qualities
  • 18. By analogy, Usable Software Design helps • Shorten the time from new developer to productive • Reduce the number of mistakes the teams make • Improve team motivation • Improve team productivity
  • 20. Intersection #2: Other design disciplines + software design = ?
  • 21. How do other designers build intuition and learn to design? Never ever a single solution!
  • 22. Design studies as part of software design education
  • 23. Intersection #3: Materials Science + Software Design = ???
  • 24. Code is a Material we use for Prototyping Is it a … • Crystalline / non-crystalline Solid? • Gas? • Liquid? • Plasma? • Non-newtonian fluid? • Something else?
  • 25. Code as a “Physical” material Forces: • Change - add some more code, remove some code, modify some code • Execution - pass some inputs, read the outputs Constraint: • Coherence - code runs and produces desirable results Mechanical properties: • Rigidity: unevenly distributed
  • 26. Code is like ? Weird type of plasticine?
  • 27. Materials Science + Software Design = Some Equations and new approaches? • Could we compute the rigidity distribution of code? Aka an integration of coupling over the code topology ? • Could we compute the effect of change on the rigidity distribution? • Could we visualize the rigidity distribution? • Could we interact with code through the plasticine-like view?
  • 29. Intersection #4: Maths + Software Design = ?
  • 30. Maths is Fun! 1 + 2 + 3 + 4 + … = ? Ramanujan extension to addition gives the result -1/12. This is used in physics (eg. string theory). Watch the video here: Mathologer: Ramanujan: Making sense of 1+2+3+… = -1/12 and Co.
  • 31. Maths is based on Proofs Theorems Axioms
  • 32. Standard of proof in software development is … This has worked for a team
  • 33. What is a program? outputs = f(t, inputs)
  • 34. Hypothesis ∀f(t, inputs)∃g1, g2, g3, ...s.th.f(t, inputs) = g1(t) ◦ g2(i1) ◦ g3(i2) ◦ ...
  • 35. Biggest problem when refactoring legacy code? Dependencies
  • 36. Idea: Use Lambda calculus to refactor legacy code 1. Pick a region of code to refactor 2. Turn it into a big, ugly lambda through safe refactoring (aka separate from state and dependencies) 3. Decompose the big ugly lambda into small nice lambdas 4. Reorganize lambdas into small objects based on cohesion or duplication of parameters
  • 37. Algorithm v2 From any code region to big, ugly lambda: 1. Pick a set of statements 2. Extract to a function 3. Make the function static and immutable 4. For each compilation error, either: replace state with parameters and return values or extract another lambda 5. Simplify through currying, functional composition or lambda injection
  • 38. Experimental result // Groovy version of trivia legacy code base private static pure_Roll( final currentPlayerInPenaltyBoxFunction, final printCurrentPlayerNameFunction, final printRollFunction, final isRollOddFunction, final rollOddAndPlayerInPenaltyBoxFunction, final playerInPenaltyBoxAndRollEvenFunction, final playerNotInPenaltyBoxFunction ) Source: https://github.com/MozaicWorks/trivia/blob/decomposeLambdasTry2/ groovy/src/main/groovy/com/adaptionsoft/games/uglytrivia/Game.groovy
  • 39. Experimental result: method body printCurrentPlayerNameFunction() printRollFunction() if (currentPlayerInPenaltyBoxFunction()) { if (isRollOddFunction()) { return rollOddAndPlayerInPenaltyBoxFunction() } else { return playerInPenaltyBoxAndRollEvenFunction() } } else { return playerNotInPenaltyBoxFunction() }
  • 40. More code private static playerNotInPenaltyBox( printNewLocationFunction, printCurrentCategoryFunction, askQuestionFunction, final boolean isGettingOutOfPenaltyBox, movePlayerFunction) { printNewLocationFunction() printCurrentCategoryFunction() askQuestionFunction() return [ isGettingOutOfPenaltyBox, movePlayerFunction() ] }
  • 41. Maths + Legacy code = ? • Can we create a method that is mathematically proven to maintain code behavior? • And simple enough to learn and apply with modern tools?
  • 43. Built-in self test A built-in self-test (BIST) or built-in test (BIT) is a mechanism that permits a machine to test itself. Engineers design BISTs to meet requirements such as: • high reliability • lower repair cycle times or constraints such as: • limited technician accessibility • cost of testing during manufacture Source: Wikipedia
  • 45. Why not self-testable programs? createUser -selfTest
  • 46. Why not self-contained programs? usage: createUser -[create|selfSetup|selfTest|selfCleanup] -create,--create creates a user -help,--help show usage information -selfBackup,--self-backup backs up the database -selfCleanup,--self-cleanup drops database and user -selfRestore,--self-restore restores the last backup -selfSetup,--self-setup creates database and user -selfTest,--self-test runs self test Source code: https://github.com/MozaicWorks/ SelfContainedProcessesAsMicroservicesDesignStudy
  • 47. Built-in self test, setup, backup, restore + code = ? • Psychological: No separation between operational needs and “production” code • Software engineering: All requirements taken into account, including ops • Technical: Little change
  • 48. Intersection #6: Reaching out to scientists
  • 49. Problem Scientific experiments with software development have weird results. Why? Maybe access issue. Scientists can run experiments either on students, on open source code bases, or in large companies. Results don’t fit with software crafters, small / medium companies or experienced developers.
  • 50. Possible Solution A CI plugin easy to install and with good default configuration that publishes anonymous code-related metrics (without the code) to a public repository accessible to scientists.
  • 51. Extra idea: How could development change fundamentally?
  • 52. Fundamental difficulty of software development Turning fuzzy needs and wants into very precise code
  • 53. What if … We define very precise requirements that are then fed into a machine to generate the code
  • 54. Extend the Turing machine? Turing machine
  • 55. If we remove all the other difficulties … Imagine an ideal generation machine. We turn the requirements into a very specific language: Given ... When ... Then ... We feed the machine with the requirements. We get out generated code that matches the requirements.
  • 56. Consequence: turning back time Did you make a mistake in your requirements? No worries, plug in the correct ones and get the right code out Do you want to change something fundamental? No worries, same process No more design mistakes, no more rigidity
  • 57. How would the ideal generative machine work? Intuitively: • Generate more specialized tests from the given / when / then • Use TDD cycles + Transformations to adjust the code
  • 58. Is this even remotely possible? I don’t know. Where to start?
  • 60. Your turn • Software development + biology = ? • Software development + chemistry = ? • Software development + quantum physics = ? • Software development + art = ? • Software development + writing = ? • Software development + typography = ? Start your workgroups!
  • 61. Thank you! Let’s raise the bar together! I’ve been Alex Bolboacă, @alexboly, alex.bolboaca@mozaicworks.com programmer, trainer, mentor, writer at Mozaic Works Think. Design. Work Smart.
  • 62. 50% off my books with the code LSCC Usable Software Design: https://leanpub.com/usablesoftwaredesign/c/lscc Coderetreat, Hosting and Facilitating: https://leanpub.com/coderetreat/c/lscc