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