編程從來不是一件無趣的事情,相反,它會(huì)帶給你無窮無盡的快樂。這是一種創(chuàng)造事物的快樂,就像上帝創(chuàng)造世間萬物一樣,在代碼世界里,你就是無所不能的造物主。 可是如何以最快的速度入門,這才是廣大新手最關(guān)心的問題。本文就來談?wù)劸幊倘腴T的學(xué)習(xí)路線。 本文適用對(duì)象:打算做軟件研發(fā)工作的人、無明確目標(biāo)的在校學(xué)生。 如果你符合以上兩點(diǎn)中的任意一點(diǎn),就請(qǐng)一定耐心讀完這篇文章,保證對(duì)你大有幫助。 我看到過很多推薦教程的文章,參考書列了一大堆,根本不是初學(xué)者能夠看得進(jìn)去的。學(xué)編程需要一步一個(gè)腳印,循序漸進(jìn)才能掌握牢固。私以為,沒有理解能力差的學(xué)生,只有寫的晦澀的書。只要有好的學(xué)習(xí)方式,每個(gè)人都可以輕松學(xué)會(huì)編程。 因此,本文針對(duì)每項(xiàng)技術(shù)只推薦最好的教程,這些教程一定是兼顧深度和趣味性的,保證你會(huì)愛不釋手地看下去。大部分推薦的教程(包括書和視頻)都是我學(xué)習(xí)過程中對(duì)比后選出的,有些老師講課的幽默程度堪比相聲,這才是真正的寓教于樂。 閑話少說,下面進(jìn)入正題。 一、技術(shù)路線介紹 本節(jié)只介紹純IT領(lǐng)域的技術(shù)路線,而對(duì)于更高級(jí)的技術(shù)(例如計(jì)算機(jī)視覺、機(jī)器學(xué)習(xí)、人工智能等等)不予考慮。 技術(shù)路線是一條通往該行業(yè)的道路,掌握了處于這條路上的所有技術(shù),就具備了該行業(yè)的從業(yè)能力。因此,我們可以從各個(gè)公司的招聘職位中找到技術(shù)路線的分類。 目前,軟件開發(fā)技術(shù)路線主要有:Web后端、Web前端、Android、iOS、Windows客戶端、數(shù)據(jù)庫、嵌入式等。本節(jié)我們將依次對(duì)這些技術(shù)路線作簡(jiǎn)要介紹,具體的學(xué)習(xí)內(nèi)容會(huì)放到后面章節(jié)細(xì)講。 1、Web后端 這是當(dāng)今互聯(lián)網(wǎng)浪潮中軟件開發(fā)的主力軍。幾乎所有互聯(lián)網(wǎng)公司都要提供基于Web的服務(wù)(相對(duì)于基于客戶端的服務(wù)),這些服務(wù)的核心就在于Web后端,或稱為服務(wù)器端。 與Web前端相比,后端程序運(yùn)行在服務(wù)器上,看不見摸不著,但卻扮演著至關(guān)重要的角色。日常生活中我們用百度搜索、發(fā)新浪微博、看騰訊視頻、在淘寶購物,這些功能都由后端程序來實(shí)現(xiàn)。 Web后端編程又可以根據(jù)編程語言的不同分為幾大類:Java、PHP、Node.js。 Java是種古老的編程語言,在Web后端的應(yīng)用也足夠久,由于Java代碼通常架構(gòu)清晰、可擴(kuò)展性強(qiáng),因此適用于大型Web項(xiàng)目,比如淘寶網(wǎng)就是用Java開發(fā)的。 PHP是一種專門用于Web后端的腳本語言,簡(jiǎn)單易用,適用于小型Web項(xiàng)目。 Node.js是一項(xiàng)新興技術(shù),采用JavaScript語言開發(fā)后端,輕量高效,性能好。 除了這三種主流技術(shù)外,使用Ruby on Rails、Python、ASP.NET也可以做后端開發(fā),但并不常用,本文就不予考慮了。 2、Web前端 Web前端是個(gè)大一統(tǒng)的世界,就是我們常說的 HTML+CSS+JavaScript,最新的版本是HTML5+CSS3+JavaScript。所以前端程序員只要學(xué)好了這三門語言,就可以大有作為了。 3、Android 在移動(dòng)互聯(lián)網(wǎng)時(shí)代,Android成為最廣泛使用的移動(dòng)端操作系統(tǒng),自然需要大量的開發(fā)人員。與Java Web類似,Android開發(fā)同樣使用Java語言。 4、iOS iOS是蘋果手機(jī)的操作系統(tǒng),由于iPhone推出之后在全球市場(chǎng)備受追捧,iOS開發(fā)的需求量也很高,而且通常薪資水平高于Android。iOS過去使用Objective-C開發(fā),近年來蘋果公司發(fā)布了新的編程語言Swift,開始逐漸替代Objective-C,成為iOS系統(tǒng)的主流開發(fā)語言。 5、Windows客戶端 Windows操作系統(tǒng)幾乎占領(lǐng)了個(gè)人電腦的絕大部分市場(chǎng),而Windows客戶端編程就是為你的個(gè)人電腦編寫桌面應(yīng)用程序,我們?nèi)粘J褂玫腛ffice、電腦版QQ、迅雷影音、Photoshop等等都屬于這個(gè)范疇。 雖然我們每天都在用Windows客戶端程序,但在云計(jì)算日益發(fā)達(dá)的今天,客戶端已經(jīng)不再是各個(gè)互聯(lián)網(wǎng)公司首先考慮的平臺(tái)。與Web相比,客戶端顯得太笨重,而且無法及時(shí)更新。只要是能夠通過瀏覽器提供的服務(wù),就不必考慮開發(fā)客戶端軟件,只有那些運(yùn)算量、數(shù)據(jù)量非常大的軟件,才需要開發(fā)客戶端版本。因此Windows客戶端開發(fā)的崗位需求并不大,主要集中在專業(yè)軟件領(lǐng)域,比如Adobe公司開發(fā)的各種圖像處理軟件、軟件編程IDE、大型企業(yè)內(nèi)部的管理系統(tǒng)等等。 Windows客戶端開發(fā)的常用技術(shù)有:WinForm,Qt。 WinForm是微軟官方提供的Windows客戶端軟件開發(fā)框架,采用C#語言,屬于.NET框架的一部分。使用Visual Studio開發(fā)WinForm程序非常方便、快捷。 Qt是一個(gè)跨平臺(tái)的軟件開發(fā)框架,一套程序可以同時(shí)運(yùn)行在Windows、Linux、Android、iOS、Windows Phone等主流操作系統(tǒng)上,功能非常強(qiáng)大。對(duì)于想開發(fā)跨平臺(tái)客戶端的公司來說,使用Qt的確可以節(jié)約很多成本。Qt主要使用C++語言實(shí)現(xiàn)功能,同時(shí)可以選擇使用QML語言描述界面。 除了這兩種技術(shù),還有MFC、WPF。MFC是微軟早期的客戶端框架,由于年代久遠(yuǎn),開發(fā)效率低,現(xiàn)在用的不多了。WPF則是微軟推出的比WinForm更優(yōu)秀的客戶端框架,但由于推廣不利,至今沒有得到廣泛使用。因此本文不再考慮這兩項(xiàng)技術(shù)。 6、數(shù)據(jù)庫 數(shù)據(jù)庫開發(fā)作為單獨(dú)的一條技術(shù)路線,似乎有些單薄。但鑒于各大互聯(lián)網(wǎng)公司都有數(shù)據(jù)庫工程師這一職位,所以也把它單獨(dú)列出來比較好。 實(shí)話講,數(shù)據(jù)庫這一技術(shù)路線我不太熟悉,按照我的理解,應(yīng)該就是針對(duì)公司使用某一款數(shù)據(jù)庫系統(tǒng),比如Oracle,做相關(guān)開發(fā)和性能優(yōu)化。 7、嵌入式 嵌入式開發(fā)更偏底層,似乎離IT越來越遠(yuǎn)了。但結(jié)合現(xiàn)在日益火熱的物聯(lián)網(wǎng)來看,嵌入式將迎來新的高潮。 如果有一些名詞你不了解它的意思,請(qǐng)?jiān)谠u(píng)論區(qū)提問,或自行百度,或者先放著也行。畢竟作為一個(gè)編程初學(xué)者,這些技術(shù)路線恐怕也不太好理解。所以繼續(xù)往下看吧,等知識(shí)積累到一定程度這些概念就自然明白了。本節(jié)只對(duì)這些技術(shù)路線做了大概的介紹,下一節(jié)讓我們開始踏上學(xué)習(xí)的道路。 二、編程語言 作為一個(gè)什么都不懂的小白,學(xué)習(xí)編程的第一步當(dāng)然是掌握一門編程語言。本節(jié)就來介紹常見的編程語言的學(xué)習(xí)路線。 首先,先明確一個(gè)觀點(diǎn),作為一個(gè)程序員,只會(huì)一種編程語言是遠(yuǎn)遠(yuǎn)不夠的。最好精通1~2門語言,基本掌握其它所有常見的語言。這聽起來有些嚇人,但其實(shí)沒那么困難。因?yàn)榇蟛糠志幊陶Z言都是很相似的,比如C語言、C++、C#、Java可以稱為類C語言,它們都是從C語言開始一步步擴(kuò)展得到的,掌握了其中一種,其它的可以觸類旁通。 1、C語言 信息類專業(yè)的大學(xué)生通常都會(huì)在一年級(jí)上C語言這門課,也很可能是大學(xué)期間唯一的一門編程語言課。所謂師傅領(lǐng)進(jìn)門,修行在個(gè)人,通過學(xué)習(xí)C語言邁入編程世界的大門是再合適不過了。雖然也有人提倡學(xué)習(xí)Python作為第一門編程語言,可我覺得那未免太浮躁了。剛開始應(yīng)該打好基礎(chǔ),而不是追求炫酷的效果。C語言是一門高級(jí)語言,又與計(jì)算機(jī)硬件息息相關(guān),通過指針操作可以真切感受到數(shù)據(jù)的流動(dòng),這是Python無法做到的。因此,我的建議是,不管今后打算從事哪個(gè)技術(shù)路線,C語言都是必學(xué)的第一門語言。 然而遺憾的是,我由于是在課堂上學(xué)的C語言,所以這方面的優(yōu)秀教材了解的也不多。無論是學(xué)校使用的各個(gè)版本的《C語言程序設(shè)計(jì)》,還是國(guó)外大牛寫的《The C Programming Language》,都未免太過枯燥。據(jù)說有一本科普性質(zhì)的《啊哈C》寫的非常通俗易懂,麻煩讀過的同學(xué)點(diǎn)評(píng)一下是否真的如此。其它好的教程也希望同學(xué)們幫我補(bǔ)充。 2、C# 學(xué)完C語言很多人會(huì)產(chǎn)生疑問,不知道C語言能干什么。如果不及時(shí)消除這一顧慮,恐怕會(huì)讓大部分人喪失學(xué)下去的信心。然而C語言的用途對(duì)于初學(xué)者來說很難體現(xiàn)出來,所以下一步我們轉(zhuǎn)向C語言的增強(qiáng)版本——C#語言(讀音:C sharp)。 C#語言是微軟推出的面向?qū)ο缶幊陶Z言?!懊嫦?qū)ο蟆睂⑹且粋€(gè)伴隨程序員一生的詞匯,因此從此刻開始,我們要隨時(shí)嘗試?yán)斫猓菏裁词敲嫦驅(qū)ο蟆?/p> 簡(jiǎn)單來說,面向?qū)ο笫窍鄬?duì)于面向過程而言的。C語言是一個(gè)典型的面向過程語言,因?yàn)镃程序的執(zhí)行流程可以很容易地畫一張流程框圖來表示,它強(qiáng)調(diào)程序員編寫程序時(shí)是面向程序執(zhí)行過程考慮的。而C#則是一個(gè)典型的面向?qū)ο笳Z言,C#程序的執(zhí)行流程通常很難用流程圖表示,這是因?yàn)槌绦騿T編寫C#程序時(shí)考慮的不是一個(gè)完整的從頭到尾的執(zhí)行流程,而是各個(gè)對(duì)象之間的調(diào)用關(guān)系。 雖然我已經(jīng)盡力了,但上面這段話肯定無法讓初學(xué)者真正理解面向過程和面向?qū)ο蟮年P(guān)系。不過不要緊,編程思想從來不是紙上談兵得來的,必須經(jīng)過充分的實(shí)踐才能領(lǐng)悟。 幸運(yùn)的是我收集到了一套完整的C#視頻教程,以及后續(xù)的WinForm視頻教程。學(xué)完這兩個(gè),就會(huì)對(duì)面向?qū)ο缶幊逃幸欢ǖ睦斫狻km然今后并不一定從事Windows客戶端的開發(fā),但學(xué)習(xí)這兩個(gè)內(nèi)容可以幫助更好地理解后續(xù)更深層次的Java Web和Android。看視頻的同時(shí)一定要照著在自己電腦上寫一遍,這樣才能印象深刻。 這是視頻教程鏈接:C#,WinForm。這套視頻也許是我看過的最有趣的視頻了,希望大家不要錯(cuò)過。 3、Java(建議精通) 如果學(xué)過C#再學(xué)Java,你會(huì)發(fā)現(xiàn)兩者驚人的相似。Java從難度上來說和C#一樣簡(jiǎn)單(甚至更簡(jiǎn)單),而用途卻比C#廣泛得多。這在很大程度上得益于Java的跨平臺(tái)特性,也使Java成為了Web項(xiàng)目的主力軍。 推薦的視頻教程: 【傳智播客黑馬訓(xùn)練營(yíng)Java基礎(chǔ)】 地址1 官網(wǎng) 地址2 百度網(wǎng)盤 密碼:fvvw 4、C++(建議精通) 并非每個(gè)同學(xué)都需要學(xué)習(xí)C++,Java和C++精通其中一門即可。但C++與Java并不是效能重復(fù)的編程語言,相反,它們分別統(tǒng)治著各自的領(lǐng)域,就像Java統(tǒng)治Web領(lǐng)域一樣,C++統(tǒng)治著性能敏感的基礎(chǔ)設(shè)施、視頻圖像處理等領(lǐng)域。精通Java或C++都不容易(特別是C++,堪稱最難編程語言),因此兩者擇一即可。 C++方面仍然沒能找到優(yōu)秀的視頻教程,需要大家?guī)兔μ嵝┙ㄗh。倒是有比較優(yōu)秀的書籍,比如《C++ Primer》,值得一看。 5、JavaScript(建議精通) JavaScript是前端開發(fā)的利器,對(duì)于前端工程師來說,精通JavaScript是必須的。近年來JavaScript甚至蔓延到了后端編程,以Node.js為代表的后端JavaScript框架使它成為全能的編程語言,大有一統(tǒng)江湖之勢(shì)。 這是與Java和C++一樣建議精通的語言,當(dāng)然只是對(duì)前端工程師有這個(gè)要求,后端工程師倒不必花太多精力在這上面。 推薦教程: 【慕課網(wǎng)】 HTML+CSS基礎(chǔ)課程 【慕課網(wǎng)】 JavaScript入門篇 【慕課網(wǎng)】 JavaScript進(jìn)階篇 【廖雪峰】 JavaScript教程 5、Python(可選) Python是近年來日益火爆的一門編程語言。隨著Python庫的層出不窮,Python在科學(xué)計(jì)算、Web、大數(shù)據(jù)與機(jī)器學(xué)習(xí)等領(lǐng)域都展現(xiàn)了驚人的實(shí)力。 與Java類似,Python也是一門優(yōu)秀的面向?qū)ο缶幊陶Z言,而且更簡(jiǎn)潔。但這不是重點(diǎn),與前面所有語言不同的是,Python是一門動(dòng)態(tài)類型語言。 前面提到的四種語言C、C#、Java、C++都是靜態(tài)類型語言,它們需要一個(gè)稱作“編譯器”的東西,把源代碼編譯成機(jī)器碼,才能在計(jì)算機(jī)上運(yùn)行。而這一特點(diǎn)導(dǎo)致了所有變量都必須事先規(guī)定類型,比如我們習(xí)以為常的寫法 int i = 0; 就事先規(guī)定了變量 以Python為代表的動(dòng)態(tài)類型語言則打破了這個(gè)限制,我們完全可以直接這樣寫 i = 0; 既不用規(guī)定變量類型,又可以隨時(shí)給它賦不同類型的值,這就是動(dòng)態(tài)類型語言的特點(diǎn)。這樣做方便了許多,但代價(jià)是Python代碼需要運(yùn)行在Python解釋器上,而不是直接運(yùn)行在CPU上,因此執(zhí)行效率會(huì)低很多,也就是通常說的動(dòng)態(tài)語言比靜態(tài)語言“慢”。 有了前幾種語言的基礎(chǔ),學(xué)Python是很簡(jiǎn)單的事情,因此不必推薦教程了,只要去網(wǎng)上隨便搜一篇介紹Python語法的博客看看就搞定了。 6、PHP(可選) 程序員中流傳著這樣一個(gè)說法——“PHP是世界上最好的編程語言”。從提出這句話的那一刻起,就免不了一場(chǎng)編程語言界的腥風(fēng)血雨。以至于PHP似乎成了其它編程語言的敵人,備受人們攻擊。然而在這樣艱苦的環(huán)境中存活下來,而且能占據(jù)很大一部分Web市場(chǎng),只能說PHP有其強(qiáng)大的優(yōu)勢(shì)。PHP開發(fā)Web項(xiàng)目非???,而且輕量,是一種腳本語言,嵌入到HTML里面就可以運(yùn)行。因此小公司使用PHP很容易搭建起自己的Web業(yè)務(wù)。然而Web項(xiàng)目規(guī)模大到一定程度時(shí),PHP就有些難以勝任了,需要Java這樣重量級(jí)的Web框架才可以支撐。因此,根據(jù)應(yīng)用場(chǎng)景選擇合適的技術(shù)才是最重要的。 PHP教程尚待發(fā)掘... 7、Lisp Lisp是一門古老的語言,老到大部分人早已忘記它的存在。我也是近兩年才了解到這門編程語言。隨著歷史消逝的編程語言數(shù)不勝數(shù),能夠在50年后仍然保持活躍生命力的語言少之又少,Lisp是其中之一。1958年人工智能的先驅(qū)約翰·麥卡錫(John McCarthy)為了解決人工智能領(lǐng)域的問題而發(fā)明了Lisp語言,比C語言的發(fā)明早了14年。然而Lisp中包含的編程思想?yún)s比現(xiàn)在最流行的語言早了幾十年。看看《黑客與畫家》的作者、硅谷創(chuàng)業(yè)之父保羅·格雷厄姆是怎么說的
之所以我在這里提到Lisp語言,不是因?yàn)樗嗝从杏茫ㄊ聦?shí)上Lisp的確沒多少實(shí)際的應(yīng)用),而是因?yàn)樗N(yùn)含的強(qiáng)大的編程理念,一種完全不同于C系列語言的理念。然而我對(duì)Lisp的了解,或許根本談不上了解,僅僅局限于道聽途說,最早是通過王垠的博客,后來是《黑客與畫家》。這兩大高手對(duì)Lisp的強(qiáng)力推薦,使我想要做些嘗試。無奈一直沒能抽出時(shí)間專心研究,而且網(wǎng)上Lisp的參考資料又少得可憐。目前Lisp最流行的兩大方言是Common Lisp和Scheme,感興趣的朋友可以關(guān)注一下,如果遇到有好的教程也可以分享給大家。 8、其它語言 還有一些應(yīng)用不那么廣泛但在特定領(lǐng)域非常流行的語言,比如Objective-C,Ruby,Go等等,它們都有著各自不可替代的作用。不過在初學(xué)階段,不必太關(guān)心這些小眾語言,因?yàn)閺纳厦婺切┐蟊娬Z言轉(zhuǎn)到這些小眾語言上是很容易的。 三、計(jì)算機(jī)基礎(chǔ) 現(xiàn)在才學(xué)計(jì)算機(jī)基礎(chǔ),是不是有點(diǎn)晚? 當(dāng)然不是,現(xiàn)在剛剛好。有了上面的編程基礎(chǔ),我們才能深入學(xué)習(xí)計(jì)算機(jī)體系結(jié)構(gòu)、操作系統(tǒng)、計(jì)算機(jī)網(wǎng)絡(luò)、算法等知識(shí),這些知識(shí)不像編程那樣能看到實(shí)際的效果,但卻是提升水平的關(guān)鍵。 1、計(jì)算機(jī)體系結(jié)構(gòu) 計(jì)算機(jī)體系結(jié)構(gòu)告訴我們計(jì)算機(jī)由哪些硬件組成,它們各自完成什么工作,如何結(jié)合成一個(gè)有機(jī)的整體。它們是物理上真實(shí)存在的東西,相當(dāng)于計(jì)算機(jī)的骨架,支撐著位于其上的軟件系統(tǒng)。 對(duì)于程序員來說,這部分知識(shí)倒不必過于深入,推薦一本必讀書:
建議閱讀英文版,因?yàn)樽x過這本書后我深深感受到原來英語可以寫得這樣通俗易懂,甚至是一些讓我覺得無法用中文說清楚的地方。 最好買一本紙質(zhì)書,這樣就能多做筆記,以后需要的時(shí)候也能翻看。如果經(jīng)濟(jì)不允許的話,可以從這里下載電子版,但是掃描的質(zhì)量很差,可能會(huì)影響閱讀心情。 我在閱讀這本書的過程中寫了一系列博客《深入理解計(jì)算機(jī)系統(tǒng)》,歡迎前來交流~ 2、操作系統(tǒng) 操作系統(tǒng)是運(yùn)行在計(jì)算機(jī)上的最重要的系統(tǒng)軟件,從一開機(jī)它就開始運(yùn)行,直到關(guān)機(jī)才最后一個(gè)結(jié)束。操作系統(tǒng)對(duì)運(yùn)行于其上的應(yīng)用軟件是至關(guān)重要的,從而也導(dǎo)致了Windows和Linux兩大派系的世紀(jì)之爭(zhēng)。學(xué)習(xí)操作系統(tǒng),才能更高效地開發(fā)應(yīng)用程序,這一點(diǎn)應(yīng)該不難理解。 操作系統(tǒng)方面的課程尚待補(bǔ)充。 3、計(jì)算機(jī)網(wǎng)絡(luò) 互聯(lián)網(wǎng)是這個(gè)時(shí)代最偉大的發(fā)明,學(xué)好計(jì)算機(jī)網(wǎng)絡(luò)才能勝任今后的各項(xiàng)工作,因?yàn)檫@些工作無一不與互聯(lián)網(wǎng)相關(guān)。 推薦一套計(jì)算機(jī)網(wǎng)絡(luò)視頻教程:
這套教程內(nèi)容很多,講解非常詳細(xì)。耐心看完整套教程,你就能看透計(jì)算機(jī)網(wǎng)絡(luò)的本質(zhì)。 4、算法 算法無疑是程序員的基本功,推薦書籍:
這本書介紹的算法很全面,把它認(rèn)真讀完并最好親手實(shí)踐每一個(gè)算法,一定會(huì)大有收獲。 5、其它 其它一些計(jì)算機(jī)基礎(chǔ)知識(shí),比如數(shù)據(jù)庫技術(shù)、計(jì)算機(jī)圖形學(xué)、多處理器編程、網(wǎng)絡(luò)與信息安全,也都是很值得學(xué)的內(nèi)容,但是大家都精力有限,沒必要樣樣精通,可以選自己感興趣的部分補(bǔ)強(qiáng)。 四、Java Web后端開發(fā) 學(xué)習(xí)了第二節(jié)和第三節(jié)提到的知識(shí),基本上可以稱為一個(gè)合格的程序員了。下一步的發(fā)展就要根據(jù)市場(chǎng)行情,選擇一門專項(xiàng)技術(shù),準(zhǔn)備進(jìn)入求職階段。 前面的內(nèi)容可以稱得上是“九陽神功”,修煉你的內(nèi)力,而后面的內(nèi)容就是“九陰真經(jīng)”,能夠征戰(zhàn)沙場(chǎng)的武器。兩者相輔相成,缺一不可。 本節(jié)從后端開發(fā)談起。第一節(jié)中講到主流后端開發(fā)有三種:Java Web、PHP和Node.js,三者的思想是一致的,只不過在實(shí)現(xiàn)方式上有所不同,因此我主要以Java Web為例介紹。 從簡(jiǎn)單的C語言控制臺(tái)程序,到WinForm窗體應(yīng)用程序,我們接觸到越來越復(fù)雜的軟件形式。而Web應(yīng)用程序,又與前面兩種完全不同。我們習(xí)以為常的軟件都是通過一個(gè)Setup.exe安裝包在計(jì)算機(jī)上安裝得到的,因此它們稱為Windows客戶端。而另外一些軟件,比如百度搜索、騰訊新聞、淘寶網(wǎng)等等,我們習(xí)慣稱之為網(wǎng)站,但實(shí)際上,它們也是軟件,稱之為Web應(yīng)用程序。這種軟件運(yùn)行在服務(wù)器上(服務(wù)器就是放置在機(jī)房里的一臺(tái)高性能電腦),用戶通過瀏覽器訪問它們。 我們需要先搞懂Web程序的工作原理,為什么用戶通過瀏覽器可以訪問到服務(wù)器上運(yùn)行的程序?它們?nèi)绾卫肏TTP協(xié)議通信?用戶數(shù)據(jù)存在哪里?弄明白這些基本邏輯,再學(xué)習(xí)如何寫程序?qū)崿F(xiàn)想要的功能。 推薦一套Java Web視頻教程: 《黑馬程序員 30天輕松掌握J(rèn)avaWeb》 鏈接 密碼:93kt 學(xué)習(xí)完這套教程,就能夠開發(fā)簡(jiǎn)單的網(wǎng)站了,但還不足以應(yīng)對(duì)實(shí)際工作的需求。 為了提高開發(fā)效率,市面上出現(xiàn)了許多優(yōu)秀的Web開源框架。在Java Web領(lǐng)域,有三大框架之稱的——Spring、Struts和Hibernate為開發(fā)者提供了許多便利,基本是Java Web程序的標(biāo)配。學(xué)習(xí)這三大框架,可以更深入地理解如何設(shè)計(jì)軟件架構(gòu),比如MVC、IOC等等。 推薦視頻教程: 《Spring視頻教程》鏈接 密碼:ey64 《Struts2視頻教程》鏈接 密碼:05ij 《Hibernate視頻教程》鏈接 密碼:if0e 需要提醒大家的是,Web技術(shù)發(fā)展日新月異,各種框架層出不窮,即使是三大框架,也有過時(shí)的一天(目前看來,其實(shí)大部分互聯(lián)網(wǎng)公司都已經(jīng)轉(zhuǎn)向更輕量、高效的框架了)。所以我們學(xué)習(xí)并不是為了學(xué)會(huì)用一種工具,而是要掌握它們的設(shè)計(jì)思想,當(dāng)你掌握了三大框架的設(shè)計(jì)理念,相信面對(duì)其它新興框架,就可以很容易透過現(xiàn)象看本質(zhì),找到共同的地方。 五、Web前端 Web前端與Web后端合作完成整個(gè)Web項(xiàng)目的開發(fā)。前后端分離也正是Web軟件最優(yōu)秀的設(shè)計(jì)理念。 前端需要用HTML語言制作網(wǎng)頁,用CSS描述網(wǎng)頁的樣式,用JavaScript給網(wǎng)頁提供動(dòng)態(tài)特性。這幾樣技術(shù)在第二節(jié)中已經(jīng)給出了教程,很容易掌握,在邏輯方面并沒有后端程序那么復(fù)雜。 但前端技術(shù)不止于此。與后端類似,前端框架也是層出不窮,有過之而無不及。如今流行的各種框架例如React、Angular.js、Vue.js、Bootstrap等等,都需要我們多多嘗試,深入理解為何需要這些框架,它們能幫助我們做哪些事情。對(duì)各個(gè)框架有個(gè)基本的了解,才能在技術(shù)選型時(shí)游刃有余。由于前端水平有限,我就不做過多推薦了,有一篇非常好的文章推薦給大家看:
六、Android 安卓經(jīng)過近些年的快速發(fā)展,成為目前世界上最優(yōu)秀的移動(dòng)端操作系統(tǒng),至今仍活力不減。學(xué)習(xí)安卓,主要是學(xué)習(xí)使用Android SDK提供的API實(shí)現(xiàn)各種功能,同時(shí)深入理解Android的運(yùn)行機(jī)制。 推薦一本參考書: 《第一行代碼Android》郭霖 著 這本書思路清晰,講解生動(dòng),很適合初學(xué)者閱讀。有了這些基礎(chǔ),等到真正做實(shí)際項(xiàng)目的時(shí)候,當(dāng)你遇到更多實(shí)際的問題,比如圖片緩存、界面卡頓、屏幕適配等等,到時(shí)候只要針對(duì)性地查找解決方案,或者利用現(xiàn)有的開發(fā)框架就可以了,經(jīng)驗(yàn)也會(huì)隨之慢慢豐富。 七、成為編程大牛 這篇文章從開始到現(xiàn)在,已經(jīng)過去了幾個(gè)月,中間屢想終止,最后還是堅(jiān)持寫完了。常常感到慚愧,因?yàn)槲覍?shí)在稱不上編程領(lǐng)域的大牛,卻斗起膽來寫這么一篇宏大的文章,豈不是誤人子弟。所以如果你看到了這里,請(qǐng)一定對(duì)本文的所有文字持保留態(tài)度,這里沒有真理,只是我的一些分享,不一定適合所有人。 當(dāng)然,如何成為編程大牛,我更是一點(diǎn)經(jīng)驗(yàn)也沒有。不過經(jīng)過這些年的摸索,還是想給大家提幾點(diǎn)具體的建議:
最后,祝大家在技術(shù)的道路上勇往直前,成為編程大牛! 由于頭條禁止發(fā)布外鏈,所以想要獲取文中相應(yīng)教程的小伙伴直接關(guān)注我的微信公眾號(hào)就可以啦!
|
|