快速开发的要素
1. 好的编程语言
动态语言或者说可以把函数当成对象的语言,比如js,python(ruby,lisp应该也是,但我没有学习过), 一定程度上都会加速开发,通常情况下动态语言一句话搞定的事情,放在c#这样的语言可能需要一大堆的反射语句才能完成。
RoR的成功导致很多其他语言的模仿,比如groovy,然而java这种语言真的适合做类似RoR框架吗? 也可以这么问,为什么RoR的创造者为什么选择Ruby,而不是java, C#, php等?
2. 框架的成熟程度
时间久的,文档多,遇到的问题从网上搜索到的可能也大。
我一直做.net, 后来为了在SAE上写个小程序,需要玩php, 再后来我决定选基于python的webpy框架作为今后的web开发语言,在遇到问题搜索时,两者对比很明显,php遇到的问题可以说都能找到很好的解决方案,而Webpy现成的答案比较少,通常都需要从各个相关的文章中琢磨出解决问题的方法。
3. 开源社区是否成熟
常用的功能是否都能在开源社区里找到相对完美、简单的解决方案
如果一个团队的人全部都是只接触过.net的开发人员,他们通常解决问题的思路比较窄,例如有些问题可能用memcached, hadoop可以轻松解决,然而团队里没人会linux,即使有人愿意尝试去学习开源类库,但可能因为最终部署原因而放弃。
4. 开发者对这门语言,以及开源方案的熟悉程度。
不熟悉就意味着需要查文档,转型的人也是。这个不解释了!软件开发中提倡“重复是可耻的!”,但如果一个新的语言你从来都没做过,第一次做的过程肯定遇到很多问题,这个肯定会遇到很多的问题。
5. 自动化脚本
项目初始代码自动生成,自动化测试、自动部署等等,linux的shell脚本真的是挺强大的,尤其是管道的应用。
6. 精英小团队
流水线上熟练工人和不熟练工人的效率差别不会太大,而信息产业绝对不是这样,高手的经验都是拒绝了一次次的重复后提炼出来好多能更加快速、自动化的方案的,因此在软件、互联网这块的技术领域,2个人差别大于几十倍的可能也是完全有的。
另一点,精英之间心领神会,很多时候不用通过太多的沟通也完全能够理解彼此的意思。
7. 决策者是否接受小版本、快迭代的做法
是一味的要求加入功能,知道这些功能全部做完之后才能上线,还是遵循一个固定的发布周期,例如2周发布一次,这2周内能做多少是多少?
我一直认为敏捷神马的,加起来的总时间可能比传统开发的还要多,但之所以采用敏捷,主要是保证不会出现东西做出来了,结果不是客户想要的!
8. 好的团队leader
主要发挥资源协调作用,产品原型-设计-html-架构设计-编码-测试-部署-运维-反馈-再改进等等
如果没有好的资源协调,很容易卡可block,有的忙的要死,有的在等别的资源,耗费不起啊。
因此,我不赞成黑客与画家中说的那样,自从用了某种比较酷的开发语言后,一切都快了。