【LCTHW翻译】序言

【LCTHW翻译】简介

fenprace posted @ 2012年1月20日 21:45 in 编程 with tags c LCTHW , 3524 阅读

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给了你一颗红药丸(参见Red pill and blue pill ——译注),拉上了魔术表演的帷幕。C就是真相!

既然C如此危险,我们依然要用C呢?因为C能给你从混乱的抽象逻辑中解放出来的力量。

你将学到的

本书就是为了让你熟练掌握C,可以用C独立编程或读懂、修改别人的代码。本书最后从一本叫"K&R C"【即丹尼斯·里奇(Dennis Ritchie)和布莱恩·柯林汉(Brian Kernighan)所著《C程序设计语言》——译注)的书中挑出一些著名的代码检测你的学习水平,在那之前,你将会学到:

  1. C的基本语法和术语。
  2. 创建、编辑、链接文件。
  3. 找出Bug并防止Bug产生。
  4. 安全编程。
  5. 解读C代码。
  6. 写一些基础的Unix程序。

在最后一章之前,你将有足够的关于系统编程、库的知识,并能完成一些小项目了。

如何读本书

本书是写给有至少一门编程经验的程序员们的,如果你还不会编程,我推荐你去看LPTHW或LRTHW,则两本书是专为初学者写的,你可以先去看看他们,再回来看本书也不迟。

对那些已经有其他编程经验的人来说,本书乍看上去似乎有些怪。不像其他的书,一段接一段的说明,然后跟着一小点乱七八糟的代码,而是让你立刻打下这些代码,然后我再告诉你,你刚才做了什么。这样做更有效果,因为解释你已经做过的事要比没有做过的事简单得多。

正因为本书结构这样特殊,所以你在看书时必须遵守一些规矩:

  1. 自己打下代码,不要只是复制-粘贴!
  2. 打出全部代码,即使是注释。
  3. 运行程序,保证输出都与本书的相同。
  4. 改正Bug。
  5. 做做附加习题,如果有不会的也没关系。
  6. 在求助之前一定要确认你已经尽力了。

即使遵从这些规则,读完了本书,还是不会C,也要尽力尝试。因为尝试可以使你成为一名更好的程序员。

必备能力

我猜你可能是学习那些“垃圾”语言的程序员。可能是那些“能用”的、比如Python和Ruby这样的、能让你拥有严谨的思维的语言;或者是来自Lisp这样以为电脑是一个仙境的语言;亦或是Prolang这样,将整个电脑看成一个数据库,所有操作都只是在周边转转、查查、改改数据而已。甚至,你是那种用过IDE,记忆中充满了漏洞,在输入3个字符后按下CTRL+SPACE没有提示的情况下,甚至都不能完整的打完一个函数的程序员。

不管你是以上那种,这四项基本功是你必需掌握的:

读写能力
你可能确实是在用一个IDE,但我发现大多数程序员都是走马观花式的,根本没有理解代码的意思,他们只是大略看一下代码就以为自己懂了,其实不然。所以,但他们面对像C这样的语言时就泄气了。最简单的解决办法就是强迫自己慢下来,仔细的看看、写写。一开始你会觉得痛苦甚至懊恼,但多练练就习惯了。
注意细节
在这方面,没有人能做到完美,这也几乎是造成所有垃圾软件的原因。其它的语言都不用让你完全专注,但C却要求你聚精会神,因为机器是非常挑剔的。在C中没有“有点像”或是“差不多”,所以你得足够专注才行。三思而后行。先假设你的答案是错的,直到你能证明它完全正确为止。
发现差异
从别的语言来的程序员有一个问题:他们的思维模式已经被训练成了其他语言的,而不是C的。当你在对比你的代码和标准答案时,你的视线会直接跳过那写你认为不重要或不熟悉的部分。我给你的解决办法是:强迫自己观察自己的错误,如果你的代码跟标准答案不完全一样,那他就是错的。
规划和除错
我喜欢其他更简单的语言,因为我可以把我想法打出来,然后直接就能得出结果。这很方便我们实验自己的想法,但你注意到了没有?如果你不停的尝试同一种方法,企图把他搞定,结果你什么也搞不定。C是很难的,因为他要求你在编程之前先构思好。当然,你也可以试几次,但与其他语言相比,你对C得更认真。在开始编程之前,我会教你如何规划程序的关键部分,这也能使你成为一个更优秀的程序员。一点点计划就能使道路更加畅通。

通过不断的、棘手的、练习,可以是你成为一名更优秀的程序员。你不能对你的工作掉以轻心。C的优点在于简约,你完全可以自己推演一遍。对于学习者来说,这是一门非常棒的语言,他可以使你的编程技能“更高、更快、更强”。

许可

本书可以免费阅读,但在我完成修改之前,你不能分发或做任何修改。我得保证没有完成的部分不传出去,以免误人子弟。

gastlygem 说:
2012年1月30日 16:11

俺认为你翻译的相当不错。还是合作完成吧 :D

我开了个 repo,如果你感兴趣的话,我可以加你为协同工作者

https://gitorious.org/~gastlygem/learn-c-the-hard-way/lcthw-cn

civaget 说:
2024年1月11日 23:13

I tried to submit a comment previously, although it has not shown up. I believe your spam filter may possibly be broken? google doc dark mode

civaget 说:
2024年1月18日 02:59

opga's versatility welcomes all, providing relaxation through massages and passion through Kiss Room, creating a world of exploration for diverse tastes.


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter