如何成为一名远程软件开发者【译文】

在家工作会给你自由的空间做更多的事情,远离来自办公室环境的干扰。另一方面,他也会给予整天偷懒的自由!

我和8个同事通过WaveNathan BertramArrangeMySeat上远程工作超过了1年,甚至会更久。下面是我从这次远程工作中收集到的一些经验。

Workspace (工作空间)

远程工作可以让你自由的挑选自己的办公室。这是有多好呢?关键是要选择一个适当的空间。这里有几件事情是会有帮助的:

  • 找一个可以不被他人打扰的地方,而不是让你抓狂的地方
  • 安静或适度的噪声水平
  • 一个指定的工作地点 (不是你的床)

有一个工作空间并且不会被人打扰,这是完成工作的关键。经常被和你居住在一起或者其他的人打断,这会扼杀你的生产力。

在咖啡馆工作是一个不错的选择,可以加入到我们的免打扰指引手册里。人们不会理你,你会和咖啡因一起渡过,而且你周边也不会太吵。

如果你在家工作,你要找一个工作专用的房间或者书桌,并一直保持下去。如果你在你的床上工作,很快你就会把你的工作和睡觉联系到一起,或者反过来。请记住,卧室是睡觉和性爱的地方,而不工作的地方。

Routine (日程)

有一个日程安排对于上班族来说是理所当然的事情。他们被迫离开自己的房子,开始上班的旅程(这需要时间),等他们到达后立刻开始工作。

远程办公的人,他们从家到开始工作不需要花费时间。花费在工作路程上的时间将从15-60分钟缩短至0分钟。

另外一个问题,你被一些和你工作不相关的事物所包围。在你的办公室里你是不能看电视的,但现在你在家里,你可以选择。拒绝诱惑!分心,一次也不要有。

制订一个日程是有很大帮助的。一旦你开始工作(在你自己的空间!)在预订的时间,你往往不会被诱惑或者分心。每天有固定的午休对你是有帮助的。确保在预订的时间内结束工作。制订一个日程是一个明智的方式,这会让你的工作尽可能的在预期时间内完成。

Setting Limits (设置一个限度)

在家工作的一个问题是,工作和家庭之间是不可能分离的。所以你要决定在工作上投入更多或更少的时间。正因为如此,设置一个限度是极其重要的。

在你职业工作上设置限度的一个想法。在你职责工作以外的时间需要谨慎对待,你有责任去尊重自己的时间和想法。

另一方面对于你的老板,他们也应该关注,如果你的工作时间超出了之前约定。从老板的角度来看,你冒着燃烧自己的风险,每周工作超过50-60个小时。同样,你需要加班把一些事情尽快做完。时间从哪里来?突然发现,每周工作50-60个小时是不够的,你需要花费你醒着的时间大部分时间去工作,保证关键项目的完成。尊重自己,你的老板,你的职业需要设置一个限度。

要知道什么样的限制是有必要的,你需要遵循一些准则:

  1. 完成你和老板约定的工作时长
  2. 和你的团队在同一时间工作
  3. 要有和你的团队重合的工作时间,如果不能保证第二条原则

就是这些!我不推荐用非工作时间解决来自同事的突发问题,这会花费几分钟甚至一天(只要下一次你的团队还会在线)。如果你的开发是比较独立的,要在项目利益相关人员充分沟通后再开始开发工作。

Timeboxing (时间盒)

时间盒(Timeboxing)是分配一个固定的时间为一特定的任务。我喜欢这个技术,因为他可以防止两件事情:

  1. 完美主义
  2. 拖延症

完美主义,过于追求完美可能会影响到程序的开发。用最高配额去做一些事情(或尝试做一些事情)将会限制你的代码过于追求完美。请记住,任何问题都可能成为一个时间无底洞。

至于拖延症,这是编程界的一个热门话题。有一组任务要把它做的有所成就,就要给自己一个责任承诺,并且开始去做。

现在,具体来说,有很多时间盒技术。其中最流行和最著名的技术就是番茄工作法(Pomodoro Technique),此方法提倡25分钟为一个时间块,其间可以插入数量不等的休息时间。如果你在任务切换上遇到麻烦或需要一个较大的框架,这个技术可能适合你。

个人而言,我更喜欢分配一个任务或一组任务在1个小时的时段内,这个时间量不会太短,我会不断超越这个时间段内所分配的任务数量。我花费在上面的工作时间不会太久,以至于我不能因为一个问题而浪费我过多的时间。如果我不能在1个小时内完成,我会问我自己这样的问题:

  • 我这样做对么?
  • 剩下要做的是什么?
  • 为何需要这么长时间?
  • 我可以寻求他人的帮助么?

因为时间盒方法,你不得不考虑这些问题,而不是一味的忽略他们在每一天。可以面对面的问一些问题(或被打断)是办公室里才有的奢侈行为。在家里工作也一样,停下来问问题,并与其他人交互,是非常有用的。

每个人都已一个适合自己的时间盒技术,去发现他吧!

Communication (沟通)

这可能是一个惊喜对于你,但沟通是作为一个程序员最重要的技能之一。拥有良好的沟通,你将成为更优秀的程序员。事实上,你会说这没什么,技术或者编程语言才会给你带来财富,这是人类社会(没有人可以只通过自己创造财富)。

回到手头上的讨论,沟通不仅是让你完成任务,更重要的是让你可以正确的完成任务。工作上太多的时间都做了无用功,是因为错误的事情造成的。敏捷开发方式的目标是尽量较少这些事情,当然(我希望你能练一下),如果你不能让对方明白你的意思(反之亦然)那么错误的事情仍然会发生。

作为一个远程办公者,你可能会觉得通过即时消息沟通一个问题会打扰对方的工作。不要担心这个!如果他们觉得这种方式打扰到了他们,他们会设置聊天程序或者电子邮件相关设置的。当你工作在一个团队(或者利益相关者),提早的进行沟通将有助于团队工作的顺利完成。

快速的意见反馈对于工作完成是极为重要的,但通过Email沟通不是一个好的方式。不能快速的向同事或相关人员回馈意见将会束缚你的时间和进度。反馈不够迅速,你可能最终要么等待反馈(以分钟/小时为单位的失去时间)或做错误的事情(以小时/天为单位的失去时间)。为了得到反馈,我建议通过电子邮件以外的任何其他媒介(请参见下面列表)与他们沟通。

通过邮件的方式来来回回实在是太烂了:你每次读或者写一封邮件都要在你的邮件往来列表中(或多人的会话中)不断的上下文切换,这是非常耗时的。通过Skype来交流会有更好的效果。

在一个小组里工作时可以创造出高效的氛围。作为一个远程工作者,你会失去这些,所以你真的需要付出努力,通过所有渠道(邮件列表,问题跟踪,聊天工具,即时通讯,IRC,电子邮件等)获得沟通氛围。

下面列出了一些技术用来和对方进行远程沟通,你可以使用大多数,即使不是全部:

  • 电子邮件
  • Hipchat
  • IRC
  • 即时聊天工具(Skype, AOL, 等)
  • 电话(哇!)
  • 传统邮件(哦,不~)
  • 传真(这是哪年的产物?)

想想平时在办公室的日子,你会花多少时间和你的同时交流。你在远程办公上花费相同的时间了么?为什么不呢?保证和同事沟通渠道的畅通,真的需要付出努力。

Closing Remarks (结束语)

嗯,这就是我闪亮的远程工作经验的总结。猛戳我的twitter如果想和我继续聊相关方面的事情。我将很快将这些提交到HNreddit,我们可以在这些论坛里继续讨论。

原文地址 http://markcampbell.me/tutorial/2013/05/23/how-to-work-remotely.html