軟件開(kāi)發(fā)能力的本源討論 收藏 此文于2009-12-31被推薦到CSDN首頁(yè)
如何被推薦?
這是發(fā)到我郵箱里面的一封信,感覺(jué)這位同學(xué)的問(wèn)題有相當(dāng)?shù)拇硇?,其?shí)代表了一大批想學(xué)計(jì)算機(jī),還沒(méi)有邁過(guò)編程開(kāi)發(fā)這道“門檻”的,更談不上能以一個(gè)較高的高度,“俯視”計(jì)算機(jī)軟件開(kāi)發(fā)科學(xué)的總攬,無(wú)法系統(tǒng)看待編程開(kāi)發(fā)這件事的朋友的迷茫。
我不敢說(shuō)自己已經(jīng)達(dá)到了這個(gè)高度,就我自己評(píng)價(jià),我也僅僅是“入門”而已,能混飯吃,就這么個(gè)水平。因此,這個(gè)問(wèn)題我不一定回答得好,但是,我想,作為過(guò)來(lái)人,我努力答答看,能說(shuō)多少說(shuō)多少,大家能理解多少就理解多少,如何?
呵呵,還是那句話,一家之言哈,歡迎拍磚。
原文如下:
肖老師你好:
我是一位大四的學(xué)生,不是計(jì)算機(jī)專業(yè)的(就讀食品科學(xué)與工程),我很喜歡計(jì)算機(jī),很期望在IT里工作,平時(shí)也經(jīng)??催@方面的書(shū),也算是為以后作準(zhǔn)備吧!今天看了《IT學(xué)生解惑》,感覺(jué)太晚看了?。ú贿^(guò)亡羊補(bǔ)牢,也算不錯(cuò)?。?br> 我覺(jué)得自己很浮躁,很急于求成,所學(xué)過(guò)于廣泛,也由于是不是計(jì)算機(jī)專業(yè),不了解計(jì)算機(jī)專業(yè),所以但現(xiàn)在也只是停留在某個(gè)工具,某個(gè)語(yǔ)言,某種單一的編程思維的表面,總是徘徊在這個(gè)專業(yè)的門外。我也不認(rèn)識(shí)什么計(jì)算機(jī)專業(yè)的老師,所以才發(fā)這封郵件給你,向你請(qǐng)教問(wèn)題?
我不太懂計(jì)算機(jī),下面可能會(huì)有錯(cuò)誤,請(qǐng)見(jiàn)諒。我看了你給大家的提醒:一通百通,很受啟發(fā)。在這里,我想請(qǐng)問(wèn)老師,你從事了這么多年的it工作,反過(guò)來(lái)看軟件開(kāi)發(fā),架構(gòu)、設(shè)計(jì)、開(kāi)發(fā)、分析等等,我想它們都應(yīng)該有它們各自所需的最本源的知識(shí),(也可以說(shuō)是最底層的知識(shí))去支撐各自的工作,也應(yīng)該有共同的本源。我在這里猜想這個(gè)本源需要?dú)v練,就如絕世武功不只是一本譜,更需要練功者的領(lǐng)悟,最后把武功的本源和自己所領(lǐng)悟的本源結(jié)合,也就造就了絕世高手。
因?yàn)楸救藢?shí)在不懂計(jì)算機(jī),也不知道我說(shuō)的,老師你看懂了沒(méi)。我就想知道這個(gè)源頭到底是什么東西,也許它需要?dú)v練來(lái)領(lǐng)悟(呵呵,它肯定需要,對(duì)吧),也許不能用語(yǔ)言表達(dá),但請(qǐng)老師指明方向,同時(shí)也為像我這樣非計(jì)算機(jī)專業(yè),但想進(jìn)入it的學(xué)子指點(diǎn)迷津。謝謝老師!!!!
我的回答:
這位朋友你好,你的問(wèn)題,看似簡(jiǎn)單,其實(shí)已經(jīng)涉及到程序設(shè)計(jì)最深層次的問(wèn)題,可以說(shuō),算是程序設(shè)計(jì)的“世界觀”,很不好回答,我只有盡量答答看,答得不好,請(qǐng)見(jiàn)諒。
簡(jiǎn)單點(diǎn)說(shuō)吧,我覺(jué)得,軟件開(kāi)發(fā),涉及的知識(shí)方方面面,內(nèi)容很多,很多時(shí)候,我們給新人一說(shuō),就至少包括如下內(nèi)容:
1、1~2門語(yǔ)言
至少要學(xué)會(huì)一門OP,即面向過(guò)程的語(yǔ)言,比如C,同時(shí),也要學(xué)習(xí)一門OO的語(yǔ)言,比如Java,C++等。這很好理解,現(xiàn)代程序設(shè)計(jì),要求高內(nèi)聚,低耦合,沒(méi)有OO思想,很難做到,但是,OO一般善于組織模塊架構(gòu),具體到功能實(shí)做,還是OP的,Java和C++,函數(shù)內(nèi)部還是OP的思想,大家想對(duì)不對(duì)?
2、數(shù)據(jù)結(jié)構(gòu),算法語(yǔ)言
程序設(shè)計(jì)就是“搬數(shù)”,這在我的新書(shū)《0bug -- C/C++商用工程之道》里面有專門章節(jié)論述,所有的具體計(jì)算工作,都可以視為“取出數(shù)據(jù)--計(jì)算--放回?cái)?shù)據(jù)”這三步驟,那么,怎么搬數(shù)最快,如何組織數(shù)據(jù)來(lái)搬最有效,你說(shuō)重不重要?這兩門課就是回答這個(gè)問(wèn)題的。
3、編譯原理,操作系統(tǒng),計(jì)算機(jī)組成原理
這些看似和程序開(kāi)發(fā)影響不大,但是,這是內(nèi)功,討論的是計(jì)算世界最本質(zhì)的構(gòu)造特點(diǎn),如果不了解這些知識(shí),就無(wú)法“逆推想”別人的系統(tǒng)是怎么實(shí)現(xiàn)的,我見(jiàn)過(guò)所有的牛人級(jí)程序員,其實(shí)都是這幾門課掌握很好的,才能從普通程序員中脫穎而出,成長(zhǎng)為牛人,狠人。想想看,一旦這些本質(zhì)的道理掌握了,別人的程序、系統(tǒng)在你面前,過(guò)眼就知道他是怎么實(shí)現(xiàn)的,如何重現(xiàn),用了那種算法,有什么優(yōu)缺點(diǎn),如果我要做產(chǎn)品,怎么打他?。。。你說(shuō)牛不牛?
事實(shí)上,這里多說(shuō)一點(diǎn),我的《0bug -- C/C++商用工程之道》一書(shū)里面提供的工程庫(kù)之所以彪悍,可以實(shí)現(xiàn)高安全性,高可用性和高穩(wěn)定性的跨平臺(tái)并行開(kāi)發(fā),其實(shí)我是用寫(xiě)操作系統(tǒng)的功力在寫(xiě)應(yīng)用程序庫(kù),內(nèi)力上相當(dāng)于提升了一個(gè)數(shù)量級(jí),肯定效果好啦。其實(shí)這里面已經(jīng)有點(diǎn)作弊的嫌疑了,用寫(xiě)操作系統(tǒng)的功夫和寫(xiě)普通應(yīng)用程序的朋友PK,肯定占便宜。呵呵。
這點(diǎn),看過(guò)書(shū)的朋友應(yīng)該有印象,大家想想看,操作系統(tǒng)提供什么服務(wù)?資源管理,IO訪問(wèn),時(shí)間片管理,差不多主要就這么多吧,我的庫(kù)同時(shí)也提供這些功能,而且更加安全,實(shí)際上,除了Boot loader和磁盤管理,大家可以認(rèn)為我的庫(kù),是一個(gè)純運(yùn)行版的操作系統(tǒng)的雛形。
也正是因?yàn)槲业膸?kù),相當(dāng)于抽象了32位多任務(wù)操作系統(tǒng)的api服務(wù)特征,所以才能跨平臺(tái)通用。比如哪一天出個(gè)新的操作系統(tǒng),只要我從系統(tǒng)api中獲得內(nèi)存、鎖、線程時(shí)間片的分配功能,我的庫(kù)就可以移植上去跑的。我甚至前段時(shí)間還想,能不能在C51這種16位,明顯沒(méi)有操作系統(tǒng)的平臺(tái)上跑我的庫(kù)。
其實(shí)想想并不難的,C51雖然沒(méi)有時(shí)間片概念,但是中斷很多,我隨便攔截一路中斷,比如時(shí)鐘中斷,就可以搶到時(shí)間片,那么,我的庫(kù)就可以開(kāi)跑,至于鎖和內(nèi)存管理,連時(shí)間片都是我定義的,我當(dāng)然可以自己做鎖,我做個(gè)標(biāo)志,來(lái)定義那個(gè)動(dòng)作不可打斷就好了,內(nèi)存池說(shuō)白了就是個(gè)大數(shù)組,劃分一段二進(jìn)制buffer而已,簡(jiǎn)單到要死。
請(qǐng)注意,這位朋友,我說(shuō)這么多,不是想吹噓自己,我只是想告訴你,這三門課如果學(xué)好了,就這么彪悍。明白嗎?
嗯,總結(jié)一下吧,第一個(gè)問(wèn)題,我想已經(jīng)回答你了,學(xué)習(xí)軟件開(kāi)發(fā),我的理解,不管以后用什么語(yǔ)言,在什么平臺(tái),做什么應(yīng)用,上述幾門課,建議好好學(xué),這是你闖蕩江湖的根本,吃飯的家伙,可不能馬虎。
呵呵,好,我們?cè)贀Q個(gè)話題。
如果說(shuō)就事論事,說(shuō)一個(gè)年輕的朋友怎么學(xué)能學(xué)到計(jì)算數(shù)學(xué)的本源特征,我認(rèn)為上面的回答就已經(jīng)夠了,下面,就請(qǐng)這位朋友回去自己慢慢K書(shū)吧。
不過(guò),如果我自己來(lái)說(shuō),遠(yuǎn)遠(yuǎn)不夠。即使掌握了上述所有知識(shí),也不一定能寫(xiě)出程序的。
寫(xiě)程序,是創(chuàng)作,不一樣的。
“熟讀唐詩(shī)三百首,不會(huì)作詩(shī)也會(huì)吟”,聽(tīng)過(guò)沒(méi)。
但是,還有一句話,“明清以來(lái)無(wú)詩(shī)人”。
唐詩(shī)宋詞元曲,可以說(shuō)代表了我國(guó)詩(shī)歌文化的最高巔峰,但近幾百年以來(lái),大家發(fā)現(xiàn)沒(méi),隨著名作越來(lái)越多,后人的創(chuàng)造力,越來(lái)越少,佳作匱乏。近幾百年,我唯一欣賞的,還就是毛大爺?shù)?#8220;北國(guó)風(fēng)光,千里冰封,萬(wàn)里雪飄...”的《沁園村.雪》。
大家想過(guò)為什么沒(méi)?
我認(rèn)為問(wèn)題就出在前面那句話。“熟讀唐詩(shī)三百首,不會(huì)作詩(shī)也會(huì)吟”,都跑去Copy了,誰(shuí)還玩真的,自己寫(xiě)啊?大家說(shuō)是不是?
其實(shí)現(xiàn)在計(jì)算機(jī)界也有這個(gè)問(wèn)題,目前軟件界的風(fēng)氣,學(xué)術(shù)氣氛很濃,重學(xué)習(xí),輕創(chuàng)造,結(jié)果培養(yǎng)出一堆堆的“小學(xué)究”來(lái),一到實(shí)際工作中就喊黃。嘴巴上說(shuō)起來(lái)一套套的,實(shí)際手上一點(diǎn)真功夫沒(méi)有,這哪成?
你不信,看看現(xiàn)在這么多培訓(xùn)班吧,為什么會(huì)存在?想過(guò)沒(méi)?如果學(xué)校出來(lái)的人才真的那么好用,大學(xué)生還至于找不到工作嗎?
這個(gè)我有切身感受,很多年輕的朋友,解決個(gè)問(wèn)題,做個(gè)方案,一說(shuō)就是找標(biāo)準(zhǔn),找開(kāi)源,貌似一個(gè)程序別人沒(méi)寫(xiě)過(guò),沒(méi)定義過(guò),自己就不敢做事了一樣。你認(rèn)為這樣對(duì)不對(duì)?
其實(shí),我這里要說(shuō)句話,開(kāi)源的流行,事實(shí)上限制了程序界的創(chuàng)造力。原因很簡(jiǎn)單,開(kāi)放源代碼,實(shí)際上是剝奪了對(duì)方思考的權(quán)利,人是有懶惰的天性的,有個(gè)不好的先用著,哪還會(huì)去想自己做個(gè)更好的。
別看那么多朋友天天跟我講,“我一定要好好學(xué)習(xí)一下某個(gè)開(kāi)源代碼,爭(zhēng)取做個(gè)程序比他還好”,我就笑。Linux夠開(kāi)源的了吧,10幾年前就進(jìn)中國(guó)了,可惜,到現(xiàn)在核心主干上,沒(méi)有中國(guó)人一行代碼。這說(shuō)明什么?這十幾年,中國(guó)人沒(méi)有為L(zhǎng)inux做過(guò)一點(diǎn)創(chuàng)造性的事情,光吃現(xiàn)成的了,因此,我這里說(shuō)句話,大家別埋怨國(guó)外大師多,也別埋怨國(guó)外程序員收入高,咱們自己不爭(zhēng)氣,水平太低,創(chuàng)造不出人家那么大的價(jià)值,大家說(shuō)對(duì)不?
我經(jīng)常和小弟開(kāi)玩笑,說(shuō)我要是害你們,就直接給你源代碼用,你要是想我真的幫你,就聽(tīng)我說(shuō)原理,理解了自己想方案。大家能理解什么意思嗎?
我的新書(shū)《0bug -- C/C++商用工程之道》為什么不給源代碼?代碼成熟度太高,拿來(lái)就能用,我一直就怕大家光用代碼不思考,我本意是連代碼都不想給全的,只說(shuō)最重要的核心邏輯,后來(lái)編輯勸我,你要給還是給個(gè)完整的吧,畢竟是出書(shū),要能切實(shí)幫到大家,所以才給全的。讀者可以注意,中間有小部分代碼我根本連注釋都懶得加,那些都是1+1=2的東東,和本書(shū)說(shuō)明的問(wèn)題無(wú)關(guān),僅僅是為了給一個(gè)完整的模塊,才Copy上去的。我更多地還是希望大家能學(xué)到思想,而不是僅僅Copy一堆代碼來(lái)用。
所以,我要說(shuō)的第二個(gè)大問(wèn)題,保持你的創(chuàng)造力,不人云亦云,善于自己思考,才是最關(guān)鍵的,我想,不僅僅是程序設(shè)計(jì)這門學(xué)問(wèn),任何一門學(xué)問(wèn),這個(gè)道理都是對(duì)的,大家說(shuō)是不是?
嗯,再換個(gè)話題。
我前面有文章講過(guò),功夫在詩(shī)外,程序設(shè)計(jì),其實(shí)和大多數(shù)行業(yè)一樣,行業(yè)內(nèi)部還是有高下之分。
剛開(kāi)始大家是“學(xué)徒”,再后面,有點(diǎn)本事了,可以做點(diǎn)事,叫做“匠人”,這基本上養(yǎng)家糊口沒(méi)問(wèn)題了。但是,如果沒(méi)有創(chuàng)造力,很可能終身就停留在這個(gè)階段了。
只有不斷思考,不斷敢于創(chuàng)新,慢慢的,能跨越前人的限制,創(chuàng)造出屬于自己的作品,就可以稱之為“大師”。
如果再往后,不斷努力思考,提升自己的系統(tǒng)化觀念,提升自己的全局思維,進(jìn)而,發(fā)現(xiàn)前人的弱點(diǎn),發(fā)現(xiàn)業(yè)界的空白,自己創(chuàng)造出一些理論和方法,來(lái)填補(bǔ)這些空白,幫助整個(gè)業(yè)界進(jìn)步,這時(shí)候,可以稱之為“宗師”。
你想做哪種?
但是,我也說(shuō)過(guò),越往后,其實(shí)需要的本專業(yè)領(lǐng)域的知識(shí),越少,更多的是向哲學(xué)在靠攏,逐漸提升自己的世界觀,提升自己對(duì)這個(gè)世界本源問(wèn)題的思考,還要學(xué)習(xí)美學(xué)、語(yǔ)文等一系列知識(shí),慢慢地融會(huì)貫通,方能大成。
難不難?
我的回答是:慢慢做咯。
你說(shuō)呢?
如果大家看了,覺(jué)得我的書(shū)好,有幫助,麻煩去這兩家寫(xiě)點(diǎn)書(shū)評(píng),我需要大家的鼓勵(lì),也希望這本書(shū)能幫助更多的人。
如果大家看了,覺(jué)得不好,是垃圾,我也為大家準(zhǔn)備了一個(gè)出氣發(fā)飆的地方,就在我的讀者俱樂(lè)部(書(shū)中有網(wǎng)址),大家有什么不滿,請(qǐng)盡管發(fā)泄,我會(huì)一直改這本書(shū),改到大家滿意為止。
肖舸