前言
- 進入IT領域,就像進入大海—浩瀚而廣闊。然而,它又很容易讓人迷茫,不知所措。因此,在IT的海洋中,找好一艘船特別重要,這艘船帶你前進、減小迷失。這艘船或許是一我的,或一本書,又或許是一篇文章。
- 然而在現實的大學生活中,在咱們普通院校中,其實更多的多是忙忙碌碌,或者碌碌無爲。或者就是按照課本循規蹈矩,學着一些陳舊,或者本身不喜歡的東西。到最後就是那種啥都會、啥又都不會的人。
- 筆者爲一個即將進入大四的學生,在這個領域的學生生涯也算是感觸良多吧,本身算不上優秀可是也不是無所事事的那種人。在大一和大二荒廢和浪費了太多時間,往往想到都會後悔上一番。但願後人可以引覺得戒!
- 在學習一門語言,或者一門技術,你首先要先了解這門技術,這門語言在世界,在中國的市場份額。以及火熱程度。有些語言漸漸暗淡。而有些語言逐漸興起。
- 當前比較火熱的語言大體有
java
、python
、c
、c(嵌入式)、javascript
、typescript、c#、R、go、kotlin(安卓)、scala(大數據)、ruby、php、matlab、dart(flutter跨平臺移動端)、swift(蘋果)、objective -c(蘋果)、shell腳本、lua腳本等等。
- 選擇一門語言要根據你的方向來。好比你要學習後端。那就java、python、php、c#、或node.js。若是搞安卓那確定java、kotlin、js(混式開發)。若是大數據那確定是java、scala最好,其次python也行。若是搞人工智能算法那確定是python、matlab。數據分析能夠考慮R、python、matlab。若是你想搞爬蟲,那python確定最好選擇,固然java等其餘語言均可以。若是你是競賽ACMer。那c 確定是你的拿手菜、也不排除部分鬼才用java哈。
- 筆者從大衆角度仍是建議要熟悉掌握一門編程語言。對於做爲學習的基礎語言。建議從
java
或者c 開始。後續能夠學習python。go等語言。
- 對於方向,雖然籠統的說有web開發、大數據、人工智能、物聯網、雲計算、運維、測試、網絡安全等等。可是對於普同窗軟件的大學生來講主要的仍是·
前端
、後端
、運維
、大數據
、測試這些。
- 對於不少人說的或者當前炒的火熱的
人工智能、爬蟲
那些。我只能說很大程度那就是一個坑吧。由於大公司除了一些作搜索引擎的百度、谷歌、360他們利用爬蟲 算法 存儲作搜索引擎。而其餘大公司他們都有本身產生的數據、他們更多致力於這些數據的處理,分析。而不是想着怎麼爬。還有就是理性看待培訓機構的python吹
,python是很方便簡單,是能幹不少事情。對於鼓吹的爬蟲學到後面的拓展方向。要麼是擴大量分佈式方向拓展。要麼就是分析JavaScript各類加密。若是是安卓等app還要反編譯看源碼查看java代碼的邏輯,之前記錄的淺談網絡爬蟲。而AI方向
衆所周知通常非985/211碩士很難找到
。而且AI重要的是數學和算法,跟編程語言關係也不大。python僅僅是一個工具
而已。
- 根據方向市場大部分需求仍是
前端、後臺、算法(要求很高)
。前端和後臺的需求遠遠超過其餘的方向人員。由於全部網站的其餘開發功能都要依賴於前端和後臺。而且隨着html5流行。web能幹的事情也愈來愈多。這也極大的搶佔了桌面應用和原生安卓、蘋果應用。因此我的建議後端、前端、運維三個方向選擇一個。固然。具體選擇方向仍是要根據興趣來,你喜歡大數據(工程類要求不是很高,數據挖掘算法要求高),人工智能,爬蟲,遊戲開發,桌面開發等你均可以作。只不過再選擇方向時候要儘早
。不要好高騖遠
。根據本身所在院校、本身實際水平。以及計劃研究本身想要研究的。
你是想要進大廠
,仍是想進小公司
呢?
對於一個普通本科生,極可能真正步入學習的時間很少。而且可以掌握的知識的廣度和深度也是有限度的,還要考慮學習環境的影響。要慎重選擇學習的側重點。javascript
- 相進大廠,那麼若是裸的只會java後端技術是不夠的。在校招階段進大廠更多知識的要求不是廣度,而是深度。好比
操做系統
,網絡
,數據結構和算法
,以及jvm
,和java的基礎知識須要熟練掌握。而框架和一些高級中間件須要你瞭解或簡單應用。可是大廠就那幾個,競爭壓力仍是比較大的。
- 想進小公司,其實不少小公司的要求特別高,而且不少小公司乾的活也多必定程度可以使得技術快速成長,也有很多人先到小公司積累技術而後跳大廠。小公司更多看中你會的技術有哪些,會那些框架,中間件而相對不太注重那些底層。
- 若是你要就業必定要提早幾個月準備面試,準備基礎,進行復習,github上的javaguide力薦。
同時,也不要有心理包袱,不要認爲本身是雙非的大學就進不了大廠,若是學習的早,自身積累夠多,夠紮實,用心準備那麼進大廠也是沒問題的。php
我的感受在學校的學習過程當中主要有兩大障礙。一個是我的障礙,另外一個是學校障礙。css
- 不瞭解就業的壓力。總把事情交給’明天’,之後。或者把領域看的很簡單,又或者好高騖遠,看不上當前所學,又不拓展新知識。
- 還有 混日子等臨近畢業補習找工做。這種就是低薪碼農,和容易被淘汰的。IT的每個技術棧都很深,都須要長期的沉澱才能變強。
- 考研黨會認爲:我要考研。我要考研,我不要學這個,我要作研究。你作研究,研究生基本是算法或者底層深刻的研究。有些甚至連基本知識、語法都不會,準備用寶貴的兩年半去從0開始麼。這裏就再也不吐槽了。若是想要考研的也要爲本身的未來打算作鋪墊。好比你想未來研究機器學習算法。你能夠刷刷題提升編程思惟能力,學個爬蟲可以抓取一些數據。
爲本身之後作個鋪墊
。
這個可能有些學校好一些。可是對於咱們學校的教學方案和課程。真的很想吐槽一下。雖然學習是我的的事情,可是在當前教育制度下不少學校也有沒法推脫的責任。html
- 課程陳舊、冷門課程:IT發展迅速、技術更迭較快,然而不少學校課程甚至五、6年都不改。就好比我本身咱們瘋狂學C#,sqlserver,windowsapp(windows應用商店app),.net微軟這些玩意。若是認真學習出來真的是沒啥用——
不迎合市場
。對於這些,若是你是忠於技術的感受仍是要有所取捨。若是你要是鑽研你本身的技術一直鑽研下去那麼你確定會慢慢沉澱,收穫不少。可是學科成績就會下降甚至是掛科。對於其餘更深的影響這裏就不分析了。
- 還有些學校瘋狂開設相關性不大的課程 好比日語,瘋狂開硬件課程。確實佔用大量學習時間。若是在遇到一些要求很嚴格的老師,真的是欲哭無淚。
- 對於這些障礙,你要認清本身大學期間想要收穫的是什麼。而後自行決定取捨。若是你是想從事技術就業,我的感受學業成績沒那麼重要、能夠多關注技術,多作項目對成長、就業的好處會更大。可是對於
操做系統
,數據結構和算法
,網絡
這些課程也是程序員內功區分的很大準則。仍是要認真學習的。
這裏經過我的過程淺談一些java方向學習的建議前端
萬歲入門難。當你敲起hello world跑起來,那其實算不上入門。論上入門應該是把Java的基礎都掌握吧。javaSE是java的核心和基礎。只有這塊學好在後面閱讀其餘代碼、框架才能更加輕鬆容易。vue
- 對於入門的書籍,其實仍是推薦
,內容豐富而通俗易懂。跟着書上案例敲demo就很容易入門。若是認爲這本很簡單,能夠買一本
,其餘的書暫時就不建議買。
- 對於入門的視頻,其實比較多了,像
網易課堂,騰訊課堂,慕課
,這些在線教育平臺有不少免費課程,適合入門。而且淘寶上也有不少培訓機構的課程,也是至關不錯。好比黑馬,尚學堂,傳智播客
,各類能夠從淘寶買的到。
- 對於入門的資料,其實比較多了。基於微文章,博客等的流行,愈來愈多好文章涌如今stack overflower,
csdn
,博客園
,掘金
,今日頭條,簡書,微信公衆號以及我的博客上,因此要充分利用搜索引擎
獲取資源。
- 對於編譯器,入門建議eclipse。idea(入手須要時間)也能夠。若是用idea最好先找一下idea搭建項目流程和介紹。二者編譯器有些不同。java基礎學習建議eclipse。javaweb建議使用idea。不建議使用myeclipse,感受太臃腫。
- java基礎:
包過安裝環境,第一個helloworld,命名規範,數據類型,運算符,控制語句和方法,數組,字符串,面向對象,異常,泛型,以及一些api 例如正則、math、大數等模塊。這部分比較簡單,跟着書上、視頻、博客的demo跟着敲就可以理解。對於一些模塊不必定須要當即徹底掌握。好比Math類有不少數學計算方法,你掌握一些經常使用的求平方、根號能夠之後用到再慢慢積累。還有正則和大數模塊在入門階段要求也不是很高。
- java 進階:
對於進階部分的內容。都是java處理問題的利器
!,而且都很重要。
- io(熟練掌握):在後面javaEE開發中,或者實際項目中。不少涉及到文件傳送,須要對IO的api熟練掌握,而且io的拓展也比較多有NIO,BIO等等。
- 集合(熟練掌握):Map和List在開發過程當中使用是很是多的。而且在面試中也會常問Hashmap,currentHashMap,ArrayList、LinkList相關內容。而且在寫算法題,寫項目時候集合也是必不可少的部分。
- 網絡編程(瞭解):瞭解socket編程,tcp/udp編程。若是喜歡網絡編程或者想研究通訊方面或者一些網絡傳輸中間件要深刻了解網絡編程。
- 多線程(先了解熟悉):這部份內容比較深。在入門學習可先了解熟悉,由於等java有必定基礎還須要對多線程進行深刻學習。由於在大型項目中會涉及到線程安全問題、同步問題。都須要多線程方面的知識。
- 反射(先了解):反射的功能比較強大,對於不少人來講仍是太難了。這部分在入門學習建議瞭解。若是後面有能力能夠深刻學習。由於當前流行的spring,mybatis很大程度是依賴反射去完成的。
- jdbc(掌握),jdbc在jsp/servlet中關於數據庫的操做幾乎必不可少,這部分在javaEE會二次學習。
- javaswing(直接跳過):java在桌面編程並無太大優點,雖然eclipse,idea,webstrom,pycharm等衆多編輯器是java開發的。但java開發桌面效率仍是偏低。難度偏大。可是不少老師的課程設計會基於javaswing的管理系統。若是你想學也能夠研究吧。可是我的以爲還不如多花點時間用web作一個管理系統呢。
前言html5
- 在從javaSE剛過分到javaEE的時候,筆者初期感到深刻不適,甚至也中止了很久。由於對一些概念沒搞清楚而且有一點畏難的思想。所以也耽誤了很長時間。由於以前的javase只有java代碼。而javaEE有java代碼,又有啥javabean,serverlet,jsp,js/css,xml,tomcat,還有session,cookie系列名詞。後面還有啥maven,框架啥的。這些沒有接觸的概念曾經一度阻擋本身學習。
- 其實當你有這些問題時候,建議你兩點:一就是先百度把各個名詞先百度一下,先弄清楚這些玩意是幹什麼的。二就是建議你找個系統的視頻課程或者教程跟着學習,他們會帶着你一步步更新認知和了解。可以少走不少彎路。
- 這部分還有一個很重要的就是省略得當,有些技術過期的、陳舊的不須要學或者不須要深學。好比jsp頁面語法,strus2,hibernate,jsp整合javabean等等。瞭解就好。
- 這部分應該是javaEE的基礎部分吧。推薦這部分能夠在
菜鳥教程,或者易百教程,或者較爲體系化的結構能夠參考。
- 這部分感受總要的仍是cookie、session、表單處理、文件上傳、文件下載、servlet3.0新特性、過濾器、監聽器須要掌握。而jsp對應的內容和在jsp嵌入java代碼稍微瞭解吧。由於如今用jsp作模板引擎的很少而且先後端分離已經成爲潮流。也就是——jsp有點過期了。
- 這部分跟着教程瞭解每個特性,把每個組件整合一下就ok,不須要利用這部分的技術作太多的項目。至於websocoket若是作web小遊戲或者通信能夠研究。但市場有不少封裝好的拆箱即用。
- 上一代的傳統框架爲ssh(spring,strus2,hibernate)。可是那套體系很陳舊,不多有公司使用了。因此不必學。如今更多的是springboot mybatis。springboot是整合spring相關內容,使得開發減小配置,更加方便。因此仍是要先學ssm,而後再springboot。
- 對於學習順序,筆者建議先從mybatis,而後spring,而後springmvc。而後整合spring、springmvc、mybatis。而後再學習springboot。
mybatis
學習:除了看視頻之餘。推薦一位博客園的博主孤傲蒼狼
寫的mybatis教程,感受寫的特別棒。固然,你也能夠在其餘教程上學習mybatis的教程。對於mybatis半自動化ORM框架(基於jdbc封裝)。寫sql,封裝成一個接口調用。比起jdbc方便不少,極大提升效率。
Spring
學習:spring 主要ioc和aop。對於入門階段要熟練掌握ioc。aop能夠先放一放。我的以爲到後面有項目業務需求時候能夠再學。
Springmvc
: 這部分學習能夠精簡得當,由於不少教程可能仍是用大量model(modelAndview)。以及el表達式渲染數據。這部分若是專一我的開發能夠多學一點。對於spring和springmvc。
ssm整合
:筆者記得當初在整合ssm項目的時候是廢了很大一把勁。剛開始用的myeclipse用它下載部分spring的jar包。而後整合的時候又是各類報錯。而後又找各類缺失的jar包。而後又是各類版本錯誤。找bug。最終好容易整合到跑以來。可是這樣項目不易於管理。又項目轉移到IDEA.用maven管理jar包。百度不少能跑的整合方案卻很少。而後到最後好不容易找到完整的跑起來。因此在學框架的時候最好就是從開學就用maven管理依賴jar包。對於若是有整合難題能夠到github找ssm項目copy修改。固然你也能夠關注筆者公衆號:bigsai 筆者也很樂於幫助😀。
springboot
: 當你學完ssm轉移到springboot就很容易。只須要注意一些規範和語法。一個ssm項目充斥着大量的xml配置文件。讓項目看起來很是的臃腫。而springboot配置簡單。用maven管理項目。而且傳統ssm配置其餘中間件又要多很多xml。對於這些springboot都作了優化。對於springboot學習教程,推薦程序猿DD和battcn兩位博主的我的blog。固然筆者也寫過寫springboot的demo放到github也歡迎參考。
- 上述學完也只能說是後端世界的冰山一角吧。然而在後端世界還有不少知識須要掌握。好比一些中間件Nosql,MQ消息隊列,Elasticsearch/solr搜索,nginx反向代理,zookeeper等。還須要掌握一些shiro/spring-security安全框架。jwt token生成框架,quarz定時,swagger2 restful接口生成等流行框架。不少中間件初用比較簡單,可是深究是很複雜的,若是想要強,最好能
熟練掌握一箇中間件的各類應用方式和場景
。好比精通redis,或es,或某個mq。
- 在微服務方面有dubbo一套和springcloud一套。主要注重服務的拆分和治理,當前dubbo用的挺多,性能也比較好。可是遇到更新瓶頸。而springcloud興起不久,也比較火。推薦springcloud官方教程以及方誌明博主的系列教程。固然,這部分學習須要成本比較大,若是電腦內存不夠幾個程序下來內存就滿了。沒兩個服務器也體驗不到cloud程序的快感。
- 固然,在java領域還有
很深的水
和內容。須要深刻考慮的。好比mq消息丟失,elk日誌處理,使用部分大數據組件,docker容器化,還有各類集羣帶來的問題,各類性能問題、安全問題、運維部署集成問題和各類優化。這就很大程度須要你在工做中實踐真正僅一家互聯網企業,開發和維護業務。以及處理高併發和各類其餘緣由帶來的問題。你會發現原來本身是真的啥都不會(至少筆者是啥都不會)。
除了對於後端學習,瞭解或掌握一些其餘技能仍是頗有必要的。java
- 前端:html/js/css 以及jquery,一套以上ui框框(easyui或者layui)可以熟悉使用(小全棧)。有能力能夠接觸vue,react等流行js。
算法
:各個大廠對工程師的數據結構和算法要求都挺高,建議能夠刷letcode,劍指offer(牛客),pat(牛客),這些算法在面試會常常問道或者出如今筆試。喜歡的也能夠刷hdu,poj加強算法思惟和能力。對於刷題入門。推薦從杭電oj第11頁
或者pat乙級
開始入門。可能剛開始刷題會遇到困難。可是刷題一方面可以鍛鍊思惟,另外一方面能夠鞏固java的一些語法和集合使用。當你對程序複雜度有了概念,在開發時候對你有很大幫助的,你的思考點就不只僅是實現功能,還有效率。
- 爬蟲:當前爬蟲算是一個比較火可是不太拿的上臺面的一門技術。能夠經過爬蟲(python/java均可以)加強對接口的認識。爲本身工做的反爬作作準備。而且在課餘之際也能夠作些有趣的東西。
- git 當多人協同開發,git等svn是必不可少的,提早掌握git,備份代碼。爲開源社區作一份貢獻。
- linux 服務器基本是linux(centos和ubuntu居多),linux也是程序員必備技能。建議裝個雙系統(ubuntu)爲平常學習使用,固然,這途中會遇到不少坑,須要本身踩。
- 必定要注重網絡,操做系統,數據結構和算法積累。
推薦幾個java學習的網站:node
- 菜鳥教程、ws3chool :適合入門級和快速成型,吸取。內容相對淺顯、基礎。
- 易百教程 相比前兩內容豐富性要好不少
- how2j一個專一java的教程。站長精心打理。強力推薦。
- 騰訊雲開發手冊,感受不錯
- 各個中間件、框架如Es,spring官網(中文社區)
- letcode,
牛客
,PTA,杭電oj,poj,(cf,atcoder,vjudge有能力者考慮)
- 博客園(自由度更高),csdn,掘金,StackOverflow(境外),v2ex,開源中國,簡書,頭條
- 最好能找個
學長代
,鑑於學校課程不少仍是偏水。找幾個學長或者加一些交流羣很重要。最主要是有人可以引導你一下,幫你開拓一下視野。
- 多
動手
,作一些項目實踐而不是空理論,但項目不要作太多,或者沒一些成長性的。太多的項目也是個負擔。
- 多
逛IT社區
,多逛交流羣,多關注
一些博主公衆號。增長學習途徑。
- 找一些
夥伴
一塊兒學習、交流、互助,畢竟一我的仍是很孤單的。不要被搞其餘技術的人影響,根據本身興趣,找到一些志趣相同的人一塊兒成長學習。
筆者不知道本身說錯了多少,也不知道這篇文章會不會隨着時間推移而變成一堆廢話。固然筆者水平也有限,只是表達一些我的在學習途中的迷茫和建議,不知道是否會誤導一些青年。建議要選擇性閱讀。固然,至於筆者寫過的一些blog,若是各位遇到筆者可以解決的一些問題,我也很樂意和你們一塊兒討論!
- 若是對
後端、爬蟲、數據結構算法
等感性趣歡迎關注個人我的公衆號交流:bigsai