程式設計是一種「組合的藝術」

2021-04-27 15:48:40 字數 2260 閱讀 7198

程式設計是一種「組合的藝術」 ——

wpf例項分析

金旭亮

有這麼一句名言——政治是一種妥協的藝術。這一規律同樣適用於軟體技術。就我個人的觀點,軟體開發在一定意義上是一種「組合的藝術」,優秀的軟體工程師類似於優秀的廚師,能將一些常見的原料變成一盤色香味俱全的美味佳餚。

為何說程式設計是一種「組合的藝術」?且讓我慢慢道來。

眾所周知,在軟體開發過程中,每名軟體工程師都要掌握大量的程式設計知識,比如如何訪問資料庫,如何控制線程的推進順序等,掌握這些知識是順利進行開發的必要條件。然而,僅有這些就夠了嗎?僅僅掌握了這些程式設計知識就足以開發出優秀的軟體?

在我看來,開發者還需要掌握「組合」的藝術,你必須知道在某個完成特定功能的程式中,你可以組合哪些基本的構造塊,而這些基本的構造塊又以何種方式優雅地組合在一起,構成乙個有機的整體。

基本的構造塊不僅僅指可以直接拿來復用的軟體元件(或者是

soa中的

service

),還包括可以在不同專案間復用的典型**(比如如何將乙個

double

型別的數字保留兩位小數的典型**段)、技術解決方案(比如各種設計模式)或軟體架構(比如成熟的多層分布式元件化系統框架、基於管道的系統架構)等等。

我喜歡將軟體開發中用到的構造塊稱為「七巧板」,而每乙個成形的程式都是用這些七巧板拼出的圖形。

圖1七巧板如何開發出好的軟體,不取決於你基於什麼平台,使用什麼技術,甚至也不完全取決於你的技術能力和對技術內幕的深刻把握,而取決於你是如何組合這些基本構造塊的。

在某項軟體技術的學習過程中,你實際上完成的是「形成軟體構造塊」的任務,而在軟體專案實際開發過程中,你實際上完成的是「使用現有軟體構造塊」拼「七巧板」的過程。

這個有效並且成功地「拼圖」的過程,就是我們軟體工程理論中有關軟體開發過程與方法部分的內容。

明了這些思想,能指導我們更有效地學習軟體技術。

自學的過程,就是「形成軟體構造塊」的過程。

開發的過程,就是「將軟體構造塊」組合為完成某一特定功能的程式的過程。

作為一名教師,我很關注如何幫助學生更高效地學習軟體技術,培養軟體技能,就將這個思想進一步地推廣與拓展了:

軟體技術教學的過程,就是將「軟體構造塊」組合為真實軟體的過程展示給學生的過程,先讓學生進行模仿,然後他就學會了創造

重要的是學會方法,而非掌握知識。

下面,我以

wpf技術為例,展示乙個教學例項。

這是乙個類似於

windows

「資源管理器」的程式,完全採用

wpf進行開發。

先看一下最初的「原型」:

圖2myfilebrowser

的最初版本

這是最終成品:

圖3myfilebrowser

的最終版本

可以看到,原始版本與最終版本實在是差異巨大,整個開發過程我設定了

10個里程碑:

圖4myfilebrowser的10

個里程碑

在整個開發過程中,每個里程碑都在前乙個的基礎上增加功能和更正發現的

bug。

整個專案用到了多項具體

wpf程式設計技術(此即「軟體構造塊」),以下是最重要的幾項:

資料模板、資源、值轉換器、資料觸發器、平台呼叫、資料分組與排序、多執行緒。

解剖這樣乙個程式的開發過程,就能基本掌握

wpf開發中最重要最常用的技術,並對軟體「拼圖」的方法與過程有直觀了解。通過模仿這種迭代的開發方式,學生就能逐步掌握有效的開發方法,掌握組合的藝術,培養出必要的開發技能,最終成長為一名優秀的軟體工程師。

只有在戰爭中才能學會戰爭,同樣的,只有在實踐中才能增長能力。

動手「拼圖」吧,期待著看到能讓人眼睛一亮的優秀軟體作品!

=====================

**myfilebrowser示例原始碼及相關檔案

(注:上傳了三次,第一次上傳的壓縮包不知什麼原因損壞了,我就第二次上傳。但

第二次上傳的檔案久久不能在首頁出現,也不知跑哪去了,更鬱悶的是它現在不允許我重新上傳了,一上傳就說:此檔案已上傳過!暈,不讓上傳你得給出原有的鏈結啊!現在又看不到,又不讓重新上傳,也不允許

上傳者刪除自己上傳的檔案……

沒辦法,從壓縮包中移除乙個檔案,然後改名,修改資源描述,第三次上傳。

程式設計是一種藝術

感言 作為一名技術黨,我們要熱愛我們的技術,並願意把它當作一生事業去做。我一直有一句格言 程式設計是一種藝術 不管什麼專案,我都會在效能 風格 解題思路上下足功夫。每天我都會對今天所遇到問題進行歸納總結,並儲存到自己構建的知識庫中。如果有意思的問題,同樣也會發布到部落格上去,讓同行的戰友不再為此煩惱...

程式設計是一種藝術創作

軟體正在吞噬世界。馬克 安德森 馬克 安德森 與此同時,過去的四十年中,軟體行業可能創造了全世界最多的財富,很多賺到大錢的人都是頂尖的程式設計師,像我們熟知的microsoft oracle amazon google facebook的創始人 丁磊 馬化騰 李彥巨集 周鴻禕等等。這些賺到大錢的 少...

黑客與畫家 程式設計是一種藝術創作

軟體正在吞噬世界。馬克 安德森 馬克 安德森 與此同時,過去的四十年中,軟體行業可能創造了全世界最多的財富,很多賺到大錢的人都是頂尖的程式設計師,像我們熟知的microsoft oracle amazon google facebook的創始人 丁磊 馬化騰 李彥巨集 周鴻禕等等。這些賺到大錢的 少...