因为C语言是最靠近硬件的编译语言,C语言没有过多的语法糖(你可以勉强认为取数组成员这种方括号的写法是指针运算然后取值的语法糖,包括结构体取成员的点运算符),使得他在大部分情况下几乎可以直接和最原始的汇编指令一一对应,尤其是X86这种CISC指令集。
例如jxx系列指令可以直接和if语句对应,jnz等指令可以直接和while循环语句对应,jcxz等指令可以直接和for循环,call和ret指令可以直接和函数调用语句以及返回语句对应。汇编的内存寻址可以直接和C语言的指针引用一一对应。
如果要了解更多,推荐阅读《CSAPP》这本教材,他就是完全按照C语言和汇编的对应关系让你了解计算机的工作原理以及学习汇编语言。我也很推荐每个CS专业的人先看看这本书以及《编码》。毕竟这本书在国外名校也是已经被使用了多年的大学教材。如果你真的能够认真把这本书读完,你应该就可以认识到C语言在CS专业的重要性了。
而像Python,Java本身就有解释器,而Golang这种虽然是静态语言,但是他又自带了运行时环境(可以支持GC),这些跨平台兼容的运行时环境的存在,使得他就和硬件和操作系统隔离的太远了。如果你只学了Python,Java而不会C,那你在后续学习操作系统原理,计算机组成原理,单片机等课程会非常吃力。尤其是单片机这门课,单片机的内存只有几百K,连C++的STL都不一定能存下,更别说别的语言笨重的运行时了。
而且C语言的struct和union在处理数据结构上可控性很强,当你深入学习了计算机之后,你会发现计算机是一个抽象层级非常深的黑盒子,而程序员为了保证自己的代码能够理解和方便debug,对于代码的可控性要求也非常高,因此就有矛盾,为了掌握可控性,就必须让这个黑盒子变得不那么“黑”,方法就是必须掌握每个底层的具体实现,数据的位置大小和端序,而不是隔着一个黑色的runtime(golang)或者virtual machine(jvm,.net framework)或者interpreter(python)盒子来编程。
例如在计算机网络这门课会学习很多协议栈中的数据包,这些数据包的位置,大小,每个字段的端序(Endianness)都要非常精确,否则会不符合协议栈的规范,因此只有C,Golang这种系统级开发语言提供的struct才能够这样做,Java和Python的对象可能会为了优化和内存对齐,改变里面每个字段的位置以及大小,虽然也可以通过各种magic code实现,但是非常麻烦不优雅,而且可控性差)
所以你可以看出来C语言是为了你后续几门计算机专业课做铺垫,如果你不会的话后面的课学起来就和坐火箭一样非常吃力。
计算机科学相对软件工程这门专业又更多的是学计算机底层的工作原理。那就更需要了解计算机最原始的工作方式。如果你对底层不感兴趣,只是想学一门编程语言然后开始写crud搬砖工作,那么你更适合去培训机构。
我说一句反常识的
因为c简单
大一学的c语言,最多也就解除20个函数,没有那么多语法糖,真正的所见即所得。
ab交换内容
c=a
a=b
b=c
只要你稍微用心一下就可以理解
(b,a)=(a,b)
你需要多理解一个原组的概念
很多人觉得指针难,但是对指针没有概念怎么理解计算机模型呢,之后的数据结构、操作系统、编译原理是不是不学了。
想要构建完善的编程思维,理解计算机模型。不用把精力过多的放在函数和语法糖上,还有比c更好的吗。
很多人喷谭浩强的c语言程序设计,我的书一点问题也没有,高校主要目的就不是让你学完之后可以用c做一个大型应用,只要你知道什么事if else while do 等等逻辑结构,能够用简单的预发结构完成复杂的需求(比如冒泡排序),就完成了教学目的。
计算机的基础课:
编译原理实现的编译器是用C语言实现的。
计算机网络对应的协议栈是用C语言实现的。
操作系统是用C语言实现的。
我也没办法啊!
我感觉C++用于入门是最合适的。第一,C语言没有stl这些,一上手确实是很有难度的;第二,C++相比于py的好处在于会对计算机底层有更多的了解。当然,我觉得大一上C语言课也并无不妥。
说到C++,我觉得并不是大学一上来教C++不好,而是教授的方法不对。个人认为按照下面的顺序是对初学者最友好的:
基础语法→stl→template→class→指针
原因如下:
①这个顺序是真正的由易入难,前期学起来跟py没什么区别。
②顺带对数据结构有初步的认识。
③如果是非计算机系的,我觉得指针也基本用不到了(很多语言都没有指针了),stl和class足以解决大部分问题,况且指针似乎是公认的难,就放在最后了,课时不够就不教了。
单独的C语言课真的没有必要,内容太少了,根本讲不了一学期。
还不如合并进计算机体系结构一类的课程里。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有