最近主要編程語言從 PHP 轉到了 Java。這一個多月的經歷對我頗有意義,因此寫文章記錄一下。css
編程語言各有側重,它們之間的比較沒什麼意義,因此本文只寫一下我對兩種語言的見解,以及我轉到另外一種語言的經歷,再分享一下最近學習 Java 的心得體會。html
文章歡迎轉載,請尊重做者勞動成果,帶上原文連接:http://www.cnblogs.com/zhenbianshu/p/8510943.htmlgit
說來人生際遇無常,由於從小會幾手 PS,直到大學,個人人生規劃都是作一個平面設計師。大四時因爲畢業和女友的壓力,最終才入了編程的坑。幸虧專業是計算機,應付考試的同時,學習專業課也爲編程打下了一些基礎。如今看來,以個人直男審美,第一批被阿里的魯班
這樣的人工智能替代的人中就有我。github
學習過程當中的雞湯再也不潑灑,這裏必須誇讚一下 PHP 很是平緩的學習曲線。語法簡單能讓人快速入手,解釋性語言的特性也讓人更易於理解,並且作出些什麼產生的成就感會讓人更願意去學習。不過 PHP 是一個易懂難精的語言,前期使用它進行簡單的開發很容易,中期須要學習 MySQL、Redis、Nginx 等知識,後期更是要了解架構、性能優化、C擴展等技術,因此 Web 靠 PHP 叩門真不是一句玩笑話。web
每種編程語言都是完備的,PHP 在各個領域都能有所發揮。我用 PHP 作過支付,也用 PHP 作事後臺多進程開發,還有用 PHP 作遊戲服務端的,PHP 快速開發快速部署的特性徹底契合敏捷開發的思想,節約了開發人員大量時間,對一些公司來講,快速開發意味着市場,意味着生存。面試
固然各個語言都有本身擅長的領域,PHP 適合敏捷開發、Web 快速迭代,但是面對純後端的高效率需求卻有點捉襟見肘,效率真的是硬傷。出於對後端網絡編程、併發編程的興趣,我開始考慮換一種編譯型語言。雖說到了架構師、技術專家的層次,各個語言意義不大了,但其中的過程仍是必需要考慮的。spring
因爲 PHP 是純粹的 C 系語言,我原準備繼續學一門 C 系語言,跟 PHP 互補,我在 PHP 調用 Go 服務的正確方式 一文裏也提過,個人選擇是 Go。後來,我也寫了一個小項目(Gotorch)來練手,也有 Go 爲主題的幾篇文章。Go 確實是一門很是適合 PHPer 轉的語言,天生適合併發,高效率,語言也很簡潔。數據庫
可是世事難料嘛,恰好公司有比較好的工做機會,面試經過後就這麼來了,這邊的主要開發語言是 Java,我也只好緊跟你們的步伐,上了 Java 的車。不過組內也有 Go 語言的項目,但願能有機會繼續瞭解 Go。編程
從 PHP 換到 Java,確實有不少地方不適應,雖然大學時也學過 Java,但是已經忘得差很少了,何況寫小 Demo 和工業級開發是徹底不一樣的,說說幾個轉變的點:後端
@
符號,不少功能莫名其妙地實現了,有些頭大,後來慢慢發現經常使用的也就那麼幾個,學習了用法,又瞭解了下反射,也就清晰了。類庫:Java 的類庫很是全,咱們須要的功能基本都有人提供,真是 琳琅滿目、亮瞎狗眼
。好比僅 Json 相關,在 maven 倉庫裏就能夠搜到 2000 多個結果。
類庫多了,一開始使用時更容易一臉懵,鏈接數據庫進行一次查詢有 N 多種類搭配方式,建立一個線程有好多種寫法, 並且各個 Java 版本都會添加一些語法糖。用哪一個方法都行,又沒有一個權威指示的話,反而很難讓人很難決定。
部署:項目的部署是讓我最難適應的,小小的改動就須要把全部代碼打成 jar/war 包,動輒幾十M 再上傳到遠程服務器上測試,若是有一點錯誤,又須要重來,很是蛋疼。並且部署框架有 maven/gradle,使用什麼包,每一個包須要注意什麼,也要學習適應。
生態:我認爲 Java 很大的一個優點就是生態,固然適應成本也高。有各類框架和組件須要學習,如 web 框架 spring系列、數據庫框架 mybatis、日誌框架 log4j2,測試框架 spock,JVM語言 groovy 等等,每一種學習都須要花費不少時間。
幸運的是,部門對代碼的要求很高,累積下來,讓我有不少優秀的源碼能夠看,能夠模仿;同事們也很是樂於助人,我有問題時甚至都追着解釋;利益於 Java 生態,網上也有不少工具和經驗能幫我簡化繁雜的操做。因此入門雖然累,但也還算平穩。
一個月多來,感受本身勉強入門了,雖然還有不少東西不熟悉,甚至都沒有接觸過,但再也不是以前的一頭霧水,面對小問題也一臉茫然了。因此我以爲也有必要作一個小小的總結,不只有利於本身進步,最好也能幫其餘 Java 新人少走一些彎路。
首先要說 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 時可使用;推薦學習使用 spock,語法簡潔,還能夠省去沒必要要的打包時間,快速調試,能夠在 IDE 裏一鍵運行。
至於 Java 語法的學習,我認爲是最不須要着急的,它須要代碼經驗的積累,不是幾天就搞得定的。
學習一門語言最好的方式就是閱讀源碼了,能夠是開源項目,也能夠是業務代碼。閱讀源碼時,能夠總結一下在何時使用哪一種數據結構,面對什麼樣的數據結構時使用哪一種語法最有效率、代碼可讀性最高。
而後是多寫,本身常常寫一些小 demo,想到什麼有意思的東西就動手去實踐,遇到有疑問的地方也要本身寫代碼試運行來驗證一下。
總結就是多讀,多寫,多問,多查。
既然入了 Java 的坑,那麼後續會多研究一下 Java 的技術,實現一些工具時也儘可能使用 Java,歡迎你們繼續關注。
新的一年,新的一輪折騰,這下算是完全走出了溫馨區了,新的語言、新的業務、新的部門,總之生命不息,折騰不止。順便寫下今年的計劃吧:知足工做需求以外,10+ 本技術書籍,25+ 篇技術博客,1+ 個開源小項目。
關於本文有什麼問題能夠在下面留言交流,若是您以爲本文對您有幫助,能夠點擊下面的 推薦
支持一下我,博客一直在更新,歡迎 關注
。