?? kingofark詳解他的50個(gè)觀點(diǎn)(上) .txt
字號:
條款1. 把C++當(dāng)成一門新的語言學(xué)習(xí)(和C沒啥關(guān)系!真的。); [解說]: 這一條源于我在《程序員》雜志2001年第4期上看到的《將標(biāo)準(zhǔn)C++視為一個(gè)新語言》一 文,作者是C++的設(shè)計(jì)者Bjarne Stroustrup。這篇文章還可以在Bjarne Stroustrup的個(gè) 人網(wǎng)頁上找到。 這篇及時(shí)到來的文章很好的調(diào)整了我的思維,讓我有幸在初學(xué)C++時(shí)就得以撥亂反正的重 新審視了C++這門語言和自己對C++的學(xué)習(xí),同時(shí)也使我就此開始了<K's 50 PV>的撰寫。 其實(shí)要對本條款給出一個(gè)理由很簡單,我只引用Bjarne Stroustrup在此文中的一句話就 可以了: “把標(biāo)準(zhǔn)C++拿來當(dāng)作一個(gè)美化后的C或美化后的C with classes來耍弄,只是浪費(fèi)了標(biāo) 準(zhǔn)C++所提供的美好機(jī)會。” [kingofark的收獲]: 經(jīng)常拜讀大師們的articles,追隨大師們的先進(jìn)思路,千萬別讓自己活在與大師們不同 的時(shí)間里。 [參考]: <K's 50 PV>條款28,29。 條款2. 看《Thinking In C++》,不要看《C++變成死相》; [解說]: 于此,我不再多說——因?yàn)闋幾h太多罷。這里我向大家推薦我在《kingofark的“五評計(jì) 劃”》系列文章里面關(guān)于此書的一些討論。(在撰寫本文時(shí),《kingofark的“五評計(jì)劃 ”》已經(jīng)在撰寫中,相信很快能與大家見面。) [kingofark的收獲]: 明白了“陰溝里也能翻船”的道理。 [參考]: <K's 50 PV>條款19,21,22。 條款3. 看《The C++ Programming Language》和《Inside The C++ Object Model》,不 要因?yàn)樗麄兒茈y而我們自己是初學(xué)者所以就不看; [解說]: 關(guān)于這兩本書,大家也可以參考我的拙作《kingofark的“五評計(jì)劃”》系列文章里面關(guān) 于C++書籍的一些討論。(在撰寫本文時(shí),《kingofark的“五評計(jì)劃”》已經(jīng)在撰寫中 ,相信很快能與大家見面。) 不錯(cuò),這兩本書的確不太容易下咽,但是大家應(yīng)該(也早就應(yīng)該已經(jīng))認(rèn)識到:鉆研精 神是一個(gè)程序員必備的素質(zhì)。 這也是為什么我在好幾個(gè)條款里說明同一個(gè)問題的原因。 [kingofark的收獲]: “書山有路勤為徑,學(xué)海無涯苦作舟” [參考]: <K's 50 PV>條款19,21,22,30;<K's 35 MPV>條款26。 條款4. 不要被VC、BCB、BC、MC、TC等詞匯所迷惑——他們都是集成開發(fā)環(huán)境,而我們 要學(xué)的是一門語言; [解說]: VC: Microsoft Visual C++ BCB: Borland C++ Builder BC: Borland C++ MC: Microsoft C++ TC: Turbo C(有時(shí)也指Turbo C++) WC: Watcom C++ 各種簡化了的、混雜了的口頭稱謂容易使初學(xué)者感到迷惑,這很正常。不過,其實(shí)只要 稍加留意,這些迷惑完全可以被消除。 大家可以注意以下幾點(diǎn): (1) 由于C++語言(其它語言也是一樣)幾乎總是要以某個(gè)集成開發(fā)環(huán)境為載體 、平臺,才能被真正的“使用”,因此人們在口頭上容易用一個(gè)集成開發(fā)環(huán)境的名字來 意指一門語言(比如VC,BC,TC等); (2) 程序設(shè)計(jì)語言需要一種載體來被運(yùn)用,這就好像漢語、英語一定要被人用嘴 說出來、用筆寫出來才能發(fā)揮作用一樣; (3) 編譯器(或解釋器)有時(shí)也被集成開發(fā)環(huán)境的名稱所指代(比如“你用VC編 譯過嗎?”實(shí)際上應(yīng)該是“你用VC的C++編譯器編譯過嗎?”); (4) 只要多了解各種詞匯的詳細(xì)信息(一般是其英文全稱),就可以很容易的發(fā) 現(xiàn)一些你本來就該弄清楚的事情; (5) 在口頭上,也請你在不影響正常表達(dá)的情況下,盡量說得準(zhǔn)確些,不要迷惑 更多更新的初學(xué)者。 [kingofark的收獲]: “我再也不學(xué)VC這門語言了。” [參考]: <K's 50 PV>條款6,9,39,41。 條款5. 不要放過任何一個(gè)看上去很簡單的小編程問題——他們往往并不那么簡單,或者 可以引伸出很多知識點(diǎn); [解說]: 這是kingofark我的親身體會。 我早年學(xué)過BASIC,后來學(xué)C的時(shí)候,手里攥著一本教材,對其中的習(xí)題很不屑。有這樣 一道題: “編寫一個(gè)程序,在屏幕上打印 * * * * * * * * * * * * * * * * 要求使用本章學(xué)過的循環(huán)語句。” 其實(shí)我當(dāng)時(shí)的眼光在掃到那個(gè)弱智的三角形圖案時(shí)就跳到下一道題去了,全沒有注意到 題目最后的要求,于是腦海里很不屑的閃現(xiàn)出這樣的一段代碼: printf(“ *\n”); printf(“ * * *\n”); printf(“ * * * * *\n”); printf(“ * * * * * * *\n”); …… 幾個(gè)星期之后,我在翻書時(shí)很偶然的瞥見了這道題的后半部分要求,心里生疑;“這么 簡單的打印問題干嘛用循環(huán)?”于是重新審題。這一次,我的腦子里再也沒有閃出東西 ——唔,除了問號以外——于是忍不住開始編寫程序。結(jié)果“不編不知道,一編死翹翹 ”,在經(jīng)過了半天的捉摸之后,才終于有了一個(gè)正確的答案。從此明白了:哦,要先在 草稿紙上設(shè)計(jì)一下,不能光憑腦子想;哦,打印一個(gè)三角形還可以用這么巧妙的循環(huán); 哦,…… “但這完全是你自己沒有認(rèn)真看題造成的吧!?”你可能會抱怨我說跑題了,“這跟本 條款有何干?” 好吧,如果上面的故事算是跑題的話,那么現(xiàn)在題跑完了。 在經(jīng)過了那段學(xué)習(xí)打印“*”的初期,書上的習(xí)題也越來越不容易,其中有這么一道: “編寫一個(gè)程序,要求輸入任意十進(jìn)制數(shù),在屏幕上顯示相對應(yīng)的十六進(jìn)制數(shù)。” “很簡單嘛,”我又想著(嗯?我怎么會說“又”這個(gè)字?),腦子里閃現(xiàn)構(gòu)思若干: 定義一個(gè)int decimal_val,由用戶賦值后,再通過相應(yīng)的計(jì)算轉(zhuǎn)成十六進(jìn)制就可以了嘛 。” 三下五除二,程序出來了,得意洋洋,忍不住叫父親來看。早年做過計(jì)算機(jī)工作者的父 親看了我運(yùn)行程序演示,對我說:“輸入的數(shù)值太有限了,只能轉(zhuǎn)換int級的數(shù)值。” “那簡單!”我更得意了,“把int改為long int,不,改為long long int,……呃? ”問題忽然嚴(yán)重了:習(xí)題要求能轉(zhuǎn)換“任意十進(jìn)制數(shù)”,但即使是long long long lon g int,也還是有限的。怎么辦? 父親只說:“是不是可以考慮用char數(shù)組來接收用戶的輸入,這樣可以支持任意長的輸 入,就是轉(zhuǎn)換十六進(jìn)制的方法要重新設(shè)計(jì)了。” 一個(gè)星期之后(噢,是的,那時(shí)我很笨),我終于可以在朋友面前炫耀我的“超級轉(zhuǎn)換 程序”了。 [kingofark的收獲]: “麻雀雖小,五臟俱全” [參考]: <K's 50 PV>條款35,37,47;<K's 35 MPV>條款13。 條款6. 會用Visual C++,并不說明你會C++; [解說]: Visual C++這個(gè)集成開發(fā)環(huán)境的確為我們提供了很多的東西,包括巨大的MFC(Microso ft Foundation Class),可愛的按鈕啦,很“專業(yè)”的幫助窗口啦,讓人很有成就感的 about窗口啦,等等。然而,特定程序的核心算法還是需要我們自己來提供,適合特定程 序的類還是需要我們自己來派生和管理,大部分特定程序的數(shù)據(jù)結(jié)構(gòu)還是需要我們自己 來實(shí)現(xiàn)——只不過我們是在VC的幫助下做其中一些事情罷了。 很多人都曾向我聲稱他“會”VC了。但除了書上的例子,他們什么都做不出來。 之所以稱VC為“集成開發(fā)環(huán)境”,就是因?yàn)槠浔旧硎亲鳛槌休dC++的一種“環(huán)境”而存在 的,C++才是我們所要關(guān)注的主體。 有了球場邊球迷們的歡呼、喝彩和助威,足球運(yùn)動才越發(fā)體現(xiàn)出其無比的魅力。然而我 們踢的仍然是足球,不是場邊的球迷。VC與C++之關(guān)系亦包含有相似的道理。 [kingofark的收獲]: 一腳出去,不要踢錯(cuò)了對象。 [參考]: <K's 50 PV>條款9,24,39,41;<K's 35 MPV>條款4。 條款7. 學(xué)class并不難,template、STL、generic programming也不過如此——難的是 長期堅(jiān)持實(shí)踐和不遺余力的博覽群書; [解說]: 哈哈,這句話的的確確是我鼓勵(lì)初學(xué)者的話。畢竟從技術(shù)上講,STL和范型技術(shù)的的確確 不能像著名主持人崔永元給自傳起名字那樣被概括為“不過如此”。 我認(rèn)為,長期堅(jiān)持實(shí)踐和不遺余力的博覽群書,是一個(gè)程序員的根本治學(xué)之道。雖然誰 都知道這是一個(gè)多少有些完美的期望,但它畢竟是期望而不是奢望——總可能實(shí)現(xiàn)罷。 [kingofark的收獲]: 應(yīng)該仔細(xì)研讀和體會U2樂隊(duì)的一首名曲《I’m still haven’t found what I’m look ing for》的歌詞,這樣,在人生的任何一個(gè)高度上駐足思考時(shí),都不至于忘記了自己所 追尋的一切。 條款8. 如果不是天才的話,想學(xué)編程就不要想玩游戲——你以為你做到了,其實(shí)你的C ++水平并沒有和你通關(guān)的能力一起變高——其實(shí)可以時(shí)刻記住:學(xué)C++是為了編游戲的; [解說]: 只說三點(diǎn): (1) www.1cplusplusstreet.com上面就有很多利用編寫游戲來學(xué)習(xí)C++的有趣內(nèi) 容,相當(dāng)?shù)暮茫?(2) 很多著名的游戲也都是有源代碼可看的; (3) Open Source的資源也是大家學(xué)習(xí)的好地方。 [kingofark的收獲]: 過分熱衷于電子游戲的人大約有兩種“通關(guān)方法”: (1) 酷愛游戲—>玩游戲—>還想玩游戲—>還想玩游戲—>還想玩游戲—> 成為超超超……(汗)級玩家; (2) 酷愛游戲—>玩游戲—>改游戲—>對游戲的制作產(chǎn)生好奇—>鉆研游戲的 開發(fā)知識—>成為有潛力/有實(shí)力的業(yè)余/專業(yè)游戲開發(fā)者。 [參考]: <K's 50 PV>條款18。 條款9. 看Visual C++的書,是學(xué)不了C++語言的; [解說]: 一句話:集成開發(fā)環(huán)境是掌握在廠商手里的;語言是掌握在自己手里的。 [kingofark的收獲]: “哦,你看了很多VC的書?挺好挺好。對了,順便問一下,你會用C++嗎?” [參考]: <K's 50 PV>條款6,24,39,41;<K's 35 MPV>條款4。 條款10. 浮躁的人容易說:XX語言不行了,應(yīng)該學(xué)YY;——是你自己不行了吧!? 條款11. 浮躁的人容易問:我到底該學(xué)什么;——?jiǎng)e問,學(xué)就對了; 條款12. 浮躁的人容易問:XX有錢途嗎;——建議你去搶銀行; 條款13. 浮躁的人容易說:我要中文版!我英文不行!——不行?學(xué)呀! 條款14. 浮躁的人容易問:XX和YY哪個(gè)好;——告訴你吧,都好——只要你學(xué)就行; 條款15. 浮躁的人分兩種:a)只觀望而不學(xué)的人;b)只學(xué)而不堅(jiān)持的人; 條款49. 請不要做浮躁的人; [解說]: 寫下這樣的條款,一定不免招致異議者的不屑一顧甚或是口水,但我在論壇上看到的確 是事實(shí):“XX語言不行了,應(yīng)該學(xué)YY!”、“我到底該學(xué)什么?”、“XX有錢途嗎?” 、“我要中文版!我英文不行!”、“XX和YY哪個(gè)好?”……這樣的“問”、“話”見 得多了,我不禁想起魯迅先生在《 茨藕啊底 序》中的一段文字: ——“假如一間鐵屋子,是絕無窗戶而萬難破毀的,里面有許多熟睡的人們,不久都悶 死了,然而是從昏睡入死滅,并不感到就死的悲哀。現(xiàn)在你大嚷起來,驚醒了較為清醒 的幾個(gè)人,使者不幸的少數(shù)者來受無可挽救的臨終的苦楚,你倒以為對得起他們么?” ——“然而幾個(gè)人既然起來,你不能說決沒有毀壞這鐵屋的希望。” 我想,我不僅愿意做那個(gè)大嚷起來的人,而且還要說:“或許我們的鐵屋子至少還有窗 和門罷。” [kingofark的收獲]: 以平和的心態(tài)做學(xué)問。 [參考]: <K's 35 MPV>條款15-23。 條款16. 把時(shí)髦的技術(shù)掛在嘴邊,還不如把過時(shí)的技術(shù)記在心里; [解說]: 這里還是強(qiáng)調(diào)了一個(gè)人學(xué)習(xí)要踏實(shí)的道理。 總聽到很多人不屑的說某某技術(shù)已經(jīng)過時(shí),學(xué)了也沒用之類的話。其中屢被攻擊的對象 比如dos啦,mode 13h啦,win3.1啦,VGA啦,甚至是win95、Pascal、C、C++等等。這些 人是浮躁的(見<K's 50 PV>條款10),一味追求“新”技術(shù),殊不知“新”技術(shù)、“新 ”理論無不是在傳承著前人智慧點(diǎn)點(diǎn)滴滴的精華。 我最熟悉的一個(gè)例子就是那本Michael Abrash著的《Michael Abrash’s Graphics Pro gramming Black Book Special Edition》。這本堪稱圖形程序設(shè)計(jì)領(lǐng)域經(jīng)典之作的宏篇 巨著中充滿了對VGA、286、mode X、256色等的討論和研究。 “啊哈,你說的這些可是真的過時(shí)了,”我開始聽到有人在說了。 過時(shí)了嗎?我的回答既是肯定的又是否定的。 的確,隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,可能不會再需要用到mode X來編寫圖形程序了;是 的,256色已經(jīng)不堪入目了;不錯(cuò),win3.1已成昨日黃花。但是,各位眼光頗“高”的朋 友啊,千萬不要忘記學(xué)習(xí)的真正目的。 小時(shí)候我常為學(xué)業(yè)而困擾,成績也不佳。每逢考試分?jǐn)?shù)不理想,總是懷著沉重的心情跺 回家,對未來的學(xué)習(xí)也產(chǎn)生了絕望的憂慮。每一次,父親總是輕輕的拍拍我的頭,輕聲 說道:“沒關(guān)系,以后努力就行了。學(xué)習(xí)本身就是就是一種磨練,學(xué)習(xí)的目的就是磨練 你的意志。通過學(xué)習(xí)的過程來經(jīng)受各種各樣的考驗(yàn),自己才會慢慢變得能夠克服生活中 遇到的各種各樣的事情。考試也是一種磨練,沒什么好擔(dān)心的,別怕。” 《Michael Abrash’s Graphics Programming Black Book Special Edition》蘊(yùn)含了作 者M(jìn)ichael Abrash浸淫圖形程序開發(fā)領(lǐng)域數(shù)十年的經(jīng)驗(yàn)積累,其博大精深的優(yōu)化理念才 是贏得讀者、專家們撕聲喝彩的真正原因(熟悉Quake這個(gè)電子游戲的朋友們也一定知道 Michael Abrash對其的貢獻(xiàn))。試問當(dāng)今各路英雄高手,誰敢站出來不屑的說:“我不 需要優(yōu)化技術(shù)?” 不需要嗎?需要嗎?不需要嗎?需要嗎?不需要嗎?…… 唔,我想這個(gè)問題的答案大家心里都明白。 [kingofark的收獲]: 即使是糞便也不是全沒有價(jià)值的,更何況一堆夾雜著鉆石的黃金。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -