大牛——心声
如何成為編程高手
第一階段 此階段主要是能熟練地使用某種語(yǔ)言。這就相當(dāng)于練武中的套路和架式這些表面的東西。 第二階段 此階段能精通基于某種平臺(tái)的接口(例如我們現(xiàn)在常用的Win 32的API函數(shù))以及所對(duì)應(yīng)語(yǔ)言的自身的庫(kù)函數(shù)。到達(dá)這個(gè)階段后,也就相當(dāng)于可以進(jìn)行真實(shí)散打?qū)毩?#xff0c;可以真正地在實(shí)踐中做些應(yīng)用。 第三階段 此階段能深入地了解某個(gè)平臺(tái)系統(tǒng)的底層,已經(jīng)具有了初級(jí)的內(nèi)功的能力,也就是“手中有劍,心中無(wú)劍”。 第四階級(jí) 此階段能直接在平臺(tái)上進(jìn)行比較深層次的開(kāi)發(fā)。基本上,能達(dá)到這個(gè)層次就可以說(shuō)是進(jìn)入了高層次。這時(shí)進(jìn)入了高級(jí)內(nèi)功的修煉。比如能進(jìn)行VxD或操作系統(tǒng)的內(nèi)核的修改。 這時(shí)已經(jīng)不再有語(yǔ)言的束縛,語(yǔ)言只是一種工具,即使要用自己不會(huì)的語(yǔ)言進(jìn)行開(kāi)發(fā),也只是簡(jiǎn)單地熟悉一下,就手到擒來(lái),完全不像是第一階段的時(shí)候?qū)W習(xí)語(yǔ)言的那種情況。一般來(lái)說(shuō),從第三階段過(guò)渡到第四階段是比較困難的。為什么會(huì)難呢?這就是因?yàn)楹芏嗳说乃枷胱儾贿^(guò)來(lái)。 第五階級(jí) 此階段就已經(jīng)不再局限于簡(jiǎn)單的技術(shù)上的問(wèn)題了,而是能從全局上把握和設(shè)計(jì)一個(gè)比較大的系統(tǒng)體系結(jié)構(gòu),從內(nèi)核到外層界面。可以說(shuō)是“手中無(wú)劍,心中有劍”。到了這個(gè)階段以后,能對(duì)市面上的任何軟件進(jìn)行剖析,并能按自己的要求進(jìn)行設(shè)計(jì),就算是MS Word這樣的大型軟件,只要有充足的時(shí)間,也一定會(huì)設(shè)計(jì)出來(lái)。 第六階級(jí) 此階段也是最高的境界,達(dá)到“無(wú)招勝有招”。這時(shí)候,任何問(wèn)題就純粹變成了一個(gè)思路的問(wèn)題,不是用什么代碼就能表示的。也就是“手中無(wú)劍,心中也無(wú)劍”。 此時(shí),對(duì)于練功的人來(lái)說(shuō),他已不用再去學(xué)什么少林拳,只是在旁看一下少林拳的對(duì)戰(zhàn),就能把此拳拿來(lái)就用。這就是真正的大師級(jí)的人物。這時(shí),Win 32或Linux在你眼里是沒(méi)有什么差別的。 每一個(gè)階段再向上發(fā)展時(shí)都要按一定的方法。第一、第二個(gè)階段通過(guò)自學(xué)就可以完成,只要多用心去研究,耐心地去學(xué)習(xí)。 要想從第二個(gè)階段過(guò)渡到第三個(gè)階段,就要有一個(gè)好的學(xué)習(xí)環(huán)境。例如有一個(gè)高手帶領(lǐng)或公司里有一個(gè)好的練手環(huán)境。經(jīng)過(guò)二、三年的積累就能達(dá)到第三個(gè)階段。但是,有些人到達(dá)第三個(gè)階段后,常常就很難有境界上的突破了。他們這時(shí)會(huì)產(chǎn)生一種觀念,認(rèn)為軟件無(wú)非如此,認(rèn)為自己已無(wú)所不能。其實(shí),這時(shí)如果遇到大的或難些的軟件,他們往往還是無(wú)從下手。 現(xiàn)在我們國(guó)家大部分程序員都是在第二、三級(jí)之間。他們大多都是通過(guò)自學(xué)成才的,不過(guò)這樣的程序員一般在軟件公司也能獨(dú)當(dāng)一面,完成一些軟件的模塊。 但是,也還有一大堆處在第一階段的程序員,他們一般就能玩玩VB,做程序時(shí),去找一堆控件集成一個(gè)軟件。 同學(xué)們我們現(xiàn)在還處在第一階段啊,革命尚未成功,同志還須努力!!! 如何成為編程高手...- - 世界上并沒(méi)有成為高手的捷徑,但一些基本原則是可以遵循的。 1. 扎實(shí)的基礎(chǔ)。數(shù)據(jù)結(jié)構(gòu)、離散數(shù)學(xué)、編譯原理,這些是所有計(jì)算機(jī)科學(xué)的基礎(chǔ),如果不掌握他們,很難寫(xiě)出高水平的程序。據(jù)我的觀察,學(xué)計(jì)算機(jī)專業(yè)的人比學(xué)其他專業(yè)的人更能寫(xiě)出高質(zhì)量的軟件。程序人人都會(huì)寫(xiě),但當(dāng)你發(fā)現(xiàn)寫(xiě)到一定程度很難再提高的時(shí)候,就應(yīng)該想想是不是要回過(guò)頭來(lái)學(xué)學(xué)這些最基本的理論。不要一開(kāi)始就去學(xué)OOP,即使你再精通OOP,遇到一些基本算法的時(shí)候可能也會(huì)束手無(wú)策。 2. 豐富的想象力。不要拘泥于固定的思維方式,遇到問(wèn)題的時(shí)候要多想幾種解決問(wèn)題的方案,試試別人從沒(méi)想過(guò)的方法。豐富的想象力是建立在豐富的知識(shí)的基礎(chǔ)上,除計(jì)算機(jī)以外,多涉獵其他的學(xué)科,比如天文、物理、數(shù)學(xué)等等。另外,多看科幻電影也是一個(gè)很好的途徑。 3. 最簡(jiǎn)單的是最好的。這也許是所有科學(xué)都遵循的一條準(zhǔn)則,如此復(fù)雜的質(zhì)能互換原理在愛(ài)因斯坦眼里不過(guò)是一個(gè)簡(jiǎn)單得不能再簡(jiǎn)單的公式:E=mc2。簡(jiǎn)單的方法更容易被人理解,更容易實(shí)現(xiàn),也更容易維護(hù)。遇到問(wèn)題時(shí)要優(yōu)先考慮最簡(jiǎn)單的方案,只有簡(jiǎn)單方案不能滿足要求時(shí)再考慮復(fù)雜的方案。 4. 不鉆牛角尖。當(dāng)你遇到障礙的時(shí)候,不妨?xí)簳r(shí)遠(yuǎn)離電腦,看看窗外的風(fēng)景,聽(tīng)聽(tīng)輕音樂(lè),和朋友聊聊天。當(dāng)我遇到難題的時(shí)候會(huì)去玩游戲,而且是那種極暴力的打斗類游戲,當(dāng)負(fù)責(zé)游戲的那部分大腦細(xì)胞極度亢奮的時(shí)候,負(fù)責(zé)編程的那部分大腦細(xì)胞就得到了充分的休息。當(dāng)重新開(kāi)始工作的時(shí)候,我會(huì)發(fā)現(xiàn)那些難題現(xiàn)在竟然可以迎刃而解。 5. 對(duì)答案的渴求。人類自然科學(xué)的發(fā)展史就是一個(gè)渴求得到答案的過(guò)程,即使只能知道答案的一小部分也值得我們?nèi)ジ冻觥V灰銏?jiān)定信念,一定要找到問(wèn)題的答案,你才會(huì)付出精力去探索,即使最后沒(méi)有得到答案,在過(guò)程中你也會(huì)學(xué)到很多東西。 6. 多與別人交流。三人行必有我?guī)?#xff0c;也許在一次和別人不經(jīng)意的談話中,就可以迸出靈感的火花。多上上網(wǎng),看看別人對(duì)同一問(wèn)題的看法,會(huì)給你很大的啟發(fā)。 7. 良好的編程風(fēng)格。注意養(yǎng)成良好的習(xí)慣,代碼的縮進(jìn)編排,變量的命名規(guī)則要始終保持一致。大家都知道如何排除代碼中錯(cuò)誤,卻往往忽視了對(duì)注釋的排錯(cuò)。注釋是程序的一個(gè)重要組成部分,它可以使你的代碼更容易理解,而如果代碼已經(jīng)清楚地表達(dá)了你的思想,就不必再加注釋了,如果注釋和代碼不一致,那就更加糟糕。 8. 韌性和毅力。這也許是"高手"和一般程序員最大的區(qū)別。A good programming is 99% sweat and 1% coffee。高手們并不是天才,他們是在無(wú)數(shù)個(gè)日日夜夜中磨練出來(lái)的。成功能給我們帶來(lái)無(wú)比的喜悅,但過(guò)程卻是無(wú)比的枯燥乏味。你不妨做個(gè)測(cè)試,找個(gè)10000以內(nèi)的素?cái)?shù)表,把它們?nèi)汲聛?lái),然后再檢查三遍,如果能夠不間斷地完成這一工作,你就可以滿足這一條。 我考高程 [原創(chuàng)] (寫(xiě)于1999-08-23) 中專三年級(jí)的時(shí)候,我已經(jīng)通過(guò)了全國(guó)三級(jí)(B),但一次偶然的機(jī)會(huì)我知道了還有一個(gè)程序員考試,更重要的是程序員考試比全國(guó)三級(jí)更權(quán)威,通過(guò)率更低,并且過(guò)了中程就相當(dāng)于助工,過(guò)了高程就相當(dāng)于工程師,多棒呀,于是我知道我要干什么了。 我先報(bào)考的是中級(jí)程序員水平,程序員考試分上午試題與下午試題,上午試題主要是理論知識(shí),包括數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)庫(kù)原理等等之類的東西,下午試題是C語(yǔ)言,我看過(guò)參考題目,知道這需要的是真本事,是需要平時(shí)的不斷積累。理論知識(shí)則沒(méi)有多大問(wèn)題,無(wú)非是把本書(shū)啃上幾遍。我先買(mǎi)了幾本參考書(shū),開(kāi)始背理論知識(shí),穿梭于鏈表、范式之間,雖然云里霧里不知所云,但覺(jué)得還有點(diǎn)心得。為了提高自己的C編程水平,特別是對(duì)一些基本算法的熟悉,我開(kāi)始把數(shù)據(jù)結(jié)構(gòu)上的一些算法試著自己用C來(lái)實(shí)現(xiàn)一遍,當(dāng)時(shí)用的是TC2.0,一個(gè)個(gè)的算法憑著自己的理解變成了一個(gè)個(gè)的程序,檢索、排序、鏈表、隊(duì)列等等,我覺(jué)得自己進(jìn)入狀態(tài)了,不過(guò)可惜的是,考試的時(shí)候下午試題搞得我不知所措,手忙腳亂,才發(fā)現(xiàn)自己學(xué)的那點(diǎn)皮毛根本不算什么。 中專四年級(jí)我沒(méi)有再報(bào)中級(jí)程序員,而是直接報(bào)了高級(jí)程序員水平,因?yàn)槲矣X(jué)得上次就是我太輕敵,這次干脆背水一戰(zhàn),來(lái)就來(lái)大的。上次考試以后,我的C語(yǔ)言水平有了更進(jìn)一步的提高,高程上午試題有30%是計(jì)算機(jī)英語(yǔ)題,為此我還花了一段時(shí)間啃了遍《計(jì)算機(jī)英語(yǔ)》,雖然自己的英語(yǔ)水平差得不行,但在計(jì)算機(jī)英語(yǔ)方面我還是自認(rèn)為不錯(cuò)的,看一般的英文技術(shù)資料沒(méi)有問(wèn)題。 考高程前正值實(shí)習(xí),我實(shí)習(xí)的工作是在一家百貨大樓站柜,我自然是難耐“寂寞”,私自跑到一家電腦公司里做打工,但又不能讓學(xué)校知道,于是每天上午去百貨大樓站柜,中午至晚上九點(diǎn)半在電腦公司里打工,可當(dāng)時(shí)不知天高地厚的我還報(bào)了四門(mén)自學(xué)考試課程,再加上即將面臨的高程考試,我成了個(gè)不折不扣的大忙人,每天早上六點(diǎn)多起來(lái),騎車(chē)四十分鐘去百貨大樓報(bào)到上班,中午去電腦公司報(bào)到,工作至晚上九點(diǎn)半,然后騎自行車(chē)回校。為了充分利用每一分鐘,我想了很多的辦法。例如站柜的時(shí)候,反正沒(méi)有多少顧客,就在貨票的背面默寫(xiě)英文單詞,繞著柜臺(tái)自言自語(yǔ)默記,一有機(jī)會(huì)就溜到貨柜里看《計(jì)算機(jī)網(wǎng)絡(luò)》,在電腦公司里我主要是做輔導(dǎo)員,為一些上機(jī)的人解決一些問(wèn)題,空閑的時(shí)候就拿出一本《數(shù)據(jù)結(jié)構(gòu)》,邊走邊念念有詞。晚上騎車(chē)回校的時(shí)間也不能放過(guò),邊騎邊回憶一些知識(shí)點(diǎn),為此在這段時(shí)間里我撞過(guò)一輛公共汽車(chē),摔過(guò)一跤,并與一輛迎面過(guò)來(lái)的三輪車(chē)撞個(gè)正著,直至在一個(gè)明媚的早晨,因?yàn)樽呱耜J了紅燈,自行車(chē)被沒(méi)收為止。 這段時(shí)間過(guò)得緊張、刺激、充實(shí),時(shí)間被最高效率的利用,自然有努力便有回報(bào),四門(mén)自考課程都過(guò)了,這可是在以前時(shí)間充裕的時(shí)候都沒(méi)有創(chuàng)造過(guò)的紀(jì)錄,更重要的是,高程竟然過(guò)了,分?jǐn)?shù)線是上午48,下午48,我上午是59,下午是59。這段日子使我明白了,其實(shí)時(shí)間并不是最重要的,效率才是最重要的。還有就是一定要給自己壓力,更重要的是使我明白了,有一份耕耘就會(huì)有一份收獲,這一點(diǎn)對(duì)每一個(gè)人都是公平的。 〖一.◆如何成為一個(gè)優(yōu)秀程序員有指導(dǎo)意義的好文章〗- -?????????? ?????????????????????????? 此人網(wǎng)名為xiaomazhw2001,現(xiàn)在,有篇文章寫(xiě)的不錯(cuò),對(duì)學(xué)編程的人有一定的啟發(fā),把它轉(zhuǎn)帖如下: 給大家學(xué)習(xí)C的一點(diǎn)建議! 220.202.194.11 我始終認(rèn)為,對(duì)一個(gè)初學(xué)者來(lái)說(shuō),IT界的技術(shù)風(fēng)潮是不可以追趕的,而且也沒(méi)有能力去追趕。我時(shí)常看見(jiàn)自己的DDMM們把課本扔了,去賣(mài)些價(jià)格不菲的諸如C#, VB.Net 這樣的大部頭,這讓我感到非常痛心。而許多搞不清指針是咋回事的BBS站友眉飛色舞的討論C#里面可以不用指針等等則讓我覺(jué)得好笑。C#就象當(dāng)年的ASP一樣,“忽如一夜春風(fēng)來(lái),千樹(shù)萬(wàn)樹(shù)梨花開(kāi)”,結(jié)果許多學(xué)校的信息學(xué)院成了“Web 學(xué)院”。96,97級(jí)的不少大學(xué)生都去做Web 了。當(dāng)然我沒(méi)有任何歧視某一行業(yè)的意識(shí)。我只是覺(jué)得如果他們把追趕這些時(shí)髦技術(shù)的時(shí)間多花一點(diǎn)在基礎(chǔ)的課程上應(yīng)該是可以走得更遠(yuǎn)的。 幾個(gè)誤區(qū) 初學(xué)者對(duì)C#風(fēng)潮的追趕其實(shí)也只是學(xué)習(xí)過(guò)程中經(jīng)常遇到的幾個(gè)誤區(qū)之一。我將用一些實(shí)際的例子來(lái)說(shuō)明這些現(xiàn)象,你可以按部就班的看看自己是不是屬于其中的一種或者幾種: 認(rèn)為計(jì)算機(jī)技術(shù)等于編程技術(shù): 有些人即使沒(méi)有這個(gè)想法,在潛意識(shí)中也有這樣的沖動(dòng)。讓我奇怪的是,許多信息學(xué)院的學(xué)生也有這樣的念頭。認(rèn)為計(jì)算機(jī)專業(yè)就是編程專業(yè),與編程無(wú)關(guān)的,或者不太相關(guān)的課程他統(tǒng)統(tǒng)都不管,極端的學(xué)生只要書(shū)上沒(méi)帶“編程”兩個(gè)字他就不看。 其實(shí)編程只是計(jì)算機(jī)技術(shù)應(yīng)用過(guò)程中一種復(fù)雜性最低的勞動(dòng),這就是為什么IT業(yè)最底層的人是程序員(CODER)。計(jì)算機(jī)技術(shù)包括了多媒體,計(jì)算機(jī)網(wǎng)絡(luò),人工智能,模式識(shí)別,管理信息系統(tǒng)等等這些方面。編程工作只是在這些具體技術(shù)在理論研究或者工程實(shí)踐的過(guò)程中表達(dá)算法的過(guò)程。編程的人不一定對(duì)計(jì)算機(jī)技術(shù)的了解就一定很高。而一個(gè)有趣的現(xiàn)象是,不少大師級(jí)的計(jì)算機(jī)技術(shù)研究者是不懂編程的。網(wǎng)上的炒作和現(xiàn)實(shí)中良好的工作待遇把編程這種勞動(dòng)神秘化了。其實(shí)每一個(gè)程序員心里都明白,自己這些東西,學(xué)的時(shí)候并不比其它專業(yè)難,所以自然也不會(huì)高檔到哪里去。 咬文嚼字的孔已己作風(fēng): 我見(jiàn)過(guò)一本女生的《計(jì)算機(jī)網(wǎng)絡(luò)原理》教材,這個(gè)女生像小學(xué)生一樣在書(shū)上劃滿了橫杠杠,筆記做得滿滿的,打印出來(lái)一定比教材還厚。我不明白的是,像計(jì)算機(jī)網(wǎng)絡(luò)原理這樣的課程有必要做筆記?我們的應(yīng)試教育的確害了不少學(xué)生,在上《原理》這一類課程的時(shí)候許多學(xué)生像學(xué)《馬列原理》一樣逐字背誦記憶。這乃是我見(jiàn)過(guò)的最愚蠢的行為。所謂《原理》,即是需要掌握它為什么這樣做,學(xué)習(xí)why,而不是how(怎樣做)。極端認(rèn)真的學(xué)生背下以太網(wǎng)的網(wǎng)線最大長(zhǎng)度,數(shù)據(jù)幀的長(zhǎng)度,每個(gè)字段的意義,IP報(bào)頭的格式等等,但是忘了路由的原則,忘了TCP/IP協(xié)議設(shè)計(jì)的宗旨。總之許多人花了大量的時(shí)間把書(shū)背得滾瓜爛熟卻等于什么也沒(méi)學(xué)。 在學(xué)習(xí)編程的時(shí)候這些學(xué)生也是這樣,他們確切的記得C++語(yǔ)法的各個(gè)細(xì)節(jié)。看完了C++教程后看《Thinking in C++》(確實(shí)是好書(shū)),《Inside C++》,《C++ reference》,this C++, that C++……,然后是網(wǎng)上各種各樣的關(guān)于C++語(yǔ)法的奇聞逸事,然后發(fā)現(xiàn)自己又忘了C++的一些語(yǔ)法,最后回頭繼續(xù)惡補(bǔ)…。有個(gè)師弟就跟我說(shuō):“C++ 太難了,學(xué)了這里忘了那里,學(xué)了繼承忘了模板。”我的回答道:“你不去學(xué)就容易了”。我并沒(méi)有教壞他,只是告訴他,死摳C++的語(yǔ)法就和孔已己炫耀茴香豆的茴字有幾種寫(xiě)法一樣毫無(wú)意義。你根本不需要對(duì)的C++語(yǔ)法太關(guān)心,動(dòng)手編程就是了,有不記得的地方一查MSDN就立馬搞定。我有個(gè)結(jié)論就是,實(shí)際的開(kāi)發(fā)過(guò)程中對(duì)程序語(yǔ)法的了解是最微不足道的知識(shí)。這是為什么我在為同學(xué)用Basic(我以前從沒(méi)有學(xué)過(guò)它)寫(xiě)一個(gè)小程序的時(shí)候,只花了半個(gè)小時(shí)看了看語(yǔ)法,然后再用半個(gè)小時(shí)完成了程序,而一個(gè)小時(shí)后我又完全忘記了Basic 的所有關(guān)鍵字。 不顧基礎(chǔ),盲目追趕時(shí)髦技術(shù): 終于點(diǎn)到題目上來(lái)了。大多數(shù)的人都希望自己的東西能夠馬上跑起來(lái),變成錢(qián)。這種想法對(duì)一個(gè)已經(jīng)進(jìn)入職業(yè)領(lǐng)域的程序員或者項(xiàng)目經(jīng)理來(lái)說(shuō)是合理的,而且IT技術(shù)進(jìn)步是如此的快,不跟進(jìn)就是失業(yè)。但是對(duì)于初學(xué)者來(lái)說(shuō)(尤其是時(shí)間充裕的大中專在校生),這種想法是另人費(fèi)解的。一個(gè)并未進(jìn)入到行業(yè)競(jìng)爭(zhēng)中來(lái)的初學(xué)者最大的資本便是他有足夠的時(shí)間沉下心來(lái)學(xué)習(xí)基礎(chǔ)性的東西,學(xué)習(xí)why 而不是how。時(shí)髦的技術(shù)往往容易掌握,而且越來(lái)越容易掌握,這是商業(yè)利益的驅(qū)使,為了最大化的降低軟件開(kāi)發(fā)的成本。但在IT領(lǐng)域內(nèi)的現(xiàn)實(shí)就是這樣,越容易掌握的東西,學(xué)習(xí)的人越多,而且淘汰得越快。每一次新的技術(shù)出來(lái),都有許多初學(xué)者跟進(jìn),這些初學(xué)者由于缺乏必要的基礎(chǔ)而使得自己在跟進(jìn)的過(guò)程中花費(fèi)大量的時(shí)間,而等他學(xué)會(huì)了,這種技術(shù)也快淘汰了。基礎(chǔ)的課程,比方數(shù)據(jù)結(jié)構(gòu),操作系統(tǒng)原理等等雖然不能讓你立馬就實(shí)現(xiàn)一個(gè)linux(這是許多人嘲笑理論課程無(wú)用的原因),但它們能夠顯著的減少你在學(xué)習(xí)新技術(shù)時(shí)學(xué)習(xí)曲線的坡度。而且對(duì)于許多關(guān)鍵的技術(shù)(比方Win32 SDK 程序的設(shè)計(jì),DDK的編程)來(lái)說(shuō)甚至是不可或缺的。 一個(gè)活生生的例子是我和我的一個(gè)同學(xué),在大一時(shí)我還找不到開(kāi)機(jī)按紐,他已經(jīng)會(huì)寫(xiě)些簡(jiǎn)單的匯編程序了。我把大二的所有時(shí)間花在了匯編,計(jì)算機(jī)體系結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu),操作系統(tǒng)原理等等這些課程的學(xué)習(xí)上,而他則開(kāi)始學(xué)習(xí)HTML和VB,并追趕ASP的潮流。大三的時(shí)候我開(kāi)始學(xué)習(xí)Windows 操作系統(tǒng)原理,學(xué)習(xí)SDK編程,時(shí)間是漫長(zhǎng)的,這時(shí)我才能夠用VC開(kāi)發(fā)出象模象樣的應(yīng)用程序。我曾一度因?yàn)橥瑢W(xué)的程序已經(jīng)能夠運(yùn)行而自己還在學(xué)習(xí)如何創(chuàng)建對(duì)話框而懊惱不已,但臨到畢業(yè)才發(fā)現(xiàn)自己的選擇是何等的正確。和我談判的公司開(kāi)出的薪水是他的兩倍還多。下面有一個(gè)不很恰當(dāng)?shù)谋确?#xff1a;假設(shè)學(xué)習(xí)VB編程需要4個(gè)月,學(xué)習(xí)基礎(chǔ)課程和VC的程序設(shè)計(jì)需要1年。那么如果你先學(xué)VB,再來(lái)學(xué)習(xí)后者,時(shí)間不會(huì)減少,還是1年,而反過(guò)來(lái),如果先學(xué)習(xí)后者,再來(lái)學(xué)VB,也許你只需要1個(gè)星期就能學(xué)得非常熟練。 幾個(gè)重要的基礎(chǔ)課程 如果你是學(xué)生,或者如果你有充足的時(shí)間。我建議你仔細(xì)的掌握下面的知識(shí)。我的建議是針對(duì)那些希望在IT技術(shù)上有所成就的初學(xué)者。同時(shí)我還列出了一些書(shū)目,這些書(shū)應(yīng)該都還可以在書(shū)店買(mǎi)到。說(shuō)實(shí)在的,我在讀其他人的文章時(shí)最大的心愿就是希望作者列出一個(gè)書(shū)單。 大學(xué)英語(yǔ)-不要覺(jué)得好笑。我極力推薦這門(mén)課程是因?yàn)闆](méi)有專業(yè)文檔的閱讀能力是不可想象的。中文的翻譯往往在猴年馬月才會(huì)出來(lái),而現(xiàn)在的許多出版社干脆就直接把E文印刷上去。學(xué)習(xí)的方法是強(qiáng)迫自己看原版的教材,開(kāi)始會(huì)看不懂,用多了自然熟練。吃得苦下得狠心絕對(duì)是任何行業(yè)都需要的品質(zhì)。 計(jì)算機(jī)體系結(jié)構(gòu)和匯編語(yǔ)言-關(guān)于體系結(jié)構(gòu)的書(shū)遍地都是,而且也大同小異,倒是匯編有一本非常好的書(shū)《80x86匯編語(yǔ)言程序設(shè)計(jì)教程》(清華大學(xué)出版社,黑色封面,楊季文著)。你需要著重學(xué)習(xí)386后保護(hù)模式的程序設(shè)計(jì)。否則你在學(xué)習(xí)現(xiàn)代操作系統(tǒng)底層的一些東西的時(shí)候會(huì)覺(jué)得是在看天書(shū)。 計(jì)算機(jī)操作系統(tǒng)原理-我們的開(kāi)發(fā)總是在特定的操作系統(tǒng)上進(jìn)行,如果不是,只有一種可能:你在自己實(shí)現(xiàn)一個(gè)操作系統(tǒng)。無(wú)論如何,操作系統(tǒng)原理是必讀的。這就象我們?yōu)橐粋€(gè)芯片制作外圍設(shè)備時(shí),芯片基本的工作時(shí)序是必需了解的。這一類書(shū)也很多,我沒(méi)有發(fā)現(xiàn)哪一本書(shū)非常出眾。只是覺(jué)得在看完了這些書(shū)后如果有空就應(yīng)該看看《Inside Windows 2000》(微軟出版社,我看的是E文版的,中文的書(shū)名想必是Windows 2000 技術(shù)內(nèi)幕之類吧)。關(guān)于學(xué)習(xí)它的必要性,ZDNET上的另一篇文章已經(jīng)有過(guò)論述。 數(shù)據(jù)結(jié)構(gòu)和算法-這門(mén)課程能夠決定一個(gè)人程序設(shè)計(jì)水平的高低,是一門(mén)核心課程。我首選的是清華版的(朱戰(zhàn)立,劉天時(shí))。很多人喜歡買(mǎi)C++版的,但我覺(jué)得沒(méi)有必要。C++的語(yǔ)法讓算法實(shí)現(xiàn)過(guò)程變得復(fù)雜多了,而且許多老師喜歡用模塊這一東西讓算法變得更復(fù)雜。倒是在學(xué)完了C版的書(shū)以后再來(lái)瀏覽一下C++的版的書(shū)是最好的。 軟件工程-這門(mén)課程是越到后來(lái)就越發(fā)現(xiàn)它的重要,雖然剛開(kāi)始看時(shí)就象看馬哲一樣不知所云。我的建議是看《實(shí)用軟件工程》(黃色,清華)。不要花太多的時(shí)間去記條條框框,看不懂就跳過(guò)去。在每次自己完成了一個(gè)軟件設(shè)計(jì)任務(wù)(不管是練習(xí)還是工作)以后再來(lái)回顧回顧,每次都會(huì)有收獲。 Windows 程序設(shè)計(jì)-《北京大學(xué)出版社,Petzold著》我建議任何企圖設(shè)計(jì)Windows 程序的人在學(xué)習(xí)VC以前仔細(xì)的學(xué)完它。而且前面的那本《Inside Windows 2000》也最好放到這本書(shū)的后面讀。在這本書(shū)中,沒(méi)有C++,沒(méi)有GUI,沒(méi)有控件。有的就是如何用原始的C語(yǔ)言來(lái)完成Windows 程序設(shè)計(jì)。在學(xué)完了它以后,你才會(huì)發(fā)現(xiàn)VC其實(shí)是很容易學(xué)的。千萬(wàn)不要在沒(méi)有看完這本書(shū)以前提前學(xué)習(xí)VC,你最好碰都不要碰。我知道的許多名校甚至都已經(jīng)用它作為教材進(jìn)行授課。可見(jiàn)其重要。 上面的幾門(mén)課程我認(rèn)為是必學(xué)的重要課程(如果你想做Windows 程序員)。 對(duì)于其它的課程有這樣簡(jiǎn)單的選擇方法:如果你是計(jì)算機(jī)系的,請(qǐng)學(xué)好你所有的專業(yè)基礎(chǔ)課。如果不是,請(qǐng)參照計(jì)算機(jī)系的課程表。如果你發(fā)現(xiàn)自己看一本書(shū)時(shí)無(wú)法看下去了,請(qǐng)翻到書(shū)的最后,看看它的參考文獻(xiàn),找到它們并學(xué)習(xí)它們,再回頭看這本書(shū)。如果一本書(shū)的書(shū)名中帶有“原理”兩個(gè)字,你一定不要去記憶它其中的細(xì)節(jié),你應(yīng)該以一天至少50頁(yè)的速度掌握其要領(lǐng)。盡可能多的在計(jì)算機(jī)上實(shí)踐一種理論或者算法。 你還可以在CSDN上閱讀到許多書(shū)評(píng)。這些書(shū)評(píng)能夠幫助你決定讀什么樣的書(shū)。 日三省乎己 每天讀的書(shū)太多,容易讓人迷失方向。一定要在每天晚上想想自己學(xué)了些什么,還有些什么相關(guān)的東西需要掌握,自己對(duì)什么最感興趣,在一本書(shū)上花的時(shí)間太長(zhǎng)還是不夠等等。同時(shí)也應(yīng)該多想想未來(lái)最有可能出現(xiàn)的應(yīng)用,這樣能夠讓你不是追趕技術(shù)潮流而是引領(lǐng)技術(shù)潮流。同時(shí),努力使用現(xiàn)在已經(jīng)掌握的技術(shù)和理論去制作具有一定新意的東西。堅(jiān)持這樣做能夠讓你真正成為一個(gè)軟件“研發(fā)者”而不僅僅是一個(gè)CODER。 把最多的時(shí)間花在學(xué)習(xí)上 這是對(duì)初學(xué)者最后的忠告。把每個(gè)星期玩CS或者CS的時(shí)間壓縮到最少,不玩它們是最好的。同時(shí),如果你的ASP技術(shù)已經(jīng)能夠來(lái)錢(qián),甚至有公司請(qǐng)你兼職的話,這就證明你的天分能夠保證你在努力的學(xué)習(xí)之后取得更好的收益,你應(yīng)該去做更復(fù)雜的東西。眼光放長(zhǎng)遠(yuǎn)一些,這無(wú)論是對(duì)誰(shuí)都是適用的。 相信你已經(jīng)能夠決定是否學(xué)習(xí)C#或者什么時(shí)候去學(xué)它了。 程序員的四個(gè)境界 國(guó)學(xué)大師王國(guó)維先生認(rèn)為古今成大事業(yè)、大學(xué)問(wèn)者,必經(jīng)過(guò)三種境界,第一種境界:“昨夜西風(fēng)凋碧樹(shù)。獨(dú)上高樓,望盡天涯路”;第二種境界:“衣帶漸寬終不悔,為伊消得人憔悴”,第三種境界:“眾里尋他千百度,驀然回首,那人卻在燈火闌珊處”。一代宗師真是體察入微,寥寥數(shù)語(yǔ),道盡了求道者的心路歷程,將一個(gè)人由淺嘗、迷茫到徹悟的過(guò)程盡數(shù)概括,可謂入木三分。 IT行業(yè)可謂現(xiàn)在的熱門(mén)行業(yè),程序員也是很多人羨慕的工作。薪水高,不用東跑西顛,敲敲鍵盤(pán),看看屏幕,一切工作全都搞定,輕松而方便。果真如此嗎?不盡然,實(shí)際上,程序員的職業(yè)生涯也是一個(gè)求道的過(guò)程,需要不斷的提高和學(xué)習(xí),IT行業(yè)知識(shí)更新之快,常讓程序員們有隨時(shí)掉隊(duì)的危險(xiǎn),無(wú)一日不戰(zhàn)戰(zhàn)兢兢,不敢稍有懈怠。 程序員的職業(yè)生涯也可分為四個(gè)階段,初級(jí)程序員(菜鳥(niǎo))、高級(jí)程序員(熟練工)、系統(tǒng)程序員(高手)、軟件大師(大師),其作品也經(jīng)歷四種境界: · 可以運(yùn)行的程序 · 健壯、高效的程序 · 結(jié)構(gòu)優(yōu)美的程序 · 思想深邃的程序 程序員的必經(jīng)第一個(gè)階段都是編寫(xiě)可以運(yùn)行的程序。很多人的編程生涯是從“Hello World”開(kāi)始,當(dāng)?shù)谝淮伟凑战炭茣?shū)上的步驟,將源文件編輯完后,編譯、連接、運(yùn)行,在屏幕上顯示出“Hello World”時(shí),心中的激動(dòng)一點(diǎn)也不亞于阿里巴巴打開(kāi)了寶庫(kù)的大門(mén)。初級(jí)程序員的目標(biāo)一般是讓程序能運(yùn)行起來(lái),他們迷惑于庫(kù)函數(shù)的眾多,不知道該用那一個(gè),他們還要學(xué)習(xí)基本的語(yǔ)法,以使程序編譯通過(guò)。初級(jí)程序員一般不會(huì)考慮設(shè)計(jì)模式、軟件結(jié)構(gòu)等問(wèn)題。記得本人編寫(xiě)的第一個(gè)較大的程序是本人的本科畢業(yè)論文題目——一個(gè)計(jì)算機(jī)輔助實(shí)驗(yàn)系統(tǒng),開(kāi)發(fā)工具為T(mén)urbo C,在DOS下開(kāi)發(fā)(那個(gè)時(shí)候Windows還不太流行,怎么樣,年代夠久遠(yuǎn)吧),整個(gè)軟件大約7000行代碼,在當(dāng)時(shí)已經(jīng)能干不少事,在DOS下也能顯示不少花里胡哨的圖形界面,支持中文,支持鼠標(biāo)操作(那時(shí)候在DOS下需要自己處理鼠標(biāo)事件中斷),當(dāng)時(shí)還頗受好評(píng)。可是今天再重新溫習(xí)過(guò)去的作品,真有點(diǎn)摻不忍睹,整個(gè)軟件毫無(wú)結(jié)構(gòu)可言,一共分成兩個(gè)源文件還是由于編譯器不支持一個(gè)太大的源文件而被迫分開(kāi),整個(gè)系統(tǒng)就是源代碼的簡(jiǎn)單堆砌。相信每個(gè)程序員都需要經(jīng)歷這個(gè)階段,它是程序員職業(yè)生涯的開(kāi)始,沒(méi)有捷徑可以跨越,只有不斷的實(shí)踐、學(xué)習(xí)和總結(jié)。 第二階段的程序員已積累了不少的編程經(jīng)驗(yàn),語(yǔ)法和庫(kù)函數(shù)不再是障礙,他們已不再滿足于程序正確運(yùn)行、功能實(shí)現(xiàn)無(wú)誤。他們需要了解程序背后發(fā)生的事情,需要了解操作系統(tǒng)的原理和調(diào)度機(jī)制,內(nèi)存管理,文件系統(tǒng)組織等;了解開(kāi)發(fā)工具的細(xì)節(jié),如C的函數(shù)調(diào)用機(jī)制,參數(shù)的傳送機(jī)制、堆棧的建立過(guò)程等;了解C++的封裝、繼承和多態(tài)性背后的機(jī)制,虛函數(shù)實(shí)現(xiàn)機(jī)理等。他們不僅知道程序應(yīng)該如何運(yùn)行,還知道它為什么這樣運(yùn)行,能編寫(xiě)高效、魯棒的程序。 第三階段的程序員能構(gòu)建結(jié)構(gòu)優(yōu)美的軟件系統(tǒng),軟件系統(tǒng)結(jié)構(gòu)的合理性、可擴(kuò)展性、可維護(hù)性、可測(cè)試性是系統(tǒng)程序員考慮的重點(diǎn),結(jié)構(gòu)優(yōu)美的軟件系統(tǒng)同一棟完美的建筑群一樣,每個(gè)部分各司其職,搭配合理。本人一直認(rèn)為,一個(gè)好的軟件系統(tǒng)應(yīng)當(dāng)具有美學(xué)特征,如簡(jiǎn)潔、和諧、層次感等,一個(gè)好的軟件系統(tǒng)應(yīng)當(dāng)是簡(jiǎn)潔的,易于理解的;應(yīng)當(dāng)是和諧的,每個(gè)部分高內(nèi)聚、低耦合,既分工又合作;應(yīng)當(dāng)是層次分明,易于維護(hù)和移植。所以,本人建議那些進(jìn)行軟件系統(tǒng)設(shè)計(jì)的程序員,當(dāng)你設(shè)計(jì)完一個(gè)系統(tǒng)后,需要問(wèn)問(wèn)自己:"它美嗎?",如果答案是否定的,那么我建議你需要重新考慮系統(tǒng)的設(shè)計(jì),如果答案是肯定的,那么,恭喜你,你已經(jīng)達(dá)到一個(gè)相當(dāng)高的水平。 最后一級(jí)也許是每個(gè)程序員夢(mèng)想達(dá)到的頂峰,程序設(shè)計(jì)不再是簡(jiǎn)單的工具,而是大師們改變世界的魔杖,從C到C++,再到COM和COBRA,再到XML和WEB SERVICES,每次改變,不是軟件語(yǔ)法和開(kāi)發(fā)工具的升級(jí),而是用軟件構(gòu)建現(xiàn)實(shí)世界模型的改變,是一種軟件思想的革命,軟件具有了靈魂和智能。如果沒(méi)有理解這一點(diǎn),認(rèn)為C++只是更好的C,COM只是更好的C++話,你就沒(méi)有了解它們的精髓和思想性。 程序員的七宗"罪" 雖然軟件工程的思想已被絕大部分程序員所接受,但要將這種思想轉(zhuǎn)化為軟件開(kāi)發(fā)過(guò)程中的種種自覺(jué)行為卻不是一件很容易的事。究其原因,有很多因素,如很多程序員缺乏專業(yè)化的訓(xùn)練,重技巧,輕規(guī)范,包括一些計(jì)算機(jī)專業(yè)科班出身的程序員也存在這種問(wèn)題;再如很多公司只注重軟件產(chǎn)品的開(kāi)發(fā)結(jié)果,不注重開(kāi)發(fā)過(guò)程,客觀上也影響了程序員的目標(biāo)取向。如此種種,使很多中國(guó)的軟件公司難以邁上一個(gè)新的臺(tái)階,發(fā)展壯大也就無(wú)從談起。程序員們作為軟件產(chǎn)品的創(chuàng)造者,當(dāng)然也難辭其咎。 下面所列不過(guò)是產(chǎn)品開(kāi)發(fā)過(guò)程中諸多問(wèn)題中的其中幾個(gè),也許你不會(huì)犯這樣的錯(cuò),我還是引用一句老話:“有則改之,無(wú)則加勉”。 一宗罪:以偏概全 大家都知道,在對(duì)一種產(chǎn)品決定立項(xiàng)開(kāi)發(fā)前,都需要進(jìn)行產(chǎn)品開(kāi)發(fā)的可行性進(jìn)行分析,而其中的市場(chǎng)分析至關(guān)重要,其實(shí)市場(chǎng)分析無(wú)外乎三點(diǎn),一是要開(kāi)發(fā)的產(chǎn)品是有市場(chǎng)需求的,二是公司有能力獲取這份市場(chǎng),三是公司能從產(chǎn)品中獲益(不一定是指賺錢(qián),如公司戰(zhàn)略利益等)。看似簡(jiǎn)單的幾點(diǎn),想要完全弄清楚決非易事,所以很多產(chǎn)品的市場(chǎng)分析容易“以偏概全”,如通過(guò)個(gè)別用戶的特定要求或報(bào)刊雜志的片面報(bào)道將產(chǎn)品市場(chǎng)無(wú)限擴(kuò)大(分析人員自己想象的),技術(shù)驅(qū)動(dòng)而忽略用戶需求和成本(如銥星計(jì)劃)等,至使產(chǎn)品開(kāi)發(fā)完后沒(méi)有預(yù)期的市場(chǎng)效果。想要全面而準(zhǔn)確地的進(jìn)行產(chǎn)品的市場(chǎng)分析確實(shí)是很不容易,需要平時(shí)的積累和理性的分析思考,不能靠撞大運(yùn)。 二宗罪:畫(huà)貓成虎 大家也許有這樣的經(jīng)歷,產(chǎn)品開(kāi)發(fā)完畢交付用戶使用后,用戶總是不滿意,如不符合他們的使用習(xí)慣,功能設(shè)置不合理等。所以產(chǎn)品的需求分析是如此重要,沒(méi)有正確的需求,軟件開(kāi)發(fā)得再好,技術(shù)再先進(jìn),也不過(guò)是當(dāng)擺設(shè)的花瓶。程序員們,尤其是系統(tǒng)分析員容易犯的第二宗罪就是“畫(huà)貓成虎”,曲解了用戶的要求。一份好的需求分析不是簡(jiǎn)單地將用戶的每個(gè)具體的需求點(diǎn)記錄下來(lái),而是要洞察用戶每個(gè)具體要求背后的動(dòng)機(jī),將分散的需求點(diǎn)串成一個(gè)有機(jī)的整體,基于需求并“超越需求”。一個(gè)好的系統(tǒng)分析員不僅是一位軟件專家,還要是一個(gè)出色的領(lǐng)域知識(shí)專家和溝通者。 三宗罪:好大喜功 項(xiàng)目延期好象是軟件開(kāi)發(fā)一個(gè)必經(jīng)的步驟。項(xiàng)目經(jīng)理在制定開(kāi)發(fā)計(jì)劃時(shí),往往過(guò)于樂(lè)觀,每個(gè)開(kāi)發(fā)階段都按最樂(lè)觀的估計(jì)來(lái)計(jì)算開(kāi)發(fā)時(shí)間,而沒(méi)有充分考慮到軟件開(kāi)發(fā)的特殊性和不可預(yù)見(jiàn)性,程序員可能都有這樣的經(jīng)歷,一個(gè)非常小的BUG可能要耽誤很長(zhǎng)的時(shí)間,使開(kāi)發(fā)進(jìn)行不下去。所以項(xiàng)目經(jīng)理切忌“好大喜功”,因?yàn)轫?xiàng)目的不斷延期會(huì)打擊項(xiàng)目成員的信心和士氣,久而久之,會(huì)使大家產(chǎn)生一種慣性:項(xiàng)目延期是正常的。當(dāng)然,這也不能完全怪罪項(xiàng)目經(jīng)理們,因?yàn)樵趪?guó)內(nèi),很多項(xiàng)目計(jì)劃都是采用倒排序的方法,即先確定產(chǎn)品交付的時(shí)間表,再依次倒推測(cè)試、實(shí)現(xiàn)、設(shè)計(jì)和分析所需的時(shí)間,而整個(gè)開(kāi)發(fā)的時(shí)間往往是那些從沒(méi)實(shí)際開(kāi)發(fā)過(guò)產(chǎn)品的領(lǐng)導(dǎo)來(lái)拍腦袋決定的。 四宗罪:只顧眼前 即便是最優(yōu)秀的系統(tǒng)分析員也不能保證所提供的軟件系統(tǒng)需求不會(huì)變化,所以軟件設(shè)計(jì)人員要充分考慮這一點(diǎn),不能僅僅"只顧眼前"的需求,還要有一定的前瞻性,滿足可預(yù)見(jiàn)的未來(lái)需求,軟件系統(tǒng)的可擴(kuò)展性和可維護(hù)性對(duì)于一個(gè)大型、復(fù)雜、長(zhǎng)生命周期的軟件系統(tǒng)來(lái)說(shuō)至關(guān)重要。打個(gè)比方理解一下軟件的可擴(kuò)展性,給一個(gè)10歲的孩子做一條褲子(需求),你不能將褲子的長(zhǎng)度裁減得剛剛與孩子的身高合適(設(shè)計(jì)/實(shí)現(xiàn)),因?yàn)楹⒆娱L(zhǎng)身體很快,到他11歲時(shí)褲子已經(jīng)短了(需求變化),有兩種方法解決,一是將短了的褲子丟棄,重做一條(重新開(kāi)發(fā)系統(tǒng)),但成本很高;二是將在褲腿上接上一段接著穿,但不美觀且不宜操作(維護(hù)成本高)。而最恰當(dāng)?shù)淖龇ㄊ菍⒀澴硬脺p得稍長(zhǎng)過(guò)現(xiàn)在的要求,將長(zhǎng)的部分反縫在褲腿里,等孩子長(zhǎng)高后,拆線將原來(lái)長(zhǎng)的部分放下一點(diǎn)就可以了(擴(kuò)展方便),既方便又不失美觀。可見(jiàn),可擴(kuò)展性并非軟件系統(tǒng)專利,裁縫們?cè)缫牙斫饬诉@一點(diǎn)并付與實(shí)踐。 五宗罪:得過(guò)且過(guò) 軟件設(shè)計(jì)需要通過(guò)軟件實(shí)現(xiàn)成為最終的產(chǎn)品,優(yōu)秀的設(shè)計(jì)需要靠一行一行的代碼體現(xiàn),而有些程序員對(duì)軟件實(shí)現(xiàn)的態(tài)度是,最小滿足原則,“得過(guò)且過(guò)”,對(duì)于系統(tǒng)的容錯(cuò)性,安全性,效率考慮甚少,滿足基本功能即可,沒(méi)有持續(xù)改進(jìn)的態(tài)度和精神。 六宗罪:自我安慰 產(chǎn)品實(shí)現(xiàn)是否達(dá)到設(shè)計(jì)要求在公司內(nèi)部需要測(cè)試驗(yàn)證,嚴(yán)格的測(cè)試對(duì)于保證軟件產(chǎn)品的質(zhì)量是必須的,而出于時(shí)間、資金等緣故,很多軟件產(chǎn)品并沒(méi)有經(jīng)過(guò)嚴(yán)格的測(cè)試就已交付給用戶使用,程序員們總是善于"自我安慰":應(yīng)該沒(méi)問(wèn)題吧。"想當(dāng)然"不能消除缺陷,只有測(cè)試再測(cè)試才是科學(xué)的精神。 七宗罪:敝帚自珍 技術(shù)總是向前發(fā)展的,不要過(guò)于“敝帚自珍”,抱著原有的東西不肯放棄,軟件產(chǎn)品也有生命周期,該終結(jié)時(shí)要毫不猶豫。 程序員的七種武器 信息技術(shù)的發(fā)展時(shí)間雖然不長(zhǎng),但其爆炸式的發(fā)展速度使信息技術(shù)迅速覆蓋社會(huì)和人類生活的各個(gè)角落。程序員們是這場(chǎng)信息化浪潮的見(jiàn)證者之一,更是其中的主要參與者,這是時(shí)代賦予每個(gè)程序員的機(jī)會(huì)和責(zé)任。 信息技術(shù)的更新速度是驚人的,程序員的職業(yè)生涯則是一個(gè)要求不斷學(xué)習(xí)的過(guò)程,永遠(yuǎn)不能固步自封。本人在工作期間曾看見(jiàn)過(guò)很多程序員只要有閑暇時(shí)間就瀏覽一些沒(méi)有太大作用的網(wǎng)頁(yè),在網(wǎng)上聊天,打游戲,浪費(fèi)了大量的時(shí)間,十分不可取。而另外一種情況是,IT技術(shù)的日新月異使很多程序員眼花繚亂,什么都想學(xué),卻又不知從何學(xué)起,今天看看這個(gè),明天學(xué)學(xué)那個(gè),貪多不熟。 雖然IT技術(shù)發(fā)展迅速,但很多技術(shù)都是有規(guī)律可循,一些基本的概念、原理和方法還很通用,可以舉一反三。本人根據(jù)自己的體會(huì)和經(jīng)驗(yàn),向那些剛剛踏入IT行業(yè)的新程序員們或正在迷茫的程序員們推薦程序員必須掌握的七種武器,有了這七種武器,雖不敢說(shuō)笑傲江湖,但將自己立于不敗之地還是可以的。 第一種武器:開(kāi)發(fā)工具 至少熟練掌握兩到三種開(kāi)發(fā)工具的使用,這是程序員的立身之本,其中C/C++和JAVA是我重點(diǎn)推薦的開(kāi)發(fā)工具,C/C++以其高效率和高度的靈活性成為開(kāi)發(fā)工具中的利器,很多系統(tǒng)級(jí)的軟件還是用C/C++編寫(xiě)。而JAVA的跨平臺(tái)和與WEB很好的結(jié)合是JAVA的優(yōu)勢(shì)所在,而本人對(duì)SUN公司的“網(wǎng)絡(luò)即計(jì)算機(jī)”的概念相當(dāng)欣賞,并相信JAVA即其相關(guān)的技術(shù)集JAVA One會(huì)成為未來(lái)的主流開(kāi)發(fā)工具之一。其次,如果能掌握一種簡(jiǎn)便的可視化開(kāi)發(fā)工具,如VB,PowerBuilder,Delphi,C++ Builder,則更好,這些開(kāi)發(fā)工具減小了開(kāi)發(fā)難度,并能夠強(qiáng)化程序員對(duì)象模型的概念。另外,需要掌握基本的腳本語(yǔ)言,如shell,perl等,至少能讀懂這些腳本代碼。 第二種武器:數(shù)據(jù)庫(kù) 為什么數(shù)據(jù)庫(kù)是如此重要?很多應(yīng)用程序都是以數(shù)據(jù)庫(kù)的數(shù)據(jù)為中心,而數(shù)據(jù)庫(kù)的產(chǎn)品也有不少,其中關(guān)系型數(shù)據(jù)庫(kù)仍是主流形式,所以程序員至少熟練掌握一兩種數(shù)據(jù)庫(kù),對(duì)關(guān)系型數(shù)據(jù)庫(kù)的關(guān)鍵元素要非常清楚,要熟練掌握SQL的基本語(yǔ)法。雖然很多數(shù)據(jù)庫(kù)產(chǎn)品提供了可視化的數(shù)據(jù)庫(kù)管理工具,但SQL是基礎(chǔ),是通用的數(shù)據(jù)庫(kù)操作方法。如果沒(méi)有機(jī)會(huì)接觸商業(yè)數(shù)據(jù)庫(kù)系統(tǒng),可以使用免費(fèi)的數(shù)據(jù)庫(kù)產(chǎn)品是一個(gè)不錯(cuò)的選擇,如mySQL, Postgres等。 第三種武器:操作系統(tǒng) 當(dāng)前主流的操作系統(tǒng)是Windows,Linux/Unix,熟練地使用這些操作系統(tǒng)是必須的,但只有這些還遠(yuǎn)遠(yuǎn)不夠。要想成為一個(gè)真正的編程高手,需要深入了解操作系統(tǒng),了解它的內(nèi)存管理機(jī)制、進(jìn)程/線程調(diào)度、信號(hào)、內(nèi)核對(duì)象、系統(tǒng)調(diào)用、協(xié)議棧實(shí)現(xiàn)等。Linux作為開(kāi)發(fā)源碼的操作系統(tǒng),是一個(gè)很好的學(xué)習(xí)平臺(tái),Linux幾乎具備了所有現(xiàn)代操作系統(tǒng)的特征。雖然Windows系統(tǒng)的內(nèi)核實(shí)現(xiàn)機(jī)制的資料較少,但通過(guò)互聯(lián)網(wǎng)還是能獲取不少資料。只有對(duì)操作系統(tǒng)有一定的了解后,你會(huì)發(fā)現(xiàn)自己上了一個(gè)新的臺(tái)階。 第四種武器:網(wǎng)絡(luò)協(xié)議TCP/IP 在互聯(lián)網(wǎng)如此普及的今天,如果您還沒(méi)有對(duì)互聯(lián)網(wǎng)的支撐協(xié)議TCP/IP協(xié)議棧有很好的掌握,就需要迅速補(bǔ)上這一課,網(wǎng)絡(luò)技術(shù)已改變了軟件運(yùn)行的模式,從最早的客戶/服務(wù)器結(jié)構(gòu),到今天的WEB Services,再到未來(lái)的網(wǎng)格計(jì)算,這一切都離不開(kāi)以TCP/IP協(xié)議棧為基礎(chǔ)的網(wǎng)絡(luò)協(xié)議支持,所以,深入掌握TCP/IP協(xié)議是非常必要的。至少,你需要了解ISO七層協(xié)議模型,IP/UDP/TCP/HTTP等常用協(xié)議的原理和三次握手機(jī)制。 第五種武器:DCOM/CORBA/XML/WEB Services 隨著技術(shù)的發(fā)展,軟件與網(wǎng)絡(luò)的無(wú)縫結(jié)合是必然趨勢(shì),軟件系統(tǒng)的位置無(wú)關(guān)性是未來(lái)計(jì)算模式的重要特征之一,DCOM/CORBA是當(dāng)前兩大主流的分布計(jì)算的中間件平臺(tái),DCOM是微軟COM(組件對(duì)象模型)的擴(kuò)展,而CORBA是OMG支持的規(guī)范。程序員需要做的不僅僅是利用商業(yè)的開(kāi)發(fā)平臺(tái)來(lái)開(kāi)發(fā)軟件,而是要理解這些技術(shù)的初衷,即為什么需要這項(xiàng)技術(shù),如果你能理解了這一點(diǎn),再回頭看這些技術(shù)的具體實(shí)現(xiàn),就如庖丁解牛,迎刃而解。XML/WebServices重要性不言而喻,XML以其結(jié)構(gòu)化的表示方法和超強(qiáng)的表達(dá)能力被喻為互聯(lián)網(wǎng)上的“世界語(yǔ)”,是分布計(jì)算的基石之一。 第六種武器:軟件工程與CMM 現(xiàn)代大型軟件系統(tǒng)的開(kāi)發(fā)中,工程化的開(kāi)發(fā)控制取代個(gè)人英雄主義,成為軟件系統(tǒng)成功的保證,一個(gè)編程高手并不一定是一個(gè)優(yōu)秀的程序員,一個(gè)優(yōu)秀的程序員是將出色的編程能力和開(kāi)發(fā)技巧同嚴(yán)格的軟件工程思想有機(jī)結(jié)合,編程只是軟件生命周期中的其中一環(huán),優(yōu)秀的程序員應(yīng)該掌握軟件開(kāi)發(fā)各個(gè)階段的基本技能,如市場(chǎng)分析,可行性分析,需求分析,結(jié)構(gòu)設(shè)計(jì),詳細(xì)設(shè)計(jì),軟件測(cè)試等。一句話可以概括我的看法:“創(chuàng)意無(wú)限,流程保證”。 第七種武器:強(qiáng)烈的好奇心 什么才是一個(gè)程序員的終極武器呢,那就是強(qiáng)烈的好奇心和學(xué)習(xí)精神。沒(méi)有比強(qiáng)烈的好奇心和學(xué)習(xí)精神更好的武器了,它是程序員們永攀高峰的源泉和動(dòng)力所在。 "程序員之路漫漫兮,吾將上下而求索",希望與所有的程序員共勉。希望知識(shí)、經(jīng)驗(yàn)?zāi)芄卜窒?#xff0c;為中國(guó)的信息技術(shù)發(fā)展添自己的一份力。 附:給編程愛(ài)好者的忠告 近來(lái)有不少人問(wèn)我是學(xué)Vb好還是學(xué)C好,還有人問(wèn)Vc和C++Builder哪個(gè)更好,還有人說(shuō)只要是面向?qū)ο蟮木褪呛玫乃訡++和Java最有前途。以我從事計(jì)算機(jī)教育多年的經(jīng)驗(yàn)我要告訴這些編程愛(ài)好者,如果只是一味追求學(xué)會(huì)一門(mén)所謂的最先進(jìn)的編程語(yǔ)言(事實(shí)上不存在最優(yōu)),而忽視了編程思想和基礎(chǔ)知識(shí)無(wú)疑是犯了學(xué)習(xí)編程的大忌。 就拿面向?qū)ο髞?lái)說(shuō),人們一提到它就贊不絕口,然而又有多少人領(lǐng)會(huì)到什么是面向?qū)ο蟮乃枷?#xff0c;我想如果沒(méi)有真正做過(guò)大項(xiàng)目的人是很難體會(huì)到其優(yōu)越性的,這不是通過(guò)學(xué)習(xí)C++或Java就能掌握的。我的意思是編程注重的是想法而不是語(yǔ)言,這就是計(jì)算機(jī)專業(yè)要開(kāi)設(shè)“算法分析”和“數(shù)據(jù)結(jié)構(gòu)”的原因,如果一頭鉆到某一門(mén)語(yǔ)言中無(wú)疑于作繭自縛,束縛了自己的思想,打一個(gè)不好的比方一個(gè)程序員的工作性質(zhì)和民工沒(méi)什么兩樣只是在壘磚頭,而真正的計(jì)算機(jī)人才應(yīng)該是一個(gè)設(shè)計(jì)師、工程師。 現(xiàn)在國(guó)外的一些優(yōu)秀的計(jì)算機(jī)著作的都是一些從事如生物、化學(xué)等領(lǐng)域的專家,我想這是因?yàn)樗麄円郧皼](méi)學(xué)過(guò)計(jì)算機(jī),沒(méi)有被某些傳統(tǒng)的觀點(diǎn)所束縛,從宏觀上來(lái)看待問(wèn)題,反而在思想上有所突破,這是值得我們深思的。 一個(gè)程序員的奮斗歷程 來(lái)源:PCPP.CN 點(diǎn)擊數(shù):122 更新時(shí)間:2006-2-17 責(zé)任編輯:^A^無(wú)謂自我 減小字體 增大字體 收藏到: 娛樂(lè)ViVi 新浪ViVi 博采中心 和訊 天極網(wǎng)摘 Poco 365Key 這些日子我一直在寫(xiě)一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,已有小成了,等寫(xiě)完我會(huì)全部公開(kāi),希望能夠?yàn)閲?guó)內(nèi)IT的發(fā)展盡自己一份微薄的力量。最近看到很多學(xué)生朋友和我當(dāng)年一樣沒(méi)有方向 ,所以把我的經(jīng)歷寫(xiě)出來(lái)與大家共勉, 希望能給剛?cè)缧械呐笥褌円稽c(diǎn)點(diǎn)幫助。 一轉(zhuǎn)眼我在IT行業(yè)學(xué)習(xí)工作已經(jīng)七年多了,這期間我做過(guò)網(wǎng)頁(yè),寫(xiě)過(guò)MIS、數(shù)據(jù)庫(kù),應(yīng)用程序,做過(guò)通信軟件、硬件驅(qū)動(dòng)、協(xié)議棧,到現(xiàn)在做操作系統(tǒng)內(nèi)核和IC相關(guān)開(kāi)發(fā),這中間走了很多彎路,也吃了不少苦。 我上的是一個(gè)三流的高校,就連同一個(gè)城市的人多數(shù)都不知道。因?yàn)閷W(xué)校不好也就沒(méi)有指望能靠學(xué)校名氣找一個(gè)好工作。所有的希望都寄托在自己的努力上了,大一開(kāi)學(xué)前的假期我就開(kāi)始了學(xué)習(xí),記得我買(mǎi)的第一本書(shū)是《計(jì)算機(jī)基礎(chǔ)DOS3.0》,大家別嚇著了,其實(shí)當(dāng)時(shí)已經(jīng)普及了DOS6.22了,只是我在書(shū)店里看到了DOS4.0,5.0,6.0的書(shū),以為像英語(yǔ)那樣是第四、五、六冊(cè),記得當(dāng)時(shí)到處找DOS1.0,現(xiàn)在想想也幸好我沒(méi)有找到:)開(kāi)學(xué)前我學(xué)完了PASCAL,那時(shí)既沒(méi)有計(jì)算機(jī)也沒(méi)有人可以請(qǐng)教,我連程序是什么的概念都沒(méi)有, 只好死記硬背代碼,然后拿紙寫(xiě),我一直到大三才有了一臺(tái)486,在這之前用紙寫(xiě)了多少程序我也記不清楚了,只知道最長(zhǎng)的一個(gè)我拿A4大小的草稿紙寫(xiě)了30多頁(yè),我的C語(yǔ)言、C++ 、VC都是在這樣的條件下入門(mén)的。所以說(shuō)條件是可以克服的,希望我的經(jīng)歷多少給條件艱苦的同學(xué)們一點(diǎn)信心。第一次上機(jī)是在我姐夫的機(jī)房,我的心情激動(dòng)的無(wú)與倫比,但是一上機(jī)我立刻傻了眼,他們用的是英文版的Win3.1,我的那點(diǎn)DOS知識(shí)都見(jiàn)了鬼,上機(jī)提心吊膽的一陣瞎摸,一不小心把Word弄成了全屏,怎么都還不了原,當(dāng)時(shí)真是心急如焚,我以為機(jī)器被我弄壞了。第一個(gè)C語(yǔ)言程序,就是那個(gè)經(jīng)典的HelloWorld,我調(diào)了幾個(gè)星期,上機(jī)機(jī)會(huì)非常少,也沒(méi)有書(shū)告訴我開(kāi)發(fā)環(huán)境(TC2.0)需要設(shè)置,而且開(kāi)始我都不知道有編譯器,我甚至自作聰明把寫(xiě)好的程序擴(kuò)展名從.c改成.exe,結(jié)果可想而知。大一學(xué)完了C、X86的匯編、數(shù)據(jù)結(jié)構(gòu)、C++。由于精力都花在自學(xué)上了,大一下四門(mén)課掛了彩,三類學(xué)校就是這點(diǎn)好,掛上一二十門(mén)也照樣畢業(yè)。不過(guò)扯遠(yuǎn)點(diǎn)說(shuō),我那么刻苦都及不了格,可見(jiàn)我們國(guó)家的計(jì)算機(jī)教育有多死板。 大二準(zhǔn)備學(xué)VC和BC,當(dāng)時(shí)難以取舍,后來(lái)選了VC,不為別的,只為書(shū)店里兩本書(shū),VC 那本便宜6塊錢(qián)。我的努力在班上無(wú)人能及,學(xué)的日夜不分,大三有了計(jì)算機(jī)后更是如此, 很多次父親半夜教訓(xùn)我說(shuō)我不要命了,我一直覺(jué)得自己基礎(chǔ)差,記憶又不行,條件也不好 ,所以覺(jué)得只有多花點(diǎn)時(shí)間才能趕上別人。居然后來(lái)有許多朋友說(shuō)我有學(xué)計(jì)算機(jī)的天賦, 讓我哭笑不得。我用的是486,16M內(nèi)存,1G硬盤(pán),當(dāng)時(shí)同學(xué)們的配置都是P166MMX,我安裝 一個(gè)Windows NT4.0需要一個(gè)通宵,編譯一個(gè)BC5.0向?qū)傻某绦蛐枰鼉蓚€(gè)小時(shí),我的顯示器是個(gè)二手的,輻射非常大,開(kāi)機(jī)屏幕冒火花,看起來(lái)很酷的:),有一次程序?qū)懙奶?#xff0c;覺(jué)得怎么白色的編輯器背景變成了紫色,以為顯示器壞了,后來(lái)才發(fā)現(xiàn)眼睛不行了,不過(guò)說(shuō)來(lái)也奇怪,到今天我的視力還能保持1.5,真是個(gè)奇跡。但是就是那臺(tái)破機(jī)器陪伴了我兩年,讓我學(xué)會(huì)了VC、Delphi、SQLServer等。后來(lái)那臺(tái)機(jī)器給我阿姨打字用,據(jù)她說(shuō)一天她正打的開(kāi)心,一股青煙夾著火苗從顯示器鉆出來(lái),之后它才壽終正寢。 大三假期找了個(gè)機(jī)會(huì)在一個(gè)計(jì)算機(jī)研究所實(shí)習(xí),與其說(shuō)實(shí)習(xí)不如說(shuō)是做義工,工作了兩個(gè)月一分錢(qián)沒(méi)有拿。但是這兩個(gè)月對(duì)我的發(fā)展幫助很大,讓我早一步了解了社會(huì),剛?cè)サ臅r(shí)候我當(dāng)然是一竅不通,在那里我熟悉了網(wǎng)絡(luò),學(xué)會(huì)了Delphi和Oracle。由于工作很認(rèn)真, 得到了比較好的評(píng)價(jià),在一位長(zhǎng)者的引薦下,我開(kāi)始和他們一起做項(xiàng)目,這使我在大三大四就有了自己的收入,大四又找了兩家MIS公司兼職,雖然錢(qián)不多,但是在學(xué)生期間有1000多的收入我已經(jīng)非常滿足了,我終于用自己賺的錢(qián)把計(jì)算機(jī)換了。大四下開(kāi)始找工作,這時(shí)我的工作經(jīng)驗(yàn)已經(jīng)比較多(當(dāng)然現(xiàn)在想想非常幼稚),開(kāi)始聽(tīng)父母的想去那個(gè)研究所, 實(shí)習(xí)過(guò)那個(gè)部門(mén)也希望我能去,但是不知道為什么最后不了了之,這種單位就是比較官僚 ,我一氣之下就到了我兼職的一個(gè)公司做MIS的TeamLeader。在大三到畢業(yè)一年的時(shí)間,做過(guò)了各種MIS,從煤氣、煙廠、公安、鐵路、飲食到高校,什么有錢(qián)做什么,工作也很辛苦 ,經(jīng)常加班和熬通宵,從跟客戶談需求到設(shè)計(jì)、編碼、測(cè)試、交付都要上。那時(shí)覺(jué)得很有成就感,覺(jué)得自己還不錯(cuò),現(xiàn)在想想真是很膚淺。 剛走上工作崗位的學(xué)生很容易被誤導(dǎo),各種開(kāi)發(fā)工具讓人眼花繚亂,同時(shí)也覺(jué)得很受 公司器重,但這樣工作永遠(yuǎn)是一個(gè)低層次的開(kāi)發(fā)者。不要跟我說(shuō)什么系統(tǒng)分析有多么多么重要,多么多么難。你以為自己跟用戶談需求做設(shè)計(jì)就是系統(tǒng)分析和設(shè)計(jì)了嗎,國(guó)內(nèi)又有幾個(gè)公司能夠做的很到位很規(guī)范?我是ISO9000內(nèi)審員,也在Rational公司受過(guò)多次培訓(xùn),拿了4個(gè)證書(shū),還有一個(gè)公司讓我去做CMM。這些我聽(tīng)過(guò)很多,但是很多事情到國(guó)內(nèi)就變了性質(zhì),一個(gè)公司不是通過(guò)了ISO9000或者CMM就能規(guī)范了,我現(xiàn)在在一家有幾十年歷史的外企工作,里面的管理不是一般國(guó)內(nèi)企業(yè)能及的。作為一個(gè)畢業(yè)不久以前沒(méi)有步入過(guò)社會(huì)的學(xué)生,幾乎不可能在很短的時(shí)間掌握系統(tǒng)分析和設(shè)計(jì),面向?qū)ο蟆ML只是一個(gè)工具,關(guān)鍵是人本身的思想,不是說(shuō)你熟悉了C++、Rose就能夠做出好的設(shè)計(jì),相反如果你具備了很高的素質(zhì),你可以用C寫(xiě)出比別人用C++更加模塊化的程序。 話說(shuō)遠(yuǎn)一些,國(guó)內(nèi)軟件開(kāi)發(fā)行業(yè)有一個(gè)怪圈,很多人覺(jué)得VC > Delphi > VB,真是很搞笑。這幾個(gè)軟件我都做過(guò)開(kāi)發(fā),說(shuō)白了他們都是工具,應(yīng)該根據(jù)應(yīng)用的需要選擇采用哪個(gè),而不是覺(jué)得哪個(gè)上層次。如果你因?yàn)橛媚硞€(gè)開(kāi)發(fā)工具很有面子而選擇的話,只能說(shuō)明你很淺薄。如果說(shuō)層次,那么這些工具都不上層次,因?yàn)樗鼈冇脕?lái)用去都是一些系統(tǒng)的API,微軟的朋友不會(huì)因?yàn)槟阌涀∷麄兌嗌賯€(gè)API或者多少個(gè)類就會(huì)覺(jué)得你很了不起,你永遠(yuǎn)只是他們的客戶,他們看重的是你口袋里的銀子。我也做過(guò)系統(tǒng)內(nèi)核,我也封裝過(guò)很多API,同樣我也不會(huì)看重那些使用這些API做二次開(kāi)發(fā)的客戶,除非他能夠作出自己獨(dú)到的設(shè)計(jì)。 至于有人認(rèn)為C++ > C那更是讓人笑掉大牙,不妨你去打聽(tīng)一下,現(xiàn)在有幾個(gè)操作系統(tǒng)內(nèi)核是用C++寫(xiě)的,又有幾個(gè)實(shí)時(shí)系統(tǒng)用的是C++,當(dāng)然我也不是說(shuō)C++不好,但是目前的內(nèi)核和實(shí)時(shí)系統(tǒng)中C++還無(wú)法與C匹敵,至于說(shuō)C++適合做應(yīng)用系統(tǒng)的開(kāi)發(fā)那是另外一回事。所以我的觀點(diǎn)是不在于你用什么工具和語(yǔ)言,而在于你干什么工作。你的設(shè)計(jì)體現(xiàn)了你的技術(shù)層次。 這樣干了一年我覺(jué)得非常苦悶,做的大多數(shù)都是熟練工種的活,個(gè)人技術(shù)上沒(méi)有太多 的提高也看不到方向。所以決定離開(kāi)這個(gè)城市去上海,尋求更好的發(fā)展,并且打算放棄我以前的MIS轉(zhuǎn)到通信行業(yè)。 寫(xiě)到這里不能不提到我女朋友,我們是在來(lái)上海前半年認(rèn)識(shí)的,她大四在我公司實(shí)習(xí),公司派她給我寫(xiě)文檔,我們的感情發(fā)展的很快。她告訴我很多事情,她家原本是改革開(kāi)放的第一批暴發(fā)戶,她母親愛(ài)打牌,輸?shù)袅藥装偃f(wàn),還欠了很多債,她有男朋友,但是她對(duì)他沒(méi)有感情,只因?yàn)樗o了她母親兩萬(wàn)多塊錢(qián),后來(lái)還強(qiáng)迫她寫(xiě)了四萬(wàn)塊的借條,她男朋友背叛過(guò)她并且不止一次打她,現(xiàn)在逼她結(jié)婚不然就要她還錢(qián)。這人居然還是一個(gè)高校的老師!她母親把父親給她的學(xué)費(fèi)花了,因?yàn)橥锨穼W(xué)費(fèi)她沒(méi)有辦法拿到畢業(yè)證。她母親現(xiàn)在有病需要錢(qián),我拿出了自己的一點(diǎn)積蓄并且跟朋友們接了一些,替她交了學(xué)費(fèi)并給她母親看 病(后來(lái)才知道看病的錢(qián)又不知所終,就連她母親是不是有病我都不知道,但她也是沒(méi)有辦法)。這個(gè)時(shí)候我家知道了一些事情,堅(jiān)決反對(duì)我和她在一起,她原來(lái)的男朋友也極力破壞。無(wú)奈之下我們決定早一定離開(kāi)這個(gè)傷心的城市,并且瞞著我們家。由于時(shí)間倉(cāng)促,我只準(zhǔn)備了4000塊錢(qián),她僅有的幾百塊錢(qián)也被她母親要去了,我買(mǎi)了三張票,一張是中午的,兩張是晚上的,中午我的家人把我送上船,他們一離開(kāi)我就下了船,我和她乘坐晚上的船離開(kāi)了這個(gè)我和她生活了很多年的城市,帶走的只是一身債務(wù)。沒(méi)有來(lái)過(guò)上海的我們兩個(gè)性倔強(qiáng),都不愿意去麻煩同學(xué)和朋友。來(lái)到上海是傍晚6點(diǎn)半,我們都不知道該去哪里,我們找了一個(gè)20塊錢(qián)的旅館,這個(gè)房間連窗戶都沒(méi)有,7月份的天氣酷熱難耐,房間里非常悶熱。第二天我們開(kāi)始租房子,因?yàn)樯砩系腻X(qián)不多,我們基本都是步行,花了一個(gè)星期時(shí)間,不知道在浦東轉(zhuǎn)了多少圈后找到了一個(gè)400塊的房子,但是我們都不了解上海是付三壓一,還要付半個(gè)月的中介費(fèi),買(mǎi)了一些鍋碗瓢盆后,我們身上只有800塊錢(qián)了,工作都還沒(méi)有著落,這800塊錢(qián)要支持到我們拿到第一個(gè)月工資,為了省錢(qián)我們自己做飯,每天買(mǎi)菜只花兩塊錢(qián),她非常喜歡吃(也可能她在大學(xué)經(jīng)常挨餓的愿意),看到她現(xiàn)在這樣省吃儉用我真的很不忍心。她以前的男朋友也沒(méi)有放過(guò)她,經(jīng)常打電話來(lái)騷擾,并且來(lái)上海看她,還說(shuō)了不少恐嚇?biāo)脑?#xff0c;她過(guò)于善良,說(shuō)他以前畢竟幫助過(guò)她,叫我不要與他一般見(jiàn)識(shí)。以后的每天在家就是苦等面試通知,原本我想迅速找一家MIS公司解決眼前的困難,但是她堅(jiān)持讓我不要放棄自己的理想,終于功夫不負(fù)有心人,我找到了一家通信公司,4000塊的工資雖然趕不上MIS公司給我開(kāi)出的價(jià)位,但也夠在上海生存。她也找到了工作,第一天上班她哭了,這是她來(lái)上海第一次流淚,我心里很難受也很感動(dòng)。 由于是全新的行業(yè),我把自己降到了零點(diǎn),我學(xué)的VC、Delphi、數(shù)據(jù)庫(kù)派不上用場(chǎng), 擺在我面前的是嵌入式、協(xié)議、信令一些我從未接觸過(guò)的知識(shí)。我知道我沒(méi)有退路,于是拼命的學(xué)習(xí),我把自己當(dāng)做一個(gè)應(yīng)屆畢業(yè)生一樣,一分努力一分收獲,半年過(guò)去我終于熟悉了工作,并且得到了公司的表彰,薪水也加了一級(jí)。后面的日子里我們省吃儉用,把欠朋友的1萬(wàn)多塊錢(qián)還了,日子終于上了正軌。這時(shí)女朋友告訴我她想考研究生,我也很支持,于是她辭職在家備考。 另外,在這里我要感謝我的ProjectManager,他原來(lái)是一個(gè)大通信公司的產(chǎn)品經(jīng)理, 對(duì)人非常和善,我從他那里學(xué)到了很多知識(shí),而且他也給了我許許多多無(wú)私的幫助。在工作上他給我充分的空間和信任。記得公司安排我維護(hù)一個(gè)接入服務(wù)器軟件,由于代碼量不算太小(5萬(wàn)行),資料和文檔都不齊全,我維護(hù)起來(lái)非常吃力,所以想重新把它做一遍, 公司領(lǐng)導(dǎo)不太支持,可能覺(jué)得工作量太大,但是他極力支持我,私下里他讓我放手去做, 我的維護(hù)工作他擠時(shí)間做。在他的支持下,我花了半年時(shí)間完成了接入服務(wù)器的軟件,并且實(shí)現(xiàn)了一個(gè)相對(duì)完整的TCP/IP協(xié)議棧。在這里我學(xué)會(huì)了嵌入式系統(tǒng)設(shè)計(jì)、驅(qū)動(dòng)開(kāi)發(fā)、TCP/IP和很多通信的知識(shí),我花了一年時(shí)間終于使自己從MIS開(kāi)發(fā)轉(zhuǎn)到了通信行業(yè),并且站穩(wěn)了腳跟。我的開(kāi)發(fā)大量是對(duì)硬件的直接操作,不再受微軟的操作系統(tǒng),VC、Delhpi這些開(kāi)發(fā)工具的約束,我終于看到了另外一片天空。 我做事情喜歡追根問(wèn)底,隨著開(kāi)發(fā)的深入,軟件開(kāi)發(fā)與硬件聯(lián)系越來(lái)越緊密,硬件知 識(shí)的匱乏又對(duì)我的發(fā)展產(chǎn)生了障礙,而且芯片技術(shù)基本上掌握在國(guó)外公司的手里,這對(duì)做系統(tǒng)級(jí)設(shè)計(jì)是一個(gè)非常大的制約,一個(gè)新產(chǎn)品出來(lái),第一道利潤(rùn)(也往往是最豐厚的利潤(rùn))常常都被IC公司如Intel、Motorola賺去了,國(guó)內(nèi)的廠商只能喝點(diǎn)湯。所以我決心解決自己的硬件技術(shù)障礙,并打算離開(kāi)通信行業(yè),進(jìn)入IC設(shè)計(jì)相關(guān)領(lǐng)域。 當(dāng)然我明白如果我對(duì)硬件了解的非常少,沒(méi)有哪家IC公司會(huì)仁慈到招我這樣一個(gè)一竅不通的人來(lái)培訓(xùn)。所以我必須努力打好基礎(chǔ),學(xué)一些相關(guān)知識(shí)為以后做準(zhǔn)備。就像我開(kāi)始從MIS轉(zhuǎn)到通信一樣,我看過(guò)大量通信方面的書(shū),并且給一個(gè)ISP做過(guò)RADIUS計(jì)費(fèi)分揀臺(tái),在這樣的背景下這家通信公司才給了我這個(gè)機(jī)會(huì)。我在的通信公司是做系統(tǒng)設(shè)計(jì)的,有不少PCB Layout硬件人員,平常我就注意向他們學(xué)習(xí),由于我做的是軟件,在公司看硬件資料不好意思,所以開(kāi)始只好在家看,剛來(lái)上海工作我連續(xù)一年都在加班,后來(lái)不加了,因?yàn)槲乙獢D出時(shí)間學(xué)習(xí),通常我12點(diǎn)左右睡,第二天5點(diǎn)半起,我上班比較早,地鐵上如果人不多我也用來(lái)看書(shū)。學(xué)習(xí)當(dāng)然不會(huì)是一帆風(fēng)順的,有些實(shí)在不懂的問(wèn)題就積累起來(lái)問(wèn)硬件人員,他們的幫助使我學(xué)習(xí)進(jìn)度快了很多,因?yàn)樵跊](méi)有人點(diǎn)撥的情況下自學(xué),我的一半時(shí)間是花在解決疑難問(wèn)題上,但這種問(wèn)題經(jīng)常是別人的一句話就可以讓我豁然開(kāi)朗,我非常慶幸我有這樣的學(xué)習(xí)環(huán)境。在后面的一年里,我學(xué)會(huì)了看硬件原理圖,學(xué)會(huì)了簡(jiǎn)單的硬件設(shè)計(jì)(模擬電路方面還有不小的差距),事情就是這樣的,當(dāng)你安安份份做軟件,別人永遠(yuǎn)認(rèn)為你是軟件開(kāi)發(fā)人員,在你開(kāi)始學(xué)習(xí)硬件時(shí)別人未必會(huì)認(rèn)同,有位中興通訊的朋友還對(duì)我說(shuō)過(guò),一個(gè)人不可能把所有東西都學(xué)完。我也明白這一點(diǎn),但我希望自己做的更好。但當(dāng)你熟悉硬件后大家又會(huì)覺(jué)得你好像原本就是軟硬件都懂的,同事們也都習(xí)以為常了。這個(gè)時(shí)候我可以把硬件資料堂堂正正的拿到公司看,沒(méi)有人再大驚小怪了。 讓我比較自豪的是我通過(guò)自己的努力做了一個(gè)IAD(軟交換的終端設(shè)備)系統(tǒng)方案,包含軟硬件的選型、設(shè)計(jì)等內(nèi)容,這個(gè)方案得到了公司和同事們的認(rèn)同,讓我感到非常欣慰。 技術(shù)是相輔相成的,當(dāng)我的硬件有了一定的進(jìn)步后,我的軟件設(shè)計(jì)也有了很大的提高 ,我可以從更深層次理解問(wèn)題,我做的接入服務(wù)器CPU是Motorola PowerPC860,熟悉的朋友都知道860 QMC與軟件的批量數(shù)據(jù)傳輸通常采用BD表的方式,硬件人員做驅(qū)動(dòng)的時(shí)候習(xí)慣采用固定BD表,每接收或發(fā)送數(shù)據(jù)都將數(shù)據(jù)從BD表拷貝到用戶Buffer,或從用戶Buffer拷貝到BD表,由于理解的比較深入,我自己重新實(shí)現(xiàn)了這個(gè)過(guò)程,采用動(dòng)態(tài)BD表的方式,驅(qū)動(dòng)從一個(gè)網(wǎng)口接收數(shù)據(jù),提交給我的軟件進(jìn)行三層交換,直至從另外的接口發(fā)送出去,沒(méi)有進(jìn)行一次拷貝。這樣的設(shè)計(jì)大大提高了性能,使系統(tǒng)的指標(biāo)接近理論值。軟硬件的結(jié)合使我的設(shè)計(jì)水平上了一個(gè)臺(tái)階。我現(xiàn)在寫(xiě)的這個(gè)操作系統(tǒng),編譯后我把程序反編譯成匯編,找出其中不優(yōu)化的代碼,然后在C程序中進(jìn)行調(diào)整。舉個(gè)例子,很多CPU沒(méi)有專門(mén)的乘法指令,這個(gè)大家應(yīng)該都知道,在這種CPU上進(jìn)行一個(gè)乘法操作常常會(huì)花費(fèi)大量的指令周期, 有的朋友會(huì)說(shuō)這個(gè)我知道,我會(huì)盡量避免采用×號(hào),但是事情往往不是那么簡(jiǎn)單,你知道 C語(yǔ)言中數(shù)組的下標(biāo)操作是怎么實(shí)現(xiàn)的嗎?仔細(xì)看看反匯編的代碼你就會(huì)明白,同樣是通過(guò)下標(biāo)的定位操作,C編譯器會(huì)有時(shí)候會(huì)產(chǎn)生位移指令,但有時(shí)候會(huì)用乘法實(shí)現(xiàn),兩者效率往往是天壤之別,所以明白這些問(wèn)題你才能將系統(tǒng)性能提升到極致。一些問(wèn)題就不多說(shuō)了,有興趣的話以后可以共同探討。 話說(shuō)遠(yuǎn)一點(diǎn),我由衷的希望在軟件上做的比較深入的朋友們有機(jī)會(huì)學(xué)學(xué)硬件以及其它 相關(guān)知識(shí),尤其是做底層開(kāi)發(fā)和嵌入式設(shè)計(jì)的。這對(duì)軟件技術(shù)的提高有非常大的幫助,否則很多事情你只知道該這樣但不會(huì)明白為什么該這樣。我這個(gè)觀點(diǎn)在我現(xiàn)在的IC公司Project Manager那里也得到了驗(yàn)證。他告訴我們公司現(xiàn)在的802.11芯片產(chǎn)品的軟件經(jīng)理原本是做該芯片硬件設(shè)計(jì)的,某某某原本是做軟件的,現(xiàn)在在做IC,類似的例子還有很多,只是在國(guó)內(nèi)這樣的風(fēng)氣不是非常流行。 我有一些心得體會(huì)與大家分享,只有當(dāng)我干好本職工作后,我才會(huì)學(xué)習(xí)與工作關(guān)系不 大的技術(shù),這樣公司的上司才不至于反感,在入門(mén)階段的問(wèn)題我通常不去問(wèn)那些資深人士 ,而是問(wèn)一些資歷比較淺的朋友,比如剛畢業(yè)不久的學(xué)生,因?yàn)樗麄兺鶗?huì)跟你詳細(xì)的講解,而資深人士通常覺(jué)得你的問(wèn)題太簡(jiǎn)單,所以回答的也很簡(jiǎn)單,我又不好意思多問(wèn)。等技術(shù)上了一定的層次后我才會(huì)問(wèn)他們,他們也能給你比較深入的回答。另外,有些朋友說(shuō)我機(jī)會(huì)比較好,他們也希望能從事新的工作可惜沒(méi)有機(jī)會(huì),我聽(tīng)了只有苦笑,我的機(jī)會(huì)了解的人都應(yīng)該知道,我沒(méi)有出生在什么IT世家:)也沒(méi)有誰(shuí)一路提拔我,所有的路都是自己走出來(lái)的,我母親去世比較早,我的后母(我叫她阿姨)看著我努力過(guò)來(lái)的,一次她看我大年30還在寫(xiě)程序,她說(shuō)像我這樣努力木頭都能學(xué)出來(lái)。 我的最終目的是IC而不是PCB,所以我下一步的準(zhǔn)備開(kāi)始學(xué)習(xí)IC設(shè)計(jì)的知識(shí)。公司的同事沒(méi)有懂IC設(shè)計(jì)的,后面的路又要靠自己了,我買(mǎi)了不少相關(guān)的書(shū),在網(wǎng)上也查了很多的資料,我花了大量的時(shí)間去學(xué)習(xí)VHDL,并且用軟件進(jìn)行了一些簡(jiǎn)單的設(shè)計(jì)和仿真(沒(méi)有設(shè)計(jì)ASIC,只是針對(duì)FPGA),隨著學(xué)習(xí)的深入,我漸漸明白了IC設(shè)計(jì)的基本流程,同時(shí)也明白了這條路的艱辛。這個(gè)時(shí)候我已經(jīng)做好了跳槽的準(zhǔn)備,我向一家業(yè)界又一定知名度的IC設(shè)計(jì)公司投了簡(jiǎn)歷,并通過(guò)了漫長(zhǎng)的面試(4個(gè)多小時(shí))。其他的一切我都比較滿意,唯獨(dú)薪資差強(qiáng)人意,我也明白原因,因?yàn)槲沂沁@個(gè)行業(yè)的新人,我沒(méi)有經(jīng)驗(yàn),我再一次將自己清零了。公司老板問(wèn)我6000多一個(gè)月能不能接受,我知道他也是照章辦事。想想我通信行業(yè)的朋友們,基本上都是年薪10萬(wàn)以上,月薪過(guò)萬(wàn)的也比比皆是,朋友們也幫我介紹了不少待遇不錯(cuò)的公司,我該怎么選擇,當(dāng)時(shí)我很猶豫,我熱愛(ài)我的事業(yè),我向往我的追求, 但我也是一個(gè)普通的人,我也需要養(yǎng)家糊口,我也想早一點(diǎn)買(mǎi)房買(mǎi)車(chē)。生活給我出了一道難題。 愛(ài)因斯坦在63歲時(shí)說(shuō)過(guò)“一個(gè)人沒(méi)有在30歲以前達(dá)成科學(xué)上的最大成就,那他永遠(yuǎn)都不會(huì)有。”這句話給了我很大的壓力和震動(dòng),我馬上就26歲了,離30只有四年時(shí)間,我必須抓緊這幾年寶貴的時(shí)間,努力達(dá)到我技術(shù)上的最高峰。為了這個(gè)理想,為了能離自己的夢(mèng)更近一些,我選擇了這家IC公司,我明白自己的薪資和公司剛進(jìn)來(lái)的碩士研究生相差無(wú)幾, 但為了今后的發(fā)展只能忍受,一切又得重新開(kāi)始。換行業(yè)是一個(gè)非常痛苦的過(guò)程,尤其從一個(gè)春風(fēng)得意的位置換到一個(gè)陌生的崗位,感覺(jué)象從溫暖的被子里鉆出來(lái)跳進(jìn)冰水中,讓人難以接受。在原來(lái)那家通信公司,我是唯一兩年時(shí)間漲了五次工資的員工,公司和同事都給了我極大的認(rèn)可,工作上也常常被委以重任。但現(xiàn)在這一切都成了過(guò)去,在新的公司我只是一個(gè)新人,沒(méi)有人知道也沒(méi)有人在意我過(guò)去的成績(jī)。我決定重新開(kāi)始,我把自己看作新畢業(yè)的學(xué)生,我要用自己的努力得到公司的認(rèn)可。進(jìn)入新的行業(yè)是非常痛苦的,我告訴自己必須忍受這一切,雖然外面有很多誘惑,但是既然作出了選擇我就不允許自己輕易放棄。 我現(xiàn)在已經(jīng)在這家新公司上了一個(gè)多月的班,開(kāi)始非常艱難,現(xiàn)在慢慢適應(yīng)了。第一 個(gè)月結(jié)束時(shí),Team Leader找我談話,說(shuō)我是新進(jìn)員工中最優(yōu)秀的一個(gè),我心里很欣慰,這也算對(duì)我努力的一個(gè)肯定吧。在這里還要感謝我的女朋友,她給了我很大的支持和鼓舞, 每次在我動(dòng)搖的時(shí)候她都在鼓勵(lì)我,讓我堅(jiān)持自己的理想,剛來(lái)上海是她讓我不要勉強(qiáng)去做MIS,這次也是她讓我頂住了月薪過(guò)萬(wàn)的誘惑,沒(méi)有她我可能不會(huì)有今天的成績(jī)。 現(xiàn)在的公司有自己的操作系統(tǒng),自己的CPU、DSP和其它芯片,在這里我能學(xué)到世界上最先進(jìn)的技術(shù),我們的設(shè)計(jì)開(kāi)發(fā)不再完全依賴別人的硬件和系統(tǒng),這讓我很開(kāi)心。我打算等工作步入正軌后,全力學(xué)習(xí)新的知識(shí),實(shí)現(xiàn)我的理想。 在后面的兩年里我給自己定下了幾個(gè)目標(biāo): 一.努力做好本職工作,在工作上得到公司和同事們的認(rèn)同; 二.努力學(xué)習(xí)IC硬件設(shè)計(jì)知識(shí),多向同事請(qǐng)教,并利用一切機(jī)會(huì)多實(shí)踐; 三.實(shí)現(xiàn)我的實(shí)時(shí)操作系統(tǒng)的主要部分,完成TCP/IP協(xié)議棧模塊,并免費(fèi)發(fā)布源代碼; 四.和我女朋友結(jié)婚并買(mǎi)一套小房子,這是最重要的,因?yàn)槲颐靼资聵I(yè)是可以重來(lái)的,但是珍貴的感情很難失而復(fù)得。 在這里提一下我現(xiàn)在開(kāi)發(fā)的操作系統(tǒng),它是一個(gè)實(shí)時(shí)嵌入式系統(tǒng),目前支持以下特性: a.支持時(shí)間片輪轉(zhuǎn)調(diào)度和基于優(yōu)先級(jí)調(diào)度,最多64個(gè)優(yōu)先級(jí); b.搶占式實(shí)時(shí)內(nèi)核; c.為了便于移植,主體用標(biāo)準(zhǔn)C實(shí)現(xiàn); d.匯編代碼非常少,不到100行; e.支持任務(wù)管理,各任務(wù)有獨(dú)立的堆棧; f. 進(jìn)程同步和通信目前完成了Semaphore,Message Queue正在調(diào)試; g.實(shí)現(xiàn)了定時(shí)系統(tǒng)調(diào)用; h.可以在windows上仿真調(diào)試 我還打算下一步實(shí)現(xiàn)優(yōu)先級(jí)反轉(zhuǎn)保護(hù),Event Flag,Data Pipe,內(nèi)存管理(以前實(shí)現(xiàn)過(guò))、驅(qū)動(dòng)接口等。 在這之后我還會(huì)努力完善它,比如加入文件系統(tǒng),協(xié)議棧、調(diào)試接口等。希望朋友們提出自己的意見(jiàn)和建議,在此不勝感激! 后記: 就像有的朋友說(shuō)的,我的經(jīng)歷或許會(huì)給一些朋友產(chǎn)生誤導(dǎo),在這里我必須說(shuō)明一下。 我來(lái)上海以前學(xué)習(xí)過(guò)于拼命,常常晚上只睡3個(gè)多小時(shí),我身高1米71,那時(shí)只有108斤(我現(xiàn)在130多),家人也說(shuō)我這樣拼命活不過(guò)60歲,但是當(dāng)時(shí)的我太固執(zhí),我對(duì)他們說(shuō)只要能實(shí)現(xiàn)理想活50歲我就夠了。那時(shí)的拼命使我的身體受到了影響,有一次早上突然腰肌劇痛難忍,痛的我倒在床上站不起來(lái)。雖然我現(xiàn)在已經(jīng)比較注意,但有時(shí)候還會(huì)隱隱作痛。后來(lái)在女朋友說(shuō)服了我,來(lái)上海以后我不再如此。我經(jīng)常引用父親的一句話“身體是革命的本錢(qián)”。 而且我也發(fā)現(xiàn)拼命不是辦法,我可以熬一兩個(gè)通宵,最多的一次我連續(xù)工作了三天三夜, 但是我半個(gè)月都沒(méi)有恢復(fù)過(guò)來(lái),這樣是不是得不償失?學(xué)習(xí)工作應(yīng)該是一個(gè)長(zhǎng)期的過(guò)程, 像馬拉松而不是百米沖刺。我現(xiàn)在非常注意調(diào)整學(xué)習(xí)和工作的強(qiáng)度,我要保證每天盡量有相對(duì)充沛的精力,一些年輕的朋友覺(jué)得自己也應(yīng)該拼命努力,這讓我多少有些擔(dān)心,如果我的故事能讓你在學(xué)習(xí)工作上多一點(diǎn)興趣,我會(huì)感到很開(kāi)心,但如果誤導(dǎo)了某些朋友,讓你做一些不值得的付出,我會(huì)感到很內(nèi)疚。 技術(shù)沒(méi)有貴賤之分,我以前換行業(yè)是因?yàn)樽约旱呐d趣所致,而不是對(duì)哪個(gè)行業(yè)有什么偏見(jiàn)。我希望我的經(jīng)歷不要給朋友一個(gè)錯(cuò)誤的導(dǎo)向,覺(jué)得我始終向更高的技術(shù)發(fā)展。其實(shí)各行各業(yè)做到頂尖都是很困難的。話又說(shuō)回來(lái)雖然技術(shù)沒(méi)有貴賤,但是門(mén)檻是有高低的, 無(wú)論如何,做IC的門(mén)檻要比做網(wǎng)頁(yè)的高,這一點(diǎn)無(wú)可否認(rèn)。國(guó)家各種人才都是需要的,但是作為個(gè)人奮發(fā)向上的想法還是應(yīng)該有的,努力在自己喜歡的行業(yè)上做的更好,而不應(yīng)該停留在比較膚淺的層次上。 我是一個(gè)自己覺(jué)得比較有自知之明的人,或許我最大的優(yōu)點(diǎn)就是知道自己有很多缺點(diǎn) :)。我的故事中很多的曲折和錯(cuò)誤都是由我的缺點(diǎn)造成的,希望大家用審慎的眼光看待我的經(jīng)歷,不要被我的“花言巧語(yǔ)”所迷惑。我學(xué)習(xí)有些隨心所欲,這給我?guī)?lái)了無(wú)盡的麻煩,也大大阻礙的我的發(fā)展。記得我小時(shí)候成績(jī)比較出色,但是后來(lái)學(xué)習(xí)嚴(yán)重偏科,導(dǎo)致我中學(xué)成績(jī)一再滑坡,也沒(méi)有考上什么好的學(xué)校,小時(shí)候的一個(gè)朋友,當(dāng)時(shí)的成績(jī)和我相仿,但是沒(méi)有我這個(gè)缺點(diǎn),她上了清華,后來(lái)在去了美國(guó)深造,在一個(gè)著名導(dǎo)師手下研究理論科學(xué),這未嘗不是一條更好的出路。另外我的學(xué)習(xí)方法也是在不斷改善中的,過(guò)去 的學(xué)習(xí)過(guò)于講究數(shù)量和時(shí)間,那樣學(xué)習(xí)既苦而已效率不高,現(xiàn)在我非常注意學(xué)習(xí)的效率和技巧,這樣才是學(xué)習(xí)的捷徑(當(dāng)然不是指投機(jī)取巧),比如說(shuō)學(xué)一相對(duì)陌生的技術(shù),如果有條件,不妨問(wèn)一問(wèn)有經(jīng)驗(yàn)的人,不需要問(wèn)很多,往往他不經(jīng)意的幾句話會(huì)給你非常大的幫助,甚至超過(guò)你看一個(gè)星期的書(shū)。帶著這樣的思想再去學(xué)習(xí)你會(huì)節(jié)省很多時(shí)間,這樣何樂(lè)不為呢?這些年中我學(xué)了不少的東西,由于開(kāi)始非常盲目,所以學(xué)的東西雜亂無(wú)章,現(xiàn)在回想起來(lái)讓我啼笑皆非,我把大量的時(shí)間浪費(fèi)在一些沒(méi)有必要深入了解的知識(shí)上,畢竟一個(gè)人的精力是有限度的。很多朋友很我一樣都背過(guò)五筆字形,的確它是個(gè)不錯(cuò)的輸入法,但是對(duì)一個(gè)研發(fā)人員它絕對(duì)不值得你去背,你的時(shí)間應(yīng)該花在有價(jià)值的地方。我這樣的事情還做過(guò)很多,我背過(guò)CCED、WPS的命令和快捷鍵,在dBase基本退出歷史舞臺(tái)后我還花了很多時(shí)間去學(xué)習(xí)它的使用。所以我的學(xué)習(xí)在前期缺乏規(guī)劃,沒(méi)有明確的短期目的、中期目標(biāo),只有一個(gè)虛無(wú)飄渺的長(zhǎng)期的理想。這就像做設(shè)計(jì)一樣,好的設(shè)計(jì)是從需求抽象到代碼有很多過(guò)程,而不能得到了需求就立刻開(kāi)始開(kāi)始編碼。 當(dāng)然這么些年的學(xué)習(xí)和工作多多少少有些收獲,下面我說(shuō)說(shuō)我的一些學(xué)習(xí)的心得,這 些方法未必正確,我也在不斷探索和改進(jìn)中。我的學(xué)習(xí)和工作有相對(duì)明確的目標(biāo),我不會(huì)一時(shí)心動(dòng)而去學(xué)習(xí)某一技術(shù),在下決定之前我會(huì)考慮很多,包括長(zhǎng)期的發(fā)展,個(gè)人路線的規(guī)劃,需要付出的代價(jià)、可能遇到的困難及解決的辦法等等,在決定后還會(huì)制定更加明確的計(jì)劃,包括短期、中期和長(zhǎng)期的,身邊可以利用到的資源(包括好的書(shū)籍、資料、軟硬件環(huán)境,也包括有經(jīng)驗(yàn)的朋友或者師長(zhǎng)),以及每一個(gè)階段是怎么過(guò)渡到高一階段的計(jì)劃,往往在一個(gè)學(xué)習(xí)階段一旦上路后會(huì)走的相對(duì)順利,但是跨階段通常比較麻煩,比如從學(xué)習(xí)基礎(chǔ)知識(shí)轉(zhuǎn)到實(shí)踐。另外我買(mǎi)書(shū)也有自己的方法,現(xiàn)在世面上高質(zhì)量的書(shū)遠(yuǎn)不如低質(zhì)量書(shū)多,對(duì)于一個(gè)陌生的技術(shù),往往在第一次買(mǎi)書(shū)會(huì)選擇錯(cuò)誤,即使買(mǎi)到一本好書(shū)但是它的方向也未必適合你,所以我通常會(huì)先在網(wǎng)上查找一些該技術(shù)的介紹,有了一點(diǎn)點(diǎn)概念后再去買(mǎi)一本比較薄、相對(duì)便宜并且內(nèi)容相對(duì)泛泛而談的書(shū),這是國(guó)內(nèi)作者最善于寫(xiě)的書(shū):) ,再把它瀏覽一遍后我就會(huì)基本明白這門(mén)技術(shù)的要點(diǎn),后面買(mǎi)書(shū)和制定計(jì)劃就會(huì)明確的多。否則一開(kāi)始就想找本好書(shū)往往比較困難,而且買(mǎi)回來(lái)后努力學(xué)習(xí),有時(shí)候?qū)W了一半才發(fā)現(xiàn)是本低質(zhì)量的書(shū)或者是相對(duì)過(guò)時(shí)技術(shù),讓人非常懊惱。另外讓有經(jīng)驗(yàn)的人幫你介紹,通常也是一個(gè)不錯(cuò)的選擇。 有些朋友想學(xué)通信、嵌入式開(kāi)發(fā),但總覺(jué)得自己沒(méi)有軟硬件環(huán)境,我就按我的了解給 大家介紹一下怎么建立這樣的環(huán)境,當(dāng)然我了解的只是我學(xué)習(xí)和工作的方向。通信我做的是數(shù)據(jù)網(wǎng)方面的工作,包括TCP/IP、二三層交換、對(duì)接入網(wǎng)、H.323和軟交換也有一點(diǎn)認(rèn)識(shí)。這些軟硬件環(huán)境都是可以在PC上構(gòu)建的。你甚至可以在一個(gè)沒(méi)有網(wǎng)卡的PC上建立一個(gè)包含多個(gè)路由器、接入服務(wù)器、VoIP網(wǎng)關(guān)、網(wǎng)守、主機(jī)等的仿真網(wǎng)絡(luò)環(huán)境,而且與實(shí)際的網(wǎng)絡(luò)相當(dāng)接近,當(dāng)然這需要你有清晰的網(wǎng)絡(luò)概念和一定的網(wǎng)絡(luò)知識(shí),我一直在努力開(kāi)發(fā)一套軟件將這個(gè)過(guò)程簡(jiǎn)化,目前試驗(yàn)已經(jīng)做完,我可能會(huì)將它融入我的操作系統(tǒng)外圍擴(kuò)展軟件中。這樣的方法我無(wú)法用簡(jiǎn)單的語(yǔ)句講的很清楚,我可以說(shuō)一下大概的思想,就是在PC上實(shí)現(xiàn)仿真網(wǎng)卡,(知道Windows怎么在沒(méi)有網(wǎng)卡的機(jī)器實(shí)現(xiàn)虛擬網(wǎng)卡技術(shù)的朋友都應(yīng)該會(huì)明白),然后每一個(gè)仿真網(wǎng)卡對(duì)應(yīng)一個(gè)虛擬設(shè)備,如路由器或者主機(jī)。你也可以借助第三方工具完成部分工作,如VmWare等。我現(xiàn)在就是利用一個(gè)仿真網(wǎng)卡做自己的開(kāi)發(fā)的。 至于嵌入式開(kāi)發(fā)環(huán)境更加容易實(shí)現(xiàn),PC就是一個(gè)非常大的硬件平臺(tái),現(xiàn)有的嵌入式操 作系統(tǒng)通常都支持X86,你可以在上面做開(kāi)發(fā),通過(guò)軟盤(pán)Boot或者使用虛擬機(jī)裝載,我用VxWorks做了試驗(yàn),在一臺(tái)PC上跑Windows和VxWorks兩個(gè)系統(tǒng)。另外Windows上的兼容DOS的16位仿真X86環(huán)境也為很多操作系統(tǒng)提供了絕佳的試驗(yàn)環(huán)境,我的操作系統(tǒng)在Windows上就是這樣實(shí)現(xiàn)的。Linux在嵌入式中應(yīng)用也比較廣泛,它在網(wǎng)上有大量的資料,而且也相對(duì)比較容易實(shí)踐。同時(shí)很多完善的嵌入式開(kāi)發(fā)環(huán)境支持軟件仿真,如Tornado、WinCE等。 編程高手幾種必學(xué)的編程語(yǔ)言 http://www.souzz.net 2006-02-02 文章出處:希賽網(wǎng) 我自己在學(xué)習(xí)編程的過(guò)途中有的幾個(gè)疑問(wèn),1)什么編程語(yǔ)言我需要學(xué)。 2)學(xué)多少種才算可以。最后通過(guò)我自己學(xué)習(xí)感受和對(duì)其他編程高手(主要是新聞組)的請(qǐng)教,我認(rèn)為找到了滿意我的答案。拋磚引玉,做個(gè)參考吧。 對(duì)于初學(xué)者,我建議從 python 開(kāi)始學(xué)。因?yàn)樗谡Z(yǔ)言設(shè)計(jì)上很整潔,幫助文件也很全面。而且也是 object-oriented (O-O),盡管我把它作為一個(gè)初學(xué)者開(kāi)始的語(yǔ)言,并不代表它的用處和功能不強(qiáng)大。實(shí)際上它是個(gè)功能強(qiáng)大,可以用來(lái)做大的編程工程的語(yǔ)言。 我知道國(guó)內(nèi)對(duì) python 可能還不了解,因?yàn)樗鄬?duì)來(lái)說(shuō)也比較新(1990),到現(xiàn)在有12年的歷史了,但是它在國(guó)外已經(jīng)被廣泛接受和認(rèn)同,快速發(fā)展。不過(guò)我知道郵電出版社最近剛出了一本介紹 python 編程的書(shū),大家可以查詢。python 的主頁(yè) www.python.org Java 也是個(gè)很好的語(yǔ)言來(lái)開(kāi)始學(xué)編程。不過(guò)它比 python 復(fù)雜。國(guó)外的大學(xué)現(xiàn)在都采用 java 作為電腦專業(yè)的凱時(shí)語(yǔ)言。總之我覺(jué)得除了 python 之外,它也可以作為一個(gè)極好的初學(xué)者語(yǔ)言。 不過(guò),會(huì)了這兩種語(yǔ)言,并不代表你就是一個(gè)編程員了。學(xué)會(huì)編程的關(guān)鍵就是 -- “ 編程思想“ 。 學(xué)會(huì)怎樣用一種很“ 廣泛的思維“ 去考慮“ 編程問(wèn)題 “,也就是這種思維是可以放之于任何一種編程語(yǔ)言都可以解決問(wèn)題的,而不是局限于單純的一種語(yǔ)言。這樣當(dāng)你需要學(xué)習(xí)一種新的語(yǔ)言時(shí),你只要學(xué)習(xí)他的語(yǔ)法等等就可以了,至于怎樣用這種語(yǔ)言解決編程問(wèn)題不是早就在你的腦子里了嗎。所以,這也就是為什么很多程序員可以拿到一種語(yǔ)言,一兩個(gè)星期就可以使用的很熟練了。這,也同樣要求你去學(xué)幾種完全不同的語(yǔ)言。 C 語(yǔ)言是非常有效率的,很多時(shí)候你都需要考慮內(nèi)存的管理等底層的東西。很可惜這些都需要你去花很多的時(shí)間去做,問(wèn)每一個(gè) C/C++ 的程序員,用 C/C++ 編程是不是一個(gè)很頭疼的事。好消息是,現(xiàn)在的機(jī)器都已經(jīng)很高級(jí),運(yùn)算的很快,在很多時(shí)候我們是不用考慮用 C/C++ 去做,忽略它所帶來(lái)的好處,當(dāng)然除非這個(gè)工程真的很需要處理底層的東西(象 內(nèi)核的編輯,3-D 圖形等)。很多時(shí)候 python, java 等都可以實(shí)現(xiàn)。另外在現(xiàn)在很多工程所要求的時(shí)間都不是足夠充裕來(lái)用 C/C++ 去做,所以在商業(yè)上時(shí)間就是金錢(qián),這個(gè)代價(jià)誰(shuí)也付不起。 我這里并沒(méi)有說(shuō) C/C++ 不好,你不應(yīng)該學(xué)。相反我覺(jué)得我們應(yīng)該學(xué),但不是作為一個(gè)初學(xué)者的語(yǔ)言來(lái)學(xué)。在 C 和 C++ 之間,我推薦先學(xué) C 。.因?yàn)樗鄬?duì)來(lái)說(shuō)較小,簡(jiǎn)單。作為一種底層編程語(yǔ)言,C,你可以學(xué)到很直接的內(nèi)存管理,指針,等。另外,很多語(yǔ)言都是用 C 來(lái)設(shè)計(jì)的, 比如 perl , java, python 其它語(yǔ)言值得一學(xué)的有 perl , Lisp(當(dāng)然你也很一說(shuō) effile, proflog),提到 perl 是因?yàn)樗膶?shí)用性,廣泛的應(yīng)用在網(wǎng)絡(luò)和系統(tǒng)管理,perl 提倡 "There is always more than one way to do it" 這主要是從 perl 的語(yǔ)法以及它的獨(dú)特設(shè)計(jì)上來(lái)獲得,記得用幾行code 你就可以寫(xiě)出很有效率的程序?這也就是為什么我很喜歡perl 了。但是perl 的語(yǔ)法著實(shí)讓很多人頭疼 而且對(duì)于用 perl 寫(xiě)的大型程序,維護(hù)性不是很好,python 就沒(méi)有這方面的問(wèn)題,這也是為什么很多 perl 的用戶轉(zhuǎn)向了 python 。很多人用 perl 的目的和用 python 一樣,避免在不要求 C 的效率時(shí) 使用 C。 Lisp 據(jù)說(shuō)是很有啟迪性的語(yǔ)言,會(huì)讓你成為一個(gè)更好的程序員.(我還沒(méi)有到達(dá)那個(gè)程度 :-) 我個(gè)人推薦 (python, java, C ,perl, 和 Lisp),因?yàn)樗麄兪褂貌煌姆椒▉?lái)編程,每一種都會(huì)在某種程度上交給你些很有價(jià)值的東西。 談到學(xué)習(xí)編程,單純的上課和看書(shū)只會(huì)讓你學(xué)習(xí)語(yǔ)言的特性等,只有學(xué)會(huì)用編程的思想來(lái)思考才是你終生受用的。這些只能依靠 “ 練習(xí) “ 具體就是 1) 讀程序 2) 寫(xiě)程序 看似簡(jiǎn)單,但堅(jiān)持下來(lái)你才會(huì)真正體會(huì)到,這里沒(méi)有其他可以投機(jī)取巧的方法學(xué)習(xí)編程了。 至于學(xué)多少種,是越多越好吧。但并不是指每個(gè)都精通,我想大家也沒(méi)那么多時(shí)間和精力。但在你有了堅(jiān)實(shí)的編程經(jīng)驗(yàn)和基礎(chǔ),了解其它語(yǔ)言的設(shè)計(jì)方法、構(gòu)造會(huì)開(kāi)闊你的眼界,沒(méi)準(zhǔn)什么時(shí)候你也可以編出自己的語(yǔ)言(咱中國(guó)人編的!!) :-) 要提醒大家的是,如果每種語(yǔ)言總是略學(xué)皮毛,然后又急匆匆的跳到另外一種語(yǔ)言,那你就會(huì)一事無(wú)成,永遠(yuǎn)彷徨在初學(xué)者的門(mén)檻邊。我想這句話不只是對(duì)程序員,對(duì)我們來(lái)說(shuō)也是生活中的一個(gè)道理。 成為軟件高手的幾個(gè)忌諱 http://www.souzz.net 2006-02-04 文章出處:希賽網(wǎng) 1) 不會(huì)英語(yǔ):CS源于美國(guó),重量級(jí)的文檔都是英文的。不會(huì)英語(yǔ),那么你只能忍受拙劣的翻譯和大延遲的文檔(翻譯出來(lái)的文檔幾乎都是很久以前出版的東西)。 2) 急于求成:什么都沒(méi)學(xué)習(xí)就開(kāi)始編程是最大的忌諱。寫(xiě)C++程序語(yǔ)法都能錯(cuò),數(shù)據(jù)結(jié)構(gòu)連線性表都不知道,數(shù)據(jù)庫(kù)不知道關(guān)系模型,TCP編程不知道socket,還是先坐下來(lái)學(xué)習(xí)幾年再說(shuō)(如果說(shuō)工作急需,我只能說(shuō):早干嘛去了) 3) 過(guò)于好問(wèn):勤學(xué)好問(wèn)是一種很好的品質(zhì),但是如果把勤學(xué)丟了,只留下好問(wèn),就是一個(gè)惡劣的素質(zhì)了。事無(wú)巨細(xì)都去請(qǐng)教別人,一則會(huì)讓人厭煩,二則由于沒(méi)有系統(tǒng)學(xué)習(xí)過(guò)程,也是不可能學(xué)習(xí)好的。 4) 只會(huì)艷羨別人和說(shuō)別人不該拿那么多錢(qián),而自己卻收入微薄:老實(shí)說(shuō),絕大多數(shù)情況下,收入的高低和你的水平是有正相關(guān)關(guān)系的。不是否認(rèn)有關(guān)系的存在,但是絕對(duì)不會(huì)10個(gè)人中9個(gè)人有關(guān)系而獨(dú)獨(dú)你沒(méi)有。少抱怨一些多學(xué)習(xí)一些,提升自己才是最重要的。 5) 過(guò)于不求甚解和過(guò)于求甚解。了解為什么是很重要的,但是要學(xué)習(xí)的東西很多,如果什么都弄明白,那么估計(jì)頭發(fā)白了還沒(méi)有找到所有答案。當(dāng)然如果什么都不想細(xì)致了解,那么只能去做藍(lán)領(lǐng)了。 6) 過(guò)分崇拜他人:我想信很多人都是很厲害的,值得大家崇拜,但是如果過(guò)于崇拜,把他們的話當(dāng)成圣經(jīng)就沒(méi)有必要了。你需要突破他們,而不是崇拜他們。 7) 不想吃苦:IT業(yè)高收入和高競(jìng)爭(zhēng)是聯(lián)系在一起的。沒(méi)有付出永遠(yuǎn)別想進(jìn)步。轉(zhuǎn)載于:https://www.cnblogs.com/jiaoluo/p/3538949.html
總結(jié)
- 上一篇: 第九周学习
- 下一篇: CAD如何导出PDF格式