系统结构杂谈-计算机底层学习如何入门(CS-EE通用)

本文探讨了计算机科学中的技术研发与技术应用两大领域,强调了底层原理的重要性。作者提出从C语言入手,逐步深入数字逻辑的学习路径,认为理解内存和CPU等底层知识对于掌握指针等概念至关重要。此外,文中分享了学习方法,包括深入理解计算机底层,反复学习以巩固概念,以及通过编程实践如LeetCode来提升编程设计能力。
摘要由CSDN通过智能技术生成

一.概述:

从研究领域出发,可以将cs的相关研究和开发领域分为两个大类:技术研发与技术应用。

技术应用是基于目前的技术工具开发业务。

技术研发是指在计算机底层研发技术工具。

技术应用更侧重业务与技术的结合,简单来说:基本要求就是会用技术工具落实设计理念。对计算机底层原理的知识储备要求不高。相反,对技术研发而言,没有计算机底层原理的要求就很高。

这两种研究领域所使用的学习路径是不一样的,技术应用所使用的学习思维称为“应用型思维”,技术研发所使用的学习思维称为“原理型思维”。

在此,结合我本科期间的学习经验和心得,对原理型学习路径总结如下,供大家参考:


二.学习路径

       笔者的学习路径是从c语言入门开始(不包括指针),然后回归底层,从数字逻辑层开始层层向上递推。如下图:

        从digital level层补全c所需的底层知识储备。        之所以要从C开始,而不是直接从最底层开始,是因为学习过程需要“框架性思维”。学习最好要从宏观的角度建一个“框架”,明白最终目的后,再学习每一个模块的知识才能逐渐形成互相链接的知识网络。否则每一门课都是一个个孤立的结点,互相之间没有联系,也就谈不上系统性思维。如果把cs的框架比作一个数据结构,而每一门课比作数据结构里面的结点,那么在操作一个数据结构前首先要申请内存,搭建结构框架,然后将每一个结点送进结构,最终完成知识网络。

        最初接触c语言时,指针开始学不明白不要紧,因为没有memory、cpu这些底层知识支撑,理解不透彻写代码像套模板都是很正常的现象。在我的学习经验来看,初接触c语言时候,学校老师为了让学生理解指针,会打很多比方来抽象指针。但是再多的比方也没有理解内存、地址这些概念来的直接。在熟悉了地址这些内容后,会用指针是水到渠成的事情。

      笔者在学习之初也踩过很多坑: 学校排课并不是按上图的路径来安排的。笔者大一刚入学时,受高中学习思维的影响,在学习c语言和汇编时重点不是放在如何用现成的语言开发环境来实现需求上,而是在研究语言的实现原理是什么样的(比如递归调用的机制原理、指针的底层原理、中断调用原理等)。在当时的知识储备下,自然是一头雾水,开始的时候专业成绩也不理想。现在回想,原理型思维模式在那个时候已经开始形成了。当时的思维影响很大,是这种学习思维将我驱使向现在的系统结构方向。

        但是在完成了后续底层课程的学习后,反观c语言的指针这些概念就非常容易理解了。后续学习c++中的内容,也可以很快理解。本质上c语言是汇编的封装,要是将自我定位设在c/c++层,底层知识对开发必不可少。

三.学习方法分享

在有了框架性概念后,框架内每一门课都要重视,认真完成,以下是笔者的学习方法,供大家参考:

(1)、计算机底层知识学习方法

计算机底层涉及很多数字层级(digital level)的知识,光是入门就会劝退不少同学。不像高级语言入门一样很快。笔者的经验是不要放过任何一个疑问,不可以只是思考,要勤动笔,多做笔记多分析:

        比如分析不清算法原理,就把每一个循环的数据结构画出来,逐一分析;不懂时序电路如何运行,就一个一个时刻慢慢分析,直到把问题彻底分析透彻为止,这些时间消耗是值得的。笔者在数字逻辑入门时也花了很大力气,至今笔记若干本,总计1200页,以下是节选:

     

  学习cs的原理类专业课并不是一次学习就结束的,上文的学习路径有回路,其实这表示学习cs专业课是反复学习才能深刻理解的。这是因为底层的软硬件密切相关、互相依赖:例如进程切换要调用中断程序,中断是软硬件协同过程,硬件完成中断隐指令,完成指针切换,而中断子程序完成逻辑功能。这些概念在操作系统、组成原理、微机接口等课程中都会涉及。还例如cpu内的系统控制模块:MMU、TLB都是为了操作系统而设计的部件,汇编指令的设计又必须依赖于机型的硬件要求。从系统结构的角度看,软硬件都可以实现算法,目的是为了系统的高效,所以当今的微机系统的概念交错复杂。第一次接触这些概念可能感觉很抽象,而后续课程会补充相关细节。所以反复学习非常重要。

(2)、编程设计能力提升方法

        程序设计能力与底层原理课程的学习要并行推进。笔者的经验看来,编程能力提升在于经常实操练习,语法等问题,报错多了自然就会了,而不在于死看书本纠结语法。笔者在大一也曾犯过这个错误。练习编程能力的题目笔者推荐LeetCode,不仅仅是锻炼能力,校招社招面试也会遇到类似的题目。

        不推荐在做不出题目时直接翻答案看思路,即使用最暴力的笨解法,也应该把题目先解决,这是必要的时间消耗,让一种思路不能先入为主,否则长此以往编程思维不会很好的进步。

        同时,并不是做完一个题目就完成编程训练了,学习过程中非常重要的内容是反思、对比和复习。一个题往往有多种多样的解题方法,而不同方法时间复杂度和空间复杂度不尽相同。对比分析优劣,最后才能在面对一个问题时。灵活取舍方法,得到最高效的方法。这是对编程思维非常重要的一点。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

物质波波波

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值