现在已经有大量的软件开发框架可供我们选用,为什么还要花时间精力去学习架构?
这里我说明两点:其一,任何框架只能是适用大部分场景,要记住框架是适应一系列软件开发的,而不是专为你开发的软件所用。造汽车的技术框架就不再适合造船艇,更不适合造飞机。一样的道理,如果不了解框架的架构思路,就很可能在出了严重问题时束手无策。其二,框架本身也是要更新维护的,由于硬件技术在不断发展创新,软件功能也越发强大与复杂,一个软件性能的提升也依赖于硬件特性。在软件开发的过程中,往往需要根据架构思路改造框架以优化软件功能。
那么,学习并精通架构还有哪些好处呢?
一般的,能够完全按照自己的思路去开发软件,效率又高,又容易维护。拿一个已经做好的框架来做开发,多少会有一定的限制,要选用最合适的框架,也要求开发者有一定的项目经验。再如,你想开发某个特定功能,而已有的框架并不支持这个开发,你可以改造框架,但很容易出问题,而自己的框架,架构思路什么的都了如指掌。学会架构,最能助你开拓创新,要是深入计算机前沿,你须突破框架的层层封装。可以说,不了解底层原理,很多问题你是想不明白的。
在计算机科学领域中,抽象这一概念支撑全局。例如,指令集体系结构是对电子逻辑结构的抽象,高级语言语句又是对指令集的抽象,即只关注最终效果,不需再考虑具体细节。
例如给一批新生产的啤酒包装,无论是3瓶一排分8排装,还是4瓶一排分6排装,每箱啤酒都是24瓶。
在计算机中传送4个字的数据,32位机需要两次传送而64位机一次就够了,而在上层看来就只是传送4个字的数据,这便是抽象的魅力。
最常见的x86处理器架构始于经典8086体系结构,由单核到多核,由16位到64位,由单线程到多线程……体系结构逐步拓展,功能更加复杂强大。但是,我们在各个高级语言中却看不出这些变化,其原因就是任何一种体系结构都采用特定技术实现同一种高级抽象。
如下图,X体系运用技术Ⅰ实现了递进的A系统,而另一种全新的Y体系运用技术Ⅱ也实现了A系统,那么在A系统之上开发的软件在X体系和Y体系中都能运行,这就是实现跨平台可移植软件开发的思想。为了软件开发的便利,A系统在它自己的基础上构建了一个更好的B系统,X体系无法直接构建直系上层体系结构B系统,而Y体系却能运用技术Ⅲ直接构建B系统。在计算机系统发展过程中,常有这样的情况,这时分析一下,B系统上开发的软件运行于Y体系就要比运行于X体系少一个层次,因此在Y体系上运行的性能要更好一些。
再例如程序并行的原理,其实也很好理解,比如你正在玩的一个游戏,玩的同时播放着悦耳的背景音乐,很显然游戏主程序正在和播放程序并行,这两个程序由计算机不同部件执行,主程序只是通过驱动程序接口控制播放程序的启动停止。多核计算机实现并行就很好办了,每个核都可以独立执行一个程序,而单核单线程的情况下其实有伪并行的方法,比如在一个程序等待的时间里可转而执行其他程序的工作。
软件开发过程中,要注意是思考决定编码,这样才能不断突破自我。非必要就不用代码说话,我习惯将重点用来阐述思路。