what are programs? 兼談現代化軟體開發

36
What are programs? 兼談現代化軟體開發 Speaker: Cobalt Chang 2016/12/02

Upload: tun-yu-chang

Post on 22-Jan-2018

276 views

Category:

Software


1 download

TRANSCRIPT

What are programs?

兼談現代化軟體開發

Speaker: Cobalt Chang2016/12/02

自我介紹

❖ 張惇育

❖ 成功大學資訊工程博士

❖ 經歷

➢ 宏普科技 (現為樺漢集團樺賦科技)

➢ 新漢股份有限公司

❖ 專長與興趣

➢ 嵌入式系統開發

➢ 分散式軟體架構設計

➢ 機器學習2

Outline

❖ What are programs?

❖ Web application developing

❖ Modern software development

3

What are programs?

4

5

起點

終點

如何描述一個問題?

回到原點

6

每個岔路標記起來

每個死路也標記起來

7

8

9

第一層

第二層

第三層

第四層

深度優先探索

10

What are programs?

Be a Learner!

Outline

❖ What are programs?

❖ Web application developing

❖ Modern software development

11

Demo!

❖ 先來看個實際範例

➢ https://github.com/cobaltchang/ovff

12

找出瓶頸

❖ 讀檔是瓶頸,WHY?

❖ C

➢ char * fgets ( char * str, int num, FILE * stream );

❖ C++

➢ istream &getline( char *buffer, streamsize num, char delim );

❖ 線性搜尋,O(N)

13

功夫

❖ 有什麼方式可以加速?

14

Outline

❖ What are programs?

❖ Web application developing

➢ Database

❖ Modern software development

➢ NO programming? Not Only programming

➢ Agile development

➢ DevOps

15

資料庫索引

❖ B-Tree

❖ B+-Tree

❖ B*-Tree

16An example of B-Tree

17

資料庫軟體

❖ SQLite

➢ 常用於嵌入式系統

❖ MySQL

➢ 容易入門

➢ 學習資源多

❖ PostgreSQL, or Postgres

➢ 物件導向資料庫

❖ Oracle

➢ 商用大型資料庫

18

Outline

❖ What are programs?

❖ Web application developing

➢ Database

➢ Web framework

❖ Modern software development

19

軟體開發實例

PythonJavascript

DjangoAngularJS

$resource ($http) Django REST framework

RESTful API (JSON)

HTML / CSS

DatabaseORM

Front-end Back-end

Language Framework Module / App20

Django

❖ Model-Template-View, or MTV

❖ Object-relational mapper, or ORM

❖ Template engine

21

Outline

❖ What are programs?

❖ Web application developing

❖ Live coding!

➢ 任務目標:把檔案搜尋換成資料庫搜尋

❖ Modern software development

22

Outline

❖ What are programs?

❖ Web application developing

❖ Live coding!

❖ Modern software development

➢ NO programming? Not Only programming

➢ Agile development

➢ DevOps

23

Not Only programming

❖ 軟體開發是…

➢ coding

➢ compiling

➢ debugging

➢ building

❖ 那叫寫程式,那不是軟體工程,甚至不能稱為軟體產品。

24

人月神話

25

軟體開發流程

26

測試驅動開發

❖ Testing

➢ Unit testing

➢ Integration testing

❖ Refactor 重構

❖ TDD是一種開發方法,不是測試

➢ 將規格以可執行的「測試案例」來表達

27

Co-work

❖ Version control

❖ Issue tracking

❖ Documenting

❖ Code review

28

敏捷式軟體開發

❖ Test-Driven Development 測試驅動開發

❖ Continuous Integration 持續整合

❖ Refactoring 重構

❖ Stand up 站立會議

❖ Frequent Releases 頻繁發佈

❖ Minimal Documentation 測試即文件

❖ Collaborative Focus 代碼共用

❖ Customer Engagement 現場客戶

❖ Automated Testing 自動化測試

❖ Adaptive Planning 可調整計劃

❖ Pair-Programming 結對編程

敏捷開發是一種以人為核心、迭代、循序漸進的開發方法。在敏捷開發中,軟體項目的構建被切分成多個子項目,各個子項目的成果都經過測試,具備集成和可運行的特性。 29

DevOps

❖ 軟體工程劃分為兩個維度

➢ 一個是代表流程的[開發]、[維運]

➢ 一個是代表資源的[人力]、[設備]

❖ 開發就是研發設計與產出軟體程式的過程

❖ 維運就是讓軟體真正成為產品所需的流程

❖ 再加上QA

30

為什麼會出現DevOps?

10+ Deploys per Day:Dev and Ops Cooperation at Flickr

31

DevOps就是持續交付

32

Outline

❖ What are programs?

❖ Web application developing

❖ Live coding!

❖ Modern software development

❖ What are programs?

33

35

練功三階段

Questions?

36