從業(yè)20年大佬的經(jīng)驗(yàn)談:程序員應(yīng)多做這4件事
本文轉(zhuǎn)載自公眾號(hào)“讀芯術(shù)”(ID:AI_Discovery)
我從事自由網(wǎng)絡(luò)的開發(fā)工作已經(jīng)有將近20年的時(shí)間,回首過往的工作經(jīng)歷,我比較大的感受就是:這四個(gè)習(xí)慣,要是能早點(diǎn)兒養(yǎng)成就好了。
深層自動(dòng)化
你一直擅長(zhǎng)運(yùn)營單人商店,并且能將很多細(xì)節(jié)和流程牢記在心。該客戶的部署有15個(gè)步驟,每月執(zhí)行一次,每次運(yùn)行最多花費(fèi)5分鐘。
你要與同事討論該問題,明確需構(gòu)建的所有功能和需修復(fù)的所有故障,有一個(gè)問題將反復(fù)出現(xiàn):自動(dòng)化僅花費(fèi)你幾分鐘的時(shí)間且每隔一定時(shí)間段執(zhí)行一次,這種操作真的值得嗎?
只需要5分鐘的時(shí)間即可手動(dòng)執(zhí)行該過程,頻率為每月/次。而將該手工過程自動(dòng)化需要花費(fèi)3個(gè)小時(shí)。自動(dòng)化操作也許會(huì)將運(yùn)行進(jìn)程所需時(shí)間間從5分鐘減少到3分鐘。
這里的關(guān)鍵在于:由于流程實(shí)現(xiàn)了自動(dòng)化,運(yùn)行此流程的人員可能不再是你本人。
月收益不僅僅是2分鐘。你的5分鐘可以精簡(jiǎn)為0分鐘,因?yàn)榱鞒套詣?dòng)化了這三分鐘的事可能會(huì)交給別人來做。事實(shí)上,其他的任何人都可以執(zhí)行此任務(wù)。關(guān)鍵時(shí)刻,團(tuán)隊(duì)中有3分鐘空閑時(shí)間的任何成員都可以去運(yùn)行該自動(dòng)化流程。
不必親力親為。如果實(shí)現(xiàn)了深層次自動(dòng)化,其他成員可以分擔(dān)此項(xiàng)任務(wù)以便讓專注。
廣泛測(cè)試
由于擅長(zhǎng)記憶所有細(xì)節(jié),你知道構(gòu)建新功能時(shí)需調(diào)整的每個(gè)小開關(guān)和切換按鈕,確保沒有通過添加新代碼損害其他功能。
然而,你始終確信沒有遺忘什么嗎?要是其他人添加了代碼呢?他們是否需要了解各個(gè)開關(guān)和切換鍵?每當(dāng)別人整合新代碼時(shí),你可能還是會(huì)忐忑不安。
測(cè)試是增強(qiáng)自信的過程——即確信自己添加的新代碼不會(huì)破壞任何舊代碼;讓開發(fā)者有信心部署好代碼而無需午夜醒來并焦慮思考:“天哪,如果用戶在刪除付款方式后(而非事前)單擊該按鈕,他們將獲得500元。我需要馬上還原程序。”
編寫測(cè)試代碼確實(shí)有點(diǎn)耗時(shí),其效果可能不如執(zhí)行代碼。但是,編寫測(cè)試代碼能讓頭腦保持清醒。測(cè)試代碼的編寫過程可以讓開發(fā)者重點(diǎn)關(guān)注代碼的性能要求。然后,再去執(zhí)行具體任務(wù)。
測(cè)試為開發(fā)者提供空間——讓開發(fā)者大腦有足夠的空間專注于代碼重構(gòu)及改進(jìn),因?yàn)殚_發(fā)者不再需要忐忑追蹤所有開關(guān)和切換鍵以維護(hù)重構(gòu)過程。測(cè)試會(huì)幫助開發(fā)者完成追蹤任務(wù),你有了足夠的空間去重構(gòu)代碼。
除此之外,深層自動(dòng)化與廣泛測(cè)試的組合是重要加分項(xiàng):深層自動(dòng)化+廣泛測(cè)試 =深層自動(dòng)化測(cè)試。使用自動(dòng)化測(cè)試,任何人都可以貢獻(xiàn)自己的代碼并運(yùn)行測(cè)試。你可以充滿自信地進(jìn)行構(gòu)建、調(diào)整并進(jìn)行演示和交付。
傳授知識(shí)
程序員會(huì)遇到很多具體的編碼問題,并在網(wǎng)絡(luò)上尋找處理方案。這樣不一定能找到解決之道。你可以在一些第三方文檔中閑逛,調(diào)試不同的設(shè)置,創(chuàng)造性地思考問題,然后問題就得到解決了。
解決了自己的問題可不算結(jié)束。想想那些即將面對(duì)你剛剛經(jīng)歷過的問題的程序員們,花時(shí)間和精力解決了這個(gè)小問題后,請(qǐng)不要浪費(fèi)專業(yè)知識(shí)。
筆者建議向他人傳授所學(xué)知識(shí)。KentC.Dodds稱之為“增加價(jià)值影響”,SWYX稱之為“公共學(xué)習(xí)”。無論是撰寫教程文章、博客文章,還是堆棧溢出問題的答案,程序員都需要明白這點(diǎn):讓他人受益,不要掠奪知識(shí)。
你自己也會(huì)從中受益。準(zhǔn)備傳授知識(shí)時(shí),無論是實(shí)際的演示文稿,文章還是主題帖子,你都會(huì)比初次學(xué)習(xí)時(shí)更好地掌握解決方案。你將更加深入地理解問題所在,優(yōu)化初始解決方案并了解如何與初學(xué)者交流深層次、低層次概念。
你將發(fā)現(xiàn)并為各種難題設(shè)計(jì)出色的解決方案。這就是為客戶服務(wù)的工作內(nèi)容,這也是在特定代碼段中的任務(wù)?;ㄐr(shí)間“增加你的價(jià)值影響力”——用授人以漁的方式分享自己的發(fā)現(xiàn)。你能幫助別人成為專家。同時(shí)你自己也將成為專家中的一員。
讓他人參與
回想大學(xué)校園做團(tuán)隊(duì)項(xiàng)目時(shí),我們都知道自己寫的代碼水平很低,甚至不清楚自己在做什么,調(diào)試實(shí)際上只是在攪動(dòng)代碼行以保護(hù)某些內(nèi)容不受損。
作為一名獨(dú)立的自由職業(yè)者,你可以看到代碼的完整內(nèi)容。而且很大程度上,所有的代碼也許只被你一人瀏覽過。這或許會(huì)讓你感到害怕和不安。
這種恐懼和危機(jī)感阻礙了你向他人求助并組建團(tuán)隊(duì)的腳步。原因在于你永遠(yuǎn)不會(huì)覺得自己的代碼已經(jīng)接近完美,能讓其他程序員印象深刻。
恐懼和不安會(huì)限制程序員的發(fā)展。嚴(yán)重情況下,你與他人合作學(xué)習(xí)的機(jī)會(huì)、你脫離獨(dú)立項(xiàng)目并為團(tuán)隊(duì)案例盡心盡力的機(jī)會(huì)、你成長(zhǎng)的機(jī)會(huì)等,都會(huì)受到影響。
筆者建議程序員養(yǎng)成讓他人積極參與的習(xí)慣。請(qǐng)其他程序員查看一下你的代碼,接受并希望那些審閱者會(huì)注意到你代碼糟糕透頂?shù)氖聦?shí)。悅納自己的不足,然后從中成長(zhǎng)。順便說一句,他人的代碼可能也有糟糕的部分。
另外,當(dāng)程序員開始踐行此操作時(shí),會(huì)自言自語:“特里,我想給你演示我已構(gòu)建的這個(gè)模塊,但是再給我最多3天的時(shí)間,我需要清理一下數(shù)據(jù)。”
無需這樣。所有代碼都存在改進(jìn)空間,永遠(yuǎn)不會(huì)完美地完成檢查任務(wù)。程序員總是想要擁有更多的時(shí)間來準(zhǔn)備。只需擁有代碼現(xiàn)在的樣子即可,然后,請(qǐng)他人來參與審查吧。
更早更頻繁地接納他人的意見,你的代碼才能逐漸得到完善。在編碼時(shí),程序員會(huì)對(duì)自身代碼有一定預(yù)期,明白是哪些編碼習(xí)慣或不足讓審閱者感到尷尬或給予差評(píng)。
代碼永遠(yuǎn)不會(huì)完美,不要等到代碼完美無缺的那一天,才尋求他人的觀點(diǎn)來閱覽代碼并給出反饋,那一天永遠(yuǎn)不會(huì)到來。
編程的道路算得上是蜿蜒曲折,但如果能做到以上四點(diǎn),我不敢說你會(huì)走得更快,但一定會(huì)更清醒明確。