官术网_书友最值得收藏!

1 關于軟件工程生產力

1.1 從另一個角度看“提高軟件工程生產力”

所謂另一個角度,是指從社會學的理論中找到提高軟件工程生產力的理論基礎。

如果將軟件工程看成軟件的生產過程,軟件工程師是這個生產過程中的一種勞動者,知識是這個生產過程中的勞動對象,我們就會發現,這就是馬克思的生產力理論三要素。

生產力三要素是勞動力、勞動資料、勞動對象,其中勞動資料和勞動對象構成生產資料。

我們根據這三要素來思考如何提高軟件工程生產力。

生產力三要素分別指的是什么呢?

勞動力:一般意義,指工作人群,通常指在一家公司、各個產業乃至某個社會工作的人,多指體力勞動者,但通常不包括雇傭者(老板)和管理層。

勞動資料:也稱勞動手段,是在勞動過程中所運用的物質資料或物質條件。

勞動對象:是指勞動本身所作用的客體,比如耕作的土地、紡織的棉花等。

在軟件工程領域,生產力三要素又分別指的是什么呢?

勞動力:通常將軟件開發工程師、測試工程師認為是勞動力。然而,當他們不在工作狀態時,就不能稱其為勞動力,只能稱為勞動者。

勞動資料:嚴格意義來說,辦公場所、座椅、生產工具等都被稱為勞動資料。本書主要討論的是生產工具。筆者從硬件、軟件的角度對生產工具進行了分類。

· 硬件:開發時使用的電腦、機械鍵盤、靈敏的鼠標、網絡速度等。

· 軟件:IDE(如Eclipse、IntelliJ IDEA)、構建工具(如Webpack、Maven)、協作工具(如Jira)、部署工具(如Ansible、Puppet)等。

勞動對象:不像制造汽車,在開發軟件時,勞動對象則是看不見、摸不著的知識。筆者將軟件工程中的知識分為業務知識和技術知識。

在理解了生產力三要素后,如何根據此理論來提高軟件工程生產力呢?我們分別討論。

1.1.1 從勞動力要素考慮提高軟件工程生產力

如果能招到比一般程序員生產力高10倍的程序員,并好好利用,就可以提高生產力。如果這個程序員的生產力比一般程序員高10倍,那么通常意味著其工資也高10倍。

另外,不論招到什么樣的程序員,管理者都要關心的是,如何幫助勞動者達到最佳工作狀態,以產出更多的勞動力。不在工作狀態,就不能稱之為勞動力,只能稱為勞動者。也許,那些經常隨意打斷程序員的管理者需要反思一下了。

另外,注重培養員工的公司,不僅可以提升員工生產力,還可以提升公司的整體生產力。

1.1.2 從勞動對象要素考慮提高軟件工程生產力

如果將軟件生產過程看成是無形的知識具化成有形軟件的過程,那么產品經理需要將想法(一種知識)具化成原型,美工和交互設計師理解產品經理的想法后,將自己的想法具化成設計稿,然后再將自己的理解及想法(又是一種知識)傳達給前端開發人員。接著,前端開發人員和后端開發人員又溝通接口的設計(還是一種知識)……可以看出,要提高軟件工程生產力,知識的流通效率起著很關鍵的作用。所謂知識的流通效率,指的是讓知識從一個人的大腦流動到另一個(群)人的大腦的準確性和速度。

所以說,溝通能力在軟件工程領域十分重要。

我們甚至可以將一些需要重復操作的知識,具化成一個個工具或者模塊。這無疑也是提高生產力的方法。這也就等于告訴我們,在管理軟件生產過程時,要主動去識別那些需要重復操作的知識。

如果更深入地思考,你會發現,對于工廠里的生產流水線,如果工人辭職了并不會帶走什么。而知識存在于人的大腦里,人辭職了,就意味著把公司的勞動對象帶走了。這對團隊、公司是一大損失。想想公司通過發放工資生產出來的勞動成果,就這樣被輕而易舉地帶走了。

那怎么解決這個問題呢?根據勞動力要素,應該盡可能留住這些帶有“關鍵”知識的人;根據勞動對象要素,應該盡可能提高同一知識在團隊中的攜帶人數。

那怎么做呢?敏捷實踐中的站會、結對編程以及看板的應用,都是增加知識流通效率的手段,從勞動對象要素考慮提高軟件工程生產力。

1.1.3 從生產工具要素考慮提高軟件工程生產力

程序員笑話一則:程序員在椅子上打斗,經理叫他們回去,其中一位說:正在編譯呢!

經理回答:哦,那你們繼續。

從生產工具要素考慮提高軟件工程生產力。這似乎不需要多談。大家都知道挖土機比鐵鏟更具有生產力。然而,很多管理者還給程序員使用低配置的電腦。

低配置的電腦會導致程序員無用的等待,比如打開IntelliJ IDEA需要等2分鐘、多打開兩個窗口就卡頓等。

我們算算賬。假如一個20 000元/月工資的程序員,工作22天,每天8小時,那么每小時就是113.6元。假如程序員每天因為打開程序慢、網絡慢、編譯慢等而等待的時間總和為0.5小時,那么這0.5小時就屬于浪費的,總共約57元。這意味著一個月會浪費1254元。

這只是一個程序員一個月的浪費,還沒有算其他人的。雖然計算有些粗糙,但是能反映問題。相對程序員的工資成本,電腦的成本真的不算什么。

說句題外話,這樣計算并不是在壓榨員工,而是在8小時范圍內計算著如何提高公司整體生產力。

從另一個角度來看,作為軟件開發團隊的負責人,需要深入“開發現場”去了解,當前的生產工具是否變成提高生產力的阻力。生產工具除了電腦,還包括網絡、構建工具、IDE等。

1.1.4 生產力三要素的意義

總而言之,比起管理成功學的“心靈雞湯”,從生產力三要素的角度來看軟件工程的意義,在于為我們提供了更多的可操作性。管理者可以將生產力三要素作為理論基礎,有據可依地來提高生產力。

話說回來,如果你是那位看到“程序員在椅子上打斗”的經理,你會怎么辦?

從生產力三要素的角度看,你要問平均編譯時間是多久、為什么這么久,進而從三個要素發問:

? 生產工具:是電腦太慢了?是編譯工具本身太慢了?

? 勞動力(程序員的能力):是構建邏輯寫得不合理?是編譯過程中的某個階段的問題影響了整體編譯速度?

? 勞動對象:是不是缺少對當前構建工具(技術知識)的了解?

主站蜘蛛池模板: 奎屯市| 雷波县| 苏尼特右旗| 晋宁县| 沾化县| 简阳市| 平遥县| 丰都县| 通海县| 高雄市| 崇明县| 逊克县| 襄城县| 昌都县| 吉木乃县| 新绛县| 灵寿县| 大兴区| 唐河县| 琼海市| 乐陵市| 桃园县| 上饶县| 内江市| 台南县| 黔南| 阳信县| 当阳市| 广安市| 稷山县| 珲春市| 阜新| 迭部县| 成安县| 隆林| 宜良县| 桃源县| 鄄城县| 抚顺县| 龙游县| 汕头市|