軟件開發(fā)人員的“七重苦”
軟件開發(fā)這個行業(yè)無疑的是有快樂的,但這篇文章里,我們先不關(guān)注他,而是要來看看那些讓人痛苦的地方。
有時候想想,人作為一種生物還是挺有意思的。
快樂的東西快樂過了,也就忘了,記的牢的的反倒是些讓人不快樂的東西。
第一重:垃圾代碼
佛家總講成住壞空,軟件亦莫能外。
唯一有點特別的是,軟件“住”的階段短,“壞”的階段來的快。
要想軟件保持不“腐敗”,其實要花的精力遠比想的多,這導致在商業(yè)利益比較強勢的世界里,大多時候有的只是“能用就行”的軟件,而不是“好”的軟件。
“能用就行”的軟件里,大多時候到處都是垃圾代碼。
如果說超過100行的方法/函數(shù)讓人痛苦的話,那么時有出現(xiàn)的超過200行的方法/函數(shù)就是讓人絕望了。
不改不行,改了不知道對錯,一旦錯了很可能被抱怨。這就是垃圾代碼帶來的痛苦。
軟件行業(yè)已經(jīng)存在超過30幾年了,現(xiàn)存的軟件很多。所以軟件開發(fā)人員遇上垃圾代碼的可能性絕對高于50%。
開源的世界要好很多,只可惜很多時候開源和飯碗的關(guān)聯(lián)有點艱難。
第二重:莫名其妙的加班
很多日程是把程序員的工作時間作為變量的。
簡單來講就是,要完成的工作是不確定的,但日程是確定的。
這樣一來,軟件開發(fā)人員必須加班。
但關(guān)鍵是一個人每天能寫的既定質(zhì)量水平的代碼大概就那么多,一旦逼急了,只能放水,少想多做,進而貢獻更多的垃圾代碼。
因此說,這類加班很莫名其妙:目的可能是節(jié)約成本,縮短工期,但實際上垃圾代碼一出,大多時候是適得其反。
可以10人月做完的項目,只計劃投入5個人月,最終投入了15個人月的例子其實不少。
項目越復雜,越容易出現(xiàn)這種情況。
第三重:需求變化下的無用功
沒什么比,費了很大力氣完成一項功能,結(jié)果收到的反饋是“這不是我們想要的”或“這個功能不需要了”更讓人泄氣了。
需求變化是正常的,迭代也是正常的,可無用功太多一定是不正常的。
但軟件這個行業(yè)中,這事似乎沒法根絕。
這也許根本就不是個技術(shù)問題,或者說不只是技術(shù)問題。
人有偏好,偏好在變化。世界有走勢,走勢在變化。這些都會傳導到軟件里來,進而使無用功成為一種宿命。
第四重:選擇太多
在很多工程領(lǐng)域里,確定性的東西比較多。但軟件開發(fā)里恰恰相反,確定性較少,選擇太多。
這也許是好事,但有的時候確實也讓人痛苦。
假設(shè)說,我們要從頭開發(fā)一款軟件,那么至少要做這些選擇:
- 用什么語言?這好像很簡單,但如果真要很理智的去分析和選擇,其實很難,C++,C#,Java那個沒有自己的優(yōu)勢呢。
- 用什么框架?選新技術(shù),可能支持不到位,也可能很快被淘汰;選老技術(shù),可能會有些已知的限制。
- 是買還是自己造?買的話省時間,但一旦出問題,很可能導致項目卡殼。自己造的話,有可能時間上來不及。
- ... ...
每次面臨這類問題時,都讓人感覺,世界很大,自己不過是一只小小鳥。
其實選擇讓人難受的主要原因是自身知識與未知世界間的矛盾,但軟件的世界真的很大,一個人要想了解所有事情完全不可能。
所以痛苦的選擇題就總在那里,不管你愛或不愛。
第五重:技術(shù)變化快,積累上不去
設(shè)想一下,一個10年前的高手,這10年他什么也不學,那他今天會是什么樣的一個狀況。
我個人估計是快被淘汰了。
這是個極端的例子,但回顧一下軟件的發(fā)展歷程你會發(fā)現(xiàn),新技術(shù)的出現(xiàn)是爆炸式的。
在DOS的時代里,軟硬件的距離非常近,你只要會一種語言,了解基本算法和數(shù)據(jù)結(jié)構(gòu),再了解計算機硬件的知識,你就可以寫大部分的程序。
接下來軟件和硬件間的層次越來越多,Windows加上一層,Java虛擬機加上一層,瀏覽器加上一層,F(xiàn)lash等再加上一層,諸如此類。
每多一層技術(shù)的種類就增加一些。這就導致軟件開發(fā)人員同時面對兩類壓力:一是項目上的時間壓力,一是技術(shù)更迭上的學習壓力。但偏偏一個的時間是有限的。
很多時候特定工作崗位會限定關(guān)聯(lián)技術(shù)的范疇,如果自身不做點安排,那就真成吃“青春飯”的了。
第六重:究竟誰干的好,誰干的不好
大多時候,考評不能每個人都打A,否則就成了吃大鍋飯的。
可在軟件的世界里,一旦要分個你好他差,難度就出來了。
根據(jù)實績判斷,一個人很難全面理解很多人的工作。如果團隊規(guī)模少于10人,這類的判斷還存在可能性;如果超過10人,那么誤判的幾率會直線上升,除非是天才。
根據(jù)數(shù)據(jù),大多數(shù)據(jù)真的不能用來評價軟件開發(fā)人員。生產(chǎn)率、Bug率這些是一定不行的,圈復雜度這類歧義性很小的指標勉強可用,但說明的問題會比較片面。
根據(jù)感覺和印象的話,多少有些草菅人命的感覺。
于是考評大多時候總是天怒人怨的考評,而天怒人怨的程度很多時候取決于當事人的在意程度。
第七重:弟兄們意見很多,統(tǒng)一很難
軟件很重要的一個特質(zhì)就是仁者見仁,智者見智。
觀點的差異有的時候是是非問題,但大多時候是視角問題,是橫看成嶺側(cè)成峰式的。
而軟件團隊大多時候在兩個極端間徘徊:要么沒意見,要么很多意見。
很少有團隊會是在合適的時候有合適的意見---這是政治家干的事,程序員不大做的來。
沒意見的團隊實是兵無戰(zhàn)心的團隊,其實更差,這里不去說他。
有意見的團隊協(xié)調(diào)起來比較很辛苦。
程序員群體里大致上是越優(yōu)秀的越容易固執(zhí)己見,所以大致上越優(yōu)秀的團隊吵得越多,越兇。
但不管怎么樣,最終的選擇只有一個。這時候,不能只靠行政力量去拍,要在理解各種想法后,結(jié)合外部需求,時間壓力,人員狀況去協(xié)調(diào)。
這事其實很不容易。
小 節(jié)
一定程度上講,這七重苦很難根絕。
好多即將做軟件的或做的時間不長的同仁大多時候關(guān)注的是新技術(shù),是創(chuàng)造性;但就和陽光下總有陰影一樣,不管方法如何更迭,總有些東西無法徹底改善。
所以想做軟件的,并想堅持做軟件的,要有點心理準備,不能夢想的太美,那樣回頭會比較失落。
風光的活是有的,臟活累活也很多,有了這樣的心理預期,才能在做軟件中找到快樂。
說了這么多,倒不是悲觀。
有些問題即使沒法徹底解決,但程度上還是不一樣的。
痛苦在那種程度上是事在人為的主戰(zhàn)場,這點上做和不做差別很大。
假如一個人不把眼光只局限于某個項目,而是把視野擴展到整個軟件開發(fā)所對應(yīng)的方法論,那么關(guān)注現(xiàn)實中的痛苦,則是有所得得前提。
原文鏈接:http://blog.csdn.net/leezy_2000/article/details/7235699
【編輯推薦】