[閒聊] 如何分辨好的agile programmer?
<這篇是個人心得>
我認為一個好的programmer應該具備某一些特質,假如有這些特質的人浸淫在agile的環境中,又會給他另外一些特質,就變成了一個好的agile programmer.
沒錯,我覺得好的programmer應該是悲觀的.因為好的programmer應該有修過演算法,也應該修得很好念得很熟.
演算法這門課教的東西是:面對一個問題,我們要想一個方法去解他,然後分析這個問題跟方法的worst case,假如這個也不對,那個也不對的時候,這個解法的複雜度會有多高等等.分析了好久以後,再考慮best case,這通常是最簡單的,就是假設所有東西都很美好就大概是了,但如果這麼美好的話,這問題基本上就沒有解的必要了,所以很少發生.最後,再分析average case,而分析average case好像也不會花太久時間,可以想像是把前兩者加起來取平均而已.所以,一個好的programmer會有這樣的邏輯:
先想最壞的,再想最好的,但告訴自己這麼好的事情不會發生,然後才想一般的狀況.
久而久之,“先想最壞的”,就會慢慢地讓這個人變得有點悲觀了.
資訊領域的東西變得太快,今天很紅的東西,可能明天就不紅了,今年還很強大的公司,明年可能就軟了,為了保持自己的競爭力,好的programmer應該要不斷的學習,不管是新的語言,或是新的開發平台等等.
像公務人員,唸幾年書然後好好的準備一次考試,很辛苦的考過了以後,基本上都不用再學新的技術了.在資訊領域,沒這麼好的事情,要混飯吃就要一直一直地學習.
agile或是scrum是強調團隊的,一個好的agile人應該是打從心底的願意分享自己的知識給大家知道,因為團隊強了,work load可以被其他人分享,每個人也會相對的輕鬆.於是在好的agile團隊裡面,大家會自動的安排分享的會議,甚至是利用下班之後的時間做這件事.
在傳統的文化裡面,大家會培養所謂的“核心競爭力”,讓自己在公司裡面不被取代,HR是這樣教育員工,人力銀行也是這樣教育社會大眾.但好的強的agile人不會這樣,他會掏心掏肺的教會別人,甚至會拜託別人學會他會的東西,因為agile是強調團隊的.
agile因為要保持彈性,所以團隊要知道為什麼,比如說為什麼要先做這個,或是為什麼又要改了,這樣透明的文化在agile或是scrum裡面也是非常重要的.團隊成員會互相交換意見,比如retrospective meeting的時候,做得不好的地方要大膽的用力的指出來,而這一切都必須對事不對人,在這樣的文化裡,團隊才有更多進步的機會.
久而久之,好的agile人也會變得很透明,在一般人的眼裡,可能會有點白目,講話很靠杯,因為透明,想到什麼就說什麼,真的不是他們的錯,這是好事.
恩,關於retrospective meeting跟透明度也是很多事情可以寫,之後再補上好了.
哈哈哈哈,因為agile就是要保持彈性來擁抱改變啊,面對改變要直球對決啊,久而久之,對於agile人來說,做計畫是浪費,因為他們相信事前的計畫基本上在執行的時候都會被翻掉.
比如說,當agile人出去玩的時候,基本上沒有計畫,或是只有一開始的幾天有計劃,然後就走到哪裡玩到哪裡了.
當這樣的人的另一半不能接受這樣的個性或特質的話,也就會相對辛苦了.
假如遇到了悲觀的人,不要覺得怎樣,或許他只是資工系念太久了;遇到不計畫的人,不要覺得怎樣,或許他只是靠寫程式混口飯吃而已.
假如你是主管,遇到具有這五個特質的人或許可以拉來面試看看,讓這樣的人加入你的團隊會發生很棒的化學作用,這是好事;但悲觀畢竟是負面的特質,會傳染,會影響士氣,所以要給他很高的薪水,讓他不要悲觀.
......以為我在開玩笑嗎?我是認真的.
</這篇是個人心得>
我認為一個好的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人出去玩的時候,基本上沒有計畫,或是只有一開始的幾天有計劃,然後就走到哪裡玩到哪裡了.
當這樣的人的另一半不能接受這樣的個性或特質的話,也就會相對辛苦了.
Conclusion
假如遇到了悲觀的人,不要覺得怎樣,或許他只是資工系念太久了;遇到不計畫的人,不要覺得怎樣,或許他只是靠寫程式混口飯吃而已.
假如你是主管,遇到具有這五個特質的人或許可以拉來面試看看,讓這樣的人加入你的團隊會發生很棒的化學作用,這是好事;但悲觀畢竟是負面的特質,會傳染,會影響士氣,所以要給他很高的薪水,讓他不要悲觀.
......以為我在開玩笑嗎?我是認真的.
</這篇是個人心得>
留言
張貼留言