2013年5月25日 星期六

Seven traits of effective programmers - 強者程式人的七種特質



我一直認為,發這樣的文章,並不是為了還要用以前人常用的招數,告訴你說,企業都需要這樣的人,如果你是強者,你一定會有很好的工作之類的。實際上,當個程式人強者,直到現在我相信那只是單純的一種人生目標,是一種生命的態度。你可以想當這樣的人,也可以不想當這樣的人。但如果!我說的是如果,你今天下定決心就是要當這樣的人,那我相信以下的幾個想法,確實會為你帶來一些指引方向。


原文已經有很好的翻譯可以參考 http://techorange.com/2013/05/22/programming-and-developmentseven-traits-of-effective-programmers/




以下摘錄一些我自己的想法,和翻譯,我覺得比較貼近原意

1. Learn new tech and non-tech skills of their own accord

以他們自身的意願學習新的技術或非技術知識。

或許很多人不知道,許多美國高中大學給予學生的教育是「除了學習你的專業,也要學習人文,社會,經濟等知識」。而台灣長期以來並沒有著重在這樣的教育上,所以造成許多人總是顧的了左,顧不了右,即便連爭論也只能從單一角度。

當然我還是很贊同,提前學習不同的程式領域,並且擁有多種領域知識的人,絕對是未來的需要及趨勢。但無論如何,不是以自身意願去學習的,可能並沒有辦法成為強者。

2. Are pragmatic, not dogmatic

務實而不武斷

「遵守不成文的"編程慣例"是一個非常奢侈的事,僅有少數編程員可以接受。我絕對可以跟你保正如果你的軟體規格不是由頂尖的開發者所影響或撰寫,那你肯定當不成這種人。」

接著原文談到了一些有關於有些編程員總是希望在技術上有所突破,他們會認為在這一個點上使用了完美的技術,會勝過滿足所有商業需求。

我個人覺得最大的問題就是來自於,大部分的軟體規格並非專業人員所制訂,流程也非專業人員所管控,甚至軟體的需求是由非專業的業務所談成的。只要你的軟體公司有任何一點這樣的問題,就很有可能將你公司整個軟體的開發流程弄得大亂。更何況你的編程員正嘗試地用更好的技術為你補救你在業務上創下的缺失,還要被你嫌說他不了解需求!

要達成務實而不武斷,你還是必須先經歷過一個思考過程:你的軟體究竟為誰而做?你有確定地掌握軟體需求嗎?有確切地掌握軟體設計嗎?有確切地掌握每一個關鍵技術嗎?我相信只要你缺了一個,或是這些東西掌握在非專業,或甚至是與你和無關係的人身上,無論如何你也不可能達成「務實」的,而且更容易讓你的上司覺得你很武斷。

3. Know how to research for answers

知道如何研究出答案

在原文中提到的,找答案不是去網路上問人,那與問你的資深同事並且把工作交給他做有何兩樣?

我認為資訊學科,或是更高的學經歷,教導我們的,就是如何自己取得資料,找出問題,再來是找出答案。而找出的答案,有的時候是為了發現更多的問題,並解決更多的問題。如果有個編程員是對找問題及答案沒興趣,那他肯定不是屬於強者那一群。

4. Have passion

擁有熱情

對自己的工作,自己的興趣,擁有熱情,甚至熱血,這已經是非常難得。而我更認為,要成為強者,就要想像自己是永不停下來的火車頭,不斷地在技術層面向前衝。

咦等等,前面不是說,要以自身的意願學習技術與非技術的,那現在又覺得說要向技術向前衝?記得以前我有一篇文章叫做「德智體群美」就被網友提出質疑,要學的東西那樣多,同學同事又那樣強,還要對付老闆,是吧?

一言以蔽之,熱情就是,永遠積極,永遠不認輸,永遠一天一天前進,即便你現在不是強者,總有一天也會是。而意志上先認輸的人,不僅不瞭解,也欠缺熱情,更是有一天可能就完全會在很多層面上都輸給後進,或是被整個努力向上的團對所排擠。因為對所有的資訊人員來說,「永遠站在資訊與時代的最尖端」那是絕對正確而且值得去做的事情。為此,貢獻你的生命,發揮你的熱情及影響力,為了你相信的目標,要服務的人群去努力。往那個目標走,你就是強者,更別說熱情對你來說是再也基本不過的事。

5. Leave their egos at the door

不要自恃甚高

其實討論到這個點上,已經是在討論一個強者的人格特質,這個特點也算是滿常見的。即便原文提到,許多資深開發者實在是邱的要死,多一點經驗不代表就比較成熟。但說實在這樣比來比去的人格特質,在社會上也是非常常見,比的範圍包括工作,家庭,生活,興趣;還有人喜歡比爛,而不見得是一直去覺得自己比人家好。

成功的人格特質是,他只比自己,而且清楚自己一天比一天好。也因此他不會過於沒自信,看輕自己,也不會過於有自信。更重要的是,他比較不會有不安全感,也因此不需要靠比較之後得到的成就感來激勵自己。所以他可以花更多時間專注在他想要做的事情上。所以強者既不會自恃甚高,也不會自恃甚低,更不會花太多時間在「自以為」這件事情上(當然不可能說都不會自己躲起來想,也不會說完全沒有情緒,因為強者終究還是人)。

6. Have entrepreneurial spirits

有創新精神

我認為這邊主要強調的應該是,不要把寫程式當作只是一份工作,也是與前面熱情呼應,如果說是要帶著冒險精神也是對的。但是不是要冒險,是不是要引入新技術,還是必須在非常確定的情況下才決定。

7. Measure twice, cut once… but do not measure more than three times

不要一直不斷地進行測試,太過於謹慎

這個部分會牽扯到許多問題,一個是專案時程的問題,一個是軟體需求的問題。
我還是認為,這些事情會與編程員本身的能力跟認知有關,如果他真的還停留在「怎樣做」而不是「為何而做」的階段,那他應該不是頂尖的開發者,而更離所謂的強者還有些距離。所以先從軟體需求講起,原文中也有提到,需要進行嚴格測試,或甚至做出非常好的POC,除非這些是跟生命財產有關係。但我認為如果公司狀況允許,盡量用科學的方法先驗證可行性是必須的,一間軟體公司最好也要保留給開發主力這樣的彈性。

另外一個問題,如果公司無法給與員工這樣的彈性,那就必須用專案時程的方式來解決。只要POC的部分不超過3個cycle,我覺得都還是可以接受的。但完全不給POC時間,反而就是老闆的問題了。


結語

最後記得「我的一生,沒有一絲悔恨」,如果你已經體會這句話的真諦,那我相信你已經是確確實實的強者!然而終究要記住,強者總是孤獨的,不管是在技術上,人格上,甚至人生經歷上,都不見得會是得到好的下場。要當強者,還要三思!

(圖片來源:http://home.gamer.com.tw/creationDetail.php?sn=727220)

1 則留言 :

  1. 保有初終勿忘自我,目標是可以ㄧ步一步達成,但是神人的境界並非所有人都能達成,共勉之~~~~~~

    回覆刪除