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