緣由
作為摸爬滾打了若干年的程序員赦拘,在交流開發(fā)經(jīng)驗的時候卧须,都會講到各種工程規(guī)范,小到變量命名笋籽、代碼縮進(jìn)的格式椭员,大到團(tuán)隊的分工合作模式和系統(tǒng)架構(gòu)的設(shè)計規(guī)范,而所參照的代碼規(guī)范侍芝,都是些大公司的文檔埋同,比如東軟編碼規(guī)范,還有之前阿里發(fā)布的JAVA規(guī)范凶赁,無疑虱肄,對于入過無數(shù)坑的朋友來說,那些文檔讀來咏窿,都有一種相見很晚的感覺,并積極在自己的公司團(tuán)隊里推行萝挤。
然而,這里說然而平斩,大多人所在的公司并不是BAT這種大公司亚享,其中所遇到的坑和解決方案,很多時候绘面,說實話(欲哭無淚)欺税,難以適用。沒錯揭璃,我說的晚凿,就是那些多如牛毛的小軟件公司,那些作坊軟件公司瘦馍,當(dāng)然歼秽,之所以寫這樣一個話題,并沒有任何的不敬或者嘲笑之意情组,再大的公司即如BAT也是由作坊發(fā)展過來的燥筷,我們來看一看小公司的問題,聊一聊一些有趣的解決方案院崇,權(quán)當(dāng)是吐槽式總結(jié)吧。
作坊公司定義
先從人數(shù)來說吧底瓣,一般15個人以下的團(tuán)隊谢揪,就是屬于典型的小團(tuán)隊了,事實上捐凭,很多公司拨扶,甚至只有幾個開發(fā)人員,從需求到設(shè)計到編碼到測試茁肠,甚至到客服患民,幾乎都是人人從頭負(fù)責(zé)到尾的,談不上有什么分工垦梆,基本就是看誰空匹颤,活就扔給誰,在這樣的小企業(yè)中奶赔,每個人往往大部分時間都是處于趕時間交任務(wù)的狀態(tài)惋嚎,對于思想工作者來說杠氢,還是挺痛苦的站刑。那么,這樣的小公司鼻百,是不是就是作坊公司呢绞旅,還不能說摆尝,它得滿足這樣一個條件:各自為戰(zhàn)。若一個團(tuán)隊中的成員因悲,往往都是各自為戰(zhàn)的時候堕汞,那就是典型的作坊特征了,我們看幾個故事吧(都是實事晃琳,不過當(dāng)事公司和成員名字就不具體透露啦)
勤奮的Boss碼農(nóng)
成員數(shù)量:5
開發(fā)系統(tǒng):賓館酒店系統(tǒng)
某一天傍晚讯检,BOSS主持會議,這個BOSS是技術(shù)出身卫旱,自學(xué)編程成才人灼。BOSS宣布:我們要準(zhǔn)備開發(fā)一套賓館酒店系統(tǒng),目前已經(jīng)有了兩個意向客戶顾翼。聞之投放,大家都磨拳擦掌,這是個大系統(tǒng)呀适贸,包含眾多模塊灸芳,看來要忙一陣了。思緒未完拜姿,BOSS直接亮出了一句語驚四座的話:呵呵烙样,這個系統(tǒng)我已經(jīng)寫好了,VB寫的砾隅,很容易误阻。
話音未完,昏倒一片晴埂,有人問:“需求都沒定義究反,就直接開發(fā)出來了?我們以前都沒做過這方面的系統(tǒng)啊”儒洛【停“不要緊,客戶根本不懂軟件琅锻,這些需求我想想就知道了”卦停。“那有設(shè)計文檔么恼蓬,我們看一看”惊完,“沒有,不要文檔处硬,VB寫的小槐,很簡單的”。好吧,牛逼的BOSS凿跳。
那就直接給客戶去上系統(tǒng)唄件豌,結(jié)果,人家說百分之八十的功能跟實際流程不一樣控嗜,要想用起來茧彤,得改。說到這疆栏,兄弟們啊曾掂,程序猿有句話怎么說來著”诙ィ“屎再多遭殉,自己拉的都好擦,最怕的是這種給別人擦屎的啊”博助。后果可想而知险污,一個沒有注釋,沒有文檔富岳,完全按照自己意淫出的需求編寫的系統(tǒng)蛔糯,改起來是多么的費(fèi)力。
即便如此窖式,BOSS還是每天一大早在辦公室興致滿滿的等著蚁飒,興奮的告訴其他員工,他已經(jīng)改好了某個函數(shù)(捂臉)萝喘。 BOSS在整個開發(fā)過程中淮逻,竟然都是自己親力親為,乃至于自己去碼大部分的代碼阁簸,直到發(fā)布自己的“成果”爬早,都沒有人參與進(jìn)來,如此的勤奮启妹,這是在開福利院呢筛严?
很多作坊軟件公司的老板都有技術(shù)背景,經(jīng)常會在工作中代入這種工程師的角色饶米,實際上對于項目的開發(fā)和團(tuán)隊積極性的發(fā)揮非常的不利桨啃,Boss應(yīng)該要擺正自己的位置,不要去輕易干擾開發(fā)活動檬输,CEO且是CTO的角色照瘾,那是留給少數(shù)天才的。
代碼亂Copy
設(shè)計模式丧慈?工具庫析命?控件庫?呵呵,你真是太講究了碳却,我只管我的代碼能跑起來,反正有現(xiàn)成的代碼我就直接拷貝笑旺,于是昼浦,有了下面的故事。
小王:“發(fā)票管理模塊有個問題筒主,查出錯日志是有個方法有問題关噪,方法名是GetPartRouting”,真是奇怪乌妙,為什么發(fā)票中會有調(diào)用生產(chǎn)工藝的方法啊使兔,沒道理啊”
小張:“是不是發(fā)票中需要判斷產(chǎn)品的工藝版本什么的,防止開錯發(fā)票”
小王:“沒道理啊藤韵,發(fā)票跟工藝有什么關(guān)系虐沥,打不著邊啊,看這個代碼泽艘,最后一次修改是你改的欲险,不過沒有修改備注,調(diào)試一下吧”
調(diào)試中……
小張:“知道原因了匹涮,GetPartRouting這個方法是取得物料信息的天试,直接從工藝模塊里拷貝了這個方法,跟工藝也沒關(guān)系然低,這個方法是工藝模塊中的喜每,所以命名就……”
小王:“……”
層次架構(gòu)的設(shè)計,在作坊公司雳攘,不是設(shè)計出來的带兜,是坑出來的,大家各自為戰(zhàn)吨灭,完全靠自覺去封裝一些函數(shù)庫鞋真,類庫。一般比較懶一些的沃于,直接拷貝過來就拉倒了涩咖。時間一長,就導(dǎo)致代碼中繁莹,功能近似的方法會有很多個檩互,而很多人在拷貝的時候,連名字都不改咨演,一旦發(fā)生問題闸昨,就......。再小的團(tuán)隊,最好也要有個層次分工饵较,盡量不要各自為政拍嵌,沒有分工的概念,就不是團(tuán)隊了循诉。
技術(shù)銷售
呵呵横辆,我這里當(dāng)然不是指那種既熟悉技術(shù)又擅長銷售的意思,而是指茄猫,將公司業(yè)務(wù)績效橫加在程序開發(fā)人員身上的做法狈蚤。是不是有些不可思議?是的划纽,很多作坊公司脆侮,在給技術(shù)人員開會的時候,討論的不是技術(shù)問題勇劣,而是怎么去盈利靖避,怎么去拉單,還美其名曰群策群力比默。敢問一句:如果一個技術(shù)人員在忙于寫代碼的時候還能搞市場筋蓖,搞商務(wù),把業(yè)務(wù)績效提上去退敦,那他在這里碼什么代碼粘咖?這是很多小軟件公司的一個通病,總是會認(rèn)為人不多侈百,大家要同心協(xié)力瓮下,什么問題都一起擔(dān)。No钝域,公司與員工之間永遠(yuǎn)都只應(yīng)該是合同關(guān)系讽坏,做什么就是做什么,況且例证,讓技術(shù)人員摻和市場路呜,能搞得好么?
這個其實還是一個分工的問題织咧,但是我想說的是胀葱,工程師的管理應(yīng)該要足夠簡單,不要參與銷售笙蒙,人再少抵屿,也要涇渭分明,讓不合適的人去承擔(dān)不合適的任務(wù)捅位,既會容易把事情搞砸轧葛,也容易分散技術(shù)人員是精力搂抒。
盜版組件
騰訊開發(fā)的游戲中會有盜版組件么?百度開發(fā)的搜索引擎中會有可能帶來法律風(fēng)險的組件么尿扯?凡此等等求晶,我相信,在大部分的小軟件公司里衷笋,都是普遍存在這么一個問題的芳杏,需要什么功能,百度一搜右莱,直接下載一個破解版。
有朋友會說档插,有破解版直接使用不是挺好的么慢蜓,就算是給用戶,多少人能搞得清這個是正版還是盜版郭膛。我想說的是晨抡,無論在何時都要保持產(chǎn)品的版權(quán)是健康的,要是零問題则剃,這不僅會帶來潛在的法律糾紛耘柱,也不利于產(chǎn)品的廣泛推廣。
代碼庫不統(tǒng)一
大約很多作坊公司棍现,連源碼版本管理都是不使用的调煎,備份是靠移動硬盤,不同的版本用一個符號表示己肮,見下面一個例子士袄。
小楊:這里為什么有這么多的同名文件啊,名稱基本都是一樣的谎僻,第一個叫Print娄柳,第二個叫Print2,第三個叫Print2new艘绍,第四個叫PrintNewNew赤拒,第五個叫Print3New。
小王:我也不知道诱鞠,可能有用吧挎挖,看看哪個是最新的文件,應(yīng)該都是同一個功能文件航夺,那個print3New可能是最新的吧肋乍。
小楊:我看了,也不是啊敷存,主代碼里調(diào)用的是PrintNewNew墓造,我也搞不清了
軟件開發(fā)過程中的文件版本管理堪伍,在很多小團(tuán)隊中,幾乎就是沒概念的觅闽,代碼庫的管理帝雇,代碼版本的管理,要么就是安排那么一個人手里掌握有的最新版代碼,要么就是不斷的起新名字球昨,移動硬盤拷奠货,實際上,碼代碼夠累的了吮廉,還要去面對那么多考驗語文水平的代碼文件名,這是典型的自己給自己挖坑畸肆。
不止是為了吐槽
說到這里宦芦,也聊了不少,這樣的例子是很多的轴脐,但我們并不打算只是在這里吐槽调卑,我們也知道,一個企業(yè)大咱,一個團(tuán)隊要發(fā)展起來恬涧,是很不容易的,吐槽容易做事難碴巾, 其實對于作坊軟件企業(yè)來說溯捆,選擇在一開始的時候就規(guī)范化書最好的,初期發(fā)展不容易厦瓢,再給自己挖些坑现使,等于是自己打游戲,故意選擇困難模式旷痕。游戲可以這樣去體驗碳锈,團(tuán)隊發(fā)展最好不要這樣。對于小公司來說欺抗,最合適的做法售碳,其實就是下面四個字:嚴(yán)格分工。
嚴(yán)格分工
說一千道一萬绞呈,就做好這四個字是最要緊的贸人,分工,嚴(yán)格的分工佃声,千萬不要因為人少就互相糅合在一起艺智,什么事都是大家一起上,分工才能讓一個人負(fù)責(zé)到底圾亏,專業(yè)到底十拣。