Yves Caseau - The Joy of Programming – June 2018 1/9
 
// finds a cell with a min count (heuristic)
findPivot(g:Grid) : any
-> let minv := 10, cmin := unknown in
(for c in g.cells
(if (c.value = 0 & c.count < minv)
(minv := c.count, cmin := c)),
cmin)
// solves a sudoku : branch on possible
// values using a recursive function
// branch(...) does all the work :)
solve(g:Grid) : boolean
-> when c := findPivot(g) in
exists(v in (1 .. 9) |
(if c.possible[v]
branch((c.value := v,
solve(g)))
else false))
else true
// first propagation rule
r1() :: rule(  c.value := v =>
(store(c.line.counts,v,0),
store(c.column.counts,v,0),
store(c.square.counts,v,0),
for v2 in (1 .. 9)
(if (v != v2 & c.possible[v2]) noLonger(c,v2),
for c2 in (c.line.cells but c) forbid(c2,v),
for c2 in (c.column.cells but c) forbid(c2,v),
for c2 in (c.square.cells but c) forbid(c2,v))))
// if c.count = 1, the only possible value is certain
r2() :: rule( c.count := y & y = 1 =>
c.value := some(y in (1 .. 9) | c.possible[y]))
// if a value v is possible only in one cell, it is certain
r3() :: rule( updateCount(cs,v) & cs.counts[v] <= 1
=> when c := some(c in cs.cells |
c.value = 0 & c.possible[v]) in
c.value := v
else contradiction!())
Yves Caseau
Michelin Group CIO
NATF (National Academy of Technologies of France)
Thinking, Designing, Writing,Thinking, Designing, Writing,
Testing … and Living with Code:Testing … and Living with Code:
Software in the 21Software in the 21stst
centurycenturyYves Caseau
Group CIO, Michelin
NATF
ADN Meetup, Le Crest
June 28th
, 2018 (v0.5)
Yves Caseau - The Joy of Programming – June 2018 2/9
The Need for Elegant ProgrammingThe Need for Elegant Programming
Constant change : love your code 
 Constant change & constant training
Refactoring : your code is a garden !
Yves Caseau - The Joy of Programming – June 2018 3/9
Software Development is a Team SportSoftware Development is a Team Sport
The world moves too fast to stay alone
 Build up your community
 Share your code to hire extra eye balls
Yves Caseau - The Joy of Programming – June 2018 4/9
Software is about Experience, not FunctionsSoftware is about Experience, not Functions
 User Experience Design is critical
 Cross-functional squads required
 Polyvalence makes collaboration easier
Yves Caseau - The Joy of Programming – June 2018 5/9
Always Ask for Help !Always Ask for Help !
In the 21st
century, to code starts with search
 Get in touch with your community for regular training
Leverage the power of MOOCs – Be curious !
Yves Caseau - The Joy of Programming – June 2018 6/9
Thinking and Doing in a Constant Learning LoopThinking and Doing in a Constant Learning Loop
 Analysts and Developers : 20th
century concepts 
 From mechanical design to organic growth
 Real-life operability issues makes delightful math problems
Yves Caseau - The Joy of Programming – June 2018 7/9
Good Software is Grown From Quantified FeedbackGood Software is Grown From Quantified Feedback
 Listen constantly to your users 
 Learn from measures – grow from your mistakes
 There is no user satisfaction without fast response time
Yves Caseau - The Joy of Programming – June 2018 8/9
Remember that You Belong to an EcosystemRemember that You Belong to an Ecosystem
 Your app is not isolated – recognize the system you are in
 Your users are not isolated – recognize the flows
 Don’t aim to be a “solution consultant” – be a magician !
Yves Caseau - The Joy of Programming – June 2018 9/9
ConclusionConclusion
Thank you for inviting me 
There has never been a better time
to write code 
Don’t build walls around yourselves 
 Let’s complete the Lean & Agile deployment
Yves Caseau - The Joy of Programming – June 2018 9/9
ConclusionConclusion
Thank you for inviting me 
There has never been a better time
to write code 
Don’t build walls around yourselves 
 Let’s complete the Lean & Agile deployment

Software Pitch 2018

  • 1.
    Yves Caseau -The Joy of Programming – June 2018 1/9   // finds a cell with a min count (heuristic) findPivot(g:Grid) : any -> let minv := 10, cmin := unknown in (for c in g.cells (if (c.value = 0 & c.count < minv) (minv := c.count, cmin := c)), cmin) // solves a sudoku : branch on possible // values using a recursive function // branch(...) does all the work :) solve(g:Grid) : boolean -> when c := findPivot(g) in exists(v in (1 .. 9) | (if c.possible[v] branch((c.value := v, solve(g))) else false)) else true // first propagation rule r1() :: rule(  c.value := v => (store(c.line.counts,v,0), store(c.column.counts,v,0), store(c.square.counts,v,0), for v2 in (1 .. 9) (if (v != v2 & c.possible[v2]) noLonger(c,v2), for c2 in (c.line.cells but c) forbid(c2,v), for c2 in (c.column.cells but c) forbid(c2,v), for c2 in (c.square.cells but c) forbid(c2,v)))) // if c.count = 1, the only possible value is certain r2() :: rule( c.count := y & y = 1 => c.value := some(y in (1 .. 9) | c.possible[y])) // if a value v is possible only in one cell, it is certain r3() :: rule( updateCount(cs,v) & cs.counts[v] <= 1 => when c := some(c in cs.cells | c.value = 0 & c.possible[v]) in c.value := v else contradiction!()) Yves Caseau Michelin Group CIO NATF (National Academy of Technologies of France) Thinking, Designing, Writing,Thinking, Designing, Writing, Testing … and Living with Code:Testing … and Living with Code: Software in the 21Software in the 21stst centurycenturyYves Caseau Group CIO, Michelin NATF ADN Meetup, Le Crest June 28th , 2018 (v0.5)
  • 2.
    Yves Caseau -The Joy of Programming – June 2018 2/9 The Need for Elegant ProgrammingThe Need for Elegant Programming Constant change : love your code   Constant change & constant training Refactoring : your code is a garden !
  • 3.
    Yves Caseau -The Joy of Programming – June 2018 3/9 Software Development is a Team SportSoftware Development is a Team Sport The world moves too fast to stay alone  Build up your community  Share your code to hire extra eye balls
  • 4.
    Yves Caseau -The Joy of Programming – June 2018 4/9 Software is about Experience, not FunctionsSoftware is about Experience, not Functions  User Experience Design is critical  Cross-functional squads required  Polyvalence makes collaboration easier
  • 5.
    Yves Caseau -The Joy of Programming – June 2018 5/9 Always Ask for Help !Always Ask for Help ! In the 21st century, to code starts with search  Get in touch with your community for regular training Leverage the power of MOOCs – Be curious !
  • 6.
    Yves Caseau -The Joy of Programming – June 2018 6/9 Thinking and Doing in a Constant Learning LoopThinking and Doing in a Constant Learning Loop  Analysts and Developers : 20th century concepts   From mechanical design to organic growth  Real-life operability issues makes delightful math problems
  • 7.
    Yves Caseau -The Joy of Programming – June 2018 7/9 Good Software is Grown From Quantified FeedbackGood Software is Grown From Quantified Feedback  Listen constantly to your users   Learn from measures – grow from your mistakes  There is no user satisfaction without fast response time
  • 8.
    Yves Caseau -The Joy of Programming – June 2018 8/9 Remember that You Belong to an EcosystemRemember that You Belong to an Ecosystem  Your app is not isolated – recognize the system you are in  Your users are not isolated – recognize the flows  Don’t aim to be a “solution consultant” – be a magician !
  • 9.
    Yves Caseau -The Joy of Programming – June 2018 9/9 ConclusionConclusion Thank you for inviting me  There has never been a better time to write code  Don’t build walls around yourselves   Let’s complete the Lean & Agile deployment
  • 10.
    Yves Caseau -The Joy of Programming – June 2018 9/9 ConclusionConclusion Thank you for inviting me  There has never been a better time to write code  Don’t build walls around yourselves   Let’s complete the Lean & Agile deployment

Editor's Notes

  • #2 This is not your CIO speech, it’s a dinner speech from an outsider expert - food for toughts Illustrations taken from my pet project – I will not go into it (not our topic today) – it is a a subliminal message Programming is fun (week-end &amp; vacations) I eat my own dog food : I apply to myself the advice that I am going to share
  • #3 Constant change =&amp;gt; easy to update =&amp;gt; nice code / well organized / easy to read (black box model is dead) Constant change in tech =&amp;gt; tools matter (iOS example) / Xcode Key idea : incremental (piece by piece / Agile) is great … but is creates accumulation and complexity
  • #4 Code in the first century is meant to be shared =&amp;gt; use the proper tools (GitHub) ADN is a Community  Communities is the best way to tackle complex things in changing world / complex world + need for reuse =&amp;gt; community Key principle from open source : reliability = f(1/bugs) = f(eyeballs)
  • #5 Obvious in the world of digital apps .. But true everywhere – Cross function experience is necessary to tackle at the same time usability, pleasure, performance, reliability … Not every one is everything : specialization occurs; but T-shaped is what works best
  • #6 The best efficiency comes from writing no code  “Collaboration does not mean to share what you know but what you don’t know” (pull / push) Curiosity has always been the mother of innovation, but today it is so efficient (access to knowledgeà
  • #7 What I mean : developers should be analysts (always) … and analysts should be developpers (today – because of complexity and change) – Taylorism is dead (requires stability) From Design to dev : the best theory is the one that works – Kevin Kelly &amp; Emergence From Dev to Design : Non-functional requirements (really practical reliability/ease of deply / operability) is worth a lot of thinking (Google SRE book)
  • #8 CFLL (explicit, implicit, social) : key for digital =&amp;gt; true for E2E SW (true for SaaS) Key lesson of Lean Startup : validated learning (analyst’s joker) Measure + focus on giving back free time to the user =&amp;gt; cf. Web Giants + Lean theorem “Tightly optimized systems are more robust”
  • #9 Software ecosystems are powerful : you need to surf the wave Digital : Customer journey is the key tool =&amp;gt; for E2E software, it’s business process and practice communities (BP do NOT capture everything) Arthur Clarke: Any sufficiently advanced technology is indistinguishable from magic. Magician are good role models for developers : key importance of practice + customer centricity focus on emotion