2015年1月25日 星期日

[閒聊] 如何分辨好的agile programmer?

<這篇是個人心得>

我認為一個好的programmer應該具備某一些特質,假如有這些特質的人浸淫在agile的環境中,又會給他另外一些特質,就變成了一個好的agile programmer.

好的programmer的特質:


悲觀


沒錯,我覺得好的programmer應該是悲觀的.因為好的programmer應該有修過演算法,也應該修得很好念得很熟.

演算法這門課教的東西是:面對一個問題,我們要想一個方法去解他,然後分析這個問題跟方法的worst case,假如這個也不對,那個也不對的時候,這個解法的複雜度會有多高等等.分析了好久以後,再考慮best case,這通常是最簡單的,就是假設所有東西都很美好就大概是了,但如果這麼美好的話,這問題基本上就沒有解的必要了,所以很少發生.最後,再分析average case,而分析average case好像也不會花太久時間,可以想像是把前兩者加起來取平均而已.所以,一個好的programmer會有這樣的邏輯:

先想最壞的,再想最好的,但告訴自己這麼好的事情不會發生,然後才想一般的狀況.

久而久之,“先想最壞的”,就會慢慢地讓這個人變得有點悲觀了.



一直不停地學新東西


資訊領域的東西變得太快,今天很紅的東西,可能明天就不紅了,今年還很強大的公司,明年可能就軟了,為了保持自己的競爭力,好的programmer應該要不斷的學習,不管是新的語言,或是新的開發平台等等.

像公務人員,唸幾年書然後好好的準備一次考試,很辛苦的考過了以後,基本上都不用再學新的技術了.在資訊領域,沒這麼好的事情,要混飯吃就要一直一直地學習.



agile 人的特質:


樂於分享


agile或是scrum是強調團隊的,一個好的agile人應該是打從心底的願意分享自己的知識給大家知道,因為團隊強了,work load可以被其他人分享,每個人也會相對的輕鬆.於是在好的agile團隊裡面,大家會自動的安排分享的會議,甚至是利用下班之後的時間做這件事.

在傳統的文化裡面,大家會培養所謂的“核心競爭力”,讓自己在公司裡面不被取代,HR是這樣教育員工,人力銀行也是這樣教育社會大眾.但好的強的agile人不會這樣,他會掏心掏肺的教會別人,甚至會拜託別人學會他會的東西,因為agile是強調團隊的.


透明


agile因為要保持彈性,所以團隊要知道為什麼,比如說為什麼要先做這個,或是為什麼又要改了,這樣透明的文化在agile或是scrum裡面也是非常重要的.團隊成員會互相交換意見,比如retrospective meeting的時候,做得不好的地方要大膽的用力的指出來,而這一切都必須對事不對人,在這樣的文化裡,團隊才有更多進步的機會.

久而久之,好的agile人也會變得很透明,在一般人的眼裡,可能會有點白目,講話很靠杯,因為透明,想到什麼就說什麼,真的不是他們的錯,這是好事.

恩,關於retrospective meeting跟透明度也是很多事情可以寫,之後再補上好了.


不相信計畫


哈哈哈哈,因為agile就是要保持彈性來擁抱改變啊,面對改變要直球對決啊,久而久之,對於agile人來說,做計畫是浪費,因為他們相信事前的計畫基本上在執行的時候都會被翻掉.

比如說,當agile人出去玩的時候,基本上沒有計畫,或是只有一開始的幾天有計劃,然後就走到哪裡玩到哪裡了.

當這樣的人的另一半不能接受這樣的個性或特質的話,也就會相對辛苦了.



Conclusion


假如遇到了悲觀的人,不要覺得怎樣,或許他只是資工系念太久了;遇到不計畫的人,不要覺得怎樣,或許他只是靠寫程式混口飯吃而已.

假如你是主管,遇到具有這五個特質的人或許可以拉來面試看看,讓這樣的人加入你的團隊會發生很棒的化學作用,這是好事;但悲觀畢竟是負面的特質,會傳染,會影響士氣,所以要給他很高的薪水,讓他不要悲觀.

......以為我在開玩笑嗎?我是認真的.


</這篇是個人心得>








沒有留言:

張貼留言