- 軟體開發(尤其是大型軟體系統)是一件很複雜的事情,概念整體性 (conceptual integrity) 是最重要的。要達成概念整體性,設計必須出自於一個人的想法,或是極少數人的一致決定。
- 人月神話:向進度落後的專案中增加人手,只會使進度更加落後。儘管高手一個可以打十個,在大型專案面前,需要的時間依然太長。
- 沒有銀彈 (必殺技):流程圖是一種很爛的軟體結構抽象表示法。超大型積體電路(VLSI)的類比基本上是個誤導,晶片的設計是一層層的二維物體,其幾何上的構造剛好反映了它的本質,而軟體系統並非如此。(VHDL, Verilog ?)
在開發軟體的過程中,有時會發現解決軟體中某些問題時,創造出的方法概念具有某種程度的相似性或交集,在實作類似概念時考量了彈性與通用性,使得後續軟體開發中出現類似概念的智能創作時,可以直接套用先前既有成品,避免一再重複的實作程序,而這個既有的成品就是一般的框架 (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