如何進階為職業程式員—三年程式員生涯的感悟

來源:互聯網
上載者:User

不知不覺已經工作三年了,回顧自己三年的程式員生涯,總結了一些東西,希望對想從事程式員工作的xdjm們有些協助。
如何從編程愛好者進階為職業程式員:

一、簡單才是美
好的代碼一定是最簡單的,這應該是每個職業程式員心中萬世不變的箴言。一個簡單的“hello world”,可以有十幾種實現,但是職業程式員絕對不會標新立異,他們會選擇最簡單最常用的那種。
為什麼要寫簡單的程式?一、簡單的程式易於擴充;二、簡單的程式易於維護;三、簡單的程式易於發現問題…… 寫簡單程式的理由實在太多了。能用10行實現的,就不要寫100行;能用數組實現的,就不要用avl 樹…..
總之,在能實現功能的情況下,程式越簡單越好。

二、嚴格遵守編程規範
程式員入職時,都會得到一本公司的編程規範。雖然每個公司的編程規範不盡相同,但是基本都講的是排版格式、注釋、命名規範、可測試性、文法規範等方面的內容。編程規範是前人總結出來的經驗教訓,每個職業程式員都應該嚴格遵守。在項目層面上來說,編程規範是項目成員應該遵守的約定,這樣項目代碼才會風格統一,儘力約束個人風格,避免出現10個人的項目出現11種風格的情況。
嚴格遵守編程規範,還可以避免出現一些低級錯誤。如:編程規範中有一條,條件判斷式使用雙等號”==”時,應該將常量放在雙等號左側,變數放在右側。遵守該條規範可以避免出現所謂的“差一錯誤”,即將雙等號寫成等號。這種情況下,編譯器會報錯。
職業程式員寫出來的代碼應該是風格一致的,這樣的代碼便於維護,便於其他程式員的閱讀,也可以規避一些低級錯誤,所以,嚴格遵守編程規範是程式員職業化的重要體現。

三、代碼的品質屬性
代碼的品質屬性主要有三個方面:功能、可擴充性、效能。功能:是對一段程式最基本的要求。程式首先要正確實現預期的功能,才能談其他的品質屬性。可擴充性:對於一個大型地,需要長期維護的軟體來說,程式會不停地加入一些新的特性。如果程式的可擴充性差,就會導致系統的頻繁重構,浪費大量的人力物力。可擴充性應該是在程式的設計階段就考慮到。當然,沒有誰能在設計之初就考慮到所有的擴充性,但是我們必須盡量考慮周全,這就涉及到設計的方法和理論了,這裡不討論。效能:好的程式應該考慮效能。但是,這因應用情境而論。比如:一個簡單的計算機程式,我們沒必要花太多地精力去提高它的效能。但是,對於一個大型的平台系統(電信軟體、作業系統、資料庫系統等),我們就得花精力去考慮效能問題了。
三個品質屬性的優先順序應該是:功能正確>擴充性好>效能高。
通常,某些品質屬性之間本身是矛盾的。有時候,我們顧得了效能,程式的可擴充性就會變差。反之,可擴充性好了,但是就會影響效能。一般情況下,我們會按照上面的優先順序別來取得品質屬性的平衡。

四、經常review你的代碼
程式員都是心高氣傲的,他們往往對自己寫的代碼充滿了自信,以至於寫好以後再也不願意去多看一眼。但是,既是是大牛,也不能保證代碼零缺陷。一個職業的程式員,應該定期review自己的代碼,不斷髮現自己代碼的bug。

五、職業程式員一定是優秀的測試人員
我在公司幾年以來,親眼看見公司開發與測試人員之間關係的幾次變革。剛入公司時,發現問題的數量是考核測試人員績效的唯一標準,某些部門甚至出現給測試人員下達日發現問題數量的指標,不達標直接影響年終獎。測試人員和開發人員水火不容,經常出現為了一個問題是否該提單爭得面紅耳赤。一年以後,情況有所改變,測試人員不再唯問題單是從。到了現在,公司已經大力提倡開發測試融合了。開發與測試人員聯合績效考核,考核的標準是版本的穩定性以及遺留缺陷密度。開發與測試人員辦公區已經完全融合在一起,測試人員經常給開發人員培訓測試方法,開發人員也主動投入到測試發現問題。
我說自身的經曆,只是想說明一個事實,開發與測試之間並沒有不可逾越的差別。
很多開發人員對測試不屑,覺得那是沒有技術含量的活。其實不然,測試人員是站在客戶的角度考慮問題,他們往往能考慮到很多研發人員考慮不到的情境。測試有一套非常完善的理論。如果研發人員能夠瞭解一些測試方法和理論,對於軟體的設計會有很大協助。
職業程式員一定是優秀的測試人員。

六、站在設計的高度編碼
站在設計的高度編碼,這話說得有點抽象了,但是這確實是我多年來感受最深的一點。軟體開發通常分為三個階段:設計、編碼、測試。很多人認為設計是設計師架構師的事情、測試是測試人員的事情,程式員的工作即是編碼。所以,很多致力於成為職業程式員的同學都將全部的精力放在了程式設計語言的學習上。程式設計語言只是一個工具,學得好,只能說明你學會使用了一門工具而已。舉個不是很恰當的例子,對於一個畫家來說,光學會使用畫筆是不夠的,還得要有藝術靈感。學會了編碼只能說明你會使用畫筆了,但是離畫家還遠著呢。
有篇很著名的論文叫做《源碼既是設計》(http://www.feifanbbs.com/frame.php?frameon=yes&referer=http%3A//www.feifanbbs.com/),我非常認同。架構師在設計階段會輸出設計文檔,但是對於軟體來說源碼才是最直接的工程文檔,一份好的源碼勝過千百篇工程文檔----這也是敏捷開發的思想。好的源碼一定是經過設計的,架構師站在架構的角度設計,但是他很難考慮到代碼層級的事情,代碼的實現最終要靠編程人員。大到一個流程,小至一個函數,這些是要靠實際編程人員來設計的。編程人員也應該學會設計,懂得一些設計模式和理論。
做一個設計者,而不是代碼工人。

以上是我的見解,希望與各位交流。

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/j00105840/archive/2010/08/22/5829843.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.