談談Java程序員進階的那些知識和方向
談談Java程序員進階的那些知識和方向
記得前段時間看過一篇文章談到一種程序員叫野生程序員,戰斗力極強,可以搞定一切問題,但是通常看問題抓不到本質,或者說是 google/baidu/stackoverflow/github的搬運工,其實個人覺得也沒什么不好的,聞道有先后,術業有專攻,確實有工作崗位就需要這樣的職位。但是計算機行業的發展有其方向,工程師的職業發展也有其方向,隨著經驗的積累,可能這樣的人回頭再看看自己寫的代碼也會覺得不太好。那么如果有一天這樣的人想換工作,或者應聘體質比較完整的公司,可能還是需要潛心修煉的,下面筆者從兩個方面談談Java程序員進階的那些知識和方向,筆者不打算從基礎的東西講起,比如Java語言基礎,多線程,IO,如果有責方面的需求請參考領域內的那些神著,但是切記,最好看原版,遠離粗制濫造的翻譯版。
1. Paradigm
除了Java語言基礎,通常在每種語言中還有很多paradigm,這些paradigm往往是衡量老鳥和新手的地方,比如函數命名,異常處理,泛型等等,下面用異常處理的兩種類型來說明,筆者見過很多的Java程序員寫過很多年的代碼仍然分不清楚其中的區別。
Checked 和 unchecked exceptions
Unchecked exceptions
一般用于表示程序中的Bug, 比如函數調用中的非法參數異常,Java 創始人對Unchecked exceptions的解釋是Unchecked exceptions是通常不可以恢復的運行時異常,換句話說,Unchecked exceptions 其實就是RuntimeException,常用的Unchecked exceptions有IllegalArgumentException, NullPointerException, 和 IllegalStateException,Unchecked exceptions通常不需要添加到函數簽名列表,并且在調用方不需要強制使用try..catch。
Checked exceptions
通常用于表示函數執行過程中的一些pre condition 沒有得到滿足,這些條件通常超出了函數的控制范圍,比如無效輸入,數據庫連接問題,網絡異常,文件丟失等問題,Checked exceptions的父類是Exception,Checked exceptions需要添加到函數簽名列表,并且在調用方需要強制使用try..catch來捕獲Checked exceptions。
2. 效率和速度
記得有一次一個朋友的老板和客戶談了一個項目,客戶想先看看效果然后做決定某些功能是不是他想要的,于是老板問下面的一個工程師需要多久做出一個demo,這個人想了一天,說最快也要一個月,老板覺得太慢,于是問另外一個工程師,他給出的結論是demo只需要3天,結果3天的確實做完了,而且沒有加班。那么為什么差這么多呢,腳本語言,腳本語言可以大幅的提升工作效率,特別是原型設計階段,下面以Groovy操作XML為例加以說明。假設有很多這樣的XML數據需要處理,試想一下如果使用Java會是一番什么樣的景象呢。
<books> <book name="Effective C++"> <author>Scott Meyers</author> </book> <book name="More Effective C++"> <author>Scott Meyers</author> </book> <book name="C++ Primer"> <author>Stanley B. Lippman</author> </book> <book name="Core Java"> <author>Cay S. Horstmann</author> </book> <book name="Effective Java"> <author>Joshua Bloch</author> </book> </books>
下面演示一下如何通過Groovy Script駕馭上面那段XML, 輸出配對的書名和作者,并且過濾出所有Scott Meyers的著作,可以看出,除了打印輸出,幾乎所有的需求只要一行代碼就可以解決。
println"--solidmango design start--" languages = new XmlParser().parse(‘TestXML.xml') println "Books and authors" languages.each { println "<<${it.@name}>> authored by ${it.author[0].text()}" } def languagesByAuthor = { authorName -> languages.findAll { it.author[0].text() == authorName }.collect { it.@name }.join(', ') } println"-------------------------" println "Languages by Scott Meyers:" + languagesByAuthor('Scott Meyers') println"--solidmango design end--"
輸出:
--solidmango design start-- Books and authors <<Effective C++>> authored by Scott Meyers <<More Effective C++>> authored by Scott Meyers <<C++ Primer>> authored by Stanley B. Lippman <<Core Java>> authored by Cay S. Horstmann <<Effective Java>> authored by Joshua Bloch ------------------------- Languages by Scott Meyers:Effective C++, More Effective C++ --solidmango design end--
小節
人總是要成長的,大公司在招聘的時候通常會考量一下面試者是否懂球,希望大家共同進步。