程式語言只是工具! 重點是要寫出程式來
寫程式不光要懂程式語言 更要懂你要寫的咚咚
你要寫photoshop卻不懂畫圖 不知道顏料 筆觸的差別?要怎麼寫?
你要寫pagemaker(這是隻排版軟體) 卻不懂紙張的規格
不知道業界的術語 要怎麼寫?
你要寫防毒軟體 卻連windows都不太會用 不知道怎麼監控系統
怎麼破壞系統 你怎麼寫?
寫程式的重點不在於程式語言 而在於專業領域
那為什麼下這麼大的功夫學程式設計?
原因也很簡單 因為程式語言是一把利刃 可以幫你寫出好程式
同時也可以把你的電腦搞當機 這就是要學習的地方
再來 我以C++的學習歷程說明
很多人學C++是為了MFC MFC是一套VC++內建的application framework
什麼是AF?appilcation指的是與系統有耦合的程式 簡單的說就是要安裝的
會在registry寫東西做紀錄的程式 而一般我們寫出來可以直接執行的程式叫program
framework的當然是一整到的程式寫作工具 而且你不能只用一部份
用了就要重頭到尾 MFC提供了 一種良好的GUI(graphic user interface)
設計風格 讓你可以輕鬆的寫出windows下的程式
甚至還提供替你把制式碼填寫進程式碼的程式(這稱為wizard) 把打字的功夫都省了
那學MFC需要什麼背景知識? C++和SDK
如果你的目標也是學習MFC 那我可以把這樣的學習路程劃分為:
(一) 將C++視為更好的C來學習
在這個階段 你應該要熟悉一個C++程式的基本架構 分支敘述(if, switch ...etc)
變數型態(int, double...etc) 基本的IO(cin, cout...etc)
在這個階段你不要管OOP 不要管template專心學習歷史上的C++
(二) 學習傳統SDK寫作
SDK指的是用windows API來寫作 API是windows這個系統提供的一些函數 讓
你可以作繪圖 有「視窗」的外型(放大 縮小...etc)
所謂傳統的SDK寫作就是C & API的寫作 學習這個是為了以後深入瞭解MFC所做的準備
你不想作個只會用Wizard的程式設計師吧
API的學習說簡單簡單 說煩也很煩 一個字 背(其實只是熟了救可以了
反正可以查書)
(三) 學習MFC所運用的C++ -- OOP
OOP主要是一種思維邏輯 你要學習如何以C++將他表示出來 並注意其中的陷阱和
設計上的區別
要學習OOP其實我不會建議用C++ 我前面說過 C++生來就是一個要和C共存的語言
他背負了C的沈重包袱 我會建議學習從C++脫胎而出 同時捨棄C的包袱的--Java
(四) 學習MFC本身
為什麼我強調本身 因為坊間太多的書都是教你怎麼用Wizard 不要被他們騙了!
難道學完MFC就可以目空一切 寫出來的一定是好程式嗎?
你不只要學習專業領域 連程式設計都還有要學習的地方
學習MFC所做的不過是完成一個好的介面(這其中還包含你設計的功力)
雖然一個程式的寫作有七成的時間在做完善良好的介面 但是
如何節省記憶體 不佔硬碟空間 執行快速 這才是一個程式的精髓
這方面 你要學習正確的儲存資料 如何正確的使用資料
儲存資料你要學習資料結構 處理資料要學習演算法
講到資料結構和演算法 就一定要說到C++相當晚近的成員--STL
這是一個用template所建構起來的程式庫 他提供高效率 省空間 具安全性
的資料結構和演算法 前兩個當然是相對於我們自己寫的資料結構 那什麼是安全性?
安全性目的在於攔截、處理執行時的錯誤 簡單的說就是讓「本程式發生錯誤......」
這句話出現的次數降低 當然 面對一個如此強力的程式庫 學習的難度也相對大幅提昇
甚至你可以說這不只是library 而是一個framework了
那 把專業領域學好 把我上面所說的學好 程式設計就沒有你可以學習的東西了嗎?
不不不 你可以學的還多了
大家應該都在冷氣或洗衣機上看過fuzzy這個字眼吧
這是一種新的邏輯學 目前日本廣泛使用 最基本的觀念就是真不一定是1
可以是0到1其中的數字 這樣強力的工具 是數學
還有混沌 這其中最有名的應當就是「蝴蝶效應了吧」
「今天北京的一隻蝴蝶拍動翅膀,造成洛杉磯明天的颶風」
你聽過的版本也許地點不一樣 時間不一樣 天氣現象不一樣
這只是在說明 微小的誤差並非可以忽略 卻會造成巨大的影響
人類一直用最快最好的電腦去模擬天氣 為什麼天氣預報從沒準過
也許是因為我們對混沌的瞭解還不夠
還有還有 類神經系統
這個系統的目的是讓程式自我成長 就像神經元一樣 刺激越強 回饋越強
終於形成突觸 學校圖書館有這方面的書 我翻了一下 全是數學
還可以讓程式繁殖 這方面我從沒看到相關理論 只有在Discovery看過採訪
可以學的東西太多太多了 跟大家分享
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.160.0.13