我認為,作為一名合格的程式設計師,精通一門語言只是最最基本的要求,除此之外,具備紮實的基礎知識、瞭解主流的技術框架、具備快速學習的能力也都非常重要。語言是幫助你實現想法的工具,而作為程式設計師來說最為重要的東西是語言背後的你的想法,而這些想法需要透過長期的基礎積累、經驗積累而獲得。
我從大二的時候開始接觸程式設計,到現在也有五個年頭了。這五年我走了不少彎路、踩了不少坑。至此收到阿里offer,也算是達到了我人生第一階段的目標。我把我這五年踩過的坑與大家分享,希望大家能少走彎路、在技術的道路上越走越遠。
迴歸正題,我覺得Java學習過程可以分為三個階段:
第一階段目標:打牢基礎
當你準備開始接觸Java前,你先等一等,因為你要做的第一件事是要打牢計算機基礎,而非直接學習語言。當我做的專案漸漸多起來的時候,我愈發地感覺到計算機基礎對程式設計師的重要性。這就像習武之人練習馬步一樣、達芬奇週而復始地畫雞蛋一樣。從短期來看,基本功的練習並不會立即出成效。也許這個過程會伴隨著枯燥乏味,但我們不能鼠目寸光,從長遠角度來看,一個程式設計師基本功的紮實程度決定了這個程式設計師技術之路能走多遠、能走多久。
所以我覺得,如果時間允許的話,花上大半年甚至一年的時間學習基本功也不為過。學習任何一項技術都是一樣,我們需要耐得住寂寞。基本功學習的過程必然會枯燥乏味,但它對我們未來的發展之路卻影響深遠。所以大家一定要耐得住寂寞,邁好、並且邁穩作為程式設計師的第一步。
計算機基礎有五大課程:作業系統、計算機網路、資料結構、演算法、資料庫。你究竟需要花多少時間來學習這些基礎課程,這取決於你目前的狀態。如果你是計算機專業的學生,並且仍處於大一或大二,那就請你珍惜每次上課的機會吧。聽老師講一遍、自己再學一遍、有問題還可以和老師交流,這樣的機會實在難得,且行且珍惜。
如果你並不是計算機專業的學生,那也好辦,調動你的情報蒐集能力,去周邊名校的計算機專業蹭課吧。我的學校靠近南大,就有很多同學潛入南大蹭周志華大佬的機器學習。去了之後才發現,200人教室裡人滿為患,原來都是前來蹭課的同道中人啊。
如果你即將面臨找工作,那麼就更應該抓緊猛攻這些基礎課程。現在的網際網路公司都很看重學生的基礎功底,因為學校裡做的專案在面試官的眼中大多都只能算是『玩具』(PS:大佬除外),所以專案經驗只能算是你的加分項,基礎功底才是第一要義。
第二階段目標:精通Java
作為一名Java程式設計師,對Java這門吃飯的語言必須要達到精通的程度。因為工作之後,每天接觸最多的就是Java,其次才可能是你的女朋友(當然前提是得有女朋友,逃)。所謂『精通』是指你不僅得了解如何使用Java,還得明白它背後的原理,也就是得『知其然,知其所以然』。比如,我們都知道使用關鍵字new可以建立一個物件,但這遠遠不夠,我們還得知道物件建立的過程是怎樣的?物件建立完成後它儲存在哪兒?什麼時候會被GC回收?也只在有了解了它背後的原理後,我們才能寫出更加高質量、高效能的程式碼。
當然,學習Java也不是一步登天,可以把他分成兩個階段去學習。第一個階段先把Java用起來,也就是隻需要做到『知其然』即可。當熟悉了Java的所有語法、API之後,就可以拿幾個專案練練手。專案能幫助你加深對基礎語法、對API的理解。當你擁有了一些專案經驗,對Java也有了自己的見解,接下來就可以深入Java背後的原理了,也就是開始『知其所以然』的過程。你需要學習JVM,瞭解Java的記憶體模型、記憶體的管理、垃圾回收、類載入機制;你需要學習併發程式設計,瞭解如何保證執行緒安全的前提下,提升程式的處理速度;你也需要開始嘗試閱讀JDK原始碼,瞭解Java容器用了哪些資料結構,在什麼樣的業務場景下選擇什麼樣的資料結構。PS:Java的整個體系結構請見上圖。
學習Java的確是一個漫長的過程,也只有你的時間、你的耐心、你的思考,才能慢慢地開啟通往Java世界的大門。
第三階段目標:鍛鍊快速上手新技術的能力
我覺得衡量一個程式設計師水平的高低,並不是看他精通多少種技術、擅長多少個框架,而是看他是否具備快速學習的能力。因為當下的技術層出不窮,技術更新迭代的速度遠超過我們學習的速度。所以具備快速學習的能力尤為重要。當你已經具備一定的計算機基礎之後,就可以有意識地鍛鍊自己的這項能力。那怎麼鍛鍊呢?下面分享下我學習的體會。
我覺得任何一項技術都遵循『2-8原則』,也就是在一項技術的整個體系結構中,最為核心、最為重要的部分可能僅僅佔這項技術整個體系結構的20%,剩下的80%是相對次要的。所以,如果我們需要在比較短的時間內快速上手一項新技術的話,那麼最為關鍵的就是要找準這項技術中20%的核心知識點,先把它們理解、吃透。這樣就可以馬上使用這項技術了。那麼剩下80%的知識點可以在專案空窗期慢慢地補充。這樣一段時間後,這項技術的整個體系結構都將被我們掌握。
我認為,作為一名合格的程式設計師,精通一門語言只是最最基本的要求,除此之外,具備紮實的基礎知識、瞭解主流的技術框架、具備快速學習的能力也都非常重要。語言是幫助你實現想法的工具,而作為程式設計師來說最為重要的東西是語言背後的你的想法,而這些想法需要透過長期的基礎積累、經驗積累而獲得。
我從大二的時候開始接觸程式設計,到現在也有五個年頭了。這五年我走了不少彎路、踩了不少坑。至此收到阿里offer,也算是達到了我人生第一階段的目標。我把我這五年踩過的坑與大家分享,希望大家能少走彎路、在技術的道路上越走越遠。
迴歸正題,我覺得Java學習過程可以分為三個階段:
第一階段目標:打牢基礎
當你準備開始接觸Java前,你先等一等,因為你要做的第一件事是要打牢計算機基礎,而非直接學習語言。當我做的專案漸漸多起來的時候,我愈發地感覺到計算機基礎對程式設計師的重要性。這就像習武之人練習馬步一樣、達芬奇週而復始地畫雞蛋一樣。從短期來看,基本功的練習並不會立即出成效。也許這個過程會伴隨著枯燥乏味,但我們不能鼠目寸光,從長遠角度來看,一個程式設計師基本功的紮實程度決定了這個程式設計師技術之路能走多遠、能走多久。
所以我覺得,如果時間允許的話,花上大半年甚至一年的時間學習基本功也不為過。學習任何一項技術都是一樣,我們需要耐得住寂寞。基本功學習的過程必然會枯燥乏味,但它對我們未來的發展之路卻影響深遠。所以大家一定要耐得住寂寞,邁好、並且邁穩作為程式設計師的第一步。
計算機基礎有五大課程:作業系統、計算機網路、資料結構、演算法、資料庫。你究竟需要花多少時間來學習這些基礎課程,這取決於你目前的狀態。如果你是計算機專業的學生,並且仍處於大一或大二,那就請你珍惜每次上課的機會吧。聽老師講一遍、自己再學一遍、有問題還可以和老師交流,這樣的機會實在難得,且行且珍惜。
如果你並不是計算機專業的學生,那也好辦,調動你的情報蒐集能力,去周邊名校的計算機專業蹭課吧。我的學校靠近南大,就有很多同學潛入南大蹭周志華大佬的機器學習。去了之後才發現,200人教室裡人滿為患,原來都是前來蹭課的同道中人啊。
如果你即將面臨找工作,那麼就更應該抓緊猛攻這些基礎課程。現在的網際網路公司都很看重學生的基礎功底,因為學校裡做的專案在面試官的眼中大多都只能算是『玩具』(PS:大佬除外),所以專案經驗只能算是你的加分項,基礎功底才是第一要義。
第二階段目標:精通Java
作為一名Java程式設計師,對Java這門吃飯的語言必須要達到精通的程度。因為工作之後,每天接觸最多的就是Java,其次才可能是你的女朋友(當然前提是得有女朋友,逃)。所謂『精通』是指你不僅得了解如何使用Java,還得明白它背後的原理,也就是得『知其然,知其所以然』。比如,我們都知道使用關鍵字new可以建立一個物件,但這遠遠不夠,我們還得知道物件建立的過程是怎樣的?物件建立完成後它儲存在哪兒?什麼時候會被GC回收?也只在有了解了它背後的原理後,我們才能寫出更加高質量、高效能的程式碼。
當然,學習Java也不是一步登天,可以把他分成兩個階段去學習。第一個階段先把Java用起來,也就是隻需要做到『知其然』即可。當熟悉了Java的所有語法、API之後,就可以拿幾個專案練練手。專案能幫助你加深對基礎語法、對API的理解。當你擁有了一些專案經驗,對Java也有了自己的見解,接下來就可以深入Java背後的原理了,也就是開始『知其所以然』的過程。你需要學習JVM,瞭解Java的記憶體模型、記憶體的管理、垃圾回收、類載入機制;你需要學習併發程式設計,瞭解如何保證執行緒安全的前提下,提升程式的處理速度;你也需要開始嘗試閱讀JDK原始碼,瞭解Java容器用了哪些資料結構,在什麼樣的業務場景下選擇什麼樣的資料結構。PS:Java的整個體系結構請見上圖。
學習Java的確是一個漫長的過程,也只有你的時間、你的耐心、你的思考,才能慢慢地開啟通往Java世界的大門。
第三階段目標:鍛鍊快速上手新技術的能力
我覺得衡量一個程式設計師水平的高低,並不是看他精通多少種技術、擅長多少個框架,而是看他是否具備快速學習的能力。因為當下的技術層出不窮,技術更新迭代的速度遠超過我們學習的速度。所以具備快速學習的能力尤為重要。當你已經具備一定的計算機基礎之後,就可以有意識地鍛鍊自己的這項能力。那怎麼鍛鍊呢?下面分享下我學習的體會。
我覺得任何一項技術都遵循『2-8原則』,也就是在一項技術的整個體系結構中,最為核心、最為重要的部分可能僅僅佔這項技術整個體系結構的20%,剩下的80%是相對次要的。所以,如果我們需要在比較短的時間內快速上手一項新技術的話,那麼最為關鍵的就是要找準這項技術中20%的核心知識點,先把它們理解、吃透。這樣就可以馬上使用這項技術了。那麼剩下80%的知識點可以在專案空窗期慢慢地補充。這樣一段時間後,這項技術的整個體系結構都將被我們掌握。