軟體開發管理方法論之我見

老碼農發表於2014-10-02

自打兄弟我成為了一個高大上的碼農之後,就難免接觸到各種軟體開發的方法論。什麼CMM啦,敏捷啦,測試驅動啦,不一而足。

我們們碼農其實是很單純的,說白了搬磚怎麼搬不是搬啊對不對?所以老闆讓咋搬我們們就怎麼搬,大部分人也沒搞明白這些玩意兒背後到底是個什麼思路。

但是兄弟我和其他碼農不一樣,我是個愛思考的人。所以在搬磚之餘,我就會去找一些書來看,比如經濟學、心理學、業務流程管理、銷售管理之類的,一來可以漲漲姿勢,二來也嘗試站在老闆的角度來觀察一下我們們搬磚的情況。

一開始吧,我也看不出啥門道。各種方法論看上去都挺客觀的,據說有的可以準確控制搬磚的進度,有的能統一磚塊的質量,還有的能讓我們們搬磚的時候既高效又開心。

這樣問題就來了,搬磚技術到底哪家強呢?

包身工

哥思考了很久,後來站在老闆的角度終於想明白了:之所以有各種不同的方法論,是因為對於軟體開發有不同的假設前提(assumption — 順帶說一句,這個單詞厲害了,做過科研的同學們都知道,所有的科學理論都是基於一套assumption的。一般的科學家對前人的成果修修補補,牛叉的科學家發現新的方法和領域,而傳奇的科學家都是推翻前人的assumption,直接顛覆或創立一整套理論。啊,跑題了…)。不同的假設前提意思是說,在老闆眼裡碼農是個啥角色?不同角色對應的就是不同的管理思路,就會導致不同的管理方法論。

歷史的輪迴總是驚人的相似。其實軟體開發是一個行業,也難免經歷其他行業的發展歷程。我們先來看看工業界:工業革命之前,日用品都是手工作坊生產出來的,工匠的手藝差別很大,這種差別就體現在產品和工匠的收入上,比如普通鞋匠花五天做一雙鞋賣給村民,一個月能掙3個銀幣,而頂級鞋匠花三個月給貴族訂製一雙鞋,掙30個金幣。那個時候,衡量工匠工作效率的核心指標不是工作時間,而是手藝。

這個階段如果有管理方法的話,主要也是針對學徒的。學徒一直跟著師傅學習,直到手藝也達到師傅的標準,可以獨當一面。這時候的管理方法,主要是讓學徒儘可能掌握師傅的手藝,提高技術水平。

後來工業革命了,有聰明人做出了蒸汽機以及各種自動機器,實現了流水線生產,根據某些頂級工藝師設計好的模具進行自動化生產,流水線上的工人只是負責某個環節的裝配和質檢等簡單工作,就不需要有太高的手藝了,只要具備基本知識,經過流水線操作培訓就可以上崗。這時候,衡量工人工作效率的核心指標就不是手藝,而是工作時間。

這是為什麼呢?因為,流水線的生產速度是固定的,質量也是標準的,所以一個工人每天能做出多少產品和他站在流水線旁的時間長短成正比。所以這個階段的管理方法也不再看重工人提高手藝,而是關注出勤情況,所以相應的考勤打卡、病事假管理等等制度就一步步完善起來。

其實說白了,現在的軟體開發行業就正在經歷從作坊到工廠的轉變,有些公司轉變得比較快,有的轉變得慢一些。越來越多的開發框架、開發工具、庫、模板就構成了很多的自動化流水線,讓程式設計師這個職業的門檻越來越低。作為軟體工程師,在老闆的眼裡,也有偏工人和偏工匠的不同,所以就會有不同的管理方法出來。

再說到管理方法論和相應的假設前提,比如CMM是什麼?就是軟體行業的富士康管理方法。在實施CMM的公司老闆眼裡,他關注的其實是開發的流程。只要流程執行好了,每個碼農都是無差別的,就像流水線上的一個個工人一樣,今天走一個,明天就能招來一個,要求也不高,基本上會寫if…else…就行了,對整體工作完全沒有影響。考核員工的標準也比較容易量化,比如程式碼行數、出勤時間之類。

敏捷開發呢?老闆對工程師創造力的期望要高很多,希望每個團隊成員能獨當一面,這種模式下的工程師更像一個工匠,做事的自由度也會大一些。這種管理方式下,績效考核的複雜度就要大一些了,不能簡單地看寫了多少程式碼,可能是看功能點數,或者結合其他成員的主觀評價。當然,這種方式下對工程師水平的要求也會比較高,作坊裡總不能隨便找個人就開始幹活吧?

其他種種管理方法,其實都可以從這個角度去分析。不一定要看到它的開發方法論,從公司的外部表現就能大概齊看出來了。比如一家公司說福利好管三餐,上班要打卡甚至是996模式,辦公室裡還免費提供睡袋,薪水也不高,那麼你基本就是去做工人的。反之,如果某公司不用打卡不記考勤,只管午飯但很好吃,沒有老闆天天盯著你寫了多少程式碼,身邊都是高手,而且薪水又很高……呃,國內真有這樣的公司?假如有,那其他的就不用管了,趕緊去吧。

大部分公司其實都是介乎兩個極端之間的,你可以具體分析,是離工人近一點呢,還是離工匠近一點。

為啥要從這個角度去看呢?因為對自己的成長影響是不一樣的,工人講究的是熟練,工作中鑽研的方向也不是大的技術創新(老闆不需要你鑽研這個,而且你也沒有時間沒有條件去鑽研工作中用不到的東西),而是如何優化模板等特別細節上的改進,一旦失去這個工作,你的經驗可能在別的地方用處不大。工廠適合踏實、肯吃苦、執行力強、能幹髒活累活的人,在這種人員流動大的地方能堅持下來,其實也會有很好的職業發展機會。

如果你是那種喜歡新鮮感、愛鑽研新技術、對於重複性的勞動興趣不大的人,最好還是儘量去那種強調巧幹勝過苦幹的地方。一般那裡高人比較多,學習的條件好,提升空間比較大,但是前提是你要聰明、勤快、自學能力強。在這種地方呆上幾年,就能積累很多東西。

不過現在行業裡也有讓人看不懂的公司,沒辦法用這個套路分析,或者說,它們是一種奇怪的混合變異體。比如有的網際網路公司強調以人為本,取消了一線管理職位,實行扁平化的管理,又實行996嚴格考勤制度下的敏捷開發,對程式設計師主要考核程式碼量和bug數等等……

這種思路大概是想把高水平的工匠們集中到工廠裡進行流水線化的管理,類似中西醫結合,先拍片子再抓方子。老碼農在此無奈地表示,這種變異體的管理方式太有創意,無法評價,我只能承認搬磚技術最強的就是他們家了。

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

軟體開發管理方法論之我見 軟體開發管理方法論之我見

相關文章