《程序员养成记》第6集 C语言不是语言

如果C语言是一种语言,我只有选择放弃,因为我不善言辞,语文、英语都是弱项。幸运的是,C语言他不是语言。

#include <iostream>

int main() {
	int what = 0;

	std::cout << "请输入你的性别(男:0, 女: 1): ";
	std::cin >> what;

	if (what == 0) {
		std::cout << "你会很快乐,但是会掉头发" << std::endl;
	} else if (what == 1) {
		std::cout << "你会非常痛苦!!!" << std::endl;
	} else {
		std::cout << "请选择正确的性别!!" << std::endl;
	}

	return 0;
}
请输入你的性别(男:0,: 1): 0
你会很快乐,但是会掉头发

请输入你的性别(男:0,: 1): 1
你会非常痛苦!!!

01 那么C语言是什么?

我经过半年的摸索发现,他只是披着文科生表象的理科生,语言不一定就是文科生。

我记得第一次开始学习编程的时候,身边没有电脑,全靠死记硬背。每周有一次上机操作的机会,这对于编程来说是多大的困难。先把要实现的代码在小本本上写好,进行反复的推敲,一个10行代码的程序可能需要修改很多次。

因为上机课时间有限,每周只有不到90分钟的时间,基本啥都干不了时间就流失了。

记得第一次使用Turbo C写代码,就折腾这个编辑界面就是用去了一节课的时间,不像现在的IDE这么牛逼。

后来发现除了Turbo C居然还有一个相对傻瓜很多的开发工具,VC++ 6.0。当用过了Turbo C,第一次接触到VC++ 6.0的时候,简直就是如获至宝。可以使用鼠标操作,不像Turbo C那样只能通过键盘操作,那个时候连键盘都不熟悉的我,编程就像噩梦一般存在。

C语言是强类型+编译型的编程语言,所谓强类型是相对于弱类型而言的,举一个简单的例子:

// C语言代码定义一个苹果
int apple = 1;

// Python代码定义一个苹果
apple = 1

我们可以很容易发现,C语言定义的苹果前面有一个int标记,他表示一个整数类型,这样我们才可以给apple赋值为1。

再看Python的定义,没有类型,因为他不要求你必须指定类型,他可以根据你赋值的1自动推导出来。

这个例子只是强类型和弱类型编程语言的一个简单比较,其实还有更多不同的特性。

那么什么是编译型,这里也是有一个相对的概念,那便是解释型。

编译型:源代码->通过编译器转换->二进制文件->执行文件->得出执行结果
解释型:源代码->解释器解释并执行->得出执行结果

可以看出来解释型语言比编译型语言少了几步。

其实他们最终的结果都是一致的,对于CPU来说他都是只能识别最终的二进制的代码。

他们的区别我们用一个简单的生活中的例子来说明。

假设我们要去买房,现在大家可能都习惯了通过中介买房,主要是不熟悉这中间的各种手续,其实作为个人是可以直接进行交易的。

如果我们是个人对个人进行交易,我们需要跑各种相关部门办理一系列手续,完成交易。

我们找中介,我们只需要提供相关证件和钱,其他的事情就不用管了。

个人对个人,就要求我们对每一个环节熟悉,并自己动手实践。这里就相当于编译型语言。

找中介,就比较简单,最终的结果其实都是一样的。这里就相当于解释型语言,我们只需要提供源代码,交给解释器,就可以得到运行结果。

当我对编程有了一个基本概念后,我才发现编程语言和自然语言的区别。

其最大区别就是,自然语言是和人交流,编程语言是和计算机交流。

人是智慧体,可以通过语气、身体等非语言的形式来判断你的真正含义,但是计算机可不行,你必须准确的、无二义性的告诉她你的想法,不然她什么都干不了。你喊他往东,绝对不会往西。

表达的精准性如何保证?

通过语法约束,就说C语言通过编译器来约束,你如果写了一个不符合语法的代码,他肯定要报错,这个时候,你不解决语法错误,你的可执行程序是无法生成的。

你少一个标点符号,都是不被允许的,这就是C语言,一种极其严苛的编程语法约束导致很多开始学习C语言的同学直接放弃了。

这是他的劣势同时也是他的优势,因为既然有规则,那么肯定是有限的规则,而自然语言的变化极大,不同地方有不同的语言,相同语种,还有非常多的不同变种。

编程语言我们只要度过了开始熟悉语法的艰难期,后面就可以在有限的规则内游刃有余了。而其他编程语言的套路是类似的,而且全球通用。

门槛虽高,入门便有极大的好处,掌握这门技术走遍天下都不怕。


02 编程之外的往事

+高级生物的出现

人生总是要遇到几个傻子和聪明人,傻子开始给人的感觉总是精明的,聪明人开始给人的感觉总是土里土气的。

第一次上机,我记得是半年前,2006年3月。

“大家提供一下email”,一个稚嫩的男声突然在吵杂的机房过道上明晰起来。

抬头一看,只知道是本专业的人,不知道叫什么名字,虽然已经大学同学半年了,能叫出名字的仅限于同寝室的同学,以及几个感兴趣的人。

后来打听了一下才知道这个同学叫“X宝”,后面我们就喊他“小宝”,因为他的年龄是专业中最小的,据说家里有电脑,看上去比较“时尚”,这里的时尚不是指穿着,而是指“思想”,因为他知道email。

可能他比较时尚的原因,得到计算机老师的授权,向我们收集email。当时我们面面相觑,不知所谓,我们试图向小宝打听何谓“email”,但是由于不知所谓的人太多了,小宝忙不过来。最后我从同寝室的哥们那里知道了何谓“email”,但是对我来说还是像一个外星文明一样神秘。

农村人的尴尬局面暴露无遗,大部分来自农村的孩子来到大学,就仿佛是逛动物园一样,样样都是新生物。

最后在同学的帮助下,完成了email的注册,但是之后的大学期间几乎没有用过,主要原因是不知道怎么登录,也不知道有何用处。

第一次知道计算机除了可以QQ聊天之外,还有其他通信的工具,就如仿佛一下知道了,除了地球之外,还有月亮的存在。

当我得知本专业存在一些高级生物,他们很早就接触计算机,他们的见识早就不是地球和月亮,而是在银河系以及之外的空间上了,来自农村人的自卑感倍感强烈。既羡慕,更是嫉妒,同时也萌生了仰慕之情,超越是不可想象的,毕竟对计算机这个新世界我连大门都还没有看到。

这些高级生物的存在,对我最为重要的作用不是让我无地自容,我克服了自卑,勇敢的向高级生物们学习,后来发现直接请教那是不可能的,只能把他们当成远远的灯塔,不至于让自己迷失了方向。


无法超越的存在

后来小宝作为高级生物的光环逐渐在我的视野中消失殆尽,不到半年时间我便成为名副其实的新星高级生物,那些从未知到已知的过程,让我有了一丝优越感,同时来自于一些同学的认同,我开始有了一些膨胀。

同时我也发现一个我这辈子都可能无法超越的高级生物,只能无限的靠近。

一个叫“唐鹏”同学不知何时出现在我的视野里,已经记不得是听说,还是看见的。每次上机课,总可以看到一个人在那里默默的敲代码,当我路过的时候瞟了一眼,不是C语言。

不是C语言,我当时大大的吃了一惊,因为我目前仅仅知道C语言,还谈不上会,还只是开始学习语法这个初级阶段。

就仿佛是我还在爬,就像被刻画在二维纸上的视觉动态图画一般,别人已经可以站在这幅画前观看我们的幼稚行为了。

对于存在在这个世界上相同时间的我,这是何其的难堪和惊讶!!

后来打听到,这位“唐鹏”同学家里是开网吧的,从小就接触计算机,高中阶段还参加过计算机编程比赛,C语言对于他来说早就是认知范围的东西了,我居然还因为C语言学得好而沾沾自喜。

他已经在拓展他的视野,学习其他编程语言了。后来才知道他编写的代码是“Java 语言”,一个新的名字让我掉进了无限的深渊,一个遥远的银河系出现了。

如果小宝的出现是月亮,让我眼前一亮,那么唐鹏的出现好比是银河系,让我对计算机充满了各自想象,一宿一宿的失眠。

对于这种大牛级别的人,我只是能望而生畏,一种崇拜感油然而生。

于是我花了半年时间来克服这种心魔,农村人的自卑感和对现实不公的挫败感,加上不服输的倔强,让我处于一种打了鸡血又凉了,凉了又打鸡血的状态。

埋头苦干才是硬道理,在学习C语言的这半年,我不断淬炼技艺,不停的接活,反复操练,最后不负所望在本专业范围内成为新星人类,被人高看一眼。

在外人眼中我是在编程这件事上有天赋的,在我看来只是努力的程度决定了高度而已。

灯塔的重要性可见一斑。

人生总是会出现几个带领你进步的傻子和聪明人,今天的聪明人成为明天的傻子,今天的傻子成为明天的聪明人。

这里我突然想起还没有接触C语言前在QQ上遇见的wtea(WangTeacher),这是我人生第一个灯塔,灯塔等着我吧! 不图超越,只望​跟随。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

道知极限编程

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

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

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

打赏作者

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

抵扣说明:

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

余额充值