如果你是位新员工,你可能会有一些困惑,我们没有代码规范,却要求你代码应该这么写,而不应该那么写,相同的,我们会建议你有些事情应该这样做,而不是那么做。你不知道到底哪些事情才是最重要的,在不知道优先级的情况下,你可能会犯一些错误,你会让你感到很沮丧。所以,从一个更严谨的角度,我应该把我们真正在乎的事情全都告诉你。 我们真正在乎的事情是:
- 工作态度
- 效率
- 创造性
工作态度
认真严谨的工作态度
这件事情,我在之前提过,你可以参考an advise to the new staff,这是最最重要的事情,这是我们接下来要说的所有事情的前提。
我们没有程序员,只有工程师
希望你可以理解这句听上去有点绕口的话。程序员和工程师,在我的理解,两者最大的区别,前者只工作在代码开发阶段,而后者参与一件事情的全部(请以广义的工程师来理解,非片面的IT工程师)。而这点区别决定了,在这里,你不是对你的leader负责,而是对整个产品负责。所以需要要求你:
- 希望你以用户的眼光来看待问题。不管是API接口还是App开发,请以用户的视角来看待问题。不要犯类似于给用户的接口却不关心排序这么低级的错误。
- 在你的角度,尽你所能推进事情的进展。请记住你不是一个程序员,你可以推动相关人员在这件事情上的进度,(比如推动设计师完成急需的东西)。请不要置身事外,等待事情的进展。
- 写代码之前先想清楚,先写spec梳理整个功能的开发以及后续。
在职责之外,也有属于你的权利
- 你可以强烈坚持你的意见。(但在申诉无效之后,请服从团队的决定)
- 关于对于产品的建议,你的建议会比其他人的更受重视。
效率
效率是团队竞争力的根基。围绕效率,有一系列我们推崇的工作方式
效率、专注——番茄工作法
专注能力是一种宝贵的资源,你只有在专注的时候,你才能用一些方法来提高你的效率。番茄工作法(简易工具下载)可以帮助你集中注意力,提高效率。这是我们实践过的极为有效的一种办法,使用番茄工作法的还有一个好处是可以尽快帮你从糟糕的状态里走出来。
异步工作方式
异步工作方式保障了你好不容易积累起来的注意力不会被轻易打断。请参考be asynchronous。
不要过度设计,用迭代的方法去做事情
实现最小可用原型,然后用迭代的办法去完善它。这是所有敏捷开发最重要的一点。而这一点,也体现在我们工作中的方方面面。它帮助我们训练自己如何在缺乏资源的情况下,完成一件最小可用的模型,同时,也帮我们学会去抽象和简化一件事情,而抽象是程序设计最重要的能力之一。
TDD(测试驱动开发)
没错,把TDD放在这里是因为它能帮我们提高效率。TDD可以帮我们
- 检查代码逻辑,很难被测试的代码就是一个强烈的可以被重构的信号。
- 减少人工检查的时间。
- 提高交付的正确率,节约大家的时间。
重构
重构最重要的一点是可以嗅得到坏代码的味道,而坏代码是所有bug的温床,是阅读和理解代码的拦路虎。适当的及时的重构一些不合理的代码可以帮助减少bug,节约其他人理解代码的时间。
而之所以需要频繁的重构,是因为我们采用迭代的方法来编写我们的代码,而在迭代初期,适当的简化和抽象逻辑是为了更快地完成我们的最小可用模型。但我们在修改和完善我们的代码的时候,我们必须要及时的把一些不再合理的代码改写掉,使之更健壮。
创造性
创造性是一个老生常谈的话题,也是一个可遇而不可求的东西。这看起来是一个非常虚和无法落实的话题。每个个体的创造性是一个概率问题,但一个团队的创造性却是一个竞争力问题。而这一点是发展过程中,不可避免的。
所以,为了提高自己和团队的创造性,希望大家可以找到hacker的感觉。hacker不是指入侵和破坏,而是一种无边界的思维方式。希望大家有这方面的体验和训练。
其实,这篇东西里讲的东西非常之多,非常之大,每个单独的东西拿出来都是可以单独出书的。之所以简要罗列于此,是希望大家可以明白和认同什么才是我们真正关注的东西。