昨天晚上出去和幾個朋友交流了一下,聊了不少,思考了一下這一年學習技術的經歷,趁着在宿舍養病,將本身的想法記錄了下來。java
從開始決定當碼農到如今將近兩年零三個月,起初是由於本身專業的科研不是本身想象中的那樣,加之對程序員的羨慕和崇拜,因而就走上了碼農的不歸路。做爲非科班出身的學生,和計算機院的學生比起來有先天的劣勢,例如好多的基礎課程未學習、周圍的編程氛圍太差等等,然而事實上:正是因爲不是科班學生,咱們比別人更努力,更願意付出時間去學習。android
去年四月底開始學android,當時是因爲實驗室項目(不是作應用層),今年6月份開始學了一個多月iOS,移植了寫在android上的功能。今年作了三個商業性質的軟件,1月份作了我第一個商業項目,4月份作了一個供路由器使用的app,八月份作了比較大的一個項目模塊相似於茄子快傳/QQ面對面傳文件,800多萬的用戶。c++
站在今天的角度來審視這一年走過的路,用一句話來總結就是:以爲什麼都沒幹呢,一年就過去了!程序員
隨着時間的發展,我對一些東西也有深的認識,就拿android開發來講。android開發學起來很簡單,上手很容易,高中生也可能會作,可是作android難道僅僅是拖幾個控件,擺幾個layout或者使用幾個漂亮的開源框架能作個還說得過去的手機app麼?顯然不是的。使用工具,使用輪子來拼湊產品只是最基本的要求,深刻原理纔是更重要的,不只僅要知其然,更要知其因此然!例如android中的各類manager,進程間通訊Binder,view視圖的繪製,觸摸事件的分發,消息機制,view動畫等等,若是不去研究,不去看原理,作一段時間就會遇到瓶頸期,由於會發現android開發就是接口api的調用,你可能會傻傻的認爲手機屏幕上顯示的一個界面就是activity,甚至都不知道傳說中的Java程序的啓動類main函數在哪。還有因爲android自帶的控件比較醜,作項目的時候會使用一些第三方的控件、效果,不能僅僅會直接拿來用這些,在達到必定的水平以後,要試着本身來實現一些好的效果,不只提升本身的水平,可能還會造福他人。在一個就是使用第三方的開源框架工具,好比常用的ImageLoader,Volley,他們究竟是怎麼實現的呢?這些都是用來學習的最好的資料啊!固然我目前還沒研究這兩個,不過接下來確定要看看。面試
因此我體會最深入的就是,作一門技術,會用只是最基本的要求,會使用很簡單,難的是要能深刻到底層的原理,必定要研究的深刻。知其然,知其因此然,固然並非讓全部人去重複製造輪子,而是在製造輪子的過程當中,對本身技術的提高絕對是很是很是快的。其實團隊開發中也有更重要的例如編碼規範、風格,模塊的解耦合等等,這個另當別論。之後工做了就不多有時間去研究了,跟着產品迭代的節奏會不多有時間去學習,因此必定要珍惜如今的時間。算法
java是作android的基礎,其實剛開始學android的時候,個人java基礎並非很好,好多都是根據c++的類比大體瞭解了一下。也是在今年,好好的把java的相關知識研究了一下,對語言的學習也不能僅僅停留在知道怎麼用的層次,照着教學視頻能實現各xx系統沒什麼用,基礎才最重要。有時間最好去研究其深層的緣由,這絕對是有益而無害的。好比java的集合具體是怎麼實現的?固然這和學過的數據結構是同樣的,只是jdk的開發者封裝的更好,代碼更加嚴謹,研究這些源代碼不只僅是對數據結構的複習仍是對大牛的編程思想風格的學習。還有若是不看代碼,怎麼知道hashtable和vector爲何是線程安全的,若是不懂原理,怎麼知道hashmap是亂序的treemap是有序的?還有java中高級一點的主題NIO(這是我作相似於茄子快傳/QQ面對面快傳功能的基本技術)、併發編程。不要認爲作android又不是作後臺服務器,學這些用處不大,這就大錯特錯了。事實上這些知識都是很是有區分度的,也是很是有用的。再深刻java要學的固然就是java虛擬機,這也是最近正在研究的內容,裏面關於內存空間劃分、垃圾回收、類加載的過程等等都是很是很是有用的東西。例如,能看懂字節碼,對理解類、對象的初始化過程就有很大幫助。編程
因爲下一年就要找工做,因此接下來學習的東西會更偏向於基礎知識。設計模式
android部分要在研究一些開源框架,圖片緩存加載庫ImageLoader,Volley通訊庫和一些框架層的源碼。api
java會按照java面試寶典上的內容再回回顧一下java的小知識,繼續看深刻理解java虛擬機。緩存
tcp/ip:其實做爲學通訊的,這部分掌握較好,不過還要認真看看。
算法:以前已經將數據結構還有常見的排序算法寫了一遍而且整理在了博客,由於我不想在基礎知識還不熟悉的狀況下就去刷題。接下來就要狂刷題,看劍指offer,編程之美。雖然我很反對應試教育。
操做系統:看一本操做系統的書/視頻。
設計模式:其實以前已經研究過一部分設計模式,android中最經常使用的觀察者模式、工廠模式,java I/O的裝飾者,集合中的迭代器等等,後面還要再學習幾種。
另外,再深刻挖掘之前所作項目中的相關問題。
幹任何一件事情,都不可避免的會走一些「彎路」,但是這是彎路幾乎是非走不可的,由於任何事情,你不經歷永遠體會不到。更況且,所謂的彎路並不必定是彎路,任何走過的路,犯過的錯,都會成爲往後成功的墊腳石。記得前段時間看知乎上有個問題:你有什麼道理後悔沒有早點知道?從這個角度來看,個人回答是:看書,看經典書。經典書籍絕對是最好的知識寶庫,之前沒意識到看書的重要性。事實上當真正研究了一本書,就能夠對相關方面有一個全面的掌握,更主要的是還能對一些問題有更深入的看法。常常說的一句話:光陰似箭歲月如梭時光荏苒如白駒過隙通常。如今最大的感觸就是時間過的真的好快,然而過去已經沒法掌控,那麼只有把握好當下。時間過得很快,必定要勤奮。
下面羅列一些我看過的java相關的很不錯的書,有些書不必定徹底看了。
Thinking in Java
Java併發編程實戰
Java Nio
深刻理解java虛擬機
深刻理解android內核設計思想
算法導論(前面部分)
TCP/IP 電子科大楊寧老師的視頻
設計模式之禪
effective java
還有一些我沒看過的,可是評價很是不錯的書
Java核心技術卷1/2
Java併發編程的藝術(已購買)
Android開發藝術探索(看了目錄就感受至關棒,絕對是好書)
鳥哥的私房菜(學android仍是要掌握一些Linux的)
hotspot實戰(翻過pdf,還不錯)
* *以上只是我我的的一些觀點,若是有什麼不妥之處還請諒解**