Be A Better Programmer

包勇明 / @huntbao

## 内容简介 * 善用工具 * 遵循规范 * 调试技巧 * 如何学习 * 提问技巧 * 训练有素 * 书籍推荐

善用工具

## 开发工具 > 选一款自己喜欢的开发工具,花点时间研究它的配置选项: * 主题 * 字体、颜色 * 关联文件 * 插件 * 代理 * 快捷键
## 开发工具 - 快捷键 * 自动补全 * 代码行 * 复制、删除、选中、移动等 * 代码块 * 折叠、展开、选中、移动、删除等 * 光标控制 * 多光标模式、列编辑模式等 * 代码格式化
## 开发工具 - Emmet 插件 > [http://emmet.io/](http://emmet.io/)
## 工程化工具 * mcss、sass、less、stylus * gulp、grunt * nej、webpack、browserify * npm、bower、yarn * ...

遵循规范

## 编码规范 > 恪守自己的编码规范,不允许别人格式化自己的代码 --- > 遵循事先制定好的项目编码规范
## 编码规范 - 空白 * 空格 * 分组 * 空行 * 8% ~ 16% * 缩进 * 2 ~ 4
## 编码规范 - 格式化 * 使用开发工具提供的代码格式化功能
## 编码规范 - 括号 * 多使用括号,比你觉得需要的还要多 ```js let x = a || b ? c : d ```
## 编码规范 - 分号 * JavaScript 语句末尾要不要加分号?
## 编码规范 - 变量命名 * 顾名思义 * 长命名,优先考虑 * 较少用到的变量和全局变量适用长命名 * 短命名,尽量避免 * 局部变量和循环变量适用短命名 * 拼写正确 * 没把握的单词事先查字典(IDE会有提示) * 不使用拼音
## 编码规范 - 变量命名 * 谨记典型的命名以及方式 * 临时变量 * 布尔变量 * 使用肯定的变量 ```js // good let found = false // bad let notFound = true ``` * 常量
## 编码规范 - 注释 * 概述性和意图性注释: * 复杂业务逻辑、算法等 * 避免会增加阅读负担的注释: * 重复 * 文不对题 * 废话
## 编码规范 - 注释语种 * 中文 * 英文
## 编码规范 - 心态 > 优秀的程序员应当有开放的心态,乐于接受已证实的更好规范
## 其他规范 * 语言规范 * 标准交互设计规范

调试技巧

## 调试技巧 - 不正确的调试方式 * 胡乱猜测,没有求证 * 不追根究底,使用简单方法解决问题,比如加个 if 判断 * 迷信: * 较武断地认为不是自己的代码引起的问题 * 发牢骚,自怨自艾: * 觉得完全是在浪费时间
## 调试技巧 - 科学的调试方式 * 将错误状态稳定下来 * 重现问题
## 调试技巧 - 科学的调试方式 * 定位错误 * 适当地输出日志,分析程序的执行过程、数据状态等 * 排除法,注释掉不相关的代码 > When you have eliminated the impossibles, whatever remains, however improbable, must be the truth. -- Sherlock Holmes
## 调试技巧 - 科学的调试方式 * 分析错误 * 必须理解引起错误的原因 * 理解错误代码所在区块、所在函数等其他代码
## 调试技巧 - 科学的调试方式 * 修复错误 * 修改错误代码,并对修改后的代码进行充分测试
## 调试技巧 - 科学的调试方式 * 测试通过后,检查是否还有类似的错误

如何学习

## 基础学习 > 学习一门新的语言时,找一本讲语法的书,认真看一遍 --- > 学习一种新的前端框架时,先把它的文档认真看一遍
## 专项训练 > 对一问题进行专项学习,并有总结输出,目标是成为这一问题的专家
## 专项学习 - 常见问题举例 * 跨域 * 文件上传 * CSS 经典布局

提问技巧

## 提问的智慧 * [提问的智慧](https://gist.github.com/huntbao/64d6fb58bc8ed6e5b71c953164a01b53) * [如何向开源社区提问题](https://github.com/seajs/seajs/issues/545)
## 提问技巧 - 提问前 * 提问前,自己必须已经做了很多工作 * 官方文档 * 搜索引擎,学会翻墙 * 中文搜索不到,就用英文再搜索,或反之 > 如果一个问题在搜索引擎上搜索不到,多半是自己犯了一个非常低级的错误,低级到其他人都不会犯这个错误(当然就不会来网上问这个问题了)
## 提问技巧 - 提问前 * 提问前,自己必须已经做了很多工作 * 阅读源码 * 初级程序员不做要求,有能力的除外
## 提问技巧 - 提问时 * 使用专业术语 * 专业术语获取途径?—— 多读、多看、多想
## 提问技巧 - 提问时 * 分解问题,把大问题拆成小问题
## 提问技巧 - 提问时 * 问题描述准确,几句话就能把问题说清楚
## 提问技巧 - 提问时 * 最好有小的 demo 重现问题 * 一般来说,要避免提问随机出现的问题 * 前端的随机问题,一般和网速(时序)等有关 > 摸着自己的良心问下自己是否真正理解了“异步”的意思?
## 提问技巧 - 提问时 * 大胆猜测,小心求证 > 不要轻易说“这个问题太奇怪了!” --- > 要相信科学!

训练有素

## 训练有素 * 自信心 * 写得了程序的人,肯定有一定的聪明才智
## 训练有素 * 谦虚 * 承认自己智力有限并通过学习来弥补 * 研究表明,谦虚的程序员善于弥补其不足之处,所编写的代码让自己和他都易看懂,其中的错误也较少
## 训练有素 * 求知欲 * 在成长为高手的过程中,对技术事物的求知欲具有压倒一切的重要性 * 在开发过程中,建立自我意识: * 这种方式上次用过了,这次就换种方式 * 把每个需求都当做提升自己的机会,优秀的程序员总是能够实现各种各样的需求 * 对新技术的试验
## 训练有素 * 诚实 * 不吹牛 > talk is cheap, show the code * 承认错误 > 如果是两个理性而真诚的真理追求者争论问题,争论的结果必然是这两人达成一致
## 训练有素 * 懒惰 * 不断重构代码以达到复用的目的 * 编写工具完成重复性工作

书籍推荐

## 书籍推荐 * 面向对象:《Java编程思想》 * 软件开发:《代码大全》 * 本文的很多资料来自于此书 * 三本权威指南: JavaScript、HTML、CSS * 其他 * 经典的计算机书籍都应该看一遍

没有人能迫使你成为更好的程序员

本文档在线访问地址

[http://gzool.com/be-a-better-programmer](http://gzool.com/be-a-better-programmer)

Thank You

Q & A

[包勇明](https://github.com/huntbao) / [@huntbao](http://weibo.com/gzooler)