能打败我的只有我自己。——青峰大辉 收藏本站
登陆 / 注册 搜索

阅读:4.6K   回复: 3

为什么 C 语言那么难学?

[复制链接]
空谷幽兰 踏破虚空 2019-9-6 14:22 |显示全部楼层

从前车马很慢,书信很远,一生只够爱一个人,但是可以纳很多妾啊!

精华达人 主题破百 以坛为家 论坛元老 五周年纪念
作者:赵岩 http://zhaoyan.website

前两天,有个学校要给高中生开一门编程的课,大家讨论用什么编程语言授课,大部分人推荐用JAVA, 一部分说用Python,但是几乎所有的人都说:C语言太难了!

作为《C语言点滴》的作者,《C语言新思维》译者,这种语言坑我一般都绕开的,因为无论我说什么,没私心也显得有私心。但是“C语言太难”这句话太扎心,搞得我有点伤心。
👊🌞🍧❎🦬‍
我决定站出来为C语言说两句公道话!首先我个人必须承认,大家认为的都没错,相比较另外两种语言,C语言确实是最难学的。但是C语言为什么难?我认为锅不能C语言一个人背!背后还有三个主要的原因,那就是:面对任务难,开发环境难,底层难

首先是面对任务难。我不认为用{}就比用缩进难!声明一个变量的类型就比不声明一个类型难!需要编译一遍就比直接运行难!就像你认为英语难,还分he, she;还有a, the。老外却不这么想。换位思考一下,下面这个牌匾也会让老外抓狂的。
👳‍👠✒🤔🙌
为什么 C 语言那么难学? 00.png

说到底,这种语法级别的难度比较其实没有任何意义,只是一个使用习惯,一个小程序python用10行,C语言可能用20行,就因为多敲了10行你就难受的不要不要的,我只能对你说:要身残志坚!

不同与JAVA和python,C语言面临的任务几乎都是要求实时,高速或者是嵌入的。例如医疗,军事,飞控,航天,金融等领域。
👨‍🎨‌🩲🧬😭👄
举个栗子,NASA大部分软件要基于三个不同的时钟系统,自转(公转)时间,CPU的晶振时间和原子钟时间。一秒要分成500份,基于2毫秒的基础进行操作同步;同时用全球的原子钟时间均值对所有时钟系统调整。在这种环境下,JAVA那种“大约一分钟以后”的虚拟机管理方式一定是不行的。


所以我在NASA工作所接触的软件,几乎都是C语言编写的。可想而之,这种软件的开发难度,当你阅读这种程序代码的时候,你说C语言太难了,这是否有点不公平?

👆🚂🌶🆎🦚‎其次是开发环境难。C语言一开始就和UNIX(LINUX)有不解之缘,它们是伴生的系统。所以要想发挥C语言的全部威力,最好的开发环境就是UNIX(LINUX)系统。但是问题来了,UNIX(LINUX)系统里的各种开发工具,每一个都不是省油的灯。

它们设计的最初目的就是效率,而不是易学性。再举个栗子,gcc的各种编译开关就很复杂了,make系统为了解决gcc的部分问题,自己随之带来了更大的问题。git目的就是帮你保存历史备份,但是你会发现你经常会串改历史,或者干脆迷失在历史中。就连最简单的一个编辑器VIM,头一个月内,你最多的使用体验就是“恨不得拽自己的头发把自己提溜起来。”

好吧,外面的世界太凶险!让我们回到Windows妈妈哪里。虽然Windows的大部分内核都是C语言写的,但是它对C语言的支持缺最差。Why?如果你用Window的编译器去编译C语言,你会发现变量必须要写到函数的开头。它是唯一一个只支持到C89标准的编译器。
👄🌡🍼❎🐻‍
Windows本身不想去抢这份实时,高速,嵌入的市场,老老实实做消费电子市场就好,这种市场要求开发容易,发布快。所以C#语言和后面的.Net平台才是它发展的重心。像玩LEGO那样的编程,你需要做的就是把一个个控件拽到窗口上,用鼠标来编程!所以还是算了吧,毕竟你也不想你在做飞机的时候,飞机上控制降落的电脑突然蓝屏了吧!

为什么 C 语言那么难学? BSODcover.jpg

所以如果你是一个C程序员,你唯一能做的就是在linux下使用哪些臭名昭彰的难学的工具。这笔账难到也要算到C语言的头上吗?

🧠🛑🧊™🐶‏


最后是底层难。这必须要要聊聊C语言两个最受诟病的特性,位操作和指针。这两个概念本身很简单。但是通过这两个概念,它把很多底层操作系统的知识和体系结构的知识都暴露了出来。指针指向地址后,马上引入了一大堆内存管理知识。

什么是堆?什么是栈?这个地址在内存的那个区域?这个区域可以修改吗?这个区域自动回收吗?

👨🦱‌👖💊🥱👌


指针指向函数后,又引入了一堆操作系统知识,什么是回调函数啊?什么是事件驱动啊?以及位操作后面的二进制,溢出,浮点数精度等等一系列的问题。我用手指指向了一本《相对论》,然后就有人跑过来对我说,你这个手指头太难了!

如果编程只是你的业余爱好,使用那种语言真的无所谓。大部分初学者面临的任务规模下,三种语言的开发难度都差不多。 就是打个招呼,英语的“hello”,中文的“你好”,或者是日语的‘牙买碟’,我实在看不出这有什么难度上的区别。

但是如果你立志要当一名高水准的程序员,C语言你是逃避不开的。或者编程序是你的饭碗,你也要认真考虑一下C语言。语言的易学性在就业上是一把双刃剑。如果一个公司招聘C程序员,你第一个反应就是他为什么不去招聘满大街的JAVA程序员?你面临的一定不是什么图书管理系统,也一定不是一个什么网站。想明白了这一点,就完全有理由要一个高价钱!👵‎🩲🪜😷👂

C语言很难,要逃避这种难,却很难!C语言很简单,要理解这种简单,却不简单。
上一篇
下一篇
帖子热度 4618 ℃

4T3T2T 「初入古黑」 2019-9-6 14:28 来自手机 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

1、我来公布答案,请看5
2、答案请看11
3、不要生气,请看15👮‍♂️‎👙📠🤖🦴
4、冷静,不要生气,请看13
5、首先请看2

6、不要生气,请看12
7、我只想告诉你,1会让你知道答案‏🩳💿🥲🤝
8、我想告诉你的是答案在14
9、请耐心的看4
10、这是我最后一次这样做了请看7
11、当我让你看6时,我希望你不要生气
12、抱歉,请看8
👀🚂🦀©🦉‌13、不要生气,请看10
14、我不知道怎麽说,但请看3
15、你一定十分生气,但请看9
圣殿骑士 「龙战于野」 2019-9-22 23:55 |显示全部楼层

拨开迷雾,你见到的又会是什么?

我才看到编程这扇大门啊,就被大佬推荐学c语言了,我一直以为这是最简单的语种,直到一通神奇的电话
仗剑天涯论坛大牛 2019-12-30 23:04 |显示全部楼层

今生相逢便是缘分,何苦去怨恨,何苦去仇视。

主题破百 赞助会员 金点子奖
蓝屏这个问题遇到几次,电脑睡眠后在使用,反反复复几次,就蓝屏了
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

快速回复 返回列表