到底是 Java 好还是 Python 好?
语言的优劣之争是个永恒的话题,有时候一次偶然地“擦枪走火”甚至可能会引发一场铁杆粉丝之间的“战争”。
也经常有人问我:“老刘,到底是Java好还是Python好? 我应该学习哪个语言?”
我也挺为难的,只好说道:
Python挺适合入门的,看起来很简单,适合创业团队,可以快速开发,快速上线,快速迭代。适合特种部队的突袭。等到发展到一定规模,动态语言的劣势就会体现出来,维护/重构难度高,特别是我觉得动态语言写的代码腐化速度要比静态的Java要快一些。
Java呢,语法相对Python啰嗦,表达力要弱一些,开发起来一板一眼,有很多规范,适合集团军的大规模协同作战;有很多著名的框架和类库,性能不错,系统稳定而成熟,是开发大型系统的极好选择。
他说:“老刘你这是在和稀泥嘛,我到底应该学啥?”
我说:“你应该把注意力放到那些和Java无关,和Python无关,能反映一个程序员水平高低的编程的共性问题。”
举个非常简单的例子,开发中需要实现一个定制的、简单的缓存,如果使用ehcache ,memcached, redis这样的开源系统就太重量级了,经理要求你新写一个,可以支持(key,value)存储,设置过期时间,过期的可以自动清理掉,你能不能快速地实现一个高质量的版本?
这其中涉及到的就是数据结构和算法、以及线程的知识,和具体的语言关联度很小。
再比如给你一个需求,你能不能找出其中“概念”,从而设计出类?能不能做好信息的封装和隐藏,定义出良好的接口,让每个类的职责单一而准确?
Python中有class , Java 中也有class, 但是上述工作却和具体语言没什么关系。你需要做的是利用你的经验,在脑海中做一次思维体操,然后用某个语言工具把他们表达出来。
有些“概念”比较容易发现,有些“概念”和现实没有直接的对应关系,需要抽象一下才能找到,这就比较考验抽象的能力了。
可能有人说,我们Web开发都是“面向数据库”编程的,都是基于数据库的增删改查,用不上你说的这些东西。 那如果经理给你一个项目需求,让你完整地设计出表结构来,要求方便后续的程序开发,又要考虑到灵活性和扩展性,你能不能搞定呢?
在编程中,你发现了重复的代码,那能不能找到一个概念(最终可能由一个类或者函数来表达),来表示这个重复的模式,从而极大地消除重复代码?
你能否区分哪些是不变的部分,哪些是变化的部分,把他们区分开来,“发现变化,并且封装变化。”
说到底,本质上还是那个抽象的能力, 这样的例子有很多,这里不再一一列举了。
作为一个程序员要发展,要成长,不可能一直增删改查,不可能一直停留在编程语言的特性上面,争论孰优孰劣。
对于做技术的人来说,总有一天,眼光和视野要超越编程语言,进行设计和架构的工作,停止无谓的争论,开始扎扎实实地学习吧。
原文发布时间为:2018-11-26
本文作者:码农翻身刘欣
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
时间复杂度
自己对这些不是很了解,由于接触到了这个概念,所以自己也尽量摸索清楚,这篇文章可能会存在错误,如果有请指正,谢谢 设计算法要尽量的提高效率,这里的效率高一般指的是算法的执行时间 对于如何度量算法的执行时间,比较容易的想法就是执行N次算法然后计时即可(事后统计) 那什么是事后统计方法? 主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低 这种方法肯定是有很大的缺陷的 :必须先编制好测试算法的测试程序,如果测试完毕后发现算法不行,那么针对此算法编写的测试程序就会作废,这是相当浪费时间的,并且算法在各种机器上的执行效率是不同的,因为机器的配置不同,会造成测试算法会出来不同的结果 事前分析估算方法:在计算机程序编写前,依据统计方法对算法进行估算 高级语言编写的程序在计算机上运行所消耗的时间取决于下列因素 算法采用的策略,方案 编译生成的代码质量 问题的输入规模 机器执行指令的速度 由上因素可见:抛开计算机硬件的差距,一个程序的运行时间依赖于算法的好坏和问题的输入规模 现在我们来观察一下下面的哪种算法的执行效率更高:需求1+2+3..+...
- 下一篇
stackoverflow:为什么排序后的数组要比未排序数组运行快3倍以上?
周末,在 stackoverflow 上面发现一个有趣的问题:Why is it faster to process a sorted array than an unsorted array? 提问者用256的模数随机填充一个固定大小的大数组,然后对数组的一半元素求和,并分别用 C++ 和 Java 代码来证实了这一现象,本文主要用 Java 来说明,代码如下。 我通过 IDEA 运行发现,先排序后计算比不排序直接计算快三倍。 那么,问题来了,本例子中的代码在数组填充时已经加入了分区函数,充分保证填充值的随机性,计算时也是按一半的元素来求和,所以不存在特例情况。而且,计算也完全不涉及到数据的有序性,即数组是否有序理论上对计算不会产生任何作用。在这样的前提下,为什么排序后的数组要比未排序数组运行快3倍以上? 我看获赞最高的答案提到了一个关键字:分支预测器。 它的英文名叫做 Branch predictor,是一种数字电路,在分支指令执行结束之前猜测哪一路分支将会被运行,以提高处理器的指令流水线的性能。使用分支预测器的目的,在于改善指令管线化的流程。—— 引自维基百科 这个分支预测器,跟...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS6,CentOS7官方镜像安装Oracle11G
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS6,7,8上安装Nginx,支持https2.0的开启