为什么写这篇文章
受《大学计算机:计算思维导论》的启发, 对计算机科学有一个全局的景图,了解计算机是从哪里来的, 又如何发展到今天。要深刻的理解一个事物,要追本溯源(第一性原理),以发展的眼光把握事物的发展历史, 站在巨人的肩膀,站得高,望得远。
《大学计算机:计算思维导论》给我带来了宏观的计算机景图。计算机来源于数学, 其理论基础之一是数理逻辑,而数理逻辑体系的发展历史背后有一条主线——一条漫长的历史长河,沿着这条河流回溯而上,将会遇到历史人物——布莱尼茨、布尔、弗雷格、图灵、香农(感兴趣的,强烈推荐科普书 逻辑的引擎)。19世纪的布尔最伟大的成就在于将逻辑代数化,构建了逻辑体系。 该逻辑体系下, 与、或、非构成了基本的逻辑符号, 而这是计算机数字电路的理论基础。 20世纪的香农发表了论文《对继电器和开关电路中的符号分析》,论证了构造 与、或、非电路的可行性。
沿着逻辑电路顺流而下,可以看到更为开阔壮观的景象。与、或、非门 构建了更复杂的集成电路, 如 译码器 和 加法器,译码器可用于寻址技术,加法器是最基本的计算单元。复杂电路的集成构成了现代计算机, 现代计算机的模型是冯诺曼依体系,计算机设备由、输入、输出、控制器、计算器、存储组成。在硬件的基础上, 操作系统是对底层硬件的抽象。高级语言是对汇编语言的抽象。 算法和系统工程构建于高级语言之上, 并结合网络原理,构建了现代互联网 。 现代互联网已经深刻的影响了生活方式和生产方式。 基于这条主线,可以清晰的看到计算机的发展全貌以及理论基础。
而庆幸的是,我大学教育的课程已经提供了这一条主线。但悲剧的是:在大学时代, 但没有意识到课程连接起来形成这一条主线,贯穿着计算机的发展历程。 当然,现在意识到这一点,为时未晚, 这也是我写这篇文章的初衷,也希望更多人看到计算机基础的重要性!
什么是计算机基础
记得在大学时代修过的计算机核心课程:《模拟与数字电路》、《计算机组成原理》、《计算机体系结构》、《操作系统》、《编译原理》、《数据结构》、《数据库原理》、《网络原理》。当时的印象比较深刻的是《模拟与数字电路》,学起来枯燥, 要基于与、或、非门实现各种复杂的电路, 想想脑袋都疼!这些课程环环相扣,《模拟与数字电路》是《计算机组成原理》的基础, 《计算机组成原理》是《计算机体系结构》的基础,这三门课程是偏向于底层硬件实现;而《操作系统》是对底层硬件的抽象和扩充;《编译原理》是对高级语言的翻译;《数据结构》是算法的基础;工程实现依赖于《数据库原理》;《网络原理》提供的广域网、局域网服务,是现代互联网的基础设施。 在冯诺曼依体系下,这些基础课程现在不过时、未来也仍然不过时, 它们提供了一个全局的视角,去洞察计算机的本质!
大学时代还学习了数学的基础课程:《离散数学》、《微积分》、《线性代数》、《概率论》。《离散数学》是计算机领域建模的有利武器,例如:图论是建模的必杀技,人工智能的理论基础之一就是数理逻辑。 在机器学习领域, 梯度下降法可以看到《微积分》的影子。《线性代数》是机器学习的基础之一。 《概率论》和 《统计学》为机器学习开创了另外一个方向,如:贝叶斯模型。计算机是源于数学, 而数学又是建模的工具。现实生活的问题千变万化,从计算机的视角去解决这些问题, 就得对问题进行 抽象, 然后利用数学建模, 建立一套理论基础, 进行演绎推理, 在理论层面上证明了可行性之后, 然后再进行工程实践。 这一过程经历了 抽象->理论->设计,这是认识世界得科学方法。 也只有通过科学的方法去认识世界, 我们才能改造世界。
我认为:以上课程是计算机的基础。计算机来源于数学, 计算机是我们改造世界的有利武器, 而现代计算机基于 坚实的理论 构建的。 学习这些课程, 不仅可了解计算机的来龙去脉, 而且提供了思想的源泉,掌握科学的方法,站在更高的视角, 触达计算机的本质。
为何计算机基础重要
21世纪, 进入了知识爆炸的年代。 计算机领域也一样, 技术更新迭代的速度如同火箭的速度一样。 新的技术框架和组件层出不穷。但是,万变不离其宗,掌握扎实的基础,面对技术浪涌,也能应对自如!
从世界范围内来看,知名院校计算机学院都会开设上述基础课程, 例如:国内的清华、北大, 美国的MIT、伯克利、斯坦福、CMU。 这些课程开设的目的就是夯实理论基础,才能构建宏伟建筑。罗马不是一天建成的,但是没有基础, 罗马不可能建成的!
快速学习能力的提升依赖于扎实的计算机基础。 这是一个需要终身学习的年代,不仅要关注学习本身, 还得关注学习效率的提升。基础夯实, 意味着面对技术潮涌,也能应对自如。 金融领域的技术, 技术难点之一就是实现数据一致性, 数据一致性依赖于事务, 最基础的一致性模型就是分布式事务, 而分布式事务的基础是 本地事务, 《数据库原理》就提供了本地事务的基本原理。 如果理解了本地事务原理, 学习分布式事务理论就事倍功半。 在《操作系统》中, 有一个最基本的模型:生产者-消费者,而消息队列的实现本质上也是 生产者-消费者模型。生产者-消费者模型实现了空间和时间的解耦, 应用场景广泛,例如:异步解耦、削峰、数据一致性、数据通道。如果掌握了扎实了数学基础,要转型算法工程师、从事数据挖掘、机器学习等行业, 面对眼花缭乱的数学公式, 也可从容不迫!其实,各行各业都一样, 根基稳固了, 学习能力自然就提升了!
计算机基础是否扎实决定了职业生涯能走多远!程序员的圈子总是有一种焦虑感,程序员是年轻人的天下、35岁达到职业瓶颈期。如果花5年甚至10年重复得干CRUD工作,每天忙碌于解决线上问题、修复Bug, 职35岁能不到达职业瓶颈? 为什么计算机基础扎实了, 有助于职业生涯走得更远? 这得从计算机思维说起。 基础不仅仅带来的是理论知识, 更重要的是带来了思维方式的提升。 其中最重要的两个思维是:自动化思维和抽象思维。
计算机是按照指令顺序自动执行,自动化思维的启示是解放双手、关注核心的项目,能自动化的事情就应该自动化。 计算机领域层有出不穷的自动化工具,充分利用自动化工具, 解放双手,就解放了焦虑, 做更有意义的事情,才能有更大的成长空间。
抽象思维,解决复杂问题的利器!为什么有些人是行业专家, 指点江山?为什么有人是架构师,高屋建瓯?为什么有些人只是辛勤的搬砖族? 本质的区别在于抽象思维。行业专家制定行业标准 , 例如 网络原理的七层模型, 构建该模型首先得具备抽象能力,分层的边界是什么? 每一层具体的职责是什么?各层之间如何交互。 架构师解决系统架构问题, 就得摸清系统的边界? 系统的职责是什么? 系统之间如何通信?应用哪些技术组件? 这些都需要抽象思维,站得足够高, 才能望得足够远。 而计算机基础可以训练抽象思维(话题太大了, 后期单独介绍)。是否具备抽象思维 决定了你是陷入忙碌的死循环 还是 做更有意义的事情, 也同样决定了你是辛搬砖族 还是 高屋建瓯者!
路漫漫其修远兮,吾将上下而求索!