《一路編程》幫你打下堅實的編程基礎,為實現各種編程目標做準備。作者Steven Foote自學編程,找到瞭可剋服重重睏難的*佳方式。作為一個專業Web開發者,他將帶你跟隨他的足跡,教給你可以用在任何現代編程語言之中的概念,不論你是麵嚮計算機,還是智能手機、平闆電腦,甚至是機器人進行編程。
√ 學習如何簡化及自動化諸多編程工作
√ 在程序中處理不同類型的數據
√ 使用正則錶達式查找和處理模式
√ 編寫能夠決定該做什麼、什麼時候做的程序
√ 使用函數編寫乾淨、簡潔的代碼
√ 編寫可以讓其他人很容易理解和改進的程序
√ 測試並調試軟件,使其變得可靠
√ 和程序員團隊一起工作
√ 學習接下來要建立一生的編程技能的步驟
這是一本編程入門的書,然而,如果以書中所講內容作為入門標準,估計十有八九的在職程序員都不能算入門。現代軟件開發,已經不僅僅是寫齣正確的代碼這麼簡單,環境、依賴、構建、版本、測試以及文檔,每一項都對軟件是否成功交付起到至關重要的作用,這些都是每一個程序員在開發軟件過程中必備的技能。本書對於上述的每一種技能,都做瞭簡潔而精煉的介紹,以滿足最基本的日常軟件開發。換句話說,本書實際上是為現代軟件開發的入門,設下瞭最基本的門檻。相信每一個讀此書的人,不論是即將進入軟件行業,還是已經在軟件行業工作多年,都會獲得收獲。
佟達,畢業於哈爾濱工業大學,信息與通信工程碩士學位,現就職於ThoughtWorks,任高級谘詢師。常年遊走於工程與學術之間,驕傲的稱自己為“會coding的科學傢,懂數學的工程師”。目前專注於人工智能和深度學習領域。 STEVEN FOOTE,Web開發者,就職於LinkedIn。自學編程,熱愛技術,尤其是Web技術,持有楊百翰大學(Brigham Young University,會計專業全美**名)會計專業學士和碩士學位。在攻讀碩士學位期間,他搭建瞭兩個AJAX風格Web應用的所有方麵,從視覺設計到服務器和數據庫運維,以及其他所有東西。
1 “Hello, World”寫下第一個程序 1
選擇文本編輯器 1
核心功能 2
做齣你的選擇 4
Sublime Text 5
TextMate 5
Notepad++ 5
Gedit 6
Vim 6
Eclipse 6
IntelliJ 7
Xcode 7
Visual Studio 7
創建項目目錄 8
從小處著手:創建測試文件 8
HTML和JavaScript如何在瀏覽器中一起工作 10
小幅修改的意義 11
乘勝追擊 13
在manifest.json中引用JavaScript 16
讓它運行起來 17
能力越大,責任越大 18
總結 18
2 軟件如何工作 19
什麼是“軟件” 19
軟件生命周期 20
源代碼――一切開始的地方 21
一組指令 21
編程語言 22
從源代碼到0和1 27
編譯型語言與解釋型語言:源代碼何時變成二進製碼 27
運行環境 28
處理器執行 29
輸入和輸齣 29
輸入讓軟件更實用(可重用) 30
輸入從哪來 31
軟件如何獲得輸入 32
輸齣類型 32
GIGO:垃圾進,垃圾齣(Garbage In,Garbage Out) 33
狀態 34
給kittenbook添加狀態 35
內存和變量 37
變量 37
變量存儲 38
有限的資源 41
內存泄漏 41
總結 42
3 認識你的計算機 43
計算機很笨 43
計算機有魔力 44
站在巨人的肩膀上 44
計算機內部 44
處理器 44
短期存儲器 45
長期存儲器 45
使用計算機 46
文件係統 46
命令行:取得控製權 48
總結 58
4 構建工具 59
(幾乎)全部自動化 59
安裝Node 60
安裝Grunt 62
幫你創造軟件的軟件 65
避免錯誤 66
更快地工作 66
自動化的任務 67
編譯 67
測試 68
打包 68
部署 68
構建你自己的構建過程 69
Gruntfile.js 69
使用Grunt插件 69
加載Grunt插件 72
注冊任務 73
看好瞭 74
總結 77
5 數據(類型)、數據(結構)、數據(庫) 79
數據類型 79
為什麼存在不同的數據類型 80
基本數據類型 80
組閤數據類型 85
動態和靜態類型語言 92
數據結構 93
集閤 96
棧 96
樹 97
圖 98
如何選擇高效的數據結構 101
數據庫 101
長期(持久化)存儲 101
關係型數據庫 101
SQL簡介 103
總結 105
6 正則錶達式 107
Ctrl+F組閤鍵:尋找模式 107
在JavaScript中使用正則錶達式 108
重復 109
? 109
+ 110
* 110
特殊字符和轉義字符 111
{1, 10}:創造屬於你的超能力 111
匹配任意字符的“.” 112
不要太貪婪 112
從[A-Za-z]理解方括號 113
字符列錶 113
範圍 114
排除 114
電話號碼模式 115
我需要s 117
方括號的快捷方式 118
限製條件 119
提取標簽 123
高級查找和替換 124
(一行的)開頭和結尾 124
標記 125
全局匹配 125
忽略大小寫 125
多行 125
什麼時候會用到正則錶達式 125
grep 125
代碼重構 126
校驗 127
數據抽取 127
總結 127
7 何時使用if、for、while 129
操作符 129
比較操作符 129
邏輯操作符 130
一元操作符 132
二元操作符 132
三元操作符 135
“真”和“假” 137
“語法糖” 139
循環遍曆一個數組 140
遍曆圖片 140
嵌套循環 141
你需要停下來 142
無限循環 144
再停一下 145
當你不知道什麼時候停下 145
何時執行 145
事件 145
監聽器 146
定時任務 147
超時 147
在事情齣錯前接住它 148
編寫健壯的代碼 149
總結 149
8 函數和方法 151
函數結構 151
定義 152
調用 152
參數 153
調用棧 155
代碼封裝 156
一次做好一件事 156
分而治之 157
物盡其用 161
代碼重用 161
解決通用問題 161
用更少的代碼做更多的事情 161
不要做重復的事(DRY) 163
作用域 164
全局變量 166
本地變量 166
變量查找是怎麼工作的 167
總結 170
9 編程標準 171
編碼慣例 171
設定標準 172
黑科技,用還是不用 172
立即付款還是先用後付款 173
寫可維護的代碼 173
代碼格式化 174
保持一緻 175
空白字符 176
規則不會自己齣現:要製定規則 177
使用其他人的成果 179
更快地構建 179
開源軟件 179
由社區建立 180
什麼時候該自己寫 180
最佳實踐 181
文檔 181
計劃 181
測試 181
總結 182
10 文檔 183
文檔化意圖 184
自文檔代碼 185
不要將顯而易見的東西寫入文檔 187
過時文檔的危險性 188
用文檔來找bug 189
為自己寫文檔 189
你的記憶力有多好 189
為瞭學習而記錄文檔 190
超越注釋的文檔 190
給彆人寫的文檔 194
記錄你的決定 195
記錄你的資源 195
為瞭教學而寫文檔 196
總結 196
11 計劃 197
三思而後行 197
創建規格說明 198
設計架構 198
畫示意圖 199
嘗試破壞你的係統 200
迭代式計劃 201
為擴展設計 202
你的優先級是什麼 202
用戶體驗 202
性能 203
安全 203
伸縮性 203
截止日期 204
平衡的藝術 204
識彆並創建限製條件 204
知道可以做什麼,不可以做什麼 204
總結 206
12 測試和調試 207
手工測試 207
邊做邊測 208
嘗試些瘋狂的事 208
吃你自己的狗糧 209
自動化測試 209
單元測試 210
給Kittenbook配置測試 213
失敗時代 217
間諜喜歡我們(我們也喜歡間諜) 218
集成測試 221
盡早發現問題 221
調試 222
錯誤 222
日誌 223
斷點 224
查看、監控和控製颱 228
單步執行代碼 229
調用棧 231
找到根本原因 231
編碼、測試、調試、不斷重復 231
總結 232
13 授人以漁:如何用一生學習編程 233
如何搜索 233
找到正確的關鍵字 234
以終為始 236
識彆高質量資源 236
個人博客:隱藏的寶藏 237
什麼地方、什麼時候,以及怎麼問編程問題 237
什麼地方 237
什麼時候 240
怎麼問 241
通過教彆人來學習 241
總結 242
14 構建你的技能 243
做你自己的kittenbook 243
給Facebook重新設計風格 243
添加新功能 244
分享你的kittenbook專屬版本 245
找到你自己的項目 245
解決你自己的問題 246
誌存高遠 246
獲得幫助,提供幫助 247
開源項目 247
GitHub 247
找項目 248
貢獻的不同方式 248
創建你自己的項目 249
免費在綫教育 249
歐拉項目 249
Udacity 250
Coursera 250
codeacademy 251
Khan Academy(可汗學院) 251
教程 251
付費教育 251
讀書 252
Udacity和Coursera 252
Treehouse 253
總結 253
15 高級主題 255
版本控製 255
為什麼使用版本控製 256
和團隊一起工作 257
Subversion 260
Git 260
OOP(麵嚮對象編程) 266
類 266
繼承 267
實例 268
設計模式 268
發布訂閱 268
中間人 269
單例 270
總結 270
推薦序
編程魔法的麻瓜入門手冊
在看一個涉及舊房改造的電視綜藝節目時,我突然意識到一件事:同樣是需要大量知識和實踐作為基礎的專業人士,程序員似乎從來沒有得到像建築師那樣來自普羅大眾的認可與尊重。究其原因,我想可能部分原因是程序員的工作太缺乏可見性,以至於那些不懂技術的麻瓜們對程序員的印象要麼是盲目崇拜,要麼是盲目輕視,總之沒有那種平等而深入的交流方式。尤其在英語極不普及的中國,天書一般的程序代碼更是讓麻瓜們望而卻步,遑論去理解和交流。像本書譯者、我的同事佟達所遭遇的“傢人不知道我一天到晚在乾些啥”的睏擾,對於廣大中國程序員而言恐怕是傢常便飯。
本著幫助麻瓜進入魔法世界的崇高理想,Steven Foote寫瞭這麼一本精彩的編程入門教材。相比常見的高校編程教材,這本《一路編程》最大的好處是它的“不求甚解”——作者堂而皇之地宣稱:你不知道一行程序代碼背後那些魔法是怎麼發生的嗎?無所謂!“你不需要知道那些指令是什麼,或者理解它們的工作原理,隻要它們能用就行。”這麼一來,讀這本書入門的麻瓜們可就比它們大部分在學校裏上編程課的同儕們更有希望:當那些抱著大部頭教材的學生們正在被指針地址等高深的魔法細節嚇破膽時,這本書的讀者倒是——像已經在乾著程序員這份工作的人一樣——放心大膽地忽視絕大部分細節,寫齣一兩個能運行的程序,並從中獲得繼續學習必不可少的成就感。
其實——齣乎麻瓜們的意料——絕大部分的軟件開發根本不是什麼火箭科學。就像我經常跟朋友打趣說的,我們寫這些程序連四則運算都用不全,主要除法不怎麼用。相比科學,軟件開發其實更像一種工匠手藝(craft)。使一個優秀的程序員區彆於平庸程序員的,正如Neal Ford在《卓有成效的程序員》中所說,是好的習慣和趁手的工具。Foote很準確地抓住瞭這一點。在快速介紹Javascript編程之後,他迅速而不失全麵地介紹瞭體麵的前端程序員應該用到的全套工具箱:命令行、構建工具、數據庫、正則錶達式、測試工具、文檔……招聘時我們常會對著候選人提交的一個光禿禿的源代碼文件撓頭,隻有經曆過這種痛苦的人纔會知道,候選人提交的代碼作業有Grunt構建腳本甚至有單元測試是一件多麼令人愉悅的事。
處在當今這個數字化浪潮方興未艾的時代,能讓麻瓜順利學會編程(或者至少對編程有點概念),其意義超齣傢庭和諧的層麵。中國無比巨大的IT需求,與有限的IT人纔供應之間的矛盾,近年來不僅沒有緩解,倒有愈演愈烈之勢。另外,眾多齣身、學曆平平的青年人有誌於投身IT這個大有前途(至少有“錢途”)的行業,卻苦於邁不過入門的門檻。如果有更多的學校、企業、培訓機構照著Foote這個思路,用深入淺齣、符閤直覺、又貼閤行業最佳實踐的方式來給這些青年人提供指導,不僅能創造若乾就業機會,說大一點更是為“互聯網+”宏觀戰略提供人纔支撐,善莫大焉。
最後,祝各位讀者閱讀愉快,祝佟達及廣大程序員都得到傢人更多的理解與支持,祝更多麻瓜走進編程這一神秘的魔法世界。
ThoughtWorks總監谘詢師 熊節
2016年11月
譯者序
這是最好的時代,也是
最壞的時代
在中國,IT從業者有數百萬人之多,但這其中,稱得上會編程的,不會超過十分之一。
我所說的會編程,絕不僅僅是會寫代碼,而是包括環境搭建、版本管理、構建管理、單元測試、文檔編寫、團隊閤作,以及任務拆分在內的綜閤技能。很多人——包括我自己——一開始都無法理解,一個程序員除瞭寫代碼,為什麼還需要懂這麼多東西。
當年在學校,有幸參加一個學生團體,利用課餘時間做點小項目。第一次幾個人一起寫代碼,還有點小激動。然而激動並沒有延續很久,過瞭兩天,當大傢準備把各自寫的代碼閤到一起時,發現這是個根本無法完成的任務,每個人都有自己的想法,從代碼組織方式,到代碼風格,甚至連IDE都不一樣。那是第一次感受到,真正的軟件開發,和寫C語言程序設計的作業完全不一樣。
2009年年底,我到微軟亞洲研究院的創新工程中心實習,當時的部門負責人是鄒欣,他是《移山之道》和《構建之法》的作者。進組的第一天,我就拿到幾張紙,上麵寫著一些基本的編碼規範。分配給我的電腦上環境已經準備好,從TFS上簽齣項目代碼,在項目文件中的編譯選項已經配置好,直接運行編譯,之後執行腳本就可以將服務跑起來。從新人進組到可以開始工作,不到一天時間,真是讓我眼界大開。當然,這纔是開始,後麵從代碼提交,到工作項分配,再到上綫部署,每一件事都在刷新著我對軟件開發的理解。不過,作為一個小小的實習生,那時的我隻想安安靜靜地寫代碼,沒有仔細思考這些專業工作背後的意義。
我畢業後的第一份工作就職於一傢研究所,所在的部門人員能力都很強,但是因為信息相對閉塞,對於現代軟件開發方法並不是很瞭解,所以開發團隊的很多做法都比較原始,導緻需要花費大量的時間和精力在管理代碼版本、修復由於更新代碼導緻一些已有功能不能用的bug等上。我嘗試將在微軟亞洲研究院學到的那些知識引入到團隊中,覺得隻要搭建起TFS,就水到渠成瞭。可惜現實狠狠給我上瞭一課,搭建TFS其實是所有事情中最簡單的,設定編碼規範、規範代碼提交流程、統一編程環境、編寫自動化腳本等,每一件事都非常睏難。這時我纔意識到,如果一個團隊中大部分人都不瞭解這些現代軟件開發的知識,靠一兩個人去推動,幾乎不可能。
後來,我來到ThoughtWorks,發現這裏每個人都能夠熟練使用Git管理代碼,使用Gulp、Maven、SBT等管理構建構成,還會寫大量的自動化測試來保證質量。從代碼修改到測試環境上綫,隻需要5分鍾時間,整個過程不需要人參與,程序員們隻要看著屏幕上的流水綫走到最後亮起綠燈,就可以安心地做下一個任務。後來有人給這種工作方式起瞭個很直觀的名字,DevOps,中文叫作“開發自運維”。 在這裏,我瞭解到瞭為什麼需要敏捷開發,為什麼要做持續集成、持續交付,為什麼要組建全功能團隊。以前對於軟件開發的很多疑惑,都慢慢解開瞭。我常常想,要是我在還沒畢業的時候,就知道這些事情,會少走多少彎路啊!
最近幾年,參與瞭幾次技術谘詢項目,接觸到更多軟件開發者。很多業界有名的公司,實際上軟件開發人員的技能非常不足。完全不理解軟件工程任何概念的程序員大有人在,不會使用命令行工具、不知道如何處理代碼衝突、從不做單元測試、基本上全靠網上搜索一些代碼片段來完成任務,這樣的人真心不能算會編程。當然也不乏一些在日常工作中有思考,能夠理解軟件開發的痛點,但是苦於不知道如何改進的程序員。因為從來沒有人告訴他們怎麼做纔是正確的編程方式。
現在市麵上對於每一個流行的技術都有大量的書籍文檔做介紹,然而,唯獨缺少一類書,告訴讀者如何纔能做一名閤格的程序員。事實上,我自己以前也一直認為,要想成為一名閤格的程序員,需要讀很多不同方麵的書。直到我看到瞭本書。
當時接下這本書的翻譯,初衷是想要將這本書送給我當時的女朋友,現在的妻子,因為她剛好也是會計,和本書作者在轉行做程序員之前的職業一樣。我的本意是通過這本書,讓我的妻子也可以對編程感興趣,能夠理解我每天對著電腦到底是在乾什麼。然而當我翻譯到第4章,介紹JavaScript構建工具那部分時,我發現這本書並不是我一開始想的那樣,它不隻是一本介紹如何寫JavaScript代碼的入門書。在隻有兩百多頁的書中,作者對所有軟件開發相關的技能都做瞭介紹。對於每個編程必備技能,作者僅僅介紹其在日常開發過程中最常用到的一些知識,用20%的篇幅,把80%的場景都覆蓋到瞭。不僅如此,因為作者自己從對編程一無所知開始學習,所以在介紹一些相對難理解的概念時,能夠設身處地地從初學者角度著想,用直白的語言,將一些概念解釋齣來。盡管可能從專業人士角度看,不算非常嚴謹,但對於日常開發工作來說,剛好夠用。
對於程序員來說,這是最好的時代,物聯網幾乎改變瞭所有行業,甚至已經有人在提“程序員拯救世界”這種說法,作為程序員,我們應感到自豪;然而,這也是最壞的時代,軟件開發對程序員的要求越來越高,20年前也許會用HTML設計網頁已經非常厲害,但今天你需要會很多不同的技能纔能成為一名閤格的程序員。如果你希望能夠在軟件開發這條路上一直走下去,本書可以幫你邁齣堅實的一步。
感謝本書的編輯符隆美,在翻譯本書期間給我不少鼓勵,讓我能夠堅持譯完本書,沒有她的幫助,本書不可能完成。
佟達
2016年11月
前言
我為什麼寫這本書
像大多數偉大的(會計師)故事一樣,我的故事開始於一個Excel電子錶格。那是2008年,我正在猶他州普若佛的楊百翰大學學習會計,同時在法學院圖書館做接待員。一天,我的老闆問我知不知道如何在Excel裏把一列名字隨機打亂順序。“當然,”我騙瞭他,然後去做瞭每一個說瞭大話的人都會做的事:榖歌一下。榖歌給我展示瞭至少三種能夠在Excel中打亂列錶順序的不同方法。2分鍾後,我就把打亂順序的列錶交給瞭老闆。就在那時,她認定我很擅長計算機,應該去圖書館係統部工作。我不太確定是不是用榖歌檢索東西的天賦就等於擅長計算機,但我很感激她這麼認為。
我的編程之旅就是從法學院圖書館係統部開始的。第一天,我的老闆給瞭我一本有著25年曆史的書——《Perl編程》,並嚮我展示瞭我的桌子,坐落在一個沒有窗戶的房間,上麵雜亂地堆放著老舊的計算機、鍵盤和顯示器。臨走之前,他告訴我,他正忙著其他事情,但是在他迴來之前,這個Perl教材會讓我一直有事可做。我翻開書,開始閱讀,那是我從沒有過的感受。
那本書寫於Windows尚未齣現之時,所以它假定讀者在用UNIX操作係統(我從沒聽說過UNIX)。我忽略瞭這條,繼續使用我的Windows XP計算機,它剛剛從圖書館計算機實驗室退休(在此之前,我從沒聽說一颱計算機對於一個圖書館計算機實驗室來說太老瞭的這種事)。那本書說,給某個地址寄一封貼好郵票的迴郵信封,就會收到一張存著Perl的軟盤。我決定不郵寄而使用我的榖歌技能,找到下載和
搞活动买的,很实惠
评分选择京东,主要是快递给力,买书也用上京东了,正版书,很好
评分用了张券,包装希望能好一点,速度很快。
评分正在看 看完再评.....
评分看评价还不错,感觉内容应该还是有不少干货的吧
评分这本书非常不错,系统全面,深入浅出
评分送货很快
评分不错不错?????
评分还不错哦 还不错 还不错
本站所有內容均為互聯網搜索引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度,google,bing,sogou 等
© 2025 tushu.tinynews.org All Rights Reserved. 求知書站 版权所有