一、Java工作方式
源代码 -》 编译器-》字节码-》Java虚拟机
隐含信息:java跨平台
笔者做上位机开发,就一个windows平台都存在各种各样的兼容性问题。
java语言从设计上避免了这个平台兼容问题,确实是非常赞!
另外,QT号称的跨平台也不算是真正的跨平台,说到底还是靠手工一行一行代码做恶心的兼容。
兼容对用户是友好的,但是对程序员是不友好的。
linux和windows的平台之争,除了windows不开源之外,还有一个很大的问题,windows背着很大的兼容包袱,终有一天承受不住的。
二、面向对象比面向过程优在哪里
进入后不想离开-》举椅子大战的例子-》说明面向对象对于需求的变更是比较友好的
人类的世界是由一个又一个object组成的
人体的组成、公司的组成、流程的组成,人们总喜欢把这些物体或者事务、流程划分一个又一个模块。这个源于人脑的局限性,人一般能同时处理7个以下的事情,而大脑不导致混乱。
其实有本书提出人脑是由多个部门做决策的,并不存在于一个中心这样的说法。我们所有的想法、所有的决策都是经过大脑里的几个部分讨论后才得到结论。我很是认可这种说法,因为这个观点能很好地解释精神分裂和失忆症。
卖油翁说的无他,唯熟能尔。因为大量的多方面的训练,让大脑的所有部门都参与其中,后续类似这样的问题解决时,大脑的协调性非常好,我们感觉就是不加思索就能做出这个动作。“思索”其实就是各部门在激烈的争论。
也有学说,人分左脑和右脑,这个分类不太准确。生活中确实存在这种例子,我们学习和工作很累了,回家路上刷刷小视频什么又不觉得累,原因无非是使用大脑的部门不同而已。
三、Java和C++比较
我们知道,java是在c++的基础上发明的,相同的地方可达80%。
可以这么说,java是阉割版的c++,java是软件分工后的c++。
大家都知道c++既可以写面向过程的代码,也可以写面向对象的代码,还可以模板编程,可以说c++太灵活了,c++就是一个大杂烩。有的人还喜欢把c++比喻成手动挡,java比喻成自动挡。
在服务器开发中,c++内存泄漏,数组越界这些问题会让维护者为之抓狂。java就舍弃指针
全局变量会破坏程序的模块化,java就舍弃全局变量
多继承会让程序变得异常绕,java也舍弃多重继承。
java把在c++开发中遇到的痛点,都做了优化和封装,这是java优于c++的其中一点。
另外有很重要的一点我觉得为什么java比c++好,但是很多人都忽略了它。
java比c++好的原因,是因为它商业化了,分工化了。
c++为java开发强大的工具库函数,java开发者只负责实现业务逻辑。尤其是后续框架的加入,可以令一个工作1~2年的入门者开发出很实用的程序来。
《国富论》书中用了很大的篇幅阐述生产力的提高来自社会分工,java就是软件分工的一个典型例子。许许多多的c++开发者都把大量的生命和时间耗费在造轮子。当然,如果说水平很强的,造出新轮子,能带动生产力的提高那是非常好。但是可悲的是,绝大部分人都是普通人,耗费的时间造的拙劣轮子效益实在不怎么样。
所以说,c++的待遇方面,高的会非常高,因为从事的是高端造轮子的工作,是其它语言无法替代的。而那些做应用开发的c++工程师,5~6年后,会被java工程师拉出一大截,因为java工程有更多的时间去研究如何快速响应客户的需求 ,而绝大部分c++的普通工作者,还是用时间去堆积一些没什么意义的轮子。