Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Applying Unconventional Thinking and Principles...

Applying Unconventional Thinking and Principles from Design to Programming

SoundCloud Tech Talk, July 2014

Heather Miller

July 07, 2014
Tweet

More Decks by Heather Miller

Other Decks in Programming

Transcript

  1. UNCONVENTIONAL SoundCloud TechTalk, Berlin, Germany July 7th, 2014 Heather Miller

    Applying THINKING & PROGRAMMING to DESIGN Principles from
  2. DIETER RAMS BRAUN CHIEF DESIGN OFFICER , 1961-1995 Ulm School

    of Design, successor to Bauhaus Architect & interior designer by training, 1954. Began work as an architect and interior designer, eventually ending up at Braun. Became chief design officer at Braun from 1961 until 1995. German industrial designer, born 1932, and associated with the functionalist school of industrial design. Gave all Braun products a “new face” in the 50s
  3. Ulm School of Design, successor to Bauhaus Architect & interior

    designer by training, 1954. Began work as an architect and interior designer, eventually ending up at Braun. Became chief design officer at Braun from 1961 until 1995. German industrial designer, born 1932, and associated with the functionalist school of industrial design. DIETER RAMS BRAUN CHIEF DESIGN OFFICER , 1961-1995 Braun was a company that existed in relative obscurity in Germany in the 1950s. By 1960, the “new faces” Rams gave to products had made Braun an internationally renown brand for small electronics.
  4. DIETER RAMS BRAUN CHIEF DESIGN OFFICER , 1961-1995 LESS, BUT

    BETTER. “ ” Weniger, aber besser. ” “
  5. “He demonstrates how simple, accessible, and straightforward good design can

    be. Something that looks very simple is somehow very desirable even though it might contain very complex technology or complex engineering.” – Deyan Sudjic, Vitsœ of Dieter Rams,
  6. “He believes in the abolition of built-in obsolescence. He believed

    if you analyze the functions and the object carefully enough, you can come up with the optimum set of operating controls. You can make the perfect face for a machine, you give it a form which will outlives fashion. Whole categories of products have been abolished, and yet his machines still have a timelessness.” of Dieter Rams, – Deyan Sudjic, Vitsœ
  7. APPLYING THAT TO THE BRAUN SK4 Every detail had to

    have a functional purpose and it was designed to pioneer a new contemporary language of design.
  8. APPLYING THAT TO THE BRAUN SK4 Every detail had to

    have a functional purpose and it was designed to pioneer a new contemporary language of design. Braun became the epitome for honest, functional products and the principles set then are still foundational to helping us (as in designers) fathom what good design truly is.
  9. Every detail had to have a functional purpose and it

    was designed to pioneer a new contemporary language of design. Braun became the epitome for honest, functional products and the principles set then are still foundational to helping us (as in designers) fathom what good design truly is. The controls of the SK55 are all about clarity. Ornamentation is nowhere to be found and everything is designed for ease of use. APPLYING THAT TO THE BRAUN SK4
  10. “The SK series by Braun is our On the Origin

    of Species. It's the foundation of everything we believe today as creators of objects and experiences.” – Andrew Kim, product designer at Microsoft
  11. “The SK series by Braun is our On the Origin

    of Species. It's the foundation of everything we believe today as creators of objects and experiences.” – Andrew Kim, product designer at Microsoft the 10 principles of good design has become the bible of today’s industrial designers 20 years later, after countless more of his designs continued to hit the market, Dieter Rams founded the 10 principles of good design.
  12. GOOD DESIGN: MAKES A PRODUCT UNDERSTANDABLE IS UNOBSTRUSIVE IS HONEST

    IS LONG-LASTING IS THOROUGH TO THE LAST DETAIL IS ENVIRONMENTALLY FRIENDLY IS AS LITTLE DESIGN AS POSSIBLE 4 5 6 7 8 9 10
  13. “Simplicity is the ultimate sophistication.” Jobs had aimed for the

    simplicity that comes from conquering complexities, not ignoring them. “It takes a lot of hard work, to make something simple, to truly understand the underlying challenges and come up with elegant solutions.” For Jobs it was not about cheap fashion effects. “Fashion is what seems beautiful now but looks ugly later. Art can be ugly at first but it becomes beautiful later.”
  14. SOMEWHAT LINES UP WITH ONE MIGHT APPLE FELL TO ARGUE

    THAT FORM OVER FASHION RAMS’S INTENTIONS
  15. =

  16. RAMS’S 10 PRINCIPLES OF GOOD DESIGN: IS AESTHETIC. 3 The

    aesthetic quality of a product is integral to its usefulness because products are used every day and have an effect on people and their well-being. Only well-executed objects can be beautiful. HAMS’S WORDS DESIGN → PROGRAMMING: SOME CODE WE WORK WITH EVERY DAY. “It has an effect on people and their well-being”
  17. RAMS’S 10 PRINCIPLES OF GOOD DESIGN: IS AESTHETIC. 3 “Our

    goal is that students who complete this subject should have a good feel for the elements of style and the aesthetics of programming. They should have command of the major techniques for controlling complexity in a large system. They should be capable of reading a 50-page-long program, if it is wri en in an exemplary style. They should know what not to read, and what they need not understand at any moment. They should feel secure about modifying a program, retaining the spirit and style of the original author.”
  18. RAMS’S 10 PRINCIPLES OF GOOD DESIGN: IS AESTHETIC. 3 ANOTHER

    EXAMPLE. Taken from Lutz Prechelt, "An Empirical Comparison of Seven Programming Languages" (2000) •Tested with Tcl, Python, Perl, Rexx, Java, C, C++ •About 100 LOC for scripting languages, 200-300 for others (including Java) •Can we do be er with Scala?
  19. RAMS’S 10 PRINCIPLES OF GOOD DESIGN: IS AESTHETIC. 3 ANOTHER

    EXAMPLE. Taken from Lutz Prechelt, "An Empirical Comparison of Seven Programming Languages" (2000) •Tested with Tcl, Python, Perl, Rexx, Java, C, C++ •About 100 LOC for scripting languages, 200-300 for others (including Java) •Can we do be er with Scala? RESULT: 61 LOC including comments, code aesthetically pleasing
  20. RAMS’S 10 PRINCIPLES OF GOOD DESIGN: IS AESTHETIC. 3 ANOTHER

    EXAMPLE.    val  codeToChars:  Map[Char,  String]  =          Map(              '2'  -­‐>  "ABC",  '3'  -­‐>  "DEF",  '4'  -­‐>  "GHI",  '5'  -­‐>  "JKL",              '6'  -­‐>  "MNO",  '7'  -­‐>  "PQRS",  '8'  -­‐>  "TUV",  '9'  -­‐>  "WXYZ"          )          /**  Inverse  of  codeToChars,        *  e.g.  'A'  -­‐>  '2',  'B'  -­‐>  '2'.        */      val  charCode:  Map[Char,  Char]  =          for  {              (digit,  chars)  <-­‐  codeToChars                        char  <-­‐  chars                                                            }  yield  char  -­‐>  digit
  21. RAMS’S 10 PRINCIPLES OF GOOD DESIGN: MAKES A PRODUCT UNDERSTANDABLE

    4 It clarifies the product’s structure. Be er still, it can make the product clearly express its function by making use of the user's intuition. At best, it is self- explanatory. HAMS’S WORDS DESIGN → PROGRAMMING: Focus: seek to express the clearest intent of a module or API. Clear interfaces, higher-order functions often succinct and clear. Static types clarify the structure of code Reducing or eliminating side effects makes it easier to understand the widreaching affects of invoking a function.
  22. RAMS’S 10 PRINCIPLES OF GOOD DESIGN: IS UNOBSTRUSIVE 5 It

    clarifies the product’s structure. Be er still, it can make the product clearly express its function by making use of the user's intuition. At best, it is self- explanatory. HAMS’S WORDS DESIGN → PROGRAMMING: GOOD FP IS UNOBTRUSIVE: Don’t introduce a new datatype if a regular function type would do Restrained designs are favored, since they are typically more composable Libraries should have neutral types that room for the user's self-expression"
  23. RAMS’S 10 PRINCIPLES OF GOOD DESIGN: IS UNOBSTRUSIVE 5 EXAMPLE

    If one of my tiny modules is a simple function then I can pass it to a higher-order function like map, unchanged. If it is not a simple function, but an instance of a more complicated class, then I might not be able to do that. Or I will have to make the class more complex by explicitly also extending a function type.
  24. RAMS’S 10 PRINCIPLES OF GOOD DESIGN: IS UNOBSTRUSIVE 5 EXAMPLE

    CONT’D A simple function avoids both complexities and is usually favored. The same holds true for datatypes: reuse existing types of the standard library (in Scala: Option, Try, ...)
  25. RAMS’S 10 PRINCIPLES OF GOOD DESIGN: IS HONEST 6 It

    does not make a product appear more innovative, powerful or valuable than it really is. It does not a empt to manipulate the consumer with promises that cannot be kept. HAMS’S WORDS DESIGN → PROGRAMMING: If you work in a statically typed language, then you can leverage static types to keep your design honest. Usually, the type signature of a function already specifies a lot of the functionality "Well-typed programs can’t be blamed” Wadler & Findler
  26. CONCLUDING Surprising how long-known principles from industrial design can be

    directly applied to software. This talk just scratches the surface. Just an – oh hey, this looks similar! Good design is thorough to the last detail Good design is long-lasting FP especially seems to be a good fit for Ram’s design principles Awareness of design principles and some intuition of how they map to code could improve the process of building software. Others: