search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

程序猿的「橫向發展」

在我小的時候,家長經常打趣胖的孩子說:喲,身體長得挺快,可惜就是橫向發展。所以在很多人的潛意識裡,縱向發展是值得誇獎的,橫向發展則不是那麼光彩的事情。但是我的工作經歷,卻讓我對「橫向思考」有了新的認識。

程序員的發展,長期以來都是大家關心的問題。一般來說,程序員的發展有兩大方向,深度和廣度。深度發展,就是精神自己的本事,研習新潮、尖端的技術乃至「屠龍之術」,以絕招打遍天下;廣度發展,就是拓展自己的技能,比如學會更多的語言,以完成更多種類的任務。除去這兩大方向,其它能選的發展方向基本就只有「改行」了。

今天我要說的當然不是改行,而是除去深度發展、廣度發展之外的第三維度,因為不知道該如何命名,乾脆借用「橫向發展」的說法吧。

我們寫一個程序,深度發展關注的是讓它速度更快、資源消耗更少,廣度發展關注的是讓它更合適與其它模塊交互,甚至用更合適的語言編寫這個程序。橫向發展,則是讓這個程序更像一個真正能用程序,而不是實驗室里的玩具。

在我剛剛工作的時候,有一天我提前完成了任務,喜滋滋地去向項目經理彙報,不料他看了代碼之後,卻把我劈頭蓋臉說了一頓:你以為你還是學生呢,給老師寫個程序算出正確結果就完?你看你處理網路連接的部分,對伺服器返回的異常信息,包括網路傳輸的各種意外都沒有處理,誰告訴你伺服器總是返回正確信息的?誰告訴你網路傳輸不會意外的?萬一網路斷了,你的程序就一直死循環嗎?……

我必須承認他說的有道理,但也無可奈何,在學校的時候寫過不少程序,但老師一般只看大致結構和結果,從沒有問過「網路斷線了怎麼辦」的問題,所以我從來也沒想過。沒想過歸沒想過,項目經理說的畢竟有道理,只有學生才會寫出只能在理想環境下運行的程序,於是我開始有意識地學習和思考各種異常情況的處理,不久還因為這方面的工作得到了項目經理的表揚,也深刻感覺到「橫向發展」確實解放了自己。

後來換了工作,還是做伺服器方面的開發,我本來以為自己之前的經驗可以被人賞識,卻發現自己完全想錯了。作為要求更高、應用場景更嚴苛的程序,只思考在程序里怎麼處理異常是不夠的,還需要確保程序的持續運行,其運行狀態持續可以記錄、監控、分析,出現問題必須能在第一時間判斷癥結……為了做到這一切,既需要專門開發一些程序去監控自己的程序,又需要原來的程序能夠被方便的監控,所以在設計時又有更高的要求。最後,雖然核心的功能並沒有變複雜,但為了保證核心功能的穩定運行,程序本身的複雜度卻上升了很多。這種要求,頗有幾分類似小朋友的「橫向發展」,所以我把對程序員的這種要求稱為「程序員的橫向發展」。

或許是從工作開始就有機會重視「橫向發展」的緣故,所以我長期以來並不認為這是一個嚴重的問題。曾經有朋友告訴我,國內互聯網行業某新興領域排名三甲的公司,竟然連自己的伺服器上跑的哪個版本的程序都不知道,我還當是笑話。後來見得多了,才知道事實當真如此——與小朋友的「橫向發展」不討人喜歡類似,許多程序員也忽視甚至討厭「橫向發展」,覺得這是在給自己找麻煩,他們認為,把代碼敲完,往伺服器上一扔,自己的工作到此為止了。至於其它方面,那是系統管理員的問題。

所以我們見過許多這樣的程序:完全不處理意外情況,各種異常一股腦交給操作系統去處理。也看到很多這樣的程序:自動發送郵件的程序,不知道自己每天發了多少封郵件,消耗了多少流量,有一天用戶收不到郵件才知道出了問題;備份資料庫的程序,不會記錄每次備份的開始時間、結束時間、備份文件大小,有一天硬碟滿了才發現已經很久不能正常備份了;抓取數據的程序,不知道抓取的成功率、速度、消耗的流量,有一天業務部門說數據很久沒更新了才知道抓取失效了…… 其實這些功能並不複雜,但總是不夠穩定,而且每次出了問題都不能預先知道,更因為沒有詳細的記錄,又要消耗無數的人力物力去解決。在一些稍微複雜的系統里,不少程序員每天的工作內容就是這樣的重複勞動,伴著無休無止的抱怨…… 更糟糕的是,這樣的程序員業餘時間還在積極學習,希望在把語言工具掌握得更熟練,學會更多的語言和工具,卻不知道問題的癥結在於自己缺乏「橫向發展」的意識。

我仔細回憶自己小時候,家長和老師會在一種情況下提倡「橫向發展」,那就是要求身板像「豆芽菜」一樣的同學多鍛煉,成長結實一點。同樣的道理,如果程序員覺得自己寫出的程序像「豆芽菜」一樣沒有底氣、不能放心,與其繼續鑽研新語言、新技術,倒不如抽出精力去「橫向發展」一把。



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦