关闭

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

6266人阅读 评论(6) 收藏 举报
分类:

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


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


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


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


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

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


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


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

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


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

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


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

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

        

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

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


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

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


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

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

   

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

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


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

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

  

       

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


        抽象无处不在, 本想再聊聊认知, 但傅盛先生早就把认知讲得很好很透了, 所以, 还是奉上精彩原文吧:/bc5/stpeace/article/details/78066896  《傅盛:认知升级三部曲》





2
1
查看评论

《从JAVA到Android》JAVA篇之认识JAVA

《从JAVA到Android》JAVA篇之认识JAVA 标识符和关键字 基本数据类型 常量与变量 运算符 数据类型转换 注释及代码编写规范等 转载请注明 —— [ 肖义熙 ] 1、标识符和关键字通俗的讲,标识符就是程序员自己起的一个名称(包括变量名,类名,方法名等等),而关键字是在JAVA...
  • u010231111
  • u010231111
  • 2016-10-10 16:06
  • 483

深度学习自学笔记(一)

深度学习自学笔记(一) 声明: 这是一个初学者写给自己看的笔记,一边想记录我学习深度学习的思考过程,另一边是顺便整理自己刚学的内容,所以内容肯定非常肤浅,但我认为这样反而更容易让新手接触这个东西,所以若大牛们发现里面的错误,还望不吝指点,我会尽快更正,以免误导他人。我主要的学习思路是来自这篇博客ht...
  • u012990623
  • u012990623
  • 2015-08-15 16:23
  • 869

笔面试中被问到n次的问题——抽象类和接口

一、表格展示   接口 抽象类 多继承 支持 不支持 类型限制 没有 有,只能是引用类型 方法实现 继承类型中必须给出方法实现 继...
  • wang_bigworld
  • wang_bigworld
  • 2015-02-08 11:48
  • 494

我对QA工作的一点认识

按照CMMI的框架,QA的职责有二:依据一定的标准对过程进行评价;依据一定的标准对工作产品进行评价。貌似从这两点,让人感觉QA就是在对项目组品头论足,挑毛病,不断的给项目组制造麻烦。有一些问题还会直接报告给高层领导,在领导面前“打小报告”。QA还强迫项目组按照组织的过程做很多开发以外的事情,写很多文...
  • guangmingshizhe
  • guangmingshizhe
  • 2012-11-30 09:29
  • 1024

深入Java系列——面向对象之(一)——抽象

此次对于java的学习,可谓是很轻松的一个过渡。在软考过程中不知不觉就和她成为好盆友了。从之前的VB、C#、 C++基础学习,到现在的java,一个感受就是编程语言大概都是一样的,无非都是指挥机器按照规定去干活的工具罢了 。   至于编程思想,也就都是那么回事儿,简而言之:我们在使用计算机...
  • u011500356
  • u011500356
  • 2015-11-18 16:30
  • 1392

【JAVA】抽象和封装

Java:抽象与封装……
  • mjianglei
  • mjianglei
  • 2016-08-26 16:29
  • 1043

使用electron和nwjs开发跨平台应用

web前端语言的发展有目共睹, 从原来的pc web, 到后来的mobile SAP, 再到 nodejs,全站工程师应运而生. js快速而且稳健的发展让人不得不重视, 相应的前端开发人员的地位也越来越高, 越来越多的人愿意投入到前端的阵营里去. 而桌面app向来是web前端开发开发人员下意识的避开...
  • upc_xbt
  • upc_xbt
  • 2016-11-24 10:46
  • 2488

从认知到编程(一)

我们的世界为什么存在“编程”这一事物?有人说是因为需求,但我认为这有些偏驳,虽然我无法诠释“编程”或者“开发”的由来,但个人的生活经历让我认为,人类的“认知”发展在其中起着很重要的作用。 事实证明人类的认知是一直在不断变化的,从牛顿的万有引力到爱因斯坦的相对论,从远古人的转木去火到现代大学中的燃烧学...
  • afraid_to_have
  • afraid_to_have
  • 2016-10-02 14:17
  • 437

认知科学、神经科学、和认知神经科学

更新一览 我需要首先表明我的态度 我们需要先承认和正视当前学科之间真实存在的差异和鸿沟,然后再思考应该用什么样的态度和方法来改变和推进研究发展。 在研究人类大脑-认知的过程中,学科之间巨大的些差异是否真实存在?是。这些差异是否理所应当存在?不见得。理想情况下是神经科学和认知科学应该互相启发...
  • GarfieldEr007
  • GarfieldEr007
  • 2016-05-25 15:06
  • 1164

从认知到编程(三)

在上一文的基础上,本人对管理的分类做了跟进一步的挖掘,由此初步在网上发现了一下内容: 信息管理与信息系统:适应在大中型企业特别是合资类与外向型企业、金融机构、政府机关、其它社会经济单位的信息管理部门、综合管理部门、计算中心等相关部门从事信息管理与信息系统的建设、运营等管理工作。    管理学门类包括...
  • afraid_to_have
  • afraid_to_have
  • 2016-10-04 17:43
  • 436
    个人资料
    • 访问:7337149次
    • 积分:93397
    • 等级:
    • 排名:第15名
    • 原创:1995篇
    • 转载:205篇
    • 译文:0篇
    • 评论:2208条
    文章分类
    最新评论