语言优劣之争是永恒的话题,有时一个不经意的“哑火”甚至可能引发铁杆粉丝的“大战”。经常有人问我:“老刘,Java和Python哪个语言好?我应该学哪个语言?”快速开发、快速发布、快速迭代。适合特种部队突袭。当它发展到一定规模时,动态语言的劣势就会体现出来,维护/重构困难。特别是,我认为用动态语言编写的代码会比静态Java更快地损坏。至于Java,它的语法比Python更罗嗦,表达能力更弱。开发简单明了,规格多,适合军队大规模协同作战;有很多著名的框架和库,性能好,系统稳定成熟。系统的绝佳选择。他说:“老刘,你在逗我吗?我该学什么?”我说:“你应该把重点放在跟Java和Python无关,能体现一个程序员水平的编程上。”常见问题。”举一个很简单的例子,在开发的时候需要实现一个自定义的简单的缓存。如果使用ehcache、memcached、redis等开源系统,就太重量级了。manager让你写一个新的,可以支持(key,value)存储,设置过期时间,过期的可以自动清理。能否快速实现高质量版本?这个涉及到数据结构和算法的知识,还有线程,和具体的语言相关性小。再比如给你一个需求,你能找出其中的“概念”,从而设计一个类吗?能不能很好的封装和隐藏信息,定义好接口,让各个类的职责单一准确?Python有类,Java也有类,但是上面的工作与具体的语言无关。你需要做的是利用你的经验,在脑海中做心理操,然后用某种语言工具表达出来。有些“概念”比较好找,有些“概念”与现实没有直接对应关系,需要抽象化才能找到。这是对抽象能力的考验。可能有人会说,我们的web开发都是“面向数据库”的编程,都是基于数据库的增删改查,我们不需要你说的这些东西。那如果经理给你一个项目需求,让你完全设计表结构,方便后续程序开发,还要考虑灵活性和扩展性,你能搞定吗?在编程中,你发现了重复你能否找到一个概念(最终可能用类或函数来表达)来表示这种重复的模式,从而大大消除重复代码?你能否区分哪些部分是不变的,哪些是变化的部分,把它们区分开来,“发现变化,封装变化”。说到底,本质还是抽象能力。这样的例子还有很多,这里就不一一列举了。作为程序员要发展和成长,不可能一直增删改查,也不可能一直停留在编程语言的特性上,争论哪个更好。对于做技术的人来说,总有一天,他们的眼界和眼界应该超越编程语言,进行设计和架构的工作,停止无谓的争论,踏踏实实地开始学习。
