28. 編碼風格 Coding Style
同樣一件事情,可以有很多種不同的寫法,要用哪一種好呢? 很多時候對電腦來說並沒有什麽差別,因為作用和效能是一模一樣的,差別只是編碼風格而已。
編碼風格對於團隊開發十分重要,維持一慣的風格可以增加代碼的可讀性。在 Ruby 和 Rails 社區中,大多會遵守以下的風格指南:
對個人來說,編碼風格也代表了你的代碼有沒有在程式語言社區「接地氣」,更是代碼給人的第一印象。一個縮進不佳的代碼,給人的第一印象就是「不專業」。
要找工作的同學,面試官在看你的 Portfolio 作品集的代碼時,第一印象就是你的代碼風格好不好
29. 時間處理 Time
- 什麼是 UTC 時間
- 什麼是 Unix time 時間 計算從 1970-01-01 起跳的秒數,不建議使用這種格式。但有些老派的 API 仍會出現他的蹤影。
- 新聞 Apple’s ‘January 1, 1970’ Date Bug
- 2038 年問題 (因為 32-bit 的限制)
- 資料交換請用 ISO 8601 標準格式
- 時區和日光節約時間的相關問題
- 只知道時間,不知道時區 -> 無法確定是那一天,不同時區會差一天
- 只知道時間,不知道確切日期 -> 直接加時間長度可能會不正確,因為可能剛好跨到日光節約時間
- 結論:用 Date 和 Time 的 library,而不要自己處理,因為日光節約時間沒有規則
30. 資料存續和交換 Data Persistence and Exchange
- 記憶體一關機重開、沒電,資料就不見了,需有一種方式將程式中的資料存進 Disk 硬碟中,永續儲存(Persistence)。例如存成純文字檔案,或是使用資料庫。
- 不同電腦之間,透過網路交換資料,也需要定義資料的格式
資料格式有哪些?
- 程式語言專用的 Marshal 編碼格式,可以支援該程式語言所有的 Data Type,將物件轉成字串文字。
- 跨語言資料格式,支援的 Date Type 有限
使用資料庫
存成檔案是一種簡單的方法,應用程式更常見的實務作法是採用獨立的資料庫程式,用結構化的格式,提供搜尋、索引、容量能力,或是支援 ACID 操作:
- Persistent 類型
- Key-Value Storage
- RDBMS: SQLite、MySQL、PostgreSQL
- NoSQL
- Non-Persistent Storage,主要是快取用途
- Memcached
- 不同資料庫有不同設計 trade-off,包括讀取速度、寫入速度、擴充性和查詢能力
- 為何要使用快取?
- Latency Numbers Every Programmer Should Know
31. 套件管理 Package manager
在程式語言中,一定會用到現成的類別、套件等等。這些來自於:
- Language core 程式語言本身就有
- Language build-in library 程式語言內附的標準函式庫,只要載入就可以使用,不需要額外安裝
- 3-rd party library and framework 需要額外安裝的第三方套件
而當今的程式語言,都有一個套件管理工具(Package manager),這工具的目的在於:
- 方便安裝和散布上述的這三方套件
- Dependency 依賴性管理,例如套件A需要套件B 1.1 版、套件C需要套件 B 1.0 版,那麼套件管理工作就會幫你安裝 套件B 1.1 版
例如:
- Ruby 的套件管理工具是 https://rubygems.org/ 和 http://bundler.io/
- Node.js 的套件管理工具是 https://www.npmjs.com/
- PHP 的套件管理工具是 https://getcomposer.org/
- Swift 可用 https://cocoapods.org/ (非 Apple 官方)
別跟 homebrew 搞混了,上述的套件管理工具是管理「程式碼」套件,而 homebrew 是我們在 Mac 上管理「Command Line 工具」的套件。之後我們在 Ubuntu Linux 上,還會用一個套件管理工具叫做 apt-get
用來在伺服器上安裝軟體。
32. 開放原始碼 Open Source
- 開放原始碼
- 自由軟體(Free Software) v.s. 開源軟體 (Open Source Software) 兩者的理念不同
- http://www.openfoundry.org/tw/legal-column-list/508-2010-07-15-10-50-34
- 因此授權可概分這兩大門派:
- GNU通用公眾授權條款:GPL不會授予授權條款接受人無限的權利。再發行權的授予需要授權條款接受人開放軟體的原始碼,及所有修改。且複製件、修改版本,都必須以GPL為授權條款。
- BSD、MIT、Apache 派:只要你不宣稱這軟體是你製作的,你要做什麼都可以。
- 如何選擇開源許可證?
- 非軟體程式的文字、音樂、影片等等創作,可以用 創用CC授權條款