Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Embedded Fest 2019. Павел Суйков. Musings on OOP, Agile and The Unbearable Clarity of Being

27 views

Published on

The idea of the talk is to discuss various approaches and historical aspects of Software Architecture and Software Development Process. We'll focus on 2 specific examples, namely, Object-oriented Design and Agile.
Carl Hewitt and Alan Kay laid the foundation and coined the term OOP which has evolved in hands of Bjarne Stroustrup and his followers into something dramatically different. The result was widely commercialized in the early 90-s offering limitless code reuse possibility and bright future for everyone. The bright future has come. Code reuse - not so much.
We'll use open-source software including Linux kernel as a base for practical use cases.
Despite seemingly different areas whatsoever, the underlying idea behind the introduction of Agile Process methodology was pretty similar and bearing the same curse. While chasing the elusive goal of controlling chaos in software development for growing code base, it still to this day lacks scaling possibilities it meant to bring to the table in the first place.
We'll use examples from practical hands-on experience.

Published in: Education
  • Be the first to comment

  • Be the first to like this

Embedded Fest 2019. Павел Суйков. Musings on OOP, Agile and The Unbearable Clarity of Being

  1. 1. MUSINGS ON OOP, AGILE & the Unbearable Clarity of Being
  2. 2. 1936 Turing machine, untyped lambda calculus IN THE BEGINNING THERE WAS A TURING MACHINE
  3. 3. 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus IN THE BEGINNING THERE WAS A TURING MACHINE
  4. 4. 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL IN THE BEGINNING THERE WAS A TURING MACHINE
  5. 5. 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP IN THE BEGINNING THERE WAS A TURING MACHINE
  6. 6. 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection IN THE BEGINNING THERE WAS A TURING MACHINE
  7. 7. 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection 1963 Software engineering IN THE BEGINNING THERE WAS A TURING MACHINE
  8. 8. 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection 1963 Software engineering 1967 Simula-67: objects, classes, inheritance, virtual, procedures, coroutines IN THE BEGINNING THERE WAS A TURING MACHINE
  9. 9. 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection 1963 Software engineering 1967 Simula-67: objects, classes, inheritance, virtual, procedures, coroutines 1968 ALGOL-68: arrays, slices, parallelism, operators IN THE BEGINNING THERE WAS A TURING MACHINE
  10. 10. 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection 1963 Software engineering 1967 Simula-67: objects, classes, inheritance, virtual, procedures, coroutines 1968 ALGOL-68: arrays, slices, parallelism, operators 1972 Actor model and Smalltalk-72 IN THE BEGINNING THERE WAS A TURING MACHINE
  11. 11. 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection 1963 Software engineering 1967 Simula-67: objects, classes, inheritance, virtual, procedures, coroutines 1968 ALGOL-68: arrays, slices, parallelism, operators 1972 Actor model and Smalltalk-72 1970-1972 C language, UNIX philosophy aka Microservices IN THE BEGINNING THERE WAS A TURING MACHINE
  12. 12. 1985 C++ 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection 1963 Software engineering 1967 Simula-67: objects, classes, inheritance, virtual, procedures, coroutines 1968 ALGOL-68: arrays, slices, parallelism, operators 1972 Actor model and Smalltalk-72 1970-1972 C language, UNIX philosophy aka Microservices IN THE BEGINNING THERE WAS A TURING MACHINE
  13. 13. 1985 C++ 1986 Erlang 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection 1963 Software engineering 1967 Simula-67: objects, classes, inheritance, virtual, procedures, coroutines 1968 ALGOL-68: arrays, slices, parallelism, operators 1972 Actor model and Smalltalk-72 1970-1972 C language, UNIX philosophy aka Microservices IN THE BEGINNING THERE WAS A TURING MACHINE
  14. 14. 1985 C++ 1986 Erlang 1987 Self (note: there is a Smalltalk implementation in Self) 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection 1963 Software engineering 1967 Simula-67: objects, classes, inheritance, virtual, procedures, coroutines 1968 ALGOL-68: arrays, slices, parallelism, operators 1972 Actor model and Smalltalk-72 1970-1972 C language, UNIX philosophy aka Microservices IN THE BEGINNING THERE WAS A TURING MACHINE
  15. 15. 1985 C++ 1986 Erlang 1987 Self (note: there is a Smalltalk implementation in Self) 1990 Haskell 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection 1963 Software engineering 1967 Simula-67: objects, classes, inheritance, virtual, procedures, coroutines 1968 ALGOL-68: arrays, slices, parallelism, operators 1972 Actor model and Smalltalk-72 1970-1972 C language, UNIX philosophy aka Microservices IN THE BEGINNING THERE WAS A TURING MACHINE
  16. 16. 1985 C++ 1986 Erlang 1987 Self (note: there is a Smalltalk implementation in Self) 1990 Haskell 1994 ANSI Common Lisp 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection 1963 Software engineering 1967 Simula-67: objects, classes, inheritance, virtual, procedures, coroutines 1968 ALGOL-68: arrays, slices, parallelism, operators 1972 Actor model and Smalltalk-72 1970-1972 C language, UNIX philosophy aka Microservices IN THE BEGINNING THERE WAS A TURING MACHINE
  17. 17. 1985 C++ 1986 Erlang 1987 Self (note: there is a Smalltalk implementation in Self) 1990 Haskell 1994 ANSI Common Lisp 1994 C# 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection 1963 Software engineering 1967 Simula-67: objects, classes, inheritance, virtual, procedures, coroutines 1968 ALGOL-68: arrays, slices, parallelism, operators 1972 Actor model and Smalltalk-72 1970-1972 C language, UNIX philosophy aka Microservices IN THE BEGINNING THERE WAS A TURING MACHINE
  18. 18. 1985 C++ 1986 Erlang 1987 Self (note: there is a Smalltalk implementation in Self) 1990 Haskell 1994 ANSI Common Lisp 1994 C# 1995 Java, JavaScript 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection 1963 Software engineering 1967 Simula-67: objects, classes, inheritance, virtual, procedures, coroutines 1968 ALGOL-68: arrays, slices, parallelism, operators 1972 Actor model and Smalltalk-72 1970-1972 C language, UNIX philosophy aka Microservices IN THE BEGINNING THERE WAS A TURING MACHINE
  19. 19. 1985 C++ 1986 Erlang 1987 Self (note: there is a Smalltalk implementation in Self) 1990 Haskell 1994 ANSI Common Lisp 1994 C# 1995 Java, JavaScript 2000 ES6 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection 1963 Software engineering 1967 Simula-67: objects, classes, inheritance, virtual, procedures, coroutines 1968 ALGOL-68: arrays, slices, parallelism, operators 1972 Actor model and Smalltalk-72 1970-1972 C language, UNIX philosophy aka Microservices IN THE BEGINNING THERE WAS A TURING MACHINE
  20. 20. 1985 C++ 1986 Erlang 1987 Self (note: there is a Smalltalk implementation in Self) 1990 Haskell 1994 ANSI Common Lisp 1994 C# 1995 Java, JavaScript 2000 ES6 The term “Object-Oriented Programming” was coined around here 1936 Turing machine, untyped lambda calculus 1940 Simply typed lambda calculus 1958 ALGOL 1958 LISP 1959 Garbage collection 1963 Software engineering 1967 Simula-67: objects, classes, inheritance, virtual, procedures, coroutines 1968 ALGOL-68: arrays, slices, parallelism, operators 1972 Actor model and Smalltalk-72 1970-1972 C language, UNIX philosophy aka Microservices IN THE BEGINNING THERE WAS A TURING MACHINE
  21. 21. “We either find a common language or a common obliteration, and C++ was not what I had in mind” - Eugen Rosenstock-Huessy and Alan Kay
  22. 22. “We either find a common language or a common obliteration, and C++ was not what I had in mind” - Eugen Rosenstock-Huessy and Alan Kay OOP: what’s that and what’s it for? “Theory of Objects”: Luca Cardelli, Martin Abadi, 1996
  23. 23. “We either find a common language or a common obliteration, and C++ was not what I had in mind” - Eugen Rosenstock-Huessy and Alan Kay OOP: what’s that and what’s it for? “Theory of Objects”: Luca Cardelli, Martin Abadi, 1996 Actor Model Class OOP Prototype OOP
  24. 24. “We either find a common language or a common obliteration, and C++ was not what I had in mind.” - Eugen Rosenstock-Huessy and Alan Kay Common denominator: dynamic dispatch Motivation: code reuse. Old code can call new code Hollywood Principle: from libraries to frameworks OOP: what’s that and what’s it for? “Theory of Objects”: Luca Cardelli, Martin Abadi, 1996 Actor Model Class OOP Prototype OOP
  25. 25. “We either find a common language or a common obliteration, and C++ was not what I had in mind” - Eugen Rosenstock-Huessy and Alan Kay Common denominator: dynamic dispatch Motivation: code reuse. Old code can call new code Hollywood Principle: from libraries to frameworks OOP: what’s that and what’s it for? “Theory of Objects”: Luca Cardelli, Martin Abadi, 1996 Agility. The ability to maintain chaos Actor Model Class OOP Prototype OOP
  26. 26. RIGIDITY & AGILITY
  27. 27. Advanced C++ style and idioms Pattern languages of program design Organizational patterns of agile software development Jim Coplien RIGIDITY & AGILITY
  28. 28. Advanced C++ style and idioms Pattern languages of program design Organizational patterns of agile software development 1998 “Multi-Paradigm design for C++”: commonality and variability Jim Coplien RIGIDITY & AGILITY
  29. 29. Rigid structure Agile process Advanced C++ style and idioms Pattern languages of program design Organizational patterns of agile software development 1998 “Multi-Paradigm design for C++”: commonality and variability Jim Coplien RIGIDITY & AGILITY Rigid process Agile structure
  30. 30. Rigid structure Agile process Advanced C++ style and idioms Pattern languages of program design Organizational patterns of agile software development 1998 “Multi-Paradigm design for C++”: commonality and variability Jim Coplien RIGIDITY & AGILITY Rigid process Agile structure
  31. 31. Rigid structure Agile process Advanced C++ style and idioms Pattern languages of program design Organizational patterns of agile software development 1998 “Multi-Paradigm design for C++”: commonality and variability Jim Coplien RIGIDITY & AGILITY Rigid process Agile structure
  32. 32. Rigid structure Agile process Advanced C++ style and idioms Pattern languages of program design Organizational patterns of agile software development 1998 “Multi-Paradigm design for C++”: commonality and variability Jim Coplien RIGIDITY & AGILITY Rigid process Agile structure
  33. 33. Should the implementation be here? Older Younger
  34. 34. Should the implementation be here? Or here?Older Younger
  35. 35. Should the implementation be here? Or here? The whole idea behind OOD: reusable logic, implementation that is changed easily How did that work out? Older Younger
  36. 36. Linux repo dependency tree OSS projects on GitHub Case studies: OS & OSS
  37. 37. Linux repo dependency tree OSS projects on GitHub Case studies: OS & OSS
  38. 38. Linux repo dependency tree OSS projects on GitHub Case studies: OS & OSS
  39. 39. Linux repo dependency tree OSS projects on GitHub Case studies: OS & OSS
  40. 40. Linux repo dependency tree OSS projects on GitHub Case studies: OS & OSS
  41. 41. Linux repo dependency tree OSS projects on GitHub Case studies: OS & OSS
  42. 42. Linux repo dependency tree OSS projects on GitHub Case studies: OS & OSS
  43. 43. Linux repo dependency tree OSS projects on GitHub Case studies: OS & OSS
  44. 44. the MAP & the COMPASS
  45. 45. the MAP & the COMPASS
  46. 46. the MAP & the COMPASS
  47. 47. the MAP & the COMPASS
  48. 48. the MAP & the COMPASS "Show me your code and conceal your data structures, and I shall continue to be mystified. Show me your data structures, and I won't usually need your code; it'll be obvious" "Show me your interfaces, the contracts for your methods, and I won't usually need your field declarations and class hierarchy; they'll be irrelevant" - Guy L. Steele - Eric Raymond
  49. 49. the MAP & the COMPASS "Show me your code and conceal your data structures, and I shall continue to be mystified. Show me your data structures, and I won't usually need your code; it'll be obvious" "Show me your interfaces, the contracts for your methods, and I won't usually need your field declarations and class hierarchy; they'll be irrelevant" Smart data structures and dumb code works a lot better than the other way around. The same holds true for people who write them. - Guy L. Steele - Eric Raymond

×