要想成爲一個優秀的碼農, 要求具備的能力挺多的, 我這裏根據我的經驗, 列舉幾個我認爲比較重要的。
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這樣的平臺, 幫助我們完成軟件的構建。