畅想计算机
Computer is not magic.
计算机的由来
事到如今,计算机已经发展得如同魔法一般。大多数人都无法想象一台只会计算数字的机器是如何变成当今这样充满智能的“电脑”。每次在百度搜索框中输入关键字,就会跳出推荐列表,按下回车,结果就会涌现。而当下,机器学习的时代,计算机似乎变得更加“魔幻”,它能识别人脸,甚至能画画、写小说。在“计算”与“智能”之间,到底发生了什么,这是我一开始学计算机时就想搞明白的问题。
很可惜,这并不是三言两语能够解释的。学了模拟电路,数字电路,此时你能够窥见电路到计算的一隅。而在学习计算机组成原理后,这方面的概念会更加明确。
网络时代
接下来,我们走当今最广为人知的 web 路线。
学习了计算机网络,你能够了解到数据是如何在不可靠的物理/逻辑网络上(一定程度上)可靠传输的,以及各种在应用层的协议,比如 HTTP
。
到这里,你将恍然大悟,我们平时看到的绚丽网页,就是建立在这些之上的。网页(及其资源)通过 tcp 连接,从服务器发送到客户端,在客户端的浏览器中进行渲染。
走入应用
说到底,计算机是发明出来给人用的,所以计算机的应用是人们接触计算机最多的方式。现在无论是软件,还是 app,应用,大多采用 B/S
或 C/S
架构。其中负责图形界面的前端主要是与图形学与系统库有关,这里深入讲的是 S
,即服务器。
我们知道 TCP 连接是两个对等方进行消息传输。而现代应用的要求越来越多样化,这就要求有一方专门提供服务,而另一方专门接受服务。为了特化服务端的能力,开发了各种服务器程序,如 tomcat
,apache
,nginx
等等。服务器程序提供了基本的网络连接能力,主要是高性能,高安全性地提供服务。
仅有服务器程序是无法实现应用的,它还需要一个自己的后端。
为什么需要后端呢?不如考虑下后端要解决什么问题:
- 看什么
- 怎么看
- 谁能看
- 看哪些
- 什么时候看
- 下次怎么看
- 。。。
仅仅是请求资源就涉及了大量的业务。为了高效地开发应用,人们总结了经验,开发了各种框架如 Spring
,Django
,以及 MVC
、MVVM
模式等。富有经验的程序员们能够第一时间把握客户需求,并且能够迅速给出实现的路线。
更进一层
目前,网络上正在涌现一批特殊的网页应用,它们与 AI
有关。如最近很火的NovelAI
,以及各种抹去图片元素、音视频处理等。与传统网页应用不同之处在于它们的核心逻辑由深度学习的算法提供,这也给我们带来了全新的领域。
换个角度
每一个学计算机的学生都知道算法,但并不是所有人都知道算法是用来做什么的。
算法,通俗来说,就是怎么去做一件事。
就拿在计算机中搜索一段文字来说。整个硬盘的数据量可能高达1TB,而在某些数据中心数据量简直是天文数字,而你要搜索的文字可能隐藏在哪个角落,这就是真正的“大海捞针”。如果真的在大海里捞针,那可能要花费数十年的时间。此时,算法展现了它的威力。它通过各种信息去分析,这根“针”可能在大海的哪一个位置,同时利用计算机中数据“海洋”不会轻易改变的特点去记忆化等等,使得“捞针”在数秒内就能完成。
通过这个例子,相信大家都能够理解了。算法在你做每一件事情的时候都有用武之地,是的,每一件事。
随着研究的深入,算法变得越来越晦涩难懂,运用算法的时机与方式也越来越令人难以捉摸,但总有人能做到。这是通过大量训练以深刻理解算法本质来实现的。
然而,目前人类发明的算法并不算多,主要是从几种思想上扩展发散出去形成的各类算法,它们是同源的:更快,代价更小地做一件事情。
结语
计算机科学既壮观又幽美,我尝试尽自己所能,以十分恰当的方式来解释我所了解的某些片段。——Donald.E.Knuth
当下,如果给我提供需要的材料与时间,我是无法实现一台计算机的,因为还有很多知识漏洞。(主要是硬件上的orz)很久以来我都以自己亲手实现一台计算机作为心底的一个目标,但现实非常骨感:这对找工作帮助不大。但我仍希望有一天我能够完成这一儿时梦想,并对计算机科学做出一点贡献。
最后送大家,也送我自己一句话。
Study is not magic.