Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
哥寫的不是程式,是軟體
從嵌入式系統看軟體工程全貌
Agenda
❖ Embedded system v.s. Software engineering
➢ What is embedded system?
➢ An overview of embedded system software ar...
Introduction to my self
❖張惇育
❖成功大學資訊工程博士
❖經歷
➢ 宏普科技 (現為 樺漢集團樺賦科技)
➢ 新漢股份有限公司
❖專長
➢ 嵌入式系統開發
➢ 分散式軟體架構設計
3
Outline
❖Embedded system v.s. Software engineering
➢ What is embedded system?
➢ An overview of embedded system software ar...
What is embedded system?
❖完全嵌入受控器件內部,為特定應用而設計的專用計算機系統
➢ 被嵌入的系統通常是包含硬體和機械部件的完整裝置。
➢ 其關鍵特性是專用於處理特定的任務
❖與個人電腦這樣的通用電腦系統不同,嵌入式系...
生活週邊的嵌入式設備
6
更多嵌入式設備
7
Embedded system software architecture
Bootloader
Linux kernel
Init ramdisk
RootFS
Application Application Application
Libr...
Bootloader 做什麼?
❖bootstrapping / booting
➢ to pull oneself up by one’s bootstraps
9
Kernel
❖monolithic kernel
➢ Linux
➢ Unix (MAC)
❖microkernel
➢ Windows
❖driver
➢ builtin
➢ module
10
11
Initrd & Rootfs
❖Root file system
➢ OS 所需要的 file system
➢ C library, shell, etc.
❖系統ready
❖等待使用者輸入
12
Application
13
Software engineering?
❖嵌入式系統的架構,相當於整個軟體工業的微縮模型
❖軟體開發包含:
➢ Application
➢ SDK & IDE
➢ Operate system
➢ Kernel & driver
➢ Boo...
Outline
❖Embedded system v.s. Software engineering
❖Getting start from modern application
➢ Web based application
➢ Talent...
Web based application
❖server-client architecture
❖跨平台
❖標準化協定
❖不用另外安裝程式
❖適用於cloud service
16
軟體開發實例
PythonJavascript
DjangoAngularJS
$resource ($http)
Django REST
framework
RESTful API
(JSON)
HTML / CSS
Database
ORM...
Python
Life is short. You need Python.
18
寫個Web server有多難?
19
Don’t repeat yourself
❖Web framework
➢ Django
➢ CherryPy
➢ Flask
➢ Tornado
➢ etc...
20
Django
❖Model-Template-View, or MTV
❖Object-relational mapper, or ORM
❖Template engine
21
Python高級特性知多少?
❖ functional programming
➢ map()
➢ filter()
➢ reduce()
➢ list comprehensions 串列綜合運算
❖ lambda functions
❖ Cl...
Python進階議題
❖ Global Interpreter Lock, or GIL
❖ C10K problem
➢ Multi-thread 多線程
➢ Multi-process 多進程
➢ Coroutine 協程
➢ async-...
Database
❖SQLite
➢ 常用於嵌入式系統
❖MySQL
➢ 容易入門
➢ 學習資源多
❖PostgreSQL, or Postgres
➢ Object-oriented database
24
Javascript
❖Web技術的發展史
➢ 網頁互動效果
➢ DOM(Document Object Model) API操作
➢ Ajax (Asynchronous JavaScript and XML)的發明與普及
➢ NodeJS ...
AngularJS
❖關注點分離
➢ 控制器 (Controllers) 與 檢視 (Views) 之間切割的非常乾淨
❖以習慣取代配置
➢ Directives
❖DOM Templates
❖Dependency injection 依賴注...
Model-View-Controller
❖Model
➢ 管理(商務)邏輯、資料、 狀態
❖View
➢ 視覺呈現
➢ 只顯示資料,不處理資料
❖Controller
➢ 介於Model 和 View之間的連結
➢ Model 和 View...
Model-View-Controller
❖Example
➢ iPhone SDK
➢ Android
➢ Qt
28
Web MVC
❖Model 2
❖Example
➢ Django
➢ Rails
➢ Yii
29
Model-View-Presenter
❖Example
➢ Swing
➢ SWT
➢ JavaFX
30
Model-View-ViewModel
❖AngularJS
31
MV-Whatever 大家族
❖Model-View-Controller
❖Web MVC
❖Model-View-Presenter
❖Model-View-ViewModel
❖Model-View-Whatever
32
RESTful API - REST
❖REST, Representational State Transfer (具象狀態傳輸)
➢ Roy Thomas Fielding博士於2000年在他的博士論文中提出來的一種軟體架構風格。
➢ 應用...
RESTful API - RESTful
❖REST的要求:
➢ 使用者端/伺服器端 Client/Server
➢ 狀態無關 Stateless
➢ 可以快取 Cacheable
➢ 分層的 Layered
➢ 標準化的介面 Uniform...
RESTful API - APIs
❖應用於Web服務
➢ 符合REST設計風格的Web API稱為RESTful API
➢ 直觀簡短的資源地址:URI,比如:http://example.com/resources/。
➢ 傳輸的資源:W...
RESTful API - 有什麼優點
❖支援快取 caching 將改善反應時間跟server的負載能力。
❖因為不必維持連結狀態,大大改善 server 的 scalability 能力。這表示不同
server可以處理同一串 reques...
Talent tree for web developers
37
38
Outline
❖Embedded system v.s. Software engineering
❖Getting start from modern application
❖Modern software development
➢ N...
Not Only programming
❖你想象中的軟體開發是…
➢coding
➢compiling
➢debugging
➢building
❖那叫寫程式,那不是軟體工程,甚至不能稱為軟體產品。
40
軟體開發流程
41
Test-driven development
❖Testing
➢ Unit testing
➢ Integration testing
❖Refactor 重構
❖TDD是一種開發方法,不是測試
➢ 將規格以可執行的「測試案例」來表達
42
Co-work
❖Version control
❖Issue tracking
❖Documenting
❖Code review
43
Agile development
❖ Test-Driven Development 測試驅動開發
❖ Continuous Integration 持續整合
❖ Refactoring 重構
❖ Stand up 站立會議
❖ Freque...
DevOps
❖軟體工程劃分為兩個維度
➢一個是代表流程的[開發]、[維運]
➢一個是代表資源的[人力]、[設備]
❖開發就是研發設計與產出軟體程式的過程
❖維運就是讓軟體真正成為產品所需的流程
❖再加上QA
45
為什麼會出現DevOps?
10+ Deploys per Day:Dev and Ops Cooperation at Flickr
46
DevOps就是持續交付
47
Outline
❖Embedded system v.s. Software engineering
❖Getting start from modern application
❖Modern software development
❖Wh...
找到適合你的工作
❖十萬青年十萬肝,GG輪班救台灣
❖你想找怎麼樣的工作?以軟體產業來說
➢ IT
➢ FAE
➢ QA / QC (測試)
➢ RD
49
我要學什麼語言?
50
開獎… (僅供參考)
❖ 重點不是在於什麼語言、工具,而是你解決什麼問題
51
如何學習新程式語言
❖我只會寫Java,不會寫C
❖正確的學習方式
➢ Copy & Paste 臨摩
➢ 看文件
➢ 學習使用 library
❖不要鑽牛角尖,不要花時間在你”目前”看不懂的東西上
52
成為高手沒有捷徑
❖Don’t repeat yourself.
➢ 學習使用框架、第三方套件
➢ 理解原理與架構
❖看文件!看文件!看文件!很重要所以說三次。
❖自我精進
❖參與社群、OpenSource
53
Questions?
54
Upcoming SlideShare
Loading in …5
×

哥寫的不是程式,是軟體 - 從嵌入式系統看軟體工程全貌

南臺科技大學 資訊工程系課程演講 2016.04.07

  • Be the first to comment

哥寫的不是程式,是軟體 - 從嵌入式系統看軟體工程全貌

  1. 1. 哥寫的不是程式,是軟體 從嵌入式系統看軟體工程全貌
  2. 2. Agenda ❖ Embedded system v.s. Software engineering ➢ What is embedded system? ➢ An overview of embedded system software architecture ❖ Getting start from modern application ➢ Web based application ➢ Talent tree for web developers ❖ Modern software development ➢ NO programming? Not Only programming ➢ Agile development ➢ DevOps ❖ What is our future? 2
  3. 3. Introduction to my self ❖張惇育 ❖成功大學資訊工程博士 ❖經歷 ➢ 宏普科技 (現為 樺漢集團樺賦科技) ➢ 新漢股份有限公司 ❖專長 ➢ 嵌入式系統開發 ➢ 分散式軟體架構設計 3
  4. 4. Outline ❖Embedded system v.s. Software engineering ➢ What is embedded system? ➢ An overview of embedded system software architecture ❖Getting start from modern application ❖Modern software development ❖What is our future? 4
  5. 5. What is embedded system? ❖完全嵌入受控器件內部,為特定應用而設計的專用計算機系統 ➢ 被嵌入的系統通常是包含硬體和機械部件的完整裝置。 ➢ 其關鍵特性是專用於處理特定的任務 ❖與個人電腦這樣的通用電腦系統不同,嵌入式系統通常執行的是帶有特定要 求的預先定義的任務。 5
  6. 6. 生活週邊的嵌入式設備 6
  7. 7. 更多嵌入式設備 7
  8. 8. Embedded system software architecture Bootloader Linux kernel Init ramdisk RootFS Application Application Application Library Library 8
  9. 9. Bootloader 做什麼? ❖bootstrapping / booting ➢ to pull oneself up by one’s bootstraps 9
  10. 10. Kernel ❖monolithic kernel ➢ Linux ➢ Unix (MAC) ❖microkernel ➢ Windows ❖driver ➢ builtin ➢ module 10
  11. 11. 11
  12. 12. Initrd & Rootfs ❖Root file system ➢ OS 所需要的 file system ➢ C library, shell, etc. ❖系統ready ❖等待使用者輸入 12
  13. 13. Application 13
  14. 14. Software engineering? ❖嵌入式系統的架構,相當於整個軟體工業的微縮模型 ❖軟體開發包含: ➢ Application ➢ SDK & IDE ➢ Operate system ➢ Kernel & driver ➢ Bootloader ❖今天只談Application裡的web based application 你平時寫的程式 都是軟體開發 14
  15. 15. Outline ❖Embedded system v.s. Software engineering ❖Getting start from modern application ➢ Web based application ➢ Talent tree for web developers ❖Modern software development ❖What is our future? 15
  16. 16. Web based application ❖server-client architecture ❖跨平台 ❖標準化協定 ❖不用另外安裝程式 ❖適用於cloud service 16
  17. 17. 軟體開發實例 PythonJavascript DjangoAngularJS $resource ($http) Django REST framework RESTful API (JSON) HTML / CSS Database ORM Front-end Back-end Language Framework Module / App 17
  18. 18. Python Life is short. You need Python. 18
  19. 19. 寫個Web server有多難? 19
  20. 20. Don’t repeat yourself ❖Web framework ➢ Django ➢ CherryPy ➢ Flask ➢ Tornado ➢ etc... 20
  21. 21. Django ❖Model-Template-View, or MTV ❖Object-relational mapper, or ORM ❖Template engine 21
  22. 22. Python高級特性知多少? ❖ functional programming ➢ map() ➢ filter() ➢ reduce() ➢ list comprehensions 串列綜合運算 ❖ lambda functions ❖ Closures 閉包 ❖ Iterators 迭代器 ❖ generators 生成器 ❖ Object Oriented Programming ❖ Abstract base classes 抽象物件 ➢ Inheritance ➢ super() ❖ Mixins/Multiple Inheritance ➢ Method Resolution Order, or MRO ❖ Decorator 裝飾器 ➢ @classmethod ➢ @staticmethod ➢ @property 22
  23. 23. Python進階議題 ❖ Global Interpreter Lock, or GIL ❖ C10K problem ➢ Multi-thread 多線程 ➢ Multi-process 多進程 ➢ Coroutine 協程 ➢ async-io 非同步IO ❖ 快,還要更快 ➢ cython ➢ numba ➢ pypy ➢ numpy ➢ scipy 23
  24. 24. Database ❖SQLite ➢ 常用於嵌入式系統 ❖MySQL ➢ 容易入門 ➢ 學習資源多 ❖PostgreSQL, or Postgres ➢ Object-oriented database 24
  25. 25. Javascript ❖Web技術的發展史 ➢ 網頁互動效果 ➢ DOM(Document Object Model) API操作 ➢ Ajax (Asynchronous JavaScript and XML)的發明與普及 ➢ NodeJS 的出世 => npm誕生 ■ Javascript 進入套件管理的時代 ➢ 各種framework推陳出新 25
  26. 26. AngularJS ❖關注點分離 ➢ 控制器 (Controllers) 與 檢視 (Views) 之間切割的非常乾淨 ❖以習慣取代配置 ➢ Directives ❖DOM Templates ❖Dependency injection 依賴注入 ❖Two-way data binding 雙向資料綁定 26
  27. 27. Model-View-Controller ❖Model ➢ 管理(商務)邏輯、資料、 狀態 ❖View ➢ 視覺呈現 ➢ 只顯示資料,不處理資料 ❖Controller ➢ 介於Model 和 View之間的連結 ➢ Model 和 View 之間的所有溝通都要經過Controller 27
  28. 28. Model-View-Controller ❖Example ➢ iPhone SDK ➢ Android ➢ Qt 28
  29. 29. Web MVC ❖Model 2 ❖Example ➢ Django ➢ Rails ➢ Yii 29
  30. 30. Model-View-Presenter ❖Example ➢ Swing ➢ SWT ➢ JavaFX 30
  31. 31. Model-View-ViewModel ❖AngularJS 31
  32. 32. MV-Whatever 大家族 ❖Model-View-Controller ❖Web MVC ❖Model-View-Presenter ❖Model-View-ViewModel ❖Model-View-Whatever 32
  33. 33. RESTful API - REST ❖REST, Representational State Transfer (具象狀態傳輸) ➢ Roy Thomas Fielding博士於2000年在他的博士論文中提出來的一種軟體架構風格。 ➢ 應用程式的狀態跟功能拆成 resources ■ 每一個 resource 由一個 global identifier (即URI)所表示 ➢ 資源的表現形式則是XML或者HTML,取決於讀者是機器還是人,當然也可以是任何其他 的格式。 ➢ 所有 resources 共用一致的介面轉換狀態 ■ 一組有限的良好定義操作 well-defined operations 33
  34. 34. RESTful API - RESTful ❖REST的要求: ➢ 使用者端/伺服器端 Client/Server ➢ 狀態無關 Stateless ➢ 可以快取 Cacheable ➢ 分層的 Layered ➢ 標準化的介面 Uniform interface ❖符合以上原則(principles)的系統稱做RESTful。 34
  35. 35. RESTful API - APIs ❖應用於Web服務 ➢ 符合REST設計風格的Web API稱為RESTful API ➢ 直觀簡短的資源地址:URI,比如:http://example.com/resources/。 ➢ 傳輸的資源:Web服務接受與返回的網際網路媒體類型,JSON,XML,YAML等。 ➢ 對資源的操作:Web服務在該資源上所支持的一系列請求方法。 資源 GET PUT POST DELETE 一組資源的URI,比如 http://api.example.com/resources/ 列出URI,以及該資 源組中每個資源的詳 細資訊。 使用給定的一組資源 替換當前整組資源。 創建/追加一個新的資 源。該操作往往返回 新資源的URL。 刪除整組資源。 單個資源的URI,比如 http://api.example.com/resources/i tem17/ 獲取指定資源的詳細 資訊,格式可以是 XML、JSON等。 替換/創建指定的資源 。 在指定的資源下創建/ 追加一個新的元素。 刪除指定的元素。 35
  36. 36. RESTful API - 有什麼優點 ❖支援快取 caching 將改善反應時間跟server的負載能力。 ❖因為不必維持連結狀態,大大改善 server 的 scalability 能力。這表示不同 server可以處理同一串 requests。 ❖一個瀏覽器就可以存取任一應用程式跟資源,client 端不需使用別的軟體。 ❖在HTTP之上不依存其他機制跟軟體。 ❖跟其他連結方式相比(如RPC),可以提供相等的功能。 ❖不需要其他的 discovery 機制,因為使用超連結了。 36
  37. 37. Talent tree for web developers 37
  38. 38. 38
  39. 39. Outline ❖Embedded system v.s. Software engineering ❖Getting start from modern application ❖Modern software development ➢ NO programming? Not Only programming ➢ Agile development ➢ DevOps ❖What is our future? 39
  40. 40. Not Only programming ❖你想象中的軟體開發是… ➢coding ➢compiling ➢debugging ➢building ❖那叫寫程式,那不是軟體工程,甚至不能稱為軟體產品。 40
  41. 41. 軟體開發流程 41
  42. 42. Test-driven development ❖Testing ➢ Unit testing ➢ Integration testing ❖Refactor 重構 ❖TDD是一種開發方法,不是測試 ➢ 將規格以可執行的「測試案例」來表達 42
  43. 43. Co-work ❖Version control ❖Issue tracking ❖Documenting ❖Code review 43
  44. 44. Agile development ❖ Test-Driven Development 測試驅動開發 ❖ Continuous Integration 持續整合 ❖ Refactoring 重構 ❖ Stand up 站立會議 ❖ Frequent Releases 頻繁發佈 ❖ Minimal Documentation 測試即文件 ❖ Collaborative Focus 代碼共用 敏捷開發是一種以人為核心、迭代、循序漸進的開 發方法。在敏捷開發中,軟體項目的構建被切分成 多個子項目,各個子項目的成果都經過測試,具備 集成和可運行的特性。 44
  45. 45. DevOps ❖軟體工程劃分為兩個維度 ➢一個是代表流程的[開發]、[維運] ➢一個是代表資源的[人力]、[設備] ❖開發就是研發設計與產出軟體程式的過程 ❖維運就是讓軟體真正成為產品所需的流程 ❖再加上QA 45
  46. 46. 為什麼會出現DevOps? 10+ Deploys per Day:Dev and Ops Cooperation at Flickr 46
  47. 47. DevOps就是持續交付 47
  48. 48. Outline ❖Embedded system v.s. Software engineering ❖Getting start from modern application ❖Modern software development ❖What is our future? 48
  49. 49. 找到適合你的工作 ❖十萬青年十萬肝,GG輪班救台灣 ❖你想找怎麼樣的工作?以軟體產業來說 ➢ IT ➢ FAE ➢ QA / QC (測試) ➢ RD 49
  50. 50. 我要學什麼語言? 50
  51. 51. 開獎… (僅供參考) ❖ 重點不是在於什麼語言、工具,而是你解決什麼問題 51
  52. 52. 如何學習新程式語言 ❖我只會寫Java,不會寫C ❖正確的學習方式 ➢ Copy & Paste 臨摩 ➢ 看文件 ➢ 學習使用 library ❖不要鑽牛角尖,不要花時間在你”目前”看不懂的東西上 52
  53. 53. 成為高手沒有捷徑 ❖Don’t repeat yourself. ➢ 學習使用框架、第三方套件 ➢ 理解原理與架構 ❖看文件!看文件!看文件!很重要所以說三次。 ❖自我精進 ❖參與社群、OpenSource 53
  54. 54. Questions? 54

    Be the first to comment

    Login to see the comments

  • ssuserad331f

    Apr. 7, 2016
  • chiaoiwang

    Apr. 18, 2016
  • elvispom

    Apr. 20, 2016
  • jiunntseng

    Jan. 11, 2017
  • kaufmann

    Mar. 31, 2017
  • irake99

    May. 17, 2017
  • ssuser1c70761

    Jun. 13, 2017
  • aquatear

    Jun. 26, 2017

南臺科技大學 資訊工程系課程演講 2016.04.07

Views

Total views

3,624

On Slideshare

0

From embeds

0

Number of embeds

23

Actions

Downloads

74

Shares

0

Comments

0

Likes

8

×