博客园整改之思考
在博客園寫博客寫了三年半的時間了,當(dāng)初為什么會選擇在博客園寫,我也記不清是什么原因了,或許這大概是緣分吧。
今年3月份后半段的時候,博客園突然訪問不了了,如今通過搜索資料,仍然發(fā)現(xiàn)有部分文章訪問不了,如下圖所示:
博客園給園友致歉,內(nèi)容如下圖所示:
從這張圖中引發(fā)我的一些思考,最核心的一句就是:
7天還17年欠下的債(網(wǎng)站運(yùn)營工作),四兩撥萬斤,我們的任何努力都是杯水車薪。
一、技術(shù)債務(wù)的思考
技術(shù)債務(wù)又稱代碼債務(wù)。定義如下:
交付第一次代碼就像陷入債務(wù)。 債務(wù)是可以加快開發(fā)速度,只有通過重寫代碼,及時償還債務(wù)。如果不償還債務(wù),就會發(fā)生危險。 把時間花在寫一些不正確的代碼上的每一分鐘都算作該債務(wù)的利息。 整個軟件項(xiàng)目可能在未合并代碼的部署,面向?qū)ο笤O(shè)計(jì)或其他方面的債務(wù)問題而陷入停頓-著名的計(jì)算機(jī)程序員沃德·坎寧安
在創(chuàng)業(yè)公司的時候,從智能酒店+智能門鎖、快速開發(fā)平臺、編程教育平臺到電商平臺二次開發(fā)等,寫了大量的代碼(至少十萬行代碼量,不含空格),代碼雖然寫的多,但技術(shù)債務(wù)也不少,這導(dǎo)致的一個結(jié)果就是bug越寫越多,最后不得不以周末的時間來改bug。
1.為什么bug越寫越多?以我的經(jīng)驗(yàn)總結(jié)如下:
寫之前想的太少,沒有想清楚就直接開敲,一切憑感覺(憑感覺寫代碼,在沒養(yǎng)成良好的編碼習(xí)慣和研發(fā)制度的約束下,憑感覺寫代碼很不可靠);
工期緊,任務(wù)多,注重功能實(shí)現(xiàn),忽略實(shí)現(xiàn)細(xì)節(jié)(對輸入進(jìn)行參數(shù)校驗(yàn)、復(fù)雜的業(yè)務(wù)邏輯處理考慮過于簡單、不合理的數(shù)據(jù)庫/IO操作、無異常機(jī)制或大量不必要的try/catch等)。
2.那么如何減少bug率?
團(tuán)隊(duì)編碼規(guī)范一定要落實(shí)(可以參考阿里巴巴的Java開發(fā)規(guī)范);
每寫完一個功能,一定要自測(如果你平時bug率很高一定要這樣做,當(dāng)你的bug率大幅度降低時不一定都要自測(可能代表你逐漸養(yǎng)成好的編碼習(xí)慣),不過我的習(xí)慣是不管代碼bug率多么低,一定要自測);
代碼Code Review(不管是Review自己的或者還是其他人的,多少都會有些收獲的);
一定要有責(zé)任心(記得當(dāng)初在創(chuàng)業(yè)公司的時候,整個后臺的前后端都是由我和另外一個同事負(fù)責(zé),我們倆寫了一堆bug,整個后臺管理系統(tǒng)可用性非常差,根本原因就是我們責(zé)任心缺失,寫的很隨意)。
3.技術(shù)債務(wù)如何從源頭控制?
此次博客園被審查,很大原因是因?yàn)閷τ趦?nèi)容審核不嚴(yán),內(nèi)容審核太松的話,某些非法分子就會借此進(jìn)行非法宣傳和傳播,最后遭殃的一定是平臺,微信公眾號在這塊就做的很不錯(可以借鑒)。之前在縱橫網(wǎng)寫小說的時候,發(fā)現(xiàn)縱橫網(wǎng)的內(nèi)容編輯器對內(nèi)容審核還是比較嚴(yán)的,特別當(dāng)內(nèi)容出現(xiàn)違禁詞的時候,強(qiáng)制性不準(zhǔn)發(fā)布。
回歸正題,技術(shù)債務(wù)如何從源頭控制住?或者是已經(jīng)發(fā)生要如何控制?
制度(光靠人的主觀能動性是不行的,還要從制度上約束,合理的制度能充分調(diào)動人的主觀能動性和積極性);
定期團(tuán)隊(duì)內(nèi)部培訓(xùn)(代碼規(guī)范、業(yè)務(wù)講解、問題復(fù)盤、技術(shù)分享);
工程師要有主人翁的意識(開發(fā)前熟悉業(yè)務(wù)和理解需求、開發(fā)時畫流程圖(針對業(yè)務(wù)邏輯復(fù)雜的)和寫代碼遵守公司代碼規(guī)范、開發(fā)后自測);
定期處理技術(shù)債務(wù)(功能實(shí)現(xiàn)了,但可讀性和可擴(kuò)展性非常不好需要重構(gòu),定期抽時間處理不一定要一口吃一個大胖子);
推行代碼Review(利于發(fā)現(xiàn)系統(tǒng)的技術(shù)債務(wù),同時也是為了提高團(tuán)隊(duì)的編碼質(zhì)量,好的推廣落實(shí),不好的引以為鑒)。
二、面向搜索編程受阻
平時開發(fā)基于以往的經(jīng)歷(踩過的坑),基本上能解決開發(fā)過程中的不少問題,但面對有些問題還需要搜索,沒有搜索很難進(jìn)行的下去。
這次說的面向搜索編程搜索受阻,不是指不會用搜索引擎,而是指我想要搜的關(guān)鍵信息,其中有一篇文章在博客園平臺,但因?yàn)椴┛蛨@平臺整改,看不到我想要的信息。于是我便只能轉(zhuǎn)向CSDN、思否、簡書、StackoverFlow或其他個人博客,從中得到我想要的信息。
不禁想起導(dǎo)師曾寫過的一篇wiki關(guān)于技術(shù)管理的,其中提到一點(diǎn)
“一定要自己把問題搞清楚,不要寄希望于別人來幫你搞清楚事情,可以借助別人的幫助,但不能過度依賴”
對于面向搜索編程時,有些時候我會犯這樣的錯誤,只是看到報錯部分的信息,沒有注意到是那一行出現(xiàn)這樣的錯誤,就直接搜索了(有些時候這樣的搜索很低效,因?yàn)槟銢]有弄清楚真正的錯誤是什么),這種情況就是過于依賴搜索引擎,不過好在這種現(xiàn)象自去年下半年和至今基本犯的比較少,這或許是一個好的兆頭。
1.面向搜索編程讓我看到自身的一些不足?
基本功有待加強(qiáng)(體現(xiàn)在Java中對String、List、Set、Map、I/O和多線程的合理應(yīng)用,應(yīng)用不等于合理應(yīng)用,當(dāng)然了不僅僅是Java);
沒有總結(jié)出自己的代碼庫(最直接的體現(xiàn)沒有將以往的工具類總結(jié)出來,直接網(wǎng)上復(fù)制(不少代碼是有問題的)或者將之前公司的代碼遷移過來,總結(jié)自己的代碼庫不僅僅是為了方便以后復(fù)用,也是為了更好的深入理解)。
2.如何避免面向搜索編程形成的機(jī)械思維?
面向搜索編程有利也有弊端,
利是能在一定程度上提高學(xué)習(xí)或工作效率;
弊是如果過于依賴大腦會變得不思考,長此以往,不利于長遠(yuǎn)發(fā)展。
這里提到的如何避免面向搜索編程形成的機(jī)械思維或者是依賴性思維不等同于不使用搜索引擎。
剛好之前有一個活生生案例,是我寫的一個復(fù)盤,文章如下:
ssh問題之復(fù)盤
這篇文章提到的問題,問題的根源在于我沒有弄清楚真正的問題是什么,僅僅是依據(jù)是沒有權(quán)限導(dǎo)致重復(fù)輸入密碼,結(jié)果是沒有找準(zhǔn)問題的關(guān)鍵,搜索了一堆,參考了網(wǎng)上各種解決辦法都沒有解決這樣的問題(花費(fèi)大量不必要的時間,仍然沒有解決)。最后冷靜下來,復(fù)現(xiàn)這個問題,一步步來,才找準(zhǔn)了問題的根本原因。
面向搜索編程的機(jī)械思維也可叫慣性思維,這種慣性思維會讓我們產(chǎn)生一個錯覺(前面提到過),當(dāng)遇到一個問題時,我們看到錯誤信息,只看一部分不看很整體,發(fā)現(xiàn)解決不了就直接復(fù)制一些關(guān)鍵字搜索,其實(shí)這些問題原本是不需要搜索的,錯誤信息看全了,定位到關(guān)鍵代碼(必要時可以借助Debug)實(shí)際是可以解決的。
作為程序員平常工作中用到搜索引擎,主要為如下幾個方面?
個人學(xué)習(xí)(網(wǎng)上教程、博文、在線視頻、技術(shù)官網(wǎng)等);
工作中高效解決問題(站在巨人的肩上,前人踩過的坑,我們不必從頭來過)。
過去近幾年的時間,我過于依賴搜索給我?guī)淼囊恍┛旄校@些快感讓我養(yǎng)成了問題的淺度思考習(xí)慣(所謂問題的淺度思考習(xí)慣指僅僅滿足于問題的解決,而不去深究問題背后的原因以及如何避免類似的問題再現(xiàn)等)。
說了這么多,那么我們?nèi)绾伪苊饷嫦蛩阉骶幊绦纬傻臋C(jī)械思維?
答案很簡單,那就是多給自己提問(凡是多問個為什么),隨著不斷提問和回答所提的問題,問題的本質(zhì)也就找到了,本質(zhì)定位到了,對應(yīng)的解決方案自然會有,這一個過程中,深度思考能力也在不斷提升。
當(dāng)然了突破人的慣性很難,習(xí)慣一旦養(yǎng)成,不是一兩天就能改的掉的,所以我選擇用復(fù)盤來提高自己深度思考的能力和看問題的視角。
三、總結(jié)
舒婷有一首詩叫做《這也是一切》,其中有一句我印象深刻,即”一切的現(xiàn)在都孕育著未來,未來的一切都生長于它的昨天“,從18年到至今,我比較關(guān)鍵的三年經(jīng)歷(從2018年初到至今),深刻地驗(yàn)證著這句話。這關(guān)鍵的三年有太多的經(jīng)驗(yàn)教訓(xùn),我都沒有好好復(fù)盤總結(jié)過,導(dǎo)致至今還時不時犯這些錯誤,不過好在近來定期復(fù)盤一些事情,能規(guī)避不少曾經(jīng)的錯誤。
總結(jié)
                            
                        - 上一篇: 秋蝉鸣泣之时
 - 下一篇: 对浅拷贝与深拷贝的研究