微信号:blogread

介绍:本号收录IT领域的优秀技术博客;在这里你可以找到Web开发、系统架构、数据库、前端技术、用户体验等领域的前沿文章. 官网:http://blogread.cn/it/

留言有奖赠书《一路编程》

2017-01-09 23:58 IT技术博客大学习

一开始,博文视点的朋友找我说:“我们再来个赠书活动,一本适合所有程序员来阅读的经典书”,本能上我是拒绝的,因为通用意味着不是针对某个领域,而过于泛泛而谈,走的是气质路线。


但打脸的是,在微博上做转发赠书活动后,即使是晚上近11点发布,一个半小时就接近200的转发,令我意外。


那么,在微信上也为长期不取关我的同学,带来一次留言赠书的福利吧!在留言中谈谈你对编程语言的理解,我会抽出两位朋友,赠送一本由博文视点赞助的《一路编程》。如果没有抽中,没关系,某东及各大电商都有售。


本活动截止1月20日凌晨有效。


简单介绍一下这本书吧,从目录看,前面讲解编程语言的基础知识,后面讲解实际项目中的通用方案,令人惊喜的看到专门介绍文档、注释如何写,真难得!


比较适合初学者,和全栈发展的同学。


先给出作者写的前言,再列一下目录吧。




前言


我为什么写这本书

像大多数伟大的(会计师)故事一样,我的故事开始于一个Excel电子表格。那是2008年,我正在犹他州普若佛的杨百翰大学学习会计,同时在法学院图书馆做接待员。一天,我的老板问我知不知道如何在Excel里把一列名字随机打乱顺序。“当然,”我骗了他,然后去做了每一个说了大话的人都会做的事:谷歌一下。谷歌给我展示了至少三种能够在Excel中打乱列表顺序的不同方法。2分钟后,我就把打乱顺序的列表交给了老板。就在那时,她认定我很擅长计算机,应该去图书馆系统部工作。我不太确定是不是用谷歌检索东西的天赋就等于擅长计算机,但我很感激她这么认为。

我的编程之旅就是从法学院图书馆系统部开始的。第一天,我的老板给了我一本有着25年历史的书——Perl编程》,并向我展示了我的桌子,坐落在一个没有窗户的房间,上面杂乱地堆放着老旧的计算机、键盘和显示器。临走之前,他告诉我,他正忙其他事情,但是在他回来之前,这个Perl教材会让我一直有事可做。我翻开书,开始阅读,那是我从没有过的感受。

那本书写于Windows尚未出现之时,所以它假定读者在用UNIX操作系统(我从没听说过UNIX)。我忽略了这条,继续使用我的Windows XP计算机,它刚刚从图书馆计算机实验室退休(在此之前,我从没听说一台计算机对于一个图书馆计算机实验室来说太老了的这种事)。那本书说,给某个地址寄一封贴好邮票的回邮信封,就会收到一张存着Perl的软盘。我决定不邮寄而使用我的谷歌技能,找到下载和安装Perl的说明。我以前下载过软件,但我并不知道程序语言也需要下载安装,我有点紧张,怕把我的计算机搞坏,但我发现没法跳过这一步,只能硬着头皮继续。

那本书第1章展示了一些示例代码用来打印Hello, World!看起来就像这样

print(“Hello, world!”);

书中让我把这段示例代码保存到一个名为hello_world.pl的文件中。我之前唯一用过能往计算机里输入文本的软件就是Word于是我打开Word开始打字。我大概花了45秒意识到Word不是写代码的地方,然后花了45分钟才找到正确的地方。穷尽我所有谷歌技能,都想不出来该搜索什么才能找到写代码的正确方式。我现在进入了一个全新的、不熟悉的世界,我熟悉的那些检索词都没用。最终,我找到了答案——记事本(正如你将在第1章“‘Hello, World!’写下你的第一个程序”中会学到的,记事本并不是正确答案,但它确实可以工作),然后我继续艰难前进,只是有一点点沮丧。

最终,我把书中的代码敲进记事本,并保存文件。什么都没发生。但我“很擅长计算机”,而且我知道如果有什么东西不工作,你应该尝试重启。所以我关掉了这个文件,尝试通过双击重新打开它。一个黑底白字的小窗口在屏幕上一闪而过,持续不到1秒就消失了,而且记事本也没有打开。那时,我觉得我把计算机给搞坏了,而且我不太相信我的老板不会因为一台计算机坏了而发火,尽管它已经很旧了。然后我的脑中闪过一个想法,就是我的程序事实上已经执行完了。我穿过房间,跑到打印机旁,想看看我是不是已经成功打印了“Hello world!”。打印机空闲着,托盘里也没有任何新打印出来的纸张。我试着重启打印机,以防万一。不走运(在很久之后我才知道print意味着打印到屏幕,而不是打印到一张纸上),那天下午剩下的时间就在重复着这种令人抓狂的事情。

那天结束时,我感觉我并不擅长计算机;事实上,计算机在用它们的方式对付我,而且它们好像乐在其中。我很想放弃,但我需要工作,而且我不愿言败,我不想让计算机获胜。接下来的几个月里,我只取得缓慢而零星的一些进展。我不断在原地打转,不得不一遍又一遍学习一些相同的东西。唯一可能有能力指导我、回答我问题的人,不是特别忙,就是太有经验以至于帮不上什么忙。就像我在读的那本有关Perl的书(它假设我已经知道怎么用C编程,鬼才知道那是什么东西),这些可能的指导老师都认为我懂得比我实际知道的多得多。我不想泄露我什么都不知道,怕丢掉工作(这可能不是个明智的举动)。然而,即使一开始感到沮丧,我也能看出程序是多么强大,而且甚至还挺享受的。最终,知识碎片开始汇集到一起,我慢慢开始理解。

我的编程入门之路经历了许多的坎坷,而且我意识到,每个希望自学编程的人,都可能有类似的经历。有几次,我想要放弃,觉得编程就是给那些计算机科学系的书呆子学生准备的。编程在刚开始学习时确实有些吓人,而有经验的程序员知道那么多东西,以至于让人不敢对他们提问题。但是不管有多难,不管多少次你可能想要用头撞桌子或是把计算机扔到地上,编程最终会带给你惊人的乐趣和回报。当我意识到编程有多么棒时,我放弃了会计学硕士学位和一个在顶级会计师事务所工作的机会,转而从事编程。我从没后悔。我写下这本书,是因为当年刚开始学编程时,就想有这么一本书。

为什么你应该读这本书

计算机就在我们身边,遍布我们生活方方面面,然而大多数人还并不真正理解它们的工作方式,或者如何让计算机为我们工作。我们都被限制在计算机已经知道怎么做的那些事情上,但是计算机一直以来都意图成为可编程的机器。你可以为你桌上的计算机编程,让它做任何你想要做的事。随着世界越来越依赖于计算机,编程技能对每个人来说都将是必需的,不仅仅是对专业软件工程师或开发者来说如此。这本书会帮助你学习编程,并且乐在其中。

在接下来的几页,你会建立编程基础,为你实现全部编程目标做好准备。不论你想要成为一个专业的软件开发者,还是想要学习如何更高效地和程序员沟通,或者只是对于程序如何工作感到好奇,这本书都非常适合作为帮你达成所愿的第一步。学习编程仍将困难,但却有可能,并且有希望变得有趣,而不是让人沮丧。

你的项目

最好的学习编程的方式就是真正去编程。贯穿本书,你将编写一个完整的Chrome浏览器扩展程序。Chrome浏览器扩展程序是能够增强(或者扩展)Chrome浏览器功能的程序。我们即将搭建的这个扩展程序会向用户询问名字和手机号,然后把用户Facebook新鲜事里的所有照片,都根据用户的位置(通过电话号码确定)改成小猫小狗。这个扩展程序(我们称之为猫咪书)可能没什么特别的用处,但搭建它的过程会很有趣,而且期间会帮你学到很多重要的编程概念。




目录


1  “Hello, World”写下第一个程序    1

选择文本编辑器      1

核心功能    2

做出你的选择         4

SublimeText           5

TextMate     5

Notepad++  5

Gedit          6

Vim           6

Eclipse       6

IntelliJ        7

Xcode         7

VisualStudio           7

创建项目目录         8

从小处着手:创建测试文件 8

HTMLJavaScript如何在浏览器中一起工作            10

小幅修改的意义      11

乘胜追击    13

manifest.json中引用JavaScript      16

让它运行起来         17

能力越大,责任越大           18

总结          18

2  软件如何工作     19

什么是“软件”      19

软件生命周期         20

源代码——一切开始的地方 21

一组指令    21

编程语言    22

从源代码到01    27

编译型语言与解释型语言:源代码何时变成二进制码 27

运行时环境 28

处理器执行 29

输入和输出 29

输入让软件更实用(可重用)          30

输入从哪来 31

软件如何获得输入  32

输出类型    32

GIGO:垃圾进,垃圾出(Garbage InGarbage Out 33

状态          34

kittenbook添加状态         35

内存和变量 37

变量          37

变量存储    38

有限的资源 41

内存泄漏    41

总结          42

认识你的计算机  43

计算机很笨 43

计算机有魔力         44

站在巨人的肩膀上  44

计算机内部 44

处理器       44

短期存储器 45

长期存储器 45

使用计算机 46

文件系统    46

命令行:取得控制权           48

总结          58

构建工具            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

数据(类型)、数据(结构)、数据(库) 79

数据类型    79

为什么存在不同数据类型    80

基本数据类型         80

组合数据类型         85

动态和静态类型语言           92

数据结构    93

集合          96

  96

  97

  98

如何选择高效的数据结构    101

数据库       101

长期(持久化)存储           101

关系型数据库         101

SQL简介   103

总结          105

正则表达式         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

何时使用ifforwhile    129

操作符       129

比较操作符 129

逻辑操作符 130

一元操作符 132

二元操作符 132

三元操作符 135

”  137

语法糖”    139

循环遍历一个数组  140

遍历图片    140

嵌套循环    141

你需要停下来         142

无限循环    144

再停一下    145

当你不知道什么时候停下    145

何时执行    145

事件          145

监听器       146

定时任务    147

超时          147

在事情出错前接住它           148

编写健壮的代码      149

总结          149

函数和方法         151

函数结构    151

定义          152

调用          152

参数          153

调用栈       155

代码封装    156

一次做好一件事      156

分而治之    157

物尽其用    161

代码重用    161

解决通用问题         161

用更少的代码做更多的事情 161

不要做重复的事(DRY    163

作用域       164

全局变量    166

本地变量    166

变量查找是怎么工作的        167

总结          170

编程标准            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

KhanAcademy(可汗学院) 251

教程          251

付费教育    251

读书          252

UdacityCoursera  252

Treehouse    253

总结          253

15  高级主题          255

版本控制    255

为什么使用版本控制           256

和团队一起工作      257

Subversion  260

Git 260

OOP(面向对象编程)        266

  266

继承          267

实例          268

设计模式    268

发布订阅    268

中间人       269

单例          270

总结          270


 
IT技术博客大学习 更多文章 如何在微信小程序里面实现跨页面通信? 详解Linux bash中的变量 什么是全栈工程师? 当你在写程序的时候,产品经理在想什么? Kafka Connect简介
猜您喜欢 【第168期】Vue列表渲染性能优化原理总结 再谈程序员学英语 Python中的变量绑定[1] MySQL for update 死锁案例 Spark1.0.0 学习路线指导