論壇里很多人都喜歡聊程序人生的話題,,我也來(lái)發(fā)一封帖子。給大家一個(gè)參考,,也讓自己有一翻自?。?/div>
希望更多有經(jīng)驗(yàn)的程序員看到后,,也能在此記錄一下自己程序生涯,,相互學(xué)習(xí)!
本人普通院校,,非計(jì)算機(jī)專業(yè)本科畢業(yè),。從畢業(yè)到現(xiàn)在也工作有五年了?;貞浧鸪绦蛉松?,也頗有一翻滋味。
本人是從大三上學(xué)期開始學(xué)習(xí)計(jì)算機(jī)的,,因?yàn)槟菚r(shí)電腦突然一下比較普及,,本人家里也有能力買臺(tái)電腦。買了電腦后,,最先看的是C語(yǔ)言的數(shù)據(jù)結(jié)構(gòu),。用電腦調(diào)試書里面的各種程序,那時(shí)第一次看數(shù)據(jù)結(jié)構(gòu),,我接近全力去看,,但是沒看懂多少東西。只是把書里面的代碼敲了一遍,,運(yùn)行后看看是否和書里面說(shuō)的結(jié)果是一樣,。但很多時(shí)候,,第一次都是沒通過(guò)調(diào)試的,發(fā)現(xiàn)不是這里抄錯(cuò)了,,就是那里抄錯(cuò)了,。通過(guò)不斷的查找,最后才能運(yùn)行正確,,那時(shí)心里就會(huì)才生少許的成就感,,感覺自己寫的程序調(diào)通了(雖然只是照著抄了一遍)??赐陻?shù)據(jù)結(jié)構(gòu)(其實(shí)有很多東西還是不懂),,我去找了本計(jì)算機(jī)組成原理來(lái)看。結(jié)果看得自己更加模糊,。因?yàn)檫@本書里沒有代碼,,只有一些抽象概念,當(dāng)時(shí)好像只記得CPU有幾個(gè)寄存器尋址,,還有些補(bǔ)碼,,反碼什么的。那個(gè)書又厚,,硬著頭皮翻了一遍后就沒看了,。接著買了本操作系統(tǒng)原理來(lái)看。也是很難看,,都是些概念的東西,又沒代碼調(diào)試,。比如什么GDT,,虛擬內(nèi)存分段,分頁(yè),,實(shí)模式,,保護(hù)模式,中斷等等,。也是硬著頭皮翻一遍,,能懂多少是多少??赐旰?,接著就看那個(gè)編譯原理,因?yàn)榫W(wǎng)上都說(shuō)懂編譯原理的人都很牛,,我也希望變成牛人所以也去搞了本回來(lái)看,。結(jié)果發(fā)現(xiàn),能懂編譯原理的人,,確實(shí)比較牛,。里面涉及到自動(dòng)機(jī)的概念,。屬于用計(jì)算機(jī)來(lái)做人工自能的范疇。我也很想成為牛人,,硬著頭皮看,,結(jié)果還是有心無(wú)力。經(jīng)過(guò)這樣一個(gè)過(guò)程,,雖說(shuō)很多都不懂,,但卻使我對(duì)編程從一無(wú)所知到有了一種模糊的認(rèn)識(shí)。大概懂得了什么叫做內(nèi)存分配,,還有程序的那些字母符號(hào)是怎么被計(jì)算機(jī)執(zhí)行的,。這時(shí)回頭把原來(lái)的數(shù)據(jù)結(jié)構(gòu)翻出來(lái)再讀一遍,突然發(fā)現(xiàn)這本書比起其他三本都容易,,也很好懂,。明白了什么叫做算法,并且可以嘗試去實(shí)現(xiàn)自己想的一些算法,。當(dāng)時(shí)的自豪感油然而生,。感覺電腦可以按照我的想法去工作了,非常興奮,。雖然那時(shí)我并不懂得多少C語(yǔ)言,,對(duì)指針也只大概知道是什么東西,實(shí)際中還是不會(huì)應(yīng)用,。但至少可以利用我所知道的,,來(lái)實(shí)現(xiàn)我所想到的。在當(dāng)時(shí)一股沖動(dòng)之下,,寫了幾個(gè)自己記憶由心的算法:
1,,從1到100,每數(shù)到7的時(shí)候,,把該數(shù)字提出來(lái),,剩下的數(shù)字繼續(xù)循環(huán),問(wèn)最后剩下的一個(gè)數(shù)字是多少,。我記得好像是50,。 2,任意輸入數(shù)字,,和“+ - * / ( )”幾個(gè)符號(hào)組成一個(gè)算術(shù)表達(dá)式,,計(jì)算出值是多少。 3,,記得看過(guò)計(jì)算機(jī)組成原理里面有個(gè)磁盤調(diào)度算法,,用的是現(xiàn)在電梯常用的電梯算法。感覺這個(gè)算法很好,就去用C語(yǔ)言實(shí)現(xiàn)了一遍,。 剛開始寫程序,,都是一個(gè)main函數(shù)全部搞定。慢慢的,,在算法實(shí)現(xiàn)的過(guò)程中發(fā)現(xiàn),,如果一個(gè)算法太大,一路寫下去,,代碼會(huì)很長(zhǎng),,并且很容易想了前面就忘后面該怎么寫,或者寫到后面,,忘了前面寫的是什么,。 這時(shí),就產(chǎn)生了一種想法,,就是剛開始設(shè)計(jì)算法的時(shí)候,,想好哪幾步,然后每一步用一個(gè)函數(shù)代替,。main函數(shù)中只是分步函數(shù)的流程控制,。這樣main函數(shù)的代碼就大大的減少,邏輯變得非常清晰,。然后可以像填空一樣把每個(gè)分部函數(shù)完成,。接著在子函數(shù)里面還可以分成子函數(shù),分到后來(lái),,發(fā)現(xiàn)很多函數(shù)可以被其他的函數(shù)調(diào)用,。達(dá)到重用的目的。記得當(dāng)時(shí)發(fā)現(xiàn)這個(gè)方法后,,也是異常的興奮,。這種方法居然被自己想到了,感覺自己真是個(gè)人才,。因?yàn)樽约菏欠怯?jì)算機(jī)專業(yè),想找編程的工作,,起碼要有一個(gè)東西證明自己是學(xué)過(guò)計(jì)算機(jī)的,。所以在這期間報(bào)考了那個(gè)高級(jí)程序員(高程),因?yàn)橐荚?,所以學(xué)習(xí)了一些匯編之類亂七八糟的東西,。考試好像分為筆試和上機(jī),,但是現(xiàn)在已經(jīng)忘記是哪一個(gè)沒過(guò)了,。郁悶!沒過(guò)之后,不甘心,,就去報(bào)了個(gè)計(jì)算機(jī)等級(jí)考試(3級(jí),,互聯(lián)網(wǎng)技術(shù)),結(jié)果不出意外,,將證書收入囊中(不過(guò)現(xiàn)在想想,,一點(diǎn)都沒用上。拿回來(lái)后,,從來(lái)都沒給人看過(guò),,現(xiàn)在都不知道放到哪里去了)。
搞完這些,,自己大三也差不多結(jié)束了,。自己也知道到了大四要開始找工作,所以不能自己專門去研究什么算法,。那個(gè)東西當(dāng)不了飯吃,。所以要搞一些比較流行的東西,起碼需要混到一個(gè)工作,。所以那時(shí)就搞了一本“C#入門經(jīng)典”,。因?yàn)槟菚r(shí)聽說(shuō).NET比較流行,好找工作,。并且對(duì)于一個(gè)新的東西,,我比較喜歡找一些名字上有“入門”兩個(gè)字的書(這樣的書里面一般都會(huì)很詳細(xì)的告訴你如何搭建調(diào)試環(huán)境)。因?yàn)槌绦蜻@個(gè)東西,,你首先要能夠搭建一個(gè)調(diào)試環(huán)境,,光靠看是看不出什么東西來(lái)的。后來(lái)感覺這本書還不錯(cuò),,不枉費(fèi)我100塊大洋,。從中學(xué)到了一些.NET的基本用法。并且對(duì)面向?qū)ο笾v得比較詳細(xì),。“面向?qū)ο?#8221;那一章我也很認(rèn)真的反復(fù)看了好幾遍,,因?yàn)槟菚r(shí)03年面向?qū)ο蠓浅衢T,網(wǎng)絡(luò)上面到處是“面向?qū)ο?#8221;幾個(gè)字,,感覺編程高手都是會(huì)面向?qū)ο?。我也想成為高手,所以我就抱著一種不搞懂不罷休的氣勢(shì)去看,。結(jié)果,,只是記住了面向?qū)ο蟮恼Z(yǔ)法。書中和網(wǎng)上舉得例子也很簡(jiǎn)單,,多半是些動(dòng)物是抽象類,,然后,,分什么雞,鴨,,鵝之類的去繼承,,然后動(dòng)物都有吃飯的接口,鴨子有游泳的接口, 此類等等的例子,??戳税胩欤矝]弄明白這些對(duì)于我寫程序有多大的作用,。后來(lái),,從書上抄了一份網(wǎng)站購(gòu)物車的程序,認(rèn)識(shí)到了WEB的開發(fā)流程,,感覺自己也可以上路了,。因?yàn)楫?dāng)時(shí)才大四上學(xué)期,也沒有到處發(fā)簡(jiǎn)歷,。只是在網(wǎng)上留意一些招聘信息,。當(dāng)時(shí)也是在CSDN里面,看到一個(gè)本地的公司在招人的帖子,,公司很小,,剛起步。我想應(yīng)該不會(huì)要求很多,,我也就去應(yīng)聘試試,,希望自己能夠應(yīng)聘上,這樣至少能夠證明自己有資格成為程序員,。應(yīng)聘的時(shí)候,,老板問(wèn)了一些問(wèn)題,多半是 WEB開發(fā)方面的技術(shù)問(wèn)題,。由于那時(shí)我對(duì)WEB只是剛剛接觸,,懂的不多。好像當(dāng)時(shí)有一半以上都沒回答上來(lái),。走的時(shí)候,,我把我從書上抄的那份程序放到電腦里運(yùn)行出來(lái)給他看了看。大言不慚的說(shuō)者是我寫的,。他看了看,,點(diǎn)了點(diǎn)頭,然后就回去等消息,。我是星期五去面試的,星期天公司打電話讓我星期一去上班,。聽到這個(gè)消息后,,心里莫名的激動(dòng)。請(qǐng)同寢室的哥們大吃了一頓。大家也都為我能這么早找到工作感到高興,。后來(lái),,就是白天到公司實(shí)習(xí),晚上回寢室睡覺,。工作后慢慢的,,那種興奮感就消失了,取而代之的是工作壓力,,由于做WEB開發(fā),,服務(wù)端的C#還好說(shuō)一點(diǎn),但是前臺(tái)用到很多的是HTML和JAVASCRIPT,,當(dāng)時(shí)對(duì)這個(gè)知道的很少,,只能一邊翻書,一邊做事,。要達(dá)到老板的要求,,每天都八點(diǎn)左右才能搞完下班。
工作漸漸展開之后,,就是平靜如水的生活,,每天上班,吃飯,,睡覺,,日子也過(guò)得很快。剛開始,,由于懂得東西少,,所以每次任務(wù)下來(lái)后,都是積極的去完成,,因?yàn)楹ε伦约鹤霾煌?。但是漸漸的,當(dāng)自己清楚該怎么做的時(shí)候,,人會(huì)產(chǎn)生疲倦,,因?yàn)槊刻於甲鲆恍┎畈欢嗟膭趧?dòng)。慢慢的,,做事情就喜歡拖拉了,。當(dāng)分配一個(gè)任務(wù)后,自己先估量一下這個(gè)工作自己大概需要多久,,一般老板給的時(shí)間會(huì)多很多,。所以喜歡把工作先放著,去看看網(wǎng)頁(yè),,逛逛論壇什么的,,等到剩下的時(shí)間差不多了,,需要開始工作了,就懶洋洋的進(jìn)入工作狀態(tài),,但是往往完成工作質(zhì)量都不怎么好,,很多提交后會(huì)有些BUG。不過(guò)我也沒怎么在意,。因?yàn)楹屠习尻P(guān)系好嘛,,像我這樣,再怎么說(shuō)也屬于元老級(jí)別的,。就這樣慢慢的工作了幾年,。因?yàn)樾」臼裁炊家觯夹g(shù)也積累了很多,。包括各種主流數(shù)據(jù)庫(kù)的用法,,.NET,CSS,JAVASCRIPT,PHP,JAVA,perl,FLASH, 等等,,其間,,自己獨(dú)立開發(fā)項(xiàng)目的時(shí)候,總想找出一種架構(gòu),,加快自己下一個(gè)項(xiàng)目的開發(fā)進(jìn)度,。但是每次開發(fā)完后,發(fā)現(xiàn)上次設(shè)計(jì)的架構(gòu)真垃圾,。開發(fā)過(guò)很多項(xiàng)目,,每次都想了一些新的架構(gòu)方法。到現(xiàn)在沉淀下來(lái)的還值得用的架構(gòu)思想也沒多少,。記得在做JSP的時(shí)候,,感覺JSP里面服務(wù)端代碼和HTML混在一起,很難看,。不如.NET的事件驅(qū)動(dòng)好用,。就去寫個(gè)模塊,讓JSP也實(shí)現(xiàn)事件驅(qū)動(dòng)的模式,。結(jié)果寫到后來(lái),,也沒得到什么好處,并且感覺有點(diǎn)不倫不類,,
后來(lái)項(xiàng)目慢慢做大了,,才漸漸明白面向?qū)ο蟮挠靡狻.?dāng)一個(gè)項(xiàng)目很小,,邏輯很簡(jiǎn)單的時(shí)候,,用面向?qū)ο蟮姆椒ㄔO(shè)計(jì)用處不大,反倒是組件用處更大,。因?yàn)轫?xiàng)目小,,基本上都是建幾張表,,改改HTML的工作。但是項(xiàng)目一大,,邏輯變復(fù)雜了,如果你要理清楚邏輯,,這里就需要一種方法論,。我一開始寫算法的那種方法有點(diǎn)不適用了。原來(lái)那種是從頂層開始,,向下細(xì)分,。是一種至上而下的設(shè)計(jì)方法。而面向?qū)ο蟛皇?,它是一種由點(diǎn)及面的設(shè)計(jì)方法,。面向?qū)ο笫窍日页鲆粋€(gè)個(gè)對(duì)象點(diǎn),然后再找出每個(gè)點(diǎn)之間的關(guān)系,。在實(shí)際的項(xiàng)目中,,你很難從上至下的設(shè)計(jì)。因?yàn)轫?xiàng)目需求往往剛開始很不全面,,很多項(xiàng)目后來(lái)改得都是面目全非,。從上至下的設(shè)計(jì)不適合這種平凡的修改。并且當(dāng)需求很大時(shí),,他涉及東西太多,,你也很難從一個(gè)俯視的角度去全面的看這個(gè)系統(tǒng)。所以從上至下的設(shè)計(jì)不能滿足要求,。打個(gè)比方,,記得一個(gè)項(xiàng)目已經(jīng)做了80%,結(jié)果客戶覺得用得不方便,,要改一下,。很多原來(lái)做的功能都不需要,并且提了幾個(gè)新功能,。但這幾個(gè)功能也只是對(duì)原來(lái)的功能稍加改動(dòng),。但是邏輯上看卻是大相徑庭。人腦不是電腦,,如果想著這個(gè)代碼,,去改那個(gè)代碼,勢(shì)必到后來(lái)讓自己也搞糊涂了,。所以需要抽象出幾個(gè)對(duì)象出來(lái),,是按照客戶的思維方式。然后抽象出來(lái)的對(duì)象里面包含原來(lái)的功能,。這樣做起來(lái)就事半功倍,。
在工作的磨練中,,慢慢的發(fā)現(xiàn)了普通的程序員與優(yōu)秀的程序員的一些差別:
1, 普通的程序員遇到問(wèn)題喜歡張口就問(wèn)別人,問(wèn)之前沒經(jīng)過(guò)大腦想想,。這是一個(gè)不好的習(xí)慣,。其一,自己都沒仔細(xì)想想,,就算別人幫你把問(wèn)題解決了,,你自己不多久就會(huì)忘記。下次遇到,,照樣是不會(huì),。因?yàn)檫@個(gè)問(wèn)題你沒有經(jīng)過(guò)大腦。其二,,能夠回答你問(wèn)題的人,,多半是有一定經(jīng)驗(yàn)了。他們或許很會(huì)安排好自己的事情,,管理好自己的時(shí)間,。如果時(shí)常去打斷他們,他們會(huì)覺得你很煩,。 優(yōu)秀的程序員多半會(huì)先到網(wǎng)上查找一下相關(guān)問(wèn)題,,看看網(wǎng)上有沒有相關(guān)解決方法。經(jīng)過(guò)一翻查找,,他會(huì)把這個(gè)問(wèn)題記得比較牢,。 2,在一個(gè)項(xiàng)目的合作開發(fā)中,,普通程序員往往只了解自己開發(fā)那方面的東西,。項(xiàng)目做完后往往對(duì)整個(gè)項(xiàng)目有哪些功能都不太清楚??赡軙?huì)有人抱怨,,自己工作都做不完,哪有時(shí)間去了解整個(gè)系統(tǒng),。但現(xiàn)實(shí)多半是,,花大量的時(shí)間去網(wǎng)上閑逛,卻不愿花時(shí)間去增進(jìn)知識(shí),。 如果總認(rèn)為項(xiàng)目的設(shè)計(jì)是設(shè)計(jì)者的工作,,自己沒必要去了解。那么這樣的程序員只能是手工勞動(dòng)者,。
優(yōu)秀的程序員會(huì)對(duì)整個(gè)項(xiàng)目有認(rèn)識(shí),,對(duì)一些自己感興趣的功能會(huì)去做一下了解,更優(yōu)秀一點(diǎn)的,會(huì)去對(duì)整個(gè)項(xiàng)目的架構(gòu)設(shè)計(jì)做一下了解,。自問(wèn)如果他是項(xiàng)目設(shè)計(jì)者該怎么做? 去學(xué)習(xí)項(xiàng)目設(shè)計(jì)的優(yōu)秀之處,,去發(fā)現(xiàn)設(shè)計(jì)的不足之處。觸類旁通,,把優(yōu)秀的地方用在自己將來(lái)的工作當(dāng)中,。 3,普通程序員往往有很大的惰性,。不能自覺的去學(xué)習(xí)知識(shí),,增進(jìn)能力。所以每天耗費(fèi)大量的時(shí)間在一些消遣狀態(tài)中,。所以時(shí)間往往白白的浪費(fèi)掉。
優(yōu)秀的程序員往往會(huì)安排好自己的工作和學(xué)習(xí),。在工作中學(xué)習(xí),,在學(xué)習(xí)中工作。能夠感覺到自己每天都向著自己的目標(biāo)在前進(jìn),,狀態(tài)佳,,動(dòng)力足。他們因?yàn)槊刻旃ぷ髑榫w很高,,所以研究的東西也多,,時(shí)間比較寶貴。因此他們會(huì)善于利用一些工具來(lái)操作自己的電腦,,大大來(lái)的減少瑣碎的電腦操作時(shí)間,。更有勝者,會(huì)開發(fā)一些符合自己的操作習(xí)慣的小程序,,來(lái)提高自己的效率,。說(shuō)不定這些小程序放到網(wǎng)上共享,可能還會(huì)有意想不到的收獲,。 我現(xiàn)在做項(xiàng)目管理員,,看著手下的程序員,時(shí)常也讓我想起原來(lái)做程序員時(shí)候的壞毛病,。比如,,上班遲到啊,工作時(shí)間上網(wǎng)閑逛啊,,交上來(lái)的程序BUG成堆啊...,!看到這些,我時(shí)常都是會(huì)心的笑笑,,可以理解! 不過(guò)我也時(shí)常提醒他們,,如果你們想將來(lái)成為IT界的精英,而不是等到30歲感覺自己無(wú)路可走,,那么請(qǐng)你們珍惜自己的時(shí)間,。如果你們自己都不珍惜自己的時(shí)間,,那么別人更不會(huì)去珍惜你的時(shí)間。
今天花了兩個(gè)多小時(shí),,寫了一篇短篇自敘,。感覺值得,把自己五年多的光陰回顧了一遍,。從前的故事歷歷在目,。寫下來(lái)過(guò)五年后再來(lái)回顧一下,說(shuō)不定會(huì)是另一番感受,。
|
|
來(lái)自: 歡歡2008 > 《老程序員的經(jīng)驗(yàn)》