?公司最近新入職了一個(gè)三四年工作經(jīng)驗(yàn)的程序員,自己寫(xiě)了一套編程框架,總共三萬(wàn)多行,說(shuō)是要接下來(lái)的項(xiàng)目想要用自己編寫(xiě)的編程框架來(lái)寫(xiě),于是我勸他,不管這個(gè)框架他認(rèn)為多好,暫時(shí)還是放一放,但是,這個(gè)程序員很不理解,一直問(wèn)我為什么,我即使解釋了,他似乎也聽(tīng)不進(jìn)去,最后把我搞急了,對(duì)他說(shuō):“不行,我走?”
這個(gè)程序員下稱(chēng)小李,因?yàn)檎行±顣r(shí)我不在公司,所以是老板親自面試的,入職以后,老板就想讓我?guī)?,讓我看看他的能力到底怎么樣,而我手上正好有個(gè)項(xiàng)目快驗(yàn)收了,但是驗(yàn)收前還有一個(gè)需要解決的小問(wèn)題,問(wèn)題也不復(fù)雜,我認(rèn)為即使是剛畢業(yè)的程序員,只要不是太差,大概要全職花一個(gè)星期也能解決這個(gè)問(wèn)題,但是我現(xiàn)在手上有其他項(xiàng)目也很緊,所以這個(gè)事情就一直拖著,正好小李來(lái)了,我就準(zhǔn)備讓他去解決!
這個(gè)快驗(yàn)收的項(xiàng)目,出現(xiàn)的問(wèn)題是可以獨(dú)立出來(lái)的,而我寫(xiě)的這個(gè)項(xiàng)目總共有將近15000行代碼,項(xiàng)目框架是我根據(jù)公司的項(xiàng)目情況寫(xiě)出來(lái)的,其中,有將近3000行是框架代碼,比較簡(jiǎn)單,剩下的都是業(yè)務(wù)代碼,本身代碼量不多,但是理解這套框架和業(yè)務(wù)代碼也需要時(shí)間。為了不影響小李的試用期考核,于是我決定,將項(xiàng)目遇到的問(wèn)題獨(dú)立出來(lái),讓他先解決,然后我再告訴他怎么在正式項(xiàng)目代碼里面添加他寫(xiě)的代碼。
吩咐完這一切,我就去忙別的事情去了,轉(zhuǎn)頭回來(lái)時(shí),發(fā)現(xiàn)小李正沉浸在自己的代碼世界之中,我習(xí)慣性地站在他旁邊看了一會(huì)兒,緊接著我就皺起了眉頭!
我看小李在IDE里面打開(kāi)的項(xiàng)目似乎不像剛剛新建的,這里需要解釋下,我們公司所使用的技術(shù)棧是C#,通常我們?cè)谛陆ㄒ粋€(gè)項(xiàng)目時(shí)會(huì)先建一個(gè)叫作“解決方案”的東西,它就是一個(gè)項(xiàng)目的最底層的文件夾,解決方案下就是實(shí)際的項(xiàng)目代碼,像一些通用代碼,或者是分過(guò)層的代碼,基本上都會(huì)在解決方案下面通過(guò)新建項(xiàng)目獨(dú)立出來(lái),主項(xiàng)目引用即可,當(dāng)然,也可以引用外部解決方案的項(xiàng)目,這種引用,其實(shí)就是項(xiàng)目依賴。
我之所以說(shuō)小李的項(xiàng)目不像是新建的,是因?yàn)樗粋€(gè)解決方案下總共引用了將近二十個(gè)其他項(xiàng)目,我以為他不在干我安排給他的活,于是就問(wèn)他他現(xiàn)在在做什么。
結(jié)果小李回答我,正在做我安排給他的工作。
我不解得問(wèn):“但是,我看你現(xiàn)在這個(gè)項(xiàng)目不像是新建的!”
小李似乎有點(diǎn)驕傲得跟我說(shuō):“對(duì),這是我自己搭的框架!”
我想都沒(méi)想,直接告訴他不要用,然后他問(wèn)我為什么!
因?yàn)槲仪懊嬲f(shuō)了,他寫(xiě)的代碼最后我是要集成到我現(xiàn)在的項(xiàng)目里面去的,并不是想要給他練手的意思,他如果用其他框架且,最后又怎么集成呢?
結(jié)果他回答我:“沒(méi)事,我這邊的項(xiàng)目引用很靈活的,到時(shí)候直接引用一下包就可以用!”
聽(tīng)他說(shuō)完,我愣了一下,然后反問(wèn):“引用你這將近20個(gè)項(xiàng)目的包???”
他點(diǎn)點(diǎn)頭!
最后一番溝通下來(lái),他還犟得很,非要用自己寫(xiě)的框架,從頭到尾就沒(méi)松過(guò)口。
最后把我搞急了,我脫口而出:“要不你來(lái)坐我的位置,我走?”
我不用他框架的原因很簡(jiǎn)單。
第一,經(jīng)過(guò)溝通,我發(fā)現(xiàn)他自己寫(xiě)的這套框架總共有三萬(wàn)多行代碼,就像我剛開(kāi)始說(shuō)的,我自己為公司寫(xiě)的項(xiàng)目框架總共也就3000多行,在這種情況下,我都不敢輕易讓一個(gè)剛剛?cè)肼毜某绦騿T去用,更何況是一個(gè)已經(jīng)寫(xiě)了三萬(wàn)多行的代碼框架,按道理,你一個(gè)剛?cè)肼毜某绦騿T應(yīng)該琢磨的應(yīng)該是現(xiàn)有項(xiàng)目的情況,而不是盯著你過(guò)去寫(xiě)的代碼不放!
第二,即使他最后能把項(xiàng)目問(wèn)題解決掉,我們還要考慮維護(hù)成本。
首先,我們不能為了用框架而去用框架,目前GitHub上成熟的、能夠?yàn)槲覀児舅玫目蚣苡泻芏?,我們?yōu)槭裁床蝗ビ??肯定有原因嘛?/p>
此時(shí),不管小李寫(xiě)的框架有多么好,我也得暫時(shí)放一放!
首先就是理解小李這套框架的時(shí)間,如果不經(jīng)過(guò)專(zhuān)門(mén)的培訓(xùn),你讓一個(gè)程序員去研究一個(gè)三萬(wàn)多行代碼的框架,即使是全職去研究,我估計(jì)沒(méi)有十天半個(gè)月也下不來(lái)吧!
然后就是即使我愿意讓小李用他的框架去解決現(xiàn)在的問(wèn)題,但是一想為了解決一個(gè)小問(wèn)題,后面要引用將近20個(gè)包,我想想都冗余!我自己現(xiàn)在項(xiàng)目用的代碼,框架本身也不超過(guò)5個(gè)引用!
其次,現(xiàn)在這個(gè)項(xiàng)目是我和他在維護(hù),后面萬(wàn)一我和他都有事,這個(gè)項(xiàng)目出現(xiàn)了問(wèn)題,接手這個(gè)項(xiàng)目的其他同事不光要研究我這15000行代碼,還得研究他那三萬(wàn)多行代碼!想想都能把人逼瘋!
除非他是研發(fā)總監(jiān)級(jí)別的人物,可以讓大家強(qiáng)制學(xué)習(xí)他寫(xiě)的框架,否則誰(shuí)面對(duì)這三萬(wàn)多行代碼不頭疼??!以后這代碼大概率也就只能他自己來(lái)維護(hù)了!
第三,有個(gè)實(shí)際的問(wèn)題!那就是他才剛?cè)肼殻?/p>
即使他寫(xiě)的框架代碼寫(xiě)得比我寫(xiě)的代碼還要優(yōu)雅、效率比我寫(xiě)的還要高,萬(wàn)一他沒(méi)過(guò)試用期呢?
說(shuō)到最后,我感覺(jué)小李都對(duì)我有意見(jiàn)了,看我的眼神感覺(jué)我像是在欺負(fù)他,搞得我都有點(diǎn)不好意思了!但是我一想,心軟不行,于是讓他暫時(shí)拋棄這套框架,重新新建一個(gè)項(xiàng)目寫(xiě)!
結(jié)語(yǔ)
我覺(jué)得,不管他寫(xiě)的框架有多么優(yōu)秀,現(xiàn)在這種情況都不是用的時(shí)候,等大家都有時(shí)間了,他再去內(nèi)部推廣他寫(xiě)的框架也不是不行!好的東西,我們是樂(lè)于接受的,不管他工作經(jīng)驗(yàn)有幾年,只要是好的東西,我都樂(lè)于學(xué)習(xí)!
但是,話說(shuō)回來(lái),如果拋開(kāi)框架,代碼就寫(xiě)不了了,這才是真的有問(wèn)題!
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.