我們都是軟件行業(yè)是世界所有的行業(yè)中,失敗率高的。進(jìn)度沒(méi)有辦法度量的,通常會(huì)拖,一拖再拖,而且人員都撲上去了,可是還是慢。
為什么?
多少年,多少人,更有很多的專業(yè)公司都在分析這里面的原因。為什么我們的人員都在加班了,沒(méi)有人偷懶,都很努力,效率卻上不去?
據(jù)我分析和思考,認(rèn)為可以從下面兩個(gè)角度看這個(gè)問(wèn)題:業(yè)務(wù)和技術(shù)。究其原因的話,有下面幾個(gè)常見(jiàn)的原因:
業(yè)務(wù)混亂。業(yè)務(wù)是軟件的基礎(chǔ),軟件是為業(yè)務(wù)服務(wù)的,這尤其在應(yīng)用軟件開(kāi)發(fā)中是常見(jiàn)的。可是很多時(shí)候我們太急于出界面了,忽略了業(yè)務(wù)的分析和梳理。往往有個(gè)需求,要求盡快開(kāi)始開(kāi)發(fā)工作,盡快的完成功能,盡快的見(jiàn)到界面,可以操作,可以進(jìn)行測(cè)試。其實(shí),這時(shí)候的業(yè)務(wù)流程往往由于沒(méi)有梳理清楚,存在很多的漏洞,看起來(lái)整體是沒(méi)有問(wèn)題的,是流暢的?墒牵锩娴募(xì)節(jié),摳一下的話,會(huì)發(fā)現(xiàn)僅是絆子,到處都是陷阱。這樣的業(yè)務(wù)作出的設(shè)計(jì),寫(xiě)出來(lái)的代碼,后面很有可能會(huì)需要推倒重來(lái)。這時(shí)候開(kāi)發(fā)人員的開(kāi)發(fā)體驗(yàn)很不好,情緒受到很大的影響,效率自然也搞不到哪里去?反而,由于屢次的推到,很有可能會(huì)降下來(lái)。
技術(shù)基本功不足。算是業(yè)務(wù)分析清楚了,也梳理好了,也畫(huà)了很多的圖,表述也達(dá)到了統(tǒng)一的程度。還是有點(diǎn)慢呢?還是沒(méi)有達(dá)到預(yù)期的速率呢?那是業(yè)務(wù)分析人員完成了他們工作,架構(gòu)師設(shè)計(jì)了軟件架構(gòu),該到程序員開(kāi)始編碼了?墒,每個(gè)程序員的水平是不一致的,有的時(shí)候會(huì)在一些技術(shù)點(diǎn)遇到問(wèn)題,導(dǎo)致了開(kāi)發(fā)時(shí)間超出預(yù)期范圍;竟Πǎ盒〉椒椒ǖ脑O(shè)計(jì),參數(shù)的設(shè)計(jì),算法的應(yīng)用,大到類的設(shè)計(jì),設(shè)計(jì)模式的應(yīng)用,對(duì)架構(gòu)師給出的軟件架構(gòu)的理解,都存在各方面的問(wèn)題。
對(duì)于第一個(gè)原因,業(yè)務(wù)的原因。我認(rèn)為需要從業(yè)務(wù)的角度解決,需要在分析業(yè)務(wù)的時(shí)候,深入的思考,深入到業(yè)務(wù)的細(xì)節(jié)部分。對(duì)整個(gè)流程中的細(xì)節(jié)好有梳理,每一步分析梳理都要有結(jié)果,文字和圖例。不要草率的開(kāi)工,不要只是分析一點(diǎn)點(diǎn)可以了?梢詤⒖汲绦虻臉I(yè)務(wù)流程,分析適合自己的業(yè)務(wù)流程。
還有是需要領(lǐng)導(dǎo)在這個(gè)問(wèn)題上有正確的認(rèn)識(shí),不要基于要求開(kāi)工,技術(shù)人員這時(shí)候可以做一些技術(shù)的積累和基礎(chǔ)工作。例如公共類庫(kù)的整理和編寫(xiě),架構(gòu)師可以進(jìn)行系統(tǒng)的架構(gòu),是否要分布式,是否需要物理分層,是否有可以用的類庫(kù)。還有一些cross-cutting的關(guān)注點(diǎn),這時(shí)候都可以進(jìn)行開(kāi)發(fā)和設(shè)計(jì),進(jìn)行技術(shù)的探討也是不錯(cuò)的。對(duì)于后期的開(kāi)發(fā)也是很有幫助的。
對(duì)于第二個(gè)原因,需要企業(yè)和開(kāi)發(fā)人員兩者都要有深入的認(rèn)識(shí)。
首先,企業(yè)方面要有公司的類庫(kù),有自己的積累。對(duì)于一些公共的類庫(kù),一些非功能的模塊,例如:日志、異常處理、數(shù)據(jù)合法性驗(yàn)證、用戶驗(yàn)證、數(shù)據(jù)訪問(wèn)、緩存等等。
其次,公司要有統(tǒng)一的開(kāi)發(fā)標(biāo)準(zhǔn),開(kāi)發(fā)規(guī)范,這樣的話,大家可以互相幫忙,例如在一個(gè)人較慢的情況下,有人可以幫助他編寫(xiě)一部分的功能,加快整體的速度。因?yàn)榇蠹业臉?biāo)準(zhǔn)的一樣的,所以接手起來(lái)也不會(huì)太困難,否則接手很困難的話,對(duì)整體進(jìn)度沒(méi)有幫助了。
再次,對(duì)于開(kāi)發(fā)人員需要有培訓(xùn),培訓(xùn)每個(gè)人的基本功。尤其是關(guān)注那些新人,提升大家的基本功。使得大家在進(jìn)行模塊設(shè)計(jì)和開(kāi)發(fā)的時(shí)候不至于牽絆太多,可以順利進(jìn)行。而且做出來(lái)的東西,從質(zhì)量角度來(lái)講也可以更高,減少返工的幾率。這方面園子里面也有人提出了很多不錯(cuò)的建議面向?qū)ο笏枷氲念^腦風(fēng)暴(一) 面向?qū)ο笏枷氲念^腦風(fēng)暴(二)—— 詳解繼承與組合的優(yōu)缺點(diǎn) 面向?qū)ο笏枷氲念^腦風(fēng)暴(三)-使用接口進(jìn)行解耦 等。其實(shí)是提高我們的面向?qū)ο竽芰Γ驗(yàn)槲覀兇蠖嗍褂玫氖敲嫦驅(qū)ο蟮木幊陶Z(yǔ)言,但是開(kāi)發(fā)的時(shí)候我們除了寫(xiě)了類,什么都沒(méi)有了。這方面可以用頭腦風(fēng)暴的方式,花一個(gè)下午或者是,大家一起針對(duì)一個(gè)問(wèn)題進(jìn)行分析、設(shè)計(jì)、編寫(xiě),讓新人參與進(jìn)來(lái),可以學(xué)習(xí)成熟的代碼編寫(xiě)方式和技術(shù),可以統(tǒng)一大家的認(rèn)識(shí)高度。雖然不可能通過(guò)幾次的培訓(xùn)和做幾個(gè)小題有實(shí)質(zhì)性的提高,但是可以鍛煉思考能力,終的提高還是要靠個(gè)人在實(shí)戰(zhàn)的開(kāi)發(fā)中總結(jié)和應(yīng)用,還有是多花工夫思考和聯(lián)系。師傅領(lǐng)進(jìn)門(mén),修行靠個(gè)人。<!--end: searchItemTitle -->
后,技術(shù)上面要有人來(lái)把控。至少有一個(gè)人是具有豐富經(jīng)驗(yàn)的,可以把握整體的方向,整體的風(fēng)格,可以對(duì)新人進(jìn)行培訓(xùn)。而且公司也可以充分授權(quán)這個(gè)人,充分這個(gè)人,也可以較為放心的進(jìn)行開(kāi)發(fā)管理。
個(gè)人觀點(diǎn),難免偏頗。歡迎大家一起討論。