SlideShare a Scribd company logo
1 of 156
Programming and Minimalism




                                         Jon Dahl
                                         @jondahl
                                 jon@zencoder.com




Monday, March 14, 2011
Monday, March 14, 2011
http://zencoder.com/jobs




Monday, March 14, 2011
What is
                 good programming?



Monday, March 14, 2011
What is
                         programming?



Monday, March 14, 2011
Process




Monday, March 14, 2011
Doing shit




Monday, March 14, 2011
Defining
                         complex processes



Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Programming
                               is like...



Monday, March 14, 2011
Engineering




                         http://www.flickr.com/photos/seattlemunicipalarchives/4818952324/
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
nouns
       verbs



Monday, March 14, 2011
Monday, March 14, 2011
Craft




Monday, March 14, 2011
Monday, March 14, 2011
Tools




Monday, March 14, 2011
Skill




Monday, March 14, 2011
Small teams




Monday, March 14, 2011
Habits
                         and practices



Monday, March 14, 2011
Writing




Monday, March 14, 2011
Defining
                         complex processes



Monday, March 14, 2011
http://www.flickr.com/photos/seattlemunicipalarchives/4818952324/
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Fire!

Monday, March 14, 2011
Monday, March 14, 2011
What is
                 good programming?



Monday, March 14, 2011
Simple and interesting.




Monday, March 14, 2011
Simple and interesting.
               Build on it.




Monday, March 14, 2011
Simple and interesting.
               Build on it.
               Build on it.




Monday, March 14, 2011
Simple and interesting.
               Build on it.
               Build on it.
               Build on it.




Monday, March 14, 2011
Simple and interesting.
               Build on it.
               Build on it.
               Build on it.
               Build on it.




Monday, March 14, 2011
Simple and interesting.
               Build on it.
               Build on it.
               Build on it.
               Build on it.
               Build on it.




Monday, March 14, 2011
Simple and interesting.
               Build on it.
               Build on it.
               Build on it.
               Build on it.
               Build on it.
               Enormous, stale, and boring.




Monday, March 14, 2011
Monday, March 14, 2011
Simple and interesting.
               loop { Build on it. }
               Enormous, stale, and boring.

               Start over, but retain the best parts.




Monday, March 14, 2011
Bach




Monday, March 14, 2011
Bach




Monday, March 14, 2011
Bach




Monday, March 14, 2011
Haydn




Monday, March 14, 2011
Mozart




Monday, March 14, 2011
Mozart




Monday, March 14, 2011
Mozart




Monday, March 14, 2011
Beethoven




Monday, March 14, 2011
Beethoven




Monday, March 14, 2011
Beethoven




Monday, March 14, 2011
Monday, March 14, 2011
Mahler




Monday, March 14, 2011
Mahler




Monday, March 14, 2011
Mahler




Monday, March 14, 2011
simplicity
                         and complexity



Monday, March 14, 2011
test tone




Monday, March 14, 2011
white noise




Monday, March 14, 2011
white noise




Monday, March 14, 2011
Steve Reich




Monday, March 14, 2011
Arvo
                         Pärt




Monday, March 14, 2011
Philip Glass




Monday, March 14, 2011
minimalism




Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
simplicity
                         and complexity



Monday, March 14, 2011
minimalism




Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
USA Patriot Act




Monday, March 14, 2011
Expanded
                         Surveillance Act



Monday, March 14, 2011
Propaganda




Monday, March 14, 2011
While freely conceding that the Soviet
         regime exhibits certain features which
         the humanitarian may be inclined to
         deplore, we must, I think, agree that a
         certain curtailment of the right to political
         opposition is an unavoidable
         concomitant of transitional periods, and
         that the rigors which the Russian people
         have been called upon to undergo have
         been amply justified in the sphere of
         concrete achievement.

Monday, March 14, 2011
I am not, indeed, sure whether it is not
         true to say that the Milton who once
         seemed not unlike a seventeenth-century
         Shelley had not become, out of an
         experience ever more bitter in each year,
         more alien to the founder of that Jesuit
         sect which nothing could induce him to
         tolerate.
                         Harold Laski, Essay in Freedom of Expression



Monday, March 14, 2011
I am not, indeed, sure whether it is not
         true to say that the Milton who once
         seemed not unlike a seventeenth-century
         Shelley had not become, out of an
         experience ever more bitter in each year,
         more alien to the founder of that Jesuit
         sect which nothing could induce him to
         tolerate.




Monday, March 14, 2011
I am not, indeed, sure whether it is not
         true to say that the Milton who once
         seemed not unlike a seventeenth-century
         Shelley had not become, out of an
         experience ever more bitter in each year,
         more alien to the founder of that Jesuit
         sect which nothing could induce him to
         tolerate.




Monday, March 14, 2011
1. Never use a metaphor, simile, or
               other figure of speech which you
               are used to seeing in print.




Monday, March 14, 2011
2. Never use a long word where a
               short one will do.




Monday, March 14, 2011
3. If it is possible to cut a word
               out, always cut it out.




Monday, March 14, 2011
4. Never use the passive where
               you can use the active.




Monday, March 14, 2011
5. Never use a foreign phrase, a
               scientific word, or a jargon word if
               you can think of an everyday
               English equivalent.




Monday, March 14, 2011
6. Break any of these rules sooner
               than say anything outright
               barbarous.




Monday, March 14, 2011
clear writing ➡ clear thinking




Monday, March 14, 2011
bad writing ➡ bad thinking




Monday, March 14, 2011
bad writing ➡ bad thinking

       ➡ totalitarianism




Monday, March 14, 2011
What is
                 good programming?



Monday, March 14, 2011
minimalism




Monday, March 14, 2011
Defining
                         complex processes



Monday, March 14, 2011
minimalism




Monday, March 14, 2011
clear,
                         direct writing



Monday, March 14, 2011
1. Always take the simplest approach
               to a problem.




Monday, March 14, 2011
2. Clever code is bad code.




Monday, March 14, 2011
module ApplicationHelper
        def me?(user=@user)
          returning(user == current_user) do |me|
            yield if me && block_given?
          end
        end
      end




Monday, March 14, 2011
<% me?(@user) do %>
                           <p><%= @user.private_info %></p>
                         <% end %>




Monday, March 14, 2011
module ApplicationHelper
        def me?(user=@user)
          returning(user == current_user) do |me|
            yield if me && block_given?
          end
        end
      end




Monday, March 14, 2011
module ApplicationHelper
         def me?(user)
           yield if user == current_user
         end
       end




Monday, March 14, 2011
3. Any code that isn’t doing
               something is harming your project.




Monday, March 14, 2011
4. Accept constraints.




Monday, March 14, 2011
5. If it isn’t local business logic, it
               should be a library.




Monday, March 14, 2011
view -> controller -> model




Monday, March 14, 2011
model -> library -> open library




Monday, March 14, 2011
6. Don’t over-abstract.




Monday, March 14, 2011
@user.groups.map(&:name).to_sentence




Monday, March 14, 2011
class User
             def group_list
               group_names = groups.map do |group|
                 group.name
               end

               group_names.to_sentence
             end
           end




Monday, March 14, 2011
admin_roles.include?(@user.role) ? @user.groups.map {|g|
g.name }.sort_by(&:name).to_sentence : @user.groups.select {|g|
g.public? }.map {|g| g.name }.sort_by(&:name).to_sentence




Monday, March 14, 2011
7. Always actively clean up.
               Constantly.




Monday, March 14, 2011
map.connect ':controller/:action/:id.:format'

  has_and_belongs_to_many :roles

  start_form_tag activate_users_url




Monday, March 14, 2011
Monday, March 14, 2011
8. Apply these rules wisely.




Monday, March 14, 2011
9. Simple code is beautiful.




Monday, March 14, 2011
10. Break hard problems down.




Monday, March 14, 2011
Defining
                         complex processes



Monday, March 14, 2011
http://www.flickr.com/photos/seattlemunicipalarchives/4818952324/
Monday, March 14, 2011
Monday, March 14, 2011
Monday, March 14, 2011
flight.book_flight_for(customer)




Monday, March 14, 2011
def book_flight_for(customer)
     reserve_flight_for(customer)
     customer.charge(cost)
     customer.notify(details)
   end




Monday, March 14, 2011
def reserve_flight_for(customer)
     if flight.available?
       mark_flight_reserved_for(customer)
     end
   end




Monday, March 14, 2011
def charge(cost)
     ...
   end




Monday, March 14, 2011
def notify(details)
     ...
   end




Monday, March 14, 2011
10. Break hard problems down.




Monday, March 14, 2011
Consume




Monday, March 14, 2011
Study




Monday, March 14, 2011
Produce




Monday, March 14, 2011
you have a
                         programming style



Monday, March 14, 2011
make it better




Monday, March 14, 2011
minimal




Monday, March 14, 2011
clear




Monday, March 14, 2011
direct




Monday, March 14, 2011
effective




Monday, March 14, 2011
beautiful




Monday, March 14, 2011
write beautiful code




Monday, March 14, 2011
Jon Dahl
                                 @jondahl
                         jon@zencoder.com




Monday, March 14, 2011

More Related Content

Viewers also liked

Minimalism project
Minimalism projectMinimalism project
Minimalism project
modlit
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled Presentation
cloudonsky
 
Minimalism powerpoint
Minimalism powerpointMinimalism powerpoint
Minimalism powerpoint
Eric Devey
 
Minimalism powerpoint full
Minimalism powerpoint fullMinimalism powerpoint full
Minimalism powerpoint full
10polarbears
 

Viewers also liked (20)

Voshchana Mariia T-2-10. question № 8
Voshchana Mariia T-2-10. question № 8Voshchana Mariia T-2-10. question № 8
Voshchana Mariia T-2-10. question № 8
 
Black Noi
Black NoiBlack Noi
Black Noi
 
Minimalism project
Minimalism projectMinimalism project
Minimalism project
 
Mod lit minimalism
Mod lit  minimalismMod lit  minimalism
Mod lit minimalism
 
Minimalism
MinimalismMinimalism
Minimalism
 
Minimalism
MinimalismMinimalism
Minimalism
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled Presentation
 
Housing architecture & poetry 26.07.11
Housing architecture & poetry 26.07.11Housing architecture & poetry 26.07.11
Housing architecture & poetry 26.07.11
 
Minimalism
MinimalismMinimalism
Minimalism
 
Minimalism powerpoint
Minimalism powerpointMinimalism powerpoint
Minimalism powerpoint
 
Strange Loop 2009 Keynote: Minimalism in Computing
Strange Loop 2009 Keynote: Minimalism in ComputingStrange Loop 2009 Keynote: Minimalism in Computing
Strange Loop 2009 Keynote: Minimalism in Computing
 
MINIMALISM
MINIMALISMMINIMALISM
MINIMALISM
 
Minimalism- study of an art movement
Minimalism- study of an art movementMinimalism- study of an art movement
Minimalism- study of an art movement
 
minimalism
minimalismminimalism
minimalism
 
Ms4 file 4 then and now- with atf & aef competencies
Ms4 file 4   then and now- with atf & aef competenciesMs4 file 4   then and now- with atf & aef competencies
Ms4 file 4 then and now- with atf & aef competencies
 
Minimalist design
Minimalist designMinimalist design
Minimalist design
 
Minimalism
MinimalismMinimalism
Minimalism
 
Flat Design - A Primer
Flat Design - A PrimerFlat Design - A Primer
Flat Design - A Primer
 
Minimalism powerpoint full
Minimalism powerpoint fullMinimalism powerpoint full
Minimalism powerpoint full
 
Modern Architecture History
Modern Architecture HistoryModern Architecture History
Modern Architecture History
 

Similar to Programming and Minimalism: Lessons from Orwell and the Clash

Similar to Programming and Minimalism: Lessons from Orwell and the Clash (20)

Think like an ant, distribute the workload - PhpDay, Italy, 2011
Think like an ant, distribute the workload - PhpDay, Italy, 2011Think like an ant, distribute the workload - PhpDay, Italy, 2011
Think like an ant, distribute the workload - PhpDay, Italy, 2011
 
How to start a studio in Berlin
How to start a studio in BerlinHow to start a studio in Berlin
How to start a studio in Berlin
 
How to speed-code a success story
How to speed-code a success storyHow to speed-code a success story
How to speed-code a success story
 
Social web facts & figures
Social web   facts & figuresSocial web   facts & figures
Social web facts & figures
 
Benjamin Button Effect July 2011
Benjamin Button Effect July 2011Benjamin Button Effect July 2011
Benjamin Button Effect July 2011
 
Sinsai.info Global ICT summit
Sinsai.info   Global ICT summitSinsai.info   Global ICT summit
Sinsai.info Global ICT summit
 
Communication in Today's World
Communication in Today's WorldCommunication in Today's World
Communication in Today's World
 
MMMM
MMMMMMMM
MMMM
 
Mastery of service
Mastery of serviceMastery of service
Mastery of service
 
Using OverDrive with iOS
Using OverDrive with iOSUsing OverDrive with iOS
Using OverDrive with iOS
 
Comma 7 easysteps
Comma 7 easystepsComma 7 easysteps
Comma 7 easysteps
 
Guy Kawasaki's Enchantment Presentation
Guy Kawasaki's Enchantment PresentationGuy Kawasaki's Enchantment Presentation
Guy Kawasaki's Enchantment Presentation
 
Apr1 Laurel Highlands_Molly Foley
Apr1 Laurel Highlands_Molly FoleyApr1 Laurel Highlands_Molly Foley
Apr1 Laurel Highlands_Molly Foley
 
Humanity for better business
Humanity for better businessHumanity for better business
Humanity for better business
 
Spectrum of IT BPO Services in the Philippines
Spectrum of IT BPO Services in the PhilippinesSpectrum of IT BPO Services in the Philippines
Spectrum of IT BPO Services in the Philippines
 
Ronnieovergoor weekvandeondernemer - part1
Ronnieovergoor   weekvandeondernemer - part1Ronnieovergoor   weekvandeondernemer - part1
Ronnieovergoor weekvandeondernemer - part1
 
Linking: Making Data Open and Useful
Linking: Making Data Open and UsefulLinking: Making Data Open and Useful
Linking: Making Data Open and Useful
 
Linking: Making Data Open and Useful
Linking: Making Data Open and UsefulLinking: Making Data Open and Useful
Linking: Making Data Open and Useful
 
Behind The Brandtag
Behind The BrandtagBehind The Brandtag
Behind The Brandtag
 
SJSD New Teacher Day 1: 2011
SJSD New Teacher Day 1: 2011SJSD New Teacher Day 1: 2011
SJSD New Teacher Day 1: 2011
 

More from Jonathan Dahl

Advanced API Design: how an awesome API can help you make friends, get rich, ...
Advanced API Design: how an awesome API can help you make friends, get rich, ...Advanced API Design: how an awesome API can help you make friends, get rich, ...
Advanced API Design: how an awesome API can help you make friends, get rich, ...
Jonathan Dahl
 

More from Jonathan Dahl (9)

The impact of encoding on content delivery: four ways to optimize video quality
The impact of encoding on content delivery: four ways to optimize video qualityThe impact of encoding on content delivery: four ways to optimize video quality
The impact of encoding on content delivery: four ways to optimize video quality
 
Designing Great APIs: Learning from Jony Ive, Orwell, and the Kano Model
Designing Great APIs: Learning from Jony Ive, Orwell, and the Kano ModelDesigning Great APIs: Learning from Jony Ive, Orwell, and the Kano Model
Designing Great APIs: Learning from Jony Ive, Orwell, and the Kano Model
 
Advanced API Design: how an awesome API can help you make friends, get rich, ...
Advanced API Design: how an awesome API can help you make friends, get rich, ...Advanced API Design: how an awesome API can help you make friends, get rich, ...
Advanced API Design: how an awesome API can help you make friends, get rich, ...
 
Advanced API Design: how an awesome API can attract friends, make you rich, a...
Advanced API Design: how an awesome API can attract friends, make you rich, a...Advanced API Design: how an awesome API can attract friends, make you rich, a...
Advanced API Design: how an awesome API can attract friends, make you rich, a...
 
Aristotle and the Art of Software Development (Agile 2009)
Aristotle and the Art of Software Development (Agile 2009)Aristotle and the Art of Software Development (Agile 2009)
Aristotle and the Art of Software Development (Agile 2009)
 
Rails and alternative ORMs
Rails and alternative ORMsRails and alternative ORMs
Rails and alternative ORMs
 
Aristotle and the Art of Software Development
Aristotle and the Art of Software DevelopmentAristotle and the Art of Software Development
Aristotle and the Art of Software Development
 
EC2, MapReduce, and Distributed Processing
EC2, MapReduce, and Distributed ProcessingEC2, MapReduce, and Distributed Processing
EC2, MapReduce, and Distributed Processing
 
Asynchronous Processing with Ruby on Rails (RailsConf 2008)
Asynchronous Processing with Ruby on Rails (RailsConf 2008)Asynchronous Processing with Ruby on Rails (RailsConf 2008)
Asynchronous Processing with Ruby on Rails (RailsConf 2008)
 

Recently uploaded

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Recently uploaded (20)

The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 

Programming and Minimalism: Lessons from Orwell and the Clash