程序員應該具備的能力

要想成爲一個優秀的碼農, 要求具備的能力挺多的, 我這裏根據我的經驗, 列舉幾個我認爲比較重要的。 

1

養成計算機的思維方式。

計算機是個典型的只懂得順序,循環,分支的笨蛋, 它遵循教條主義, 只按特定的指令辦事。 

 

但是人類世界的需求又是如此複雜,更要命的是需求是用自然語言描述的, 這就和計算機之間形成了一個巨大的鴻溝。 

 

很明顯,這個鴻溝需要苦逼的碼農去填充。 

 

碼農得理解人類需求, 學會計算機的思考方式, 理解計算機的指令, 然後努力的把翻譯工作做好。 

 

例如: 經理給你一個模塊的需求以後, 你得站在計算機的角度, 把它用現有的數據結構或者自定義數據結構, 再加上一般不那麼複雜的算法,用計算機語言把它描述出來, 這是基本功, 和具體語言無關, 和框架無關。

 

這個思維習慣養不成, 做不了碼農。

 

2

定位問題的能力

20世紀初福特公司一臺電機出了毛病,幾乎整個車間都不能運轉了,相關的生產工作也被迫停了下來。

 

公司調來大批檢修工人反覆檢修,又請了許多專家來察看,可怎麼也找不到問題出在哪兒,更談不上維修了。福特公司的領導真是火冒三丈,別說停一天,就是停一分鐘,對福特來講也是巨大的經濟損失。

 

這時有人提議去請著名的物理學家、電機專家斯坦門茨幫助,大家一聽有理,急忙派專人把斯坦門茨請來。 

 

斯坦門茨仔細檢查了電機,然後用粉筆在電機外殼畫了一條線,對工作人員說:“打開電機,在記號處把裏面的線圈減少16圈。”人們照辦了,令人驚異的是,故障竟然排除了!生產立刻恢復了! 

 

福特公司經理問斯坦門茨要多少酬金,斯坦門茨說:“不多,只需要1萬美元。”1萬美元?就只簡簡單單畫了一條線!當時福特公司最著名的薪酬口號就是“月薪5美元”,這在當時是很高的工資待遇。  

  

1條線,1萬美元,一個普通職員100多年的收入總和!斯坦門茨看大家迷惑不解,轉身開了個清單:畫一條線,1美元;知道在哪兒畫線,9999美元。

 

在軟件開發領域, 也經常會遇到類似的情況: 軟件出了Bug , 大家花費了巨大的精力,日夜奮戰,最後發現只是有個文件打開後忘記關閉了 。只需要一行代碼就能修復!

 

所以能迅速定位問題的人才是牛人。 

 

碼農定位問題有這麼幾種辦法, 一是查看錯誤日誌,推斷錯誤的可能, 這是最直觀也是最直接的了。

 

只不過很多情況下, 真正的兇手並不在兇殺案的現場, 這時候就需要進行分析了, 可以一步一步的調試代碼, 找到真兇, 也可以在代碼中輸出日誌查看運行時行爲,  但無論哪種方法都是費時費力。  

 

更悲慘的是, 不少問題是生產環境出現的 ,根本沒法調試。 

 

好的碼農能夠把軟件在腦海裏建立一個運行的模型,設置輸入輸出,  仰起頭在腦海裏模擬運行一下, 很快就能找到問題所在。

3

搜索的能力

一個人不可能掌握所有的知識, 在工作中遇到不懂的地方, 很多時候沒法系統的學習, 還好我們有搜索這個利器可以使用。 

 

可是有的人試了好多關鍵詞都不能找到理想的內容。

而有的人幾乎是一擊而中, 無往而不利。

 

這背後就是對問題本質的理解是否到位。 

 

學會選擇最合適的關鍵字進行搜索, 也是碼農很重要的能力,多多練習吧。

4

熟練使用IDE的能力

我不反對直接使用記事本等文本編輯器進行編程, 我只想說熟練使用IDE,能極大的提高編程的效率。 

別的不說, Eclipse IDE至少提供這些功能:

智能提示: 語法上的任何錯誤都立刻給你顯示出來。

自動補全: 可以省去敲入很多代碼

格式化:瞬間讓代碼好看很多

代碼瀏覽: 輕鬆的打開一個類, 查看類的繼承體系, 方法的調用層次

重構: 對付髒代碼的絕對大殺器。 文本編輯器是絕對沒有的。 

 

所以想編程如飛的話,還是趕快搞定一個IDE吧。

5

重構代碼的能力

優雅的設計和漂亮的代碼不是一下子就設計出來 、編寫出來的。 

 

而是在一次次的迭代, 一次次的重構下慢慢的浮現的。 

 

所以重構就顯得非常重要, 如果你沒有掌握這個技能, 趕緊去看看 Martin Flower的那本經典的書吧:《重構:改善既有代碼的設計》

6

寫測試的能力

這裏說的測試主要是單元測試, 這一部分的工作是由程序員,而不是測試人員完成的。 

 

寫單元測試主要是保證自己寫的業務模塊是按照預期來工作的。 

 

此外,這些測試也會成爲一種“文檔”,用來描述軟件的行爲,  永不過時。 

 

更重要的是,這些測試將會成爲負責任的哨兵: 將來你改動代碼的時候, 運行這些測試將會告訴你是不是對原來的邏輯造成的損害,這種迴歸測試的功能是價值無限的。 

7

熟練使用SCM的能力

SCM :即源代碼管理系統, 例如SVN, Git, CVS等。

 

現在的軟件開發都是團隊合作, 甚至是分佈式合作, 所以一個SCM系統幾乎是團隊的必備。 

 

日常的工作都是從SCM中check out 代碼開始, 所以熟練掌握至少一個SCM是碼農的基本能力, 如果還不會的話, 趕緊到github上開個免費賬號,學習一下吧。

8

構建軟件的能力

構建軟件就是把代碼從SCM中下載下來, 編譯、測試 、打包、部署到測試環境或者生產環境。

 

這個過程如果是手工的, 那就太無趣了。 

 

這個過程當然應該是自動化的,碼農至少應該學會像Ant, Maven這樣的工具和像Jekins這樣的平臺, 幫助我們完成軟件的構建。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章