985大学生也在学,学c语言到底有什么好,如此让我们疯狂
2021-03-07 20:29
标签:bsp bbb 返回值 python 掌握 wrapper size default padding 首先,我们学的是 Computer Science,而不是 Programming Language,语言真的真的真的不是重点。 语言只是工具,工具没有优劣,只有各自适用的场景不同。 所以,以下所有讨论皆不涉及语言优劣,一切论述以怎样才是有利于学好 Computer Science 为原则(求生欲满满 大学教育,尤其是 985、211 这种国内最顶尖的一批高校,应该注重通识教育而不是专项教育,在专业上更要注重基础、底层、偏向原理。 只有掌握了最核心的东西,学起那些偏技能的东西才会很快很轻松。 我记得当时大二需要写爬虫,大概看了一天左右的 Python 教程,会基本的循环、判断、控制流、一些 builtin 函数和类,然后学了下 requests 库就直接开干了。 其实像 JS、Python、Node、PHP 这些东西,科班学生几乎都是自学,哪还用得上单独开一门课呀。 自学是最基本的要求,需要用到的时候自己去看教程、文档,直接就上手写了。 所以这种语言完全没必要开一学期的课来学,倒是非常适合放在计算机导论课程中,成为其中一个章节。 比如 Berkeley 开设的导论课 CS 61A 就是以 Python 作为练习语言,但是似乎国内很少有高校开这种导论课。 但是 C、C++ 这种语言,不学个一两个月,连个像样的程序都写出来,这种才是适合开一门课。 先说一下学习 C 语言的目的,上面我说语言不是重点,这也包括 C 语言。 但是 C 语言特殊就特殊在它可能是唯一最适合用来学习一系列计算机基础课的工具和媒介。 比如操作系统,实验几乎都是用的纯 C 写的 lab; 又比如汇编,学习的时候可以和 C 语言对应起来,了解if、for、while、数组访问等对应汇编是怎么样的; 又比如学习计网,这里面有很多的网络协议,会有不同的 header 定义,这些 header 中很多都是按 bit 来划分字段的,用 C 语言的 union 和 struct 是最好操作这些字段的,Java 和 Python 等语言虽然也能表示,但是可控性会差很多,以前尝试过用 Python 去组装 IP 包头,非常的麻烦也不优雅。 并且 C 语言本身抽象层次非常低,语法也很简单,没什么语法糖,很贴近操作系统。 而其它很多解释型语言会存在虚拟机这一层,虚拟机对我们算是一个黑盒,不利于透过语言去理解计算机的一些行为。 所以我之前在《如何成为一个计算机知识体系完整的毕业生》中把 C 语言也列为计算机专业的基础,而且是程序员必学的知识。 二、C 语言的优点 C 语言已经走过了四十多年的历史,但是在今天,任然常年霸占 TIOBE 编程语言排行榜前三,甚至榜首,这足以说明它是一门经久不衰的语言。 在日新月异的计算机行业,一个历经四十多年任然流行的技术,才是需要我们去关注和学习的经典。 我在那篇文章中说 C 语言是最适合用来理解计算机系统底层机制的语言,那今天就详细说说,这些底层机制都有哪些: 内存 一名合格的程序员必须了解内存,学习 C 语言是了解内存布局最直接、有效的途径,大家可以看到之前讲解指针那篇文章--深入理解内存和指针,全部都是从内存、内存布局出发进行讲解。 堆栈 理解不同的内存分配和管理方式,一种编译器自动管理,一种是手动管理。 函数调用栈、返回值 理解函数调用的本质,即跳转指令,理解返回值是怎么返回的。 系统调用 比如理解文件描述符,知道文件、socket 这些都被抽象成了fd。 指针 指针也是其它语言中引用的基础,深入理解指针对于理解引用也有很大帮助。 就拿文件来说,在 C 语言 中经常会接触到 read、write 系统函数,清楚操作的打开文件对应的是文件描述符。 而文件描述符是有限的,所以你知道用完 fd 后要及时关闭。 甚至用到 socket 网络编程的时候会发现,socket 返回的也是 fd,居然网络数据也能通过 read、write 去读写。 深刻的体会到 Unix 哲学:一切皆文件。 而在 Java、Python、PHP 这些语言中,打开一个文件只需要调用 File.open 或是 open,然后就可以拿到一个对象,然后对这个对象去调用读写方法进行操作。 但这时候文件对于我们更像是一个资源,全部的细节都被对象屏蔽了,而老师说资源是有限的,所以用完了要及时释放。 而你也不知道如果不释放这些资源会有什么后果,只是听老师说用完的资源及时释放是个好习惯。 在这里,操作系统的文件系统、进程等很多实现机制就被 JVM、Python 虚拟机所隐藏了。 而和操作系统等密切相关的底层机制也只有通过学习 C 语言才能透彻地理解它们。 这里又有个矛盾,上面说的这些内容其实不单单是 C 语言课所教的,其中还包括《组成原理》、《汇编》、《操作系统》等。 所以就出现了很多同学说的,就算上了 C 语言课,上面这些很多原理也还是不知道呀。 当然,这些内容是需要在大二、大三上专业课逐渐补齐的,但是先学 C 语言给学习这些内容打下了一个基础,大一把内存和指针理解透彻就好了,这就是前置条件。 而如果大一不上 C 语言,那么后续需要用到 C 语言的时候,自学的难度会高于自学 Python、Java 等语言。 比如有些学校在操作系统课会引入一些国外的 Lab,诸如 MIT 6.828 xv6 那样的 mini os,需要学生动手去完成一些内存管理、多线程实现、文件系统等操作系统核心模块。 比如清华 OS 课程用的 ucore,哈工大 OS 课程用的 linux-0.11,这些都是纯 C 写的。 如果没 C 的基础,连实验都没法继续,而这些实验算是操作系统课程的精髓了。 总结: 所以这才是我认为大一先上 C 语言的核心原因: 一是语法简单,更加贴近计算机本质的一些东西,学 C 也不是简单的学语言本身,而是想透过 C 语言去理解一些如寄存器、内存、函数调用、跳转等东西。 二是为大二、大三阶段的专业课打下一个基础,当然很多同学说我不学 C 一样可以学操作系统、计网呀。当然,这些和 C 没必然关联,只是很多实验你确实不好继续做,除非你只打算看看概念,背背什么是进程、线程。有更多优美的文章浏览链接:625223082 现在这么多的编程语言,下期为你们带来985大学生最后是怎么选择的编程c语言的秘密。 985大学生也在学,学c语言到底有什么好,如此让我们疯狂 标签:bsp bbb 返回值 python 掌握 wrapper size default padding 原文地址:https://www.cnblogs.com/yeiw/p/14255828.html
下一篇:Java里Scanner 类
文章标题:985大学生也在学,学c语言到底有什么好,如此让我们疯狂
文章链接:http://soscw.com/index.php/essay/61492.html