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.

The Journey to Master Code Design

114 views

Published on

What can we learn from other design disciplines? How do they learn design? What can we copy from them?

This is a challenge for software developers to start thinking as code designers, as people who use code as a material to prototype solutions to problems.

Published in: Software
  • Be the first to comment

  • Be the first to like this

The Journey to Master Code Design

  1. 1. Journey to Master Code Design Featuring original, not very good drawings by @alexboly And the mandatory lolcatz
  2. 2. Remember the last time you enjoyed programming
  3. 3. What is good design and why it matters? This is a sequel https://www.youtube.com/watch?v=yGJwPiIOf_8
  4. 4. How many of you design code? How many of you design other things (UI, UX, visual …)? How many of you know designers from other domains?
  5. 5. Perspective 1 We solve problems. Most times we use code, because it’s the “prototyping” material we know best Perspective 2 We can learn from other designers and design practices: UX, industrial design, service design, visual design etc. Perspective 3 Design is an old discipline. We can learn from its tradition and practices
  6. 6. We will focus beyond ● Clean code ● SOLID principles ● TDD ● DDD ● 4 Elements of Simple Design ● Naming
  7. 7. How I designed 17 years ago
  8. 8. How I usually design today
  9. 9. Hidden assumption
  10. 10. Intuition ~= Satisficing
  11. 11. How do other designers design?
  12. 12. How I Learned Software Design I haz made mistakes
  13. 13. How do other designers learn design? ● Design studies ● Design school
  14. 14. What if ... We can haz same for us!
  15. 15. How do you make design decisions?
  16. 16. Driver – Documenter Driver writes all code Documenter asks questions and builds a decision map
  17. 17. Design Studies
  18. 18. Louis XVI chair, neoclassicism
  19. 19. The NV45 chair, Finn Juhl, 1945
  20. 20. The two-part shell chair, Hans J. Wegner, 1963
  21. 21. The Bow chair, Grete Jalk, 1963
  22. 22. Panton chair, 1960- Modernism
  23. 23. Moku chair, Cecilie Manz, 2016
  24. 24. Jake Cress – Animated furniture
  25. 25. Design Studies Take a problem Implement multiple solutions Take these solutions further than a kata
  26. 26. Two types of design studies ● Compare specific techniques – Immutable code vs. mutable code – Single thread vs. concurrent – Functional vs. OOP ● Compare different design qualities – Performance vs. changeability vs. scalability vs. security
  27. 27. Let’s see examples! https://codedesigner.eu/
  28. 28. Pacman & Property based testing Constraints: immutability, pure functions, no nulls https://github.com/alexboly/pacmanKataPropertyBasedGroovy/
  29. 29. Pacman C++
  30. 30. Church encoding C++ https://github.com/alexboly/ChurchEncodingCpp Constraints: Everything as function Great for exploring functional support in multiple languages
  31. 31. Composability ` https://github.com/alexboly/composabilityDesignStudy
  32. 32. React State Design Study https://hackernoon.com/the-react-state-museum-a278c726315
  33. 33. Self-contained processes as microservices https://github.com/MozaicWorks/SelfContainedProcessesAsMicroservicesDesignStudy
  34. 34. Idea: XML Parser ● Subset of features ● Design quality constraints: – Optimize memory – Optimize speed – Optimize processing of large files – Changeability: easily add another element type ● Compare your implementations with existing ones
  35. 35. Idea: Database engine ● Features: multiple types, can read, update, delete data; no SQL support ● Possible quality constraints: – Fast reads / fast writes – Parallel access – Changeability: easily add another type ● Compare with mysql, postgresql etc.
  36. 36. Idea: Tetris game ● Full featured ● Design qualities ideas: – Changeability: plug in different interfaces: console, opengl, 2d graphics, web, etc. – Performance: measure and optimize fps
  37. 37. More ideas for design studies: https://github.com/MozaicWorks/SoftwareDesignStudies
  38. 38. Software Design Schools Workshops on techniques + Design Studies + Community
  39. 39. Recap
  40. 40. https://leanpub.com/usablesoftwaredesign

×