认真是一种能力
Posted by Yurii under 一家之言
Tags: 写作感想, 认真
[21] Comments
本文由Yurii原创,转载请注明来源: 乱象,印迹本文链接 认真是一种能力正则表达式的书稿终于结束了(暂定名《正则导引》),关上电脑细细思考,写完这三十万字,最深刻的感受是什么?我的回答是:后悔。从2009年初我打算写这本书,到2011年年中正式写完,一共花费了两年多时间,期间虽然经历了许多变故,有些事情也无可避免,但其实不用花费这么长时间——最初是在周筠老师的鼓励下决定动笔,当时是有想法,没规划。之后在徐定翔编辑和卢鸫翔编辑的配合下,尝试写了几章,又遇到困难停住。多亏李笑来老师说"暂时解决不了的问题,先绕过去,接着写后来的部分",于是零零散散地继续写下去。到2010年末潘爱民老师对我说:这个状态可不行,这么随意地写,就算写出来,也不会是好书,不如不要写了。明知潘老师是在用激将法,我还是心甘情愿地上了套,为争一口气,日复一日地写,半年左右,终于完成。回头看这段时间,却感到一丝荒谬:其实真正"笔耕不辍"也只有半年的时间,之前两年在干什么呢,这两年里,我心理总惦念这这本书,因此放弃了太多其它,然而其实并没有真正做什么事情。况且,翻看日记,真正笔耕不辍的时间,其实并不到半年::3月12日,状态不好,早点休息…3月20日,要办的事情太多,又没有规划好,书稿明天再写…4月16日,做了好几张图,做到有排斥情绪,看电影…
这类情景比比皆是。套用《少有人走的路》中的分析方式,这类因果关系其实都经不起推敲。认真分析起来,状态不好时,专注做一些事情,是可以让自己状态慢慢好起来的;要办的事情太多,没有规划好,完全是因为"没有规划"而不是"意外太多";做图做到有排斥情绪,是因为把几张图集中在一天做,其实分几天完成并没有问题……虽然每次写日记发现自己浪费了时间,都提醒自己要从明天开始认真,但往往坚持不了几天,又因为各种理由松懈下来。我想来想去,原因就在于,我总以为"认真"是一种态度,从不认真到认真,只要端正态度就可以,然而认真其实是一种能力,如果你不具备,即便想施展,也未必施展得出来。关于"能力",我曾与一个朋友深入讨论过,结论是:只有当你能施展出来的时候,才真正具有这种能力,否则其实就是没有——你的思维很犀利,却没见真正解决过什么问题,其实就是思维不犀利;你的英语很好,却没有真正用英语学习过其它知识或与外国人交流过,其实英语就是不好;你理解能力很强,但不去真正学一点东西,其实就是没什么理解能力。这个道理,在书稿的写作上也是这样:我曾经信心满满地认为自己做事态度足够认真,所以有能力坚持写完这样一本书,即便有所懈怠,也可以迅速回到正轨;然而真相却是,依靠着各位师友的指点,并且在很多次想要放弃的边缘挣扎着坚持下来,才真正完成。所以,"认真"其实不是种态度,而是种能力;这种能力,自己其实还比较欠缺。后来认真读了点心理学,才明白惰性更类似某种本能,是"野火烧不尽"的,会从生活的各个角落顽固地冒出来,滋生繁衍,这或许是种本能,只能依靠日复一日地贯彻"认真"来扫除它;惰性侵入的区域越多,"认真"的能力就越弱,就越难做到"认真"。可惜的是,这个道理,大多数人未必明白,我(或许也可以说"我们")时常安慰自己说,某某事情不是不去做,也不是不认真去做,只是觉得没有必要罢了,实质是把能力问题错认作态度问题。在一两件事情上这样做或许无可厚非,长此以往的结果却是"认真"能力退化,惰性张扬。对我自己来说,日常生活中欠缺较真的细节,造成的恶果在需要"认真"写作时集中爆发——意志薄弱,时常找些借口自我放松;心神散漫,写一段又要看看邮件,上上twitter;缺乏规划,不能合理划分任务,照顾自己的情绪……所以才会在完稿时后悔不迭:我本可以早些完成的。另一方面,我也体会到,在值得认真的地方认真,培养"认真"这种能力,是可以辐射到其它许多方面,让自己受益的。比如为了确认Unicode编码的某个细节(其实这仅仅是书中的一个脚注),我认真阅读了Unicode编码的长篇文档,终于弄清了这个问题。这样做看似不值得,却在其它方面带来了意想不到的好处——比如,我再也不会厌烦为弄清细节而查证长篇文档了,在这之前却会因为厌烦而抵触。这种"厌烦",看似是态度问题,说到底还是能力问题,没有能力把认真贯彻下去(至少,依照自己现有的英语水平和理解能力,没有足够"认真"到克服厌烦心理)。平心而论,自己和许多人一样,希望过上"有意义的生活",可究竟什么是"有意义"呢?太过随意的生活,"意义"总是要打折扣的,真正有价值的"意义",总是是长期努力追求的结果。而认真的能力,就是这种长期努力追求的必要因素。Update:感谢豆瓣的朋友Clyde.L向我推荐了这篇文章,Gumption Traps and
Grumptionology,我也向大家推荐。老外的文章往往更讲究方法论,也更细致,他把Gumption
Trap分了三类,并给出了对应的解决办法,值得一读。
Author: 杨 贵福
哈哈 太爽啦
.
pics
连锁反应:你如何改变世界
连锁反应:你如何改变世界1. 白天的时候,通过关同学和刘同学约好,明天下午讨论班,关、王、黄、张、
牛、杨确定了明天的日程;连锁反应开始。2. 杨和王、关确定了明天讨论的时候交接东西;3. 杨和另一位王同学确定明天下午讨论班时间交接白板的钥匙,因此今天没有交接;4. 王确定明天上午和科研处宋同学见面,而不是下午;还有哪些日程安排按此调整?5. 晚,刘同学通知杨,讨论不能进行;6. 杨短信大家,讨论取消,大家回复;新的连锁反应开始。
无神论者随笔-我不尊重别人的宗教信仰 zz
◇◇新语丝(www.xys.org)(xys5.dxiong.com)(www.xinyusi.info)(xys2.dropin.org)◇◇ 无神论者随笔-我不尊重别人的宗教信仰 作者:oztiger 大多数人认为我们应该尊重别人的宗教信仰。常见的理由有两种: 一是神圣派,认为宗教信仰(自由)神圣不可侵犯所以要尊重; 二是容忍派,认为宗教信仰的内容未必正确,但有一定用处、有人需要,如
果直接去批评很不礼貌。 以下分别给予反驳。 神圣派通常都混淆了'尊重宗教信仰自由'和'尊重宗教信仰'这两个不同
的概念。我认为宗教多是迷信、歪理邪说,所以我不会尊重别人的宗教信仰,但
这不等于我不支持成年人信仰的自由和权利。恰恰相反,保证言论的自由,应该
用辩论而不是火刑柱解决思想的冲突,无神论者深知这一点的重要性。 对于容忍派,英文称为Accommodationism, Sam Harris给出了迄今为止最好
的反驳:容忍派对别人宗教信仰的尊敬往往是非常虚伪的,是居高临下的'我当
然能理解宗教信条有多荒谬,但是他们可能没有足够的能力跳出非理性...他们
可能需要宗教的安慰'。这正是我们对不懂事的孩子的态度:'算了怎么说他
(她)都不懂,搞不好大发脾气弄出事情不如由他去吧'。为什么不能对这些
Homo Sapiens同类的智力水平多些信心呢?如果把对方当做成年人,就应该开诚
布公地直接说出自己的真正看法。 撒谎不是尊重。 在'尊重别人的宗教信仰'这件事上还有两个比较少人注意到的地方: 一、尊重别人的宗教信仰这种习惯跟正确、神圣无关,其实完全是历史上政
治力量博弈后妥协的结果。因为不这样的话就会流血冲突,生灵涂炭。 现在对宗教信仰的尊重已到了荒谬的地步,只是人们已经习以为常所以不觉
得了。假如有人的政治观点是左派或右派、或者经济学上是市场自由派或者政府
干涉派,我们可以随便嘲笑攻击他们的观点;但是要是有人相信地球只有几千年
历史,同性恋违反自然,忽然间我们就得尊重了,就因为这是他们的宗教信仰。
这非常的扯淡。 二、事实上根本不存在尊重别人宗教信仰的人。当伊斯兰教徒移民到西方国
家时,真的有人尊重他们多妻制的宗教传统吗?圣经中充斥着种族歧视、种族屠
杀、性别歧视的指令,如果真有一字一句地完全遵从圣经的人,在任何国家他都
会被当成疯子,遑论尊重。所谓尊重只是在无关紧要的事情上做出一种大度的姿
态而已。 在不同的场合、看对象,我可能会有所保留,但本质上我不会尊重任何宗教
信仰。(XYS20110708)◇◇新语丝(www.xys.org)(xys5.dxiong.com)(www.xinyusi.info)(xys2.dropin.org)◇◇
逆行时间的 精神。。。病
逆行时间的 精神。。。病长春已经变成了一个大城市,或者说,农村一样的大城市。从这个城市的某个角落出发,2小时以后出现在另一个角落。虽然地名仍然是长春,但是从建筑风格到人们的表情,都判若两个不同的世界。最初,我先坐上出租车,准备奔轻轨站去的。司机不知道赶什么事那么着急,一路飙车,6块钱的路程,小于2.5公里,他骂了四五次娘,还把嘬起嘴唇,露出牙齿,做微笑状,嘴里冒出老猫"哧哧"的声音。一次,他大骂一声。我听到对面一辆轿车尖叫着停下来,我咬紧了牙关,准备承受一击。两个车头有一半正对着,但没有撞上。他大骂的时候,一只手正从眼睛上拿开。我想,前一秒钟,他可能还没有看到对面的那辆车。天太热了,我困得不能思考。天气预报说是25度,我想还是30度吧。如果我不是如此糊涂,当时就应该下车。又或者,当时两车可能已经相撞,但是我热疯了,所以自己正停在某个白被单下面,但仍浑然不觉地在这里给你讲故事。不管怎样,后来他要跟又一位司机掐架的时候,我果断下车付钱。我从车顶把钱递给他,生怕他抓住我的手把我从窗户里拽进去。到轻轨站还有距离,剩下的路,步行。我以为今天的历险到此结束了。轻轨站里上行的电动扶梯坏了一周多了,仍然没修好。我从楼梯爬上去,上面非常热,挤满了人。很多人穿着背心短裤。有的木然地望着来车的方向,有的半倚半靠着墙,他们都戴着耳机,身体按相同的节奏微微地抖动。有个小伙子给我让出点地方站着。一股热浪,我退后一步,看到他的耳机插头悬在胸前,上面没有任何设备。他注意到我看到,把插头放到了裤袋里,手也放进去,握拳,好象里面有个itouch的样子。他和人群一起抖动。本来几分钟一趟的车,20多分钟才来。很多人上了车,很多人下了车,站台上仍然满是人。我让过几班车,觉得坐上不挤的一辆车无望。发现对面的站台只有三两个人,零零地望着这边,像是在看戏。其中有一个人在练习倒着走,一边走一边拍打身体的各个部位,旁若无人地减"拍心……健康……拍肺……健康",声音在轻轨站里回荡。突然想到,应该坐反方向的车,到终点以后就有座了,然后再返回来。下了楼梯,看到另一面的上行自动扶梯正在倒转。我踩了踩踏板,它没有变成上行,反倒倒转得更快了。就像电影里,车轮越转越快,我们就会看到它缓慢地反转,电梯开始慢慢变成上行。但是我想起了北京地铁四号线,那是更大的城市发生的事。我迟疑,最后走了步梯。轻轨里没几个人。大城市的人流往往如此,都去上班,都下班,都买房子,都结婚。轻轨里开着空调,还是有些热,大家都大裤头超短裙,所以一个穿黑衣装的人特别显眼。他看我注视他,走过来。我低下眼睛,让开点地方。这么大的车厢,没几个人,他离我太近了。他掏出一块表,给我看。那是一块丹东机械表,表面的镀铬已经磨掉了一半,露出里面的黄色。我第一反应,骗子,对他摇摇头。他说,你看。然后拔出表侧面上弦的那根柱子,转了半圈。我知道,那是调时间用的,表针却没有跟着转动。我抬眼看看他,意思是:骗人还拿块坏表。他说,看外面。风驰电掣。外面的行道树变成了一团一块的绿色,间或闪过一片白色或红色,我想那是净月方向的某个校门或者教学楼。车轮撞击铁轨的咔嗒声响成了快板一样。随着他的指向,我伸头往前看,红色的交通灯赫然在前方。对面,一辆同样快得看不出来速度的轻轨车向我们而来。我又咬紧牙关,心里骂"又来了",手里拉紧吊环。车轮的咔嗒搅在一起,前一声没消失,后一声又赶来,像硬盘在急响。后来,越来越快,我只听到刺耳的鸣响。前面的那盏红灯越来越近,颜色也由红转黄,最后变成了绿色。多普勒频移。我们和相向而驶的另一辆车相互穿行而过。我睁大了眼睛,对面的车头和我的身体溶合,然后又分开。眼前的一片电容差点就看清型号,在那一瞬间变成一团迷雾。对方车里的乘客都如同轻烟一样,只有一个女孩,双手把一本书举在眼前,聚精会神地看着。她穿着砍袖的上衣,窗外的光映在裸露的手臂上,在肘部形成一个光亮的转拆。我叹道:伦勃朗曝光法!列车攸忽而过,我最后看到光透过她的头发,勾勒出轮廓,也让她看起来像是闪着桔黄色的光茫。我又叹:逆光。我没有时间拿出相机,一切就消失了。连同给看我看块表的人,一切仿佛没有发生。但是,轻轨报的前方到站告诉我,我已经换到了相反方向的车上。我左顾右盼,拿出KINDLE,一只手吊在吊环上荡着。当我从半睡里醒过来的时候,才知道自己又睡着了。我常这样,因为醒来才发现自己睡过。这一次醒来,除了刚刚睡过,我还发现了些别的。因为我隐约记得,当我困得开始点头的时候,周围的人有奇怪的反应。我点头。一个女孩准备掏出手机,拔开头发,耳朵已经准备好对准电话。我猛然抬头,清醒了一点,女孩把手机放进手袋。我点头。她又准备掏出手机,拔开头发,耳朵已经准备好对准电话。我猛然抬头,清醒了一点,她又把手机放进手袋。我点头,她掏手机。我抬头,她放回手机。当我点头,一个小伙子靠近她,当我抬头,他退回去。当我点头,那大叔说"宋美龄是蒋介石的",当我抬头,他说"宋庆龄才是孙中山的"。一遍又一遍。当我跟睡意斗争的时候,这个世界像钟表失去了锤,停止了运行。我醒过来那一刻,世界恢复正常。当我开始迷糊,世界的运行变慢,像一首半速播放的片子,连声音都变得飘忽不定。我悚然一惊,大家就又开始了正常的生活。我变成了世界的钟表的齿轮,当我运转,指针才开始动作。我偷偷拔慢时钟,慢慢地周围的人传来很久不洗澡的气味。我倒拔时钟,我又坐在出租车里,听那司机骂上四五遍地娘。我看到他和另一个司机撕扯在一起,血流了一地。我看到半个车头对头另半个车头,我不由得又咬紧牙关。我看到自己又从家里出发,说:这么热的天呐。我看到自己昨晚合上书,叹人生苦短。我看到自己第一次走入大学,迷了路。我看到自己离开小学,心想自己终于长大了。我看到5岁的自己在山上乱跑,终于找到家,妈在做饭,哥在玩刀狼。我看到我哭得很凶却完全没有能力表达,我看到更久远的过去。我多想重温那些时刻。于是我调整时间,却再也找不到刚刚看过的那些时刻。它们从时间的洪流中消失了,像童年屋檐下的冰溜,它存在,当你感受到它,它就会永远消失。我甚至无法回忆到那些时刻的存在。是的,我像一个老人,记得有那么多我所珍视的,但是仔细回忆的时候,却一件也想不起来。我开始沿时间顺行逆行,不停地搜索、重复经历今天。凡是我经历过的,就如同纸上的笔迹被柔软的橡皮抹去,不留一点痕迹。于是今天,越来越成为空白。我只敢回忆,尽可能清晰地回忆,然后杀到那一刻。没有,我没有找到给我看丹东表的那个人。他,以及承载他的那个时刻,都消失了,如同从未存在过。有一次,我仿佛看到了窗前举着书的那个女孩的眼睛。她悲伤地注视着我,或者虚空。渐渐地,我的记忆也模糊,关于那个人的印象越来越少。我知道,这是我回溯的每一次都抹去关于他的记忆的一部分。我终于疲惫地坐下来。如果此刻我不记录下这一切,就会失去更多。也许,你,想在时间中逆行?那么,人生中的哪一幕,你想重温一次?如此清晰,如同亲历。不过,那一幕就会像你的手轻触屋檐下的冰,当你感受到它,它就会永远消失。想好那一幕了么?那么,请你单击计算机右下角的小托盘,把时间调整到那一刻。请,对那一说 再见。生活因它永远也不是过去的样子。
pics
如何成为一个优秀的程序员--致亚嵌就业班的报名者和新学员 zz
如何成为一个优秀的程序员--致亚嵌就业班的报名者和新学员 我们的老师每天都要应对报名者和学员提出的很多同样的问题,以下是这类问题的典型:嵌入式行业(或者IT业)有没有前途?我听说编程编到三十五岁就没人要了一定要转行找出路是吗?做驱动开发和做应用开发哪个更有前途?我一开始看什么书都看不懂,怎么才能理出一个学习顺序?诸如此类。这使我迫切地感觉到,应该总结这样一份非具体技术问题的FAQ了。本文仅代表我个人观点,有问题欢迎mailto:
songjinshan AT akaedu DOT org。在看这份FAQ之前,你必须先读完ESR的<如何成为一名黑客>(本文末尾附有中译版),该文所讲过的道理我不再重复。该文用很大的篇幅讲什么是黑客文化,虽然态度和信仰的确是成功的最关键因素,但是你肯定会想,做不做黑客跟我没关系,我只是想学个一技之长,找个好工作而已,对吧?那么肯定更希望获得一些具体的可操作的指导。1、各种软件技术之间是怎样的关系?我把软件技术分为三个层次:问题域:计算机图形学、音视频编码、信息安全、模式识别、信息检索、自然语言分析、人工智能、科学计算等
系统集成:C++和Java等面向对象语言、Python等解释型语言、LISP等函数式编程语言、GUI、中间件、编译器与解释器、虚拟机、数据库、网络服务、并行计算、集群、Peer2Peer、系统管理等
系统功能:硬件描述语言、计算机体系结构与编程模型、指令集与汇编语言、C语言、内核、文件系统、设备驱动、网络协议、POSIX等计算机最终是做什么用的呢?最终是通过问题域的各种技术为用户解决问题的,这些技术都包含很高深的算法,然而它们必须在一个平台上运行,它们需要利用平台提供的各种基础设施,比如计算能力、I/O能力和网络互联能力。系统功能和系统集成层就是用来实现这个平台的。系统功能层实现计算、I/O和网络的基本功能,系统集成层对这些基本功能做一些抽象和包装,提供更方便灵活的接口。2、为什么要学习嵌入式技术?在亚嵌的学习期间,你将详细了解系统功能层的各部分是如何工作的,也会在面向对象编程、GUI、数据库、网络服务等系统集成层的技术方向进行探索。嵌入式系统可说是麻雀虽小五脏俱全,虽然没有PC和服务器那么复杂,但计算机系统的各种组成一样也不缺。因此,以嵌入式系统作为切入点开始学习软件技术是非常好的选择,避开不必要的复杂性,把握计算机系统最根本的概念和技术要点。打下扎实的基础之后,你的职业发展则完全不必局限于嵌入式领域,即使你日后做PC或服务器开发,在亚嵌所学的知识和技能同样使你终生受益。正如疱丁解牛,心中有全牛,就能游刃有余。另一方面,你一定见到各大网站都有大量的宣传,说现在嵌入式行业前景空前的好,嵌入式人才紧缺,有几百万职位空缺等等。这些说法也是对的,但我们需要更深入地理解这说明了什么问题。刚才我们说,嵌入式系统也是一个完整的计算机系统,和PC或服务器没有本质的区别,事实上,嵌入式、PC和服务器的界限已经越来越模糊了。以前的嵌入式就是单片机,只能做简单的运算处理,现在的ARM处理器性能比从前的奔腾还强,打游戏、看电影都没问题,谁能说它不是PC呢?另外有些专用的嵌入式系统已经在充当服务器的功能了,而集群技术更是可以使许多廉价的处理器合在一起发挥大型服务器的作用。由于嵌入式越来越多地应用到电器、汽车和各种设施上,无处不在,并且与
PC、服务器呈融合的趋势,所以嵌入式行业前景空前的好。那么,为什么说嵌入式人才紧缺呢?其实,学嵌入式系统就是学计算机系统,本质上并没有什么特殊的只有嵌入式系统才有的技术。说嵌入式人才紧缺,是因为真正懂计算机的人才紧缺。现在很多学校的所谓"软件学院"培养的软件人才都是一叶障目不见泰山的:只懂J2EE和.NET,没学过C和汇编;只会调库函数sort(),而对各种排序算法一无所知;设计模式、软件工程讲得头头是道,却不知道好的软件还是要靠牛人靠智商来做的。培养人像蒸包子一样一屉一屉地出,靠软件工程搭一条生产线然后让熟练工人站在生产线上拧螺丝,幻想着这样就能生产出好的软件,那是把软件工程和程序员的作用本末倒置了。现在嵌入式开发对程序员的素质要求更高了,以上这类"软件人才"不能胜任了,因此说嵌入式人才紧缺。亚嵌的就业班虽然只有几个月,但培养目标是有完整的计算机系统概念的软件人才,而不是只会拧螺丝的软件工人,这正得益于我们始终坚持做嵌入式培训而不是
Java或.NET培训。3、有人说软件技术变化太快,现在学的东西过两年就要完全淘汰,是吗?你知道这话是什么人说的吗?必然是已经被淘汰的人说的。比如Delphi、BCB、PB这些开发工具和语言,都曾经很是风光了一阵,但现在已经完全被Java和.NET取代了。那么Java和.NET会不会被取代呢,也许在相当长的时间内还不会,但是我看好Python。这些被淘汰的程序员有一些共同的特点:只会用鼠标拖拽控件离开IDE就不知道如何工作,学点儿花拳绣腿的功夫就想吃一辈子,对学习新技术不感兴趣,做一天和尚撞一天钟。现在请回头看看FAQ1,在整个软件技术领域,这些变化快的技术其实只占了很小的一块,却成了这些人的全部看家本领,这样的人能不被淘汰吗?与这些流行的开发工具和语言相反,很多技术和思想是很少变化的。比如,POSIX和SUS标准规定了一套系统函数接口和基本命令的语义,只有实现了这些才可以称作UNIX,因此今天的Linux、Solaris跟20多年前的UNIX在系统功能层上是基本一致的。而指导计算机科学发展的数学理论,甚至是老祖宗们在计算机还没诞生的年代就替我们想好的:布尔代数发表于19世纪,直到一个世纪后发明了计算机和数字电路才有了用武之地;数论在17世纪就出现了,一直都被数学家们当成一套好玩的理论,但只是好玩而已,直到计算机密码学诞生后才发现它的实际用处。各种流行的开发工具和高级语言虽然变化很快,但是底层的编程语言却非常稳定,各种操作系统的内核都是用C语言写的,以前是这样,以后也不会改变。另一方面,各种编程语言的设计思想也是非常稳定的。其实世界上只有两种编程语言,一种是C,一种是LISP,前者是imperative的,是对计算机模型的抽象,后者是functional的,是对数学函数模型的抽象。面向对象是一种重要的软件工程思想,却算不上一种新的语言模型,应该归在C的一类。属于同一类的各种语言其实都大同小异,一个精通
C++的人学习Java需要多长时间?熟悉语法一个星期,熟悉类库三个星期,一个月足矣,以往的经验都可以套到新的编程语言上。然而要想习得深厚的算法功底、逻辑思维和抽象思维修养,能够真正说清楚"系统"是什么,如何分析和设计"系统",需要多长时间?恐怕要数十年。4、C和Java哪种语言更好?计算机科学与编程语言无关,甚至与计算机本身也没太大关系,它研究的对象并不是计算机,而是人分析问题解决问题的方法论。程序写出来最主要不是为了给计算机执行的,而是为了给人看的,使用编程语言和使用自然语言一样是为了表达和交流,只不过程序还可以顺便给计算机执行而已。以上这些话并不是我说的,而是一位著名的计算机科学家说的。所以,在编程语言的层面上争论是没有意义的。很多初学者错误地认为掌握了编程语言就等于学会了计算机,一种编程语言都还没有掌握好,更没有上升到方法论的层面,只有这种无知的人才会去争论哪种语言好的问题。掌握编程语言远远不等于学会了计算机,而只是最开始的一步,最简单的一步,到了工作中,用到什么语言就去学什么语言,什么语言过时了就丢掉,编程语言不需要积累因为它太简单了,真正需要积累的是方法论。很多人喜欢参与到这类争论之中,毫无例外,每个人都在为自己熟练掌握的编程语言辩护,就是"我会的语言最好,我不会的语言都不好",其实这些人真正想说的是
"我会的语言最好是千秋万代,我就不必学新的语言,不必适应新的变化了",概括起来说就是一个字,懒。真正的高手都是会很多编程语言的,国外有些做技术咨询的,每年都要学好几门新的编程语言,这样才能应对市场的变化。不断丢掉旧的编程语言学习新的,看起来好像完全是白费力气,没有积累,其实,每种编程语言的设计都有独到之处,体现了每种语言的精髓,在融汇百家之后积累下来的正是方法论。争论哪种语言能做的事情更多、功能更强是没有意义的。从理论上说,任何一种符合图灵机模型的编程语言,加上适当的I/O扩展都可以做任何事情,用shell脚本也可以写出很像样的游戏来。只不过各种语言的设计目标不同,表达能力不同,做不同的事情所需的代码量不同而已。另外一种错误认识是:哪种语言的市场最大,开发人员最多,哪种语言就最好。单从这种意义上说,Java的确比C更好,所以往届有学员问我们为什么只教C语言。请你注意,操作系统内核是用C写的,各种底层的应用程序包括Java虚拟机也是用C写的。如果你想学Java,在亚嵌的学习完成后你将有能力分析
Java虚拟机的实现,站在计算机系统的高度来学Java才会使你成为真正的Java高手。如果你只想速成,想早点学成一门技术去做拧螺丝的工作,那么亚嵌不适合你。在FAQ3里说过,世界上有C和LISP两种编程语言,你现在学了C,以后学了C++、Java、.NET等等,也仍然只认识了半个世界。LISP和Haskell构成了另外半个世界,现在很常见的Python和JavaScript等解释型语言也借用了functional
programming的思想。如果你只管闷着头写代码,而不去广泛涉猎,那么你将错过很多精彩。5、我听说编程编到三十五岁就没人要了一定要转行找出路是吗?这个观点虽然很流行,但根本不值一驳。现在三十五岁转行的那些人,都具有前面所说的那些特征,对学习新技术不感兴趣,对探索计算机的本质不感兴趣,得过且过,下了班就是打游戏、看电视,总之就是懒。如果是开出租、摆摊,勤快人懒人都有饭吃,而IT这一行对懒人是非常无情的,懒人就不该入IT这一行,不从自身找原因,却到处散布这种言论,怪社会不好,打击新人的信心,着实可恨。另外一种情况,编程编到三十五岁,进入公司的管理层,或者自己创业,这都是很勤快的人,如果他们把这种勤快用在技术上肯定也可以做得更好,所以也无法证明编程编到三十五岁会因为没有出路而转行。编程不是个体力活,需要高强度的思考和智力投入,分析能力、思考能力都需要时间积累起来,所以并不是越年轻干得越好。相反,我认为三十岁以前写的代码都是垃圾,三十岁以后才能写出像样的程序来。如果希望一辈子走技术的道路而不会被迫转行,就要不断地把自己的工作性质从"体力活"变成"脑力活"。什么叫"不断地"变呢?这里的"体力活"并不是指种地、盖房子这种劳动,而是指简单重复地编写代码,这时你会感觉,派给你的工作都能凭以往的经验轻松应付了,但是千万不要满足于现状,就像温水煮青蛙一样,这是危险的处境!要摆脱这种处境就需要学习、思考、提高,让公司派给你更有挑战性的工作,在工作中应用新学到的知识和技术就是"脑力活"了,但是用得久了又会变成简单重复的"体力活",这时就需要再学习、再提高,所以叫做"不断地"把自己的工作性质从"体力活"变成"
脑力活"。如果有一天你发现,自己长期陷于简单重复的劳动之中,并且业余时间非常少,无法学习提高,这说明公司不会用人,你就该考虑跳糟了。从另外一个角度来说,如果希望一辈子走技术的道路,就要有自己的核心竞争力,这个核心竞争力决不是凭以往的经验能够做某些工作的能力,而是学习能力、思考能力和解决有挑战性的新问题的潜力。在IT这一行,凭借以往的经验干重复的活是干不长久的,原因很简单,一个问题不会被解决两次,当你发现你的经验能够解决一类问题时,别人早把解决这一类问题的套路编写成framework,新上手的人即使不具备你的这些经验也可以调用framework中的类和函数来解决问题,然后在这个framework的基础上积累新的经验解决新的问题。正因为如此,全世界开发人员的经验才会积累起来,促使软件技术发展得如此迅速。这并不是说经验完全没有用,最关键的,学习和思考也是建立在以往经验的基础之上的。另一方面,现有的framework并不一定是某方面开发经验的完美整合,也需要不断发展,用新的办法重新解决老问题,以Web开发为例,从早期的ASP、PHP到后来的.NET、J2EE,到现在的Ruby
on Rails、Django等等,这些framework解决的是同一问题,就是如何快速有效地开发Web应用,这方面的经验被不断重新整合,推陈出新。总结一下,什么才是核心竞争力呢?应该是在经验的基础上学习新技术、解决新问题的能力。6、做驱动开发还是做应用开发更有前途?意思就是说,"你告诉我哪个更有前途,我就好好学哪个,另外一个就不用学了"。问这种问题的学员往往会同时问另外一些问题:我以后就想做驱动开发,你教我这些应用开发的技术有什么用?C++用得多吗?学了有什么用?我以后不想做GUI,你教我Qt有什么用?学习最忌讳的就是"有用的就学,没有用的就不学"这种功利的态度。两个问题:第一,在你还没学进去、还不了解这种技术时,要如何判断这种技术学了有没有用?只能是根据道听途说,看各种论坛上都怎么说的,岂不知论坛上参与这种讨论的100%都是菜鸟,有的水平还不如你。第二,就算你学的技术没有用上,有什么损失吗?从亚嵌毕业的学员从事各种各样的开发工作,有做驱动的,有做系统编程的,有做GUI的,有做Web开发的,只要确定了做一类工作,就不可能把在亚嵌四个月学的知识都用上,但至少也用得上3/4的知识,假设剩下的1/4你一辈子也没机会用上了,那也就损失你一个月的学习时间而已,相比于你的收获,这算是很大的损失吗?请注意,上面的假设是不成立的,没用上的那1/4也只是暂时没用上而已,程序员要换工作或者换项目是很常见的,任何人都不可能只涉及一类开发工作,只要有扎实的基础、完备的知识体系,任何工作都能轻松上手。扎实的基础,完备的知识体系,我们在安排就业班课程体系的时候,正是以这两点为依据的。有的课程内容很少有学员在以后工作中会用到,但是缺了这一环就不成为一个完备的知识体系,例如MMU和Cache,那这种课该不该上呢?毫无疑问该上。有的课程培养一种基本的编程思想,例如通过C++来讲面向对象编程,通过Qt来讲面向对象、事件驱动和状态机编程,这些编程思想是程序员必备的基本素质,而C++和Qt可能有些学员以后工作用不到,那这种课该不该上呢?毫无疑问该上。至于还有些人争论说C++不如Java用得多,Qt不如GTK用得多,请翻回去看FAQ4,这种争论是无意义的,有工夫争论谁优谁劣,不如把两种都学了,会更有收获。回到做驱动开发还是做应用开发更有前途的问题。我只能说,做好了都有前途,做不好都没有前途,只会做一样而完全不懂另一样是最没前途的。不要以为内核开发者就不写应用程序,Linus写了一个源代码管理系统git来维护内核,因为觉得现有的源代码管理系统都不好用。牛人都是这样,需要什么就写什么,才不管是kernel
space还是user space。同样,做应用开发如果不懂内核,也没有办法很好地利用内核提供的服务写出性能最优的程序。做内核难,因为调试难,要跟踪大量的并发线程,因为入门难,要写一个hello
world都需要学很多知识。做应用也难,回头去看FAQ1,计算机科学从理论到实践大部分都在上面两层做文章。所以不存在哪个更难哪个更有前途的问题,任何关于哪个更难的讨论都是too
naive的。7、我一开始看什么书都看不懂,怎么才能理出一个学习顺序?以前有个学员在学C语言时说,"C语言很多地方都很奇怪,都得用内核的知识去解释,可是你又不先教我内核,我没法学C语言。我只好自己看操作系统的书,看内核代码,可是看不懂。"当然看不懂了,内核代码都是用C写的,如果不学内核就没法学C语言,那不学C语言又怎么可能看懂内核?看来这是一个鸡生蛋还是蛋生鸡的问题。懒真的是人的本性,就连学习的过程都希望是一条路顺利地走下去,不用动脑就能学会的:身后走过的路都是"已知",每走一步就把眼前新的"未知"变成"已知",如此一路走来,把所有的"未知"都变成"已知"就算学成了。可惜,知识不是一条路,而是一个圈,你从任何一个地方跳进这个圈开始走,身后都是"未知",眼前也都是"未知"。有的人就是不能容忍自己的身后是"未知":看一本书,一个新的概念A是用我不了解的概念B、C来解释的,我连B、C都不懂怎么学A?没法学了!不是人家书写得不好,而是没有任何办法能把一个圈扯成一条直线的。学习的过程本质上就是一个循环往复的过程,唯一的办法就是"存疑":在本子上记着,有B、C这样两个概念是我暂时不理解的,然后就不再去想这回事,而是相信自己已经理解了B、C,基于自己的理解和假设去学习A,由A再去理解X、Y,这样学下去,走完一圈之后再回来,自然就明白当初对B、C的假设正确不正确了,理解了这两个概念,就从本子上划掉,这时需要再走一圈,把原来的一些错误认识纠正过来。所以,任何书都要至少看两遍,第二遍看的时候你会对很多概念有新的认识,因为你看过这个概念后面的章节,在此基础上产生了新的认识。古人早就明白这个道理,所以提出了"温故而知新"。亚嵌的课程体系经过多年教学实践的锤炼,已经很好地理顺了知识之间的关系,使你从最佳的位置跳进这个圈开始学习,所谓"最佳位置"是指,在你初学的时候需要容忍的"未知"尽可能少,需要做的假设尽可能少,但要想消除所有的"未知"是不可能的,例如没有学内核就要学C语言。根据你以往的经验和一些运气因素,你对内核的一些假设可能正确也可能错误,但这并不影响你学C语言,对内核的一些错误假设可能会导致在学C语言的过程中有些误解,但没关系,只要跟着我们的课程体系一步一步走下来,这些误解和错误的假设最终都会纠正过来。8、有哪些好书可以推荐一下吗?能问出这个问题的都是聪明的学员。看书学习是入门过程中非常重要的一环,如果用一本烂书入门,浪费时间还是小事,如果被误导了就麻烦了,如果形成的错误认识不能及时纠正,变得根深蒂固了就更麻烦了。所以,看书一定要有"品牌意识",在决定看书学习一门技术时先问问这一领域最权威的书是哪本,这里列举一些Bible级别的书:The C Programming Language, 2nd Edition
C++ Primer, 4th EditionStructure and Interpretation of Computer Programs, 2nd Edition
Introduction to Algorithms, 2nd Edition
Compilers: Principles, Techniques, and Tools, 2nd EditionAdvanced Programming in the UNIX Environment, 2nd Edition
TCP/IP Illustrated, Volume 1: The Protocols
UNIX Network Programming Volume 1, 3rd Edition: The Sockets Networking APIUnderstanding the Linux Kernel, 3rd Edition
Linux Device Drivers, 3rd Edition在学习过程中,眼界一定要开阔,不要学到一点东西就沾沾自喜,坐井观天,以为这就是技术的全部。要多和别人交流,多了解别人在看什么书、别人对技术的认识是怎样的。书是看不完的,活到老学到老,对于程序员来说尤其如此。9、如何处理打游戏和学习的关系?ESR 的文章中也说过,黑客们都有一些特别的业余爱好,并且往往是非理性思维的爱好,大概是需要换换脑子吧。典型的例子是因滑翔机事故去世的Stevens,他写了FAQ8所推荐的Bible当中的三本。爱打游戏的优秀程序员肯定大有人在,有一些还成了优秀的游戏开发人员。但是我认为,要想成为优秀的程序员,必须有两点基本素质,一是对编程非常感兴趣,二是对所有别的事情都不感兴趣,或者都不如对编程感兴趣。有人说,人的一天有24小时,8小时休息,8小时上班,另外的8小时在干什么就决定了你以后有多大发展。一有时间就看书学习,这就是一个程序员应该做的。今天打游戏,明天看电影,后天炒股,那么你就等着三十五岁下岗。如果你不能够认同编程和思考是比其它事情更有吸引力的,那么你不必学编程,集中精力去做最喜欢的事情或许会有更大的成就。======附:如何成为一名黑客作者:Eric Raymond
翻译 waterbird [AKA]
校对 kingsunsoong--什么是黑客?Jargon File中对"黑客"一词给出了很多定义,大部分定义都涉及高超的编程技术,强烈的解决问题和克服限制的欲望。如果你想知道如何成为一名黑客,那么好,只有两方面是重要的:态度和技术。长久以来,存在一个专家级程序员和网络高手的共享文化社群,其历史可以追溯到几十年前第一台分时共享的小型机和最早的ARPAnet实验时期。这个文化的参与者们创造了"黑客"这个词。黑客们建起了Internet。黑客们使Unix操作系统成为今天这个样子。黑客们搭起了Usenet。黑客们让WWW正常运转。如果你是这个文化的一部分,如果你已经为它做了些贡献,而且圈内的其他人也知道你是谁并称你为一个黑客,那么你就是一名黑客。黑客精神并不仅仅局限于软件黑客文化圈中。有些人同样以黑客态度对待其它事情如电子和音乐--事实上,你可以在任何较高级别的科学和艺术中发现它。软件黑客们识别出其他领域的同类并把他们也称作黑客--有人宣称黑客实际上是独立于他们的工作领域的。但在本文中,我们将注意力集中在软件黑客的技术和态度,以及发明了"黑客"一词的那个共享文化传统之上。另外还有一群人,他们大声嚷嚷着自己是黑客,实际上他们却不是。他们是一些蓄意破坏计算机和电话系统的人(多数是青春期的少年)。真正的黑客把这些人叫做
"骇客"(cracker),并不屑与之为伍。多数真正的黑客认为骇客们是些不负责任的懒家伙,还没什么大本事。专门以破坏别人安全为目的的行为并不能使你成为一名黑客,正如拿根铁丝能打开汽车并不能使你成为一个汽车工程师。不幸的是,很多记者和作家往往错把"骇客"当成黑客;这种做法激怒了真正的黑客。根本的区别是:黑客们建设,而骇客们破坏。如果你想成为一名黑客,继续读下去。如果你想做一个骇客,去读 alt.2600
新闻组,并在发现你并不像自己想象的那么聪明的时候去坐5到10次监狱。关于骇客,我只想说这么多。--黑客的态度黑客们解决问题,建设事物,信仰自由和双向的帮助,人人为我, 我为人人。要想被认为是一名黑客,你的行为必须显示出你已经具备了这种态度。要想做得好像你具备这种态度,你就不得不真的具备这种态度。但是如果你想靠培养黑客态度在黑客文化中得到承认,那就大错特错了。因为成为具备这些特质的这种人对你自己非常重要,有助于你学习,并给你提供源源不断的活力。同所有创造性的艺术一样,成为大师的最有效方法就是模仿大师的精神--不仅从理智上,更要从情感上进行模仿。So,如果你想做一名黑客,请重复以下事情直到你相信它们:1. 这世界充满待解决的迷人问题做一名黑客有很多乐趣,但却是些要费很多气力方能得到的乐趣。这些努力需要动力。成功的运动员从健壮体魄、挑战自我极限中汲取动力。同样,做黑客,你必须要有从解决问题、磨练技术、锻炼智力中得到基本的热情。如果你还不是这类人又想做黑客,你就要设法成为这样的人。否则你会发现,你的黑客热情会被其他诱惑无情地吞噬掉--如金钱、性和社会上的虚名。(同样你必须对你自己的学习能力建立信心--相信尽管你对某问题所知不多,但如果你一点一点地学习、试探,你最终会掌握并解决它。)2. 一个问题不应该被解决两次聪明的头脑是宝贵的、有限的资源。当这个世界还充满其他有待解决的有趣问题之时,它们不应该被浪费在重新发明轮子这些事情上。作为一名黑客,你必须相信其他黑客的思考时间是宝贵的--因此共享信息、解决问题并发布结果给其他黑客几乎是一种道义,这样其他人就可以去解决新问题而不是重复地对付旧问题。(你不必认为你一定要把你的发明创造公布出去,但这样做的黑客是赢得大家尊敬最多的人。卖些钱来给自己养家糊口,买房买车买计算机甚至发大财和黑客价值也是相容的,只要你别忘记你还是个黑客。)3. 无聊和乏味的工作是罪恶黑客们应该从来不会被愚蠢的重复性劳动所困扰,因为当这种事情发生时就意味着他们没有在做只有他们才能做的事情--解决新问题。这样的浪费伤害每一个人。因此,无聊和乏味的工作不仅仅是令人不舒服而已,它们是极大的犯罪。要想做得像个黑客,你必须完全相信这点并尽可能多地将乏味的工作自动化,不仅为你自己,也为了其他人(尤其是其他黑客们)。(对此有一个明显的例外。黑客们有时也做一些重复性的枯燥工作以进行"脑力休息",或是为练熟某个技巧,或是获得一些除此无法获得的经验。但这是他自己的选择--有脑子的人不应该被迫做无聊的活儿。)4. 自由就是好黑客们是天生的反权威主义者。任何能向你发命令的人会迫使你停止解决令你着迷的问题,同时,按照权威的一般思路,他通常会给出一些极其愚昧的理由。因此,不论何时何地,任何权威,只要他压迫你或其他黑客,就要和他斗到底。(这并非说任何权力都不必要。儿童需要监护,罪犯也要被看管起来。如果服从命令得到某种东西比起用其他方式得到它更节约时间,黑客会同意接受某种形式的权威。但这是一个有限的、特意的交易;权力想要的那种个人服从不是你的给予,而是无条件的服从。)权力喜爱审查和保密。他们不信任自愿的合作和信息共享--他们只喜欢由他们控制的合作。因此,要想做得像个黑客,你得对审查、保密以及使用武力或欺骗去压迫人们的做法有一种本能的反感和敌意。5. 态度不能替代能力要做一名黑客,你必须培养起这些态度。但只具备这些态度并不能使你成为一名黑客,就像这并不能使你成为一个运动健将和摇滚明星一样。成为一名黑客需要花费智力、实践、奉献和辛苦。因此,你必须学会不相信态度,并尊重各种各样的能力。黑客们不会为那些故意装模做样的人浪费时间,但他们却非常尊重能力--尤其是做黑客的能力,不过任何能力总归是好的。具备很少人才能掌握的技术方面的能力尤其为好,而具备那些涉及脑力、技巧和聚精会神的能力为最好。如果你尊敬能力,你会享受提高自己能力的乐趣--辛苦的工作和奉献会变成一种高度娱乐而非贱役。要想成为一名黑客,这一点非常重要。--基本黑客技术黑客态度是重要的,但技术更加重要。态度无法替代技术,在你被别的黑客称为黑客之前,有一套基本的技术你必须掌握,这套基本技术随着新技术的出现和老技术的过时也随时间在缓慢改变。例如,过去这套技术包括使用机器码编程,而直到最近才包括了HTML语言。但现在明显包括以下技术:1. 学习如何编程这当然是最基本的黑客技术。如果你还不会任何计算机语言,我建议你从Python开始。它设计清晰、文档齐全,对初学者很合适。尽管是一门很好的入门语言,它却不仅仅是个玩具。它非常强大、灵活,也适合做大型项目。但是记住,如果你只会一门语言,你将不会达到黑客所要求的技术水平,甚至也不能达到一个普通程序员的水平--你需要学会如何以一个通用的方法思考编程问题,独立于任何语言。要做一名真正的黑客,你需要学会如何在几天内通过一些手册,结合你现在所知,迅速掌握一门新语言。这意味着你应该学会几种不同的语言。如果要做一些重要的编程,你将不得不学习C语言--Unix的核心语言。其他对黑客而言比较重要的语言包括Perl和LISP。Perl很实用,值得一学;它被广泛用于活动网页和系统管理,因此即便你从不用Perl写程序,至少也应该能读懂它。LISP
值得学习是因为当你最终掌握了它你会得到丰富的经验;这些经验使你在以后的日子里成为一个更好的程序员,即使你实际上可能很少使用LISP本身。当然,实际上你最好四种都会(Python,C,Perl,and
LISP)。除了是最重要的四种基本语言,它们还代表了四种非常不同的编程方法,每种都会让你受益非浅。这里我无法完整地教会你如何编程--这是个复杂的活儿。但我可以告诉你,书本和课程也不能做到。几乎所有最好的黑客都是自学成才的。真正能起作用的就是去亲自读代码和写代码。学习如何编程就象学习用自然语言写作一样。最好的做法是读一些大师的名著,试着自己写点东西,再读些,再写点,又读些,又写点儿……如此往复,直到你能够运用自己在范文中看到的那种简洁和力量。过去找到好的代码去读是困难的,因为很少有大型程序的源代码能让新手练手。这种状况已经得到了很大的改善;现在有很多可用的开放源码软件、编程工具和操作系统(全都由黑客写成)。这使我们自然地来到第二个话题……2. 得到一个开放源码的Unix并学会使用、运行它我假设你已经拥有了一台个人计算机或者能够使用一台( 今天的孩子们真幸福 🙂 )。新手们最基本的一步就是得到一份Linux或BSD
Unix,安装在个人计算机上,并运行它。当然,这世界上除了Unix还有其他操作系统。但它们都是以二进制形式发布的--你无法读到它的源码,更不可能修改它。尝试在DOS或Windows的机器上学习黑客技术,就象是在腿上绑了铁块去学跳舞。除此之外,Unix还是Internet的操作系统。你可以不知道Unix而学会用Internet,但不懂它你就无法成为一名Internet黑客。因为这个原因,今天的黑客文化在很大程度上是以Unix为中心的。(这一点并不总是真的,一些很早的黑客对此很不高兴,但Unix和Internet之间的共生关系已是如此之强,甚至连微软也无可奈何。)So,装一个Unix--我个人喜欢Linux,不过也有其他选择(你也可以在同一台机器上同时运行DOS、Windows和Linux)。学会它。运行它。用它跟Internet对话。读它的代码。试着去修改它。你会得到比微软操作系统上好得多的编程工具(包括C,Lisp,Python,and
Perl),你会得到乐趣,并将学到比你想象的更多知识。关于学习Unix的更多信息,请看 The Loginataka要得到Linux,请看: 哪里能得到 Linux3. 学会如何使用WWW和写HTML大多黑客文化建造的东西都在你看不见的地方发挥着作用,帮助工厂、办公室和大学正常运转,表面上很难看到它对他人的生活的影响。Web是一个大大的例外。即便政客也同意,这个巨大而耀眼的黑客玩具正在改变整个世界。单是这个原因(还有许多其它的),你就需要学习如何掌握Web。这并不仅仅意味着如何使用浏览器(谁都会),而是要学会如何写HTML--Web的标记语言。如果你不会编程,写HTML会教你一些有助于学习的思考习惯。因此,先建起自己的主页。但仅仅建一个主页也不能使你成为一名黑客。Web里充满了各种网页。多数是无意义的零信息量垃圾。要想有价值,你的网页必须有内容--必须有趣或对其它黑客有用。这样,我们来到下一个话题……--黑客文化中的地位象大部分不涉及金钱的文化一样,黑客王国的运转靠声誉维护。你设法解决有趣的问题,但它们到底多有趣,你的解法有多好,是要有那些和你具有同样技术水平的人或比你更牛的人去评判的。相应地,当你在玩黑客游戏时,你知道,你的分数要靠其他黑客对你的技术的评估给出。(这就是为什么只有在其他黑客称你为黑客时,你才算得上是一名黑客)这个事实常会被黑客是一项孤独的工作这一印象所减弱;它也会被另一个黑客文化的禁忌所减弱(此禁忌的效力正在减弱但仍很强大):拒绝承认自我或外部评估是一个人的动力。特别地,黑客王国被人类学家们称为一种精英文化。在这里你不是凭借你对别人的统治来建立地位和名望,也不是靠美貌,或拥有其他人想要的东西,而是靠你的奉献。尤其是奉献你的时间、你的才智和你的技术成果。要获得其他黑客的尊敬,你可以做以下五种事情:1. 写开放源码的软件第一个(也是最基本和传统的)是写些被其他黑客认为有趣或有用的程序,并把程序的源代码公布给大家共享。
(过去我们称之为"自由软件-free
software",但这却使很多不知free的精确含义的人感到不解。现在我们很多人使用"开放源码-open source"这个词。)黑客王国里最受尊敬的大牛们是那些写了大型的、具有广泛用途的软件,并把它们公布出去,使每个人都在使用他的软件的人。2. 帮助测试并修改开放源码的软件黑客们也尊敬也那些使用、测试开放源码软件的人。在这个并非完美的世界上,我们不可避免地要花大量软件开发的时间在测试和抓臭虫阶段。这就是为什么任何开放源码的作者稍加思考后都会告诉你好的beta测试员象红宝石一样珍贵(他知道如何清楚描述出错症状,很好地定位错误,能忍受快速发布的软件中的bug,愿意使用一些简单的诊断工具),甚至他们中的一个能判断出哪个测试阶段是漫长的、令人精疲力尽的噩梦,哪个只是一个有益健康的玩意儿。如果你是个新手,试着找一个感兴趣的正在开发的程序,做一个好的beta测试员。从帮着测试,到帮着抓臭虫,到最后帮着改程序,你会不断进步。以后你写程序时,会有别人来帮你,你就得到了你当初善举的回报。3. 公布有用的信息另一件好事是收集整理网页上有用有趣的信息或文档如FAQ。许多主要FAQ的维护者和其他开放源码的作者一样受到大家的尊敬。4. 帮助维护基础设施的运转黑客文化是靠自愿者运转的。要使Internet能正常工作,就要有大量枯燥的工作不得不去完成--管理邮件列表和新闻组、维护大量文档、开发RFC和其它技术标准等等。做这类事情的人会得到很多人的尊敬,因为每个人都知道这些事情是耗时耗力的苦役,不象编码那样好玩。做这些事情需要毅力。5. 为黑客文化本身服务最后,你可以为这个文化本身服务(例如象我这样,写一个"如何成为黑客"的初级教程 🙂 )(hehe,象我这样把它翻成中文 🙂 )
这并非一定要在你已经在这里呆了很久、精通所有以上四点、获得一定声誉后才能去做。黑客文化没有领袖。精确地说,它确实有些文化英雄和部落长者和历史学家和发言人。若你在这圈内呆的够长,你或许成为其中之一。记住:黑客们不相信他们的部落长者的自夸的炫耀,因此很明显地去追求这种名誉是危险的。你必须具备基本的谦虚和优雅。--黑客和怪人(Nerd)的联系同流行的传说相反,做一名黑客并不一定要你是个怪人。然而,很多黑客都是怪人。做一个出世者有助于你集中精力进行更重要的事情,如思考和编程。因此,很多黑客都愿意接受"怪人"这个标签,更有甚者愿意使用"傻子(geek)"一词并引以为荣--这是宣布他们与主流社会不合作的声明。如果你能集中足够的精力来做好黑客同时还能有正常的生活,这很好。今天做到这一点比我在1970年代是个新手时要容易得多。今天主流文化对技术怪人要友善得多。甚至有更多的人意识到黑客通常更富爱心,是块很好的做恋人和配偶的材料。更多信息见
Girl's Guide to Geek Guys如果你因为生活上不如意而为做黑客所吸引,那也没什么--至少你不会分神了。或许以后你会找到自己的另一半。--风格的意义重申一下,做一名黑客,你必须进入黑客精神之中。当你不在计算机边上时,你仍然有很多事情可做。它们并不能替代真正的编程(没有什么能替代编程),但很多黑客都那么做,并感到它们与黑客精神存在一种本质的关联。阅读科幻小说。参加科幻小说讨论会。(一个很好的寻找黑客的场合)
研究禅宗,或练功习武。
练就一双精确的耳朵,学会鉴赏特别的音乐。学会玩某种乐器,或唱歌。
提高对双关语的鉴赏。
学会流畅地用母语写作。(令人惊讶的是,我所知道的所有最棒的黑客,都是很不错的作家)这些事情,你做得越多,你就越适合做黑客。至于为什么偏偏是这些事情,原因并不很清楚,但它们都涉及到了左-右脑的综合技巧,这似乎是关键所在。(黑客们既需要清晰的逻辑思维,有时也需要强烈的跳出逻辑之外的直觉)最后,还有一些不要去做的事情。不要使用愚蠢的、过于哗众取宠的ID
不要自称为网络朋克(punk),也不要对那些人浪费时间
不要寄出充满拼写和语法错误的email,或张贴错误百出的文章做以上事情,会大大损害你的声誉。黑客们个个记忆超群--你将需要数年的时间让他们忘记你的愚蠢。--其它资源Peter Seebach 为那些不知如何同黑客打交道的经理们维护了一个非常精彩的黑客FAQ。The Loginataka 有许多关于如何正确培养一个Unix黑客的态度的材料。我也曾写过一篇"黑客文化简史"。我还写过另一篇文章,"大教堂与集市",解释了许多Linux和开放源码文化的运作原理。我还在它的续集"开拓智域"一文中有更直接的论述。--FAQ(常问问题解答)问:你会教我如何做黑客吗?自从第一次发布此页,我每周都会得到一些请求,要我"教会他如何做黑客";遗憾的是,我没有足够的时间和精力来做这个;我自己的编程项目已经占用了我110%的时间。甚至即便我想教你也不可能,黑客基本上是一项需要你自行修炼的态度和技术。你会发现即使真正的黑客想帮助你,如果你乞求他们填鸭一样教你的话,你不会赢得他们的尊敬。首先去学习。显示你在尝试,你能靠自己去学习。然后再去向黑客们请教问题。问:你会帮我"黑"掉一个站点吗?或者教我怎么黑它?No. 任何在读完FAQ后还问此问题人,都是愚不可及的家伙,即使有时间我也不会理睬。任何发给我的此类mail都会被忽略或被痛斥。问:哪里能找到真正的可以与之交流的黑客?最佳办法是就近参加一个Unix或Linux的用户组,参加他们的会议。问:我该先学哪种语言?HTML,如果你还不会的话。但它不是一个真正的编程语言。当你准备编程时,我建议你从Python开始。会有很多人向你推荐Perl,它比Python还受欢迎,但却难学一些。C是非常重要的,但它却是最难学的。不要一开始就尝试学C。问:开放源码的自由软件不会使程序员饿肚子吗?这似乎不大可能--到目前,开放源码软件产业创造了而不是消灭了大量工作机会。如果写一个程序比不写一个程序只是个纯粹经济上的收益的话,无论它是否免费,只要它被完成,程序员都会从中得到回报。而且,无论软件是由多么的free的方法开发的,对更新的软件应用的需求总是会有的。问:我从何学起?哪里有免费的Unix?本页的其它地方指向最常用的免费Unix。要做一名黑客,你需要自立自强,以及自我教育的能力。现在开始吧……
我所珍视的
我所珍视的
1.昨天和前天,作为周末工程,试着调emacs下的org-mode表格对齐。话说emacs org-mode是个非常强大的工具,很多人因为它而开始使用emacs。按现
在你们日语化的了中文说,就是神一样的存在,按你们英文化了的汉语说,就是
杀手应用。只是这东西还有点水土不服,默认的设置下,表格里如果同时有中文和英文的时
候,就对不齐了。美中不足,我也忍了好几年,可见这东西有多么强大,同时,
我有多么懒。终于调通了。然后乐颠颠地在人人网上发了两张截图,显摆一下。潘同学跑来
说,啥意思?潘同学的问题是没错的,因为我还没有给出任何文字的解释。我回答google一
下,是不负责的。我想说的是那张图片。那图上甚至没有给出最终的結果,除了org-mode的小标题
能表明那是调emacs字体来着,长长的拉一整屏的,是我的日志--不是日志本
身,只是日志里每一步的标题。我本科的时候,李树杰老师教导我:要记日志。我当时自诩记性了得,就说:我能记住。直到后来做复杂的东西,windows95无盘工作站网络,才发现,啊,原来复杂的东
西是记不住的。而记录的能力,只能通过简单的项目来训练。这一长排日志,其中有反复,有试完A又试B,试完BCD,回过头来发现A还有新的
可能。潘同学的问题,让我想起一种另一种提问。即,你这个怎么实现的,能一两句话
告诉我么?能,一般的操作,都可以用一两句话说明白。我为什么把这一大段日志贴张图上来呢,因为我最看重的是其中的过程,而不是
结果。而一般的,在你参加工作以后,你希望只了解结果,有意思的是前辈们也乐于你
这样。唯有哪些,你才有可能永远都只是一个不能自己独立解决问题的小跟班。可以给你产品,而工艺是要保密的。所以,当你以后再打开QQ请教别人或者GOOGLE之前,请先考虑一下你将失去的--
过程。2. 经常讲的关于答辩的一个笑话。答辩委员会问,你能不能用一两句话说一下你
研究了些什么。学生答:我要是能用一两句话说清楚,还要写这么长一篇么?答辩委员会应该这么说:我们要借此问题了解你的概括能力,和你是否能把目的
和手段区分开来,我们借以了解你的这项能力的问题是 你能不能用一两句话说一
下你研究了些什么。其实答辩委员会是在考你。我答疑的时候,学生也经常我。他会问,老师你能不能概括地给我讲讲这个问题?比如,三级管单级放大的原理啦,戴维南定理的一个麻烦的应用啦,比如……大致
是这样的问题,我上课的时候花了两次到三次课才勉强说明白的那种。如果我真的能用一两句概括出来,我才不愿意花上那么长时间呢。我们花了大量的时间铺设了各种预设的概念,推导的过程。结论,其实一点也不
重要。而且同学这样问我的时候,通常是了解结论的。3. 过程之重要,有时它就是本身和全部。N年前。我想想,8年前吧,我在网络中心工作。那是无比美好的时光,天天CS。
这里的CS意指反恐精英。现在网络中心不一样了,我走以后,他们天天努力工作。所以请勿联想。当年有位同事,李辉同学。她这样评价CS,"不就是从这里冲到那里,把那些人
杀了么?"是啊,帝国时代就是把这些人从这里带到那里,把敌人的基地推了。大部分电影都是好人遇到了危险,最后战胜了。游戏和电影是可能这样评价的。直到后来李辉同学成为CS中一杆优秀的B41,她
不这样说了。如果这样总结,就没有什么值得我们去体验了。人生,不过是出生,然后……如果我们不提过程的话……死了。跑酷,那些上窜下跳
都忽略,就是从这里到那里,位移而已。爬山,从山脚到山顶,至于你经历的危
险,风光,都忽略了。这是显然是扯淡。但是为什么我们关注别人的时候,通常就只关注他光鲜的结果
呢?我初中的校长,裴老师,他这样说:那些武打片其实都是有教育意义的。你别看
主角最后复仇了,为什么他能实现这个愿望呢,因为……我的脑海里当时浮现出觉远冬练三九夏练三伏的情景。4. 其实过程之重要,并不仅由于,甚至不是由于它的价值。而是,过程就应该是
我们所追求的全部。当父母包办你很多事情的时候,当然,你知道我说的不是婚姻。在这样的过程
中,孩子迅速得到了想要的东西--最快地系好了鞋带,最干净的孩子,最优秀的
手工作品,最复杂--错了,最有力的人际关系。但是,孩子失去了过程。而过程本身,就是人生的全部。且不论,由于父母的包办,子女失去了更远的未来中至为重要的东西。人之为人,就在于我们可以自己决定--而做决定的能力,恰恰需要过程来获得。
不可传授,不可学习,只有训练才有效果。扯到这里,想起很多同学。他说,我参加项目想长长见识,我参见这门课,想学
点东西,完全忽略掉在课程之初我提到的:有些能力,只能训练,不能学习。参观游泳池,是不能学会游泳的;参观健身房,是不会长肌肉的。口头表达得多
么深刻,一次性付多少钱,把脑袋扯下来,也不会让别人"爱"上你的。
5. 注重结果让我们容易这样想:等到AA时候,我就对他好,去给他买最好的啥啥。你尽可能把AA换成DOTA,把他
换成她。等到这段完了,我就要复习/学习/努力/了。你尽可以把学习换成任何你不喜欢做
的事情。这些行动告诉我们,我们不与声称的心爱的人共享美好的时光。你会喜欢那个一学期也不出现,期末的时候直接划题的老师么?如果你喜欢这样的老师的话,那么,你是不是还喜欢那个在你一生中受苦受难都
不出现,在你快死的时候,突然出现在你的床边,抱着你痛哭,说他她一生都在
等这样的时刻--在别人的怀里,喝着美酒和咖啡,打着DOTA,还有啥咐,在这样
的一生中,等待这个伟大光辉的时刻。直到那个时刻到来,他才突然出现。你会如何对待这样的人呢?人生,也会这样对待你的。
6. 如果我们仅仅是把自己学习和探索这样的过程忽略掉,还仅仅是把这些东西
当作东西而已。这没有什么问题,能力本来就是一种东西。我们所求,想靠挣钱或努力学习得到
的,车子,学分,这些都不过是东西而已。而当你声称喜欢一个人,却其实想说的是,"我希望你接受我的喜欢",后面更长
的,也更重要的是,"承担对我的义务,为我提供各种好处,赠予我啥啥,陪我
啥啥……"这个要求的单子还可以拉得更长,不过不必了。已经有人心想:如果不这样,我
为啥还要喜欢你呢?之所以有这最后一段,是因为今天分享的一个贴子。它告诉我们,持此种观点的
人,并非"喜欢你",而是喜欢你能给他的东西。如何?我把你和他的位置对调,是否感觉有所不同?我们利用别人的时候,就是
喜欢,别人利用我们的时候,就是功利。当我们声称喜欢,而利用别人的时候,就如同在上面提到的,我们在把别人当成
东西,而不是人类。如果我们不喜欢别人把我们当成东西,我们又怎么能这样对待别人呢?这时,与
其说喜欢,不如学习阿Q直说。佛家把 求不得 和 爱别离 是分开来说的。而现今,很多人把它们当成一回事了
吧。7. 总结,过程 是经历过的人所珍惜的,不传之秘。它必不可少,它是事情本身
和全部,它有价值,并且超过价值。同时,过程,有比价值更重要的,尤其是当对象是人类而非东西的时候。徒步确实能走出滑囊炎。当你感叹"怎么会是这样的结果啊"的时候,请回想一下
沿途你看到的风光。考试确实有非常令人痛苦的一面,当你感叹@#%$#^$^%的时候,请回想一下,是
沿途的什么导致你成为现在的这个样子。我,就是因为这些才如此碌碌无为。请你试着站起来,离开屏幕,回想一下今天,也顺便回想一下这个月,这个学期。