關於程式碼的那些低階錯誤,都是血淚的教訓

李雪薇發表於2018-07-17

無論你是初級工程師,中級工程師,高階工程師,甚至是全棧工程師、架構師,都是從零開使一步一步走出來的,想必都會犯過一些低階錯誤。


那些錯誤都是怎麼發生的,如何避免發生錯誤呢,看看我們各位資深的程式設計師以自身為例,告誡我們敬畏每一段程式碼



開發許可權管理很重要,謹慎對待手中的許可權



雲棲社群開發者海闊天空 yy:


曾經經我做過 SQL SERVER 資料庫儲存過程程式設計師。


當時我們每個人本地都有一套測試環境,所以測試的時候都是在本地測試。由於測試資料比較亂,比較多,為了更清楚的看清結果,我會經常 TRUNCATE TABLE,寫到這裡大家可能基本猜出來了。沒錯!線上上出問題時,由於 SQL SERVER 查詢分析器可以同時開多個資料庫連線視窗,我把線上資料庫的視窗和線下資料庫的視窗弄混了... 所以,線上資料庫的一張主要表,被我 TRUNCATE TABLE 了。。。當時剛執行完,過了 1 分鐘我反映過來了,頭腦一片空白。。。沒辦法,只能反映給了主管,主管聽到後難得得沒說我什麼,馬上找相關人員去處理。。。經過了大約 1 個小時後,原來的資料總算恢復了,但也導致了這個業務 1 個小時不能用。。。我都不知道我那 1 個小時是怎麼過來的,坐在那裡,動也不敢動,搞程式也搞不下去,就在網上搜如何恢復資料,話說當時我都準備好公司把我開了的準備了。


最後結果是,技術總監批評了我們主管,要求部門整改,線上環境嚴格控制,必須由他把關。


之後主管也找我談了話,當然批評是少不了的,作為事故,還是罰了 500 塊錢主管罰了 1000。


要知道,當時我工資才 3500。當時沒被開除就算燒高香了吧。。。


事後總結起來,其實這主要還是部門管理方面的問題,我剛入職不久的人就能隨便接觸生產環境,並且還有很高的許可權,這才是最大的隱患。當然個人也有問題,工作再忙也不要急躁,特別是你還在生產環境操作。要慎之又慎。



一定不能隱瞞或甩鍋,以解決問題為前提,之後再去 review



雲棲社群開發者 yolo_omg:


在寫 RPC 框架的時候,寫了很多 bug,在這裡分享一個比較嚴重的:客戶端連線斷開清除請求資料時拋了 

ConcurrentModificationException,導致連線關閉異常,恰巧又碰到集團要做斷網演練,接著就是 1 個星期內推動全網升級,拉了很多丁丁群,發了很多紅包,還好沒有觸發線上故障。導致後面寫 if else 都要 double check 了,比如 1+1 是否等於 2,都要寫 UT 進行驗證了,然後拉著小夥伴 review 程式碼。


發現問題的時候,一定不能隱瞞或者想甩鍋,以解決問題為前提,之後再去 review!切記!


千萬不要在累、疲勞的時候寫程式碼



雲棲社群開發者浮生遞迴:


入職不久就有很高的許可權,我覺得這不一定跟管理不善有關係。如果一個公司技術人員偏少的時候,新人也有高許可權,是沒辦法的事情。如果小團隊也像大團隊一樣分工很細,很明確,管理的成本會過高,最終導致破產。


有個同事,不小心把線上資料庫給刪了…… 還有個同事,沒做好安全措施,導致簡訊被人惡意刷了幾十萬條,公司直接損失 1 萬多。當然,兩位同事都沒受到什麼處罰。
我自己有次粗心,一個判斷沒寫完整,直接導致准考證生成的座位號不正確。一堆人拿著准考證去考場找不到自己的位置,哈哈。當然,事後客戶也沒有責怪我,我也覺得比較奇怪的。做錯事不是應該受到相應的處罰嗎?


寫了十幾年的程式碼,就這麼一次事故。讓我在日後的程式碼生涯裡心細了很多,程式碼寫完後,重要的部分,總是檢查檢查再檢查。測試後的結果也會一再核對。


程式設計師寫程式碼的時候,狀態很重要,千萬不要在累、疲勞的時候寫程式碼。這就跟疲勞駕駛差不多,很容易造成事故。有些重要的系統,如果出現問題,是跟疲勞駕駛一樣,會直接造成車毀人亡的。比如自動駕駛系統、紅綠燈管控系統、航空塔臺等。



工作不易,萬事需仔細



雲棲社群開發者黃一刀:


有一回,客戶找我說,他有筆收費錄錯了,要我幫他修改下金額,我一看,小問題,對方又是財務主管,於是二話不說,查詢分析器開啟,update 。。。set。。。where。。。,選中,一鍵 F5,結果發現 where 竟然沒選中,尼瑪啊!趕緊按停止鍵,死命按滑鼠,只怪資料庫伺服器效能太好,三秒不到就全部執行完畢了,立馬嚇傻,呆若木雞,額滴親孃。由於資料庫沒有每天都做備份,只能還原到兩天前的。第二天,親自上門找客戶,賠禮道歉,還保證下一年免費讓他們用一年。還好我是領導,不然絕對得去睡馬路。


這次之後,我資料庫都會每天都做備份,每次按 F5 鍵之前,都會反覆看好幾遍,語句有沒有錯,語句有沒有全部選中,感覺自己現在都好像有點強迫症。


混飯不易,且混且珍惜,工作不易,萬事需仔細。工作上不管什麼事都要用心、細心,千萬馬虎不得,不能拿自己的飯碗開玩笑,要記住,夏天的馬路蚊子多,冬天的馬路凍成狗。



原先一直認為所謂的流程就是枷鎖,現在看來人多力量大,考慮的周全



雲棲社群開發者 forest10:


我遇到最悲傷的事情莫過於直接線上上操作 mongodb 了。當時自己剛畢業一年,小公司。也沒啥操作流程啥的來約束,公司原先是做類似印象筆記類的。當時因為人和文章的對映關係竟然做在了 redis 裡面。但是好死不死的是伺服器被某個開發重啟了,更關鍵的是並沒有做 redis 的持久化。後來決定直接把人員對映做到 mongodb 裡面。。。。關鍵時刻到了,我把好幾個人的對映都做錯了,導致好多人隱私都。。。。。好吧,我承認,redis 重啟也是我乾的งว


透過這次教訓,深刻感受到了流程審批的重要性。還有就是不要輕易動線上環境。



我能早一點會 git,那麼我也就不需要重新寫一次程式碼



雲棲社群開發者尼古拉斯雷:


寫好的程式沒備份,是的,之前不會用控制版本。結果有一天,不小心把硬碟搞壞了,你知道那種感覺嗎?


就像從幾千米高的懸崖低落下來的感覺,心都涼了。


從此之後,開始學習 git 的使用方法,每次寫完一次程式碼或者要出去的時候都先提交到遠端倉庫。


說白了,還是因為技術菜,會的技術太少了。流下了沒有技術的眼淚...


備份啊,做事之前先做好備份啊。不然硬碟壞了,你能找誰去,如果,我能早一點會 git,那麼我也就不需要重新寫一次程式碼了。



作者 | 不靠譜貝貝

轉自 | 雲棲社群

原文 | 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31509936/viewspace-2158005/,如需轉載,請註明出處,否則將追究法律責任。

相關文章