分类 转载文章 下的文章

代码量不能决定程序的进度和质量

1、用代码行数来衡量编程的进度,就如同用重量来衡量飞机的制造进度。—— 比尔·盖茨

2、老板跑到程序员身后,看了看代码。 老板:才写了这么点啊? 程序员:如果再给我点时间,我会写得更短些! 老板:你可以回家休息了! 程序员:...

3、程序员有哪些借口可以让自己写出低质量的代码?

来自知乎匿名评论:

我很久很久以前曾经经历的一个公司特别傻比,人力资源和svn管理员不懂程序。

作为服务端的主程序,一直以来都是代码精简,效率最优,没有冗余为毕生追求。

突然我无意中发现了一个秘密,我的绩效居然不如几个公司刚招进来的新手。

我每天刻苦努力,优化代码,让公司的服务端7*24稳稳跑在服务器上,还一心研究各种热切换,换来绩效考核好久没有优秀了。

这究竟是为什么呢,后来好心人告诉我,人力资源说了,他们看了svn的日志记录,其他人工作很努力,每天提交很多代码,每天新编写很多很多代码文件,贡献了好多好多的劳动成果。

而看看你这个号称技术排第一的家伙,根本就没干活嘛,3个月下来,你一共就写了这么十来个cpp和.h,每天改来改去就这么几个文件,还好多天差不多行数的位置回改,根本就一直在偷懒。

我听完以后以后直接口吐鲜血,无语至极了。

然后我就申请离职了,在那个公司剩下不多的日子了,我为了心安理得的拿最后2个月的工资,为了让老板知道其实我一直很努力,我在最后一个月更新了几千个文件,让服务端的内核稳定度下降了好几个档次,内存消耗上涨了好多个数量级,并且把容易读,容易后续扩展的部分,全部用c++最高级的模版进行扩展,同时删掉了我以前用汇编写的优化代码。

嗯,我想以后这个公司估计会倒闭,我走了以后,再也没有人能维护这份代码了,估计3个月以后,我自己也搞不定了。

然后我就离职了,离职之前老板大夸我厚道,最后一个月还给公司做了这么多的事情,别人走都是删代码,我居然还毫无保留的为公司做出贡献。

然后我走了不到半年,公司就呵呵了。

我想那是我此生唯一写垃圾代码写的心安理得的一次机会了。

垄断致中国互联网“荒漠化”

文章转自:互联网的一些事

  回顾全球互联网的发展历程,96年互联网在初兴之时生机勃勃。中美两国的互联网新兴势力如雨后春笋般破土而出。然而,短短的十几年过后,由于出现了寡头垄断现象,两者却大相径庭。一方面美国的互联网企业仍在蓬勃发展,另一方面中国互联网却因出现了以腾讯为首的寡头垄断,抑制技术创新,扼杀新兴的创业公司,致使中国互联网“沙漠化”。

  一方面,腾讯在中国最早的一批互联网中脱颖而出,与百度共同成为中国互联网的巨无霸。中国互联网上市公司市场价值总和已经达到1.2万亿人民币以上,而腾讯、百度两大公司的总市值,就占据了互联网上市公司市场总值中的70%以上;中国互联网市场长期陷于寡头垄断格局。

  在垄断寡头的打压下,许多曾经预期很好的公司,如IMO、联众、开心偷菜、互动百科……等一系列中国互联网新型创业公司,都成为了垄断市场的牺牲品,在巨头的打压下彻底消亡,自2006年后,中国再也没有出过大型互联网企业。

  而与之相反的是,美国的互联网先驱雅虎、谷歌、亚马逊并没有使美国的互联网市场出现巨头垄断的景象,相反由于反垄断的意识以及公平的竞争环境,使得之后又涌现出:Facebook、Twtter、eBay、Youtube这些改变了互联网历史的新兴企业,时至今日这样具有创新精神的企业仍在源源不断的涌现。

  在垄断的阴影下,中小型网络企业在各方面与市值动辄数十亿上百亿美元的大集团相比,都会受到不公正的待遇甚至是歧视。

我与依依的橙色岁月 - 一篇学习HTTP代码的神文

好的,事情是这样的,数年前,我曾有过一段美好的夏日恋情,在此与大家分享。

依依

这个女孩叫做依依,她是 80 后的,生日是 1989 年 3 月吧,忘了哪一天了,分手太久了,记不起来了。

 

转学生

我高中是个转学生,转学转到了一所学习学得特猛的学校。对于我这个不愛学习的孩子来说,每个人都是学霸,玩命关头 6 (Fast and Furious 6),这种片我早看过了,每个人天天都是玩命关头啊!记得我第一天到班,老师介绍我是从一所暴烂的学校转来的时候,下面的人没有一个抬头的,背单词儿的背单词儿,做题的做题,草稿纸是一堆堆的运进学校来,原来是这边同学题算得太猛了,闹纸慌!

我被分配到一个孤立的角落,坐下放好书包时,猛一看旁,这女孩子挺清秀的,是个美女,但我叫她,她都不理我。一个好心的同学和我说,她不会说话,但会比手语。她看起来很文静,有种清新脱俗的感觉。要找个人比喻的话,就像是神雕侠侣里的小龙女,刘亦菲、山楂树之恋里的静秋,周冬雨,北京愛情故事里的沈冰,佟丽雅那种感觉吧,但绝不是日本愛情故事的小泽玛利亚。

先说说为什么我会手语呢?

各位看倌一定不明白了,我怎么就会手语呢?实不相瞒,我小时候在爷爷的仓库里,没找到沾满血迹的棋盘,但找到了一本《三十分钟学会手语》,我唏哩哗啦的 30 分钟就学会手语了,但想不到聪明如我,长大后买了本《七天学会 Java》,还是学不会。。。

场景拉回到学校。

 

借铅笔

有次我忘了带笔,向她借笔,跟她说:可以借我铅笔吗?她比个二,再比两个零。我不懂,她继续给我解释,原来是 OK,拿去吧。汗。。。

 

喷水

有次我辛苦写了一晚上的作业,带到学校回味起昨夜是怎么奋斗地写完这个大作业的时候。看到了她,从教室走进来,右手正拿著农夫山泉矿泉水,一边喝一边走,说时迟,那时快────唉妈呀,她一个不小心,快要跌倒了!我伸手一接,人是接到了,我用尽毕生功力所写的作业,却被喷出去的矿泉水,弄湿掉了一大部分!她看了看我的作业本,比了个二,又比了个零,再比个六,我不大懂,她又用手语解释了一番,原来她的意思是,我作业的部份内容,都被水给喷湿了,要帮我把湿掉的那部分,重新再写过。我用手语和她说,妳没事就好,这我再写就好,于是我重写了那份作业,写得比先前更好,得了个高分,想起来也挺感谢她的。也就是在那次,她开始注意到我的吧?

 

裸考

又有次考试,我完全没准备,写都不会写,望卷发呆、真是失败。她看了看我,指著我的考卷,比个二,再比个零,接著比个四,露出疑惑的表情,我一头雾水的不懂她在比什么,她又用手语给我解释一番,终于明白了,她的意思是,我考卷怎么什么内容都没有?我跟她用手语解释回去,我说我不会写,想看别人的但看不到!她不懂我意思,又回比个三,再比个零,接著比个三,然后又用眼神示意,是不是要看别人的考卷,我不好意思地猛点头。然后她就把考卷移过来点,让我抄,算是上次把我作业弄湿的回报。我很感谢她给我抄考卷,要是没有她,我的数学就挂了。

 

比中学 Learning by doing

就这样,每天有一搭没一搭的手语比久了,我也成了半个手语大师了,日子久了,发现自己有点喜欢上她了,终于鼓起勇气,约她去看电影。她比了个二,又比了个零跟二,然后害羞的点点头,哈哈,她接受我的邀约了。

 

喷奶

我中午的时候,都会去学校的贩卖部,买牛奶一个人躲起来,美兹兹地在顶楼上,边晒著太阳边喝奶。有次喝奶喝得正来劲,突然有个人拍我一下,我吓得喷奶了。转过头来,是小依,她对我比了三,又比了个零,再比了个二,说是找到我了。她看我喷奶喷得整身都是,笑我傻,这时候第一男主角理当做出,

好呀你笑我傻,这种俩小无猜打闹得情节,我也不例外!愛情++

 

果汁

我记得小依特喜欢喝果汁,有回上特别无聊的历史课,历史就是那样的,

君主很愚昧,小人占大位;人民苦哈哈,君王笑哈哈。

 

没意思的!

我正想打瞌睡,她拍拍我,给我比手语,比了个四,又不好意思得连比两个零。

我回比回去:干嘛?

原来她有个不情之请,要我下课去帮她买罐果汁。

我便比个二零零,OK!

我又比说,要不我现在就跑去买吧?

她比说,不行呢现在在上课,又比了个四,接著比零,然后比一,跟我解释说,老师不准呢吧!

我嘴角一扬,比回去说,我有办法!

于是我便举手,说是肚子痛,佯装去上厕所,却跑去贩卖部买了罐果汁。

她似乎有点感动。

 

交男友问题

有一次我问她,像妳这么可愛,妳有男朋友吗?

她比了个四,又比了零,再比个四,摇摇头。

我想是没找到男友吧!我問为什么?

她比了个四,又比了零,再比九,说是交男友会起争执得,她不喜欢。

我给她解释,怎么会呢,两个人要是相愛,恩愛都来不及了,怎么会起争执?

她又比了个四,再比个一,接著比七,解釋道:有时候愛情不像想像中的那样,会失望的。

我比回去,那是当然,但最起码也得试试啊!青春一辈子只有一次啊!

她看我激动得这么比,貌似有点感动。只好实话实“比”,用手语比了个妈妈,再比了个四,比个零,比个三,露出无奈的表情,这我一猜就是妈妈不准她谈校园恋愛了,唉!!!

 

去她家看片

有次她妈妈不在,她邀我去她家看片,我一到她家,一到她家她就先去洗澡了(七月热,出汗出得多),我傻呼呼地选了个黄盒装的片,灰溜溜地放入 DVD 播放器,结果不能看。她换了小热裤加 T 恤从浴室走出,我看她看呆了,不是,我看著电视看呆了,刚放的盘怎么不能看呢!她用手语给我比了个,四,又比了个一,再比了个五。给我解释说,这个是光盘,DVD 播放器不能拨,哦原来是这样,于是我们挑了个片子,看完以后什么事情也没发生我就回家了。

在她家的时候,我看到了一个小东西,我用手語比說:这个送我吧!

她比了三,又比个零,然后比六。

我問好吗?

她说这个她没用到,送给你吧(笑颜)

 

日久生情

每天一起上学,在一起玩儿的时间久了,便日久生情了,这是很合理的。一下子五百天过去了,就在这认识她的第五百天,我决定跟她告白。详细告白过程省略三千字,大略说一下:

 

(以下都是手语!)

我:「依依,我对妳好么?」
依:「很好啊!谢谢你!(淘气的吐了个舌头)」
我:「今天是我们认识的第五百天。」
依:「是么?你怎么记得那么清楚?」
我:「我记得不是日子,我记的是妳的人。」
依:(微笑不语,脸泛红)
我:「依依,有件事儿拜托妳好么?」
依:「恩,你说。」
我:「妳什么都满足我么?」
依:「你先说说看呀!」调皮的(手)语气
我:「沉默了一会儿,鼓起勇气说,我们在一起吧!」
依:(她比了个四,又比一,再比个六)「不行」,这个请求我不能满足你。」
我:(直接抱住她)
依:「你干嘛!!!。。。」
我:「我喜欢妳。」
依:「我知道你喜欢我。」
我:「那妳喜欢我么?」
依:「我。。。不告诉你!」(跑走)
我:(追~~~)

于是我们就在一起了!

 

逛街

有次跟依出去逛街,经过一个小贩子,依看著一个戒指,很喜欢的样子,但这戒指好贵,那时的我买不起。我们便走了。

走著走著,我用手语跟依说:

「总有一天我要买个最大最大的钻戒给你,十克拉那种。」

依用手语回说:「你别逗我了,怎么买?」

我用手语激动得比了个:「哼,抢工行也得抢一个给妳!!!!!」

她比了个四、又比个零,再比个五,眼泛泪光,露出一丝丝喜悦,但却不许我这么做的表情。

我:「我知道,我不会做傻事的,但总有一天,我要妳做我的新娘子,让妳过好日子。」

依:(比了个二,又比了个零,再比个三)
「曾经有人对我说过,真正的愛情是不存在秘密的。」

我:「我们之间。。。没有秘密!」

(她不语,沉默,十秒后)

依:「你愛我吗?」

我:「愛!」

依:(接著比了个四,又比了个一,再比个一。)「会愛很久吗?」

我:「只要 GFW 还在的一天,我都一直愛你!」(=很久很久)

她:(她太感动了,没有反应)

我:拍拍她,小依?小依?不知怎么的,鬼上身,我比出了个四又比了个零,再比个八。想喚醒她。但還是沒有反應。

我:小依?小依?

依:她回过神,先比了个五,再比了两个零,「我刚刚很混乱,再想事情想得出神了。」

我:「妳在想什么?」

她:「。。。。。。。。。」

我:「?」

她:「。。」

她:「。。」

她:「。。」

她:「。。」

她:「。。」

她比了个五,又比了个零,接著比了个四。「没事,你怎么对我这么好。。。」

我:「我会一直对妳好,只对妳一个人好!」

就这样,我们过起了甜蜜的日子,每天都是如此美好。。。

直到。。。

 

小依的妈妈

她家是单亲家庭,妈妈很势利,我很愛她,想与她结婚,但她妈看不起我这个穷小子。

有次我在她家楼下与她幽会,被她妈妈发现了。她妈妈说,以后别再跟我家小依来往了!她妈妈看我是个穷小子,說:

你这样只会害了我家小依!

明话撂下说:「下个月我就要把小依介绍给隔壁富二代李肛的儿子,李一凡了!你丫死了这条心吧!」

我慌了,冲动了说,「我一定会让小依性幸福的,照顾她一辈子,请再给我点时间!」

她妈说,你丫拿什么给她幸福,看我不回答。

她妈便狠狠得比了个四又比了个零再比了个二,看我看不懂,便说,钱啊,生活的一切都是需要付钱的啊!要付钱你懂不懂!

我:「我现在没有钱!但我一定会努力不会让小依吃苦的!」

她妈比(手语),比了个四,又比了个一,再比了个二,要你明天能拿五万来提亲,我家小依就嫁给你!

 

我无话可说,看著她妈妈带走小依,一个人在原地发呆。。。

找姐姐帮忙

于是她妈妈隔日就帮小依办休学了,我见不到小依了!打她的电话也打不通,打了五通,零人接听,每通只听到三句:「您所拨打的用户,不在服务区。」电话就嘟嘟嘟了。。。

 

我找到小依的姐姐,不巧也不会说话(苦命的一家啊。。。),我跟她比手语解释,让她代我给小依传信,一开始她不懂,我给她解释了老久,她先比了个三又比了零再比五,用手语解释说要我代你传信?我点点头。她又比了个四又比个零再比个七,我狐疑的看著她?她用手语比说,我得先看看你是不是真的愛依依。于是她给了我一系列的考验。。。

我通过了考驗,她答应帮忙我传信给小依了,太好了!

 

再见青春

有天我到小依家,景色依旧,人事全非!只剩下一栋空屋,我费了一番功夫翻墙进去,回味著那些曾经熟悉的角落,在小依的房间里,我找到一片光盘!于是立马飞奔回家,看看光盘里有什么。。。

 

(光盘一放入,影片便开始播放)

 

小依,是小依,她憔悴的脸,看著我,比了个三,又比零再比七,说她们是暂时搬走而已,让我不要担心。过一会儿,屏幕里的她,哭了!她说她骗不了我,于是一边哭,一边比了个三,手开始颤抖,抖著抖著又比了个零,最后比了个一。。。。她用手语解释说,她妈妈。。。把她们。。。带走了,去一个很远很远的地方,永远不会回来了!我心一凉。她接著比,说她妈妈不会。。。比了个四。。。零。。。六,意思说他妈妈是不会接受我的。她又比了个二。。。零。。。五,要我忘了她,把她在我心中留下的内容抹去,我又怎么抹得掉呢?她就这么搬走了。她说,她对我的愛,一点都没有变,接著比了三。。。又比了零。。。再比个四,她对我的愛一点都没有改变,她很感谢我。接著比了个二。。。又比了零。。。。。再比一,感谢我在心里面给她创建了一个位置。她接著比,但是愛情对我们穷人来说。。。。。比个五。。。又比个零。。。再比一,她说,对我们穷人来说,根本就没有资格拥有愛情!

 

接著画面渐渐变黑,再画面黑之前,她苦笑地比了个四。。。。。。然后比了个一。。。。最后比了个。。。。零。

她就这么,从我的世界消失了。

 

那瞬间,在我的心里,全世界的显示器都熄灭了,再也没有小依,再也没有愛。

 

如果能有选择的话?

她曾教过我,多选题就是比个三、再比两个零。要是能再选一次的话,我也毫不保留的,再愛她一次。

从此之后,我怎么也忘不了,这些她比过的数字,但其实我忘不了的是,那段刻骨铭心的愛情,

我用这篇文章,致我终将逝去的青春,青春就是用来怀念的。。。你说,对吧?

 

(全文完!)

 

后记

好吧,我很感谢你耐心看完了,这其实是我胡诌的一个故事,主要是让我自己记起 HTTP 状态码,希望你也记住了。

那谁是依依?

好吧,依依其实就是(1989 年 3 月制定的)HTTP 1.1,时光飞逝,HTTP 2.0 也起草了。

本文出现的 HTTP 状态码:

200 OK
201 创建
202 接受(去看电影)
203 曾经有人说(Non-Authoritative Information)
204 (考卷)没有内容
205 内容重置
206 (作业)部分内容

300 多选题
301 永久搬走
302 找到(你了)
303 看别人的(考卷)
304 (愛)没有改变
305 使用(姐姐)代理(传信)
306 没用到
307 暂时导向

400 不情之请
401 (老师)不准
402 需要付钱
403 (妈妈)禁止
404 没找到(男友)
405 (抢劫工行)方法不允许
406 不接受
407 需要验证代理
408 请求逾时
409 争执
410 消失
411 会愛很久吗?(愛情的长度)
412 (提亲)前提
415 不支援的媒体类型
416 请求范围无法满足
417 (愛情)不如预期

500 很混乱,想得出神了。(Internal Server Error)
501 没有(给穷人)实作
502 小依坏掉了 (五行,两个句号。。。)
503 您所拨打的用户,不再服务区。
504 小依没反应

 

(文章转自互联网)

我也曾是如此 - 技术信仰是如何毁掉程序员的

我对自己有了新的发现上天给了我神奇的能力,让我总能做出正确的技术选择。有些夸张,但的确很神奇。 回首我的开发生涯,我认为我使用的任何一种编程语言都是在当时那种场景下最好的
 
我对自己有了新的发现——上天给了我神奇的能力,让我总能做出正确的技术选择。有些夸张,但的确很神奇。
 
回首我的开发生涯,我认为我使用的任何一种编程语言都是在当时那种场景下最好的。同样的,我选择的框架,甚至操作系统也是最好的。
 
是的,我有这样惊人的能力,就是从技术的海洋中挑出最好的。这些技术我甚至不用亲自试一遍,但我却极力捍卫我的选择。
 
可能当你在阅读本文的时候,你已经发现了你也有这种神秘的能力。
 
大多数开发者有技术信仰
这是真的。不要不好意思,你不是一个人。我,几乎每一个人,都与你同在。
 
我们有些人已经从这种自我洗脑中清醒过来。另一些人则还非常幸福地并没有意识到我们所处的困境。但是我们中的大部分人至少拥有一个为自己信奉的技术信仰。
 
这很自然,因为大多数程序员进入软件开发这个领域是因为他们对软件开发充满了热情。任何你热爱的事情都非常容易导致你对它产生一些非常不客观的看法。拿体育迷来举个例子,我自己并不是一个体育迷,但我知道不同种类运动的粉丝笃信他们支持的队伍是最棒的,尽管所有的证据都指向了相反的方向。
 
对自己选择和想法的捍卫是人类的天性。我们容易采纳新的相法,但是我们虔诚地捍卫我们已有的,而不需要太多的证据来支持他们。问题在于我们倾向于把我们对事情的看法与我们的身份,甚至我们作为人的价值捆绑在一起。
 
需要灵魂深处的搜索,但是如果你看一下你自己,你很有可能会发现,你可以列举出最好的操作系统,编程语言以及框架等等。
 
无知不是福
这种自我强加的信仰导致的问题是,它让我们看不到真相。在我真正使用了一台Mac之前,我曾经花了无数时间争论它为什么这么垃圾。具有讽刺意味的是,我现在正在一台Mac上面写这篇文章,但是我通过远程桌面使用Windows Live Writer来写。
 
我的观点是,我们大多数人极力争辩我们选择的技术是最好的,而甚至没有尝试过别的技术。想象一下,似乎很可笑。但是甚至今天,我都能发现我还是这样。
 
当我审视自己,问自己为什么的时候,我发现,大部分动机来自于我对我所学到的和掌握的知识的自豪和对我所不知道的知识的恐惧这两者的结合。我发现,如果花一些时间学习一门技术并了解为什么别人这么喜欢它,我就不会如此轻易地把我不知道的技术当做“垃圾”或者“废物”一样扔掉。正如他人所说,一个人的垃圾正是另一个人的宝藏。
 
关于无脑信仰的问题
即使我不告诉你,你也知道,在这个世界上,无脑(脑残)的狂热是一股毁灭性的力量。你只需要去你最喜欢的国家新闻网站或者读一点历史就知道怎么回事了。
 
 
虽然没有太多程序员会为PHP vs C#这样的问题而大动干戈——尽管我曾在这样一次相似的、挑衅性的、如今我极力反对的讨论中被指责不该丢椅子——很多开发者还是喜欢大声争论自己的意见,甚至盛气凌人地推翻他人的工作。我相信你们一定看到过很多这样的情景——如果你们常常上网的话。当我大胆的发表一些关于JavaScript的负面文章时,我自己也吞下了这样的苦水
 
所以,我们可能觉得,我们的无知并没有伤害任何人,并且我们觉得他们活该因为他们明显是错的,然而真相是,我们的无知造成了相当多的破坏。
 
回首过去,我感到非常羞愧,因为我将Perl程序员贬低得一无是处,完全否定他们的劳动成果,并且非常无知地推举我神圣的静态类C语言为可以净化他们的唯一救世主。
 
但是最重要的是,我发现我伤害的其实是我自己。
 
别再打自己脸了,蠢货!
我职业生涯最大的成长得益于,在我寻找一份C#开发的工作时,得到了一个非常好的机会去做一个JAVA项目的架构师。我被这个决定折磨得够呛。因为我认为JAVA是垃圾、是邪恶的。JAVA缺少像C#那样的属性,需要手写getter和setter,所以每一个写JAVA代码的人明显是蠢货。
 
我几乎没有接受那份工作,但是我觉得待遇很好,可以勉强一下自己忍一忍过去算了,就像一个战俘等待有一天我的微软大帝可以拯救我。我想,我至少得脱离那种恶心的JAVA写法。然而,经过了一些年的开发,编写良好的JAVA代码单元测试之后,我发现,其实不仅JAVA没那么屎,这个语言的一些长处和一些JAVA框架也值得称赞。
 
更重要的是,我开始意识到我过去的代码偏执使我关上了很多扇门。我开始觉得,可能我过去所有的技术选择都不一定是最好的。我开始思考,其实许多最流行的技术,它们之间并没有那么大的区别。
 
我开始意识到,相对于无脑崇拜某个我凑巧选择的技术,广泛地理解一系列技术和编程语言可以使我变得更有价值。
 
现在,我发现我对单个的技术理解得特别快,因为不再是“闭门造车”,我可以用我的大脑去比较和对比不同编程语言和技术之间的区别,这样使我对所有的一切都有了更深的理解。
 
说了这么多,我的观点就是,对技术的选择持封闭态度最后只会伤害你自己并限制你作为一个开发者的个人成长。
 
(这里又两本很好的书可以帮助你打破这些壁垒:《七周七种语言》和《七周七数据库》)
 
没有最好的
在结束这篇文章之前,但愿你能相信我说的”世上没有最好的技术或者编程语言“。
 
我不是在用说编程语言各有各的好、各自处理不同的情况来侮辱你的智商,。因为真相远比这个深刻。
 
在制作了超过40部非常广泛的技术和编程语言的课程之后,我发现了一些真相。
 
真相是,有很多很好的方法能做成同一件相同的事情,使用不同的工具和技术。
 
真相是,所有的编程语言和技术都有一些大错误和大弱点。
 
真相是,你学的不同技术越多,你越能发现大多数技术核心的东西是非常相似的。我指的是,编写软件的核心概念,无关乎技术和编程语言语法。
 
跟我一样,你也会发现,如果你愿意接受其他技术并且承认自己的无知,并从中学习,那么,不管你去了哪里,你都会找到很多乐于助人的友好人士,他们非常乐于把他们知道的东西教给你。
 
来源:Spike's Blog

提问的艺术

  在黑客世界里,当提出一个技术问题时,你能得到怎样的回答?这取决于挖出答案的难度,同样取决于你提问的方法。本指南旨在帮助你提高发问技巧,以获取你最想要的答案。 
  
  首先你必须明白,黑客们只偏爱艰巨的任务,或者能激发他们思维的好问题。 
  如若不然,我们还来干吗?如果你有值得我们反复咀嚼玩味的好问题,我们自会对你感激不尽。好问题是激励,是厚礼,可以提高我们的理解力,而且通常会暴露我们以前从没意识到或者思考过的问题。对黑客而言,“问得好!”是发自内心的大力称赞。
  
  尽管黑客们有蔑视简单问题和不友善的坏名声,有时看起来似乎我们对新手,对知识贫乏者怀有敌意,但其实不是那样的。 
  
  我们不想掩饰对这样一些人的蔑视--他们不愿思考,或者在发问前不去完成他们应该做的事。这种人只会谋杀时间--他们只愿索取,从不付出,无端消耗我们的时间,而我们本可以把时间用在更有趣的问题或者更值得回答的人身上。 
  我们称这样的人为“失败者”(由于历史原因,我们有时把它拼作“lusers”)。 
  我们在很大程度上属于志愿者,从繁忙的生活中抽出时间来解惑答疑,而且时常被提问淹没。所以我们无情的滤掉一些话题,特别是抛弃那些看起来象失败者的家伙,以便更高效的利用时间来回答胜利者的问题。 
  
  如果你觉得我们过于傲慢的态度让你不爽,让你委屈,不妨设身处地想想。我们并没有要求你向我们屈服--事实上,我们中的大多数人最喜欢公平交易不过了,只要你付出小小努力来满足最起码的要求,我们就会欢迎你加入到我们的文化中来。但让我们帮助那些不愿意帮助自己的人是没有意义的。如果你不能接受这种“歧视”,我们建议你花点钱找家商业公司签个技术支持协议得了,别向黑客乞求帮助。 
  
  如果你决定向我们求助,当然不希望被视为失败者,更不愿成为失败者中的一 员。立刻得到有效答案的最好方法,就是象胜利者那样提问--聪明、自信、有解决问题的思路,只是偶尔在特定的问题上需要获得一点帮助。 
  
  ======== 
  提问之前 
  ======== 
  
  在通过电邮、新闻组或者聊天室提出技术问题前,检查你有没有做到: 
  1. 通读手册,试着自己找答案。 
  2. 在FAQ里找答案(一份维护得好的FAQ可以包罗万象:)。 
  3. 在网上搜索(个人推荐google~~~)。 
  4. 向你身边精于此道的朋友打听。 
  
  当你提出问题的时候,首先要说明在此之前你干了些什么;这将有助于树立你的形象:你不是一个妄图不劳而获的乞讨者,不愿浪费别人的时间。如果提问者能从答案中学到东西,我们更乐于回答他的问题。 
  
  周全的思考,准备好你的问题,草率的发问只能得到草率的回答,或者根本得 不到任何答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。 
  
  小心别问错了问题。如果你的问题基于错误的假设,普通黑客(J. RandomHacker)通常会用无意义的字面解释来答复你,心里想着“蠢问题...”,希望着你会从问题的回答(而非你想得到的答案)中汲取教训。 
  
  决不要自以为够资格得到答案,你没这种资格。毕竟你没有为这种服务支付任何报酬。你要自己去“挣”回一个答案,靠提出一个有内涵的,有趣的,有思维激励作用的问题--一个对社区的经验有潜在贡献的问题,而不仅仅是被动的从他人处索要知识--去挣到这个答案。 
  
  另一方面,表明你愿意在找答案的过程中做点什么,是一个非常好的开端。 
  “谁能给点提示?”、“我这个例子里缺了什么?”以及“我应该检查什么地方?”比“请把确切的过程贴出来”更容易得到答复。因为你显得只要有人指点正确的方向,你就有完成它的能力和决心。 
  
  ======== 
  怎样提问 
  ======== 
  
  ------------ 
  谨慎选择论坛 
  ------------ 
  
  小心选择提问的场合。如果象下面描述的那样,你很可能被忽略掉或者被看作失败者: 
  1. 在风马牛不相及的论坛贴出你的问题 
  2. 在探讨高级技巧的论坛张贴非常初级的问题;反之亦然 
  3. 在太多的不同新闻组交叉张贴 
  
  ---------------------------- 
  用辞贴切,语法正确,拼写无误 
  ---------------------------- 
  
  我们从经验中发现,粗心的写作者通常也是马虎的思考者(我敢打包票)。 
  回答粗心大意者的问题很不值得,我们宁愿把时间耗在别处。 
  
  正确的拼写,标点符号和大小写很重要。
  更一般的说,如果你的提问写得象个半文盲,你很有可能被忽视。
  
  如果你在使用非母语的论坛提问,你可以犯点拼写和语法上的小错--但决不能 
  在思考上马虎(没错,我们能弄清两者的分别)
  
  ---------------------------- 
  使用含义丰富,描述准确的标题 
  ---------------------------- 
  
  在邮件列表或者新闻组中,大约50字以内的主题标题是抓住资深专家注意力的黄金时机。别用喋喋不休的“帮帮忙”(更别说“救命啊!!!!!”这样让人反感的话)来浪费这个机会。不要妄想用你的痛苦程度来打动我们, 
  别用空格代替问题的描述,哪怕是极其简短的描述。 
  
  蠢问题: 
  救命啊!我的膝上机不能正常显示了! 
  
  聪明问题: 
  XFree86 4.1下鼠标光标变形,Fooware MV1005的显示芯片。 
  
  如果你在回复中提出问题,记得要修改内容标题,表明里面有一个问题。一个 看起来象“Re:测试”或者“Re:新bug”的问题很难引起足够重视。另外,引 用并删减前文的内容,给新来的读者留下线索。 
  
  ------------------ 
  精确描述,信息量大 
  ------------------ 
  
  1. 谨慎明确的描述症状。 
  2. 提供问题发生的环境(机器配置、操作系统、应用程序以及别的什么)。 
  3. 说明你在提问前是怎样去研究和理解这个问题的。 
  4. 说明你在提问前采取了什么步骤去解决它。 
  5. 罗列最近做过什么可能有影响的硬件、软件变更。 
  
  尽量想象一个黑客会怎样反问你,在提问的时候预先给他答案。 
  
  Simon Tatham写过一篇名为《如何有效的报告Bug》的出色短文。强力推荐你也读一读。 
  
  -------- 
  话不在多 
  -------- 
  
  你需要提供精确有效的信息。这并不是要求你简单的把成吨的出错代码或者数据完 全转储摘录到你的提问中。如果你有庞大而复杂的测试条件,尽量把它剪裁得越小 越好。 
  
  这样做的用处至少有三点。第一,表现出你为简化问题付出了努力,这可以使你得 到回答的机会增加;第二,简化问题使你得到有用答案的机会增加;第三,在提炼 你的bug报告的过程中,也许你自己就能找出问题所在或作出更正。 
  
  ------------------ 
  只说症状,不说猜想 
  ------------------ 
  
  告诉黑客们你认为问题是怎样引起的没什么帮助。(如果你的推断如此有效,还用 向别人求助吗?),因此要确信你原原本本告诉了他们问题的症状,不要加进你自 己的理解和推论。让黑客们来诊断吧。 
  
  蠢问题: 
  我在内核编译中一次又一次遇到SIG11错误,我怀疑某条飞线搭在主板的走线上了, 这种情况应该怎样检查最好? 
  
  聪明问题: 
  我自制的一套K6/233系统,主板是FIC-PA2007 (VIA Apollo VP2芯片组),256MB Corsair PC133 SDRAM,在内核编译中频频产生SIG11错误,从开机20分钟以后就有这种情况,开机 
  前20分钟内从没发生过。重启也没有用,但是关机一晚上就又能工作20分钟。所有 内存都换过了,没有效果。相关部分的典型编译记录如下...。 
  
  ------------------ 
  按时间顺序列出症状 
  ------------------ 
  
  对找出问题最有帮助的线索,往往就是问题发生前的一系列操作,因此,你的说明 应该包含操作步骤,以及电脑的反应,直到问题产生。
  
  如果你的说明很长(超过四个段落),在开头简述问题会有所帮助,接下来按时间 顺序详述。这样黑客们就知道该在你的说明中找什么。 
  
   -------------- 
  
  明白你想问什么 
  
  -------------- 
  
  漫无边际的提问近乎无休无止的时间黑洞。最能给你有用答案的人也正是最忙的人(他们忙是因为要亲自完成大部分工作)。这样的人对无节制的时间黑洞不太感冒,因此也可以说他们对漫无边际的提问不大感冒。 
  
  如果你明确表述需要回答者做什么(提供建议,发送一段代码,检查你的补丁或是别的),就最有可能得到有用的答案。这会定出一个时间和精力的上限, 便于回答者集中精力来帮你,这很凑效。 
  
  要理解专家们生活的世界,要把专业技能想象为充裕的资源,而回复的时间则是贫乏的资源。解决你的问题需要的时间越少,越能从忙碌的专家口中掏出答案。 
  
  因此,优化问题的结构,尽量减少专家们解决它所需要的时间,会有很大的帮助--这通常和简化问题有所区别。因此,问“我想更好的理解X, 
  
  能给点提示吗?”通常比问“你能解释一下X吗?”更好。如果你的代码 不能工作,问问它有什么地方不对,比要求别人替你修改要明智得多。 
  
  ------------------------ 
  
  别问应该自己解决的问题 
  
  ------------------------ 
  
  黑客们总是善于分辨哪些问题应该由你自己解决;因为我们中的大多数都 
  
  曾自己解决这类问题。同样,这些问题得由你来搞定,你会从中学到东西。 
  
  你可以要求给点提示,但别要求得到完整的解决方案。 
  
  ---------------- 
  
  去除无意义的疑问 
  
  ---------------- 
  
  别用无意义的话结束提问,例如“有人能帮我吗?”或者“有答案吗?”。 
  
  首先:如果你对问题的描述不很合适,这样问更是画蛇添足。其次:由于这 样问是画蛇添足,黑客们会很厌烦你--而且通常会用逻辑上正确的回答来表 示他们的蔑视,例如:“没错,有人能帮你”或者“不,没答案 ”。 
  
  ---------------------------- 
  
  谦逊绝没有害处,而且常帮大忙 x
  
  ---------------------------- 
  
  彬彬有礼,多用“请”和“先道个谢了”。让大家都知道你对他们花费时间提供帮助心存感激。 
  
  然而,如果你有很多问题无法解决,礼貌将会增加你得到有用答案的机会。 
  
  (我们注意到,自从本指南发布后,从资深黑客处得到的唯一严重缺陷反馈,就是对预先道谢这一条。一些黑客觉得“先谢了”的言外之意是过后就不会再感谢任何人了。我们的建议是:都道谢。) 
  
  ------------------------ 
  
  问题解决后,加个简短说明 
  
  ------------------------ 
  
  问题解决后,向所有帮助过你的人发个说明,让他们知道问题是怎样解决 的,并再一次向他们表示感谢。如果问题在新闻组或者邮件列表中引起了 广泛关注,应该在那里贴一个补充说明。 
  
  补充说明不必很长或是很深入;简单的一句“你好,原来是网线出了问题!谢谢大家--Bill”比什么也不说要强。事实上,除非结论真的很有技术含量,否则简短可爱的小结比长篇学术论文更好。说明问题是怎样解决的,但大可不必将解决问题的过程复述一遍。 
  
  除了表示礼貌和反馈信息以外,这种补充有助于他人在邮件列表/新闻组/论坛中搜索对你有过帮助的完整解决方案,这可能对他们也很有用。 
  
  最后(至少?),这种补充有助于所有提供过帮助的人从中得到满足感。 
  
  如果你自己不是老手或者黑客,那就相信我们,这种感觉对于那些你向他们求助的导师或者专家而言,是非常重要的。问题久拖未决会让人灰心;黑客们渴望看到问题被解决。好人有好报,满足他们的渴望,你会在下次贴出新问题时尝到甜头。 
  
  ---------- 
  
  还是不懂 
  
  ---------- 
  
  如果你不是很理解答案,别立刻要求对方解释。象你以前试着自己解决问题时那样(利用手册,FAQ,网络,身边的高手),去理解它。如果你真的需要对方解释,记得表现出你已经学到了点什么。 
  
  比方说,如果我回答你:“看来似乎是zEntry被阻塞了;你应该先清
  除它。”,然后: 
  
  一个很糟的后续问题:“zEntry是什么?” 
  
  聪明的问法应该是这样:“哦~~~我看过帮助了但是只有-z和-p两个 
  参数中提到了zEntry而且还都没有清楚的解释:<你是指这两个中的 
  哪一个吗?还是我看漏了什么?” 
  
  ========== 
  
  三思而后问 
  
  ========== 
  
  以下是几个经典蠢问题,以及黑客在拒绝回答时的心中所想: 
  
  问题:我能在哪找到X程序? 
  
  问题:我的程序/配置/SQL申明没有用 
  
  问题:我的Windows有问题,你能帮我吗? 
  
  问题:我在安装Linux(或者X)时有问题,你能帮我吗? 
  
  问题:我怎么才能破解root帐号/窃取OP特权/读别人的邮件呢? 
  
  提问:我能在哪找到X程序? 
  
  回答:就在我找到它的地方啊蠢货--搜索引擎的那一头。天呐! 
  
  还有人不会用Google吗? 
  
  提问:我的程序(配置、SQL申明)没有用 
  
  回答:这不算是问题吧,我对找出你的真正问题没兴趣--如果要 
  
  我问你二十个问题才找得出来的话--我有更有意思的事要做呢。 
  
  在看到这类问题的时候,我的反应通常不外如下三种: 
  
  1. 你还有什么要补充的吗? 
  
  2. 真糟糕,希望你能搞定。 
  
  3. 这跟我有什么鸟相关? 
  
  提问:我的Windows有问题,你能帮我吗? 
  
  回答:能啊,扔掉萎软的垃圾,换Linux吧。 
  
  提问:我在安装Linux(或者X)时有问题,你能帮我吗? 
  
  回答:不能,我只有亲自在你的电脑上动手才能找到毛病。 
  
  还是去找你当地的Linux用户组寻求手把手的指导吧(你能在这儿找到用户组的清单)。 
  
  提问:我怎么才能破解root帐号/窃取OP特权/读别人的邮件呢? 
  
  回答:想要这样做,说明你是个卑鄙小人;想找个黑客帮你,说明你是个白痴! 
  
  ============== 
  
  好问题,坏问题 
  
  ============== 
  
  最后,我举一些例子来说明,怎样聪明的提问;同一个问题的两种问法被放在一起,一种是愚蠢的,另一种才是明智的。 
  
  蠢问题:我可以在哪儿找到关于Foonly Flurbamatic的资料? 
  
  这种问法无非想得到“STFW”这样的回答。 
  
  聪明问题:我用Google搜索过“Foonly Flurbamatic 2600”,但是 
  
  没找到有用的结果。谁知道上哪儿去找对这种设备编程的资料? 
  
  这个问题已经STFW过了,看起来他真的遇到了麻烦。 
  
  蠢问题:我从FOO项目找来的源码没法编译。它怎么这么烂? 
  
  他觉得都是别人的错,这个傲慢自大的家伙 
  
  聪明问题:FOO项目代码在Nulix 6.2版下无法编译通过。我读过了FAQ, 但里面没有提到跟Nulix有关的问题。这是我编译过程的记录,我有什么 做得不对的地方吗? 
  
  他讲明了环境,也读过了FAQ,还指明了错误,并且他没有把问题的责任 推到别人头上,这个家伙值得留意。 
  
  蠢问题:我的主板有问题了,谁来帮我? 
  
  普通黑客对这类问题的回答通常是:“好的,还要帮你拍拍背和换尿布 吗?” ,然后按下删除键。 
  
  聪明问题:我在S2464主板上试过了X、Y和Z,但没什么作用,我又试了 A、B和C。请注意当我尝试C时的奇怪现象。显然边带传输中出现了收缩,但结果出人意料。在多处理器主板上引起边带泄漏的通常原因是什么? 
  
  谁有好主意接下来我该做些什么测试才能找出问题? 
  
  这个家伙,从另一个角度来看,值得去回答他。他表现出了解决问题的 能力,而不是坐等天上掉答案。 
  
  在最后一个问题中,注意“告诉我答案”和“给我启示,指出我还应该做什么诊断工作”之间微妙而又重要的区别。 
  
  事实上,后一个问题源自于2001年8月在Linux内核邮件列表上的一个真实的提问。我(Eric)就是那个提出问题的人。我在Tyan S2464主板上观察到了这种无法解释的锁定现象,列表成员们提供了解决那一问题的重要信息。 
  
  通过我的提问方法,我给了大家值得玩味的东西;我让人们很容易参与并且被吸引进来。我显示了自己具备和他们同等的能力,邀请他们与我共同探讨。我告诉他们我所走过的弯路,以避免他们再浪费时间,这是一种对他人时间价值的尊重。 
  
  后来,当我向每个人表示感谢,并且赞赏这套程序(指邮件列表中的讨论 --译者注)运作得非常出色的时候,一个Linux内核邮件列表(lkml)成员表示,问题得到解决并非由于我是这个列表中的“名人”,而是因为 我用了正确的方式来提问。 
  
  我们黑客从某种角度来说是拥有丰富知识但缺乏人情味的家伙;我相信他是对的,如果我象个乞讨者那样提问,不论我是谁,一定会惹恼某些人或者被他们忽视。他建议我记下这件事,给编写这个指南的人一些指导。 
  
  ================ 
  
  找不到答案怎么办 
  
  ================ 
  
  如果仍得不到答案,请不要以为我们觉得无法帮助你。有时只是看到你问题的人不知道答案罢了。没有回应不代表你被忽视,虽然不可否认这种差别很难区分。 
  
  总的说来,简单的重复张贴问题是个很糟的想法。这将被视为无意义的喧闹。 
  
  喧闹。 
  
  你可以通过其它渠道获得帮助,这些渠道通常更适合初学者的需要。 
  
  有许多网上的以及本地的用户组,由狂热的软件爱好者(即使他们可能从没亲自写过任何软件)组成。通常人们组建这样的团体来互相帮助并帮助新手。 
  
  另外,你可以向很多商业公司寻求帮助,不论公司大还是小(RedHat和LinuxCare就是两个最常见的例子)。别为要付费才能获得帮助而 
  感到沮丧!毕竟,假使你的汽车发动机汽缸密封圈爆掉了--完全可能如此--你还得把它送到修车铺,并且为维修付费。就算软件没花费你一分钱,你也不能强求技术支持总是免费的。 
  
  对大众化的软件,就象Linux之类而言,每个开发者至少会有上万名用户。 
  
  根本不可能由一个人来处理来自上万名用户的求助电话。要知道,即使你要为帮助付费,同你必须购买同类软件相比,你所付出的也是微不足道的(通常封闭源代码软件的技术支持费用比开放源代码软件要高得多,且内容也不那么丰富)。