在developer.*上看到一篇文章《What Is A Professional Programmer?》,討論了作為專業的程式員所應該具有的一些素質。文章的第一部分講了作者的經曆,我把這部分略去了。我沒有作逐字句的翻譯,刪減了一些內容,添加了一些自己的理解。撇開技術不談,作為一個“專業”的程式員,在coding之外,還有許多方面需要磨練。
“專業”一詞的含義
成為一名“專業”的程式員意味著什嗎?“專業”地作任何事又意味這什嗎?對“專業”一詞的定義可以是這樣:通過技術掙到錢。但是真正的“專業”還有許多含義。從我的觀點來看,還應該有以下幾點:可信賴,團隊精神,領導能力,溝通,不斷提升的技術能力,對風險最小化的關注等。
可信賴
可信賴表現在多個方面,你是否可以完成一個任務,而不需要有任何人監督或檢查,當別人請求你的協助時你是否是可以信賴的。你是否可以保證客戶的資料不被泄漏。在使用其他庫或者工具是你是否遵守了協議等。
團隊精神
你是否能夠真誠的和團隊成員協作,你工作是為了團隊的利益,你是否能夠信賴團隊的其他成員,大家的目標是否一致。
領導能力
領導能力可以為你贏得尊重。瞭解團隊中的每個人的這項技能的情況,確信你所分配的任務沒有超出他的能力所及的範圍。
領導能力不僅僅包括你去作項目中你最感興趣的部分,還包括能夠獨立完成你所不喜歡的任務,而且不需要他人的協助。你應當能夠在需要的時候表現出你的領導能力,承擔起責任。任何一個專業的程式員,他們會清楚的知道後續要作什麼,而不僅僅是手頭的任務。
溝通
尊重你的客戶和合作者,儘可能的傾聽他們的聲音,這是溝通的關鍵,沒有溝通項目根本就無法開始。
溝通是協助客戶解釋,明晰他們的需求和擷取反饋的最有效,最關鍵的途徑。專業的溝通是有效,在點子上的,不管你採取什麼方式,電話,email,面對面的交談或者書寫文檔。
對文檔你最初可能認為只有程式員會用到,但是你會發現在一個嚴肅的項目中文檔會關係到很多人,其他的程式員需要高階層的API或者代碼內嵌入的文檔,管理者需要計劃,進度,bug報告,而律師需要知道軟體作了什麼,什麼時候完成的,使用者則需要文檔來知道怎樣使用軟體。
不斷提升的技術能力
關注當前業界的趨向,最新的方法學,也許可以在你的項目中使用的庫和工具。標準,檔案格式和協議,你的潛在客戶在關心什麼。在保持對自己所在領域興趣之外,儘可能拓寬知識面。要知道好的程式員從來都在不斷學習。
最小化風險
記錄下軟體進行的改動,所有的bug,最好有一個軟體來儲存,管理。
只要對代碼改動就有可能會引發錯誤,我們需要有版本管理工具和版本管理過程。
“專業”的程式員十分關心是否有足夠的測試,程式員應當能夠從測試人員所提供的資訊發現更多的問題,因為程式員最瞭解自己的代碼。同時保證迴歸測試的時候,所有的改動都已檢查,確認過。
保持代碼的簡單和良好的風格也是管理風險的一種手段,如果你的代碼容易理解,別人就很有可能發現其中的錯誤,同時,新手也更容易理解,學習。
客戶經常會改變他們的想法和需求,因為他們認識到之前的需求不是他們真正想要的。你必須使自己的代碼模組化,可複用,這樣你可以更容易的應對這些變化。