前日在csdn上看到早些時候對stl之父的一篇專訪,
由此想到了數學家和程式設計師思考問題出發點的差異。
雖然亞歷山卓說自己是程式設計師,但我從他的言語之
間還是看到了他數學家的背景,他和大多數程式設計師
思考問題的方式有所不同。
多數程式設計師思考問題,解決程式設計中的實際問題都是以資料
為中心,以資料為思考的出發點。因為大多數程式的
行為就是處理資料,接受某種輸入,產生某種輸出。
程式設計師就是利用某個程式語言設計編寫程式,以便組織和
處理各種資料。而演算法是程式設計師組織和處理這些資料
的方法和步驟。在這一層意義上是資料結構在先,
演算法在後。
而多數數學家的思考方式並非如此。他們一般以這樣的順序
進行思考。當數學家遇到乙個難題,他們先把該問題
一般化。有時候一般化的問題比較容易解決,這就是
波利亞所說的發明家悖論。但也有可能使原問題變得
更難。不管變容易還是變複雜,一般化都有個好處,
它可以使原問題通過更改某些條件和引數變成乙個容易
解決的特例。數學家可以通過解這個特例推導甚至猜測
原問題的解。然後求出這個解的最簡形式。接下來
就是最重要的兩步,證明這個最簡形式是正確的,
並推廣得出結論的方法,使其可以解決某一型別的所有
問題,也就是將演算法一般化。上述步驟我在高德納,
哈代和波利亞的書中都看到過。
由此看來,程式設計師優先抽象資料,以資料為中心。
程式設計師學習數學主要是為了正確的運用定理定義處理
資料和進行演算法分析。因此程式設計師中的大師提出面向
物件程式設計和其他類似的軟體工程實踐方法。
而數學家優先抽象演算法,並強調證明,以證明為中心。
數學家學習數學時更側重定理的證明和解決問題的抽象方法。
因此像亞歷山卓這樣數學背景比較濃的人對物件導向
程式設計不屑一顧。他和他的合作者發明了stl,stl是對
演算法的泛化,也就是演算法一般化。而資料型別只是引數
而已。我本人對程式設計有些粗淺的認識。
我是個實用主義者(但不是操作主義者,也不是工具主義者)
我在進行程式設計時,只考慮基本的客觀原則和經驗原則。
而對規則(規則是主觀的,原則是客觀的)和設計模式考慮
的較少,剔除了那些不必要的規則。針對不同的問題,
選擇適當的技術,在根據自己的特點擊擇技術的適當實現形式。
物件導向也好,面向過程也好,都是解決問題的方法和手段的形式
根據問題選擇方法。資料為中心也好,演算法為中心也好,
都是程式設計過程中不同設計階段所採用的不同角度。
綜上所訴,時刻注意設計的靈活性、擺脫思想束縛、突破概念壁壘、
關注程式內在的美感才是計算機程式設計的關鍵。
程式設計師?你是數學家還是物理學家?
早晨突然的乙個感覺。在程式設計師的世界裡,存在著數學家和物理學家。數學 數學是研究數量 結構 變化以及空間模型等概念的一門學科。透過抽象化和邏輯推理的使用,由計數 計算 量度和對物體形狀及運動的觀察中產生。數學家們拓展這些概念,為了公式化新的猜想以及從合適選定的公理及定義中建立起嚴謹推導出的真理。物...
數學家劉徽的故事
劉徽 中國數學史上乙個非常偉大的數學家,他的傑作 九章算術注 和 海島算經 是中國最寶貴的數學遺產。他的主要著作有 九章算術注 10卷 重差 1卷,至唐代易名為 海島算經 九章重差圖 l卷。可惜後兩種都在宋代失傳。九章算術 約成書於東漢之初,共有246個問題的解法。在許多方面 如解聯立方程,分數四則...
中國了不起的數學家
華羅庚 華羅庚 1910.11.12 1985.6.12 出生於江蘇常州金壇區,祖籍江素檀陽。數學家,中國科學院院士,美國國家科學院外籍院士,第三世界科學院院士,聯邦德國巴伐利亞科學院院士。中國第一至第六屆全國人大常委會委員 他是中國解析數論 矩陣幾何學 典型群 自守函式論與多元復變函式論等多方面研...