在團(tuán)隊(duì)里程序員需要“紀(jì)律性”嗎?
2014年12月17日 11:00 來(lái)源:CSDN 作者:曾成 我要評(píng)論(0)
國(guó)慶節(jié)長(zhǎng)假前后,我和很多業(yè)內(nèi)外的朋友們展開(kāi)了關(guān)于“碼農(nóng)”的大討論,作為這些討論的延伸,一篇叫做《從“碼農(nóng)”說(shuō)起》的文章從腦海中輸出,最終展現(xiàn)在CSDN官網(wǎng)上。在文章中,我主張年輕的技術(shù)人們不應(yīng)該接受社會(huì)輿論強(qiáng)加的“碼農(nóng)”屬性,自己做有創(chuàng)造力的事情,要相信付出和智慧一定有回報(bào)。此文一出,得到了很多朋友的批評(píng)指正,令我頗為欣喜,因?yàn)橛谢?dòng)才會(huì)有頭腦風(fēng)暴,進(jìn)而產(chǎn)生更多的新想法。
回顧當(dāng)時(shí)那場(chǎng)大討論,其中很多觀點(diǎn)其實(shí)值得深入探討,比如在討論中,一位名為“@不動(dòng)如山_”的朋友是這么說(shuō)的:
對(duì)于軟件是不是勞動(dòng)密集性產(chǎn)業(yè),你認(rèn)為怎樣合理是一回事,現(xiàn)實(shí)如何是另一回事。作為老程序員,老se,我參加過(guò)上千人的團(tuán)隊(duì)協(xié)作,數(shù)年的開(kāi)發(fā)周期。所有創(chuàng)造性的工作在預(yù)研階段就必須結(jié)束。一旦進(jìn)入開(kāi)發(fā),就只有紀(jì)律,沒(méi)有創(chuàng)新。當(dāng)然,個(gè)別高科技產(chǎn)品的原型軟件例外。
這席話(huà)給我很大觸動(dòng),因?yàn)樗|及了我進(jìn)入IT行業(yè)之初時(shí)青澀經(jīng)歷的回憶。
多年前我剛剛加入的團(tuán)隊(duì)正在開(kāi)發(fā)某個(gè)通信設(shè)備。有過(guò)開(kāi)發(fā)通信設(shè)備的朋友們應(yīng)該知道,其實(shí)嵌入式軟件開(kāi)發(fā)的技術(shù)核心是事件調(diào)度,因?yàn)橥ㄐ旁O(shè)備總是處在繁忙的交換和命令事件處置的狀態(tài)中,一個(gè)良好的事件調(diào)度機(jī)制是系統(tǒng)性能的靈魂,如果每次一個(gè)事件的到來(lái)都以新開(kāi)一個(gè)線(xiàn)程的方式來(lái)應(yīng)付,系統(tǒng)資源瞬間就會(huì)枯竭,設(shè)備也就崩潰了。
當(dāng)時(shí)我們采用的是一種叫做zebra的架構(gòu),這是一個(gè)面向交換的開(kāi)源項(xiàng)目,甚至有點(diǎn)像一個(gè)用戶(hù)空間運(yùn)行著的內(nèi)核程序。
當(dāng)時(shí)管理這個(gè)項(xiàng)目團(tuán)隊(duì)的項(xiàng)目經(jīng)理正好是一個(gè)完全沒(méi)有做過(guò)軟件開(kāi)發(fā)的職業(yè)文案寫(xiě)手,所以當(dāng)主力開(kāi)發(fā)人員把事件調(diào)度機(jī)制的框架整理完成之后,項(xiàng)目經(jīng)理小眼滴溜溜一轉(zhuǎn),說(shuō)道:“現(xiàn)在架構(gòu)已經(jīng)完成,下面就是大家分工,把各自的功能框架填充好了,我看了一下,一共有19個(gè)模塊,大家分一下,一個(gè)模塊每人一周時(shí)間……”
這時(shí)一個(gè)資深的程序員打斷了他,資深程序員讓大家每個(gè)人把手頭做的東西做一下單元測(cè)試,聲稱(chēng)下一周他會(huì)給我們一個(gè)好東西。
果然這位資深程序員拿出一周時(shí)間用腳本寫(xiě)成的工具,把所有原來(lái)的功能模塊直接處理填充到zebra架構(gòu)內(nèi)。
每當(dāng)我回憶這件事情的時(shí)候,想起外行項(xiàng)目經(jīng)理的尷尬表情都會(huì)忍俊不禁。彼時(shí)的那位項(xiàng)目經(jīng)理,其實(shí)也是一個(gè)年輕有為的人,但是對(duì)于軟件開(kāi)發(fā)的特點(diǎn)的確缺乏了解,想當(dāng)然地以為自己抓抓紀(jì)律性就行,大家按部就班、出工出力就好??墒且廊绻娴陌凑账挠?jì)劃,功能填充過(guò)程可能需要2-3個(gè)月,況且數(shù)百萬(wàn)行規(guī)模的代碼中隱藏的Bug又需要一個(gè)測(cè)試周期來(lái)捉蟲(chóng)。
我把這個(gè)故事講給朋友們,有的朋友就問(wèn)當(dāng)時(shí)假如沒(méi)有這個(gè)用腳本寫(xiě)成的工具又當(dāng)如何?我就會(huì)反問(wèn),那么假如我們沒(méi)有找到zebra架構(gòu)又當(dāng)如何?難不成要我們幾個(gè)菜鳥(niǎo)來(lái)寫(xiě)調(diào)度機(jī)嗎?軟件編程,是一個(gè)能走捷徑就一定要走捷徑的工作——有現(xiàn)成的可重用或者可借鑒的東西一定要重用和借鑒的,這樣工作水準(zhǔn)和工作效率才可能有保證。有現(xiàn)成的東西不用,一定是萬(wàn)不得已;推倒重來(lái),則一定是出現(xiàn)了重大問(wèn)題;動(dòng)不動(dòng)喜歡從頭再來(lái)的程序員,肯定是涉世未深、不得要領(lǐng)的門(mén)外漢。
我曾經(jīng)將軟件工作比喻成人類(lèi)這個(gè)物種的又一次進(jìn)化過(guò)程,每次開(kāi)發(fā)工作的成果都順理成章地成為以后階段項(xiàng)目的工具。既然學(xué)習(xí)制造和使用工具正是人和動(dòng)物的區(qū)別,那么在軟件工作領(lǐng)域,對(duì)走捷徑持懷疑態(tài)度,對(duì)借鑒現(xiàn)成成果持抗拒心理,反對(duì)寧可停下進(jìn)度也要先創(chuàng)造工具的開(kāi)發(fā)者或管理者,就如同軟件世界里的大猩猩。
迷信“紀(jì)律性”的管理者,通常都以“戰(zhàn)斗力”為口頭禪,可惜開(kāi)發(fā)產(chǎn)品畢竟不是戰(zhàn)爭(zhēng),軟件編程也不是你死我活的肉搏,軟件工作其實(shí)就是一次又一次把自己的好想法,好創(chuàng)意凝結(jié)在編程語(yǔ)言上的過(guò)程,好的代碼精辟如詩(shī)歌一般,其簡(jiǎn)練高效令人讀起來(lái)拍案叫絕;好的軟件架構(gòu)巧奪天工,資源節(jié)約,魯棒性強(qiáng),這些都是經(jīng)過(guò)反復(fù)思索和反復(fù)斟酌的結(jié)果,這樣的工作狀態(tài)和“紀(jì)律性”、 “團(tuán)結(jié)就是力量”的狀態(tài)其實(shí)完全是南轅北轍。
軟件的靈魂是數(shù)學(xué)和邏輯,開(kāi)發(fā)過(guò)程本身就是一種創(chuàng)造,一種與數(shù)學(xué)邏輯的對(duì)話(huà)。紀(jì)律性的靈魂是服從,是聽(tīng)話(huà),是個(gè)人意志服從集體意志,集體意志服從長(zhǎng)官意志。這兩件事情的聯(lián)姻肯定不是自由戀愛(ài),而是指腹為婚。
我覺(jué)得在團(tuán)隊(duì)合作中,編程規(guī)范是極為必要的,用約定的編程規(guī)矩來(lái)撰寫(xiě)程序是開(kāi)發(fā)者應(yīng)該共同維護(hù)的良好開(kāi)發(fā)氛圍。但這就是所謂紀(jì)律的邊界了,紀(jì)律的覆蓋范圍,不應(yīng)該逾越這個(gè)邊界。
這些年敏捷開(kāi)發(fā)、結(jié)對(duì)編程等新興軟件開(kāi)發(fā)模式的興起,從一個(gè)側(cè)面強(qiáng)化了我的這種認(rèn)識(shí),那就是:軟件工作的重要方式,就是創(chuàng)造一個(gè)可以醞釀好點(diǎn)子的環(huán)境,讓好想法源源不斷的產(chǎn)生出來(lái),形成代碼。軟件活動(dòng)應(yīng)該回歸本源,就是激發(fā)有創(chuàng)造力的人性。
按照這個(gè)思路,我常常建議一些嵌入式軟件工程師能夠在工作之余學(xué)習(xí)一下Java,學(xué)習(xí)一下腳本語(yǔ)言,Awk也行,TK也行,Perl也可以。很多人會(huì)很詫異,覺(jué)得自己面向硬件,甚至面向驅(qū)動(dòng),為什么要學(xué)習(xí)那么多表示層的東西?
我認(rèn)為嵌入式系統(tǒng)軟件開(kāi)發(fā)常常因?yàn)樵O(shè)備處理能力以及開(kāi)發(fā)環(huán)境限制只能使用面向過(guò)程的C,但是在軟件工具已經(jīng)逐漸豐富起來(lái)的現(xiàn)在,底層代碼是完全可以通過(guò)腳本語(yǔ)言幫忙處理的,大量繁重的比對(duì)工作和代碼遷移工作完全可以用腳本來(lái)執(zhí)行,高效而且準(zhǔn)確。
單純從項(xiàng)目開(kāi)發(fā)的效率來(lái)講,團(tuán)隊(duì)里面有這樣的軟件多面手,有能夠提出這樣想法的人,比一個(gè)外行領(lǐng)導(dǎo)者對(duì)于開(kāi)發(fā)者紀(jì)律性的要求要有意義,也有效的多。
這又要說(shuō)到我曾經(jīng)參與的另一個(gè)項(xiàng)目,也是某一種通信產(chǎn)品的開(kāi)發(fā)工作。這一次是給設(shè)備開(kāi)發(fā)北向接口。所謂北向接口,實(shí)際上就是開(kāi)放給管理系統(tǒng)的管理監(jiān)督接口。我們當(dāng)時(shí)采用的是MIB方案,以SNMPv2為接口規(guī)范。同樣的問(wèn)題再次光臨:一個(gè)帶有龐大從屬終端數(shù)量的局端設(shè)備,其MIB是非常復(fù)雜的,由于管理數(shù)據(jù)的節(jié)點(diǎn)已經(jīng)細(xì)致到每個(gè)終端下面的每個(gè)網(wǎng)口的出入口速率和VLAN之類(lèi)的細(xì)節(jié)內(nèi)容,所以數(shù)據(jù)管理異常繁瑣。
有了之前的經(jīng)驗(yàn),這一次我們也都把眼光投向腳本工具,果不其然,我們直接找到了一個(gè)開(kāi)源項(xiàng)目,專(zhuān)門(mén)針對(duì)MIB開(kāi)發(fā)了一套基于Perl腳本的處理工具集,把這個(gè)工具集稍加調(diào)整,就能快速生成滿(mǎn)足MIB訪(fǎng)問(wèn)要求的底層數(shù)據(jù)形態(tài),并且生成的代碼有良好的可維護(hù)性,冗余度也在可接受的范圍內(nèi)。
我印象非常深的是,在做完這個(gè)項(xiàng)目的慶功宴上,項(xiàng)目組的技術(shù)大牛,也就是之前說(shuō)到的那位資深程序員曾有這么一句感慨:“真正做可靠的嵌入式軟件開(kāi)發(fā),以后就應(yīng)該是架構(gòu)設(shè)計(jì)配合代碼生成工具,資淺程序員的工作就是一邊做點(diǎn)小修小補(bǔ),一邊學(xué)習(xí)架構(gòu),這樣利于成長(zhǎng),也對(duì)項(xiàng)目進(jìn)展最有利?!贝搜月?tīng)聞已有將近8年,言猶在耳。
前面“@不動(dòng)如山_”的那段話(huà)雖然出自一人之口,但是這樣的觀點(diǎn),在國(guó)內(nèi)卻絕不是少數(shù),沒(méi)有編程背景的管理人員更是對(duì)這樣的觀點(diǎn)敞開(kāi)懷抱,如獲至寶。很多國(guó)內(nèi)的公司在軟件部門(mén)里面都依然秉承著“人月”狀態(tài),就是把員工人數(shù)和工作時(shí)間的乘積作為公司的生產(chǎn)力,然后把具體的工作按照“人月”或者“人日”乃至“人時(shí)”進(jìn)行度量,進(jìn)而把一項(xiàng)任務(wù)切分出去??吹竭@里,讀過(guò)《人月神話(huà)》的朋友們應(yīng)該都會(huì)會(huì)心一笑。
寫(xiě)這篇文章,也主要是想對(duì)初入這個(gè)行業(yè)或者懷有志向即將進(jìn)入這個(gè)行業(yè)的年輕技術(shù)者們說(shuō)點(diǎn)我的心里話(huà):堆代碼永遠(yuǎn)不是軟件行業(yè)的核心競(jìng)爭(zhēng)力,設(shè)計(jì)能力才是,盡管很多公司還以代碼行數(shù)作為績(jī)效來(lái)考評(píng);做一個(gè)聽(tīng)話(huà)的孩子在這個(gè)行業(yè)里也很難快速提升自我,因?yàn)閯?chuàng)造力是要靠自己勉勵(lì)自己才能不斷展現(xiàn)的;安排很多人做重復(fù)體力活的規(guī)劃,其實(shí)是因?yàn)闆](méi)有人去嘗試創(chuàng)造便捷的工具,這樣的所謂的“紀(jì)律性”的團(tuán)隊(duì)里你肯定也學(xué)不到什么東西。多問(wèn)幾個(gè)為什么、一定要這樣和為什么不那樣,對(duì)一個(gè)年輕人,尤其對(duì)一個(gè)有技術(shù)追求的年輕人永遠(yuǎn)有好處。
上周熱點(diǎn)文章排行榜
- 奧哲與數(shù)環(huán)通達(dá)成合作,共筑企業(yè)數(shù)字化一站式轉(zhuǎn)型新生態(tài)
- 顛覆性創(chuàng)新技術(shù)——特斯拉土壤修復(fù)機(jī)器人!
- 三季度全球芯片代工市場(chǎng):臺(tái)積電第一,中芯國(guó)際營(yíng)收破20億美
- 科技看點(diǎn):小馬智行上市 我國(guó)5G基站總數(shù)達(dá)414.1萬(wàn)個(gè) 我國(guó)前10月
- 光刻機(jī)巨頭拋出重磅信號(hào) 阿斯麥(ASML)股價(jià)大幅上漲
- 射頻芯片企業(yè)前三季度業(yè)績(jī)PK:業(yè)績(jī)普降承壓前行,集成化、5
上周資料下載排行榜
論壇熱帖
- LF開(kāi)頭請(qǐng)問(wèn)這個(gè)是什么封裝元器件 jf_77000477
- 【飛凌嵌入式OK3588J-C開(kāi)發(fā)板體驗(yàn)】OK3588J-C開(kāi)發(fā)板開(kāi)箱評(píng)測(cè) jf_43382582
- 【書(shū)籍評(píng)測(cè)活動(dòng)NO.52】基于大模型的RAG應(yīng)用開(kāi)發(fā)與優(yōu)化 ElecFans小喇叭
- 求一份CS32L010的相關(guān)資料(數(shù)據(jù)手冊(cè)、用戶(hù)手冊(cè)、Pack包和例程等),謝謝 jf_43621189
- 請(qǐng)問(wèn)如何關(guān)閉獨(dú)立看門(mén)狗 jf_39582415
- 【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+閱讀濾波器章節(jié)部分筆記 james_87
熱門(mén)博文
論壇熱帖
- 熱點(diǎn)討論
【直播中獎(jiǎng)信息】華為開(kāi)發(fā)者大會(huì)2020發(fā)燒友直播間抽獎(jiǎng)信息公
- 熱點(diǎn)討論
“年貨”采購(gòu)進(jìn)行時(shí),華強(qiáng)芯城15家代購(gòu)渠道全系列特惠,最高滿(mǎn)
- 熱點(diǎn)討論
雙12捷報(bào)出爐,華強(qiáng)芯城+PCB雙雙斬獲120萬(wàn)戰(zhàn)績(jī)(附新用
- 專(zhuān)家問(wèn)答多年經(jīng)驗(yàn)幫你解答多層PCB設(shè)計(jì)
- 專(zhuān)家問(wèn)答FPGA大神幫你解決開(kāi)發(fā)過(guò)程的問(wèn)題
工程師技術(shù)應(yīng)用
工程師資料下載
熱評(píng)
- IR將功率半導(dǎo)體觸角伸往消費(fèi)市場(chǎng)
- 多功能算術(shù)/邏輯運(yùn)算單元(ALU) ,什么是多功能
- 動(dòng)態(tài)ip、靜態(tài)ip、pppoe撥號(hào)的區(qū)別
- ARM與MIPS的比較
- ThunderBolt端口驅(qū)動(dòng)及NET改WAP方法
- ds18b20中文資料詳解
- 滴滴人臉識(shí)別怎么破解
- 超級(jí)計(jì)算機(jī)榜單重新排名 中國(guó)天河二號(hào)已淪為世界第
- 電阻色環(huán)表_色環(huán)電阻識(shí)別方法
- iphone6概念機(jī)圖片曝光_iphone6上市時(shí)
博文
帖子
- 【書(shū)籍評(píng)測(cè)活動(dòng)NO.51】具身智能機(jī)器人系統(tǒng) | 了解AI的下一個(gè)浪潮! ElecFans小喇叭
- 請(qǐng)教關(guān)于CS1239低側(cè)采樣如何獲得使用更高的Gain? jf_94221193
- 高頻條件下的耦合線(xiàn)圈出現(xiàn)負(fù)值的原因是什么 jf_42363055
- 請(qǐng)問(wèn)如何關(guān)閉獨(dú)立看門(mén)狗 jf_39582415
- ads1291雙電源供電時(shí),Thermal Pad接AVSS嗎? ggfx
- 【米爾-Xilinx XC7A100T FPGA開(kāi)發(fā)板試用】+03.SFP光口測(cè)試(zmj) 卿小小_9e6
- DAC7621的reference性能精度,可以使用外部輸入ref嗎? 萬(wàn)物死
- 【「HarmonyOS NEXT啟程:零基礎(chǔ)構(gòu)建純血鴻蒙應(yīng)用」閱讀體驗(yàn)】+1-7章有感 夜孤影
- DIY了一臺(tái)無(wú)人機(jī),用全志T113芯片 文小二
- 電子產(chǎn)品結(jié)構(gòu)與導(dǎo)熱材料解決方案 jf_86221244
用戶(hù)評(píng)論
查看全部 條評(píng)論
查看全部 條評(píng)論>>