## 内容简介
* 善用工具
* 遵循规范
* 调试技巧
* 如何学习
* 提问技巧
* 训练有素
* 书籍推荐
## 开发工具
> 选一款自己喜欢的开发工具,花点时间研究它的配置选项:
* 主题
* 字体、颜色
* 关联文件
* 插件
* 代理
* 快捷键
## 开发工具 - 快捷键
* 自动补全
* 代码行
* 复制、删除、选中、移动等
* 代码块
* 折叠、展开、选中、移动、删除等
* 光标控制
* 多光标模式、列编辑模式等
* 代码格式化
## 开发工具 - 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)
留下评论