程序員到架構師需要的編程基礎
程序員到架構師的進階之路是非常艱辛和漫長的,不但需要掌握很多高級的知識技能,還需要有過硬的基礎知識。《Java架構師指南》就是這樣一本指導小白到架構師進階的書。本文摘取了這本書中的第一章節,主要介紹Java程序員走向架構師的基礎知識,還有開發環境的搭建。通過本文的學習,可以大致了解程序員的進階之路,也可更加深刻地認識到程序員的發展方向。
點此鏈接購買紙書
本書特別適合Java Web領域的開發人員以及剛步入職場的新手。本書通過講述Java架構師必備的知識技能,讓廣大讀者在原有知識的基礎上更上一個臺階,爭取早日實現架構師的夢想。
對于架構師的定義,每個人的看法都不盡相同,我結合自己多年的工作經驗,也只是大致定義了一個范圍,希望可以幫助到別人。讀者可以結合自己的實際情況,通過閱讀本書,不斷地擴展和充實這種范圍,以達到自己理想中的境界。“不想當將軍的士兵,不是好士兵。”在軟件行業中,也似乎有這樣一句話:“不想當架構師的程序員,不是好程序員。”雖然這看似是一種調侃,但從學習的角度來說,成為架構師,顯然是一個好的目標!人只有在心里有了目標,才會變得更加幸福。
如果你不希望一直停留在Java的初級階段,想在未來成為架構師,那么本書非常適合用來全面提高自己的開發水平。如果你想轉項目經理,那么本書同樣適合你,因為書中的每個項目都是完整的迭代過程。
1.1 程序員進階
大學畢業后,初出茅廬的菜鳥經過千辛萬苦,總算是找到了人生中的第一份工作。但是,隨著工作的開展,菜鳥所面對的問題越來越多。有些人堅持了下來,有些人中途放棄,有些人則在職業生涯中選擇了轉型。作為一名程序員,不但需要編寫大量的代碼,還需要對自己的職業生涯做一個規劃。結合前輩們所走過的道路,這個職業規劃大致是圖1-1所示的這個樣子。
圖1-1 程序員職業生涯
一般來說,從初級程序員到高級程序員需要經過5年的磨礪,這個時間段基本上是業界的共識了。而且,在眾多招聘信息中也可以發現程序員的起點都是需要兩年工作經驗的。也許,有些天賦異稟的程序員可能經過3年的刻苦學習也能達到高級階段,但是,他們的知識技能往往并不全面,可能只是在某些方面比較熟悉罷了。到了高級程序員的階段,可供選擇的方案就比較多了,大概有圖1-2所示的這3個走向。
圖1-2 程序員發展方向
如果高級程序員再向上進階的話,會面臨3個選擇。第一種方案是成為項目經理,負責管理加上部分開發。因為高級程序員對公司的項目是非常了解的,對公司目前的開發過程也駕輕就熟。如果本人有這方面的意愿,很容易勝任項目經理這個角色。而且,公司通常會從內部選擇項目經理,空降項目經理的方式并不是常態,歸其原因就是難以熟悉項目架構。
第二種方案是高級程序員可能更喜歡專著于技術,不喜歡出差和撰寫大量的項目文檔。在這種情況下,他可以成為一名架構師,專門負責維護公司的項目、產品方面的架構工作。如果公司有一定的規模,他可能會成為研發平臺的負責人。當然,這種情況的前提是該程序員沒有跳槽。
第三種方案是高級程序員可能經歷了若干年的開發后,對寫代碼已經深惡痛絕,絲毫感受不到任何快樂了,但他對公司的項目和產品又非常熟悉,也有深厚的研發積累。在這種情況下,他可以徹底轉型成為一名產品經理,純粹負責公司產品的規劃、設計、包裝,甚至肩負一定的市場職責。當然,成為產品經理的前提是公司的項目已經產品化或者正在產品化之中。所謂的產品經理,通常就是向技術部提出一個原型設計:“看吧,這就是我想要的東西,至于怎么實現,你們看著辦!”如果他懂代碼還好說,但如果不懂代碼,可能會讓程序員陷入抓狂狀態!
到了高級程序員的階段,很多人就開始思考:究竟是去做項目經理?產品經理?還是繼續寫代碼成為優秀的架構師呢?每個人的想法是不一樣的,所作出的選擇也是不一樣的,這跟自己的能力和性格也有一定的關系。
產品經理:一般則是公司已經將項目過渡到了產品后,才能發揮更大的作用。如果公司一開始只有項目,則需要大量的時間來積累,最終實現產品化。在這個過程中,往往不是很需要專職的產品經理,可能項目中的每個人都會對項目獻計獻策,來使項目更加通用化。產品經理自身也是需要積累的,如果他成功地設計了一款App,并且在市場上取得了極大的成功,那么他的職業生涯可能會因此鍍金,這個App將會成為他能力的體現。
架構師:專注于公司的研發平臺,管理框架方面的東西。例如,寫核心代碼,并且指導底下的開發人員合理地編碼,維護代碼庫。在小公司里可能只有一兩名架構師,但是在數萬人的公司里,架構師會非常多。在這種情況下,架構師有可能會成為程序員級別稱謂。例如,你在該公司待了8年,雖然你干的活一直是普通研發,并不負責實際上的架構,但是公司有正常的晉升渠道,你的級別就會從高級軟件工程師上升到軟件架構師。這種情況,在外包公司比較常見。
全棧工程師:是最近才興起的一個概念,但全棧工程師說到底還是程序員,類似于高級開發的角色,只不過是懂的東西比較多,前端和后端都可以做,技術比較全面。全棧工程師極大地拓展了自己的開發技能,成為了項目中的骨干成員,類似于技術專家的角色。一般而言,小公司比較喜歡這樣的人,招募一個可以頂3個。但從學習的角度來說,全棧依然是不錯的目標。因為只有成了全棧工程師,才更能接近架構師。
每種開發語言,都有自己領域的架構師,如C++架構師、PHP架構師,當然也有Java架構師了。架構師需要對公司的整個研發平臺了如指掌,清楚平臺中細枝末節的東西。他極有可能是陪伴著這個公司成長起來的程序員;也極有可能是在別的公司工作多年后跳槽過來的。前者對公司的項目、產品非常熟悉,甚至自己還動手寫過業務層。后者可能只是從大體上了解公司的研發平臺,毫不深入,但這并不影響他的發揮,真正的架構師看到代碼就有一種親切感,可以很容易分析出隱藏在代碼前后的業務過程。
Java架構師,至少需要在Java領域有5年的開發經驗。他需要掌握的內容很多,簡單點可以分為前端、后端、數據庫、服務器、中間件等。前端插件可以極大地提高開發效率,甚至在不需要美工的情況下做出時尚的界面,類似的插件有AngularJS、Avalon、Bootstrap、ExtJS、jQuery EasyUI、jQuery UI等,這些前端插件也可以稱作前端組件或者前端框架,種種叫法也看人的習慣了,沒必要吹毛求疵。除了這些前端插件外,還需要掌握JavaScript、HTML等技能。后端需要掌握的技能主要是Java、JVM、Servlet、Struts、Spring、Hibernate、MyBatis等,還有最近流行起來的Spring MVC、Spring Boot等。這些技能和框架只有綜合起來使用,并且合理地搭配才能發揮出最好的效果。至于效果能夠達到什么程度就需要看架構師的本事了。也許有的架構師可以把這個積木撘得很好,也許有的架構師在搭積木的過程中,這個積木就倒下了。數據庫方面需要掌握的內容有Oracle、MySQL、SQL Server,一般常用的數據庫大概就是這3個。當然近年來,對于架構師需要掌握的數據庫又有所增加,它們主要是代表了NoSQL的MongoDB等區別于傳統關系型的數據庫。但是,數據庫相關的內容有不少,例如,需要熟練掌握SQL的各種語法,還需要掌握數據庫性能的調優、備份和恢復。服務器并不是重點,但作為Java架構師,仍然需要有所了解。服務器包括物理服務器、云服務器,還有Web服務器,包括我們在開發中使用的Tomcat。中間件在一些中小型項目中并不怎么常用,如EJB技術、消息中間件ActiveMQ。當然,Web服務器也可以算作中間件,如Tomcat、Weblogic、WebShpere和JBoss等。
只有熟練掌這幾個方面的技能后,才能算是一個初級架構師。如果想成為大神級別的架構師,還需要學習更多的知識。Java架構師需要對這些技能非常熟悉,并且能像搭積木一樣把他們整合在一起,構建出成熟的、完整的軟件開發平臺,以供底下的程序員在此基礎上進行業務層的開發。但是,隨著軟件技術日新月異地發展,越來越多的框架進入眼簾,這對于我們來說既是好處又是壞處。好處是我們可以選擇更好的、更合適的框架來提高項目的性能,降低開發難度,簡化開發流程。壞處是可選擇的框架太多,以至于讓我們難以選擇。所以,本書為大家精心挑選出了一名合格的架構師所必備的專業技能和開發思想,以供大家學習和參考,爭取盡早地成為Java架構師。
1.2選擇開發工具
孔子曰:“工欲善其事,必先利其器。”這是一個千古不變的哲理,工匠想要使他的工作做好,一定要先讓工具鋒利,這樣才能發揮出最大的效率。這個哲理告訴我們,不管做什么事情,都要選擇合適的工具。那么在軟件開發的道路上,選擇一個合適的開發工具也是極其重要的事情了。Java的開發工具有幾種,這里不做太多的贅述,我們只需要對比它們的特點,即可從中選擇出一款最適合自己的。
Java中常用的開發工具有NetBeans、JBuilder、Eclipse、MyEclipse、IntelliJ IDEA等。其中,NetBeans是Sun公司開發的,JBuilder是Borland公司開發的,這兩個開發工具的功能和界面跟我們常用的Eclipse是沒有很大的區別的,之所以在市場占有率方面輸給Eclipse,完全是因為細節方面做得不好,還有在用戶感知方面不太好。曾經有網友也在社區里面說過這樣的問題,我嘗試使用過NetBeans或者JBuilder,但總是因為個人習慣的原因沒有堅持下來。可能Eclipse是大多數人接觸的第一款開發工具吧,這種先入為主的感覺會一直伴隨著我們。
Eclipse是完全免費和開源的,它的功能非常強大,開發起來也很順手。MyEclipse是在Eclipse的基礎上加上了自己的插件后的企業級集成開發環境,尤其善于開發Java、Java EE方面的項目。于是,在市場占有率方面Eclipse和MyEclipse非常高,這也在另一方面促進了它們的發展。這兩者其實是一個核心,所以選擇哪一個都看自己的習慣了。IntelliJ IDEA是Java開發的集成環境,在業界被公認為最好的Java開發工具之一,尤其在代碼提示、重構、J2EE支持等方面非常強大。其中有一點對程序員的幫助非常大,就是調試功能,此外在某些細節方面似乎比Eclipse做得更好。而且,IntelliJ IDEA與GIT結合得非常好,而Eclipse與SVN結合得非常好。時間久了,這一開發工具與版本控制工具相結合的特點,也漸漸被程序員們認可,甚至成了項目選擇開發工具的一種參考。
舉個例子,如果A項目列入了開發計劃,為了保持大家代碼的一致性,可能項目組內會統一使用開發工具。如何選擇呢?如果,這個項目使用SVN來管理代碼,那么大家就會優先使用Eclipse;如果使用GIT管理代碼,那么大家就會優先使用IntelliJ IDEA。當然,這似乎只是一種約定俗成的參考,并不是硬性要求。
在接下來的學習中,我們以MyEclipse和Eclipse為主來開發項目,并且會講述SVN和GIT的不同,讓大家在以后的工作中更加靈活地搭配開發工具和版本控制工具的組合。至于IntelliJ IDEA,因為它的入手門檻確實有點高,而且一旦選定,后面對于代碼的重構會非常麻煩(指Eclipse和IntelliJ IDEA之間),所以本書暫不做相應的講解。
另外,本書還會使用Eclipse相對較新的版本來做一些練習。其中,MyEclipse的版本是10.7,Eclipse的版本是Kepler,IntelliJ IDEA的版本是2016。SVN和GIT的版本帶來的差別并不大,所以并不對版本做具體的規定,MyEclipse10.7的界面如圖1-3所示。
圖1-3 MyEclipse 10.7的界面
Eclipse Kepler的界面如圖1-4所示。
圖1-4 Eclipse Kepler的界面
IntelliJ IDEA 2016的界面如圖1-5所示。
圖1-5 IntelliJ IDEA 2016的界面
1.3 安裝JDK
JDK是Java開發的核心,包含了Java運行環境、工具、基礎類庫。如果沒有JDK,Java開發是無法進行的,Java項目也無法運行起來。所以要做任何項目的開發,第一件事情就是安裝好JDK。接下來,我們才可以做更多的事情。
通常來說,每一個開發工具都會攜帶JDK,例如,MyEclipse 10.7自帶的Sun JDK 1.6.0_13,但是IntelliJ IDEA并沒有攜帶,需要自行配置。鑒于這種情況,我們在安裝完開發工具后緊接著就應該安裝合適的JDK。使用MyEclipse 10.7自帶的JDK也可以完成日常的開發,但這款JDK沒有進行環境變量的設置,可能在后續的開發中會有影響,而且這款JDK是混雜在MyEclipse 10.7的安裝目錄下的,給人的直觀感覺不太好。為此,我們需要單獨安裝一款JDK,而說到安裝JDK,就不免要選擇合適的版本。目前,JDK版本已經到了8,但是因為歷史原因,使用JDK 8來開發項目的公司并不多,第一個吃螃蟹的人會有驚喜也有潛在的風險。使用JDK7也是個不錯的選擇,但是因為本書中所涉及的項目眾多,為了項目的穩定性,還有學習的順序性,我們仍然使用久經歷史驗證的JDK 1.6版本,也可以稱作JDK 6,對于這個名稱不用糾結,是因為歷史原因造成的。JDK 1.6以上的版本才正式改變了叫法,如JDK 7,也有開發人員習慣叫它JDK 1.7。讀者可以在JDK 1.6版本下熟練掌握本書的內容后,自行更用更高級的版本來測試程序的運行性能和代碼編譯方面的不同。因為本書的主旨是講述常規的技術,所以對于JDK的新特性并沒有過多講解。
首先,需要在Oracle官方網站下載JDK 6。因為Oracle官網經常更新,具體的地址也會經常改變,很難有一個確切的-。但是,在Oracle官網可以找到Downloads的菜單,基本上Oracle公司所有的產品都可以在這里找到。另一種方法是可以在其他的網站下載JDK 6,例如,國內的一些網站,下載起來速度也相對比較快,Oracle官網下載JDK如圖1-6所示。
圖1-6 Oracle官網下載JDK
下載完JDK6之后,最好將它安裝在非系統盤里。接著,需要對剛才安裝好的JDK進行環境變量的設置,以方便我們在DOS系統下使用JDK命令。例如,最常用的編譯命令javac,顯示JDK版本的命令java -version,這些命令的使用都依賴于環境變量的配置。如果沒有配置,是不會生效的。
首先,打開Windows的環境變量界面,新建系統變量JAVA_HOME和CLASSPATH。編輯JAVA_HOME變量,在變量值里輸入JDK6的安裝地址,如D:\Program Files\Java\jdk1.6.0_43,點擊“確定”保存。接著,編輯CLASSPATH變量,在變量值里輸入
%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar,點擊確定保存。最后,選擇系統變量名為Path的環境變量,在原有變量值的基礎上追加%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin,點擊“確定”保存,添加環境變量的界面如圖1-7所示。
圖1-7 Windows環境變量設置界面
為了驗證Java環境變量是否設置成功,可以運行CMD程序,打開Windows的命令行模式,輸入
java -version
命令,如果環境變量設置成功,會在下面輸出當前的JDK版本號以及JDK位數,正確的輸出結果如圖1-8所示。
圖1-8 命令行模式下輸出JDK版本
配置好了環境變量,還需要在MyEclipse 10.7中配置JDK,使其可以在開發工具中使用。打開MyEclipse 10.7,在Preferences菜單中的Java選項下找到Installed JREs選項,就可以看到當前工作空間中的JDK設置,MyEclipse 10.7默認自帶一個JDK6,如圖1-9所示。
圖1-9 MyEclipse10.7自帶的JDK6
點擊Add按鈕,在彈出的Add JRE對話框中選擇Standard VM點擊Next按鈕進入下一步,在彈出的對話框中點擊Directory按鈕,選擇JDK6的安裝目錄,點擊確定。對話框會自動識別出JDK的相關信息,并且在JRE system libraries列表框中顯示出來,如圖1-10所示。
圖1-10 MyEclipse 10.7中設置JDK6
點擊Finish按鈕完成設置。這時,MyEclipse 10.7會自動回到Installed JREs對話框中,剛才的列表中會多出一欄我們剛剛設置好的JDK選項,在勾選框中選擇它點擊OK。至此,MyEclipse10.7下的JDK設置就成功了,在以后的開發工作中,我們全依賴這個JDK提供的基礎JAR包來開發和運行項目。
1.4 安裝Tomcat服務器
安裝好了JDK,我們就可以在MyEclipse 10.7中進行一系列代碼編寫工作了。例如,可以在開發工具中寫一些類,做一些練習。普通的包含main函數的Java類,我們可以通過Run As菜單下的Java Application命令來運行,輸出程序結果。例如,可以在MyEclipse 10.7下新建一個Java Web工程practise。具體的過程如下,選擇File菜單下的New選項,在彈出的右側菜單中選擇Web Project,在對話框的Project Name文本框中輸入
practise
,將J2EE Specification Level選項設置為Java EE 6.0,和安裝的JDK保持一致,點擊Finish按鈕,practise項目就建立好了。
選中practise項目的src目錄,右鍵選擇新建Package,在對話框的Name文本框中輸入
,點擊Finish,就可以給這個項目建立一個空包。接下來,就可以在這個空包里新建類。選中Java包,右鍵選擇New菜單下的Class,在彈出的對話框中在Name處輸入類名
Test
,并且勾選
,點擊Finish。這樣,在practise包下的第一個類Test就建立成功了。打開Test類,在main函數中輸入第一行Java語句
,使用Java Application來運行。此時,控制臺會在空白區域輸出Hello World。理論上來說,我們的第一個Java程序就這樣誕生了,盡管這個程序非常簡單!
如果只是在MyEclipse 10.7下安裝了JDK,這款開發工具能做的事情無非是編寫類,利用Java Application來運行,并且進行程序的測試。在這種情況下,我們的代碼中所設定的數值均是由自己輸入的參數;然后再根據程序中的處理邏輯,做一些簡單的運算;最后,輸出正確的結果。可是,程序開發遠遠不是這么簡單的事情,我們需要做的是開發一個具有交互能力的項目,而不僅僅是寫一段簡單的程序。要達成這個目標,我們就必須在MyEclipse 10.7安裝Web服務器來運行項目。在這里,我們選擇使用Tomcat服務器,這是因為Tomcat服務器具有簡單、易用的優點。
首先,打開Apache的官方網站,在下載Tomcat 6.0的頁面找到對應的軟件,在Core列表中選擇64-bit Windows zip的版本,將Tomcat 6.0保存到本地,并且解壓縮到本地的非系統盤內,如E盤的根目錄。下載Tomcat 6.0如圖1-11所示。
圖1-11 下載Tomcat 6.0
打開MyEclipse 10.7的Preferences對話框,在MyEclipse的列表中選擇Servers,這時,會出現一個列表,列出MyEclipse 10.7支持的服務器。選擇Tomcat,再選擇Tomcat 6.x。這時,對話框右側會出現Tomcat 6.x的配置項,選擇Enable,啟用Tomcat 6.x。點擊Tomcat home directory對應的Browse按鈕,在彈出的磁盤目錄列表中選擇Tomcat 6.0所在的位置,MyEclipse 10.7會自動補齊其他的兩處空白,點擊OK按鈕,Tomcat 6.0服務器就配置好了。
我們通過工具欄運行Tomcat 6.0,啟動成功后,點擊工具欄的Open MyEclipse Web Browser功能的圖標,在地址欄中輸入http://localhost:8080/,就可以看到Tomcat 6.0運行成功的畫面。接下來,就可以通過在Tomcat服務器里部署Web項目來進行正式地編碼工作了,運行界面如圖1-12所示。
圖1-12 Tomcat 6.0運行成功
1.5 Hello World程序
完成了前面幾節的配置,MyEclipse 10.7 的開發環境已經正式配置成功了。這時,我們可以在MyEclipse10.7下完成第一個Hello World程序來結束本章的學習。
在MyEclipse 10.7的界面中,我們可以看到Package Explorer視圖下有一個Java Web項目practise,這個項目是之前創建好的,并且在包里建立了一個Test類。我們通過運行該類,可以在控制臺里輸出了Hello World,說明這個類沒有問題。但是,這種簡單的編碼沒有交互性,是不能滿足項目的需求的。如果要開發一個項目,必須讓其在Tomcat服務器里運行,才能起到交互的作用。那么我們可以把practise項目部署到Tomcat服務器里試試效果。
選中practise項目,右鍵彈出功能菜單選擇MyEclipse,在彈出的右側菜單中選擇Add and Remove Project Deployments功能,在彈出的對話框中可以看到Deployments列表中為空,說明Tomcat服務器里并沒有部署任何項目。這時,我們點擊Add按鈕,在Server下拉框中選擇Tomcat 6.x,點擊Finish,把practise項目正式部署到Tomcat服務器中。部署好的 practise 項目如圖1-13所示。
圖1-13 部署好的practise項目
這時,我們啟動Tomcat服務器就會自動加載部署到服務器里的practise項目。通過控制臺,可以看到服務器的啟動日志,如果沒有報錯的話,說明practise項目沒有編譯錯誤,那么Tomcat服務器啟動成功。打開IE瀏覽器,在地址欄中輸入http://localhost:8080進行訪問,可以看到程序運行成功,但顯示的仍然是Tomcat服務器的默認頁面,這是因為我們沒有輸入項目名稱。
打開practise項目的WebRoot文件夾下的index.jsp文件,把title標簽里的內容修改成First Page,把body標簽里的內容修改成Hello World,保存index.jsp文件。再次打開IE瀏覽器,訪問http://localhost: 8080/practise,可以看到頁面上已經發生了變化,如圖1-14所示。
圖1-14 practise項目運行
1.6 小結
本文我們全面闡述了程序員的職業發展規劃,從而為廣大讀者提供一個晉級的參考。從程序員到項目經理、產品經理、架構師的過程至少需要5年。這5年是一個學習期,5年后就可以進行轉型了。所以,建議大家在工作的前5年不要頻繁跳槽,還是需要系統地掌握知識技能,積累經驗才是硬道理。頻繁跳槽不但讓自己的知識會出現斷層,也可能影響到自己在HR心中的形象。
接著介紹了Java開發中常用的工具,并且做了簡單的對比,相信讀者可以根據自己的喜好選擇其中的一款。因為本書主要采用MyEclipse 10.7作為開發工具,所以讀者最好先使用這款開發工具,其他的工具會在后面的章節中介紹。等對這些工具駕輕就熟的時候,再隨意切換。每個開發工具都有自己的優缺點,但不要人云亦云,選擇自己最習慣用的才是最好的。最后介紹了安裝JDK、Tomcat服務器的過程,并且開發了第一個Hello World程序。如果讀者已經牢牢掌握了本章的內容,這就是萬里長征邁出了堅實的第一步,相信在以后的學習當中大家的收獲會更多。
本文摘自《Java架構師指南》
《Java架構師指南》
王波??著
點擊封面購買紙書
資深Java專家多年經驗總結,全程項目驅動,首本完整介紹Java入門進階到架構師的編程技術圖書。
程序員走向架構師是必經之路,本書基于官方API的完美解讀,從架構師的角度來講解Java知識技能,并且從搭建虛擬機開始,學習常用的Linux命令,力爭做到使程序員在較短的時間內成功邁入架構師的殿堂。
推薦閱讀
2018年5月新書書單(文末福利)
2018年4月新書書單
異步圖書最全Python書單
一份程序員必備的算法書單
第一本Python神經網絡編程圖書
本文轉載自異步社區
軟件開發
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。