作为非计算机专业的学生,觉得 C 语言远比其他语言易于上手,正常吗?

不错,是个程序员料子。

没错,C的确比诸如C++、Java、python之类语言简单。

因为它什么都没有:32个关键字9种控制语句,然后是加减乘除与或非之类直接从数学里借来的若干运算符。没了。

简洁明了,自解释性强,正交度高,一个个概念搞清楚了,那真是做什么都简单。

相比之下,其他语言往往会引入更多的概念;这些概念往往还做不到“正交”,关系复杂,规则层出不穷;经常还极不直观……

对于跟着课本/教材亦步亦趋的初学者来说,当然是概念简单清晰、逻辑关系直白、在达成基本数据结构/算法这个目标上不带任何逻辑包袱的C更简单,更容易入门。


请注意我加粗的“跟着课本/教材亦步亦趋的初学者”这个限定。

一旦脱离了这个限定,第一段的讨论就成了无的放矢了。

这是因为,一旦你真的需要写点什么实用的东西出来,你就不得不面对“现实的复杂性”。

比如说吧,最简单的,见过电脑的bios界面吗?如果让你用C写个类似的东西呢?

类似的,如果让你写个视频解码器音频播放器呢?

你立刻就会发现,你必须面对如下问题:

1、你必须懂硬件原理(显示器原理、显存/屏幕空间的映射关系、硬盘存储寻道原理、音频采样/插值原理等等;以及CPU寄存器、流水线、cache、总线、锁等等等等)。

2、你不得不使用第三方库——比如,为了写一个bios式的界面,最省事的办法是用ncurses库。

3、其他语言直接提供给你的东西,你将不得不全部重新实现一遍——更加的笨拙,更加的不正交——粗糙的完全无法使用。

C要求,这1、2、3三点你必须全能。

它的库往往更原始,缺乏抽象,经常需要你根据自己的实际情况随手补全;

它要求你对硬件了如指掌:每条指令下去,从CPU标志位到内存到总线到显卡声卡,所造成的一切直接间接后果,你必须如数家珍、并把程序执行时每个实体的每个瞬间都安排的明明白白——哪怕状态变化的时序出现问题,那都是无法接受的严重bug;

最后,你需要自己就能够为python之类语言实现/改良它的字典,这才可能在C里面造一个不能被编辑器/编译器直接支持的类似物、然后还要把它用到自己的项目里。

相比之下,其他语言不需要你了解1,它甚至禁止你过于了解硬件,从而避免你被硬件的复杂性所影响;

它们有丰富完善好用的2,它们的库从一开始就是针对傻瓜用户设计的,用错了它甚至能给你提示;

你只需学会它们的3的用法、并不需要自己懂这些“神秘语言元素”的实现:你压根不需要像用C时一样,自己绞尽脑汁用最少的指令实现这类语言提供的基本设施——越是基本的设施越是值得字斟句酌:用python你可以直接用“字典”;但如果玩C,你得知道“字典”就是C里面你要自己实现的“哈希表”;而且并不是课本上的“玩具代码”,而是实实在在工业强度的、最优化的、支持一切key-value类型的、高度泛化的哈希表。

可见,哪怕你对C对数据结构有那么一丁点最粗浅的了解,你都绝不会用“python有字典”来证明它的难、证明C的易用——恰恰相反,学C的目标之一,正是为python实现字典、实现“无需区分变量类型的变量”、帮助初学者“不知道指针照样能用内存,因为我在后台偷偷替他们做了嘿嘿哈哈……”

换句话说,题主完全不知道想用好C需要什么。

你所罗列的、其他语言“难”的那些方面,恰恰证明了你对用好C需要哪些基础知识一无所知。

照着书拿把扳手拧俩螺丝便以为“儿得矣”,弄辆车让你拧方向盘挂个档你都摇头怕怕……可是,你要知道,C的设计目标,可是用来设计、制造汽车的哦。

做不到随时随地手撸一个变速箱出来,怎么能叫“懂C”呢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值