“碼農”,互聯網時代出現的一個“新工種”,主要工作是進行軟件開發,我也是其中一員。他們當中的一些人經過躍遷,成為了大師,所創造的價值為這個時代所銘記,自身也獲得了巨大的財富,創造了舉世矚目的IT大帝國;而“碼農”這個年輕人占絕大多數的群體中,越來越多的人陷入了焦慮當中:技術發展日新月異,IT產品的生命周期越來越短,每天都面臨著新知識要學習的壓力,隨著年齡增長,自己的職場競爭力又在何方?
這周閱讀吳軍老師在得到上的新專欄《吳軍的谷歌方法》中的幾篇文章深有感觸。人工智能時代已經到來,計算機軟件開發的需求也不斷增大,“碼農”們若是能夠抓住這樣一個時代機遇,將大有作為。然而,如果僅僅滿足于編寫的代碼能夠實現預期地功能,而不去進行更加深入的思考和改進,不對自己的代碼質量進行嚴格要求的話,那么水平就永遠會停留在“碼農”的階段,充其量是一個智能時代的代碼“農民工”。那么,我們該如何行動,從“碼農”到大師。
“帶著鐐銬狂舞”——在邊界內盡最大努力
一個沒有經驗的“碼農”常常會犯兩種錯誤:1、在無法突破的邊界上花費太多精力,最后徒勞無功;2、忽視了本可以大力優化,大有作為的細節,致使軟件性能低下。
先來看第一點,吳軍說,從表面上看,IT行業的技術發展在計算機誕生,尤其是個人電腦得到普及的幾十年里得到了突飛猛進的發展。但是高速的發展不意味著無限制發展。事實上,在過去的幾十年里和未來可見的幾十年里,電腦架構一直是在圖靈機的架構下進行不斷優化晚上的,但圖靈架構對計算機的底層框架限制卻一直沒有被動搖。作為軟件開發者,我們就應當了解計算機的底層架構是什么,什么樣的問題是計算機能夠解決的問題,如果從邏輯上的推導一個問題不能抽象成計算機能夠解決的問題,那么就不應當花費無用功去研究如何用程序去解決。
第二,在能解決的問題上一定要下足功夫,盡可能去優化每一個細節
人思考問題,有一個天生缺陷就是我們習慣于先解決眼前看得見的問題,喜歡先著眼與現在,再慢慢構筑未來。這種思維方式其實沒有問題,也很符合在不確定環境中的生存策略。但是,如果在工程代碼的實踐中太過于只解決眼前的問題,而沒有去考慮未來環境的變化和軟件應用場景的變化可能帶來的影響,那么未來可能要花很大的精力去彌補當初的考慮不周,而這些細節上的差距,可能就因為實現同樣的功能,你的代碼運行時間比對手慢了0.1s,整個項目產品就失去了市場先機,而作為開發者,忽視的每一個可以優化,可以提升卻因為怕麻煩而不去更進一步的地方,都會讓你喪失成為大師的機會。
他舉了一個例子,我印象非常深刻。人們總是習慣于從小數量上總結出方法,殊不知這樣的方法無法用到更高量級的問題上。他曾看到一個總監批評下面年輕的程序員,程序員很不服氣,認為是總監故意挑刺。其實事情說大也不大,就是在一段排序代碼中,那個程序員用了一個很笨的排序算法,效率很低。程序員說總共參加排序的數目不大只有個位數,采用什么排序方法時間都差不多。因為時間緊,任務重,所以就采用了最容易編寫程序的方法。然而,這位程序員所不知道的是,隨著以后程序應用場景復雜度的增加,可能在未來不長的時間里面需要進行排序的數目就成百上千倍的增加,而使用“笨算法”所造成的運算時間復雜度就會增加到一個更加恐怖的量級。就因為那個程序員圖一時的方便,就會導致整個程序未來很快就會被淘汰。從這個故事中不難看出,在能解決的問題上如果怕麻煩而采用當下看起來簡單易行的方法,無疑是給未來的自己“挖坑”,隨著應用場景越來越復雜,大數據時代數據量的恐怖增加,用不了多久當下的“小問題”就會變成未來的“大麻煩”。
作為剛入職不久的程序員,我也經歷過類似的問題。當初開發一個小功能的時候,沒有想到以后這個功能會因為有新的需求而更加復雜,所以采用了最為簡單的實現方式,沒有預留一些結構和接口為以后的功能二次開發作準備。結果沒過兩天就遇上了新的需求,當時沒有考慮周全的地方都需要重新修改,加班弄到很晚才解決這個問題。當時自己邊加班就邊想:早知如此,何必當初。如果當初能夠不怕麻煩,用更加成熟的方式去寫代碼,那么就不會現在花大力氣去解決問題。所以,在能解決的問題上一定要下足功夫,盡可能去優化每一個細節。
吳軍老師的專欄后面還有很多內容值得我們學習,但他所提到的在深入了解計算機結構框架的基礎上,盡可能去優化每一個代碼細節的思維方式卻給了我很深刻的啟示。無論在哪個領域,入門都不會很困難,但是要成為真正的大師,就需要深入去思考,深入了解系統的限制,深入去優化細節。不要安于做現在的“碼農”,想辦法成為“大師”!