我想不少人像我一样,看到书上或别人博客上的精彩代码,想着一定要自己试一试,但稍后就忘掉了;或者,即使没能忘掉,也因为感觉似乎要提前搭建一大堆的环境和准备工作,就没有继续尝试了。就像,我经常想打一个字,因为突然忘记了字根,一时打不出来,索性就换个简单的词,或者直接不写它了。

在其他时候,我们也经常会有各种创意想法,并为自己的精彩想法激动不已。遗憾的是,它们真正被我们付诸实施的少之又少,甚至几乎没有:因为感觉动起手来,前提步骤太多太繁杂。

例如,在你想尝试一下 AngularJS 的时候,你得先下载好最新版本的 AngularJS 脚本文件,创建好一个 Web 工程和一个 Web 页面,添加必要的 HTML 片断,配置 Route 并创建 Controller,这时,你才算真正进入了正轨。问题是,如果这过程中,有任何卡住你的地方,你可能要花大量的时间去解决这些问题,比如 AngularJS 的网站被墙了,你得先想个办法翻到墙外去下到最新版本的 AngularJS 才行。等你把那些问题解决了,可能两个小时过去了,你已经很累了,而“尝试一下 AngularJS ”的想法此时已经没有那么热切了。

可是等等,下载“翻墙”这件事本来是与学习 AngularJS 没什么关系的。

 

更可怕的是,当这样的事情经历过几次之后,每当你想做一件新的事,之前类似“尝试 AngularJS”时的可怕经历会不自觉地对你新的尝试形成负面影响,令你产生消极情绪,让你越来越怕去做更多尝试。

最终,几个月过去了,你只在虚度光阴。原本,你计划用这几个月多看几本书、多写几篇文章的,可你只是多打了几个月游戏而已——毕竟,游戏只要有网络,运行它就进入了另一个世界,专注而刺激。

 

游戏让我们专注,而且感到刺激。那是因为,它除了双击运行,似乎不需要额外的努力来让它“步入正轨”。它是如此的“开箱即用”。

我想,我们是时候注意到这样一件事了:“我们的时间太宝贵了,以至于我们需要熬夜来阅读新的技术文章、完成博客创作,提交开源代码。因此,我们没有哪怕一分钟的时间可以用于浪费。”所以,为什么我们要被这些奇怪的、与我们最初目标没有直接关系的环境和工具的配置挡住去路呢?在要用的时候,才发现工具和环境还没有就绪,这时仓皇失措地尝试并不出意外地遇到一系列的失败(因为欲速则不达),这不仅是一种浪费时间,更让我们瞬间产生大量的挫败感。

你需要一个可以立即开始工作的环境,以及一套用得得心应手的工具,它们让你随时可以开始工作!

不妨用一个粗暴的标准来检验你的环境是否已经就绪了:你能利用这套工具和环境,在 5 分钟内,写完第一个单元测试,并让它运行通过。这句话来自公司内部一项有名的培训项目。

 

如果你还没有这样的工作环境,那么现在是时候搞定它们了:

  • 运行快速、清洁的操作系统。它让你可以关注于开发工作,而不必担心电脑本身一不小心被恶意软件劫持,或者缺少内存而挂掉。
  • IDE(或编辑器),它拥有代码编写、快速定位文档、集成编译等功能。它让你集中精力编写代码(最好还能提高你的编码效率),其他事情他帮你搞定。
  • 单元测试框架和运行器。它让你持续确认自己的代码是正确工作的。
  • 源代码管理工具,它可以帮你记录版本变化。让你随时回到之前的状态、记录你所有的工作,自信地面对新代码的开发。
  • 运行和调试环境。它提供一个直观的验证和反馈体验。

 

做卓有成效的程序员 。这不只是一个口号,更是一种精神,一种快速出活的态度,以给让自己快速成长的保证。“能够工作的软件,胜于详尽的文档”,这句来自敏捷宣言中的话,形象地描述了软件的价值所在:如果不能尽早搞出可以工作的软件,一切都是空谈。

要做到高效而自发地开发,就要最大程度保证我们自己这个最核心的元素不被其他因素干扰。另外,如果你不怎么喜欢驾驶,可能是由于你还没有开到过更舒服的车而已。所以,在开发过程中,我们还需要更好用的工具。

 

比如:

  • 不受限的国际互联网体验
  • 运行快速,并且开机即用的操作系统(没有各种插件来询问要不要更新 XXX 软件)
  • 拥有快速响应能力的键盘和鼠标
  • 按下运行命令就可以运行和调试的开发体验

为了做到上面那些,我设置了下面的全栈 Web 开发环境:

  • 购买 VPN 并自行搭建网际代理
  • 运行在拥有 SSD 的 ThinkPad 上的 Windows 8.1 Pro
  • 干净的机械键盘和灵敏的鼠标
  • Sublime Text
  • Visual Studio Community with Resharper (nuget)
  • WebStorm & Chrome (node.js & npm)
  • Git, Github & Visual Studio Online
  • TeamCity & Windows Azure VMs

对于 Web 应用程序,它们能够完成快速地编写代码,直观的调试,完善的代码跟踪,自动化的测试和发布。

 

最后,扯两句闲淡。好多人总是喜欢比较 Windows、OS/X 和 Linux 的差异,说 XX 系统更好用云云。或许大部分人只是在做着屁股决定脑袋的事情,自己平常用什么多就说什么比较好。回到本文的话题上,作为开发人员,我们不可避免地要用到各种操作系统,但不管用什么系统,请一定要在真正的开发工作来临之前,搞定一个自己用得舒适的工具链和环境。

总之,如果你觉得你想做一件事,却又好像没有太大的动力去尝试它,那么请弄清楚什么是阻碍你尝试它的真正原因。如果是工具没有就绪,那么先把你伟大而令人激动的创意记录下来。先搞定一个令人愉悦的工具箱和开发环境,或许你很快就豁然开朗,立即就感到冲劲十足了。

我想说的就是,不要让这些还没就绪的工具,成为束缚你思维和实践的缰绳