写作目的:说明如何选择编程语言,对不同语言的认识。
结构:
说明问题:语言太多,对于初创公司,选择是一个问题。
结论:看菜吃饭。根据公司的目标,能够快速出产品为主。当前团队对语言的熟悉程度,已有资源对语言的支撑;还要兼顾可维护性,招人的难度,以及语言的学习难度。
结构:
- 大家的知识背景,用最熟悉的语言和工具,能够快速出产品。
- 根据语言特性,不同语言应对不同的使用场景。例如:php适合网页开发;C++适合计算密集型、游戏引擎等的开发;python有很多数据分析的库;nodejs也很适合前端转后端。
- 市场上招人的难度和成本,php很多,C++的很少。
- 已有的成熟组件的语言代码。例如有个现成的其他语言,是不是可以改改。例如csdn还是asp,LOL也有用java写的部分,有大多数游戏用的都是erlang语言,因为留出代码是这个。
- 语言只是工具,不要被语言所累,能实现目标最好,没有高低之分。语言的功能之间是等价的,没有什么做不了、能做的,都可以做,只是难度问题。用php支持http协议很简单,如果用c自己写,就难度很大了,也很难和其他工具结合。
公司初创时,产品定下来了,就差程序员开发了。这时候又出现了新问题,用哪种语言来开发,也需要一些时间来讨论。
有些人建议用新的语言,缺陷最少的;有些建议用大家最熟的,到底用新的还是老的呢?
要明白团队的目标是什么,从团队的目标出发。
如果有现成的代码或方案改装,那么就用现成的。 能够快速出产品,缩短开发周期,减少bug率。例如已经有开源的产品,只是在上面精简修改些特性就能运行了,那么直接用。如果团队对里面的语言不熟,只能通过学习解决。要是真的hold不住,那么可以用灵活一点的方法,核心功能用外部代码,扩展功能可以分到其他周边模块,用团队擅长的语言处理。像一些游戏引擎,都是window下的代码,和团队linux下开发经验不匹配。可以把引擎游戏部分用外部引擎实现,尽量少改动。周边系统通过网络通信和引擎衔接,用团队最擅长的语言来实现。有听说为什么广州的erlang开发游戏的很多,是因为最早有一套游戏代码留出,就是erlang的。大家为快速搭建和使用,肯定直接用erlang啊。
语言有不同的特性,在选择的时候也要慎重。 每种语言都有自己擅长的场景,有众多的库和工具链作为依存。php对web类开发很擅长,有众多的工具和库,甚至现成的解决方案,如果用c来写web处理,就比较捉襟见肘了。对于计算密集型的业务,动态语言天生有速度弱势,应该避免。还有unity,对C#支持要比js更好些,即使团队都会js,也还是尽量用C#吧,否则产品质量堪忧。
人的成本也很重要,要思考招人的难度。 否则团队扩大到一定规模,必定受人才数量限制。在不同地域,不同语言掌握的人的数量也不一样。如果是小众语言,找人的难度会大很多,例如ruby或者go,还没有那么多的人会。要培养出一个厉害的程序员,也很难。所以团队打算扩大规模的,不得不考虑技术人员的数量和质量问题。
语言只是工具 ,有些程序员有语言清洁,或者洁癖。排斥自己不喜欢的语言。其实这东西就是个工具,类似用刀叉吃饭还是筷子吃饭。看你熟悉哪个,哪个效率高,用适合的东西办适合的事。我们的目的不是语言测评和比赛,而是用工具做出产品,造福人类:)
归根结底,看菜吃饭,根据公司的目标,能够快速稳定出产品为主。当前团队对语言的熟悉程度,已有资源对语言的支撑;还要兼顾可维护性,招人的难度,以及语言的学习难度,来选择开发语言,已解决最重要的问题为重!