從 PHP 到 Java


前言


最近主要編程語言從 PHP 轉到了 Java。這一個多月的經歷對我很有意義,所以寫文章記錄一下。

編程語言各有側重,它們之間的比較沒什么意義,所以本文只寫一下我對兩種語言的看法,以及我轉到另一種語言的經歷,再分享一下最近學習 Java 的心得體會。

文章歡迎轉載,請尊重作者勞動成果,帶上原文鏈接:http://www.cnblogs.com/zhenbianshu/p/8510943.html

開始


PHP

說來人生際遇無常,因為從小會幾手 PS,直到大學,我的人生規划都是做一個平面設計師。大四時由於畢業和女朋友的壓力,最終才入了編程的坑。幸好專業是計算機,應付考試的同時,學習專業課也為編程打下了一些基礎。現在看來,以我的直男審美,第一批被阿里的魯班這樣的人工智能替代的人中就有我。

學習過程中的雞湯不再潑灑,這里必須誇贊一下 PHP 非常平緩的學習曲線。語法簡單能讓人快速入手,解釋性語言的特性也讓人更易於理解,而且做出些什么產生的成就感會讓人更願意去學習。不過 PHP 是一個易懂難精的語言,前期使用它進行簡單的開發很容易,中期需要學習 MySQL、Redis、Nginx 等知識,后期更是要了解架構、性能優化、C擴展等技術,所以 Web 靠 PHP 叩門真不是一句玩笑話。

每種編程語言都是完備的,PHP 在各個領域都能有所發揮。我用 PHP 做過支付,也用 PHP 做過后台多進程開發,還有用 PHP 做游戲服務端的,PHP 快速開發快速部署的特性完全契合敏捷開發的思想,節約了開發人員大量時間,對一些公司來說,快速開發意味着市場,意味着生存。

轉變

當然各個語言都有自己擅長的領域,PHP 適合敏捷開發、Web 快速迭代,可是面對純后端的高效率需求卻有點捉襟見肘,效率真的是硬傷。出於對后端網絡編程、並發編程的興趣,我開始考慮換一種編譯型語言。雖然說到了架構師、技術專家的層次,各個語言意義不大了,但其中的過程還是必須要考慮的。

由於 PHP 是純粹的 C 系語言,我原准備繼續學一門 C 系語言,跟 PHP 互補,我在 PHP 調用 Go 服務的正確方式 一文里也提過,我的選擇是 Go。后來,我也寫了一個小項目(Gotorch)來練手,也有 Go 為主題的幾篇文章。Go 確實是一門非常適合 PHPer 轉的語言,天生適合並發,高效率,語言也很簡潔。

但是世事難料嘛,剛好公司有比較好的工作機會,面試通過后就這么來了,這邊的主要開發語言是 Java,我也只好緊跟大家的步伐,上了 Java 的車。不過組內也有 Go 語言的項目,希望能有機會繼續了解 Go。

過渡


從 PHP 換到 Java,確實有很多地方不適應,雖然大學時也學過 Java,可是已經忘得差不多了,況且寫小 Demo 和工業級開發是完全不同的,說說幾個轉變的點:

  • 強類型:從弱類型到強類型語言,意外地過渡得非常自然,可能因為之前寫了些 Go 和 C,使用強類型語言並沒什么不適應,反而因為強大的 IDE 的代碼提示功能,代碼更不容易出錯,編碼更順暢了。
  • 注解(反射):Java 里注解非常繁雜,類、方法、變量上都是,不光基礎類庫、Spring 框架里有很多,還可以自己定義新的注解。一開始見到滿屏的 @ 符號,很多功能莫名其妙地實現了,有些頭大,后來慢慢發現常用的也就那么幾個,學習了用法,又了解了下反射,也就清晰了。
  • 類庫:Java 的類庫非常全,我們需要的功能基本都有人提供,真是 琳琅滿目、亮瞎狗眼。比如僅 Json 相關,在 maven 倉庫里就可以搜到 2000 多個結果。

    類庫多了,一開始使用時更容易一臉懵,連接數據庫進行一次查詢有 N 多種類搭配方式,創建一個線程有好多種寫法, 而且各個 Java 版本都會添加一些語法糖。用哪個方法都行,又沒有一個權威指示的話,反而很難讓人很難決定。

  • 部署:項目的部署是讓我最難適應的,小小的改動就需要把所有代碼打成 jar/war 包,動輒幾十M 再上傳到遠程服務器上測試,如果有一點錯誤,又需要重來,非常蛋疼。而且部署框架有 maven/gradle,使用什么包,每個包需要注意什么,也要學習適應。

  • 生態:我認為 Java 很大的一個優勢就是生態,當然適應成本也高。有各種框架和組件需要學習,如 web 框架 spring系列、數據庫框架 mybatis、日志框架 log4j2,測試框架 spock,JVM語言 groovy 等等,每一種學習都需要花費很多時間。

幸運的是,部門對代碼的要求很高,累積下來,讓我有很多優秀的源碼可以看,可以模仿;同事們也非常樂於助人,我有問題時甚至都追着解釋;利益於 Java 生態,網上也有很多工具和經驗能幫我簡化繁雜的操作。所以入門雖然累,但也還算平穩。

經驗


一個月多來,感覺自己勉強入門了,雖然還有很多東西不熟悉,甚至都沒有接觸過,但不再是之前的一頭霧水,面對小問題也一臉茫然了。所以我覺得也有必要做一個小小的總結,不僅有利於自己進步,最好也能幫其他 Java 新人少走一些彎路。

IDE

首先要說 IDE,一個好用的 IDE 可以幫你提示代碼、解決依賴、代碼追蹤、文件搜索、部署運行,毫不誇張的說,一個好的 IDE,能讓你省一半的時間。

這里我推薦 jetBean 公司的 IDEA,首先 jetBean 針對各種編程語言,有一系列的 IDE,如果你之前使用過他們的產品 ,現在換成 IDEA 沒有任何不適,當然,以后再使用別的產品也很輕松。

當然 jetBean 的產品都是收費的(雖然也有經過功能閹割的社區版),如果你認識在讀的同學或教師,可以借用一下他的 .edu 郵箱申請學生或教師賬號,詳情可以看鏈接: 學生授權申請方式,如果資金無壓力的話,還是支持一下正版,買一個比較省心。這里還有個IDEA使用教程:IntelliJ IDEA日常操作, 能幫你盡快熟悉 IDEA。

部署運行

接下來是部署運行的問題了,只要代碼能快速運行得起來,我們就可以對代碼進行調試,慢慢掌握其他的開發技術。

部署運行要解決類庫依賴問題,首先我們要知道我們需要哪些依賴,這個我們可以在 mvnrepository.com 查詢自己需要的類庫,點進版本號可以直接復制 maven/gradle 等依賴工具需要的語句。

部署框架推薦 gradle,易學易配置,對新手很友好,自己花半小時使用它配置一個 demo 后就能用起來了。使用時,查到依賴后只需要在配置文件中添加一句 compile domain:lib:version 就能使用 IDEA 的 Auto-Import 功能自動把 jar 包導入進來了。

運行代碼一般有以下方式:

  • 自己寫 psvm 方法,自己寫小 demo 時可以使用;
  • 使用 gradle/maven 打包部署在 tomcat 中運行,使用 spring boot 等框架時可以使用;
  • 使用 spock 等測試框架來運行,比較靈活,像測試一樣提供多個 case 運行程序;

推薦學習使用 spock,語法簡潔,還可以省去不必要的打包時間,快速調試,可以在 IDE 里一鍵運行。

Java 語法

至於 Java 語法的學習,我認為是最不需要着急的,它需要代碼經驗的積累,不是幾天就搞得定的。

學習一門語言最好的方式就是閱讀源碼了,可以是開源項目,也可以是業務代碼。閱讀源碼時,可以總結一下在什么時候使用哪種數據結構,面對什么樣的數據結構時使用哪種語法最有效率、代碼可讀性最高。

然后是多寫,自己經常寫一些小 demo,想到什么有意思的東西就動手去實踐,遇到有疑問的地方也要自己寫代碼試運行來驗證一下。

總結就是多讀,多寫,多問,多查。

小結


既然入了 Java 的坑,那么后續會多研究一下 Java 的技術,實現一些工具時也盡量使用 Java,歡迎大家繼續關注。

新的一年,新的一輪折騰,這下算是徹底走出了舒適區了,新的語言、新的業務、新的部門,總之生命不息,折騰不止。順便寫下今年的計划吧:滿足工作需求之外,10+ 本技術書籍,25+ 篇技術博客,1+ 個開源小項目。

關於本文有什么問題可以在下面留言交流,如果您覺得本文對您有幫助,可以點擊下面的 推薦 支持一下我,博客一直在更新,歡迎 關注


免責聲明!

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



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