您的位置:首页 > 其它

从核外电子(electron)到应用软件(software)------谈谈抽象和认知

2017-10-28 23:32 302 查看
        在这篇博文中, 我们来说说从核外电子(electron)到应用软件(software)的那些事, 顺便谈谈抽象和认知。  抽象是无处不在的, 也是一种认知过程, 存在于我们生活的方方面面, 来举几个例子。

       例子1: 你买了一个电饭煲做饭, 每天吃香喝辣, 但你从来不去想一下电饭煲的内部结构和原理。  那为什么你不去想这些东西呢? 因为没有必要, 你的目的就是用电饭煲做饭, 仅此而已。 所以, 尽管电饭煲里面有电路和一些器件, 但你只需要关注几个按钮和指示灯就行了, 在这个过程中, 你对复杂的电饭煲设计和原理进行了抽象, 抽象成几个按钮和显示灯而已, 能做饭就行。

       例子2: 你坐火车, 从北京到深圳, 你买票就行了, 上车后在车上睡大觉就行, 你没有去关注火车具体走那条隧道, 走那条轨道, 你甚至不会关心它经过了哪个站。 为什么你不需要考虑这些细节问题呢? 因为, 这些不是你需要考虑的, 这些是列车员和火车指挥系统需要考虑的。而你, 对这一系列复杂的问题进行抽象, 对你来说, 就是花钱, 买票, 达到目的地, 仅此而已。

       例子3: 你在开车的时候, 你永远不需要去想汽车的原理, 即使你懂汽车的原理, 即使你是汽车方面的权威专家, 即使你懂汽车的一切的一切, 你也不需要在开车的时候去想汽车的每一步原理, 因为你只需要关注汽车的功能, 而不是细节。 作为汽车专家的你, 如果开车的时候想汽车每一步的原理, 你还能开好车吗? 所以, 你做的事情, 无非就是对汽车的一切原理和构造进行了抽象, 抽象成方向盘, 车刹等几个关键的部件。

       所以, 我们应该看到, 任何一个事物, 存在具体和抽象之分, 具体涉及细节结构和原理, 而抽象则可大致理解外部的特性和功能。 至于什么时候该关注具体, 什么时候该关注抽象, 这可以以目的来决定。 这就好比, 如果你是做手机的工程师, 那么你自然需要懂手机的内部相关具体原理。 如果你仅仅是用手机的人, 那么你更多的是关注手机有哪些按钮和功能, 以及怎么使用, 说白了, 你对复杂的手机进行了抽象。

       抽象是重要的, 它能屏蔽一些复杂的, 甚至是不必要的细节, 每个人只需要关注所需要关注的层次即可。 人们天生就会抽象, 想一想, 是不是这样。 在我们工作和学习中, 也需要学会抽象, 让自己从繁杂的事情中解脱出来。 所以, 你老板经常会问你, 这个搞完没, 那个搞完没, 他一般不需要关注你的过程, 他只需要关注你的结果, 这个结果是对过程进行抽象的结果。 邓小平同志的白猫黑猫论, 就是关注抽象结果的一个很好范例。

       下面来说从核外电子(electron)到应用软件(software)

       电子、原子、分子------基本粒子层

       学过中学物理/化学的人都知道电子的概念,你每天吃的食物, 其中包含了数也数不清的电子, 这些电子在原子核周围运动。  如果你天天关注那些看也看不见的电子, 那就是白白浪费生命了, 电子那么多, 运动那么复杂, 关注它干啥, 还不如关注原子。 同理, 天天关注自己吃了多少原子, 也是没有什么大意义的, 还不如关注分子。 同理, 天天关注吃了多少分子, 也没啥意义。 因为, 这不是你该关注的。 可以看到, 这是一个层层抽象的结果。

       电阻、电源、二极管、三极管------模拟电路层

        我们知道, 电阻、电源、二极管、三极管, 这些是由上述基本粒子组成的, 也就是基本微观物质粒子组成了这些宏观的物体。 电阻、电源、二极管、三极管等电路元件不就是大学学的模拟电路基本器件吗? 所以, 模拟电路最本质的组成不过是上述的电子、原子和分子, 但是, 你在学习模拟电路的时候, 脑袋中不需要总是想着电子、原子和分子, 甚至, 你可以忘了它们, 专注在自己的模拟电路这层。 这就是一个抽象的过程, 忽略基本粒子层的具体细节。

       与门、非门、或门------数字电路层

        通过模拟电路元件的组合, 我们形成了与门、非门、或门等基本数字电路的元件, 所以, 数字电路是对模拟电路的抽象, 如果你愿意, 那么在学习数字电路的时候, 你完全可以忘记模拟电路, 你只需要关注数字电路就行。

        

         加法器、寄存器------数字电路组件层

         那么多与门、非门、或门看起来让人头疼, 于是我们将其拼装成新的、更复杂的逻辑器件, 比如加法器和寄存器(可以认为是一个小芯片), 所以, 此时,你只需要关注数字电路组件层就行, 你关注的是一个又一个整体的加法器和寄存器, 而不需要深入关注组成加法器和寄存器的各种与门、非门和或门。 这就是抽象, 关注本层即可。

         cpu集成电路和指令集-----机器语言层/汇编语言层

         买了一块cpu芯片后, 可以在上面拨弄各种开关(有点小难度), 实现你的逻辑, 你还会关心曾经的那些电子、原子和分子吗? 你还会关心加法器、寄存器吗? 一般不会的, 因为没有太多必要。 这就是抽象。 在这一层,  计算机先驱们设计了纸带打孔编程, 实际上就等价于拨弄一系列的开关。 这里的打孔纸带, 实际上就是软件的雏形。 后来呢, 计算机先驱们又发明了助记符编程, 实际上就是汇编语言, 可以认为汇编语言是对机器语言的抽象, 抽象后, 比之前更接近人类思维, 机器语言和汇编语言等价, 但汇编语言更好懂、更好写。但这还不够,
还需要对cpu指令集进行更加彻底的抽象, 便于越来越接近人类思维。


        操作系统------系统软件层 (实际上,可以认为数据库软件、编译软件是对操作系统的继续抽象)

        操作系统是最重要的软件之一,cpu硬件电路那么难以控制, 机器指令那么繁杂,  所以需要操作系统来进行抽象, 抽象后, 一般的程序员就不需要关注硬件了, 这就是为什么很多程序员不懂硬件的原因, 因为, 他们不需要懂(当然, 如果懂一些, 肯定更好啊), 他们需要的是跟操作系统打交道就行了。 操作系统对硬件的抽象过程, 何其重要, 比如:对内存和部分硬盘存储的抽象形成了虚拟内存(程序员使用的实际上是虚拟内存), 对硬盘的抽象形成了文件, 而进程也是一种抽象。 总之, 抽了又抽。

   

        应用软件------应用软件层

        要注意, 这里的应用软件(比如word/excel/powerpoint等众多软件)是一个名词, 就是供用户来使用的软件。开发应用软件的程序员, 调用的是操作系统的能力, 给用户提供应用软件对应的功能, 实际上, 程序员并不需要懂操作系统的原理, 就能写出应用软件。 但是, 请注意, 如果不懂操作系统, 会被众多高手鄙视, 而懂操作系统, 能做一个更好的程序员。 在开发应用软件时, 程序员可以选择高级语言来进行编程, 比如C++语言, 在使用C++语言的时候, 不必去想那些汇编指令和寄存器,
那些东西烦人啊。 这就是为什么大家更喜欢高级语言而不喜欢低级语言的原因。 本层, 说白了, 也是抽象。

        使用软件------用户层

        用户只管使用应用软件, 不需要知道应用软件内部的结构, 不需要懂操作系统, 更不需要懂硬件, 更不需要懂最最最最最最底层的电子, 尽管, 从微观上来看, 用户使用软件时, 最终必然驱动了电子的运行(定向移动)。 抽象了那么多层, 终于到用户这里了, 那些老太太老爷爷能玩手机、看视频, 多亏了如上的层层抽象啊, 越抽象, 越接近问题域。

  

       

        我们还要注意到, 在每一层, 层内的抽象也是无处不在的, 大家熟悉的计算机网路7层结构, 不也是层层抽象吗?   C/C++中的函数不也是一种典型的抽象吗? 可以说, 几乎每件事情, 每个事物, 都可以抽象。 

        抽象无处不在, 本想再聊聊认知, 但傅盛先生早就把认知讲得很好很透了, 所以, 还是奉上精彩原文吧:http://blog.csdn.net/stpeace/article/details/78066896  《傅盛:认知升级三部曲》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: