程序猿的工作難在哪?

因為不管學習什麼專業,畢業後都有相當大概率改行軟件行業當程序員,我這裡再給不瞭解程序員行業的業外人士詳細掰掰程序員的工作。

程序員自嘲碼農,編程序寫代碼的。寫程序很難嗎?其實不算很難,如果程序員的工作就僅是寫代碼,那這工作任何人都能做。寫代碼這個工作本質上和寫文章是一回事,就是把一件要做的事情,分成一定的結構來進行有條理性地描述,一般那些愛寫文章的人,寫代碼的條理性都會不錯。你別說,還真有作家是個程序員高手的,比如王小波。

但寫代碼和寫文章還是有區別的,因為讀者不一樣。寫文章的讀者是人,你寫文章寫個把錯別字不會影響人的理解。但程序代碼是寫給機器讀的,機器很傻的,有任何一點問題它都會罷工。

我愛人有一次做excel數據處理遇到一個問題搞不定跑來問我,她說表格裡做數據統計的公式失效了,我其實對excel也不算很熟練,開始我懷疑是不是公式有哪些肉眼不容易看出來的錯誤,於是我重新輸入一遍公式,還是不行;沒轍我求助百度搜索,看別人有沒解決過類似的問題,但也沒找到合適的答案;於是我又回過頭來在excel表格上折騰,最後發現是原來表格裡的數字,從人肉眼看來是個數字,實際在EXCEL裡是文本格式,把它們改成數字格式問題就解決了。然後我對我愛人說,你現在知道了我們程序員是做什麼工作的嗎?像類似這樣的問題,你們偶爾才會遇上一個,但對程序員來說,每天都可能要遇上幾十個。沒錯,程序員其實是個不停地搞定各種問題的工作。

程序員遇到的錯誤和問題有些來自自己,這部分還相對好辦些。雖然你不可能讓自己做到永不犯錯,但可以通過一些工程性的手段比如測試來減少錯誤,一般你會自己測試一遍,後面還有專職的測試人員來給你把關。發現問題後可以調試跟蹤來定位問題點並修正之,這是個程序員日常的常規操作。

真正難的問題是來自別人做的部分的問題。因為你寫代碼不可能一切從頭開始自己寫起,一般你總要使用別人搭建的框架或者一些組件,這時看懂別人寫的代碼就變得重要起來。這時你通常需要先閱讀一些官方的介紹文檔,這可能是一本幾百頁的大部頭。然後你要試著把別人的源代碼組件編譯運行起來,好嘗試跟蹤觀察其運行機制。但相信我,你不會這麼順利的,這中間你會遇到各種意想不到的問題。遇到問題時一般會有提示,有時提示挺管用,有時你會覺得不知所云,於是你嘗試通過搜索解決問題。這世界有人智商高,有人情商高,程序員們發明了一個新商,叫做搜商。搜索英文叫search,研究叫research,意思是反覆搜索,在這點上程序員們做到了。

不停地搜索解決問題,這就是程序員們的主要工作。有些程序員只喜歡純粹地寫代碼,另外有些程序員則挺享受解決問題的過程,這對他們而言就像玩遊戲打怪一樣。但還有一個問題是,

100個問題,你解決了99個問題,只要有一個問題你搞不定卡殼了,那從結果而言,你得99分和0分的最終效果都是一樣,99分和0分一樣都是0分。想想看,這是一件多麼令人沮喪的事情,如果你去參加高考,100分制5門課程每門99分的話,你都可以上北大清華了。但在程序員的世界裡,沒有99分的概念,這裡只有0分和100分。

如果你搞定了所有問題,把程序運行起來了,這仍然只是個開始。你還需要閱讀理解源代碼,這個工作有點像是閱讀一本天書,而且還是一本拆成一頁頁的散書,很多時候你上來都不知道從哪開始看起,對於那些規模龐大的軟件尤其如此。而軟件正是一門為處理複雜性而生的技術,軟件組件幾萬幾十萬行的規模算是家常便飯。

看到這可能很多人要被嚇到了,那倒也不必要。如果你不是要求太高只是想進入一個開發組能幫忙乾點活的話,那其實也簡單,因為上面提到的問題,項目組內都會有熟悉情況的人幫你搞定了。軟件行業其實大部分程序員都是如此,只不過這種程序員不具備自己獨立作戰的能力。


分享到:


相關文章: