1. 程式人生 > >優秀程式設計師的良好的學習方式,特徵,生活和學習的習慣

優秀程式設計師的良好的學習方式,特徵,生活和學習的習慣

學習方式

踏入程式設計師這個行業,你就註定要學習一輩子,因為新技術層出不窮,技術體系更新快速,這是和其他行業最大的區別之一。所以,如果你想在這個行業混出點樣子,那麼請你隨時做好學習的準備,如果你想成為優秀的程式設計師,那麼一定要有正確的學習方式,下面推薦幾條程式設計師的最佳學習方式,希望能幫你事半功倍。

書籍和期刊是必不可少的

無論你是新手菜鳥還是高階程式設計師,你都離不開書籍,當然我們要有選擇的讀書,儘量選擇一些經典的書籍來看,如果你英文水平比較好,那麼讀一些老外撰寫的書籍是最好不過的了。書籍能讓你在繁雜的網際網路上總結出一些對你有幫助的知識體系,能讓你在某方面變得越來越精通。

期刊則能讓你的技術知識更加廣泛,作為優秀的程式設計師,你最好每一個領域都要能夠涉獵一些,知識面越廣越好,因為程式設計這東西都是相通的,也許有一天你用Java的設計思想實現了智慧家居。

建立自己常用的類庫

這是積累知識的一種有效手段,有時候可以幫你大大提高工作效率。不要認為你寫過的程式碼沒有用處,有些常用的工具方法一定要收藏起來,整理出屬於自己的工具類庫。比如:檔案操作類、序列化類、資料庫操作類、字串處理類等等,時間久了,你會發現他們對你的幫助不是一般的大,這裡不多說,自己去實踐一下就知道了。

網路社交不可小視

要明白一點,全世界不是你一個人在寫程式碼,作為優秀的程式設計師,交流是必不可少的,國外的社交網路,我推薦reddit和github,由於目前googleapis被遮蔽,上reddit會有點困難。

花更多的時間分析問題

花更多的時間理解和分析問題,然後再設計方案吧。你會發現剩下的事情很容易了。設計不是說要用建模語言和工具,可以是僅僅看看天空在腦子裡構思。那些在遇到問題就開始敲程式碼的人往往會最終偏離需求。

作為程式設計師,當你在編寫程式碼之前,儘量把問題分析透徹一點,這不僅能提高你編碼的效率,更重要的是能提高你的分析問題能力。

學會幫助別人

許多人都有個共同特點,只有當他需要幫助的時候,他才會求助於論壇或者群。優秀程式設計師不同之處在於他們會經常瀏覽論壇去幫助他人。相比較於靠別人幫助解決問題,他們幫助他人讓自己學到更多。在一個團隊中也是一樣,幫助他人解決問題收穫更多。相信我,瞭解他人的問題,思考並最終提供解決方案吧,你會比之前學到的更多。

和領導處理好關係

這點是技術之外的技能,也就是人際關係。無論是小組組長,還是部門經理,你都要想方設法和他們搞好關係,儘管他們不可能教你很多知識,但是他們會給你很多學習知識的機會,比如將重要的專案交給你做,或者是一些公司的培訓。

處理人際關係是大部分程式設計師的弱點,在領導面前少一點吐槽,別再黑你的專案經理了,呵呵呵。

生活和學習的習慣

在這個世界上,有數百萬的人熱衷於軟體開發,他們有很多名字,如:軟體工程師(Software Engineer),程式設計師(Programmer),編碼人(Coder),開發人員(Developer)。經過一段時間後,這些人也許能夠成為一個優秀的編碼人員,他們會非常熟悉如何用計算機語言來完成自己的工作。但是,如果你要成為一個優秀的程式設計師,你還可以需要有幾件事你需要注意,如果你能讓下面十個條目成為你的習慣,那麼你才能真正算得上是優秀程式設計師。

1.學無止境。就算是你有了10年以上的程式設計師經歷,你也得要使勁地學習,因為你在計算機這個充滿一創造力的領域,每天都會有很多很多的新事物出現。你需要跟上時代的步伐。你需要去了解新的程式語言,以及瞭解正在發展中的程式語言,以及一些程式設計框架。還需要去閱讀一些業內的新聞,併到一些熱門的社群去參與線上的討論,這樣你才能明白和了解整個軟體開發的趨勢。在國內,一些著名的社群例如:CSDN,ITPUB,CHINAUINX等等,在國外,建議你經常上一上digg.com去看看各種BLOG的聚合。

2.掌握多種語言。程式語言總是有其最適合的領域。當你面對需要解決的問題時,你需要找到一個最適合的語言來解決這些問題。比如,如果你需要效能,可能C/C++是首選,如果你需要跨平臺,可能Java是首選,如果你要寫一個Web上的開發程式,那麼PHP,ASP,Ajax,JSP可能會是你的選擇,如果你要處理一些文字並和別的應用互動,可能Perl, Python會是最好的。所以,花一些時間去探索一下其它你並熟悉的程式語言,能讓你的眼界變寬,因為你被武裝得更好,你思考問題也就更為全面,這對於自己和專案都會有好的幫助。

3.理性面對不同的作業系統或技術。程式設計師們總是有自己心目中無可比擬的技術和作業系統,有的人喜歡Ubuntu,有的人喜歡Debian,還有的人喜歡Windows,以及FreeBSD,MacOSX或Solaris等等。看看我的BLOG(http://blog.csdn.net/haoel)中的那篇《其實Unix很簡單》後的回覆你就知道程式設計師們在維護起自己的忠愛時的那份執著了。只有一部分優秀的程式設計師明白不同作業系統的優勢和長處和短處,這樣,在系統選型的時候,才能做到真正的客觀和公正,而不會讓情緒影響到自己。同樣,語言也是一樣,有太多的程式設計師總是喜歡糾纏於語言的對比,如:Java和Perl。哪個剛剛出道的程式設計師沒有爭論去類似的話題呢?比如VC++和Delphi等等。爭論這些東西只能表明自己的膚淺和浮燥。優秀的程式並不會執著於這些,而是能夠理性的分析和理心地面對,從而才能客觀地做出正確的選擇。

4.別把自己框在單一的開發環境中 再一次,正如上面所述,每個程式設計師都有自己忠愛的工具和技術,有的喜歡老的(比如我就喜歡Vi編輯程式),而有的喜歡新的比如gedit或是Emacs等。有的喜歡使用像VC++一樣的圖形介面的偵錯程式,而我更喜歡GDB命令列方面的調式器。等等等等。程式設計師在使用什麼樣的工具上的爭論還少嗎?到處都是啊。使用什麼樣的工具本來無所謂,只要你能更好更快地達到你的目的。但是有一點是優秀程式設計師都應該瞭解的——那就是應該去嘗試一下別的工作環境。沒有比較,你永遠不知道誰好誰不好,你也永遠不知道你所不知道的。

5.使用版本管理工具管理你的程式碼千萬不要告訴我你不知道原始碼的版本管理,如果你的團隊開發的原始碼並沒有版本管理系統,那麼我要告訴你,你的軟體開發還處於石器時代。趕快使用一個版式本管理工具吧。CVS 是一個看上去平淡無奇的版本工具,但它是被使用最廣的版本管理系統,Subversion 是CVS的一個升級版,其正在開始接管CVS的領地。Git 又是一個不同的版本管理工具。還有Visual SourceSafe等。使用什麼樣的版本管理工具依賴於你的團隊的大小和地理分佈,你也許正在使用最有效率或最沒有效率的工具來管理你的原始碼。但一個優秀的程式設計師總是會使用一款原始碼版本管理工具來管理自己的程式碼。如果你要我推薦一個,我推薦你使用開源的Subversion。

6.是一個優秀的團隊成員 除非你喜歡獨奏,除非你是孤膽英雄。但我想告訴你,今天,可能沒有一個成熟的軟體是你一個人能做的到的,你可能是你團隊中最牛的大拿,但這並不意味著你就是好的團隊成員。你的能力只有放到一個團隊中才能施展開來。你在和你的團隊成員交流中有禮貌嗎?你是否經常和他們溝通,並且大家都喜歡和你在一起討論問題?想一想一個足球隊吧,你是這個隊中好的成員嗎?當別人看到你在場上的跑動時,當別人看到你的傳球和接球和搶斷時,你的團員成員能因為你的動作受到鼓舞嗎?

7.把你的工作變成文件 這一條目當然包括了在程式碼中寫註釋,但那還僅僅不夠,你還需要做得更多。有良好的註釋風格的程式碼是一個文件的基礎,他能夠讓你和你的團隊容易的明白你的意圖和想法。寫下文件,並不僅僅是怕我們忘了當時的想法,而且還是一種團隊的離線交流的方法,更是一種知識傳遞的方法。記錄下你所知道的一切會是一個好的習慣。因為,我相信你不希望別人總是在你最忙的時候來打斷你問問題,或是你在休假的時候接到公司的電話來詢問你問題。而你自己如果老是守著自己的東西,其結果只可能是讓你自己長時間地深陷在這塊東西內,而你就更本不可以去做更多的事情。包括向上的晉升。你可能以為“教會徒弟能餓死師父”,但我告訴你,你的保守會讓你失去更多更好的東西,請你相信我,我絕不是在這裡聳人聽聞。

8.注意備份和安全 可能你覺得這是一個“廢話”,你已明白了備份的重要性。但是,我還是要在這裡提出,丟失東西是我們人生中的一部份,你總是會丟東西,這點你永遠無法避免。比如:你的膝上型電腦被人偷了,你的硬碟損壞了,你的電腦中病毒了,你的系統被人入侵了,甚至整個大樓被燒了,等等,等等。所以,做好備份工作是非常非常重要的事情,硬碟是不可信的,所以定期的燒錄光碟或是磁帶可能會是一個好的方法,網路也是不可信的,所以小心病毒和黑客,不但使用軟體方面的安全策略,你更需要一個健全的管理制度。此外,儘量的讓你的資料放在不同的地方,並做好定期(每日,每週,每月)的備份策略。

9.設計要足夠靈活 可能你的需求只會要求你實現一個死的東西,但是,你作為一個優秀的程式,你應該隨時在思考這個死的東西是否可以有靈活的一面,比如把一些引數變成可以配置的,把一些公用的東西形成你的函式庫以便以後重用,是否提供外掛方面的功能?你的模組是否要以像積木一樣隨意組合?如果要有修改的話,你的設計是否能夠馬上應付?當然,靈活的設計可能並不是要你去重新發明輪子,你應該儘可能是使用標準化的東西。所謂靈話的設計就是要讓讓考慮更多需求之外的東西,把需求中這一類的問題都考慮到,而不是隻處理需求中所說的那一特定的東西。比如說,需要需要的螢幕解析度是800×600,那麼你的設計能否靈活於其他的解析度?程式設計總是需要我們去處理不同的環境,以及未來的趨勢。我們需要用動態的眼光去思考問題,而不是刻舟求劍。也許有一天,你今天寫的程式就要移植到別的環境中去,那個時候你就能真正明白什麼是靈活的設計了。

10.不要搬起石頭砸自己的腳程式設計師總是有一種不好的習慣,那就是總是想趕快地完成自己手上的工作。但情況卻往往事已願違。越是想做得快,就越是容易出問題,越是想做得快,就越是容易遺漏問題,最終,程式改過來改過去,按下葫蘆起了瓢,最後花費的時間和精力反而更多。欲速而不達。優秀程式設計師的習慣是前面多花一些時間多作一些調查,試驗一下不同的解決方案,如果時間允許,一個好的習慣是,每4個小時的程式設計,需要一個小時的休息,然後又是4個小時的編碼。當然,這因人而異,但其目的就是讓你時常回頭看看,讓你想一想這樣三個問題:1)是否這麼做是對的?2)是否這麼做考慮到了所有的情況?3)是否有更好的方法?想好了再說,時常回頭看看走過的路,時常總結一下過去事,會對你有很大的幫助。

以上是十條優秀程式設計師的習慣或行為規範,希望其可以對你有所幫助。

高效程式設計師的特徵

  • 程式設計師:有積極活力的,專注於用程式碼解決真實世界裡的問題,不是指那些夢想家,那些永遠只想不做的人
  • 聰明:能夠周全的思考問題(不是那些耍小聰明的人)
  • 懶惰:就像是程式中的lazy-loading,是指延後寫程式碼的時間(而不是無所事事的人)。

正確的軟體開發應該是懶惰式開發,也被稱作忍耐式開發;這種開發方式的表現是,在真正動手寫程式碼前,程式設計師要花大量的時間通盤考慮所有可能的解決方案和途徑。這可以看作是延緩寫程式碼,在沒有完全理解問題前絕不動手寫程式碼。先把問題理解清楚,確保將要寫的程式碼能真正的解決問題,這將會避免之後寫出大量無用的程式碼。

這裡說的先把問題弄清楚,表現有:

1. 真正的理解需求,讓產品部門(業務分析部門)弄清楚他們真正需求的是什麼。

  • 這些部門通常不給足夠的時間來整理需求
  • 他們經常不是請教問題領域專家,而是順從領導的意見
  • 他們通常無法提供前後一致或完整的需求意見。

2. 清楚跟團隊中的其它程式設計師或其他團隊中的程式設計師需要那些互動,如何互動,這包括:

  • 使用白板交流
  • 畫流程圖(UML或Visio)

你需要花大量的時間調研,來確保需求符合實情,來做工作讓你和同事的交流有共同的語言語義。然而,程式設計師都喜歡立刻衝上去程式設計,喜歡在電腦前不停的敲程式碼。

在真正的軟體開發中,只有5%的開發時間是有效率的(你可以參考《程式設計師開發效率悖論》)。如果你發現一個程式設計師用100%的時間都在盯著螢幕,那麼,你看到的這個程式設計師是最糟糕的程式設計師。

如果一個程式設計師總是在電腦前編碼,這絕對是一個不好的訊號。

高效的程式設計師總是不斷檢查他對需求的理解,確保他們的程式碼和需求是同步的。高效的程式設計師是頻繁的和產品經理/業務人員溝通交流,你可以經常看到他們使用白板與同事和架構師交流討論。程式設計師的閱歷和經驗都是用來提高開發效率,最優秀的程式設計師:

  • 他們思考程式碼的時間增加而寫程式碼時間減少
  • 對問題的透徹理解使除錯程式碼的速度更快
  • 深思熟慮後的程式碼速度更快
  • 程式碼長度更短

程式設計師從心理上講都是喜愛自己的程式碼的。

爛程式設計師不喜歡去修改已經寫成的爛程式碼。相比起優化自己的程式碼,他們更願意簡單的增加更多的程式碼,以此來彌補之前的缺陷。更糟糕的是,他們喜歡把責任歸咎於他人。最終,一堆不好用的程式碼上再加上另外一堆不好用的程式碼,整個系統變得到處是bug,極不穩定。

優秀的程式設計師經常也會寫出爛程式碼,但他們能看到那些程式碼需要優化,哪些需要重寫優秀的程式設計師和不優秀的程式設計師的區別就在於對有問題的程式碼的態度,優秀的程式設計師的做法是:

  • 如果程式碼整體上好的,那就重構程式碼。
  • 如果程式碼整體上有問題,那就重寫程式碼

當代碼中有需要優化或需要重寫的地方時,時間拖的越久,你就越難回頭解決這些問題。因為對這些程式碼依賴的程式會越來越多,越來越深,當你優化這些程式碼時,相關的依賴也需要進行相關修改。當積累的問題越來越多時,輕鬆的優化/重新這些程式碼已經變得不可能。而使用繼續增加程式碼的方式來彌補之前程式碼問題,會讓系統變得越來越不穩定。

如果腦子裡沒想清楚,那就懶一些,把寫程式碼的時間往後推。