iOS Framework

《人月神話》裡最有名的兩個詞就是「人月神話」和「沒有銀彈」,以及像外科手術隊伍般的軟體開發團隊。( "No Silver Bullet - Essence and Accident in Software Engineering", Frederick P. Brooks, Jr., 1986)

  • 軟體開發(尤其是大型軟體系統)是一件很複雜的事情,概念整體性 (conceptual integrity) 是最重要的。要達成概念整體性,設計必須出自於一個人的想法,或是極少數人的一致決定。
  • 人月神話:向進度落後的專案中增加人手,只會使進度更加落後。儘管高手一個可以打十個,在大型專案面前,需要的時間依然太長。
  • 沒有銀彈 (必殺技):流程圖是一種很爛的軟體結構抽象表示法。超大型積體電路(VLSI)的類比基本上是個誤導,晶片的設計是一層層的二維物體,其幾何上的構造剛好反映了它的本質,而軟體系統並非如此。(VHDL, Verilog ?)
軟體工程中的本質性(打造構成抽象軟體實體的複雜概念結構)和附屬性(使用程式語言表達這些抽象實體,在空間和時間限制下將他們對映成機器用語),在其近作《設計的設計》中解釋:「若採用現代用語,必要的(essential)和次要的(incidental)應較容易理解」。「軟體建構中本質的部份,指的是概念的智能創作,而附屬的部份,指的是實作程序。」

在開發軟體的過程中,有時會發現解決軟體中某些問題時,創造出的方法概念具有某種程度的相似性或交集,在實作類似概念時考量了彈性與通用性,使得後續軟體開發中出現類似概念的智能創作時,可以直接套用先前既有成品,避免一再重複的實作程序,而這個既有的成品就是一般的框架 (the vanilla framework)。("Biting the Silver Bullet", David Harel, 1992)

最棒的設計就像電燈開關一樣。電燈開關有很多好設計具備的特質:
  • 用一次就會。
  • 它可以解決很根本的需求。
  • 每個人都知道它的功能。
  • 按一下就開,再按一下就關。
  • 切換時有聲音回饋。
  • 有實體開關,不需要用眼睛看,手摸到了就可以操作。
  • 符合人類心理的暗示,上撥為開,下撥為關。
  • 單純且耐久。
  • 反應快速不需等待。
  • 對沒見過的人,像魔法一樣神奇。


要設計 iOS apps,可以觀看最好的 iOS Development 教學課程。

Coding Together: Developing iOS 7 Apps for iPhone and iPad (Fall 2013-2014)

Coding Together: Developing iOS 6 Apps for iPhone and iPad (Winter 2013)

iOS Application Development Courses - Stanford University (2012)

沒有 Mac 的人可以考慮在 Windows 上使用 GNU Step 來開發 Objective-C 程式。如果要編譯 Objective-C 的新功能與特色例如 ARC 和 block 就必須要安裝 llvm 和 clang。

$ svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
$ svn co http://llvm.org/svn/llvm-project/cfe/trunk clang

然後就可以學習如何編譯 Objective-C 程式碼 。

覺得 Objective-C 太複雜的話,不如就改用八十歲也能學會程式設計的 Swift 語言吧 。

Objective-C ---> Swift & Storyboard ---> SwiftUI