笨办法学C 导言:C的笛卡尔之梦

导言:C的笛卡尔之梦

原文:Introduction: The Cartesian Dream Of C

译者:飞龙

Whatever I have up till now accepted as most true and assured I have gotten either from the senses or through the senses. But from time to time I have found that the senses deceive, and it is prudent never to trust completely those who have deceived us even once.

勒内·笛卡尔,《第一哲学沉思录》

如果有一段引述用来描述C语言编程的话,那就是它了。对于大多数程序员,C是极其可怕而且邪恶的。他就像是恶魔、撒旦,或者一个使用指针的花言巧语和对机器的直接访问来破坏你生产力的骗子洛基。于是,一旦这位计算界的路西法将你缠住,他就会使用邪恶的“段错误”来毁掉你的世界,并且揭露出与你交易中的骗局而嘲笑你。

然而,C并不应由于这些现实而受到责备。你的电脑和控制它的操作系统才是真正的骗子,而不是朋友。它们通过密谋来向你隐藏它们的真实执行逻辑,使你永远都不真正知道背后发生了什么。C编程语言的失败之处只是向你提供接触背后真正工作原理的途径,并且告诉了你一些难以接受的事实。C会向你展示痛苦的真像(红色药丸),它将幕布拉开来向你展示一些神奇的原理。C即是真理。

既然C如此危险,为什么还要使用它?因为C给了你力量来穿越抽象的假象,并且将你从愚昧中解放出来。

你会学到什么

这本书的目的是让你足够熟悉C语言,并能够使用它编写自己的软件,或者修改其他人的代码。这本书的最后,我们会从一本叫做“K&R C”的名著中选取实际的代码,并且用你学过的知识来做代码审查。你需要学习下面这些东西来达到这一阶段:

  • C的基本语法和编写习惯。
  • 编译,make文件和链接。
  • 寻找和预防bug。
  • 防御性编程实践。
  • 使C的代码崩溃。
  • 编写基本的Unix系统软件。

截至最后一章,你将会有足够的工具来解决基本的系统软件、库和其它小项目。

如何阅读本书

这本书为那些已经掌握至少一门编程语言的人而设计。如果你还没有接触过编程,我推荐你先学习笨办法学Python,这本书适用于真正的新手并且适合作为第一本编程书。一旦你学会了Python,你可以返回来开始学习这本书。

对于那些已经学会编程的人,这本书的开头可能有些奇怪。它不像其它书一样,那些书中你会阅读一段段的文字然后编写一些代码。相反,这本书中我会让你立即开始编程,之后我会解释你做了什么。这样更有效果,因为你已经经历过的事情解释起来更加容易。

由于采用了这样的结构,下面是本书中你必须遵守的规则:

  • 手动输入所有代码。不要复制粘贴!
  • 正确地输入所有代码,也包括注释。
  • 运行代码并保证产生相同的输出。
  • 如果出现了bug则修正它。
  • 做附加题时,如果你做不出某道题,马上跳过。
  • 在寻求帮助之前首先试着自己弄懂。

如果你遵守了这些规则,完成了本书的每一件事,并且还不会编程C代码的话,你至少尝试过了。它并不适用于每个人,但是尝试的过程会让你成为一个更好的程序员。

核心能力

我假设你来自于一种弱者的语言。这些“易用的”语言之一是Python或者Ruby,它们带给了你草率的思维和半吊子的黑魔法。或者,你可能使用类似Lisp的语言,它假设计算机是纯函数式的奇幻大陆,带有一些为婴儿准备的充气墙。再或者你可能学过Prolog,于是你认为整个世界都是一个数据库,你可以从中寻找线索。甚至更糟糕的是,我假设你一直都在用IDE,所以你的大脑布满了内存漏洞,并且你每打三个字符都要按CTRL+空格来打出函数的整个名字。

无论你的背景如何,你都可能不擅长下面四个技能:

阅读和编写

如果你使用IDE这会尤其正确。但是总体上我发现程序员做了很多“略读”,并且在理解上存在问题。它们会略读需要详细理解的代码,并且觉得他们已经理解了但事实上没有。其它语言提供了可以让他们避免实际编写任何代码的工具,所以面对一种类似C的语言时,他们就玩完了。你需要知道每个人都有这个问题,并且你可以通过强迫自己慢下来并且仔细对待阅读和编写代码来改正它。一开始你可能感到痛苦和无聊,但是这样的次数多了它也就变得容易了。

专注细节

每个人都不擅长这方面,它也是劣质软件的罪魁祸首。其它语言让你不会集中注意力,但是C要求你集中全部注意力,因为它直接在机器上运行,并且机器比较挑剔。C中没有“相似的类型”或者“足够接近”,所以你需要注意,再三检查你的代码,并假设你写的任何代码都是错的,直到你能证明它是对的。

定位差异

其它语言程序员的一个关键问题就是他们的大脑被训练来指出那个语言的差异,而不是C。当你对比你的代码和我练习中的代码时,你的眼睛会跳过你认为不重要或者不熟悉的字符。我会给你一些策略来强制你观察你的错误,但是要记住如果你的代码并不完全像书中的代码,它就是错的。

规划和调试

我喜欢其它较简单的语言,因为我可以想怎么写就怎么写。我将已有的想法输入进解释器,然后可以立即看到结果。你可以把你的想法试验出来,但是要注意,如果你仍然打算“试验代码使其能够工作”,它就行不通了。C对于你来说稍困难,因为你需要规划好首先创建什么。的确,你也可以进行试验,但是比起其他语言,你必须在C中更早地严肃对待代码。我会教给你在编程之前规划程序核心部分的方法,这对于使你成为更好的程序员十分有帮助。即使一个很小的规划,都会使接下来的事情变得顺利。

学习C语言会使你变成更好的程序员,因为会强制你更早、更频繁地解决这些问题。你不会再草率地编写半吊子的代码,代码也会能够正常工作。C的优势是,它是一个简单的语言,你可以自己来弄清楚,这使得它成为用于学习机器,以及提升程序员核心技能的最佳语言。

C比其它语言都要难,而这是由于C并不对你隐藏细节,它们在其它语言中都试图并且未能被掩盖。

协议

原书在完稿之后可以自由分发,并且能在亚马逊上购买。该中译版本遵循CC BY-NC-SA 4.0协议,你可以在保留署名和出处的前提下以非商业目的自由转载。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容