标签 C 下的文章

Hacker Culture摘要

最近看了Eric S. Raymond的被称为开源文化圣典的'Cathedral and Bazaar'(大教堂与市集)以及他的另外一篇文章'How To Become A Hacker',必须承认的是我不能够完全理解其中的内容,因为没有体验,或者说我还不够资格对Hacker Culture高谈阔论,所以这里仅作部分摘要,并说说自己第一时间的感受,望日后能温故知新。

在开始了解Hacker Culture之前我们应该知道'什么是Hacker'。Hacker不同于Cracker,前者指那些热衷于计算机技术,水平高超的电脑专家,他们把通过自己的实践而获得的知识广泛传播;而后者则尤指那些为了个人利益利用计算机技术搞非法破坏的人。像我们耳熟能详的Hacker先驱包括开源软件运动的发起人Richard M. Stallman、Unix之父Ken Thompson、C语言的发明人之一的Dennis Ritchie、Linux之父Linus Torvalds以及Eric S. Raymond等等。我相信这些人才是从事计算机行业的人们心目中真正的'Hero'。

'Cathedral and Bazaar'可谓是开源世界对Hacker Culture的一个阶段性的小结,当然Hacker Culture还在进化,其内容也在不断的丰富当中。下面是从'Cathedral and Bazaar'摘录的一些我觉得能够代表Hacker Culture的语句:

1.Every good work of software starts by scratching a developer's personal itch.
这里有一个生僻词itch,这个词有'发痒'、'渴望'的意思。这句可理解为“每个好的软件工作都开始于满足开发者个人的渴望或为开发者个人'抓痒'”。Unix的起缘可以很好地证明这一点。而现在的大多数商业软件的开发者则不能归为此类,原因不讲自明。

2. Good programmers know what to write. Great ones know what to rewrite (and reuse).
Linus之所以能独立完成一个操作系统内核,很大原因是因为他没有'从头开始',而是利用已有的优秀设计思想。

3. When you lose interest in a program, your last duty to it is to hand it off to a competent successor.
Hacker也要'能上能下'。^_^

4. Treating your users as co-developers is your least-hassle route to rapid code improvement and effective debugging.
把用户当作协作开发者。

5. Release Early, Release Often
这与4相辅相成,互利互惠。Linux已经展现给我们一个Best实践,其“早发布、常发布策略”的一个效果就是利用快速的传播反馈修订来使重复劳动达到最小。

6. Smart data structures and dumb code works a lot better than the other way around.
优秀的数据结构设计总是至关重要的,在平时的开发中这一点体会破深。Brooks曾幽默地说:"Show me your [code] and conceal your [data structures], and I shall continue to be mystified. Show me your [data structures], and I won’t usually need your [code]; it'll be obvious."

7. Often, the most striking and innovative solutions come from realizing that your concept of the problem was wrong.
当你认识到你对问题的理解是错误的,这时不要灰心,因为一个具有革新性的解决方案也许正摆在你的眼前,我想很多人都有过类似的经历,Me,too。

8. "Perfection (in design) is achieved not when there is nothing more to add, but rather when there is nothing more to take away."
是不是颠覆了你以前对好的设计的理解了呢?

9. To solve an interesting problem, start by finding a problem that is interesting to you.
趣之所在,力之所在。

10. Software is developed for peer recognition not for money.
至高无上的境界,不为'铜臭'打工。

这里再列出一条,这是在一位同行给Eric的回复中提到的一条:"杀掉一个项目最快的方法是在你什么都还没有之前就宣布它,我已经见的太多了,尤其是在Linux世界里",看到这一条相信很多曾组织或参与开源项目的人都会深刻的体会到,Me , too。

中国程序员在开源软件世界中的地位大家也都略知一二,我想这或多或少都与我们对Hacker Culture的理解有关。理解和认同'Hacker Culture'是你进入开源世界的第一步,正所谓思想的融入才是真正的融入。

差异学习

看了dreamhead的那篇“差异程序员”,又恰逢在今天dreamhead在一封邮件中谈到其继续深入“向下学习”的想法,心里突然有了本篇题目这样的一个话题。

“差异程序员”(http://dreamhead.blogbus.com/logs/2005/12/1676755.html)

最近自己也在“向下走”,这和dreamhead的想法和做法不谋而合。dreamhead在其blog和邮件中都谈了其在“向下走”过程中的体会,“差异程序员”一篇dreamhead也是在告诉大家其不满足于只做应用一层的程序员,这也同样是我的一些想法。

想法有了,那我们是如何做的呢?mail中dreamhead谈到了他下一步的学习目标和计划,在我的回复mail中我也谈了我将在linux内核方面和编译技术方面作些努力的初步想法。dreamhead也马上谈了他关于这两方面的看法,这里引用少许,目的在对比:
“编译器的前端相对来说都是简单的,技术基本都是现成的,而且有现成的工具供人使用,当然,为了学习,还是自己尝试写一遍比较好。后端的东西才是真正复杂的,不同的平台不同的OS都会有不同的要求,之后,还有优化的技术,复杂度直线上升。… … 如果想了解OS运作,Linux内核显然过于庞大了,那本《自己动手写操作系统》则更为简单。一些基础的东西是类似的,只要理解了那个小内核,理解Linux只是更好的去体会更好的设计而已,因为所有的知识已经都各就其位了,一旦架构形成,剩下的只是不断完善了。”

看到这样的回复,我马上意识到:虽然都是向下走,但是我和dreamhead的目的不同,形成的想法就有了些差异。

我之所以想啃下编译,原因起初有二:一是在前不久的工作中想采用编译中的技术来完成项目中一个模块的功能;二是填补大学时没有学懂编译的遗憾,就是想弄懂那些三元式、四元式,让自己更专业一些。上星期看了“dragon book[注1]”作者的一席话又为我学习编译增加了一枚筹码,其大致意思就是:大多数学习编译的人一生都可能没有机会去创造一门语言,那么我们为什么还学习编译呢?其中一个原因就是编译技术中某些原理可以适用于一般应用软件的设计。比如词法分析器中的字符串匹配技术可用于文本编辑器、信息获取系统或者模式识别程序中。

对于学习linux内核我有以下几点考虑:首先一直在用户层使用内核提供的系统调用,比如fork,在很多Unix编程书中会讲到调用fork后子进程与父进程的异同,这些几乎就是应用程序员必须牢记的东西,一直很讨厌强记,遂想刨根问底的去看看fork的一些实现,这样弄清了其来龙去脉就再无须强记了,而弄清了这些后反过来又会让你更好的使用这些系统调用;其次,想在用户层程序中借鉴内核的优秀设计思想,比如缓冲技术,在内核中有在应用层也有,应用层完全可以参考内核中的某些优秀设计来实现;最后,了解操作系统内核会让你对计算机的体系的理解有一个质的飞跃。即使是计算机本科毕业的人又有多少敢说自己完全理解了计算机呢。

dreamhead以了解OS运作为目的向我们推荐《自己动手写操作系统》一书自然没错,带着这样的目的来学习这本书效果肯定也不错;但是对于我上面所说的那些目的,这本书也仅能满足一小部分,该书可以作为整个学习过程中的一个参考资料。这就是由于学习目的不同带来的一些差异性的东西。

差异学习没有对错之分,也没有好坏之分,只是因目的不同而已罢了。目的不同,学习的关注点和着重点就会不同,这样即使学习同一样的技术效果也不同。另外学习不是孤立的,沿着学习的主线方向会有很多旁支,如学习linux内核,你将会了解到CPU体系结构、存储器管理和算法理论等多方面的知识。

最近看到某一电视台播放的央视版“笑傲江湖”,情节中提到华山剑宗与气宗之争,当时自己就考虑“为何两派不二者兼修以达到前所未有之境界呢”,在后来的令狐冲无心插柳却达到了这一境界,想必那些在两宗相争中冤死的华山前辈们看到这一结局都后悔之极了吧。(开个玩笑,其实从古自今大凡争斗之事多源自“权势之争”)。令狐冲成为了绝顶高手又让我想到了“差异程序员”,要想成为“程序界”的令狐冲又何尝不需要“上下”兼修呢?起码dreamhead已经为我们作出了表率。

[注1]
“dragon book” — 《Compilers: Principles, Techniques and Tools》by Aho, Sethi and Ullman

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats