摘要:每個程序員的修煉之道都是漫長而艱辛的,要成為一名偉大的程序員,不僅技術全面,還要有程序員的自我修養(yǎng)。
一. 找到編碼的感覺
經過幾年的積累,逐漸認識了Java,Python。所學的知識當然要圍繞這兩門語言展開,一些框架的學習,經驗的積累,設計模式的學習都圍繞這兩門語言展開。其實學了這么多,慢慢的發(fā)現(xiàn)基礎知識不牢固,很多東西學習也只是皮毛,知其然,而不知其所以然,簡單的說就還是個民工,只能進行簡單的堆砌,想向上走一步:沒門。所以補習理論知識成為好多程序員迫在眉睫的問題。
??很多程序員估計像我一樣,對文件操作,多線程,Socket等的高層次的編碼還停留在理論階段,只是做了一些demo,了解了一下API,基本沒有在實際中應用到相關的知識,或者是簡單的實踐了一下。其實我們都停留在寫代碼的原始階段:簡單的堆砌代碼,而沒有真的找到寫代碼的感覺。雖然我自以為看了《重構》,看了《First Head in Design pattern》,《敏捷軟件開發(fā)原則,模式與實踐》,《模型驅動設計》等書就可以有所突破,其實我錯了,沒有量變就沒有質變。
??尋找編碼的感覺,慢慢的熟悉了各種API后,有一種信手拈來,得來全不費工夫的感受的時候,慢慢的就自然理解了大師書中的知識了,或許你到時候會說:其實這就是我工作中碰到的問題的總結。
??所以修煉階段平均每天編碼200行以上,找到編碼的感覺是必須的。
二. 整理總結分享
在學習的過程中,能夠寫讀書筆記放到網上是一個好的習慣。學習的過程中,必定會碰到很多問題,告訴別人你是怎么解決這些問題的是一種簡單的教,一方面可以讓自己記憶更加深刻,一方面可以傳遞知識。
??當然,你學到一定的程度,就需要把知識做一個階段性的總結,不要怕別人笑話,寫出來,分享出去,告訴別人這是我的心得。如果現(xiàn)在讓我做一個設計模式的PPT,我估計會翻閱好多本書來整理相關的知識,對我來說其實是在溫習相關的知識。
??我也需要把自己工作中碰到的問題分享到論壇或者是blog上去,例如:性能優(yōu)化的心得,發(fā)現(xiàn)的oracle的bug,發(fā)現(xiàn)的Java框架的bug……當別人和我深入討論一些問題的時候,我才發(fā)現(xiàn):自己研究的其實還不透徹,人外有人,天外有天。當我教別人一些東西的時候,自己也學到很多東西。教的過程中會逐漸發(fā)現(xiàn)自己的不足,慢慢的自己就成長起來了!
三. 程序員自我修養(yǎng)階段:
今天在改程序,當打開一個方法的時候,里面有一堆連續(xù)的else if。我數(shù)了一下,有超過40個。而且,每個else if里面,還都有處理過程,或簡單或復雜??戳宋耶敃r就想罵娘,再偷懶也搞個switch啊。這個類其實是個html處理的類,在模板也加入特殊標簽,而方法里這40多個else
if的作用是用來逐一判斷特殊標簽輸入的參數(shù)并進行處理。以我不深的編程經驗看,完全應該可以用反射的方法把輸入參數(shù)轉化成類下面的對象或者對應的函數(shù),這樣代碼要清晰很多很多。
??我專門看了下注釋,這孫子沒寫,讓我失去了指著名字大罵的機會。我突然覺得,一個程序員的自我修養(yǎng)第一條應該就是在每個寫過的類里面加上你的注釋,包括姓名,最好還有聯(lián)系方法。這是一種責任,是程序員對其所寫的代碼的一種必須的責任,當后來的人在查看修改這些代碼的時候,當這個可憐的維護人員被代碼混亂的組織和惡心的結構氣得上竄下跳想砍人的時候,他至少可以指名道姓地一陣亂罵以泄心頭之恨。
??無所謂有多少人會同意這個觀點。我知道在現(xiàn)實面對的很多是在不停的趕時間,只要在限定時間內完成,哪怕再爛的代碼,也可以拿到薪水。但是我還是決定,在接下來我就要面對的那個必須在十月完成的項目里面,我不會這么做,不會寫下40個愚蠢的else if,我寧可項目延期哪怕為此丟掉工作,程序員也要有所為有所不為。
??所以:要想養(yǎng)成良好的程序員的自我修養(yǎng)是離不開以下幾點的:
1、迷戀技術,保持對代碼的熱情
??興趣是最好的老師,如果不是最初對編程充滿興趣,應該很少有人會選擇程序員這個行業(yè),但同時程序員是一個有點乏味枯燥的工作。如果你不迷戀技術,對代碼充滿熱情,那你只能做一個平淡的程序員。
2、在實踐中成長,磨礪技術
??程序員是一個在實踐中成長的職業(yè)。你看再多書,聽再多的視頻課,自以為學到很多東西,但正在接觸項目的時候,就兩手發(fā)軟,頭腦空白了。最好的提方法,是正在參與到項目中去,最好是能參與從設計到開發(fā)到測試到維護一整套的整套流程。
3、加班雖苦但也是提高的過程
??畢業(yè)之后的前三年最為重要,要認認真真鉆研技術,積累經驗,至少能在某一方面成為技術達人。程序員加班是很正常的事情,要加班工作,加班學習,同時在這段時間要注意多總結,注意工作方法,合理安排時間,提高工作效率。你現(xiàn)在的付出是為了以后的成功!
4、不怕失敗,學會尋找成就感
??新程序員由于技術水平、經驗的欠缺,寫出的程序bug多,執(zhí)行效率低,可能被同事嘲笑(我發(fā)現(xiàn)這還是普遍現(xiàn)象),然后被上司責怪,內心充滿有挫折感。要學會自我減壓,相信挫折與失敗只是暫時的,發(fā)奮圖強。在工作中要學會尋找成就感,哪怕你只是完成一個小功能,優(yōu)化了一段代碼,都是你辛勤付出的結果,是你能力提高的體現(xiàn)。
5、要學會寫文檔
??不要以為程序員只要負責寫代碼,如果是那樣,你永遠不能有上升的空間了。因為不管是走技術路線,還是管理路線,都離不開文檔,方案文檔,技術文檔,產品介紹文檔,管理文檔等等,是你了解開發(fā)流程,產品運營的必由之路。
6、學會復制粘貼
??現(xiàn)在的開發(fā)資料已經非常的充實,遇到難以解決的問題不要過分糾結,為難自己,請打開搜索引擎搜索一下。畢竟,你做的是工作,不是在學校做研究。
7、細節(jié)決定成敗
??不少程序員都有這樣的習慣,好不容易思考出解決問題的方法,迫不及待的把代碼寫出來,功能也實現(xiàn)了,立馬提交代碼完事。殊不知你的代碼中還有不少細節(jié)需要完善,大到內存泄露、資源釋放、代碼是否高效,小到注釋是否規(guī)范,都是你必須關注的問題。且不談這些細節(jié)問題對你做出來的項目的影響,就是對你編程習慣的影響也是深遠的。
要學會讓數(shù)據來說話,其實數(shù)量只是一種表現(xiàn)的形式,有時候只能簡單的說明你這個人很努力,并不能說明這個人真的很強。我們追求的是數(shù)據的結果:帶來了什么樣的質量!以前寫blog,就是簡單的積累一下自己的說話,沒有什么有價值的內容,所以關注的僅僅是自己的朋友而已,雖然也寫了很多,但是沒有什么變化。當我整理自己以前的分類的時候,我很驚詫的發(fā)現(xiàn)自己的關注點怎么如此之多,面積太大,投入再大,也不會產生多大的壓力,也不會產生什么成果。如果現(xiàn)在讓我拿出點寫blog的數(shù)據:pagerank,alexa排名,日均ip,pv等,這將是一個很慘的結果。寫不出什么有價值的東西,還不如不寫。從寫blog上我開始醒悟了。
??編碼這么長時間,我在論壇上提問少,回復少,發(fā)帖少成為我的基本特征。如果讓我拿一點數(shù)據說明我做了什么的時候,也將是一個悲慘的結果。很少東西能證明我在編碼上有突破,與眾不同。
??當你覺得技術已經OUT的時候,其實你還擁有很多,思路才是根基,要學會利用搜索引擎去查找你想要的結果。
??不能以bug小而不去修復,要懂得千里之堤毀于蟻穴。
??資深程序員能很清楚的認識了自己,終于知道,自己那份堅持,還有執(zhí)著、汗水只是讓自己有個回憶。
Bobo
20160804