變身超人程序員


清明節放假前工作最后一天,協助同事解決了一個BUG,這個BUG對於所屬的程序而言,可以說不是痛不癢,完全不影響使用,只是看起來有點變扭而已。然而, 對我而言, 解決這個問題的思路卻是比較有代表性的,頗有一種曲線救國的味道。

 

事情大概是這個樣子的。有需求部門反應,我們部門負責的某個項目的頁面上數據顯示有問題。有10條數據,每頁顯示4條,那么正常情況下第1頁應該顯示4條,第2頁4條,第3頁2條。因為某一處代碼抽風,現在數據被顯示成了第1頁4條,第2頁3條,第3頁3條。盡管不是什么大問題,但是我們寫代碼做產品向來秉承着精益求精的作風,只要是個問題, 就算再小,也要修正。然后, 一幫程序員手忙腳亂的想抓住這個BUG消滅之。為什么是一幫程序員?修個BUG用的着這么大動干戈嗎?大家有所不知, 因為這個BUG的當事人是一位萌妹子,大家幫忙出主意修BUG是不假,但是去揩個油那也是真的。一陣忙活之后, 問題出在哪里是找到了,卻沒法子下手改。因為這個項目依賴一個第三方分頁顯示插件,程序本身的邏輯沒有問題,問題出在這個插件里面。去修改這個第三方插件的BUG顯然不太現實,靠譜的解決方法就是把這個插件給換了,但是項目的代碼跟交互和這個插件結合的非常緊密, 哪能說換就換,再說當時已經是晚上七點了,這一搞非得到凌晨不可,因此,大家都像泄了氣的皮球,無可奈何,這都放假了還出這檔子事,明天還要去給祖宗上墳呢,加班和對先人不敬,到底應該選哪個呢?心塞塞呀!

 

本來這種閑事我是不太喜歡管的,但是因為這個妹子明天必需要回家,車票買好了, 所以要把這個問題解決就必須在今天晚上, 讓一個妹子加班到凌晨,我有些於心不忍, 一個如花似玉的小姑娘, 半夜一個人回家, 要是碰到壞人, 場面不敢想象。 於是我也上前去湊熱鬧了,說不定能幫上忙呢。

 

了解了問題來龍去脈后,發現這個問題在自己的技術認知范圍內的確沒有靠譜的解決方案,除非修復插件BUG或將插件替換,但是這兩種方案都不是短時間內可以完成的。我閉上眼睛思考,既然是個BUG ,那肯定不是必現的,如果不去觸發這個BUG ,那也算是把問題解決了。我腦子中靈光一閃,似乎抓到了一絲線索。我開始調式程序,總共10條數據

 

設為每頁顯示4條,顯示結果為4條3條3條

 

設為每頁顯示3條,顯示結果為3條3條2條2條

 

設為每頁顯示2條,顯示結果為2條2條2條2條2條,一切正常, 沒有觸發BUG

 

我找到了規律,不觸發BUG的情況是數據總條數必須能被每一頁顯示條數整除,這也就意味着,每頁4條不能變,那只要把數據總條數變為12就可以。為驗證我猜想, 我在原有的基礎上加了2條數據, 測試運行, 原來的BUG消失了, 分頁顯示變的正常了。找到解決方案,接下來的事情就簡單了, 只要讓數據總數保持為4的倍數,再加上一些收尾的工作,問題完美解決, 整個過程花了不到10分鍾的時間。

 

插件的BUG還在那里,根本沒有被修復,但是用戶反饋的問題卻修好了,能用的舒服,程序員也不用加班了,兩全其美。事后我仔細思考,我沒應用什么別人不會的高大上技術,只是轉變了一下思路,就輕松巧妙的將問題解決了,很有一種四兩撥千斤的感覺。那是不是也可以把這種解決問題的思路推廣到其它方面呢?

 

回憶過去,我以前也經常以這種思路在解決問題,只是過程與成果並沒有顯得非常的尖銳和突出。

 

之前,我的一個網站被惡意攻擊者注入垃圾信息,整個網站滿屏不堪入目的內容。我迫切需要解決這個問題,但網站的源代碼在家中電腦上,我沒有辦法通過修改程序漏洞解決問題。現在手頭唯一擁有的是數據庫操作權限,但是把數據刪了,惡意程序立馬又注入新的,治標不治本啊。正愁眉不展間, 腦中靈光一閃, 方案出來了, 我可以在那個被注入表上加一個before觸發器, 觸發器的程序檢測被寫入的記錄, 假如是來自惡意攻擊的數據,就執行回滾操作,不讓數據寫入表中。花了十分鍾寫了十幾行SQL,問題解決。程序的BUG還在那里,注入者的機器人程序還在不停的攻擊,但是管他呢,我的最終目的達到,用什么方法根本不重要。鄧爺爺都說過:能抓老鼠的就是好貓

 

還有一次,碰到一個不靠譜的需求,需求方發給我一個網站,說對這個網站不滿意,讓我改上面的功能。網站源代碼沒有,網站服務器權限沒有,總之是什么都沒有,完完全全是一個別人家的網站,讓我改上面的功能,這尼瑪任性的可不是一點點,真把程序員當神仙了。換作別人,估計一巴掌就把需求給搧回去了。但偏偏是我,真就把這個問題給解決。你們是不是以為我把人家網站的服務器給黑了,把代碼down下來,改成自己想要的樣子。當然不是,我是一個法律意識很強的程序員,不會干這種蠢事。我的做法是為那個網站開發一個chrome瀏覽器插件,插件里面有想要的功能。只要用戶裝上這個插件,每當訪問這個網站,插件功能就被激活,供用戶使用。可以把這個插件想象成游戲的外掛,只是功能沒那么復雜。

 

上面講的這些便是軟件開發中灣道超車,曲線救國的做法。我對於程序開發理解是,寫程序就是解決問題,問題擺在那里,不哭不鬧不動不跳,因為在我眼里它就是死的。而解決問題的方法卻是活的,只要願意去發掘,就會有無數種, 而且這無數種方法中,優劣好差各不相同,程序員要做的就是在這么多方法中選擇一種最合適的。通常情況的問題,程序員並不用為選哪一種方法而糾結,因數解決問題的方法就像電梯里的美女,一眼就能看的到,連選的力氣都能省掉。然而, 在極端情況下, 解決問的方法匱乏, 而且都是歪瓜裂棗, 要找到合適的真的不容易 。在這種情況下,光靠腦子靈活眼光獨到還不夠,程序員需要能在這些爛方法中找到一種最好的,然后駕馭之。會找好方法和駕馭這個被找到的方法,這是兩種能力,相互依賴,相輔相成,如能掌握並融會貫通,那么程序員的戰斗力將會被發揮到極至。

 

我自己也在一直朝這個方向努力,所以我解決問題的指導方針是,用php不行我用java,用nodejs不行我用go;用電腦網頁不行我用windows客戶端,用手機網頁不行我用手機原生應用;目標是解決問題,至於解決問題用什么方法,我從來不會被某一種技術給綁死。很多同學認為, 學這么多語言這么多技術有什么用, 有的語言技術已經如萬能仙丹一般, 沒有什么問題不能解決的, 如Java。 然而, 我覺得掌握多種技術帶來的好處並不僅僅是掌握技術的本身, 更重要的好處在於解決問題時不會受到局限,說的直白一點就是會有更多的方案可供選擇,可供選擇的方法多了,那自然就有更大的可能選擇一種更好的方案,這便是前面說的兩種能力中尋找方法的能力。然而,光會尋找方法還不夠,還需要能駕馭這種方法,這便是一個深度問題了,想必所有程序員都知道,浮於表面的學習某樣技術,意義不大,打嘴炮吹牛逼的程序員會被人看不起,只有真正能解決問題的程序員才值得尊敬。因此,如能做到這兩點,你解決問的方法在別人眼里就是神奇的不可思議。

 

最重要的是,這種方式持續久了,解決問題的思維習慣就會發生變化,思維習慣的變化致使考慮問題的方式變的不同,考慮問題的方式變的不同致使解決問的方法變的不同,解決問題的方法變的不同致使解決問題得到效果變的不同。從此, 你便是別的程序員眼中的超人。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM