人工智能技術(shù)的快速發(fā)展,掀起了人們學(xué)習(xí)編程的浪潮,因?yàn)橹挥型ㄟ^(guò)學(xué)習(xí)編程,人類才不會(huì)被機(jī)器取代,并且有可能成為赫拉利眼中的神人,成為統(tǒng)治機(jī)器的領(lǐng)導(dǎo)者。過(guò)去,編程好像只是一些聰明人的跑馬場(chǎng),普通人只能在場(chǎng)外轉(zhuǎn)悠。然而,網(wǎng)絡(luò)打破了入場(chǎng)的柵欄,借助網(wǎng)絡(luò),世界各地的人們頻繁且高效地進(jìn)行思想交流。于是,一個(gè)空前的創(chuàng)新時(shí)代出現(xiàn)了。近年來(lái),只要幾個(gè)月就會(huì)冒出一門新的編程語(yǔ)言,仿佛人人都能發(fā)明一門語(yǔ)言,我們是如此的幸運(yùn),趕上了這么好的時(shí)代。如果你也想成為一名發(fā)明家,那么,請(qǐng)從學(xué)習(xí)編程開(kāi)始。
眾所周知,學(xué)習(xí)編程的步要學(xué)習(xí)一門語(yǔ)言,那么該如何選擇呢?是基礎(chǔ)的C語(yǔ)言,還是高級(jí)的Java語(yǔ)言?如果你也有上面的疑惑,請(qǐng)參考一下每年的十大流行編程語(yǔ)言排行榜。2020年排在位是JavaScript,可見(jiàn)它是受歡迎的語(yǔ)言,原因是JavaScript不僅用途廣泛、使用簡(jiǎn)單,并且具有良好的可移植性;它的應(yīng)用常見(jiàn)于Web開(kāi)發(fā),比如網(wǎng)站和App,還可以用于開(kāi)發(fā)游戲。重要的是,當(dāng)今是移動(dòng)互聯(lián)網(wǎng)的時(shí)代,Web開(kāi)發(fā)技術(shù)已經(jīng)成為剛需。如果你想學(xué)習(xí)Web開(kāi)發(fā),請(qǐng)從本書開(kāi)始。
什么是Web全棧開(kāi)發(fā)
Web全棧開(kāi)發(fā)的概念是扎克伯格在2014年次提出的,但到目前為止,人們尚未對(duì)Web全棧開(kāi)發(fā)給出一致的定義。普遍比較認(rèn)可的一種觀點(diǎn)是,一個(gè)Web應(yīng)用產(chǎn)品(比如網(wǎng)站、App)從技術(shù)方面來(lái)看,可以分為前端和后端,而全棧就是涵蓋了前后端兩種技術(shù)棧的總稱。具體來(lái)說(shuō),這些技術(shù)棧包括前端開(kāi)發(fā)(HTML、CSS和JavaScript)、服務(wù)器部署、數(shù)據(jù)庫(kù)(比如MySQL和MongoDB)、后端開(kāi)發(fā)(PHP或Nodejs)、性能優(yōu)化技術(shù)(比如緩存)等。如果要全面掌握這些技術(shù)至少需要五年,然而這不是本書的意圖。本書只是希望從前/后端編程技術(shù)出發(fā),帶你初步領(lǐng)略一下Web全棧世界。本書的寫作目的有以下三個(gè):
,對(duì)初學(xué)者友好,通過(guò)揭示W(wǎng)eb應(yīng)用的工作原理和Web開(kāi)發(fā)需要的編程技術(shù),結(jié)合大量實(shí)例,幫助你輕松打開(kāi)Web開(kāi)發(fā)世界的大門;
第二,詳細(xì)地描述搭建完整Web應(yīng)用的全部流程,便于你快速了解前端工程師需要做什么,后端工程師更看重什么,以及前端工程師與后端工程師之間如何配合;
第三,清晰地展示W(wǎng)eb開(kāi)發(fā)崗位的職業(yè)晉升路線,先成為一名前端工程師,再轉(zhuǎn)為后端工程師,逐步升級(jí)到全棧工程師,終成為系統(tǒng)架構(gòu)師。
編程語(yǔ)言只是工具
市面上大多數(shù)Web開(kāi)發(fā)書籍都是以編程語(yǔ)言的語(yǔ)法介紹和使用為主線,包括羅列HTML的標(biāo)記,展示CSS的樣式屬性和選擇器的用法,講解JavaScript的基本語(yǔ)法等。很多讀者表示,這些語(yǔ)言學(xué)完后,還是不會(huì)做Web開(kāi)發(fā),也記不住這么多的語(yǔ)法。原因在于,這類手冊(cè)式的書,只是為你提供了一個(gè)個(gè)獨(dú)立的知識(shí)點(diǎn),而具體應(yīng)用時(shí),則需要對(duì)這些知識(shí)點(diǎn)進(jìn)行多種組合和不斷實(shí)踐。但是,關(guān)于如何去組合和實(shí)踐,卻沒(méi)有告訴你。
本書想告訴你的是,編程語(yǔ)言只是工具,是幫助你建設(shè)一個(gè)Web應(yīng)用的手段而已。所以,你應(yīng)該有個(gè)具體的挑戰(zhàn)目標(biāo),想要搭建一個(gè)什么樣的網(wǎng)站或App,然后對(duì)應(yīng)著各個(gè)頁(yè)面的功能,去學(xué)習(xí)所需的技術(shù)就好,沒(méi)有必要把每一門編程語(yǔ)言的所有語(yǔ)法都學(xué)一遍再動(dòng)手;實(shí)話告訴你,很多CSS的樣式屬性你可能未來(lái)十年也用不到。實(shí)際上,學(xué)習(xí)Web開(kāi)發(fā)技術(shù),樹(shù)立一個(gè)明確的目標(biāo)才是重要的,而編程語(yǔ)言只是實(shí)現(xiàn)目標(biāo)的手段,千萬(wàn)不要本末倒置。有了目標(biāo)之后,就要不斷嘗試與實(shí)踐,這才是打開(kāi)Web開(kāi)發(fā)世界大門的正確方式。
主張帶著任務(wù)主動(dòng)學(xué)習(xí)
有效的學(xué)習(xí)一定是主動(dòng)的,只有當(dāng)你為了解決問(wèn)題而去有意識(shí)地學(xué)習(xí),才會(huì)真正有效果。如果你以前只是一味地跟著作者的思路走,那么大概率是,你以為看完了全書好像什么都會(huì)了,實(shí)際上,一周過(guò)后,你會(huì)發(fā)現(xiàn),全書跟你一點(diǎn)關(guān)系都沒(méi)有。因此,本書提倡以任務(wù)為主的學(xué)習(xí),通過(guò)給出若干個(gè)任務(wù)(示例),讓你思考并選擇合適的技術(shù)去完成任務(wù)。要知道,所有技術(shù)只是為你建造Web大樓提供水泥和鋼筋而已,其設(shè)計(jì)和實(shí)施才是核心,而這兩項(xiàng)重要任務(wù)的決定權(quán)完全在你。
全書內(nèi)容框架
全書從總體上來(lái)看,可以分為4個(gè)部分。
部分是準(zhǔn)備工作。第1章,主要介紹Web的發(fā)展歷史和規(guī)律,重點(diǎn)揭示W(wǎng)eb的工作原理。第2章,安裝必要的開(kāi)發(fā)工具,為正式的開(kāi)發(fā)做準(zhǔn)備。
第二部分是詳細(xì)闡述前端開(kāi)發(fā)技術(shù)。第3~5章,圍繞前端的基礎(chǔ)技術(shù)展開(kāi),包括HTML、CSS和JavaScript這三大核心技術(shù),能夠?qū)崿F(xiàn)交互式網(wǎng)頁(yè)的基本搭建。第6~9章,深入地介紹對(duì)象的使用,并重點(diǎn)介紹框架的用法和對(duì)于快速開(kāi)發(fā)的意義。
第三部分是關(guān)于后端開(kāi)發(fā)技術(shù)的介紹。第10~13章,重點(diǎn)介紹服務(wù)器端的開(kāi)發(fā)技術(shù),包括PHP腳本的用法,MySQL數(shù)據(jù)庫(kù)技術(shù)能做什么,以及PHP和MySQL之間的合作。
第四部分(第14章)是一個(gè)綜合項(xiàng)目。目標(biāo)是通過(guò)一個(gè)綜合項(xiàng)目實(shí)戰(zhàn),展示如何將前端技術(shù)和后端技術(shù)相結(jié)合,實(shí)現(xiàn)一個(gè)強(qiáng)交互性的全棧。
本書適合哪些讀者
本書可以作為想要成為具有競(jìng)爭(zhēng)力的全棧工程師的入門書籍。其中,前端技術(shù)包括HTML、CSS、JavaScript,以及CSS的框架Bootstrap和JavaScript的jQuery;后端技術(shù)主要是PHP和MySQL;蛟S你已經(jīng)聽(tīng)說(shuō)過(guò)這些技術(shù),但好奇為什么沒(méi)有提到當(dāng)下流行的框架,Vue.js和AngularJS,以及后端的代表Node.js,原因是它們并不適合初學(xué)者(連全棧是什么都不懂的小白),它們更適用已經(jīng)練就了基本功并且已經(jīng)具備實(shí)戰(zhàn)經(jīng)驗(yàn)的開(kāi)發(fā)人員,它們是用來(lái)提高效率的,而不是領(lǐng)你入門的。如果你現(xiàn)在只是一個(gè)程序員小白,恭喜你,你選對(duì)了書。因?yàn)閷W(xué)完本書,我保證你將對(duì)Web全棧開(kāi)發(fā)有一種原來(lái)如此簡(jiǎn)單的感覺(jué),因?yàn)槲也恢皇鞘职咽纸棠阕鯳eb開(kāi)發(fā),而是將其中暗藏的玄機(jī)(技巧和原理)告訴你,讓你不至于為了一個(gè)坑而陷進(jìn)去很久出不來(lái)。但同時(shí),我要鄭重聲明,本書不是手冊(cè)式教程,所以不會(huì)列出Web開(kāi)發(fā)需要的所有語(yǔ)法和用法,而是會(huì)挑選出重點(diǎn)且具有啟發(fā)意義的內(nèi)容,幫助你盡快上路,從而找到進(jìn)入Web世界的鑰匙。
本書配套資源
對(duì)于執(zhí)著于源代碼的讀者,我自然不敢怠慢,只要你從正版途徑購(gòu)買了本書,書中所有的源代碼會(huì)隨書附贈(zèng);除此之外,為了幫助讀者理清圖書脈絡(luò),也為了便于將本書用作培訓(xùn)教學(xué)用書的老師方便講課,我抽取了全書的框架內(nèi)容制作了PPT課件。以上內(nèi)容作為本書的配套資源贈(zèng)送給讀者,讀者可以通過(guò)封底的二維碼和下載鏈接提取使用。
為了保證讀者獲取配套資源的順暢度,還有以下備用鏈接,以作不時(shí)之需。
鏈接:https://pan.baidu.com/s/1HlP4suKFAVjQ5cu-Xcu-8A
提取碼:4m63
感謝與交流
受我自身能力所限,書中難免會(huì)有對(duì)技術(shù)解讀的不當(dāng)和偏頗之處,如果你在閱讀本書的過(guò)程中發(fā)現(xiàn)了類似的錯(cuò)誤與不恰當(dāng)?shù)谋硎,誠(chéng)摯地歡迎你在github上寫下你的意見(jiàn)和建議(https://github.com/cathydongxueyan/Web-full-stack-develop),我會(huì)對(duì)你表示極大的感激,并將盡努力將其完善。
第1章 Web到底是怎么一回事兒
1.1 Web的前世、今生和未來(lái).. 1
1.1.1 被動(dòng)的Web 1.0. 1
1.1.2 交互的Web 2.0. 1
1.1.3 智能的Web 3.0. 2
1.2 每一次瀏覽網(wǎng)頁(yè)都發(fā)生了什么.. 3
1.2.1 通信... 3
1.2.2 統(tǒng)一資源定位器... 5
1.2.3 瀏覽器如何理解網(wǎng)頁(yè)... 6
1.2.4 從程序方面理解網(wǎng)頁(yè)... 8
1.3 Web應(yīng)用開(kāi)發(fā)模式的演變.. 10
1.4 什么是前端、后端和全棧.. 11
1.4.1 吸引用戶的前端... 11
1.4.2 數(shù)據(jù)為王的后端... 11
1.4.3 綜合型全棧及案例分析... 12
1.5 本章小結(jié).. 13
第2章 開(kāi)發(fā)之旅前的準(zhǔn)備工作
2.1 代碼編輯工具.. 14
2.1.1 的Notepad . 14
2.1.2 極速開(kāi)發(fā)者的利器:HBuilderX.. 14
2.2 測(cè)試環(huán)境Chrome瀏覽器.. 16
2.3 本地服務(wù)器的搭建.. 17
2.3.1 Xampp的安裝... 17
2.3.2 Xampp的配置... 18
2.4 個(gè)Web應(yīng)用hello,world. 19
2.5 本章小結(jié).. 20
第3章 構(gòu)建網(wǎng)頁(yè)內(nèi)容HTML基礎(chǔ)
3.1 HTML一門關(guān)于標(biāo)記的語(yǔ)言.. 21
3.1.1 普通文本VS超文本... 21
3.1.2 標(biāo)簽的基本用法... 22
3.1.3 屬性的基本用法... 23
3.2 超鏈接標(biāo)記小案例:做一個(gè)個(gè)人博客主頁(yè).. 23
3.3 關(guān)于路徑.. 26
3.3.1 路徑大考驗(yàn)... 26
3.3.2 相對(duì)路徑法則... 28
3.4 列表標(biāo)簽小案例:制作國(guó)際新聞頁(yè)面.. 28
3.4.1 列表標(biāo)簽的妙用... 28
3.4.2 列表標(biāo)簽的基本用法... 29
3.5 表格標(biāo)簽小案例:制作一張財(cái)務(wù)季度報(bào)表.. 30
3.5.1 表格的使用... 30
3.5.2 表格跨行跨列的秘訣... 31
3.6 表單小案例:制作求職申請(qǐng)表.. 32
3.6.1 表單標(biāo)簽... 32
3.6.2 表單用法大揭秘... 34
3.7 一對(duì)好兄弟Get請(qǐng)求和Post請(qǐng)求.. 34
3.7.1 數(shù)據(jù)在地址欄中的Get請(qǐng)求... 34
3.7.2 數(shù)據(jù)在隱秘處的Post請(qǐng)求... 35
3.8 本章小結(jié).. 37
第4章 網(wǎng)頁(yè)一定要漂亮CSS入門
4.1 為什么需要CSS. 38
4.1.1 什么是CSS. 38
4.1.2 CSS的工作原理... 39
4.1.3 CSS帶來(lái)了哪些變化... 40
4.2 容器的作用.. 41
4.2.1 兩個(gè)常用的容器:div和span. 42
4.2.2 容器的實(shí)際應(yīng)用:添加樣式... 43
4.2.3 CSS樣式的基本用法... 44
4.3 為什么是層疊樣式表.. 45
4.3.1 四種定義樣式的方式... 45
4.3.2 樣式?jīng)_突怎么辦... 46
4.4 一切都是盒子盒子模型.. 48
4.4.1 盒子模型的基本定義... 49
4.4.2 盒子使用定理... 50
4.4.3 盒子在頁(yè)面布局中的兩種常見(jiàn)用法... 50
4.5 選擇器讓樣式的應(yīng)用更有目標(biāo)感.. 54
4.5.1 id選擇器... 54
4.5.2 class選擇器... 55
4.5.3 class選擇器與id選擇器的嵌套使用... 57
4.6 元素的浮動(dòng).. 58
4.6.1 一行多列... 59
4.6.2 多個(gè)元素在一行... 60
4.6.3 多個(gè)盒子元素在一行... 61
4.6.4 清除浮動(dòng)... 62
4.7 關(guān)于偽類.. 65
4.7.1 偽類和偽類元素... 65
4.7.2 利用偽狀態(tài)修改選項(xiàng)卡... 65
4.7.3 小案例:讓圖片動(dòng)起來(lái)... 66
4.8 本章小結(jié).. 67
第5章 網(wǎng)頁(yè)交互的核心JavaScript入門
5.1 前端三兄弟:HTML、CSS和JavaScript 69
5.1.1 各肩重任... 69
5.1.2 在程序中的配合... 70
5.1.3 代碼的組織規(guī)范... 71
5.2 JavaScript工作原理大揭秘.. 73
5.2.1 編譯型語(yǔ)言VS 解釋型語(yǔ)言... 73
5.2.2 交互式網(wǎng)頁(yè)的精髓... 74
5.3 像程序員一樣思考.. 77
5.3.1 看圖猜價(jià)格游戲... 77
5.3.2 程序控制的三種結(jié)構(gòu)... 82
5.4 JavaScript基礎(chǔ).. 83
5.4.1 存儲(chǔ)數(shù)據(jù):變量與常量... 83
5.4.2 做計(jì)算:運(yùn)算符和表達(dá)式... 88
5.4.3 功能實(shí)現(xiàn)的代碼塊:函數(shù)... 96
5.4.4 變量大集合:對(duì)象... 99
5.5 常用的兩個(gè)原裝對(duì)象:String和Array. 102
5.5.1 字符串對(duì)象:String. 102
5.5.2 數(shù)組對(duì)象:Array. 103
5.5.3 JavaScript的核心API 104
5.6 本章小結(jié).. 104
第6章 拜訪三大對(duì)象:Window、Document和Event
6.1 三大對(duì)象概述.. 107
6.1.1 三大對(duì)象的作用... 107
6.1.2 事件驅(qū)動(dòng)... 108
6.2 認(rèn)識(shí)window 對(duì)象.. 109
6.2.1 Window對(duì)象的屬性用法... 111
6.2.2 Window對(duì)象中方法的應(yīng)用... 112
6.2.3 Window對(duì)象中事件的用法... 113
6.2.4 超好用的計(jì)時(shí)器... 114
6.3 理解document對(duì)象.. 117
6.3.1 一起來(lái)畫DOM樹(shù)... 117
6.3.2 DOM讓JavaScript與元素互動(dòng)起來(lái)... 118
6.3.3 通過(guò)觸發(fā)DOM事件實(shí)現(xiàn)交互... 121
6.4 說(shuō)說(shuō)Event對(duì)象.. 122
6.4.1 Event對(duì)象的屬性... 123
6.4.2 Event對(duì)象的方法... 125
6.5 本章小結(jié).. 127
第7章 如何讓你的頁(yè)面吸引人更多CSS樣式
7.1 原來(lái)字體可以很高級(jí).. 128
7.1.1 文字顏色的設(shè)計(jì)... 128
7.1.2 字體樣式的基本用法... 129
7.1.3 文字的陰影效果... 130
7.2 高大上的按鈕.. 132
7.2.1 圓角按鈕... 132
7.2.2 漸變色按鈕... 133
7.2.3 單重陰影... 133
7.2.4 多重陰影... 135