Slide 1

Slide 1 text

@fredwu Development Team Lead 1 Saturday, 17 November 12

Slide 2

Slide 2 text

“BECOME A BETTER DEVELOPER YOU CAN” - Yoda 2 Saturday, 17 November 12

Slide 3

Slide 3 text

MY BACKGROUND 3 Saturday, 17 November 12

Slide 4

Slide 4 text

4 Saturday, 17 November 12

Slide 5

Slide 5 text

4 Saturday, 17 November 12

Slide 6

Slide 6 text

• 1997 Got my first computer (Intel Pentium MMX 166Mhz) 4 Saturday, 17 November 12

Slide 7

Slide 7 text

• 1997 Got my first computer (Intel Pentium MMX 166Mhz) • 1997 Started using BBS (上海热线) and the Internet via 33.6Kbps modem 4 Saturday, 17 November 12

Slide 8

Slide 8 text

• 1997 Got my first computer (Intel Pentium MMX 166Mhz) • 1997 Started using BBS (上海热线) and the Internet via 33.6Kbps modem • 1997 Made my first ever HTML web page in Microsoft Frontpage Express 4 Saturday, 17 November 12

Slide 9

Slide 9 text

• 1997 Got my first computer (Intel Pentium MMX 166Mhz) • 1997 Started using BBS (上海热线) and the Internet via 33.6Kbps modem • 1997 Made my first ever HTML web page in Microsoft Frontpage Express • 1998 Moved to Australia 4 Saturday, 17 November 12

Slide 10

Slide 10 text

• 1997 Got my first computer (Intel Pentium MMX 166Mhz) • 1997 Started using BBS (上海热线) and the Internet via 33.6Kbps modem • 1997 Made my first ever HTML web page in Microsoft Frontpage Express • 1998 Moved to Australia • 2001 Started playing with Perl (雷傲), ASP (动⺴⽹网) and PHP (Discuz!) forum software 4 Saturday, 17 November 12

Slide 11

Slide 11 text

• 1997 Got my first computer (Intel Pentium MMX 166Mhz) • 1997 Started using BBS (上海热线) and the Internet via 33.6Kbps modem • 1997 Made my first ever HTML web page in Microsoft Frontpage Express • 1998 Moved to Australia • 2001 Started playing with Perl (雷傲), ASP (动⺴⽹网) and PHP (Discuz!) forum software • 2004 Started learning PHP and JavaScript in TAFE (pre-university bridge) 4 Saturday, 17 November 12

Slide 12

Slide 12 text

• 1997 Got my first computer (Intel Pentium MMX 166Mhz) • 1997 Started using BBS (上海热线) and the Internet via 33.6Kbps modem • 1997 Made my first ever HTML web page in Microsoft Frontpage Express • 1998 Moved to Australia • 2001 Started playing with Perl (雷傲), ASP (动⺴⽹网) and PHP (Discuz!) forum software • 2004 Started learning PHP and JavaScript in TAFE (pre-university bridge) • 2006 Started working part-time as a junior developer whilst studying in university 4 Saturday, 17 November 12

Slide 13

Slide 13 text

• 1997 Got my first computer (Intel Pentium MMX 166Mhz) • 1997 Started using BBS (上海热线) and the Internet via 33.6Kbps modem • 1997 Made my first ever HTML web page in Microsoft Frontpage Express • 1998 Moved to Australia • 2001 Started playing with Perl (雷傲), ASP (动⺴⽹网) and PHP (Discuz!) forum software • 2004 Started learning PHP and JavaScript in TAFE (pre-university bridge) • 2006 Started working part-time as a junior developer whilst studying in university • 2006 Discovered Ruby and Ruby on Rails, and switched to OS X because of Textmate 4 Saturday, 17 November 12

Slide 14

Slide 14 text

• 1997 Got my first computer (Intel Pentium MMX 166Mhz) • 1997 Started using BBS (上海热线) and the Internet via 33.6Kbps modem • 1997 Made my first ever HTML web page in Microsoft Frontpage Express • 1998 Moved to Australia • 2001 Started playing with Perl (雷傲), ASP (动⺴⽹网) and PHP (Discuz!) forum software • 2004 Started learning PHP and JavaScript in TAFE (pre-university bridge) • 2006 Started working part-time as a junior developer whilst studying in university • 2006 Discovered Ruby and Ruby on Rails, and switched to OS X because of Textmate • 2008 Started professionally as a web developer (HTML, CSS, PHP and JavaScript) 4 Saturday, 17 November 12

Slide 15

Slide 15 text

• 1997 Got my first computer (Intel Pentium MMX 166Mhz) • 1997 Started using BBS (上海热线) and the Internet via 33.6Kbps modem • 1997 Made my first ever HTML web page in Microsoft Frontpage Express • 1998 Moved to Australia • 2001 Started playing with Perl (雷傲), ASP (动⺴⽹网) and PHP (Discuz!) forum software • 2004 Started learning PHP and JavaScript in TAFE (pre-university bridge) • 2006 Started working part-time as a junior developer whilst studying in university • 2006 Discovered Ruby and Ruby on Rails, and switched to OS X because of Textmate • 2008 Started professionally as a web developer (HTML, CSS, PHP and JavaScript) • 2010 Started programming in Ruby full time (mostly) 4 Saturday, 17 November 12

Slide 16

Slide 16 text

• 1997 Got my first computer (Intel Pentium MMX 166Mhz) • 1997 Started using BBS (上海热线) and the Internet via 33.6Kbps modem • 1997 Made my first ever HTML web page in Microsoft Frontpage Express • 1998 Moved to Australia • 2001 Started playing with Perl (雷傲), ASP (动⺴⽹网) and PHP (Discuz!) forum software • 2004 Started learning PHP and JavaScript in TAFE (pre-university bridge) • 2006 Started working part-time as a junior developer whilst studying in university • 2006 Discovered Ruby and Ruby on Rails, and switched to OS X because of Textmate • 2008 Started professionally as a web developer (HTML, CSS, PHP and JavaScript) • 2010 Started programming in Ruby full time (mostly) • 2010 Started contributing to many open source ruby projects, including Ruby on Rails 4 Saturday, 17 November 12

Slide 17

Slide 17 text

AUSTRALIA HAS A STRONG RUBY COMMUNITY 5 Saturday, 17 November 12

Slide 18

Slide 18 text

6 Saturday, 17 November 12

Slide 19

Slide 19 text

Dr Nic Williams Author of Rails Textmate bundle, works at Engine Yard Ryan Bigg Author of Rails 3 in Action, 2011 Ruby Hero Pat Allan Author of Thinking Sphinx, 2009 Ruby Hero Xavier Shay Author of Cane and Enki, works at Square Ben Schwarz Member of W3C’s CSS Working Group Darcy Laycock Author of API Smith, 2011 Ruby Hero Justin French Author of Formtastic Daniel Neighman Author of Warden, works at Square Ben Hoskings Author of Babushka Marcus Crafter Author of Sprinkle Charlie Somerville Author of Slash language, a talented 18 year old! Jack Chen (Chendo) Contributor to iTerm2 Mikel Lindsaar Author of Mail, rails core committer John Barton Cofounder of Goodfil.ms, dev manager of Envato for 3+ years Paul Annesley Built 99designs, works at SitePoint Gareth Townsend Founder of Melbourne Cocoaheads Ivan Vanderbyl Founder of Crashlog Glen Maddern Cofounder of Goodfil.ms Alan Harper Author of Rubyzip James Healy Author of PDF::Reader, maintainer of Prawn Florian Hanke Author of Picky 6 Saturday, 17 November 12

Slide 20

Slide 20 text

DISCLAIMER I am still a n00b. ⼩小⼩小菜⻦鸟。 But I care, so I share. 抛砖引⽟玉。 7 Saturday, 17 November 12

Slide 21

Slide 21 text

THOUGHTS ON SOFTWARE DEVELOPMENT 8 Saturday, 17 November 12

Slide 22

Slide 22 text

THOUGHTS ON SOFTWARE DEVELOPMENT • Second system syndrome - avoid total rewrites. 第⼆二系统综合症——避免重写。 8 Saturday, 17 November 12

Slide 23

Slide 23 text

THOUGHTS ON SOFTWARE DEVELOPMENT • Second system syndrome - avoid total rewrites. 第⼆二系统综合症——避免重写。 • Software engineering is like playing Starcraft - always check your mini-map. 软件⼯工程有如星际争霸——需经常关注迷你地图,以⼤大局为重。 8 Saturday, 17 November 12

Slide 24

Slide 24 text

THOUGHTS ON SOFTWARE DEVELOPMENT • Second system syndrome - avoid total rewrites. 第⼆二系统综合症——避免重写。 • Software engineering is like playing Starcraft - always check your mini-map. 软件⼯工程有如星际争霸——需经常关注迷你地图,以⼤大局为重。 • Experience is as important as talent, if not more important. 经验与天赋同重要。 8 Saturday, 17 November 12

Slide 25

Slide 25 text

THOUGHTS ON SOFTWARE DEVELOPMENT • Second system syndrome - avoid total rewrites. 第⼆二系统综合症——避免重写。 • Software engineering is like playing Starcraft - always check your mini-map. 软件⼯工程有如星际争霸——需经常关注迷你地图,以⼤大局为重。 • Experience is as important as talent, if not more important. 经验与天赋同重要。 • Technical debt is a debt, the longer you wait, the more interests you pay. 技术债务——拖⽋欠越久,偿还越多。 8 Saturday, 17 November 12

Slide 26

Slide 26 text

THOUGHTS ON SOFTWARE DEVELOPMENT • Second system syndrome - avoid total rewrites. 第⼆二系统综合症——避免重写。 • Software engineering is like playing Starcraft - always check your mini-map. 软件⼯工程有如星际争霸——需经常关注迷你地图,以⼤大局为重。 • Experience is as important as talent, if not more important. 经验与天赋同重要。 • Technical debt is a debt, the longer you wait, the more interests you pay. 技术债务——拖⽋欠越久,偿还越多。 • Choose the application architecture wisely. 谨慎选择软件架构。 8 Saturday, 17 November 12

Slide 27

Slide 27 text

APPLICATION ARCHITECTURE SHOWCASE 9 Saturday, 17 November 12

Slide 28

Slide 28 text

APPLICATION ARCHITECTURE SHOWCASE • We need a profile system to hold user data. ⽤用户帐户系统。 9 Saturday, 17 November 12

Slide 29

Slide 29 text

APPLICATION ARCHITECTURE SHOWCASE • We need a profile system to hold user data. ⽤用户帐户系统。 • The profile system will potentially be used standalone. ⽤用户帐户系统未来可能会被独⽴立使⽤用。 9 Saturday, 17 November 12

Slide 30

Slide 30 text

APPLICATION ARCHITECTURE SHOWCASE • We need a profile system to hold user data. ⽤用户帐户系统。 • The profile system will potentially be used standalone. ⽤用户帐户系统未来可能会被独⽴立使⽤用。 • We need plugin-able “modules”. 需可插⼊入式模块系统。 9 Saturday, 17 November 12

Slide 31

Slide 31 text

APPLICATION ARCHITECTURE SHOWCASE • We need a profile system to hold user data. ⽤用户帐户系统。 • The profile system will potentially be used standalone. ⽤用户帐户系统未来可能会被独⽴立使⽤用。 • We need plugin-able “modules”. 需可插⼊入式模块系统。 • There will potentially be 3rd party modules. 未来可能会有第三⽅方开发的模块。 9 Saturday, 17 November 12

Slide 32

Slide 32 text

APPLICATION ARCHITECTURE SHOWCASE • We need a profile system to hold user data. ⽤用户帐户系统。 • The profile system will potentially be used standalone. ⽤用户帐户系统未来可能会被独⽴立使⽤用。 • We need plugin-able “modules”. 需可插⼊入式模块系统。 • There will potentially be 3rd party modules. 未来可能会有第三⽅方开发的模块。 • Of course, the development timeline is tight. 开发周期很紧凑。 9 Saturday, 17 November 12

Slide 33

Slide 33 text

SOLUTION I THE PERFECT WAY Profile (API) Platform Module Module Module 10 Saturday, 17 November 12

Slide 34

Slide 34 text

PERFECT? NO! 11 Saturday, 17 November 12

Slide 35

Slide 35 text

PERFECT? NO! • Longer development time. 开发周期过⻓长。 11 Saturday, 17 November 12

Slide 36

Slide 36 text

PERFECT? NO! • Longer development time. 开发周期过⻓长。 • Can’t guarantee the usefulness of the API layer for 3rd party developers. 不可预知 API 层在未来是否还可有效利⽤用。 11 Saturday, 17 November 12

Slide 37

Slide 37 text

PERFECT? NO! • Longer development time. 开发周期过⻓长。 • Can’t guarantee the usefulness of the API layer for 3rd party developers. 不可预知 API 层在未来是否还可有效利⽤用。 • More complexity == more chances to screw up. 系统越复杂,越容易出错。 11 Saturday, 17 November 12

Slide 38

Slide 38 text

SOLUTION II THE EASY WAY Platform Profile Module Module Module 12 Saturday, 17 November 12

Slide 39

Slide 39 text

EASY, BUT FOR HOW LONG? 13 Saturday, 17 November 12

Slide 40

Slide 40 text

EASY, BUT FOR HOW LONG? • One app is more difficult to scale out. 单⼀一系统相对较难向外扩展。 13 Saturday, 17 November 12

Slide 41

Slide 41 text

EASY, BUT FOR HOW LONG? • One app is more difficult to scale out. 单⼀一系统相对较难向外扩展。 • It is also more difficult to assign tasks. 单⼀一系统相对较难安排团队成员任务。 13 Saturday, 17 November 12

Slide 42

Slide 42 text

EASY, BUT FOR HOW LONG? • One app is more difficult to scale out. 单⼀一系统相对较难向外扩展。 • It is also more difficult to assign tasks. 单⼀一系统相对较难安排团队成员任务。 • It is more likely to have leaky code. 单⼀一系统相对更难有效封装。 13 Saturday, 17 November 12

Slide 43

Slide 43 text

SOLUTION III THE CHOSEN WAY Profile (API) Platform Module Module Module 14 Saturday, 17 November 12

Slide 44

Slide 44 text

A BALANCED SOLUTION IS A GOOD SOLUTION 15 Saturday, 17 November 12

Slide 45

Slide 45 text

A BALANCED SOLUTION IS A GOOD SOLUTION • Don’t over-engineer. 避免过度⼯工程。 15 Saturday, 17 November 12

Slide 46

Slide 46 text

A BALANCED SOLUTION IS A GOOD SOLUTION • Don’t over-engineer. 避免过度⼯工程。 • Good degree of separation of concern. 注重关注点分离。 15 Saturday, 17 November 12

Slide 47

Slide 47 text

A BALANCED SOLUTION IS A GOOD SOLUTION • Don’t over-engineer. 避免过度⼯工程。 • Good degree of separation of concern. 注重关注点分离。 • Internal interfaces are easier than external APIs: 内部接⼝口相对外部 API 更易开发: ‣ @gateway ||= PlatformModuleGateway.new(args) ‣ mod = module_controller(module_name).new(args) ‣ mod.validate_input ‣ mod.render_view 15 Saturday, 17 November 12

Slide 48

Slide 48 text

OOPS! 16 Saturday, 17 November 12

Slide 49

Slide 49 text

OOPS! 17 Saturday, 17 November 12

Slide 50

Slide 50 text

CRAP PRINCIPLES 18 Saturday, 17 November 12

Slide 51

Slide 51 text

19 Saturday, 17 November 12

Slide 52

Slide 52 text

Contrast 对⽐比度 19 Saturday, 17 November 12

Slide 53

Slide 53 text

Contrast 对⽐比度 Repetition 重复度 19 Saturday, 17 November 12

Slide 54

Slide 54 text

Contrast 对⽐比度 Repetition 重复度 Alignment 排列度 19 Saturday, 17 November 12

Slide 55

Slide 55 text

Contrast 对⽐比度 Repetition 重复度 Alignment 排列度 Proximity 接近度 19 Saturday, 17 November 12

Slide 56

Slide 56 text

SOLID PRINCIPLES 20 Saturday, 17 November 12

Slide 57

Slide 57 text

21 Saturday, 17 November 12

Slide 58

Slide 58 text

Single responsibility 单⼀一责任 21 Saturday, 17 November 12

Slide 59

Slide 59 text

Single responsibility 单⼀一责任 Open/close 开闭 21 Saturday, 17 November 12

Slide 60

Slide 60 text

Single responsibility 单⼀一责任 Open/close 开闭 Liskov substitution ⾥里⽒氏替换 21 Saturday, 17 November 12

Slide 61

Slide 61 text

Single responsibility 单⼀一责任 Open/close 开闭 Liskov substitution ⾥里⽒氏替换 Interface segregation 接⼝口分离 21 Saturday, 17 November 12

Slide 62

Slide 62 text

Single responsibility 单⼀一责任 Open/close 开闭 Liskov substitution ⾥里⽒氏替换 Interface segregation 接⼝口分离 Dependency inversion 依赖倒置 21 Saturday, 17 November 12

Slide 63

Slide 63 text

FOUR SIMPLE RULES 22 Saturday, 17 November 12

Slide 64

Slide 64 text

23 Saturday, 17 November 12

Slide 65

Slide 65 text

Passes all the tests. 23 Saturday, 17 November 12

Slide 66

Slide 66 text

Passes all the tests. Contains no duplication. 23 Saturday, 17 November 12

Slide 67

Slide 67 text

Passes all the tests. Contains no duplication. Expresses the intent. 23 Saturday, 17 November 12

Slide 68

Slide 68 text

Passes all the tests. Contains no duplication. Expresses the intent. Minimises the number of classes and methods. 23 Saturday, 17 November 12

Slide 69

Slide 69 text

Until you have learnt Ruby first. DO NOT LEARN RAILS 24 Saturday, 17 November 12

Slide 70

Slide 70 text

Practice, Practice and Practice FAST TRACK 25 Saturday, 17 November 12

Slide 71

Slide 71 text

CONTRIBUTE TO OPEN SOURCE PROJECTS 26 Saturday, 17 November 12

Slide 72

Slide 72 text

CONTRIBUTE TO OPEN SOURCE PROJECTS • Reading code is just as important as writing code. 阅读代码与编写代码同重要。 26 Saturday, 17 November 12

Slide 73

Slide 73 text

CONTRIBUTE TO OPEN SOURCE PROJECTS • Reading code is just as important as writing code. 阅读代码与编写代码同重要。 • Learn from the masters. 向⼤大师们学习。 26 Saturday, 17 November 12

Slide 74

Slide 74 text

CONTRIBUTE TO OPEN SOURCE PROJECTS • Reading code is just as important as writing code. 阅读代码与编写代码同重要。 • Learn from the masters. 向⼤大师们学习。 • Take some, give some - sharing is awesome. 不断收获的同时,别忘了付出。 26 Saturday, 17 November 12

Slide 75

Slide 75 text

CONTRIBUTE TO OPEN SOURCE PROJECTS • Reading code is just as important as writing code. 阅读代码与编写代码同重要。 • Learn from the masters. 向⼤大师们学习。 • Take some, give some - sharing is awesome. 不断收获的同时,别忘了付出。 • Make things more useful for yourself therefore for others too. 对⾃自⼰己有⽤用的东⻄西,也许对他⼈人也有⽤用。 26 Saturday, 17 November 12

Slide 76

Slide 76 text

CONTRIBUTE TO OPEN SOURCE PROJECTS 26 Saturday, 17 November 12

Slide 77

Slide 77 text

CONTRIBUTE TO OPEN SOURCE PROJECTS 27 Saturday, 17 November 12

Slide 78

Slide 78 text

CONTRIBUTE TO OPEN SOURCE PROJECTS PHP CodeIgniter PHP Kohana PHP Vanilla Forums PHP Yii Framework JAVASCRIPT AutoSuggest RUBY Ruby on Rails RUBY RailsConfig RUBY Slim RUBY ORM Adapter RUBY Delayed Job RUBY Parallel Tests 27 Saturday, 17 November 12

Slide 79

Slide 79 text

OPEN SOURCE YOUR OWN WORK 28 Saturday, 17 November 12

Slide 80

Slide 80 text

OPEN SOURCE YOUR OWN WORK • Made something useful? Release it! 写了有⽤用的好玩意⼉儿?发布吧,勇敢的少年! 28 Saturday, 17 November 12

Slide 81

Slide 81 text

OPEN SOURCE YOUR OWN WORK • Made something useful? Release it! 写了有⽤用的好玩意⼉儿?发布吧,勇敢的少年! • Be critisied of your work, and learn from mistakes. 虚⼼心接受意⻅见与批评,由错误中学习。 28 Saturday, 17 November 12

Slide 82

Slide 82 text

OPEN SOURCE YOUR OWN WORK • Made something useful? Release it! 写了有⽤用的好玩意⼉儿?发布吧,勇敢的少年! • Be critisied of your work, and learn from mistakes. 虚⼼心接受意⻅见与批评,由错误中学习。 • Be proud of your work, and be recognised. 为⾃自⼰己的⾟辛苦成果感到⾃自豪。 28 Saturday, 17 November 12

Slide 83

Slide 83 text

OPEN SOURCE YOUR OWN WORK • Made something useful? Release it! 写了有⽤用的好玩意⼉儿?发布吧,勇敢的少年! • Be critisied of your work, and learn from mistakes. 虚⼼心接受意⻅见与批评,由错误中学习。 • Be proud of your work, and be recognised. 为⾃自⼰己的⾟辛苦成果感到⾃自豪。 • Make a little dent in the universe. ⼀一点⼩小⼩小的贡献的话,可以哟〜~ 28 Saturday, 17 November 12

Slide 84

Slide 84 text

OPEN SOURCE YOUR OWN WORK 28 Saturday, 17 November 12

Slide 85

Slide 85 text

OPEN SOURCE YOUR OWN WORK 29 Saturday, 17 November 12

Slide 86

Slide 86 text

OPEN SOURCE YOUR OWN WORK RUBY Action Throttler Throttle actions based on configurable duration and limit. RUBY Angel Nest An open source 'clone' of AngelList. RUBY API Taster Visually test your Rails application's API. RUBY AppReset Resets (and if available, seeds) your databases. RUBY Bustle Activities recording and retrieving using a simple Pub/Sub-like interface. RUBY Datamappify Turn ActiveRecord into DataMapper (sort of)! RUBY Haml2Slim Convert Haml templates to Slim templates. RUBY Inherited Resources Views DRY your view files! RUBY Ruby Decorators Ruby method decorators inspired by Python. RUBY Security Guard A collection of useful tools for auditing data. RUBY Slim Bundle A Textmate / Sublime Text bundle for Slim. PHP Authlite A lightweight, flexible Auth module for Kohana. PHP KThrottler Throttle actions based on configurable duration and limit. PHP PHamlP A bridge between Kohana and PHamlP. JAVASCRIPT Endless Scroll Endless / infinite scrolling solution for jQuery. JAVASCRIPT Inline Confirmation Less obtrusive confirmation dialogues. JAVASCRIPT Skinny Coffee Machine A simple state machine with observers. JAVASCRIPT Slideshow Lite A lightweight slideshow plugin for jQuery. 29 Saturday, 17 November 12

Slide 87

Slide 87 text

30 Saturday, 17 November 12

Slide 88

Slide 88 text

Credit: travis-ci.com 30 Saturday, 17 November 12

Slide 89

Slide 89 text

SLIM A Case Study 31 Saturday, 17 November 12

Slide 90

Slide 90 text

32 Saturday, 17 November 12

Slide 91

Slide 91 text

33 Saturday, 17 November 12

Slide 92

Slide 92 text

33 Saturday, 17 November 12

Slide 93

Slide 93 text

33 Saturday, 17 November 12

Slide 94

Slide 94 text

34 Saturday, 17 November 12

Slide 95

Slide 95 text

35 Saturday, 17 November 12

Slide 96

Slide 96 text

36 Saturday, 17 November 12

Slide 97

Slide 97 text

37 Saturday, 17 November 12

Slide 98

Slide 98 text

38 Saturday, 17 November 12

Slide 99

Slide 99 text

39 Saturday, 17 November 12

Slide 100

Slide 100 text

40 Saturday, 17 November 12

Slide 101

Slide 101 text

41 Saturday, 17 November 12

Slide 102

Slide 102 text

42 Saturday, 17 November 12

Slide 103

Slide 103 text

43 Saturday, 17 November 12

Slide 104

Slide 104 text

44 Saturday, 17 November 12

Slide 105

Slide 105 text

45 Saturday, 17 November 12

Slide 106

Slide 106 text

46 Saturday, 17 November 12

Slide 107

Slide 107 text

47 Saturday, 17 November 12

Slide 108

Slide 108 text

48 Saturday, 17 November 12

Slide 109

Slide 109 text

DO FREELANCE WORK 49 Saturday, 17 November 12

Slide 110

Slide 110 text

DO FREELANCE WORK • Like open source work, but with deadlines and pressure. 截⽌止期限与压⼒力。 49 Saturday, 17 November 12

Slide 111

Slide 111 text

DO FREELANCE WORK • Like open source work, but with deadlines and pressure. 截⽌止期限与压⼒力。 • Like open source work, but with some $$$. 赚点外快。 49 Saturday, 17 November 12

Slide 112

Slide 112 text

DO FREELANCE WORK • Like open source work, but with deadlines and pressure. 截⽌止期限与压⼒力。 • Like open source work, but with some $$$. 赚点外快。 • Be involved in projects different to those at your day job. 不同的项⺫⽬目体验与经验。 49 Saturday, 17 November 12

Slide 113

Slide 113 text

DO FREELANCE WORK • Like open source work, but with deadlines and pressure. 截⽌止期限与压⼒力。 • Like open source work, but with some $$$. 赚点外快。 • Be involved in projects different to those at your day job. 不同的项⺫⽬目体验与经验。 • Communication skills with your clients. 客户沟通经验。 49 Saturday, 17 November 12

Slide 114

Slide 114 text

DO FREELANCE WORK • Like open source work, but with deadlines and pressure. 截⽌止期限与压⼒力。 • Like open source work, but with some $$$. 赚点外快。 • Be involved in projects different to those at your day job. 不同的项⺫⽬目体验与经验。 • Communication skills with your clients. 客户沟通经验。 • Communication skills with your remote team members. 远程团队沟通经验。 49 Saturday, 17 November 12

Slide 115

Slide 115 text

DO FREELANCE WORK 49 Saturday, 17 November 12

Slide 116

Slide 116 text

AND LASTLY, YOUR DAY JOB 50 Saturday, 17 November 12

Slide 117

Slide 117 text

AND LASTLY, YOUR DAY JOB • You spend most of your hours awake at your day job, make it count! 50 Saturday, 17 November 12

Slide 118

Slide 118 text

AND LASTLY, YOUR DAY JOB • You spend most of your hours awake at your day job, make it count! • Know what you are looking for. 知道⾃自⼰己想要什么。 50 Saturday, 17 November 12

Slide 119

Slide 119 text

AND LASTLY, YOUR DAY JOB • You spend most of your hours awake at your day job, make it count! • Know what you are looking for. 知道⾃自⼰己想要什么。 • What can you get out of working at the company? 在这家公司⼯工作,能学习到什么? 50 Saturday, 17 November 12

Slide 120

Slide 120 text

AND LASTLY, YOUR DAY JOB • You spend most of your hours awake at your day job, make it count! • Know what you are looking for. 知道⾃自⼰己想要什么。 • What can you get out of working at the company? 在这家公司⼯工作,能学习到什么? • What did you get out of working at the company? 在这家公司⼯工作,学习到了什么? 50 Saturday, 17 November 12

Slide 121

Slide 121 text

AND LASTLY, YOUR DAY JOB 50 Saturday, 17 November 12

Slide 122

Slide 122 text

PERSONAL BRANDING 51 Saturday, 17 November 12

Slide 123

Slide 123 text

PERSONAL BRANDING • Designers have online portfolios, what about us developers? 51 Saturday, 17 November 12

Slide 124

Slide 124 text

PERSONAL BRANDING • Designers have online portfolios, what about us developers? • Blog - show me your thoughts! 51 Saturday, 17 November 12

Slide 125

Slide 125 text

PERSONAL BRANDING • Designers have online portfolios, what about us developers? • Blog - show me your thoughts! • Twitter/Weibo - show me your passion! 51 Saturday, 17 November 12

Slide 126

Slide 126 text

PERSONAL BRANDING • Designers have online portfolios, what about us developers? • Blog - show me your thoughts! • Twitter/Weibo - show me your passion! • GitHub - show me your code! 51 Saturday, 17 November 12

Slide 127

Slide 127 text

PERSONAL BRANDING • Designers have online portfolios, what about us developers? • Blog - show me your thoughts! • Twitter/Weibo - show me your passion! • GitHub - show me your code! • LinkedIn - show me your resume! 51 Saturday, 17 November 12

Slide 128

Slide 128 text

PERSONAL BRANDING 52 Saturday, 17 November 12

Slide 129

Slide 129 text

PERSONAL BRANDING • Build up your network 拓展交际圈 • Establish your reputation 树⽴立好名声 • People will endorse your work 让更多⼈人赞誉你的成果 52 Saturday, 17 November 12

Slide 130

Slide 130 text

53 Saturday, 17 November 12

Slide 131

Slide 131 text

We can talk the talk 53 Saturday, 17 November 12

Slide 132

Slide 132 text

LET’S WALK THE WALK We can talk the talk 53 Saturday, 17 November 12

Slide 133

Slide 133 text

54 Saturday, 17 November 12

Slide 134

Slide 134 text

How about a fun little task... 54 Saturday, 17 November 12

Slide 135

Slide 135 text

A SMALL CODE TEST How about a fun little task... 54 Saturday, 17 November 12

Slide 136

Slide 136 text

55 Saturday, 17 November 12

Slide 137

Slide 137 text

55 Saturday, 17 November 12

Slide 138

Slide 138 text

55 Saturday, 17 November 12

Slide 139

Slide 139 text

55 Saturday, 17 November 12

Slide 140

Slide 140 text

A BAD SOLUTION 56 Saturday, 17 November 12

Slide 141

Slide 141 text

A BAD SOLUTION 57 Saturday, 17 November 12

Slide 142

Slide 142 text

ANOTHER BAD SOLUTION 58 Saturday, 17 November 12

Slide 143

Slide 143 text

ANOTHER BAD SOLUTION 59 Saturday, 17 November 12

Slide 144

Slide 144 text

A GOOD SOLUTION 60 Saturday, 17 November 12

Slide 145

Slide 145 text

A GOOD SOLUTION 61 Saturday, 17 November 12

Slide 146

Slide 146 text

ANOTHER GOOD SOLUTION 62 Saturday, 17 November 12

Slide 147

Slide 147 text

ANOTHER GOOD SOLUTION 63 Saturday, 17 November 12

Slide 148

Slide 148 text

64 Saturday, 17 November 12

Slide 149

Slide 149 text

And behold, for a solution that... 64 Saturday, 17 November 12

Slide 150

Slide 150 text

BLOWS YOUR MIND ޵䙽੧໨ʂ And behold, for a solution that... 64 Saturday, 17 November 12

Slide 151

Slide 151 text

A 坑爹 SOLUTION 65 Saturday, 17 November 12

Slide 152

Slide 152 text

A 坑爹 SOLUTION 66 Saturday, 17 November 12

Slide 153

Slide 153 text

A 坑爹 SOLUTION 66 Saturday, 17 November 12

Slide 154

Slide 154 text

A 坑爹 SOLUTION 67 Saturday, 17 November 12

Slide 155

Slide 155 text

A 坑爹 SOLUTION 你妹啊! 67 Saturday, 17 November 12

Slide 156

Slide 156 text

68 Saturday, 17 November 12

Slide 157

Slide 157 text

Writing features is (usually) not enough... 68 Saturday, 17 November 12

Slide 158

Slide 158 text

WE NEED TESTS! Writing features is (usually) not enough... 68 Saturday, 17 November 12

Slide 159

Slide 159 text

69 Saturday, 17 November 12

Slide 160

Slide 160 text

“I get paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a given level of confidence.” -- Kent Beck 69 Saturday, 17 November 12

Slide 161

Slide 161 text

EFFECTIVE TESTS 70 Saturday, 17 November 12

Slide 162

Slide 162 text

EFFECTIVE TESTS 70 Saturday, 17 November 12

Slide 163

Slide 163 text

EFFECTIVE TESTS • They are describing ActiveRecord behaviours. 70 Saturday, 17 November 12

Slide 164

Slide 164 text

EFFECTIVE TESTS • They are describing ActiveRecord behaviours. • Allow mass assignments on foreign keys is wrong. 70 Saturday, 17 November 12

Slide 165

Slide 165 text

EFFECTIVE TESTS • They are describing ActiveRecord behaviours. • Allow mass assignments on foreign keys is wrong. • They are testing how methods are implemented. 70 Saturday, 17 November 12

Slide 166

Slide 166 text

EFFECTIVE TESTS • They are describing ActiveRecord behaviours. • Allow mass assignments on foreign keys is wrong. • They are testing how methods are implemented. • No confidence gained. 70 Saturday, 17 November 12

Slide 167

Slide 167 text

DE-DUPLICATE TEST CASES 71 Saturday, 17 November 12

Slide 168

Slide 168 text

DE-DUPLICATE TEST CASES 72 Saturday, 17 November 12

Slide 169

Slide 169 text

DE-DUPLICATE TEST CASES 72 Saturday, 17 November 12

Slide 170

Slide 170 text

DE-DUPLICATE TEST CASES 72 Saturday, 17 November 12

Slide 171

Slide 171 text

DE-DUPLICATE TEST CASES 72 Saturday, 17 November 12

Slide 172

Slide 172 text

REFACTOR IN THE WILD Improve code readability and maintainability 73 Saturday, 17 November 12

Slide 173

Slide 173 text

KEEP CONTROLLERS CLEAN 74 Saturday, 17 November 12

Slide 174

Slide 174 text

75 Saturday, 17 November 12

Slide 175

Slide 175 text

75 Saturday, 17 November 12

Slide 176

Slide 176 text

75 Saturday, 17 November 12

Slide 177

Slide 177 text

75 Saturday, 17 November 12

Slide 178

Slide 178 text

75 Saturday, 17 November 12

Slide 179

Slide 179 text

76 Saturday, 17 November 12

Slide 180

Slide 180 text

A MORE COMPLETE EXAMPLE 77 Saturday, 17 November 12

Slide 181

Slide 181 text

PROBLEM 78 Saturday, 17 November 12

Slide 182

Slide 182 text

PROBLEM • A user has many trips 78 Saturday, 17 November 12

Slide 183

Slide 183 text

PROBLEM • A user has many trips • Each trip may contain more than one stops, e.g. • Beijing -> Shanghai • Shanghai -> Hongkong 78 Saturday, 17 November 12

Slide 184

Slide 184 text

PROBLEM • A user has many trips • Each trip may contain more than one stops, e.g. • Beijing -> Shanghai • Shanghai -> Hongkong • We only want to display the first stop from each trip 78 Saturday, 17 November 12

Slide 185

Slide 185 text

79 Saturday, 17 November 12

Slide 186

Slide 186 text

79 Saturday, 17 November 12

Slide 187

Slide 187 text

79 Saturday, 17 November 12

Slide 188

Slide 188 text

79 Saturday, 17 November 12

Slide 189

Slide 189 text

79 Saturday, 17 November 12

Slide 190

Slide 190 text

79 Saturday, 17 November 12

Slide 191

Slide 191 text

79 Saturday, 17 November 12

Slide 192

Slide 192 text

79 Saturday, 17 November 12

Slide 193

Slide 193 text

79 Saturday, 17 November 12

Slide 194

Slide 194 text

80 Saturday, 17 November 12

Slide 195

Slide 195 text

80 Saturday, 17 November 12

Slide 196

Slide 196 text

81 Saturday, 17 November 12

Slide 197

Slide 197 text

81 Saturday, 17 November 12

Slide 198

Slide 198 text

A RUBY-CHINA EXAMPLE Albeit an old example, but nonetheless... 82 Saturday, 17 November 12

Slide 199

Slide 199 text

83 Saturday, 17 November 12

Slide 200

Slide 200 text

83 Saturday, 17 November 12

Slide 201

Slide 201 text

83 Saturday, 17 November 12

Slide 202

Slide 202 text

83 Saturday, 17 November 12

Slide 203

Slide 203 text

83 Saturday, 17 November 12

Slide 204

Slide 204 text

84 Saturday, 17 November 12

Slide 205

Slide 205 text

85 Saturday, 17 November 12

Slide 206

Slide 206 text

REFACTOR + OPEN SOURCE 86 Saturday, 17 November 12

Slide 207

Slide 207 text

IDENTIFY THE ISSUE 87 Saturday, 17 November 12

Slide 208

Slide 208 text

IDENTIFY THE ISSUE 87 Saturday, 17 November 12

Slide 209

Slide 209 text

ATTEMPT TO REFACTOR 88 Saturday, 17 November 12

Slide 210

Slide 210 text

ATTEMPT TO REFACTOR 88 Saturday, 17 November 12

Slide 211

Slide 211 text

ENCOUNTER UNEXPECTED PROBLEM 89 Saturday, 17 November 12

Slide 212

Slide 212 text

ENSURE CODE INTEGRITY 90 Saturday, 17 November 12

Slide 213

Slide 213 text

VERIFY THE ISSUE ELSEWHERE 91 Saturday, 17 November 12

Slide 214

Slide 214 text

BEGIN DEBUGGING... 92 Saturday, 17 November 12

Slide 215

Slide 215 text

TRACK DOWN THE CAUSE 93 Saturday, 17 November 12

Slide 216

Slide 216 text

TRACK DOWN THE CAUSE 93 Saturday, 17 November 12

Slide 217

Slide 217 text

FIX IT! 94 Saturday, 17 November 12

Slide 218

Slide 218 text

FIX IT! 94 Saturday, 17 November 12

Slide 219

Slide 219 text

ENSURE IT ACTUALLY WORKS 95 Saturday, 17 November 12

Slide 220

Slide 220 text

ENSURE IT ACTUALLY WORKS 95 Saturday, 17 November 12

Slide 221

Slide 221 text

ENSURE IT DIDN’T BREAK ANYTHING 96 Saturday, 17 November 12

Slide 222

Slide 222 text

PULL REQUEST 97 Saturday, 17 November 12

Slide 223

Slide 223 text

EMBRACE RUBY We are a fortunate bunch. 98 Saturday, 17 November 12

Slide 224

Slide 224 text

99 Saturday, 17 November 12

Slide 225

Slide 225 text

This portion of the slide is intentionally left blank. One function?! 100 Saturday, 17 November 12

Slide 226

Slide 226 text

THANK YOU! :-) 101 Saturday, 17 November 12