What have you found for these years?

2007-04-29

寫程式的思想與習慣

空虛貼舊文,約半年前的。

==

寫程式的思想與習慣

寫程式不是把大石頭從甲地搬到乙地,那是電腦在做的工作。寫程式的人不是工人,
電腦才是。程式設計者要做的是告訴電腦,如何把大石頭從甲地搬到乙地,有效率、
有彈性、省錢又皆大歡喜等,這些全部是程式設計者所需要考慮的。假設你是個程式
設計者,你

叫 K 在甲地「用手」把大石頭「抬過頭頂」,並「徒步」移動到乙地,再把大石頭
放下。

叫 K 用手是因為省錢,抬過頭頂是因為穩定,(不容易讓大石頭落地傷害地面或
大石頭本身)徒步則同時是因為省錢與穩定,還有高彈性!(隨時可以改變方向
而不影響劇烈)

但是 K 很明顯認為你瘋了,他才沒有辦法「用手」把大石頭「抬過頭頂」,
更遑論要「徒步」移動到乙地。你強迫他這麼做,於是他罷工了,他請辭了,
或是更慘的:他被大石頭壓死了。

經驗和推論告訴你,不能叫 K 這麼做,因為會發生很慘的事。於是你開始記著
不能叫 K 這麼做,不能叫 K 這麼做,不能叫 K 這麼做,儘管那很吸引人,但,
那不具有建設性。

你成功找到另外一個方法,就是叫 A 開拖吊車把大石頭放上 K 所駕駛的大卡車,
(嗯,K 是卡車司機 XD)然後 K 再把大卡車開到乙地,再呼喚本來就在乙地的
P 開拖吊車把大石頭放下來。

成功了!
於是你開始一直照著這個方法做。未來,你甚至找到更好,更快,載彈量更高的
大卡車。於是你的工作:找到一個讓大石頭從甲地跑到乙地,做得越來越好了,
因為你的手下越做越快,你也省去了更多的錢(更便宜的超級卡車),
更大的彈性(會飛的卡車),更開心的工作環境(聲控卡車、車內音響)。

不過有一天,你發現你新進的工作夥伴,比你省更多錢,有更多的彈性,
又有令手下覺得更開心的工作環境。你已經是用特殊管道跟火星人取得最好最快,
功能最強的飛天大卡車,價錢卻只有地球上卡車的一半!你很納悶,難道他用
更特別的管道,弄到了水星人的縮地大卡車嗎?這可是地球上卡車造價的十倍!

他更加納悶你怎麼會問這個怪問題,因為他都

叫 K 在甲地「用手」把大石頭「抬過頭頂」,並「徒步」移動到乙地,再把大石頭
放下!

K 在當年會罷工,會請辭,會被大石頭壓死,不過在今天卻不一樣了。今天的
K 可以用一根手指頭就把大石頭抬起,吹一口氣大石頭就可以變成兩個,(?)
一眨眼大石頭就不見了!(??)。

當你在研究如何使用大卡車時,你忽略了 K 本身的成長,造成這個局面。其實
這是一種陷阱,因為在當時確實是不好用,只是今天卻變成很好用。資訊世界的
快速發展造成難以預測,難以掌握,難以看清楚現在的狀況。

再加上在程式設計的領域中,你一個時間點內只能專注在同一件事上,你才能夠
把這件事做好(資訊隱藏)。可是這同時也容易讓你忽略其他的事情,其他可能
會讓你把這件事做更好的事情。

也就是說,當你想到

叫 K 在甲地「用手」把大石頭「抬過頭頂」,並「徒步」移動到乙地,再把大石頭
放下。

時,你所想到的是過去不好的回憶,於是當你念及此,立刻就轉向了。死路,何必
繼續走下去?應該會有更好的方向(無數的問題解決方案)。這件事變成一個往這邊
成長的心理障礙(使用超人),雖然他有助於你往另外一個方向成長(使用大卡車)

以上是看到 Modern C++ Design 說 malloc 是配置小型物件的心理障礙時,
忽然浮現在腦海裡的東西。過去我們沒辦法大量配置小型物件,因為那對於執行效率
有非常嚴重的衝擊,將「小型物件」設計方式的可能性,徹底抹去。而今天常用的
物件導向設計方式,卻廣泛運用到小型物件。甚至還有 Flyweight 等強化小型物件
效能的各種手法(雖然我得承認,我看不太懂 Flyweight)。我想,這也許是物件
導向很早就發展了,卻在最近幾年才流行起來的主要原因吧。

2006.09.05 godfat 幻滅.真常

0 retries:

Post a Comment

All texts are licensed under CC Attribution 3.0