寫(xiě)了100萬(wàn)行代碼的程序員是什么樣的程序員
今天在社群上閑逛,突然發(fā)現(xiàn)一個(gè)十分有趣的帖子,《寫(xiě)了100W行的代碼是啥感覺(jué)?》
看完之后就頭皮一陣發(fā)麻,讓我寫(xiě)一萬(wàn)行的代碼?!are you kidding me?(黑人問(wèn)號(hào)臉)我估計(jì)寫(xiě)到20萬(wàn)的時(shí)候就會(huì)突然有個(gè)疑問(wèn)—-“咦?我的頭發(fā)呢?”
A同學(xué):我寫(xiě)兩千行代碼功能都得琢磨個(gè)兩三天,一百萬(wàn)行真的是好多啊,最多了五年寫(xiě)了也就 20-30萬(wàn)行代碼左右,還是有任務(wù)在身的情況被逼著寫(xiě)的,讓我寫(xiě)一百萬(wàn)行代碼,恐怕這輩子得死在電腦前了…
B同學(xué):我是覺(jué)得如果說(shuō)你一個(gè)工作寫(xiě)了一百萬(wàn)行代碼,那你在公司的地位應(yīng)該算資深員工了。如果你一個(gè)項(xiàng)目寫(xiě)了一百萬(wàn)行,那你肯定是參與了一個(gè)比較大的項(xiàng)目了。
如果你一個(gè)類寫(xiě)了一百萬(wàn)行,請(qǐng)問(wèn)你用的是什么編輯器?如果你一個(gè)方法寫(xiě)了一百萬(wàn)行代碼的話,請(qǐng)問(wèn)你有沒(méi)有被同事打死?
C同學(xué):據(jù)說(shuō)要從初學(xué)者成長(zhǎng)為程序員,那個(gè)得需要10萬(wàn)行代碼的積累才可以呢。不過(guò)話說(shuō)回來(lái)這樣說(shuō)也很對(duì),畢竟入門階段嘛,確實(shí)需要多打代碼才能積累經(jīng)驗(yàn)。
不過(guò)修煉一段時(shí)間之后再注重代碼的量那就不對(duì)了這時(shí)候肯定是注重?cái)?shù)學(xué)還有算法思維,按這樣算的話,假如20萬(wàn)是修煉門檻真積累到了一百萬(wàn)行代碼肯定代碼質(zhì)量越來(lái)越高了,估計(jì)是某個(gè)領(lǐng)域的小專家也說(shuō)不定。
至于真敲了一百萬(wàn)行低質(zhì)量代碼,聽(tīng)哥一句話,還是轉(zhuǎn)行吧。程序員不適合你這種鍥而不舍的精神。
D同學(xué):切,一群渣渣。給你們看看一張網(wǎng)圖就知道我連續(xù)熬夜寫(xiě)幾千行代碼是什么狀態(tài)了。我感覺(jué)我快要窒息了,如果時(shí)間可以倒流,我希望我不做程序員!!!
E同學(xué):這簡(jiǎn)直就是一個(gè)送***啊,哪有什么人能打一百萬(wàn)的代碼,從業(yè)五六年的程序員,如果按正常工作量的話一天也就一百多行,這五六年估計(jì)也就五六萬(wàn)行吧。
如果是外包公司代碼量估計(jì)翻倍了,那就按五十萬(wàn)行來(lái)算。但是誰(shuí)會(huì)那么拼命去奮斗在一線一天一千行的去工作啊。寫(xiě)五六十萬(wàn)行肯定都轉(zhuǎn)行創(chuàng)業(yè)了,還繼續(xù)下去不猝死估計(jì)也脫一層皮了。
其實(shí),代碼真的是重質(zhì)不重量,質(zhì)量高的代碼,是當(dāng)前代碼界提倡的,當(dāng)然寫(xiě)出高質(zhì)量的代碼肯定需要一個(gè)相當(dāng)高的專業(yè)素養(yǎng),這需要在日常的代碼書(shū)寫(xiě)中逐漸去吸收掌握。誰(shuí)不是每天都在學(xué)習(xí)呀,目的還不是為了一個(gè),為實(shí)現(xiàn)某個(gè)功能寫(xiě)出高質(zhì)量的代碼。
那么,寫(xiě)出100萬(wàn)行代碼到底需要多少時(shí)間,我們來(lái)算一下:
假設(shè)***的情況,一天100行高質(zhì)量代碼,一年36500,100/3.65=27年多。即便從20歲開(kāi)始編碼,要到50歲左右方可完成。
但實(shí)際上關(guān)于平均代碼量的問(wèn)題,即便把所有工作日都算上,大概也就是20-30行的樣子;如果僅討論集中的開(kāi)發(fā)期,高峰也不會(huì)超過(guò)200行。
所以說(shuō),一百萬(wàn)代碼就像找女朋友一樣不靠譜。
總結(jié)一下:
關(guān)于代碼的量,從初學(xué)者成長(zhǎng)為程序員,需要代碼的積累,而以后數(shù)學(xué)功底和編程思維的深化更加重要。
一味的追求量并沒(méi)有任何實(shí)際意義,通常,越核心的部分代碼量越小,越容易寫(xiě)大量代碼的,大概是沒(méi)什么技術(shù)含量的 UI、業(yè)務(wù)邏輯。而一些部分,用腳本或DSL實(shí)現(xiàn)可以更精簡(jiǎn)。寫(xiě)代碼和考試一樣,做題最多的不一定是成績(jī)***的。
此外,要想做高質(zhì)量的代碼,建議先打好技術(shù)基礎(chǔ),比如掌握好開(kāi)發(fā)語(yǔ)言,熟悉開(kāi)發(fā)平臺(tái)、掌握基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)與算法、了解基礎(chǔ)的設(shè)計(jì)原則等。建議采用代碼標(biāo)準(zhǔn),比如Google等大廠已經(jīng)制定好了各種標(biāo)準(zhǔn)。想好了再寫(xiě),不建議邊做邊想。
我們常常很難一次把代碼寫(xiě)得讓自己滿意、無(wú)可挑剔,所以重構(gòu)對(duì)于代碼質(zhì)量的重要性不言而喻,推薦閱讀《重構(gòu)》這本業(yè)內(nèi)經(jīng)典書(shū)籍。
很多問(wèn)題歸根結(jié)底都是技術(shù)債務(wù),就代碼質(zhì)量而言,如果你還對(duì)高質(zhì)量代碼有追求,建議你在負(fù)責(zé)一個(gè)小模塊時(shí),除了把它做好之外,也要順便將與之糾纏在一起的技術(shù)債務(wù)還掉,在一個(gè)團(tuán)隊(duì)里任何一個(gè)人都不可能獨(dú)善其身
寫(xiě)出高質(zhì)量的代碼,代碼審查也必不可少。事實(shí)上,很多代碼上的問(wèn)題,都可以通過(guò)一些工具來(lái)找到,比如Android開(kāi)發(fā)中有Lint, Find bugs, PMD等優(yōu)秀靜態(tài)檢查工具可用,通過(guò)改進(jìn)這些工具找出的問(wèn)題,就能對(duì)語(yǔ)法的細(xì)節(jié),規(guī)范,編程的技巧有更多直觀了解。
建議***與持續(xù)集成(CI),代碼審查環(huán)境配套使用,每次提交的代碼都能自動(dòng)驗(yàn)證是否通過(guò)了工具的代碼檢查,通過(guò)才允許提交。
當(dāng)你需要修改大量代碼時(shí),單元測(cè)試的優(yōu)點(diǎn)就顯現(xiàn)出來(lái),你只盡管放心修改,只需要保證單元測(cè)試用例通過(guò)即可,無(wú)需瞻前顧后。在寫(xiě)完代碼后,進(jìn)行充分自測(cè),需要至少跑一遍基本的場(chǎng)景,一些簡(jiǎn)單的異常流,不要總想著讓測(cè)試幫你找問(wèn)題。
***就是善用開(kāi)源。雖然并非開(kāi)源的東西,質(zhì)量就高,但至少關(guān)注度較高,使用人數(shù)較多,口碑較好的開(kāi)源項(xiàng)目,質(zhì)量有一定保證,即便存在一些問(wèn)題,也可以通過(guò)提交反饋,不斷改進(jìn)。
最重要的是,你自己花時(shí)間造的輪子,需要很多精力維護(hù),而充分利用開(kāi)源項(xiàng)目,能幫助你節(jié)省很多時(shí)間,把精力專注在最需要你關(guān)心的問(wèn)題上。