2016 前端潮玩意兒

141
2016 前端潮玩意兒 Maxis Kao | Oct. 12, 2016 >

Upload: maxis-kao

Post on 09-Jan-2017

124 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: 2016 前端潮玩意兒

2016 前端潮玩意兒

Maxis Kao | Oct. 12, 2016

> 潮

Page 2: 2016 前端潮玩意兒

Maxis Kao

➔ Software Engineer at Yahoo

➔ Top Hack of Yahoo TW/JP Joint Hackday

➔ Winner of Yahoo Bot Challenge

Page 3: 2016 前端潮玩意兒
Page 4: 2016 前端潮玩意兒
Page 5: 2016 前端潮玩意兒

全⺠民寫程式的年代

Page 6: 2016 前端潮玩意兒

2007

Page 7: 2016 前端潮玩意兒

C⼤大學第⼀一堂程式設計

Page 8: 2016 前端潮玩意兒
Page 9: 2016 前端潮玩意兒
Page 10: 2016 前端潮玩意兒
Page 11: 2016 前端潮玩意兒

2016

Page 12: 2016 前端潮玩意兒
Page 13: 2016 前端潮玩意兒
Page 14: 2016 前端潮玩意兒

   moveForward(100);      ...      ...  

Page 15: 2016 前端潮玩意兒

–Hadi Partovi (CEO of code.org)

“Drawing one line to finish a square isn't hard, it's not rocket science. And that's exactly the point.

That's how computer science starts”

Page 16: 2016 前端潮玩意兒

“Why JavaScript?”

Page 17: 2016 前端潮玩意兒

前端⼯工程師的守備範圍

Page 18: 2016 前端潮玩意兒

– Clay Liao

“瀏覽器 檢視原始碼 看到的東⻄西”

Page 19: 2016 前端潮玩意兒
Page 20: 2016 前端潮玩意兒
Page 21: 2016 前端潮玩意兒

前端三要素

• 串接資料

• 呈現介⾯面

• 使⽤用者互動

Page 22: 2016 前端潮玩意兒

“前端⼯工程師要具備怎樣的技能?”

Page 23: 2016 前端潮玩意兒
Page 24: 2016 前端潮玩意兒
Page 25: 2016 前端潮玩意兒
Page 26: 2016 前端潮玩意兒

科技樹

Page 28: 2016 前端潮玩意兒

程 序 猿 崛 起2016 Oct.

Page 29: 2016 前端潮玩意兒

⽯石器時代A beginner

Page 30: 2016 前端潮玩意兒

從 0 到 1 到 …• 敲個⼗十下就會有裂痕,再敲個⼗十下就會破掉

Page 31: 2016 前端潮玩意兒

從 0 到 1 到 …• 敲個⼗十下就會有裂痕,再敲個⼗十下就會破掉

• 敲五下就有裂痕,再敲五下就會破掉

Page 32: 2016 前端潮玩意兒
Page 33: 2016 前端潮玩意兒

前端 F2E• HTML

• CSS

• JavaScript

 <img  src="...">

 color:  red;

 onClick=“alert(‘hi’)”

Page 34: 2016 前端潮玩意兒

後⽯石器時代A user

Page 35: 2016 前端潮玩意兒

Need more …• 需求:⼀一天喝 10顆椰⼦子,漸漸的⼀一天就要喝掉 100 顆椰⼦子

Page 36: 2016 前端潮玩意兒

Need more …• 需求:⼀一天喝 10顆椰⼦子,漸漸的⼀一天就要喝掉 100 顆椰⼦子

• 加速:把五顆椰⼦子排好,爬到樹上丟下去⼀一次敲開

Page 37: 2016 前端潮玩意兒
Page 38: 2016 前端潮玩意兒

已知⽤用⽕火A developer

Page 39: 2016 前端潮玩意兒
Page 40: 2016 前端潮玩意兒

前端三進化

“Beginner / User / Developer”

Page 41: 2016 前端潮玩意兒

群雄割據

Page 42: 2016 前端潮玩意兒

如果你不幸剛好是前端⼯工程師...

Page 43: 2016 前端潮玩意兒

2006

2010

2011

2013

2014

React + Flux

Angular 2

Ember.js

Backbone.jsKnockout.js

Angular

2005jQueryYUI

Dojo

Vue.js

Page 44: 2016 前端潮玩意兒

什麼叫做「潮」

Page 45: 2016 前端潮玩意兒

定義「潮」就是「潮流」的簡稱,也就是跟上這個「時代的潮流」。

Page 46: 2016 前端潮玩意兒

⿊黑暗時代• JavaScript 只是拿來炫技

Page 47: 2016 前端潮玩意兒

$

Page 48: 2016 前端潮玩意兒

“jQuery”

since 2006

Page 49: 2016 前端潮玩意兒

jQuery• 鏈式語法,⼀一⾏行⽂文就是潮

$(world).find(‘.country’).focus();  

• 每個⼈人都是動畫⼤大神

• 跟 server 溝通根本順⼿手⽽而已

Page 50: 2016 前端潮玩意兒

jQuery• 鏈式語法,⼀一⾏行⽂文就是潮

$(world).find(‘.country’).focus();  

• 每個⼈人都是動畫⼤大神

$(element).find(‘.target’).fadeIn(300);  

• 跟 server 溝通根本順⼿手⽽而已

$(element).get(‘http://myapi.com’);

Page 51: 2016 前端潮玩意兒

jQuery• 鏈式語法,⼀一⾏行⽂文就是潮

$(world).find(‘.country’).focus();  

• 每個⼈人都是動畫⼤大神

$(element).find(‘.target’).fadeIn(300);  

• 跟 server 溝通像喝⽔水⼀一樣簡單

$.get(‘http://myapi.com’,  function(data){  ...  });

Page 52: 2016 前端潮玩意兒
Page 53: 2016 前端潮玩意兒

“Backbone.js”

since 2010

Page 54: 2016 前端潮玩意兒

2010: Backbone.js• 完整實現 MVC 架構

• 底層是 underscore.js

• 還可以跟 jQuery 無痛結合

Page 55: 2016 前端潮玩意兒

框架:略懂,略懂JavaScript Frameworks & Libraries

Page 56: 2016 前端潮玩意兒

MV Whatever

潮。框架

Page 57: 2016 前端潮玩意兒

最⾼高指導原則

• 適合的就是最好的

• 別被 Big Words 嚇跑

Page 58: 2016 前端潮玩意兒
Page 59: 2016 前端潮玩意兒

MVC

潮。框架

Page 60: 2016 前端潮玩意兒

定義軟體⼯工程中的⼀一種軟體架構模式,把系統分為三個部分:

模型(Model)、視圖(View)和控制器(Controller)

Page 61: 2016 前端潮玩意兒
Page 62: 2016 前端潮玩意兒

Why MVC• 降低邏輯跟資料的耦合:使程式某⼀一部分能夠重複被利⽤用

• 架構上分⼯工明確:簡化後續對程式的修改和功能擴充

Page 63: 2016 前端潮玩意兒

Problems• 花太多時間在處理 DOM

Page 64: 2016 前端潮玩意兒

https://jsbin.com/lakuxex/edit?html,js,output

Page 65: 2016 前端潮玩意兒

Problems• 花太多時間在處理 DOM

• 如果只處理⼀一邊?

• 改 HTML,JavaScript 也跟著動

• 改 JavaScript,HTML 也變了

Page 66: 2016 前端潮玩意兒

MVVM

潮。框架

Model-View-ViewModel

Page 67: 2016 前端潮玩意兒

定義軟體⼯工程中的⼀一種軟體架構模式,把系統分為三個部分:

使⽤用者介⾯面(View)

商業邏輯(ViewModel)

資料(Model)

Page 68: 2016 前端潮玩意兒
Page 69: 2016 前端潮玩意兒

“AngularJS”

since 2012

Page 70: 2016 前端潮玩意兒

MV Whatever

潮。框架

Page 71: 2016 前端潮玩意兒
Page 72: 2016 前端潮玩意兒

“React / Flux”

since 2013

Page 73: 2016 前端潮玩意兒

React

Page 74: 2016 前端潮玩意兒

– Pete Hunt

“Why did we build react”

Page 75: 2016 前端潮玩意兒
Page 76: 2016 前端潮玩意兒
Page 77: 2016 前端潮玩意兒

專⼼心做好⼀一件事• React is NOT an MVC framework

• 把 MVC 中的 View 做到極致

Page 78: 2016 前端潮玩意兒

元件化• React 的世界都是元件 (components)

• 盡量拆得夠細,細到可以重複使⽤用

• Isomorphic JavaScript

Page 79: 2016 前端潮玩意兒

<Image  />

<Card  />

<Text  color=“white”/>

<Text  color=“blue”/>

Page 80: 2016 前端潮玩意兒

Virtual DOM• DOM: Document Object Model

• Extremely FAST for re-render!

Page 81: 2016 前端潮玩意兒

“HTML is just the beginning.”

Page 82: 2016 前端潮玩意兒

FluxAPPLICATION ARCHITECTURE FOR BUILDING USER INTERFACES

Page 83: 2016 前端潮玩意兒

“MVC is good, why bother?”

Page 84: 2016 前端潮玩意兒
Page 85: 2016 前端潮玩意兒

• https://facebook.github.io/flux/

• 是設計模式 ( pattern ),不是框架 ( framework )

• Facebook’s Flux

• Redux

• fluxible

• 單⾏行道:unidirectional data flow

Flux

Page 86: 2016 前端潮玩意兒
Page 87: 2016 前端潮玩意兒
Page 88: 2016 前端潮玩意兒

ECMAScript 2015

語⾔言:就是要寫箭頭

Page 89: 2016 前端潮玩意兒

ES6

Page 90: 2016 前端潮玩意兒

語法糖• Constants

• Scoping

• Arrow Functions

• Extended Parameter Handling

• Class

Page 91: 2016 前端潮玩意兒
Page 92: 2016 前端潮玩意兒

新概念 (API)• Iterator

• Generators

• Promise

Page 93: 2016 前端潮玩意兒

– Maxis Kao

“我也想偷懶寫箭頭就好!”

Page 94: 2016 前端潮玩意兒

ES6 = 語法糖 + 新概念

Page 95: 2016 前端潮玩意兒
Page 96: 2016 前端潮玩意兒

Polyfill

Page 97: 2016 前端潮玩意兒
Page 98: 2016 前端潮玩意兒
Page 99: 2016 前端潮玩意兒

進⼊入上流社會Functional Reactive Programming

Page 100: 2016 前端潮玩意兒

別搞神祕了你們這群⼈人

Page 101: 2016 前端潮玩意兒

鄙視鏈• 懂 Functional Programming 的⼯工程師

• ⽼老是把設計模式掛在嘴邊的⼯工程師

• 「你這樣寫就不 OO 了啊」的⼯工程師

• 「蛤?什麼物件導向?不是把重複的 code 寫成 function 就好了嗎?」

• PM

Page 102: 2016 前端潮玩意兒

Functional Programming

Imperative Programming

Page 103: 2016 前端潮玩意兒

Functional Programming

Imperative Programming

Page 104: 2016 前端潮玩意兒

“Hardware, finally.”

Page 105: 2016 前端潮玩意兒

Map / Reduce / Filter

Page 106: 2016 前端潮玩意兒
Page 107: 2016 前端潮玩意兒

Pure Function• 1 - 1 Data Transformation

• f (x) → y

Page 108: 2016 前端潮玩意兒

“杜絕⿊黑⼼心⼯工廠”

Page 109: 2016 前端潮玩意兒
Page 110: 2016 前端潮玩意兒
Page 111: 2016 前端潮玩意兒
Page 112: 2016 前端潮玩意兒

Mutable

• 陣列 (array)

• 物件 (object)

Page 113: 2016 前端潮玩意兒

複雜的環境

• ⽤用平板的台灣 設計師 ⼩小⿊黑

• ⽤用⼿手機的美國 ⼯工程師 Jerry

• 不⼩小⼼心在 IE6 上停⽤用 JavaScript 卻渾然不知的阿嬤

Page 114: 2016 前端潮玩意兒

– 阿嬤

“阿怎麼都是英⽂文,是要我怎麼點?”

Page 115: 2016 前端潮玩意兒

– Jerry

“奇怪怎麼突然爆版,動畫還全部消失”

Page 116: 2016 前端潮玩意兒

– ⼩小⿊黑

“怎麼還這麼早,先睡覺再來搶票好了”

Page 117: 2016 前端潮玩意兒

Immutable• 把 陣列 (array) 與 物件 (object) 轉換成它內部的資料結構來做更進⼀一步的操作

• 常⽤用的有:List,Map 與 Sequence

Page 118: 2016 前端潮玩意兒

滿出來的⼯工具箱⾃自動化,硬是⽐比別⼈人快

Page 119: 2016 前端潮玩意兒

Grunt / Gulp

Page 120: 2016 前端潮玩意兒
Page 121: 2016 前端潮玩意兒

Task runner• minify CSS/JS

• compile: SCSS → CSS

• unit test

• watch

Page 122: 2016 前端潮玩意兒

⽐比較 - 社群• Grunt 社群⽐比較⼤大,有⽐比較多 plugin

• Gulp ⽐比較新,但算是崛起的很快

Page 123: 2016 前端潮玩意兒

⽐比較 - 速度• Grunt ⽤用 temp file,會經過 disk I/O,需要處理中繼檔案

• Gulp 直接⽤用 stream 的概念,全部在 memory 中

Page 124: 2016 前端潮玩意兒

Bower / NPM

Page 125: 2016 前端潮玩意兒

Browserify / Webpack

Page 126: 2016 前端潮玩意兒

Yeoman

Page 127: 2016 前端潮玩意兒
Page 128: 2016 前端潮玩意兒
Page 129: 2016 前端潮玩意兒

前端⼯工程師⼼心法

Page 130: 2016 前端潮玩意兒

⼼心牆

Page 131: 2016 前端潮玩意兒

“10 Reasons Why You Should Use Angular”

Page 132: 2016 前端潮玩意兒

“  3 Reasons Why You Should Use React”

Page 133: 2016 前端潮玩意兒

“  5 Reasons Why You Should Use Backbone”

Page 134: 2016 前端潮玩意兒

“  5 Reasons Why You Should Use Backbone”

Page 135: 2016 前端潮玩意兒

⼀一切從基本做起

Page 136: 2016 前端潮玩意兒

基本• 系統性的學習

• 看書

• Get your hands dirty

Page 137: 2016 前端潮玩意兒

充實⾃自⼰己

Page 138: 2016 前端潮玩意兒

橫向發展• RD: Beginner → User → Developer

• UX/UI

• PM

• QA

Page 139: 2016 前端潮玩意兒

Thanks :P

Page 140: 2016 前端潮玩意兒

Q / A

Page 141: 2016 前端潮玩意兒

可以這樣找到我

• Maxis Kao

[email protected]

• http://maxis1718.github.io