近期,工作中、工作外、個人、他人均遇到了不少問題,而這些問題的成因均因未注意細節而造成,使我再一次想起那句名言:細節決定成敗。于是我覺得很有必要做一個記錄,用以自警和他警。
這個事其實是比較嚴重的一個事,因為涉及到了生産,并嚴重影響甲方公司對我方的評價。
整個經過大概是這樣:
甲方公司給我們公司提出了一個需求,這個需求是六月份開始建立工單的,而實際開發應該是五月份就已經開始。
這個任務不是我負責,是以我并不了解細節詳情,隻是聽經理說并不是很難的一個任務,當然了,也可能隻是他認為不難。
結果,這個任務直到十一月份才正式上線,持續了近半年。而持續了近半年才上線,結果還是以上線失敗告終,目前又被打回重新開發。
這些其實不是最重要的,最重要的問題是上線失敗的原因,是因為新開發的功能使用了原來資料庫的三個預留字段之一。
也不清楚究竟是什麼原因,導緻上線後才發現那個預留字段已經有其他業務在使用了,導緻最終上線失敗。
僅僅是一個字段是否被使用的問題,未在上線前确認好,導緻五個月的成果幾乎功虧一篑,這件事直接造成甲方公司對我方的評價大打折扣,是為細節決定成敗的事件1。
這個問題其實不止遇到過一次,相信也不止我一個人遇到過,那就是開發過程中配置檔案裡的空格。
因為這次的項目開發要把sybase資料庫改為oracle資料庫,oracle又不是很好安裝,是以一開始我是沒有在本機安裝oralce的,直接使用公司伺服器的oracle開發。
代碼基本開發完畢的時候,我抽空在自己電腦上安裝了oracle,各種測試都沒有問題後,正式使用代碼連接配接我自己的資料庫。
結果呢,運作過程中始終提示使用者驗證不通過。
我查了使用者名和密碼,怎麼看都是對的,一開始以為還是資料庫伺服器哪裡配置有問題,但是各種驗證之後又最終确定資料庫伺服器是沒有問題的。
如此頭疼的花了半天時間後,我無言以對的發現,竟然是配置檔案中使用者名末尾多了個看不出來的空格,就是這個罪魁禍首,使我幾乎抓狂,又做了若幹的無用功,是為細節決定成敗的事件2。
一年多之前,我有寫過activiti自定義流程的系列部落格,如今我已經很久沒有再用這個技術了,但是有很多用這個技術的同學還在參考我寫的那些筆記。
但是最近有個同學遇到了一個問題,他按照我說的方法,甚至完全使用我的代碼後,有個環節始終得不到正确結果。
當他問我的時候,我一開始抱着“我怎麼會錯”的、據說是标準程式員心态的心态,堅定的認為一定是他寫的有問題。
然而,當我自己按自己的代碼再來一遍時,竟然得到了和他一樣的結果,那個環節也不正确。
後來我有别的事就暫停了找問題,而那個同學因為必須解決這問題,就一直找了下去。
最終還是他發現其實我寫的沒有問題,方法和代碼都沒有問題,問題在于畫流程圖的時候一些細節沒有注意。
那些畫流程圖的細節我并沒有在部落格中說明,導緻别人不知道這個細節,連我自己也都忘記,還以為自己寫的有錯誤,是為細節決定成敗的事件3。
這次項目spring+struts2+mybatis重構為springboot+jpa,由于過往不規範的開發經驗,導緻寫的代碼問題很多,也不規範。
在确定整體業務流程正确之後,我們進行了一輪重構,主要是根據阿裡新釋出的java開發規範進行一些優化。
在這個優化過程中,我修改了一個資料庫對應的實體類的包名,然後啟動項目之後就無論如何也掃描不到那些實體類了。
然後我檢視了springboot項目的目錄結構,所有包都位于啟動類同級或者同級的下級,按理說預設都會掃描到才對。
然後又檢視了各個實體類的注解,該有的和jpa對應的注解也都不少。
然後又看了springboot的啟動類,也都配置了包掃描路徑,确定沒有問題。
于是我實在找不到問題出在哪裡,遂請教了兩個對springboot更熟悉的同僚,結果他們幫忙也找了很久,很久之後依然沒有解決問題。
就這樣,最終是另一個一起開發的同僚找出了問題,原來是他寫的某個切換資料源的方法中定義了實體類掃描路徑,導緻更換了包名之後的包名和他之前那個定義的字元串不比對。
正常來說,這種字元串不應該是寫在方法中的,不規範的細節,導緻幾個人幾個小時的流失,并且最終發現都是無用功,是為細節決定成敗事件4。
這次的項目大重構,分為三個子子產品,由于每個子產品負責人不一樣,又沒有統一的具體規範要求,導緻風格迥異。
其中一個同僚建立的springboot項目就比較個性,首先是他的springboot項目看起來是maven建立,但是别人拿過來放入eclipse後,均需要先轉成maven項目才能成為真正的maven項目。
其次就是在eclipse中正常運作,結果在打成jar包時,jar包裡什麼配置檔案都沒有,導緻jar包無法以預期的結果運作。
後來找來公司的高手一番查找後,發現打包指令沒有問題,各種配置也正常。
沒把配置檔案打進jar包的原因,是因為maven配置檔案預設目錄src/main/resources,他寫成了src/main/resouces,單詞resources中少了一個r。
這很顯然是手動建立項目目錄,導緻手誤,少寫了字元,先不說這種方式如何,單單就事論事,一個字元缺失導緻這樣的詭異問題,是為細節決定成敗事件5。
以上事件,除開第一個之外,其他看起來似乎也都不算太大的事,但是這樣的事頻繁的發生,就不得不引起重視。
細節決定成敗,态度決定人生,希望以此自警和他警!