標籤:瓶頸 基礎知識 接收 mem 鍛煉 nosql bpm 部落格 service
我也搞了幾年JAVA了。因為一向懶惰,沒有成為大牛,僅僅是一普通程式員,不愛玩社交網站。不愛玩微博,只有喜歡百度貼吧,潛水非常久了,手癢來給新人分享下從新手成長為老鳥的已見,也刷刷存在感,應該不比曝照差吧。
首先初識文法的階段,必需要學會怎麼操作對象,操作if和for。操作list set map,然後是線程、IO和jdbc什麼的。其餘的。若是一時不理解,能夠後邊需要時再學。
這階段完了,你能夠寫些能在控制台列印出來的小程式,鍛煉下邏輯思維。也就是號稱JAVASE畢業了,事實上只是是入門而已,假設要往WEB方向發展,這些倒是基本足夠了。
接下來要學HTML JSP SERVLET 資料庫 JAVASCRIPT TOMCAT。目標,寫出第一個動態網站,或許僅僅是個登陸功能,僅僅能展示下設定檔,但這是非常重要的一步。你要弄清楚的是。一個使用者的點擊產生的請求。是從哪裡發起,哪裡接收。哪裡處理。哪裡返回,你得理解瀏覽器和server的關係和分工,cookie和session,request和response。這個是個WEB開發的學習0基礎階段。這都是些JAVA誕生以來最原始的最官方的WEB開發技術,當然如今真正的項目非常少直接採用這些技術了,為了不斷提高技術的易用性、開發效率和可維護性、可擴充性,無數開源項目都是在這些原始技術的基礎上封裝、改進。所以這個階段不要盲目樂觀地跑去找工作或者對實習挑三揀四。你會被打擊到的。
好,初始階段完畢,開始進入WEB開發的正題,首先是傳說中的三大架構,struts hibernate spring成為熟練的增刪改查程式猿是必須的,在這個階段你還要理解為什麼要用這仨而不是那些JSP SERVLET JDBC,你要體會到寫MVC、 三層架構的優點。這個階段不要輕易質疑三大架構的價值。或許剛開始你會認為麻煩。認為他們有時候是多此一舉。一兩年後回過頭來你會認為少了這些架構你已經 非常難幹活了。這個階段還要避免的心態是能熟練地增刪改查了,就認為敲代碼只是如此,然後往簡曆上填個精通。這也是新手面試被批得體無完膚的原因之中的一個。假設 你學得好。這會應該能熟練地寫個部落格啊,小論壇啊之類的WEB項目了,也就是達到了就業的基本要求。
接下來就沒有固定模式了,你的第一家企業對你的影響會非常大。我見識過爛企業是怎樣毀新人 的。用著設計惡劣的架構,老掉牙的技術。不斷地耽誤新人的成長,有的員工在這樣的企業一呆數年,思維已經全然被錯誤觀點定型。深陷於公司業務和老系統中疲於 奔命,看似能解決這個問題,卻無法給公司帶來真正的進步,就像一個用了數年砍刀的人。就算再熟練,刀法再好,也打只是用槍的。假設離開了這個公司。恐怕非常難在 這個行業再立足。記得有個說法非常好,一個人用10年的時間反覆做頭一兩年做的事,你的真實工作經驗事實上還是一兩年。爛公司的老員工就是如此。在這頭一年裡,定個標準吧,你應該能做到的有:
1、把一些經常使用的瑣碎技術學會了,比方xml的作用和實際運用。怎樣操作檔案,怎樣運用日誌。怎樣簡化封裝經常使用的工具類,比方日期操作、編碼處理、分頁模組等 等,這些小東西會佔用你大量的時間去處理摸索。
2、把資料庫用好。資料庫不是會增刪改查就能夠了的,你要關注事務設定是否合理,是否有可能產生髒資料,是否要動用樂觀鎖悲觀鎖等等,關鍵資料出了錯,不管是技術上還是業務上都是非常麻煩的事。
3、懂得什麼是叢集。什麼是分布式。懂得怎麼向別的系統發請求,交換資料,webservice。
4、假設你也寫頁面,你要會用JAVASCRIPT,不一定要非常深入,你能夠用JQUERY取代,做到無重新整理的頁面操作以及AJAX請求。
第一年能達到這個程度,你絕對已經在平均水準之上了。
在我達到這個水平時,我有種似乎一切網站開發都不在話下的感覺,當然後來我非常快就發現了我還差得太遠太遠....這個階段想面個高薪的工作還是非常難的,僅僅能說達到溫飽線了。不用為柴米油鹽發愁。
下一個階段,你應該考慮你的代碼品質了。
1、多線程和非同步、並發的概念會忽然變得非常重要,由於在一個對效能有要求的系統裡,是不會同意你把各種瑣事都排著隊一件件去辦的。你不能老寫些a方法調b方法再調c方法再調d方法然後返回的代碼。
你開始想起有隊列這樣的東西,有runable這樣的東西。你開始認為自己的代碼高端起來了,和當年的增刪改查程式猿有天差地別。但同一時候麻煩也來了,你開始遇到安全執行緒問題,尤其是當你的程式跑在一個多機環境而不是單機環境裡的時候,你會對這些非常頭痛。
對於這些問題,Jms技術是個非常有代表性的東西。當然並不像ssh那麼經常使用。
2、你會探索資料庫效能實在不行。出於不甘現狀。或者趕時髦,你該去瞭解nosql了。memcached redis mongodb,眼花繚亂,沒關係。試著用用,能非常好地緩解mysql之類別關係資料庫的壓力。
3、出於公司某些業務須要,你可能會鑽研一個特定技術領域。比方全文檢索搜尋技術,lucene\solr,比方工作流程jbpm。比方許可權系統,單點登陸之類的,又或者某些特定業務領域的演算法研究。這些是你的加分項。
4、你開始發現你的代碼非常亂。久了以後自己都看不懂。反覆的。難以重用的代碼堆積如山,不想維護。BUG百出。於是你要開始重視設計模式。合理地改造下自己的代碼習慣,不再被僵化的SSH。MVC三層架構束縛住。
5、Google和各種資料是你進步的動力,極少再遇到必須請教別人才幹解決的問題。假設你這個階段還老是問別人,你的技術生涯也就快到頭了。
這個階段,假設你的交際和自我推銷能力不是太差,你的收入將是白領水平。至少接近了。
我 認為多數程式猿在工作多年之後都能達到這個水平。有的人僅僅須要兩年,有的人卻要用上五六年。在這個階段落伍的人,有的是出於天賦和思維所限。有的是出於對 技術缺乏熱情,有的是出於工作內容的制約。
等到年近中年,再也拼只是春節輕人,被淘汰出局,僅僅能在自嘲為屌絲和碼農的無奈中黯然轉行。
這是個非常重要的分水齡,你能不能繼續進步,能不能在30歲以後繼續從事技術工作,能不能在公司裡獨當一面,我認為就看你能不能超越這個階段了。我前面提到的爛公司裡的工作數年的專案經理,連這個層次都還沒達到...
接下來又是個全新的階段。
1、你要讀讀優秀開源項目的原始碼,你要搞懂一些當年不懂的基礎知識。你開始理解thinking in java的精髓,你能寫一些底層的代碼。有時還會認為自己封裝的比某些開源工具更好用更簡單。
2、WEB的痛點和重點永遠都在於效能、負載能力上,而如今網路的發達造成了資料量和操作密度的大大上升,硬體卻沒有對應的進步。你得試著更好地運用很多其它的server來協同工作。從WEB端到服務端到資料庫。全都須要叢集,須要分布式,須要合理的控制資料的流向,掌握好網站上下。一大堆機器的平衡。找出效能的瓶頸,找出穩定性和安全性的瓶頸,硬體出現問題,第三方技術出現錯誤,將被當成家常便飯融入到你的系統和代碼裡細緻考慮。
3、開始認為方案無比地重要,一將無能累死千軍將不斷應驗,一個不好的設計,一個不好的方案,會讓一群優秀的程式猿工作成果大打折扣。你要關注架構知識,不能再滿足於SSH三層架構究竟。領域驅動設計,面向事件開發。敏捷開發等等一系列的思想在關鍵時刻能決定你項目的生死,這個階段不再有標準範例讓你照抄,你僅僅知道思想和原理,實踐卻須要自己不斷嘗試和改進。
4、多 關注各種雜七雜八的開源技術。有些你可能前面已經接觸過了。和通訊有關的,和整合式開發環境有關的。和架構有關的。各個領域你都應該能信口說上幾個主流技 術,儘管你可能僅僅是聽說過,瞭解。但關鍵時刻你得知道怎樣去選擇技術,並高速掌握它。你還會去考慮嘗試下別的語言,這裡不是說轉向什麼C++ C#之類的,那和JAVA程式猿不相干,我說的是一些執行於JVM之上的語言。比方scala和groovy。初識他們時你會認為java真的老了。但當你回到一個綜合性的大型項目中。又會認為java積累下來的整個體系技術是如此完好,就像一個工業化標準一樣。
你能把這個階段實踐好,勝任專案經理。乃至中小公司的技術總監都是能夠的。
不知不覺寫了這麼多了。以上是我個人眼裡的一般向JAVA EE發展線路,限於篇輻也不全面。實際個人成長路線可能由於工作內容的不同差異會非常大,有的人偏向了底層研究,有的人偏向了業務需求設計。有的帶有濃重的行業色彩,並且技術之外,還有非常多知識也非常重要.w做JAVA沒有輕鬆的方向,但一個對技術抱有興趣的人,走到這一步時,仍然會對開發抱有熱情,想要寫出好的項目。純為了生計而工作的程式員是走不到這一步的。
暫且收手,希望以上能讓J8的新人們瞭解將來要面對的大致狀況。同一時候也抱著打擊下小朋友們幼小心靈的邪噁心理就此按下發表button。
能完整看完的同學,在此表示欽佩。我想當年的我也未必能看完這樣的又臭又長的敘述...
本文轉自百度貼吧。僅供學習和參考。
Java學習之路(轉)