編程是一種“組合的藝術”
—— WPF 實例分析
金旭亮
有這么一句名言—— 政治是一種妥協的藝術 。這一規律同樣適用于軟件技術。就我個人的觀點,軟件開發在一定意義上是一種“組合的藝術”,優秀的軟件工程師類似于優秀的廚師,能將一些常見的原料變成一盤色香味俱全的美味佳肴。
為何說編程是一種“組合的藝術”?且讓我慢慢道來。
眾所周知,在軟件開發過程中,每名軟件工程師都要掌握大量的編程知識,比如如何訪問數據庫,如何控制線程的推進順序等,掌握這些知識是順利進行開發的必要條件。然而,僅有這些就夠了嗎?僅僅掌握了這些編程知識就足以開發出優秀的軟件?
在我看來,開發者還需要掌握“組合”的藝術,你必須知道在某個完成特定功能的程序中,你可以組合哪些基本的構造塊,而這些基本的構造塊又以何種方式優雅地組合在一起,構成一個有機的整體。
基本的構造塊不僅僅指可以直接拿來復用的軟件組件(或者是 SOA 中的 Service ),還包括可以在不同項目間復用的典型代碼(比如如何將一個 double 類型的數字保留兩位小數的典型代碼段)、技術解決方案(比如各種設計模式)或軟件架構(比如成熟的多層分布式組件化系統框架、基于管道的系統架構)等等。
我喜歡將軟件開發中用到的構造塊稱為“七巧板”,而每一個成形的程序都是用這些七巧板拼出的圖形。
圖 1 七巧板
如何開發出好的軟件,不取決于你基于什么平臺,使用什么技術,甚至也不完全取決于你的技術能力和對技術內幕的深刻把握,而取決于你是如何組合這些基本構造塊的。
在某項軟件技術的學習過程中,你實際上完成的是“形成軟件構造塊”的任務,而在軟件項目實際開發過程中,你實際上完成的是“使用現有軟件構造塊”拼“七巧板”的過程。
這個有效并且成功地“拼圖”的過程,就是我們軟件工程理論中有關軟件開發過程與方法部分的內容。
明了這些思想,能指導我們更有效地學習軟件技術。
自學的過程,就是“形成軟件構造塊”的過程。
開發的過程,就是“將軟件構造塊”組合為完成某一特定功能的程序的過程。
作為一名教師,我很關注如何幫助學生更高效地學習軟件技術,培養軟件技能,就將這個思想進一步地推廣與拓展了:
軟件技術教學的過程,就是將“軟件構造塊”組合為真實軟件的過程展示給學生的過程 ,先讓學生進行 模仿 ,然后他就學會了 創造 。
重要的是學會方法,而非掌握知識。
下面,我以 WPF 技術為例,展示一個教學實例。
這是一個類似于 Windows “資源管理器”的程序,完全采用 WPF 進行開發。
先看一下最初的“原型”:
圖 2 MyFileBrowser 的最初版本
這是最終成品:
圖 3 MyFileBrowser 的最終版本
可以看到,原始版本與最終版本實在是差異巨大,整個開發過程我設定了 10 個里程碑:
圖 4 MyFileBrowser 的 10 個里程碑
在整個開發過程中,每個里程碑都在前一個的基礎上增加功能和更正發現的 BUG 。
整個項目用到了多項具體 WPF 編程技術(此即“軟件構造塊”),以下是最重要的幾項:
數據模板、資源、值轉換器、數據觸發器、平臺調用、數據分組與排序、多線程。
解剖這樣一個程序的開發過程,就能基本掌握 WPF 開發中最重要最常用的技術,并對軟件“拼圖”的方法與過程有直觀了解。通過模仿這種迭代的開發方式,學生就能逐步掌握有效的開發方法,掌握組合的藝術,培養出必要的開發技能,最終成長為一名優秀的軟件工程師。
只有在戰爭中才能學會戰爭,同樣的,只有在實踐中才能增長能力。
動手“拼圖”吧,期待著看到能讓人眼睛一亮的優秀軟件作品!
=====================
(注:上傳了三次,第一次上傳的壓縮包不知什么原因損壞了,我就第二次上傳。但 第二次上傳的文件久久不能在首頁出現,也不知跑哪去了,更郁悶的是它現在不允許我重新上傳了,一上傳就說:此文件已上傳過!暈,不讓上傳你得給出原有的鏈接啊!現在又看不到,又不讓重新上傳,也不允許 上傳者刪除自己上傳的文件……
沒辦法,從壓縮包中移除一個文件,然后改名,修改資源描述,第三次上傳。
過兩分鐘刷新,第二次上傳的文件鏈接出現了,但其字節數居然為0,點擊下載,報告找不著文件!
還好第三次上傳的可以正確下載和解壓。
上傳個小文件,折騰了我近1小時。 CSDN的下載頻道設計得太讓人郁悶了!!!
)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
