Share
Embed
Applying Unconventional Thinking and Principles from Design to Programming
SoundCloud Tech Talk, July 2014
Heather Miller
July 07, 2014
Transcript
48 slides
-
UNCONVENTIONAL SoundCloud TechTalk, Berlin, Germany July 7th, 2014 Heather Miller
Applying THINKING & PROGRAMMING to DESIGN Principles from -
UNCONVENTIONAL SoundCloud TechTalk, Berlin, Germany July 7th, 2014 Heather Miller
THINKING PROGRAMMING DESIGN + + -
CONVENTIONAL SoundCloud TechTalk, Berlin, Germany July 7th, 2014 Heather Miller
THINKING PROGRAMMING DESIGN -
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 -
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. -
FORM FUNCTION Ironically, Rams follows the “functionalist” style. Post-Bauhaus minimalistic
product design and architecture. FOLLOWS Of the persuasion, -
DIETER RAMS BRAUN CHIEF DESIGN OFFICER , 1961-1995 LESS, BUT
BETTER. “ ” Weniger, aber besser. ” “ -
“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, -
“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œ -
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. -
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. -
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 -
“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 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. -
RAMS’S 10 PRINCIPLES OF GOOD DESIGN: IS INNOVATIVE. 1 MAKES
A PRODUCT USEFUL 2 IS AESTHETIC. 3 -
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 -
“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.” -
SOMEWHAT LINES UP WITH ONE MIGHT APPLE FELL TO ARGUE
THAT FORM OVER FASHION RAMS’S INTENTIONS -
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” -
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.” -
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? -
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 -
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 -
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. -
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" -
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. -
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, ...) -
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 -
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: