Designing code

58
Ordered List Steve Smith Great Lakes Ruby Bash, Lansing MI April 17, 2010 Designing Code Beautiful, simple, and usable text.

description

Learn to design clean, beautiful, and usable code.

Transcript of Designing code

Page 1: Designing code

Ordered ListSteve SmithGreat Lakes Ruby Bash, Lansing MI

April 17, 2010

Designing CodeBeautiful, simple, and usable text.

Page 2: Designing code

Things to Cover1. Why design your code?

2. Balance

3. Clarity

4. Harmony

5. Wrap Up

Page 3: Designing code

Why Design Code?Reasons to care about beauty.

Page 4: Designing code

“Robert L. Peters

Design is the application of intent - the opposite of happenstance, and an antidote to accident.

Page 5: Designing code

Your Own SanityDesign for

Page 6: Designing code

Future GrowthDesign for

Page 7: Designing code

User ExperienceDesign for the

Page 8: Designing code

Things to Cover1. Why design your code?

2. Balance

3. Clarity

4. Harmony

5. Wrap Up

Page 9: Designing code

BalanceAlignment and Order

Page 10: Designing code

Increase ScanabilityBalance Using Grids to

Page 11: Designing code
Page 12: Designing code
Page 13: Designing code
Page 14: Designing code
Page 15: Designing code

config.gem 'bcrypt-ruby', :lib => 'bcrypt', :version => '2.1.1'config.gem 'RedCloth', :lib => 'redcloth', :version => '4.2.2'config.gem 'mongo_ext', :lib => false, :version => '0.19.1'config.gem 'will_paginate', :version => '2.3.11'config.gem 'state_machine', :version => '0.8.0'config.gem 'newrelic_rpm', :version => '2.10.6'config.gem 'mongo_mapper', :version => '0.7.1'config.gem 'mime-types', :lib => 'mime/types'config.gem 'exceptional', :version => '2.0.1'config.gem 'rspreedly', :version => '0.1.11'config.gem 'multipass', :version => '1.1.4'config.gem 'defensio', :version => '0.9.1'config.gem 'sanitize', :version => '1.1'config.gem 'maruku', :version => '0.6.0'config.gem 'faker', :version => '0.3.1'config.gem 'navvy', :version => '0.1.0'config.gem 'less', :version => '1.2.21'config.gem 'wand', :version => '0.2.1'config.gem 'rio', :version => '0.4.1'

Page 16: Designing code

LucidityBalance Method Sizes for

Page 17: Designing code
Page 18: Designing code
Page 19: Designing code

Things to Cover1. Why design your code?

2. Balance

3. Clarity

4. Harmony

5. Wrap Up

Page 20: Designing code

ClaritySimplicity and Understanding

Page 21: Designing code

Consistent NamesClarify Using

Page 22: Designing code

class Post key :title, Stringend

class Category key :name, Stringend

class Theme key :moniker, Stringend

Page 23: Designing code

class Post key :title, Stringend

class Category key :title, Stringend

class Theme key :title, Stringend

Page 24: Designing code

class Site key :authorizations, Array def add_authorization(user) # do stuff endend

class Account key :memberships, Array def add_membership(user) # do stuff endend

Page 25: Designing code

class Site key :authorizations, Array def add_user(user) # do stuff endend

class Account key :memberships, Array def add_user(user) # do stuff endend

Page 26: Designing code

Positive GrammarClarify Using

Page 27: Designing code

class User include MongoMapper::Document key :name, String key :email, String key :inactive, Boolean, :default => false

end

Page 28: Designing code

class User include MongoMapper::Document key :name, String key :email, String key :inactive, Boolean, :default => false

def active? !inactive? end

end

Page 29: Designing code

class User include MongoMapper::Document key :name, String key :email, String key :inactive, Boolean, :default => false

def active? !inactive? end

def activate! self.inactive = false end

end

Page 30: Designing code

class User include MongoMapper::Document key :name, String key :email, String key :active, Boolean, :default => true

end

Page 31: Designing code

class User include MongoMapper::Document key :name, String key :email, String key :active, Boolean, :default => true def inactive? !active? end end

Page 32: Designing code

class User include MongoMapper::Document key :name, String key :email, String key :active, Boolean, :default => true def inactive? !active? end

def activate! self.active = true end end

Page 33: Designing code

Method ExtractionClarify Using

Page 34: Designing code

def do_something_important if foo? && foo == bar && baz != wik # do something endend

Page 35: Designing code

def do_something_important # are specific conditions met? if foo? && foo == bar && baz != wik # do something endend

Page 36: Designing code

def do_something_important if conditions_met? # do something endend

def conditions_met? foo? && foo == bar && baz != wikend

Page 37: Designing code

Things to Cover1. Why design your code?

2. Balance

3. Clarity

4. Harmony

5. Wrap Up

Page 38: Designing code

HarmonyIntegration and Experience

Page 39: Designing code

IntegrationHarmonize with

Page 40: Designing code

End User Application

Your Code

Page 41: Designing code

End User Application

Your Code

WARNING

Page 42: Designing code

End User Application

Your Code

Page 43: Designing code

User ExperienceHarmonize with

Page 44: Designing code

“Alan Perlis

Simplicity does not precede complexity, but follows it.

Page 45: Designing code

<title> Project Title - Portfolio - Ordered List</title>

Page 46: Designing code

item.breadcrumbOur First Thought

Page 47: Designing code

<title> {{ item.breadcrumb | map: 'title' | join: ' - ' }}</title>

Page 48: Designing code

Too Much CodeOur Next Thought

Page 49: Designing code

{% title %}

Page 50: Designing code

<title> Project Title - Portfolio - Ordered List</title>

Page 51: Designing code

{% title '//' %}

Page 52: Designing code

<title> Project Title // Portfolio // Ordered List</title>

Page 53: Designing code

Things to Cover1. Why design your code?

2. Balance

3. Clarity

4. Harmony

5. Wrap Up

Page 54: Designing code

Wrapping UpA Few Takeaways

Page 55: Designing code

Write, Then SimplifyWrite, Then Simplify, then

Page 56: Designing code

Design the ExperienceBefore You Write the Code

Page 57: Designing code

Simplicity WinsRemember that

Page 58: Designing code

Ordered List

Thank [email protected]

Steve SmithGreat Lakes Ruby Bash, Lansing MIApril 17, 2010

@orderedlist