@程序員,請掌握這些核心生存技能


大咖你好,作為一個編程初學者,有什么需要注意的?

以上是一個讀者流年似水的提問。我把他的問題置頂了,但一直沒想好怎么回答,因為問題太過籠統了。后來,他也可能意識到了這一點,就又給我發了一條微信:

在嗎?老師。我們作為新人應該在編寫代碼的過程中注意哪些問題呢?

這個問題其實也不太好回答,因為要注意的問題蠻多的,多得就像霧霾中的顆粒。不過,有趣的是,流年似水這兩次的提問中,對我的稱呼大有不同。

“大咖”中略帶一些調皮,而“老師”就顯得過於庄重了。憑良心說,我喜歡“老師”這個稱謂。但我知道這頂皇冠戴我頭上,會把我 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 技術棧相關的文章,敬請期待。如果你有什么問題需要我的幫助,或者想噴我了,歡迎留言喲

養成好習慣!如果覺得這篇文章有點用的話,求點贊、求關注、求分享、求留言,這將是我寫下去的最強動力!如果大家想要第一時間看到二哥更新的文章,可以掃描下方的二維碼,關注我的公眾號。我們下篇文章見!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM