帶妹入坑,她該怎樣提高自己的編程能力?
老讀者都知道了,今年我成功帶妹入坑。因?yàn)樗约翰恢老矚g什么專業(yè),也沒(méi)有目標(biāo)和方向,于是作為有經(jīng)驗(yàn)的前輩,我就給她指了一條“明路”——計(jì)算機(jī)編程。
這不怪她,因?yàn)榇蠖鄶?shù)普通的學(xué)生,在高考結(jié)束后都挺迷茫的,以前的目標(biāo)就是攢住勁學(xué)習(xí),很單純;上了大學(xué)就不一樣,得為以后的生存考量。于是,對(duì)于女生來(lái)說(shuō),教師、護(hù)士是她們的常規(guī)選項(xiàng);對(duì)于男生來(lái)說(shuō),鐵路、機(jī)械、建筑的就是我們的常規(guī)選項(xiàng)。
不要問(wèn)我是怎么知道的。當(dāng)年我父母就是這樣逼我的,于是,我報(bào)的專業(yè)是機(jī)械工程,可惜這個(gè)專業(yè)沒(méi)錄上,被調(diào)劑到了計(jì)算機(jī)網(wǎng)絡(luò),誤打誤撞地學(xué)了 Java。
真的挺佩服那些一開(kāi)始就目標(biāo)明確的學(xué)生,這樣就可以少走很多彎路。比如說(shuō),父母都是醫(yī)生,孩子在很大概率上會(huì)報(bào)醫(yī)學(xué)方面的專業(yè),這沒(méi)什么不好的,千萬(wàn)不要信電視上那一套,父母干啥,孩子偏偏不愛(ài)干啥。
你想啊,從小有家庭氛圍的熏陶,孩子在父母的同專業(yè)方面是有很大天分的,這叫特長(zhǎng)發(fā)揮,加上父母經(jīng)營(yíng)的人脈資源,孩子在畢業(yè)后找一份養(yǎng)家糊口的工作完全不是問(wèn)題。
我這代人,在音樂(lè)上有幸遇到了周杰倫、王力宏、林俊杰、陶喆。被譽(yù)為“R&B 教父”的陶喆,他的母親是京劇名伶,父親是臺(tái)灣著名歌手,那陶喆在音樂(lè)上面的成就,其實(shí)是和他的家庭密不可分的。
給讀者朋友們嘮這個(gè),就是希望大家伙不要浪費(fèi)家庭方面的優(yōu)勢(shì)資源。慎重啊,朋友們。
像我,父母都是農(nóng)民,優(yōu)勢(shì)資源是不存在的,除非我的理想是種莊稼。可惜從小我就討厭干農(nóng)活,辛苦不說(shuō),溫飽都是問(wèn)題。像我這樣出身的讀者應(yīng)該還有不少,那從上學(xué)到工作,就只能靠自己的努力,一步步摸爬滾打。
我妹就比我幸運(yùn)多了,我就是她的優(yōu)勢(shì)資源,沒(méi)毛病吧?讓我妹學(xué)習(xí)編程,在我看來(lái),就是最合理的選擇。
因?yàn)閷?xiě)作的緣故,我認(rèn)識(shí)很多做互聯(lián)網(wǎng)方面的朋友,關(guān)系都處得不錯(cuò),等我妹畢業(yè)了,內(nèi)推個(gè)崗位是沒(méi)有任何問(wèn)題的。
就說(shuō)上學(xué),我之前不是寫(xiě)了篇文章,說(shuō)送我妹上學(xué)的事。我有一個(gè)讀者就問(wèn)我,我妹學(xué)的啥專業(yè),我還挺好奇為什么,交流完才得知,讀者竟然是我妹學(xué)校的一名老師。
還有不少讀者,和我妹同校,非要替我保護(hù)我妹,你說(shuō)我能拒絕嗎?
更重要的是,做為一名負(fù)責(zé)任的哥哥,我特意為我妹寫(xiě)了一個(gè)《教妹學(xué) Java》專欄,你們也看到了,一直在更新著。我妹每篇都有在看,她給我說(shuō)收獲挺大的。
大家伙想啊,這對(duì)于一名編程小白來(lái)說(shuō),多么的重要!
那今天,我就來(lái)談?wù)劊晒萌肟雍螅撛鯓犹岣咦约旱木幊棠芰Αkm然說(shuō)“師傅領(lǐng)進(jìn)門(mén),修行靠個(gè)人”,但我還是她哥哥,負(fù)的責(zé)任更多,應(yīng)該多領(lǐng)領(lǐng)!
首先,必須對(duì)大家坦誠(chéng)相見(jiàn)。
第一,對(duì)我妹學(xué)習(xí)編程這件事,沒(méi)有很高的期許,我覺(jué)得給她寬松點(diǎn)的成長(zhǎng)環(huán)境更好,畢業(yè)后順順利利地做一名“程序媛”挺好的。
第二,希望我妹畢業(yè)后能成為一名“開(kāi)箱即用”的程序員,能上手做一些項(xiàng)目,而不是停留在大學(xué)時(shí)期的理論知識(shí)層面上。
第三,我妹畢業(yè)后進(jìn)不進(jìn)大廠無(wú)所謂。能進(jìn)大廠的都是非常優(yōu)秀的程序員,也是極少數(shù)的,還有很大一批普通的程序員,需要從中小廠干起。
不管怎么說(shuō),大學(xué)的課程都是偏理論知識(shí)的,這是我們國(guó)家教育的一大特色(沒(méi)有貶義,絕對(duì)沒(méi)有)。企業(yè)呢,雖然沒(méi)有表現(xiàn)出你沒(méi)有項(xiàng)目經(jīng)驗(yàn)就不要你的態(tài)度,但還是希望你有一些,對(duì)吧?
之前的那篇《研三秋招》的文章里也提到了,讀者迫切地想要項(xiàng)目經(jīng)驗(yàn),就顧此失彼,沒(méi)有更多時(shí)間去鉆理論知識(shí)、刷面試題,導(dǎo)致筆試落荒而逃。
那在我看來(lái),確實(shí)需要一點(diǎn)平衡,就是 60% 的精力還是要放到理論知識(shí)的學(xué)習(xí)上,剩余的 40% 的精力就投入到實(shí)戰(zhàn)經(jīng)驗(yàn)上,兩者不偏不倚,形成互補(bǔ)比較好。
編程本身難不難,成為頂尖的技術(shù)大牛確實(shí)很難,不掉點(diǎn)頭發(fā),不禿個(gè)頂,是“幾乎”不可能的;但能在社會(huì)上立足,糊口飯吃,還是是不難的,相信我,我就是個(gè)不錯(cuò)的例子。
對(duì)于我妹來(lái)說(shuō),想要提高自己的編程能力,單靠學(xué)校的教學(xué)是不行的,還得靠自學(xué)。自學(xué)的精髓就在于利用有限的時(shí)間,學(xué)習(xí)到真正有用的東西。那么就需要對(duì)學(xué)習(xí)的知識(shí)進(jìn)行篩選,在篩選知識(shí)這方面,我還是有點(diǎn)話語(yǔ)權(quán)的。
01、Java 學(xué)習(xí)路線
如果你恰好是學(xué)習(xí) Java 的,那么先看看下面這 3 張圖,一套很完整的 Java 學(xué)習(xí)路線(入門(mén)級(jí)別)。



按照這個(gè)路線圖學(xué)下來(lái),基本上企業(yè)級(jí)的開(kāi)發(fā)技能都具備了。切記,入門(mén)階段,不要盲目追求深度,非要鉆個(gè)源碼做到“知其然知其所以然”,那我可以負(fù)責(zé)任的告訴你,一個(gè)技術(shù)點(diǎn)很可能都?jí)蚰阊芯堪雮€(gè)月的。
先學(xué)會(huì)用,會(huì)用之后,再結(jié)合理論知識(shí)深入研究,會(huì)事半功倍。這也是我一直奉行的學(xué)習(xí)準(zhǔn)則,還挺有效的。
02、快速打好 Java 基礎(chǔ)
有了這套路線圖,是不是瞬間就感覺(jué)明朗了起來(lái),學(xué)習(xí)起來(lái)就不會(huì)犯迷糊了,知道下一步該做什么,下下一步做什么,就好像打游戲的時(shí)候有一張地圖踩在腳下。
那接下來(lái),就是把 Java 基礎(chǔ)打好,這對(duì)以后的學(xué)習(xí)很有幫助。怎么打好呢?
學(xué)習(xí)之路是一項(xiàng)很逆人性的差事,并不是每個(gè)人都能夠堅(jiān)持下來(lái),尤其是打基礎(chǔ)的階段,過(guò)于強(qiáng)求的話可能就會(huì)適得其反,沒(méi)入門(mén)先放棄了。我身邊這樣的例子真的不少,所以你要告訴自己:
1)對(duì) Java 感興趣,對(duì)互聯(lián)網(wǎng)的高薪感興趣,對(duì)“程序員禿頂”的段子視若無(wú)睹,只有這樣,你才能真正地堅(jiān)持下去。
2)富有堅(jiān)韌不拔的學(xué)習(xí)能力,別總遇到一點(diǎn)點(diǎn)困難,就自暴自棄。
3)設(shè)定一個(gè)目標(biāo)就死磕,如果你經(jīng)常拿不到最終結(jié)果,需要反思是不是從來(lái)沒(méi)有成功做成過(guò)一件困難的事情,沒(méi)成功過(guò)所以不知道“堅(jiān)持”可以大大提高成功的概率。
4)擁有解決問(wèn)題的勇氣,學(xué)習(xí)的過(guò)程中注定會(huì)遇到許許多多的坑,要敢于跳進(jìn)去,然后再爬出來(lái),并且是在不尋求他人幫助的前提下。我見(jiàn)過(guò)太多的同學(xué),遇到點(diǎn)屁大的問(wèn)題就直接扔在群里等大牛解答,殊不知搜索引擎是第一步。
有人喜歡看書(shū),有人喜歡看視頻,有人喜歡都看。也沒(méi)有必要做出非此即彼的選擇。
喜歡看書(shū)的讀者可以按照我下面給出的 GitHub 倉(cāng)庫(kù)去下載自己喜歡的電子書(shū)。里面的書(shū)單很全,你只需要對(duì)應(yīng)一種技術(shù)選擇一本你喜歡的就可以了,不要貪多。
https://github.com/itwanger/JavaBooks
喜歡看視頻的讀者,我推薦老九門(mén)的零基礎(chǔ)學(xué) Java,B 站和與tube 上都有。B 站的地址我貼一下。
https://www.bilibili.com/video/BV1fx411a7zo
主講人徐嵩的授課風(fēng)格非常風(fēng)趣,聽(tīng)起來(lái)很過(guò)癮,我最近沒(méi)事的時(shí)候就看一集,回味一下當(dāng)初學(xué) Java 時(shí)沒(méi)有視頻資料的苦澀。
看視頻和看書(shū)的體驗(yàn)完全不同,在我看來(lái),通過(guò)視頻學(xué)習(xí)的好處主要有兩點(diǎn):
視頻中講的東西比較形象,有一種身臨其境的感覺(jué)。
視頻有一種你看不到的魔力,可以提高你學(xué)習(xí)的自主性。
所以沒(méi)必要排斥看視頻這件事。學(xué)習(xí)的過(guò)程中,不要忘了動(dòng)手去實(shí)踐,這里推薦一個(gè)開(kāi)源項(xiàng)目——vhr,或者叫微人事,我的好朋友江南一點(diǎn)雨是作者,所以我一直在大力推薦,是真的不錯(cuò)。
https://github.com/lenve/vhr
打基礎(chǔ)的過(guò)程中,一定要多敲代碼,在敲的過(guò)程中肯定會(huì)出錯(cuò)。不管你是看書(shū),還是視頻,你覺(jué)得作者說(shuō)得好像挺簡(jiǎn)單的,以為看過(guò)一遍后自己也理解了。但往往不是這樣的,程序在敲的過(guò)程中會(huì)發(fā)生許許多多意想不到的問(wèn)題,有時(shí)候作者限于篇幅的原因,往往會(huì)選擇性地跳過(guò)一些細(xì)枝末節(jié),但這些對(duì)于編程的初學(xué)者來(lái)說(shuō),往往很難駕馭。只有經(jīng)過(guò)自己的手敲出來(lái),才能證明真的是會(huì)了,懂了。
不是有那句俗話嘛,“當(dāng)局者迷旁觀者清”,如果你站在讀的角度,就會(huì)很容易自欺欺人;但如果自己親自實(shí)操的話,就完全不一樣了,不僅印象深刻,還為以后的復(fù)盤(pán)做好了備份。在敲的過(guò)程中,最好把自己認(rèn)為經(jīng)典的案例分門(mén)別類,放到 GitHub 上或者碼云上,等到以后再用的時(shí)候,也好找——書(shū)到用處方恨少,代碼也是。
出錯(cuò)了沒(méi)關(guān)系,把錯(cuò)誤解決掉的過(guò)程中你能聽(tīng)到自己成長(zhǎng)的聲音,就好像雨后春筍一樣。沒(méi)有出錯(cuò)的同學(xué)要么是天才,要么就是蠢材。
03、哪些后端知識(shí)不需要再學(xué)了
按照我上面說(shuō)的方法,頂多半年時(shí)間,就可以打好堅(jiān)實(shí)的 Java 基礎(chǔ)了。如果你在學(xué)習(xí)的過(guò)程中遇到了問(wèn)題,也歡迎隨時(shí)和我交流。切記,要堅(jiān)持,三天打魚(yú)兩天曬網(wǎng)只會(huì)打不到魚(yú)還會(huì)弄破了網(wǎng)。
張無(wú)忌在學(xué)太極拳的時(shí)候,他爹的師父張三豐就提醒他一定要把之前所學(xué)習(xí)的武功全部忘掉,忘得越多才能學(xué)得越快。
同樣的,自學(xué) Java 的時(shí)候一定要先知道哪些知識(shí)不需要再學(xué)了,畢竟技術(shù)的更新迭代就好像火箭一樣快,如果不懂得斷舍離,那學(xué)起來(lái)就不免太痛苦了。
1)AWT 和 Swing
真不知道為什么,有些書(shū)籍還在介紹 AWT 和 Swing,已經(jīng) 2020 了,誰(shuí)還會(huì)用 AWT 和 Swing 去開(kāi)發(fā)桌面應(yīng)用呢?就我所知,C++ 程序員會(huì)用 MFC,C# 程序員會(huì)用 Winform 和 WPF。甚至還可以用一種更時(shí)髦的技術(shù)(比如 Electron)把 Web 網(wǎng)頁(yè)裹一層華麗的外衣,變成可執(zhí)行文件。
2)Applet
作為網(wǎng)頁(yè)插件技術(shù),Applet 壓根就沒(méi)流行起來(lái),就連曾經(jīng)的熱門(mén) Flash 也要淘汰了。
3)XML
XML 還沒(méi)有被淘汰,應(yīng)用的地方還有不少。但是作為一種數(shù)據(jù)傳輸格式,它正在被 JSON 替代。
4)JDBC
我個(gè)人不建議再學(xué)習(xí)偏底層的 JDBC 了,尤其是對(duì)于時(shí)間寶貴的自學(xué)程序員來(lái)說(shuō)。與其花這點(diǎn)時(shí)間,不如把精力投入到 MyBatis 的學(xué)習(xí)上。
5)Struts
Struts 是早年一個(gè)優(yōu)秀的 MVC 框架,單從技術(shù)的角度來(lái)看,還是蠻不錯(cuò)的。但是自從有了 SpringMVC 后,Struts 就被拍死在沙灘上了。
6)Hibernate
在我剛參加工作那會(huì)(2010 年的時(shí)候),持久層框架用的正是 Hibernate。但時(shí)過(guò)境遷,Hibernate 太重量級(jí)了,學(xué)習(xí)成本太高,取而代之的是輕量級(jí)的 MyBatis(支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射)。
7)JSP
說(shuō)起來(lái)慚愧,我現(xiàn)在維護(hù)的一個(gè)項(xiàng)目,視圖層用的依然是 JSP。但如今流行的是前后端分離+微服務(wù),JSP 就顯得不合時(shí)宜了。
04、高效的學(xué)習(xí)方法
如果你不是后端程序員,學(xué)的是大前端,也需要一份前端學(xué)習(xí)路線的話,那么我推薦一個(gè)我的好朋友——小鹿,他那整理了一份目標(biāo)很明確的學(xué)習(xí)路線圖,我這里貼了一下下載地址:
鏈接: https://pan.baidu.com/s/1zgRcqablJurrjQScHle7Bg ?密碼: f44j
有了學(xué)習(xí)路線圖之后,學(xué)習(xí)的范圍就縮小了,事情就成功了一半,接下來(lái)就是學(xué)習(xí)方法的問(wèn)題了,我這里分享一些我自己的心得體會(huì)。
第一,善用搜索引擎。平常需要找資料,需要解決問(wèn)題,如果自己一時(shí)半會(huì)沒(méi)有方法的話,就去搜。
Google 是第一選擇,Bing 是第二選擇,微信搜索是第三選擇。PC 端的話,Google 和 Bing 就很靠譜,基本上要找的東西,都有好的結(jié)果。手機(jī)端的話,就用微信搜,答案也很靠譜。
第二,學(xué)會(huì)提問(wèn)。如果搜索引擎找不到答案的話,不要直接把問(wèn)題拋到群里,拋給同事、領(lǐng)導(dǎo),或者大牛,要先對(duì)問(wèn)題梳理一下。
我想問(wèn)什么,問(wèn)題發(fā)生的環(huán)境是什么,問(wèn)題的描述是否足夠清楚,態(tài)度是否端正。
不要唐突,不要冒昧,還要臉皮厚,很難,對(duì)吧?這就是提問(wèn)的藝術(shù)啊。
第三,善于總結(jié)和歸納。很多同學(xué)給我反饋,“怎么總是感覺(jué)記不住啊,學(xué)完就忘啊,有什么好的辦法嗎?”
有啊,當(dāng)然有。學(xué)完一個(gè)知識(shí)點(diǎn),如果需要?jiǎng)邮秩?shí)踐,那就去敲代碼,敲一遍,還是理解,再敲一遍。如果真的感覺(jué)自己理解,嘗試寫(xiě)篇文章,把自己的學(xué)習(xí)心得分享出來(lái),看看是否能夠教會(huì)別人。
如果自己是半瓶水,倒出去只能是半瓶水;只有自己是一瓶水,倒出去才可能多余半瓶水,對(duì)吧?
歸納總結(jié)的好處就是把零散的知識(shí)變成體系,在腦海中構(gòu)建一副藍(lán)圖,日積月累,你就會(huì)發(fā)現(xiàn)自己也從一條小溪變成了海洋。
順帶推薦一下費(fèi)曼學(xué)習(xí)法,靈感源于諾貝爾物理獎(jiǎng)獲得者理查德·費(fèi)曼,運(yùn)用費(fèi)曼技巧,只需要花 20 分鐘就可以深入理解知識(shí)點(diǎn)。聽(tīng)起來(lái)是不是很神奇?
費(fèi)曼學(xué)習(xí)法的四個(gè)步驟:
第一步,能把一個(gè)孩子教懂。這有點(diǎn)類似我們古代的一名詩(shī)人,白居易,他希望自己的詩(shī)連老太婆都能看得懂,那就是好詩(shī)。
具體怎么做呢?拿出一張白紙,寫(xiě)下要學(xué)習(xí)的主題,想一下,怎么把它教給一個(gè)孩子,你會(huì)講哪些,然后記下來(lái)。
同學(xué)們可以把白紙換成 iPad 了,有道云筆記了,等等。
第二步,回顧。當(dāng)我們嘗試把知識(shí)點(diǎn)講給小孩子的時(shí)候,可能會(huì)卡殼,那就需要把這些卡殼的點(diǎn)重新學(xué)習(xí),這些點(diǎn)可能就是我們認(rèn)知的邊界——重新學(xué)習(xí)的地方。
第三步,簡(jiǎn)化語(yǔ)言。如果發(fā)現(xiàn)表述的文字比較復(fù)雜,不夠清晰,那就嘗試把這些內(nèi)容讀出來(lái),直到通順,直到自然,直到足夠簡(jiǎn)練。
第四,傳授。這點(diǎn)雖然是可選項(xiàng),但真的非常重要。如果確保自己理解了,那就把它教給別人,看你能否把別人教懂,也就是我說(shuō)的善于總結(jié)和歸納。
整個(gè)思維導(dǎo)圖( 推薦的在線網(wǎng)址有百度腦圖、ProcessOn)了,或者博客(建議使用 markdown 格式)了。
第四,多去實(shí)踐。實(shí)踐出真知,到底馬謖行不行,給他一個(gè)街亭守一守,對(duì)吧,收不住就是紙上談兵,沒(méi)啥鳥(niǎo)用。
GitHub 或者碼云上有很多優(yōu)秀的開(kāi)源項(xiàng)目,挑一些優(yōu)質(zhì)的,down 下來(lái),去研究研究,在原有的代碼基礎(chǔ)上,嘗試做一些優(yōu)化,或者增加一些功能。
自己動(dòng)手去做的過(guò)程中,你會(huì)發(fā)現(xiàn),哇,真的有新大陸呀!
第五,熟練使用開(kāi)發(fā)工具。Intellij IDEA、VSCode 都是非常流行的開(kāi)發(fā)工具,能夠幫助我們?cè)趯W(xué)習(xí)和工作中變得更加高效,里面有沒(méi)有快捷鍵,有沒(méi)有什么騷操作,對(duì)吧?
在使用 Intellij IDEA 編寫(xiě)代碼的過(guò)程中,一定要注重代碼規(guī)范。提前就把 SonarLint、阿里巴巴開(kāi)發(fā)規(guī)約這些插件安裝上,寫(xiě)完代碼就 check 一下,按照提示對(duì)一些不良的習(xí)慣做出修正。
第六,學(xué)好英語(yǔ)。這一點(diǎn)真的真的真的非常非常非常重要重要重要,即便是英語(yǔ)功底本身很差,一定不要自暴自棄,對(duì)吧?雷軍敢一句“are you ok”走天下,你怕什么?
況且,Chrome 瀏覽器可以安裝 Google 翻譯插件,Intellij IDEA 可以安裝 Translation 翻譯插件,只要稍微有點(diǎn)英語(yǔ)的底子,完全不用怵的。
英語(yǔ)水平提高了,可以看官方的文檔,可以在 Stack Overflow 上找答案,可以查看 JDK 源碼,等等,編程水平就會(huì)與日俱增啊。
第七,注意休息。身體健康非常重要,千萬(wàn)不要淪為工作的機(jī)器,認(rèn)為年輕的時(shí)候就應(yīng)該拼命的加班,通過(guò)加班提升技術(shù),多掙點(diǎn)錢(qián)。這種想法可以有,但要節(jié)制,懂嗎?
喜歡就點(diǎn)下“贊”、"在看"呀
關(guān)注 Stephen,一起學(xué)習(xí),一起成長(zhǎng)。
