跨平台技术和跨平台学习的深刻分析
更新时间:2015-06-25 21:17:29浏览次数:1+次
先对跨平台进行说明。我们现在有很多平台,在PC(电脑)端,主要有Windows、Linux(Unix)和IOS等。而手机端又有安卓、IOS等等。至于有多少平台,我们不用纠结。问题在于,不管是什么平台,都有共同点的。那就是,都有一个操作系统,而操作系统又是基础。
操作系统的基础涉及到进程线程、进程线程的同步互斥、内存管理、处理器(CPU)调度等等问题,这是所有平台都必须有的技术。即使是单片机,也是有内存管理等等的。操作系统的基础是程序员必不可少要掌握的基础知识,如果没有这些基础知识,你就是浮云。
现在来谈谈跨平台学习。首先来说说具体平台。具体平台就是实实在在的平台,比如Windows,前面说的操作系统的技术是具体平台的基础。说实在的,这些基础的操作系统的知识才真正是跨平台的技术。这个是让你能够真正切换平台开发的技术。而真正要开发效率很高的程序,必然是具体平台有关的,就是针对平台的,比如开发Windows程序,必然对Windows来说运行效率最高的。而如果你使用跨平台技术,那必然是使用别人做好的虚拟机之类的东西,这些东西在底层是针对具体平台的,比如Java的虚拟机。那么你的程序是运行在虚拟机之上的,要通过虚拟机来转换的,最后执行真正的机器指令。由此看来,一条语句,经过层层递进,才反映到具体系统的API,最后是机器指令。这样一来,执行效率极大降低,性能大大打折。如果你的程序要追求高性能,比如工业控制系统、动车系统等等,你会用跨平台技术实现吗?
现在来分清两个概念。一个就是跨平台技术,一个就是跨平台学习。
跨平台技术就是在具体平台上实现一个虚拟机,源代码生成的格式是中间的代码格式,就是虚拟机的格式。在执行时再转换成具体平台的指令执行的。之所以能够跨平台,就是你的程序编译后并没有生成机器代码,而是中间代码,中间代码是给虚拟机解释到具体平台执行的,因而可以达到跨平台。实际上,这个就给代码执行效率变低了。每次执行都要转换指令,而针对具体平台系统的程序直接是机器指令,直接运行,效率当然是最高的。使用跨平台技术,你是牺牲了性能来换跨平台性。不管内部转换如何快,都远远没有直接执行机器指令快。我想,通过上面的介绍,你对跨平台技术应该了解比较深一些了吧。
而跨平台的学习,大家往往走入误区。很多人认为跨平台学习就是学跨平台的技术,其实是大错特错呀!!学习跨平台的技术其实很简单,技术本身屏蔽了各种平台的差异,都是抽象成一种模型了,不用管具体平台的细节了。这样学习和使用起来都很容易。既然都很容易,学习成本就低,学起来就快,试问,这么多人懂的东西,你还有什么优势呢??这是一方面。
另一方面,你是想你的程序跨平台还是你自己能够跨平台呢?这个问题很值得思考。不要以为学了跨平台的技术,你就真的可以跨平台了。如果特定要求下,不能使用跨平台库,必须使用具体平台的东西实现高效率的程序,你就懵了。底层到底有什么,是什么机制你知道多少呢??完全只依赖跨平台技术,只学跨平台的技术,你不是能够跨平台,你就是一朵浮云罢了。你还以为你有多了不起的一样,那么到关键时刻,你就完了。我并不是夸大,只是警醒你!你要做一个有跨平台开发能力的程序员,而不是使用跨平台技术的程序员。
有跨平台开发能力意思是,你了解各个具体平台,能随时在各平台上做开发,而不是借助跨平台的技术。这一点希望你能够深深理解,这样你才是真正拥有跨平台开发能力的程序员。此时的你拥有的技术,并不是很多人都拥有的,拥有这些技术的人,并不多。大家都随潮流追随跨平台,简单易用,快速开发,最后让自己的价值越来越低,公司对你的态度是可有可无,因为随时有人可以把你取而代之!你没有谈判的砝码。而唯有将自己的实力提高,拥有跨平台开发能力(不仅懂各种平台的差异,使用跨平台技术自然是比简单学习跨平台技术更灵活),你占绝对优势!!
问题又来了!!大家都知道这些后,是不是都这么学,那还是竞争很激烈呀?这个可以安全的告诉你,不会!!想要达到这个水平,没有大量的基础和积累是不行的,没有坚持到底的精神是不行的,追求功利化的学习也是不行的,不能沉下心学习的人是不行的,没有正确的学习路线是不行的!!这么多条件,注定要拉大绝大多数人的差距,你能做到,还不是凤毛麟角的人才呀!!!学习路线,在C++技术网的推荐栏目的《C/C++学习顺序和经典参考书籍(V2.0) 》中列出了入门的书籍和学习顺序。其他的就靠个人的造化了。你我都要加油哦。当然,我一直和大家一起在努力,有我有你,你奋斗的路上并不孤独!
那么问题又来了!!!那么多系统,如何学习呢?难道说把每个系统都研究清楚吗?当然这个不现实。我再问你,你开发能同时再几个系统开发吗?在一年内你能换不同操作系统上的开发吗?显然不能!!所以,你不必着急,也不必害怕会学很多东西。我们可以按照顺序,慢慢来。
我们不是一开始就学习哪个操作系统,我们一开始要把操作系统的基础理论学好,这个是所有系统都需要的。学好了这个基础,基础扎实了,学习具体系统,则是看看系统的具体实现。你稍微可以选择一个系统,按你的兴趣来选。如果是面向客户端的开发,那么选择Windows系统;如果是面向后台服务器程序的开发,那就选择Linux系统;如果对苹果系统感兴趣,可以尝试学习IOS。而对于手机,则也是针对使用的原生系统学习。而这些基础都是操作系统原理,甚至是单片机,都是操作系统的基础。
选好要从事哪个系统的开发,都好好的学下去。选择了目标就不要徘徊,尽管学就是了。不管是什么系统,学深了都大有前途。况且操作系统本身底层都是想通的,如果有需要转到其他系统,接着之前学过的系统的技术,在其他系统只是在实现上有差别而已,积累的技术都是对你学习新系统有帮助的。
然后就是在具体的系统学习系统具体的编程,学习系统的各种机制,而不是简单的系统API调用。然后就是各个应用领域的技术,这就是所谓的逻辑,比如数据库,比如图形处理等等。
当你学到这个阶段,你就是大神了,你也有你自己的理解和高深的看法了。也不用别人指点什么了。并且你可以指导别人,让别人少走弯路。
祝愿你我都能够早日成为大神,甚至是大师。我希望国内也能多出一些大师。真正让祖国的技术崛起,拥有自己自主开发的操作系统和更多的IT技术!!加油吧,小伙伴们!!