大咖你好,作為一個程式設計初學者,有什麼需要注意的?
以上是一個讀者流年似水的提問。我把他的問題置頂了,但一直沒想好怎麼回答,因為問題太過籠統了。後來,他也可能意識到了這一點,就又給我發了一條微信:
在嗎?老師。我們作為新人應該在編寫程式碼的過程中注意哪些問題呢?
這個問題其實也不太好回答,因為要注意的問題蠻多的,多得就像霧霾中的顆粒。不過,有趣的是,流年似水這兩次的提問中,對我的稱呼大有不同。
“大咖”中略帶一些調皮,而“老師”就顯得過於莊重了。憑良心說,我喜歡“老師”這個稱謂。但我知道這頂皇冠戴我頭上,會把我 185 的身高壓扁到 173。再說,我也不是什麼“大咖”,無非比較接地氣一點,喜歡和讀者交流的感覺而已。
那麼接下來,我就針對流年似水的提問,做一些回答。希望對有類似問題的同學起到一個參考的作用。
01、把程式設計吃透
父親總是喜歡教育我說,你要懂得人情世故,要學會與人打交道。誠然,父親說得沒有錯,人情世故、與人溝通非常的重要,重要到缺少這些會碰很多壁。
但我更希望父親教育我說:你作為一名程式設計師,要把程式設計吃透!人總要先把本職工作幹好,才能去完善其他的軟技能嘛。當然了,我的希望是註定要落空的,因為父親壓根就不知道“程式設計師”是一個什麼樣的名詞。
我是知道的,程式設計師(英文 Programmer)是從事程式開發、程式維護的專業人員。 那麼作為一名擁有 10 年開發經驗的老鳥,我認為程式設計師最核心的生存技能當然是熟練地掌握一門程式語言。這也是程式設計初學者最應該注意的,但往往會被忽視。
別的程式語言我不太懂,Java 我是懂的。假如你想把 Java 這門程式語言吃透,我建議你這麼做。
-
輕鬆駕馭 IDE,比如 Eclipse 和 IDEA。
-
快速查閱 Javadoc。
-
掌握流程控制語句。
-
理解類和物件。
-
掌握三大特性:封裝、繼承和多型。
-
會用介面。
-
懂得泛型。
-
掌握異常處理。
-
熟悉 java.util 和 java.lang 包下的類。
-
略懂 lambda 表示式和 Stream API。
-
掌握 IO 流。
-
會用 Socket 程式設計。
-
懂得效能優化。
-
會用 Junit 等單元測試工具。
-
會用 Log4J 等日誌工具。
-
熟悉 Mybatis、MySql 和 Spring。
-
入門 SpringBoot。
-
熟悉設計模式。
熟練地掌握一門程式語言,就是程式設計師的立命之本。知道了自己是靠什麼吃飯的,就應該在這方面狠下功夫。
02、巧用資料結構和演算法
說起資料結構和演算法,我就覺得不好意思,臉上泛起難為情的紅暈。但為什麼我還要說呢?
因為我深受其苦。
我是一個農村走出來的娃,體會過其中的酸甜苦辣,所以我會奉勸各位,以後碰上什麼知識分子上山下鄉的活動,千萬不要去。那不叫體驗生活,那叫體驗“艱苦”生活。
那在敲程式碼的過程中,我就經常遇到一些實際的問題,由於無法充分利用資料結構,將資料之間的關係通過合適的演算法策略進行有效地儲存轉換,就導致程式的效能很低。
所以我勸各位新人,趁有大把的時間和精力,多投入一點到資料結構和演算法上面去。基礎知識就像是一座大樓的地基,它決定了我們的技術高度。資料結構和演算法就是最重要的基礎知識,學習它們的過程就像是在打地基。
上面這張思維導圖提到的資料結構在工作當中太經常使用了,頻率高得就像隔三差五會看到隔壁老王這個詞一樣。
對於演算法,如果覺得《演算法導論》這本鴻篇鉅製太過枯燥的話,可以選擇《趣學演算法》、《啊哈演算法》等一些非譯作的,相對趣味化的入門書。
可能很多人會存在這樣一個誤區:演算法在工作當中很少會用到,需要的時候面向搜尋引擎解決一下就行了。
但我想說的是,跳槽的時候很有用,因為一些大廠就喜歡考演算法。除此之外,演算法對閱讀原始碼也很有幫助;況且,誰不想做一名程式設計的藝術家呢?長期來看,大腦思考能力是一個人最重要的核心競爭力,而演算法是為數不多的能夠有效訓練大腦思考能力的途徑之一。
03、學會測試
為什麼開發還需要了解測試?
天真了吧!自古以來(其實也沒多久了),程式設計師就身兼兩職,既是開發工程師,又是測試工程師。
說到這,不由得想起一段傷心的往事。在我剛做 Team Leader 的時候,手下有一名新人叫小董,他竟然使用“=”號操作符而不是“==”操作符作為 if 語句的條件判斷。
可能很多讀者不相信:“怎麼可能啊???IDE 會檢測出來的!”交代一下背景,當時用的語言叫 ActionScript,和 Flex 配套開發富客戶端頁面——八年前了,估計沒幾個讀者知道這門技術了。
領導在日本出差,程式碼 Review 的時候被日方負責人查了出來,領導當場被罵得狗血噴頭,沒臉見人。我的遭遇可想而知,被領導罵得在廁所裡面委屈地默默落淚,畢竟我是程式碼負責人。
差點烏紗帽就丟了。這讓我對那些寫完程式碼不做測試的程式設計師恨得牙癢癢。
從那以後,我就養成了一個好習慣(甚至說是強迫症),所有我負責的程式碼(包括我自己寫的),在提交之前,程式碼 review、整合測試一個都不能少,提交程式碼的時候仍然要再次比對,確認無誤後再提交。
建議大家瞭解一下測試驅動開發,英文縮寫為 TDD,之前蠻流行的一種開發方式。測試與開發應該是相輔相成的關係。
04、編碼規範
規範化的程式碼看起來賞心悅目,讓人彷彿置身於中世紀的哥特建築中。
這裡必須提一提 Bob 大叔的《程式碼整潔之道》,這是一本每個程式設計師都要讀的好書。裡面提到的 KISS(Keep It Simple Stupid)原則,非常值得推崇。比如說:
-
整潔程式碼力求專注,每個函式、每個類和每個模組都應該全神貫注於一件事。
-
整潔程式碼簡單直接,從不隱藏設計者的意圖。
-
整潔程式碼使用有意義的命名,程式碼通過其字面表達含義。
-
整潔程式碼力求消除重複程式碼,提高程式碼表達力。
來看這樣一段非常糟糕的程式碼。
private boolean isEligible(int age){
boolean result;
if(age > 18){
result = true;
}else{
result = false;
}
return result;
}
複製程式碼
你能從中挑出幾個問題呢?
1))
和 {
之間沒有空格。
2)return
語句太多了。
3)程式碼過於臃腫。
優化後的程式碼是這樣子的。
private boolean isEligible(int age) {
return age > 18;
}
複製程式碼
那怎麼寫出規範化的程式碼呢?
1)找一份規範的程式碼模板,匯入到 IDE 中,儲存程式碼之前進行格式化。
2)使用 CheckStyle 或者 FindBugs 對程式碼進行檢查,規避一些新手愛犯的低階錯誤。
3)多看看阿里巴巴的開發手冊,裡面的一些建議還是非常值得參照的。
記住這句話:任何一個傻瓜都能寫出計算機可以理解的程式碼,唯有寫出人類容易理解的程式碼,才是優秀的程式設計師。編碼規範可以改善程式碼的可讀性,讓協作的同行擁有一個美麗的心情。
05、原始碼管理
在我最初參加工作的時候,原始碼管理工具用的還是 CVS,後來遷移到 SVN。近些年來,選擇 Git 的程式設計師漸漸多了起來。
記得我剛開始用 CVS 的時候,經常弄丟版本,被領導批評過很多次,因為用的不熟(忍不住傷感)。幸好當時負責的程式碼都不怎麼重要,丟了還可以重寫。
那為什麼要使用原始碼管理工具呢?答案如下。
- 多人並行開發
- 多人協作同一份程式碼
- 歷史版本管理
除此之外,還有一個重要的作用,防止甩鍋!大家都懂吧。
06、鳴謝
好了各位讀者朋友們,以上就是本文的全部內容了。能看到這裡的都是人才,二哥必須要為你點個贊?。如果覺得不過癮,還想看到更多,可以檢視我的個人部落格。另外呢,給大家一個承諾,我每週都會更新一篇《程式人生》和一篇 Java 技術棧相關的文章,敬請期待。如果你有什麼問題需要我的幫助,或者想噴我了,歡迎留言喲。
養成好習慣!如果覺得這篇文章有點用的話,求點贊、求關注、求分享、求留言,這將是我寫下去的最強動力!如果大家想要第一時間看到二哥更新的文章,可以掃描下方的二維碼,關注我的公眾號。我們下篇文章見!