人类社会从古至今生产技术发生多次重要改变,有人据此将这些生产技术的提升划分出农业革命,工业革命等几个阶段。每一次革命除了提高人类的生产力,往往会引入更加复杂的技术,同时也伴随着失业和更多就业人员的迷茫困惑。
人们先是发现了钻木取火,然后利用火为我们的生存带来温暖与食物。刀耕火种的生活似乎不需要耗费人类多大的脑力与时间去学习。到了现在,各种科学信息技术的发展,计算机,互联网以及各种电子产品随处可见,独角兽公司层出不穷,知识的积累往往是财富到来的先兆。人们渴望通过学习计算机技术来获取财富,然而面对繁杂的技术却常常感觉到迷茫与困惑。
事实上,回顾历史我们可以发现,其实计算机无非仅仅只是一种工具而已,说得更明确一点,是一种能提高人类生产力,为人们带来方便的工具而已。先是,人们发现了电,然后灯泡亮了,风扇也动了。这些原理我们也不难理解,电转变成了热,热得发烫就有了光,通了电的电线产生了磁场,再在电线旁边放个磁体,于是风扇就动了。人们在夜晚需要光,于是生产灯泡的人就能将灯泡卖出去,理所当然卖灯泡的老板也就赚到了钱,获取了财富。
回到计算机上面,人门计算需要用到工具,而计算机恰好又是能提供计算的工具,所以计算机就存在了。那计算机是怎样工作的,毕竟计算机发展不过才一百年左右,就在这个一百年的时间里,一切似乎从0到我们现在随处可见的电子产品,像手机,电脑等等等。万物都是由简单演变到复杂的,只不过很多人现在第一眼看到的就是一个电脑,上面或许再加一个Win10操作系统,或者拿着一个苹果手机,这一切总该归不是一下子就从石头里面蹦出来的。首先我们想到的是,1+1=2,我们想要进行这个运算,计算机该怎么帮助我们去完成呢?有人提取了一些硅元素等东西,做了一个二级管,然后他发现用两个二极管A和B,A如果给了一个高电平,发挥你的一点想象力,给他来个两个3V电池。B也是来两个3V电池,那么C就能测到高电压2。如果A或者B其中一个只给了一个电池,那他就只能测到电压1。所以很容易就想到两个高电压相加就是电压2。其中一个高电压加上另一个不是高电压的,就是电压1,这样子用来表示1+1=2,1+0=1,不就可以了吗? 事实上最先开始的一些电子设备就是这些了,这个可以看看模电和数电的一些经典书籍了。
再进一步的,我们计算完后的数据,需要找个地方存储,这个时候你可以再来一点想象力,这个世界呢,有些材料,比如它长得像一条线,你左边接的是电池的正极,右边接的是电池的负极,那么这个电线左边的电子就比右边的多,CMOS(这个可以百度看看)大概就是这个样子的。至于像电子这些东西,你可能很难或者这辈子都没有机会看到。不过没有关系,你可以想象,人类就是这个样子的,你说爱因斯坦和薛定谔这些大牛有看到光子是什么东西吗?他是看不到的,他也是靠现实的经验类推的去猜想的,人类的大脑就是这个样子。OK,存储的东西就说完了。
有了前面这些直观的想象之后,我再带你进来想象一下我们的计算机是怎样子工作的。在计算机发展这个路程中,驱动他发展的主要因素就是人们在想怎么去做出一个好的计算机让他为我们服务和工作。在这个发展过程中,就出现了很多杂七杂八的名词,对于不懂的人来说听起来就会觉得很奇怪,很高大上。首先,他主要就是由CPU,内存,磁盘这些东西组成的。电脑一上电,就去到已经存储好我们程序的磁盘这里,然后和CPU还有内存进行通信。这里的程序就是和我们上面说的存储数字2是一个道理的。而通信这些呢?比方说CPU和内存要进行通信,那他之间可以连一条线,你给我发个信息,比如说你这个时刻CPU给内存发了一个3V的电压,另外过个5秒时间内存在给CPU再发个2V的电压。这个规定下来,就是个协议了。还有就是为什么还要再加个内存。再来点想象,比如说你可能用的是电阻或者电容这些东西,电子在电阻上可能就比你在电容上跑得快,那么你的运算在内存上就比你在磁盘上跑得快,这样子的话你可以先把磁盘上的东西传到内存上跑就会快很多了。其他的,像键盘,USB插口,屏幕,鼠标这些,计算机在发展的过程中,大家觉得程序在跑的时候,我人为的想要给他做个改动,比如说让他暂时停止一下,这个时候如果有个键盘按一按,发送个暂停指令就会很方便了,于是键盘就有了。后来有人想到如果能看到程序跑的时候输出一些结果出来,可能会更好一点,屏幕就有了。这个总体的思路就是有人会去想,我怎样做才能方便别人使用,然后一步一步的去把东西做出来,做出来的东西大家都觉得好用,那么大家自然愿意给这个做的人买单,然后生产的人也就越做越好了。反之做出来的东西没人使用,那么这个人生产这个东西的钱就都没了,自然而然这个东西也就消失了。这个你可以去多看看几本书,比如说《硅谷之火》里面讲的就是这个了。
然后,光是只有计算和显示这些可能这个计算机就只能自己一个人使用了。后来有人就想到将计算机和计算机进行通信,于是就有了互联网这个东西了。简单一点来说,其实道理和计算机里面的CPU与内存这些的通信也是一个道理的。两台计算机通信,你要有个东西来传递信息吧,比方说你拿一条电线,约定好A可以在这个时间给B发信息,B可以在另外一个时间可以给A发信息,在通信学上说得高大上一点,这个就叫做半双工,要是A和B在某个时间都能同时进行通信,那他就叫全双工通信了。而你做的这个约定呢?就可以叫做协议了。当然,除了电线,也可通过电磁波来通信,
现在,大概你的大脑有了一个很简单的概念,计算机和互联网这些,不过就只是通了电的东西。好了,再发挥你的想象力,我给你讲讲我们电脑上的聊天软件是怎么发消息给其他正在手机上使用聊天软件的好友的。最我们需要一台手机,和一台电脑,和一台服务器。按照前面的说的,手机至少会包含有一个存储信息的东西,一个用于计算处理信息的CPU,还有如果我们是通过Wi-Fi发送消息的,那么我们至少还需要一块Wi-Fi芯片,还有一个屏幕。CPU是怎么来的呢?CPU以前可能用的是那种大的电子管去做的,一个电子管假设只有一粒米那么大,那么如果需要处理十分复杂的运算,可能需要上百亿粒米大的电子管,一个两百平方的大房间都不能放下这块CPU,所以这当然是不显示的,后来满满发展,发展到现在都有7纳米的工艺技术,相当于把原先一粒米的大小降低了一百万倍都不止,到现在CPU只有一个大拇指那么大。在这个体积降低的过程中,事实有很多专业的人员参与到其中的设计,去推动他的发展,CPU再细分下去设计,里面除了前面说的加法运算,还有其他更复杂的,比如有些可以实现傅里叶运算,积分运算。这些模块事实都有专门人员去研究,还有一些架构师专门负责把他们整合起来。根据里面芯片的设计又分出了很多CPU的架构,像RISC-V,arm等等。再有就是其他内存和外存这些,也都是同样的思路一步一步这样子做出来的,刚开始的时候没有人会一下子想到,一下子就把一台手机或者电脑划分成这么多个部件,大家都是一步一步踩着坑去尝试,错了就改回来的。像这样子一台手机从无到有做好了,里面又衍生出很多概念,而且有些概念不想数学这些定义那么严谨,甚至还存在着歧义。一台手机写好之后,你会给他按装一个操作系统,什么是操作系统呢?事实上世界本没有操作系统的,因为我们的电子产品越做越复杂,不像以前,我把一个程序写到存储器里面,然后让程序一直去跑,我们再想对他做修改就又得把程序重新写一遍,在放到里面的存储器,事实上现在很多小型的电子产品就是这样,这又衍生出了嵌入式这一个行业。当你加载了操作系统之后,你就不需要再重新去把整个程序重头在放到存储器里面了,只需要在上面在放一个程序就行了,比如我手机上大家说安装一个软件,安装一个APP,就是这样子的。我们把APP放到手机上,然后APP会通过这个操作系统再去控制我们的手机,比如点击QQ图标,QQ就跳出一个页面。那我们在QQ上发送一条消息到好友的电脑上,这件事情要怎样去完成呢?QQ会把这个消息给到操作系统,操作系统在通过上面的Wi-Fi器件,然后通过电磁波发到路由器,路由器收到这个电磁波,就把他转换成电流,像前面说的那样子,有规律的电流信号就能表示信息。然后这个电流信号会在世界上一些其他路由器流动,流到服务器上,至于这个电流怎么流,又衍生出了计算机网络这们学科出来,他讲的就是这一块,怎么把这些信息组装,怎么去找到我们的服务器。像我们经常听到的IP地址就是这样,大家就做了这样一个规定,世界上IP地址是怎么去编号的,大家怎么去找到这个IP,找到之后就能把信息给到这个服务器,而在另外一端的电脑,他刚开始的时候也是要去找这台服务器,并告诉他我是谁,后面当收到我们服务器收到这个消息之后,服务器才能把消息发送给电脑。很多人都会说算法是程序的灵魂,这个又是怎么一回事?举些简单的力资,比如我一台手机上面的有很多个APP,手机如何让这些APP运行的更好,比如我正在听歌用的是酷狗音乐,突然微信弹出了一条消息,那这个操作系统肯定会做了这样一个处理,我在用酷狗的时候,他会时不时的去看看我微信有没有人发消息给我,有的话就提醒我,在这里他这样子做了,我们就可以说他的程序实现了这个算法。另外我手机端上发出的消息,如何在路由器间流动才能去到服务器,我们协议规定后,我们要去实现他,实现的程序就是算法。也就是说算法就是我们把我们想要做的事用程序写出来。而编程语言呢?我们写的这些代码呢?早期的时候可能我们用比特,也就是用0和1去表示信息,去写程序就可以了,后面大家想每次都是0和1这样子去写,好麻烦,比如我写个1+1=2的操作,每次写个加号都要写三十个0和1的组合,我能不能就用ADD这个英文字母去表示,然后有一台机器他帮我把ADD翻译成这三十个0和1的组合呢?于是编程语言就出现了,随着后面的发展,遇到的问题越多,想实现的功能越多,很多语言也出现了,去解决这些问题。