外话:计算机

Warning

这篇文章实际上是已经废除的草稿,但是鉴于仓鼠特质发作,舍不得删,所以单独抽出来了。

不对文章质量和正确性做保证。

下面是一些关于编程、计算机、编程语言的简单引子。

引子 #

问题:零基础学C好还是python?

从入门到放弃的速度肯定是C比python快。

迅速学会一门语言捣鼓点东西出来,那python完胜。 C单纯看语法本身没多少东西,但是光学会语法除了做做数学运算,输出点内容,别的啥也干不了。要玩好了,得学习一大堆其他东西,什么计算机原理,数据结构,内存管理都得懂。

Python的库一大堆,语法简洁,不需要你对操作系统了解多深,各种教程很好找,而且凡是编程语言能搞的,他都能搞上一搞。

—— 知乎

C 语言确实难——对于从来没有接触过编程的人来说很难,对没有接触过计算机的人来说也很难。

想要学习 C 语言,应当先了解 C 语言是做什么用的,而想要理解 C 语言,就要先知道编程语言和计算机是什么。

编程语言与计算机 #

老实说,我想不出来如何不知道计算机和编程语言概念的初学者解释这两个概念是什么意思。

——计算机是电脑吗?编程语言是代码吗?

每当听到没有写过代码的人谈及这个话题的时候莫名浑身就会起鸡皮疙瘩,因为他们完全是在用天马行空的想象力去想象一个充满魔法和混乱的计算机世界。

抛开什么鸟理论和严谨定义,从理工科学生肯定都熟悉的小学数学开始讲。

问题:张阿姨和李阿姨合买了一筐苹果,连筐一共是20公斤.张阿姨从筐中取走10公斤,空筐重1公斤.问李阿姨买到苹果多少公斤?

——小学二年级数学题

买到苹果的重量是20-10-1=9公斤。再看看下面这题。

问题:菜园里有大白菜12890289052178590190棵,上午运走1285901578棵,下午运走210381290381棵,菜园里还有大白菜多少棵?

——小学不懂多少年级数学题

显然,菜园里的大白菜还有12890289052178590190-12859015781-210381290381=12890288828938284027棵

发现了吗?现实中的数学题多是以计算求解为基础,对于第一题,我们可以手算,可对于第二题,我们就难办了。

也许有人会问:「可以啊,怎么就不能手算了?」

那你就去算吧

当然理论可以手算出结果,但是这个结果准确吗?如果算错了,你怎么知道是验算错了而不是原来算错了呢?

对于这种不得不请出在课外时间中时常出现的超级好伙伴——计算器了。

明明是两个看起来一样的问题,一个可以让人类来解决,一个却不能,为什么?

原因在于,人类是有极限的,虽然加法是很简单的规则,简单到几句话就能描述(对位相加,逢十进一),但是人类计算慢吞吞不说,还会走神算错。人类的这种特点在小问题上不会体现,而当数字很长足够大的时候,这点就体现出来了。

古代数学发展有相当一部分离不开人类在研究怎么开炮,能计算小数点后几位决定了你是不是一位好炮兵。

——沃兹基·硕德

为了偷懒,人类发明了计算器(考试不给带的那玩意),计算器是算术天才,可以快速算出各种数学表达式。

今有鸡兔同笼,上有三十五头,下有九十四足,问鸡兔各几何?

——《孙子算经》

然后人类遇见了更复杂的问题,面对更复杂的问题和更长的数字,人类选择让计算器进化而不是期待人脑进化:

手捻?你已经是成熟的计算器了,应该自己能理解要算什么怎么算了。

人类做了以下步骤:

  1. 人类给计算器来了个大改,让计算机能够理解数字。

  2. 然后又试着将一切变成了数字(也就是二进制数字),各种数字什么小数整数有理数无理数复数实数虚数统统变成数字,当然,文字也变成了数字。

  3. 把问题的解法写成文字,再将文字翻译成数字,然后将数字给计算器,让计算器自己根据数字进行计算。

好了,现在你已经知道了计算机是什么了,虽然看起来好像什么都没说。

计算机就是上面说的升级后更厉害的计算器,能够根据人类给的解法自己算出问题的解。

编程语言就是人类写的解法,文字就是语言,但是人类还没办法把人类的语言翻译成二进制(你就当现在什么xx大模型还不存在),你的话是没法翻译成计算机能识别的话的,所以人类绕了个弯,设计了能够转换成数字的同时还能准确表达如何算出问题答案的「语言」——编程语言。

Note

有人肯定会跳出来说:“等等,如果计算机听不懂人话,那为什么我们能在屏幕上看到中文?你不是说它听不懂文字吗?”

别急,你换个角度想:你走进一家菜单全是你看不懂文字的餐馆,你怎么点菜?

最稳妥的办法就是——指着图片。你说什么其实无所谓,服务员看你指哪里就知道你要吃什么。

计算机也是一样。它不懂“你想说什么”,它只看“你指的是什么”。

它看到 1 就说“是”,看到 0 就说“否”,其他的——它不管也不懂。

就像人类的语言有英语、中文、日语、阿拉伯语等等,编程语言也有很多种。

C 语言就是这些语言中诞生较早的一种,也是相当出名的一种。

#

完全不能想象我竟然尝试挑战解释这个,太难了

听懂了吗?没有了解的第一遍听大概是听不懂

这不是理论科学,你得写代码,得多想,有经历才有可能会理解。

所以即便没有理解,也无妨,先写代码吧。