作为任何一家公司,在语言选型上都有几个期望。
- 易学
- 开发效率高
- 执行效率高
- 完备的社区
- 用户众多
- 可维护性好
不幸的是,大部分语言在上述目标中互相冲突。
- C语言用户众多,可维护性好,执行效率高,而且社区完备。但是难学,而且开发效率差到死。
- java语言用户众多,执行效率高,社区完备。可是可维护性差,开发效率也没高多少。
- C++的用户和执行效率都不错,社区完备。可是学起来超级难,维护性差到死,开发效率不好说。
- 最重要的是活下来。
- 不要考虑维护性,活不下来的产品不需要维护。
- 用户数是个问题,不过足够易学就可以弥补。两者至少有一个。
- 开发和执行效率是永恒的矛盾。两者只能选一个。
- 社区一定要完备。
初创企业的估算误差来由:
- 不靠谱的团队。人员离职比例和试用期接近,大量的时间消耗在培训和沟通上。
- 还没彻底搞明白自己想做什么。出一样东西三个月,又扔了。
因此,初创企业最重要的是,开发效率足够高。尽快做出原型,尽快推出产品。
综合一下,初创企业选型的要点:
- 尽量用自己熟悉的技术,或者有现成的解决方案。
- 语言开发效率高。
- 易学,或者用户数量大。
- 社区完备。
由于最后一个,我们只要检查一下所有社区完备的开发语言,然后挑选一种合适的就好。
- BASIC,开发效率高,易学
- bash,开发效率高,不易学,不易维护
- C,不要谈开发效率
- php,开发效率高,用户多,不易维护
- .net,恶心
- java,开发效率不高
- python,开发效率高,易学易维护
- ruby,开发效率高,易学易维护
所以,最后看下来最佳选择是python和ruby,如果可以用basic也可以考虑。次之考虑bash和php。最后考虑java和net。
python和ruby的选择上。如果你的业务大部分和网页有关,用ruby,反之,用python。因为ruby的社区积累在页面开发上,而且有数种很好用的框架,用户群也是以极限的开发速度为导向的。在这点上用python没什么太大好处。
初创企业的一大误区是过高考虑了维护性和效率。除非你非常非常确定自己需要的是维护性和效率,否则不要想太多。
我们新产品上使用的语言:
- C
- lua
- python
- scheme
- go
各种语言执行自己合适的功能,无论从效率还是开发效率上都显得非常完美。
问题:
- 初创企业哪里来个人会这么多语言。C是肯定会的,python不难学。可是要找个人玩的好lua, scheme和go就不是很容易了。
- 就算有几个人能搞定,后面进人维护怎么办?招不到人啊。所以以后无论工作量膨胀到多大,都是他们干?而且他们不能辞职不能生病连休假都要看情况?
- 万一出了问题,这几个人能搞定么?搞不定怎么办?
所以,混编听起来很美,其实是个大坑。跳不跳的过去,各自凭本事。如果没把握,尽量少用几种语言。
推荐的混编模式:
- python搞定大部分问题
- C提升效率和嵌入
一种易学,一种大部分程序员都会。维护的困难性大大降低。
- 大部分时候,效率只和模型有关。用错假定,想的太多,算法错误,代码粗糙是效率低下的四大理由。和语言基本没什么关系。
- 有些效率问题不要着急解决。先算一下,目前解决这个效率问题要扔多少人工进去。如果人工比机器还贵,就买好的机器或者升级服务拖延。
- 有大规模数据运算?把这部分代码单独拆个模块,用cython写,然后编译。效率和C相差无几。
- 瓶颈在哪里?有的时候慢的不是python,而是某个库。换一个就好了。