軟體是一種工程, 也就是軟體工程(software engineering), 軟體功能只是其中的一部份. 會寫出功能很強大的軟體元件的人很多, 但能發展成為具有市場競爭力的商品的人不多. 把強大的元件兜在一起常不能成就一個普通的軟體商品. 工程化就是商品化的核心, 這也就是Process, 一步接著一步, 不能馬虎.
一些軟體工程的資料:
https://www.linkedin.com/pulse/20140702104209-232985602-5-steps-of-software-engineering-process
http://www.tutorialspoint.com/software_engineering/software_design_basics.htm
http://www.tutorialride.com/software-engineering/software-process-designing-concepts.htm
您有做Requirements Gathering and Analysis? Unit Testing? Documentation?
模組化的核心: Strong Cohesion(強凝聚) 和 Decoupling(去耦合). 如古語: 各人自掃門前雪(cohesion),莫管他人瓦上霜(decoupling). 這裡的人指的是模組.
另外, 軟體運作如同一條連續性製造(process manufacturing)生產線, 有許多工間(workshops), 模組如同這些在流程中(process)的工間, 是一個工間接著一個, 但也是同時運作(concurrency), 而這些concurrency的能力就來自專業的模組化: 強凝聚, 去耦合.
"網頁的流暢性不足 不時會頓" 常見的強凝聚, 高耦合, 低併發(low concurrency)問題.
複雜嗎? 剛好相反. 只要方法正確習慣就好.
大學課本理論
電腦語言是應用科學, 理論事實上是真實實務的總結, 更是勸世文, 勸世人恪遵理論以減少實務錯誤.
以最近Kotlin被Google列為官方Android語言為例, 我讀了一些對Kotlin歌功頌德的文章, 也到Kotlin官網去瞧了瞧, 很有興趣, 但是剛剛讀了一篇關於Kotlin的一篇批評文, 原來Kotlin有目的地捨棄了Java一個重要的功能: 受檢異常(Checked Exception, 有人說檢查異常,...). 也就是在函數/模組中會對特殊情況發出(throws)異常讓Java編譯器檢查. 這功能在C#中也沒有. 很多"簡化"的語言也都沒有. 批評的人說Checked Exception很繁瑣, 但Checked Exception卻很重要, 因為這是模組化強凝聚去耦合的重要功能, 讓使用模組/函數時可以知道可能的問題, 不必等到問題發生了才回頭修改程式碼, 可大量降低後期維護成本, 而高昂的維護成本往往是專案的殺手.