《編程高手箴言》讀后感

時(shí)間:2023-04-27 04:40:31 讀后感 我要投稿
  • 相關(guān)推薦

《編程高手箴言》讀后感

畢業(yè)也有幾年了,也看了和學(xué)了不少東西。有時(shí)也想寫點(diǎn)什么,但總是覺(jué)得頭緒很多,一直沒(méi)有動(dòng)筆。最近翻了翻梁先生的《編程高手箴言》,突然想寫點(diǎn)什么,權(quán)且用讀書筆記的形式寫點(diǎn)東西。

等號(hào)上面的摘字《箴言》,下面則是筆者自己的感想。希望大家指教,但是謾罵就不必了,謝謝。注:這一部分涉及《箴言》第一章。

《編程高手箴言》讀后感

在PC這個(gè)領(lǐng)域,現(xiàn)在的程序已不等于軟件了。

===

現(xiàn)在的程序不等于軟件,那么什么時(shí)候的程序等于軟件呢?我想,不管什么時(shí)候,都存在有用的和沒(méi)有的程序,而軟件,software,在計(jì)算機(jī)領(lǐng)域里就應(yīng)該指那些有用的程序,而不論這些程序有沒(méi)有商業(yè)化。呵呵,應(yīng)此只要我們?cè)跒樽约夯蛘邽閯e人寫有用的程序,那么我們就可以說(shuō)我們是在寫軟件了。

商業(yè)軟件的功能和所要達(dá)到的目標(biāo)就不是一個(gè)人能"玩"的起來(lái)的了。這就是美國(guó)新的軟件公司沒(méi)法產(chǎn)生的原因。比如Netscape網(wǎng)景是在1995~1996產(chǎn)生的新軟件公司,但是,兩三年后他就不見(jiàn)了。

===

所謂商業(yè)軟件的功能和目標(biāo)從來(lái)都沒(méi)有過(guò)嚴(yán)格的定義,也不會(huì)有嚴(yán)格的定義。何謂商業(yè)軟件?看發(fā)布時(shí)的代碼量?看可執(zhí)行程序的尺寸?看有沒(méi)有復(fù)雜神妙的算法?看有沒(méi)有優(yōu)良的售后服務(wù)?還是干脆就把大公司發(fā)布的東西就叫做商業(yè)軟件?當(dāng)然,現(xiàn)在在一些通用領(lǐng)域,一些不涉及復(fù)雜算法設(shè)計(jì)的場(chǎng)合,一些已經(jīng)有大公司進(jìn)入的場(chǎng)合,單憑個(gè)人的力量想要做出可以和大公司抗衡的東西確實(shí)幾乎不太可能。但是,計(jì)算機(jī)科學(xué)是門涵蓋很廣的學(xué)科,很多分支,比如數(shù)字圖像處理,視頻音頻處理,人工智能和機(jī)器人,等等,只要有人得到了突破性的發(fā)現(xiàn),我想快速形成商業(yè)軟件也非不可能。當(dāng)然了,很可能這些剛出現(xiàn)的小公司很快就被那些巨無(wú)霸吞并了。如果稍微看看現(xiàn)在這些巨無(wú)霸公司的發(fā)展軌跡,就會(huì)發(fā)現(xiàn)它們吞并剛出現(xiàn)的小公司是家常便飯的事。但即便是這樣,硅谷還是有很多小軟件公司出現(xiàn)。畢竟,軟件業(yè)這塊平面上單憑巨無(wú)霸公司那些大圓還是填不滿的,圓和圓的結(jié)合部總會(huì)有空隙存在。至于說(shuō)到Netscape的消失,原因大家都明白,這其實(shí)更多的不是取決于技術(shù)。事實(shí)上微軟進(jìn)軍這個(gè)領(lǐng)域太直接不過(guò)了,軟件上已經(jīng)有了Visual Studio和MS Office,因此開(kāi)發(fā)瀏覽器的技術(shù)對(duì)他而言幾乎都是現(xiàn)成的。即便這樣,Microsoft的IE還是在NCSA Mosaic的基礎(chǔ)上完成的。所以Netscape沒(méi)有被收購(gòu),而是徹底被打敗了。

任何一個(gè)行業(yè)初始階段時(shí)的門檻都很低,但是,只要發(fā)展到一定的階段后,它的門檻就必然抬高。

===

筆者十分贊同這句話,軟件業(yè)創(chuàng)意太重要了。什么東西都是最先做出來(lái)的那幾家獲益最多,后來(lái)者通常都是分些殘羹。前兩天在同事那里看一個(gè)搞笑的flash,突然冒出一個(gè)念頭,怎么當(dāng)初我就沒(méi)有想到在瀏覽器里寫個(gè)插件來(lái)支持動(dòng)畫和音樂(lè)呢。呵呵,歸根結(jié)底還是個(gè)人的水平有限啊:-)大家每天睡覺(jué)前不妨花個(gè)幾分鐘想想,說(shuō)不定就被你想到個(gè)點(diǎn)子從此一步登天了呢,呵呵。

現(xiàn)在中國(guó)軟件行業(yè)正在形成,所以現(xiàn)在做一個(gè)程序員一定要有耐心。

===

我想程序員不管什么時(shí)候都需要耐心,耐心可以說(shuō)是軟件開(kāi)發(fā)者的必備素質(zhì),并且體現(xiàn)在各個(gè)方面:寫程序的時(shí)候沒(méi)有耐心那你就等著后面抓不盡的蟲吧;給自己充電的時(shí)候你沒(méi)有耐心,那么你永遠(yuǎn)只能掌握膚淺的東西;追女朋友的時(shí)候沒(méi)有耐心,那你就.,暈,怎么有番茄扔過(guò)來(lái)了,我閃:-)

你一定要把所有的問(wèn)題搞清楚,然后再去做程序。

===

軟件設(shè)計(jì)是門要靠腦力的活,而軟件發(fā)展的迅速和需求的不斷提高是人所共知的。什么時(shí)候我都不敢奢望把所有的問(wèn)題都搞清楚了。實(shí)際上每個(gè)開(kāi)發(fā)者,哦,不,:-)是我本人在開(kāi)發(fā)的過(guò)程中總是不斷發(fā)現(xiàn)新問(wèn)題,不斷在解決問(wèn)題,是個(gè)螺旋提高的過(guò)程。我一向認(rèn)為在開(kāi)發(fā)中學(xué)習(xí)是最快最有效的。

事實(shí)上,美國(guó)的商業(yè)編譯器也不是一個(gè)人能"玩"的,現(xiàn)在你可能覺(jué)得很簡(jiǎn)單的,甚至Linux還帶了一個(gè)GCC,且源程序還在。你可以把它改一改,做個(gè)VC試一試,看它會(huì)有人用嗎?即使你再做個(gè)界面,它也還是GCC,絕對(duì)不會(huì)成為Visual C++那樣能商業(yè)化的軟件。

===

我依稀記得曾經(jīng)看過(guò)一篇章,說(shuō)Borland當(dāng)初的Turbo Pascal主要就是一個(gè)牛牛用匯編寫出來(lái)的。呵呵,如果有人給GCC寫個(gè)類似VC的界面我舉雙手雙腳贊成,免費(fèi)幫他測(cè)試:-)有時(shí)我在想,Borland當(dāng)初開(kāi)發(fā)Delphi的時(shí)候不用Pascal而用C++的話,現(xiàn)在開(kāi)發(fā)工具的市場(chǎng)份額會(huì)是個(gè)什么格局?(本人絕對(duì)沒(méi)有瞧不起Pascal的意思,事實(shí)上我的第一門語(yǔ)言就是Pascal,只是因?yàn)閳D書館里Pascal的書被人借光了才自學(xué)了C)如果我給Gcc寫了個(gè)界面,當(dāng)然還是GCC。用過(guò)GCC的人從來(lái)不會(huì)說(shuō)GCC比不上Visual C++,兩者實(shí)在沒(méi)有辦法比,不在一個(gè)數(shù)量級(jí)上。GCC是個(gè)強(qiáng)大的編譯器,支持N種硬件平臺(tái)和官方的軟件標(biāo)準(zhǔn),同時(shí)也引入了很多軟件開(kāi)發(fā)者急需的好特性。大多數(shù)優(yōu)良的庫(kù),罕有不能在GCC上編譯通過(guò)的。嘻嘻,有為GCC做廣告之嫌?至于GCC的商業(yè)化,我就看到過(guò)一些賣硬件產(chǎn)品的公司,它們附帶的編譯器就是GCC或者其變種。再說(shuō)了,大量大型的軟件都可以用GCC編譯出來(lái)的,從穩(wěn)定上講我想不會(huì)比Visual C++差吧。事實(shí)上,我用Visual C++的時(shí)候就遇到過(guò)所謂的Internal Error,而我用GCC,就從來(lái)沒(méi)遇到過(guò)這種莫名其妙的內(nèi)部錯(cuò)誤的抱怨。我想,GCC絕對(duì)有商業(yè)軟件的潛質(zhì),呵呵,就是在可視化方面比不上Visual C++,雖說(shuō)也有一些GCC的圖形前端。

機(jī)遇是從耐心中產(chǎn)生的,越有耐心,就越有機(jī)遇。

===

名言啊名言,我有耐心啊,機(jī)遇快來(lái)吧,呵呵。大家還是埋頭苦干吧,別真的機(jī)遇來(lái)了你還沒(méi)有準(zhǔn)備好,呵呵~

如果你是從MFC入手的,或者是從VC入手的,那么要做出一個(gè)真正的能應(yīng)用個(gè)人領(lǐng)域的通用軟件,就會(huì)走

非常多的彎路。

===

怪了去了,怎么從MFC或者VB入手就會(huì)走非常多的彎路呢?從MFC或者VB里調(diào)用Win32 API很直接,尤其在Visual C++MFC里!扼鹧浴泛芸粗氐讓樱琖in32 API難道還不夠底層嗎?難道非要在匯編一級(jí)才可以寫出真正的通用軟件嗎?那我干脆去給CPU寫微碼去了,呵呵~。VB我用的很少,就不說(shuō)了。至于MFC,如果你真正弄懂了MFC那么你對(duì)于Windows的各個(gè)方面幾乎就全部精通了(當(dāng)然,我是指Windows內(nèi)核外用戶空間的東東)。

計(jì)算機(jī)這個(gè)東西不管是硬件還是軟件,層次很重要。開(kāi)發(fā)很重要的一個(gè)方面就是要弄明白你自己需要在什么層次上做東西。一個(gè)用java寫中間件的開(kāi)發(fā)人員,有多大必要去精通系統(tǒng)底層的東西呢?我想如果你不立足于自己的層次做東西,而胡亂搞跨層的東西,結(jié)果可能就是出力而不討好了。自己研究研究還行,如果在工作中還是這樣層次不清楚的話,呵呵,就很危險(xiǎn)了。

當(dāng)然,我沒(méi)有讓大家不去鉆研,但我想最好還是找個(gè)前輩請(qǐng)教,根據(jù)自己的興趣制定自己的學(xué)習(xí)計(jì)劃。人的精力畢竟有限,我們要把有限的精力投入為人民服務(wù)之中去嘛,可不要浪費(fèi)了喲,呵呵。

只想混口飯吃,找個(gè)工作,可能教你成為MFC的高手之類的書對(duì)你就足夠了。

===

現(xiàn)在的同志好幸福啊,國(guó)內(nèi)在不停的引進(jìn)國(guó)外的名書。想當(dāng)年在95年左右的時(shí)候,外國(guó)參考書實(shí)在是不多。我建議大家在計(jì)算機(jī)領(lǐng)域里面看書最好是找老外的。不是我崇洋媚外,老外出書基本上還是蠻負(fù)責(zé)的,而國(guó)內(nèi)引進(jìn)的大多還不錯(cuò)。但是即使你在修煉國(guó)外大牛們關(guān)于MFC的書,如果你不認(rèn)真實(shí)踐,那么光靠書你是不可能成為MFC高手的。MFC這個(gè)類庫(kù)的設(shè)計(jì)已經(jīng)有很多人在抨擊了,我們不多談,但是如果你真的深入到MFC的源代碼里面去,其他我不知道,但是你肯定可以對(duì)Windows的運(yùn)作有個(gè)很深入的理解。

從最低層做起,從最基本坐起。

===

筆者的看法是從中間層做起。就以Win32上的Java為例,一開(kāi)始我絕對(duì)不會(huì)從Java虛擬機(jī)規(guī)范,java和本機(jī)系統(tǒng)的交互,Java垃圾回收算法的實(shí)現(xiàn)等等很底層的東西著手。也不會(huì)一開(kāi)始就涉及那些什么設(shè)計(jì)模式,F(xiàn)rameword框架之類的高層抽象。我會(huì)就從Java語(yǔ)言本身著手,熟悉它的語(yǔ)法,熟悉它的基本庫(kù),試著不斷用Java描述問(wèn)題。在這個(gè)過(guò)程中,你自然會(huì)遇到一些或高層或底層的問(wèn)題,這個(gè)時(shí)候你在去鉆研它們絕對(duì)不遲,并且只可能是事半而功倍。

高手成長(zhǎng)的六個(gè)階段

===

《箴言》一書把程序員的成長(zhǎng)分成了六個(gè)階段。筆者卻認(rèn)為只有第一階段,即熟練的使用某種語(yǔ)言是每個(gè)程序員必備的。其他的一些能力對(duì)于不同的開(kāi)發(fā)方向應(yīng)該是不同的。比如《箴言》認(rèn)為第二階段是精通某種平臺(tái)的接口(比如Win32 API)。然而,很多做高層開(kāi)發(fā)的同志,往往不太接觸這些底層的API,因?yàn)樵谒旅,操作系統(tǒng)上面已經(jīng)疊加了很多的層次了。比如,如果你用Java在Win32上面編程,幾乎不需要和系統(tǒng)API打交道。這其實(shí)也體現(xiàn)了軟件分層的思想:每一層只負(fù)責(zé)自己的職能,只和自己相鄰的層通訊。

《箴言》認(rèn)為能夠進(jìn)行VxD編程,或者進(jìn)行操作系統(tǒng)內(nèi)核的修改就算進(jìn)入了高層次了。且不說(shuō)VxD已經(jīng)被Microsoft拋棄了,新的Win32驅(qū)動(dòng)模型WDM,Linux/Freebsd kernel的小修改筆者都參經(jīng)碰過(guò),但是我從來(lái)不認(rèn)為我到了很高的層次,尤其和那些做高層開(kāi)發(fā)的朋友比。因?yàn)閷?shí)在是沒(méi)有辦法比,比較是要在同一個(gè)層面上進(jìn)行的,不同層面的東西你怎么比?就算你設(shè)計(jì)了操作系統(tǒng),如果讓你去規(guī)劃一個(gè)ERP系統(tǒng),你也未必成功。再說(shuō)了,我寫過(guò)WDM,覺(jué)得WDM也不那么神秘。但反觀如果讓我設(shè)計(jì)一個(gè)ERP Framework,我倒是覺(jué)得很多東西需要學(xué)習(xí),我想反之也是一樣。至于說(shuō)到底層開(kāi)發(fā),難度大概應(yīng)該實(shí)在比較少的資料和例子程序(尤其在Win32下面),不太友好的調(diào)試工具,以及較少的系統(tǒng)支撐。不妨舉個(gè)例子,在做應(yīng)用程序開(kāi)發(fā)的時(shí)候,開(kāi)發(fā)環(huán)境往往有完善的調(diào)試工具,也不太容易把整個(gè)操作系統(tǒng)搞死。然而做Kernel開(kāi)發(fā)就不一樣了,一不小心操作系統(tǒng)就崩潰了。記得筆者在做WDM開(kāi)發(fā)時(shí),就掛了第二個(gè)硬盤,隨時(shí)準(zhǔn)備Ghost,呵呵。

這時(shí)Win32或Linux在你眼里已經(jīng)沒(méi)有什么差別了。

===

從操作系統(tǒng)的角度看,Win32和Linux就都是操作系統(tǒng),沒(méi)什么差別。但是涉及到具體的開(kāi)發(fā),你就不得不清楚的認(rèn)識(shí)到兩者的不同,用戶態(tài)程序還好一點(diǎn),大致把幾個(gè)重要的發(fā)面,比如線

【《編程高手箴言》讀后感】相關(guān)文章:

生命箴言,人生箴言,箴言妙語(yǔ)-素材04-30

經(jīng)典的箴言12-09

經(jīng)典的箴言11-27

經(jīng)典勵(lì)志箴言05-16

經(jīng)典人生箴言10-21

智者的箴言10-21

快樂(lè)的箴言10-21

事業(yè)的箴言10-21

生命的箴言11-05

大學(xué)的箴言09-30