怎樣作一個好的程序員: 首先就是你的目標就不明確,你先要肯定本身打算向哪方面發展
當好一名合格的程序員不只要有紮實的基礎知識,還要多思考,多實踐,勤看書,更要有團隊合做精神,平時多和別人交流,俗話說:「三人行必有我師」,多上網看看一些資料,看看別人對同一問題的看發會有很大的啓發,要知道不是你一我的在寫程序而是和你們一塊兒寫程序,注重團隊的力量!編程是一種藝術,要好好的發揮團隊的力量把它作的漂亮,完美。
勤奮聯繫,多寫一些程序,而後在根據程序代碼多想一想用多種方法去測試運行它`實習基地給咱們提供了實際作一些項目的機會`我會借這個機會多學習`多思考,多實踐。多看一些相關的書,不斷提升本身。
我以爲作一名程序員是很難的,特別是作一名合格的程序員就更要嚴格要求本身,增長團隊合做能力,不斷提升自身水平。
1.1 程序≠軟件
如今不少人覺得程序就是軟件,軟件就是程序。事實上,軟件和程序在20世紀80年代時,還能夠說是等同的,或者說,在非pc領域裏它們可能還會是等同的,好比說某個嵌入式軟件領域,軟件和程序多是等同的。可是,在pc這個領域內,如今的程序已不等於軟件了。這是什麼意思呢?
1. 軟件發展簡述
在20世紀80年代的時候,pc剛誕生,這時國內尚未幾我的會寫程序。那麼,若是你寫個程序,別人就能夠拿來用。這時候的程序就能產生價值,這個程序就直接等同於軟件。
但軟件行業發展到如今,這裏以中國的狀況爲例(美國在20世紀80年代,程序已經不等同於軟件了),程序也不等同於軟件了。由於如今會寫程序很容易,可是你的這個程序很難產生什麼樣的商業意義,也不能產生什麼價值,這就很難直接變成軟件。要使一個程序直接變成軟件,中間就面臨着很高的門檻問題。這個門檻問題來自於整個行業的造成。
如今,你寫了一個程序之後,要面臨商業化的過程。你要宣傳,你要讓用戶知道,你要創建經銷渠道,可能你還要花不少的時間去說服別人用你的東西。這是程序到軟件的一個過程。這門檻已比較高了。
咱們在和國內的大經銷商的銷售渠道的人聊天時,他們的老闆說,這幾年作軟件的門檻挺高的,若是你沒有5、六百萬作軟件,那是「玩」不起來的。我說:「大家就使門檻很高了。」他說:「那確定是的。若是你寫個「爛」程序,明天你倒閉了,你的東西還佔了個人庫房,我還不知道找誰退去呢。個人庫房是要錢的呀!如今的軟件又是那麼多!」
因此,若是你沒有必定的資產的話,經銷商都不理你。實際狀況也是這樣的,若是你的公司比較小,且沒什麼名氣,你的產品放到經銷商庫房,那麼他最多給你暫收,產品銷不動的話,通常兩週絕對會退貨。由於如今經銷商可選擇的餘地已不少了,所謂的軟件也已經不少了。而程序則更多,程序都想變成軟件,誰都說本身的是「金子」。但只有經受住用戶的檢驗,才能成爲真正的「金子」。
這就是美國爲何在20世紀90年代幾乎沒有什麼新的軟件公司產生的緣由。只是原來80年代的大的軟件公司互相兼併,我吞你,你吃我。可是,寫程序的人不少,美國的程序變軟件的門檻可能比咱們還高,因此不少人寫了程序就丟在網上,就造成了共享軟件。
2. 共享軟件
共享軟件是避開商業渠道的一種方法。它避開了商業的門檻,由於這個行業的門檻發展很高之後就輕易進不去了。我寫個程序丟在網上,你下載就能夠用,這時候程序又等於軟件。共享軟件是這樣產生的,是由於沒有辦法中的辦法。若是說程序直接等於軟件的話,誰也不會輕易把程序丟到網上去。
開始作共享軟件的人並不認爲作它能賺錢,只是後來用的人多了,有人付錢給他了。共享軟件使得程序和軟件的距離縮短了,可是它與商業軟件的距離會進一步拉大。商業軟件的功能和所要達到的目標就不是一我的能「玩」得起來的了。這時的軟件也已不是幾我的、一個小組就能作出來的了。這就是在美國新的軟件公司無法產生的緣由。好比netscape網景是在1995~1996年產生的新軟件公司,可是,兩三年後它就不見了。
1.1.1 商業軟件門檻的造成
1. 商業軟件門檻的造成
商業軟件門檻的造成是整個行業發展的必然結果。任何一個行業初始階段時的門檻都很是低,可是,只要發展到必定的階段後,它的門檻就必然擡高。好比,如今國內生產小汽車很困難,但在20世紀50年代~60年代的時候,你裝4個輪子,再加上柴油機等就造成汽車。那時的萊特兄弟裝個螺旋槳,加兩個機翼,就能作飛機。整個行業尚未造成的時候,絕對能夠這樣作,可是,到整個行業造成時,你就作不了了。全部的行業都是這樣的。
爲何網站一出來時那麼多人去擠着作?這也是由於一開始的時候,看起來門檻很是低,人人均可以作。只要有一個服務器,架根網線,就能作網站。這個行業處於初始階段時,狀況就是這樣的。但這個行業造成後,你就輕易地「玩」不了了。
國內的軟件發展也是如此。國內的軟件自從軟件經銷商造成之後,這個行業才真正地造成。有沒有一個渠道是判斷一個行業是否造成的很重要的環節。任何一個行業都會有一個經銷渠道,若是渠道造成了,那麼這個行業也就造成了。第一名的經銷商是1994年~1995年成立的,也就是說,中國軟件行業大概也就是在1995年造成的,至今才經歷8年時間的發展。
有一種浮躁的思想認爲,中國軟件產業應該很快就能遇上美國。美國軟件行業是上世紀80年代造成的,到如今已經發展了20多年了。中國軟件行業才8年,8年纔是一個懵懂的小孩,20多歲是一個強壯的青年,那麼他們的力量是不對等的。但也要看到,當8歲變成15歲的時候,它真正的能量纔會反映出來。
2. 軟件門檻對程序員的影響
如今中國軟件行業正在造成。因此,如今作一個程序員必定要有耐心,由於如今已經不等於之前了。你必定要把全部的問題搞清楚,而後再去作程序。
對於程序員來講,最好的工做環境是在現有的或者初始要成立的公司裏面,這是最容易成功的。我的單槍匹馬闖天下已經很困難了。即便如今偶爾作兩個共享軟件放在網上能成名,可是也已經比較困難了。由於如今作軟件的人已經不少了。這也說明軟件已經不等於程序了,程序也不等於軟件。
程序要變成軟件,這中間是一個商業化的過程。沒有門檻之前,它沒有這個商業過程,如今有這個行業了,它中間就有商業化的過程。這個商業的過程就不是一我的能「玩」的。
若是你開始作某一類軟件的時候,別人已經作成了,這時你再決定花力氣去作,那麼你就要花雙倍的力氣去遇上別人。
如今的商業軟件每每是由不少模塊組成的,模塊是整個系統的一部分。我的要完整地寫一個商業系統幾乎是不可能的。軟件進入windows平臺後,它已經很複雜了,不像在dos的時候,你寫兩行程序就能賣,作個zip也能賣。事實上,美國的商業編譯器也不是一我的能「玩」的。如今你可能以爲它是很簡單的,甚至linux還帶了一個gcc,且源程序還在。你能夠把它改一改,作個vc試一試,看它會有人用嗎?它能變成軟件嗎?即便你再作個界面,它也仍是一個gcc,絕對不會成爲visual c++那樣能商業化的軟件。
可見,國外軟件行業的門檻要比中國的高不少了。我以爲咱們中國即便再去作這樣的東西,也沒有多大的意義了。這個門檻你是追不過來的。不只要花雙倍的力氣,並且在這麼短的時間內,你還要完成別人已經完成過的工做,包括別人所作的測試工做。只有這樣,才能作到你的軟件與別人有競爭力,能與它作比較。
1.1.2 認清本身的發展
若是連以上認識都不清楚,極可能就覺得去書店買一本mfc高手速成之類的書,編兩個程序就能成爲軟件高手。就好像這些書是「黃金」,我學兩下,學會了vc、mfc,就能作一個軟件拿出去賣了。這種想法也不是不行,最後必定能行,但要有耐心,還要有機遇。機遇是從耐心中產生的,越有耐心,就越有機遇。你得很是努力,要花不少的精力,可能還要走不少的彎路。
若是你是從mfc入手的,或是從vb入手的,則如要作出一個真正的能應用我的領域的通用軟件,就會走很是多的彎路。直接的捷徑絕對不是走這兩條路。這兩條路看起來很快,並且在不少公司裏面確實須要這樣的東西,好比說我這家公司就是爲另外一個家公司作系統集成的,那我就須要這樣的東西,我無論你具體怎麼實現,我只須要達到這個目標就好了。
任何軟件的實現都會有n種方法,即便你是用最差的那種方法實現的,也沒有問題,最後它仍是能運行。即便有問題,再改一改就是。可是,作通用軟件就不行了,通用是一對多,你作出來的軟件之後要面向全國,若是未來自由貿易通到香港也好,通到國外也好,整個產品能銷到全世界的話,這時候,通用軟件全部作的工做就不是這麼簡單了。因此說,正確的入門方法就很關鍵。
若是你僅僅只是想混口飯吃,找個工做,可能教你成爲mfc的高手之類的書對你就足夠了。可是,若是你想作一個很好的軟件,不只能知足你謀一碗飯吃,還能使你揚名,最後你的軟件還能成爲不少人用,甚至你還想把它做爲一個事業去經營,那麼這第一步就很是關鍵。這時就絕對不能找一本mfc或找一本vb的書學兩下就行,而是要從最底層開始作起,從最基本作起。
1.2 高手是怎樣練成的
1.2.1 高手成長的六個階段
程序員怎樣才能達到編程的最高境界?最高境界絕對不是你去編兩行代碼,或者是幾分鐘能寫幾行代碼,或者是用什麼所謂的可視化工具產生最少的代碼這些工做,這都不是真正的高手境界。即便是這樣的高手,那也都是無知者的自封。
我認爲,一個程序員的成長可分爲以下六個階段。
第一階段
此階段主要是能熟練地使用某種語言。這就至關於練武中的套路和架式這些表面的東西。
第二階段
此階段能精通基於某種平臺的接口(例如咱們如今經常使用的win 32的api函數)以及所對應語言的自身的庫函數。到達這個階段後,也就至關於能夠進行真實散打對練了,能夠真正地在實踐中作些應用。
第三階段
此階段能深刻地瞭解某個平臺系統的底層,已經具備了初級的內功的能力,也就是「手中有劍,心中無劍」。
第四階級
此階段能直接在平臺上進行比較深層次的開發。基本上,能達到這個層次就能夠說是進入了高層次。這時進入了高級內功的修煉。好比能進行vxd或操做系統的內核的修改。
這時已經再也不有語言的束縛,語言只是一種工具,即便要用本身不會的語言進行開發,也只是簡單地熟悉一下,就手到擒來,徹底不像是第一階段的時候學習語言的那種狀況。通常來講,從第三階段過渡到第四階段是比較困難的。爲何會難呢?這就是由於不少人的思想變不過來。
第五階級
此階段就已經再也不侷限於簡單的技術上的問題了,而是能從全局上把握和設計一個比較大的系統體系結構,從內核到外層界面。能夠說是「手中無劍,心中有劍」。到了這個階段之後,能對市面上的任何軟件進行剖析,並能按本身的要求進行設計,就算是ms word這樣的大型軟件,只要有充足的時間,也必定會設計出來。
第六階級
此階段也是最高的境界,達到「無招勝有招」。這時候,任何問題就純粹變成了一個思路的問題,不是用什麼代碼就能表示的。也就是「手中無劍,心中也無劍」。
此時,對於練功的人來講,他已不用再去學什麼少林拳,只是在旁看一下少林拳的對戰,就能把此拳拿來就用。這就是真正的大師級的人物。這時,win 32或linux在你眼裏是沒有什麼差異的。
每個階段再向上發展時都要按必定的方法。第1、第二個階段經過自學就能夠完成,只要多用心去研究,耐心地去學習。
要想從第二個階段過渡到第三個階段,就要有一個好的學習環境。例若有一個高手帶領或公司裏有一個好的練手環境。通過2、三年的積累就能達到第三個階段。可是,有些人到達第三個階段後,經常就很難有境界上的突破了。他們這時會產生一種觀念,認爲軟件無非如此,認爲本身已無所不能。其實,這時若是遇到大的或難些的軟件,他們每每仍是無從下手。
如今咱們國家大部分程序員都是在第2、三級之間。他們大多都是經過自學成才的,不過這樣的程序員通常在軟件公司也能獨當一面,完成一些軟件的模塊。
可是,也還有一大堆處在第一階段的程序員,他們通常就能玩玩vb,作程序時,去找一堆控件集成一個軟件。
如今一種流行的說法是,中國軟件人才如今是一個橄欖型的人才結構,有大量的中等水平的程序員,而初級和高級程序員比較少。而我認爲,如今中國絕大多數都是初級的程序員,中級程序員不多,高級的就更少了。因此,如今的人才結構是「方塔」形,這是一種斷層的不良結構。而真正成熟的軟件人才結構應該是平滑的三角形結構。這樣,初級、中級、高級程序員才能充分地各施所長。三種人才結構對好比圖1.1所示。
圖1.1 三種人才結構對比
1.2.2 初級程序員和高級程序員的區別
通常對於一個問題,初級程序員和高級程序員考慮這個問題的方法絕對是不一樣的。好比,在初級程序員階段時,他會以爲vb也能作出應用來,且看起來也不錯。
但到了中級程序員時,他可能就不會選擇vb了,可能會用mfc,這時,也能作出效果不錯的程序。
到高級程序員時,他絕對不是首先選擇以上工具,vb也好,vc也好,這些都不是他考慮的問題。這時考慮的絕對是什麼纔是具備最快效率、最穩定性能的解決問題的方法。
軟件和別的產品不一樣。好比,在軟件中要達到某個目標,有n種方法,可是在n種方法中,只有一種方法或兩種方法是最好的,其餘的都很次。因此,要作一個好的系統,是很須要耐心的。若是沒有耐心,就不會有細活,有細活的東西纔是好東西。我以爲作軟件是這樣,作任何事情也是這樣的,必定要投入。
程序員到達最高境界的時候,想的就是「我就是程序,程序就是我」。這時候我要作一個軟件,不會有本身主觀的思路,而是以機器的思路來考慮問題,也就是說,就是以程序的思考方式來思考程序,而不是以我去設計程序的方式去思考程序。這一點若是不到比較高的層次是不能明白的。
你設計程序不就是你思考問題,而後按本身的思路去作程序嗎?
其實不是的。在我設計這個程序的時候,至關於我「鑽」入這個程序裏面去了。這時候沒有我本身的任何思惟,個人全部思惟都是這個程序,它這步該怎麼走,下步該怎麼走,它可能會出現什麼狀況。我動這個部分的時候,別的部分是否要干擾,也許會動一發而牽全身,它們之間是怎麼相互影響的?
也只有到達這個境界,你的程序才能真正地寫好,絕對不是作個什麼可視化。可視化自己就是「我去設計這個程序」,而真正的程序高手是「我就是程序」,這兩種方法絕對是不一樣的。好比,我要用vb去設計一個程序,和我自己就是一個程序的思惟方式,是不同的。別人也許以爲操做系統很深奧,很複雜,其實,若是你到達高手狀態,你就是操做系統,你就能作任何程序。
對待軟件要有一個全面的分析方法,光說理論是沒有用的。若是你沒有通過第1、第2、第3、第四這四個階段,則永遠到達不了高境界。由於空中樓閣的理論沒有用,而這些必須是一步一步地去作出來。
一個高級程序員應該具有開放性思惟,從裏到外的全部的知識都能瞭解。而後,看到世界最新技術就能立刻掌握,立刻了解。實際上,技術到達最高的境界後,是沒有分別的。任何東西都是相通的,只要你到達這個境界之後,什麼問題一看就能明白,一看就能抓住最核心的問題,最根本的根本,而不會被其餘的枝葉或表象所迷惑,作到這一步後纔算比較成功。
從程序員自己來講,若是它到達這一步之後,他就已經造成了開闊的思惟。他有這種開放性思惟的話,他就能作戰略決策,這對他未來作任何事情都有好處。事實上,會作程序後,就會有一種分析問題的方法,學會怎麼樣把問題的表象剖開,看到它的本質。這時你碰到任何具體的問題,只要給點時間,都能垂手可得地解決。實際上,對開發計算機軟件來講,沒有什麼作不了的軟件,全部的軟件都能作,只是看你有沒有時間,有沒有耐心,有沒有資金作支撐。
這幾年,尤爲是這兩三年,估計到2005年前,中國軟件這個行業裏面大的軟件公司就能造成。如今就已經在造成,例如用友,它上市後,地位就更加穩固了。其餘大的軟件企業會在這幾年內迅速長大。這時候,包括流通渠道、經銷商的渠道也會迅速長大。也就是說,到2005年之後,中國軟件這個行業的門檻比如今還要高不少,與美國不會有太大的差異。此時,中國軟件才真正體現出它的威力來。若是你是這些威力中的一員,就已經很厲害了。
別人可能知道比爾•蓋茨是個談判的高手,是賣東西的高手,其實,比爾•蓋茨從根本上來講是個程序高手,這是他根本中的根本。他對全部的技術都很是敏感,一眼就看到本質,並且他自己也能作程序,時常在看程序。如今他不作董事長,而作首席設計師,這時他就更加接近程序的本質。由於他自己就有很開闊的思惟,又深刻到技術的自己,因此他就知道技術的方向。這對於一個公司,對他這樣的人來講,是很是重要的。
若是他判斷錯誤一步,那公司之後再回頭就很難了。計算機的競爭是很是激烈的,不能走錯半步。不少公司之前看上去很火,後來就
銷聲匿跡了,就是由於它走錯一步,而後就不行了。爲何它會走錯?由於他不瞭解技術的本質在哪裏,技術的發展方向在哪裏。
比爾•蓋茨由於父母是學法律的,因此他自己就很能「侃」,頗有說服力,而他又是作技術的,就很是清楚技術的方向在哪裏,因此他才能把方向把握得很準確,公司愈來愈大。而別的公司只火一陣子,他卻火了還會再火。就算微軟再龐大,你若是不把握好軟件技術的最前沿,同樣也會玩完。就像intel時刻把握着cpu的最新技術,才能保證本身是行業老大。技術決定它的未來。
因此,程序員要能達到這樣的目標,就要有很是強的耐心和很是好的機遇纔有可能。事實上,如今的機會挺好的,2005年之前機會都很是大,之後機會會比較小。可是,若是有耐心的話,你仍是會有機會的,機會都是出在耐內心。我記得有句話說「雄心的一半是耐心」,我認爲雄心的三分之二都是耐心。若是你越有野心,你就越要有耐心,你的野心纔有可能實現。若是你有野心而沒有耐心,那都是胡思亂想,別人一眼就能看穿。最後在競爭中,對手一眼就看到你的意圖,那你還有什麼可競爭的?
1.2.3 程序員是吃青春飯的嗎
不少人都認爲程序員是三十歲之前的職業,到了三十歲之後,就不該再作程序員了。如今的不少程序員也有這種想法,我以爲這種想法很不對。
在20世紀80年代末到90年代初,那時軟件尚未造成行業,程序員不能以此做爲謀生的手段時,你必須轉行,由於你年輕的時候不用考慮吃飯的問題,每天「玩」均可以,可是之後就不可能了。
據我瞭解,微軟裏面的那些高手,幾乎都是四五十歲的,並且都是作底層的。他們是上世紀70年代就開始「玩」程序的,因此對於整個計算機,他們是太清楚了。如今有些人主觀臆斷地但願微軟次日倒閉就行了,但那可能性過小了。由於那些程序員是從cpu是4004的時候開始,玩到如今奔騰iv,沒有哪一代東西他們沒有經歷過。
你知道他們如今正在玩什麼嗎?如今正在玩64位的cpu。你說你普通的程序員,有這個耐心嗎?沒有這個耐心,你絕對作不了,你也絕對作不了高手。他爲何能作?由於他不只是玩過來的,並且他還很是有耐心,每一步技術他都跟得上,因此對他來講,沒有任何的難度和壓力。
由於計算機技術沒有任什麼時候候是突變的。它的今年和去年相差不會很大,可是回過頭來看三年之前的狀況,和如今的距離就很大。因此說,若是你每一年都跟着技術進步的話,你的壓力就很小,由於你時刻都能掌握最新的技術。可是,若是你落下來,別說十年,就是三年,你就趕不上了。
若是你一旦趕不上,就會以爲很是吃力;若是你趕不上,你就會迷失方向;若是你迷失了方向,你就以爲計算機沒有味道,越作越沒勁。當你還只是有個思路的時候,別人的產品都作出來了,由於你的水平跟別人相差太遠,人家早就想到的問題,你如今纔開始認識。水平越高,他就看得越遠,那麼他的思惟就越開闊;水平越低,想的問題就越窄。
64位cpu是這個十年和下個十年最重要的技術之一,誰抓住這個機會,誰就能抓住將來賺錢的商機。cpu是英特爾設計的,對這一點他確定清楚。舉例來講,若是從64位的角度來看如今的32位,就像從如今的角度去看dos。你說dos很複雜嗎?當你在dos年代的時候,你會以爲dos很複雜。你說如今的windows不夠複雜嗎?windows太複雜了,可是你到了64位的時候再去看windows,就如同如今看dos同樣。
整個64位系統的平臺和思惟方式、思路都比如今更開闊,打個比方說,如今的windows裏面能開n個dos窗口,每一個dos窗都能運行一個程序。到達64位的時候,操做系統事實上能作到開n個x86,開n個windows 98,而後再開n個windows 95都沒有問題,系統能作到這一步,甚至你的系統內開n個windows nt都沒有關係。這就是64位和32位的差異。因此,微軟的那些「老頭」,4、五十歲的那幾個作核心的人,如今正在玩這些東西。你說微軟的技術它能不先進嗎?是linux那幾個玩家能搞定的嗎?
微軟的技術很是雄厚,世界計算機的最新技術絕對集中在這幾我的手裏。並且這幾我的的思惟模式很是開闊,誰都沒有意識到的東西他早就開始作了。如今64位的cpu都出來一二年了,你說有什麼人去作這些應用嗎?沒有,有的就是那幾個unix廠商作好後給本身用的。
因此,追求技術的最高境界的時候,其實是沒有年齡限制的。對我來講,如今都三十三了,我歷來沒有想過退出這行,我以爲我就能玩下去,一直玩到退休都沒有問題。我要時刻保持技術的最前端,這樣的話對我來講是不困難的,沒有任何累的感受。
不少人說作程序不是人乾的事情,是非人的待遇。這樣,他們一旦成立一個公司,作出一點成績,在輝煌的時候立刻就考慮退出。由於他們太苦了,天天晚上熬夜,天天晚上燒了兩包煙還不夠,屋子裏面簡直就缺氧了,好像尚未解決問題。
白天睡覺,晚上幹活,那固然累死了,這是本身折騰本身。因此,作程序員必定要有一種正常的心態,就是說,你作程序的時候,不要把本身的生活搞得顛三倒四的。若是非得搞得晚上燒好多煙才行,這樣你確定折騰不到三十歲,三十歲之後身體就差了。
事實上,我基本上就沒有由於作程序而熬夜的。我只經歷過三次熬夜,一次是在學校的時候,1986年剛接觸計算機時,一天晚上跟一個同桌在計算機室內玩遊戲,研究了半天,搞着搞着就到了天亮,這是第一次。而後在畢業以前,在286上作一個程序。還有一次就是超級解霸上市前,那時公司已吹得很大了,那天晚上無法睡覺。
通常來講,我也是十二點鐘睡覺,次日七點就起了。因此說,只有具備正常的生活、正常的節奏,纔有正常的心態來作程序員,這樣,你的思路纔是正常的,只有正常的東西才能長久。搞疲勞戰或者是黑白顛倒,時間長久後就玩不轉了,玩着玩着就不想玩了。 前端