??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品第五页中文字幕,午夜亚洲www湿好大,亚洲精品无AMM毛片http://m.tkk7.com/emu/articles/160802.htmlemuemuThu, 15 Nov 2007 09:41:00 GMThttp://m.tkk7.com/emu/articles/160802.htmlhttp://m.tkk7.com/emu/comments/160802.htmlhttp://m.tkk7.com/emu/articles/160802.html#Feedback0http://m.tkk7.com/emu/comments/commentRss/160802.htmlhttp://m.tkk7.com/emu/services/trackbacks/160802.html阅读全文

emu 2007-11-15 17:41 发表评论
]]>
[转]l计机pd生的 http://m.tkk7.com/emu/articles/62309.htmlemuemuTue, 08 Aug 2006 02:41:00 GMThttp://m.tkk7.com/emu/articles/62309.htmlhttp://m.tkk7.com/emu/comments/62309.htmlhttp://m.tkk7.com/emu/articles/62309.html#Feedback0http://m.tkk7.com/emu/comments/commentRss/62309.htmlhttp://m.tkk7.com/emu/services/trackbacks/62309.html

http://chinese.joelonsoftware.com/Articles/AdviceforComputerScienceC.html

l计机pd生的


作者: 周思博 (Joel Spolsky)
译: Chen Bin
2005q???

虽然大概一两年前我q在夸夸其谈桌面应用E序是将来的潮流Q大学生们现在还是偶向我请教职业发展的问题。所以我把我的徏议写下来。以供学生们阅读Q嘲W,忽略?/p>

大多数锐气十的学生从来不向前辈征求意见。在计算机科学领域,q样做是正确的。因为前辈们很可能说些“在2010q前Q市场对于那些只会敲击键盘的代码工h的需求将会超q一亿(因此前景是乐观的Q”,或者诸如“Lisp语言现在真的很热门”?/p>

我和那些前辈也差不多Q当我给别hӞ实际上我不知道自己在说些什么。我是如此的落后于时,以至于连AIM也搞不明白,而不得不使用 emailQ恐龙时代的产品Q在那个时代Q音乐是d扁扁的的圆圆的盒子上Q噢Q那U盒子叫cdQ。(译者按Q我认ؓ儿q里在说反话Q后文很多地方作者都在说反话Q读者尽量理解这U美国式q默吧。)

所以你最好不要理睬我要说的Q你应该立刻d作某U?a >在线交友软g?/p>

然而,

如果你喜Ƣ编E,那就感谢上帝?你属于幸q的数人,q些人喜Ƣ工作,他们的工作可以保证他们能q上舒适的生活。大多数人没有这么幸q。对大多Ch来说Q工作是不愉快的Q忍受工作的目的攒钱Q是Z在年?5岁退休后能过上自己想q的生活。如果他们想q的生活不需要灵zȝ膝盖Q明亮的眼镜Q轻盈的脚步的话?/p>

现在让我回到主题Q我提供一些徏议?/p>

好了Q不|嗦了,下面是Joell计机pd生们七条免费的徏?

  1. 毕业前学会写?
  2. 毕业前学会C语言
  3. 毕业前学习微观经学QmicroeconomicsQ?
  4. 不要因ؓ某些非计机评枯燥无趣敬而远?
  5. 学习有大量编E实늚评
  6. 不要担心工作都跑到印度去?
  7. 好好做夏季毕业实?/li>

让我逐条解释q些。但解释之前我要说明一下,如果因ؓq些是Joel的徏议你打无条g地接受,以至于连我的理由都想跌Q那么你太单纯Q太Ҏ被别人骗了。如果你是那U单U的人,我还要给你第八条Q找心理ȝ咨询一下如何培养自信(self-esteemQ?/p>

毕业前学会写?/strong>

如果Linus Torvalds不懂如何布道的话QLinux会成功吗Q?正象每一个黑客,Linus_N写作,他知道如何准地在email和邮件讨论组中用书面英语表达自q思想Q所以他能够从全世界召集大量志愿者ؓLinux工作?/p>

你听说过最q风靡全世界的极限编E(Extreme ProgrammingQ吗Q?即你不懂什么是极限~程Q你臛_听说q这个词。ؓ什么?因ؓ宣传极限~程的h都是天才的作者和演说家?

q看你w边的那些小型的软g开发组l吧Q最有权力和影响力的人是那些可以用自信,准确Q舒适的p交流的h。好吧,我承认这些h也许aq其实,但是你无可奈何?/p>

一个合格的E序员和一个伟大的E序员的区别不在于知道多种~程语言Q不在于他们?a >喜欢Python或者JavaQ而是在于他们是否擅长表达。他们能够说服,所以他们获得权力。他们能够写清楚明白的评论和接口文档Q所以他们得别Z?a >重写Q而可以重用他们的代码Q否则他们的代码是毫无用处的。他们也能够写出清晰的用h册,于是最l用户可以理解他们的代码是做什么用的,明白了他们的工作的h倹{sourceforge埋葬着许多_的代码,q些已死的代码无Z用,因ؓ代码的作者很写Q或者根本不写)用户手册?/p>

我不会雇佣一个不懂写作的E序员。如果你擅长写,你就很容易找到工作,紧接着你就会被要求写技术规格文档,q意味着你已l被理层注意到了?/p>

大学里有一些课E,要求你做很多的写作练习,不要犹UQ赶快参加这些课E。不要错qQ何要求你每周或者每天练习写作的评?

l自己徏立一个网l日志(weblogQ。在上面写的多Q你会写地越Ҏ。写地越ҎQ你写地越多,q是一个正向地循环Ȁ励?/p> 毕业前学会C语言

我可没有说是C++。虽然现在用C的工作不多,但是掌握各种~程语言的程序员事实上用C来交(lingua francaQ;更重要的是,C比某些“现代”语a更接q机器语a。我不管现在大学里在教什么流行的垃圾语言Qtrendy junkQ,你至得׃个学期接q机器。否则,你不可能使用高语言写出高效的代?/a>。这意味q你不会有机会写~译器或者操作系l,也许q是更好的编E工作;别h不会怿你能够ؓ大项目设计架构。无Z知道多少高的控制结构,知道如何q行错误处理Q如果你不能解释Z?strong>while Q?s++ = *t++Q?的意思是q行字符串拷贝(而且对你而言q是世界上最自然Q最易懂的代码)Q那么你是在对~程一H不通的状态下~程Qprogramming based on superstitionQ。打个比方,好比一个医生不懂基本的解剖学就l你开处方Q如果你问这个医生ؓ什么开q种药而不是那U药Q他会说因ؓ医药销售代表说q种药有用?/p>

毕业前学习微观经学QmicroeconomicsQ?/strong>

我个人对l济学的一些理解:在经学刚诞生的时候,它只是局限于有限的领域,在这些领域中Z发展和发C很多有用的理论和很有的事实Q这些理论和事实是从逻辑上是可以证明的。然后, l济学开始走下坡路了?“有限的领域”就是微观经学Q它对于商业可以q行有意义的指导。然后,事情开始变p了Q以下部分你可以跌Q,你接下来到的是讨论诸如׃率和银行利率之间关系之类东东的宏观经学Q很多时候宏观经学讨论的理论都是无法证明正或者错误的。接下来事态更加恶化了Q经学中的一些领域开始和物理学搭界,嗯,学习物理l济学也怽帮你在华街扑ֈ好工作。言归正传,无论如何请学习微观经学Q因Z需要知道什么是“供l和需求”,什么是竞争优势Q什么是净现|NPVsQNet Present ValueQ指目l济寿命期内现金入d与现金流出d之差额)Q什么是折扣和边际效用(discounting and marginal utilityQ,如果你真想了解商业是如何q作的话?/p>

Z么计机pȝ学生要学习经学Q因为理解商业基本规律的E序员对商业界来说是宝贵的程序员。我记得无数个程序员使我非常沮Q因Z们在代码中坚持某些疯狂的设计Q这些设计从技术上来说Q完;从资本主义的角度来看Q发疯。如果你是一个理解商业的E序员,商业会给你回报。这是你要学习l济学的原因?/p>

不要因ؓ某些非计机评枯燥无趣敬而远?/strong>

首先Q你需要让你的学分q_分(GPAQ看h漂亮炏V?/p>

不要低估学分q_分的威力。很多雇dZl理Q包括我Q阅ȝ历时首先看成l,Z么?因ؓq代表了大部分的教授在很长的时期内对你的学业的一个^均的看法。托成l(国的托大致相对于我国的高考中的语文考试Q?哈,几个时的测验而已。当然学分不一定说明了一切,如果你修的是很难的课E,学分有可能低一炏V即使你的学分^均分很高Q我q是要看各科分数是否一?/em>。如果你应聘的是软g工程师职位,我ؓ什么要兛_你在大学里学的欧z历史课E分数的高低呢?毕竟Q历史很枯燥。那么要是你要编E的部分也是很枯燥的Q你是不是要攑ּ了?事实上,有时候编E是枯燥的,如果你不能忍受编E中的枯燥部分的话,你就不能完成整个工作Q雇M愿意雇䄦你这L员工?/p>

我在大学里修q一门叫做“文化hcd”的评Q因为那时候我也搞不懂我到底要学什么,听v来这么课E可能还蛮有意思的?/p>

Z我的意料。我不得不阅d量讲q巴西热带雨林中的印W安人如何如何的书,让h真昏昏欲睡。听老师讲解也好不到哪去Q我发觉看教室外的草如何长更有趣炏V土著h如何烤蕃薯藤和我有什么关p?我ؓ什么要去讨论如何烤蕃薯藤?但是期中考试马上pCQ我暗暗下定军_Q如果我能跨“文化hcd”这个障,以后也许没有什么能隑ր我了。我军_得Aq且得到了A。以后当我不得不坐在林肯中心Q连?8个小时的瓦格U的《尼伯龙根的指环》时Q我l于明白我ؓ什么要学习“文化hcd”了Q相比之下,我也能忍受这U歌剧了?/p>

学习有大量编E实늚评

我还记得军_不去ȝI生的那一刅R?/p>

是在学?a >《动态逻辑》(Dynamic LogicQ?/a>q门评时候,我记得是耉的Lenore ZuckQ一个天才的教师Q教的?/p>

修这门课的时候,我已l不再是雄心勃勃了。我可不指望在这么课E中得个AQ我梦想的是混个及格。逻辑本质上是很简单的Q如果结论正,前提必须正确。例如,如果“所有读书好的h都能扑ֈ工作”ƈ且“张三的M好”,那么“张三能够找到好工作”。就q么单?/p>

但是我要学的是动态逻辑Q?动?/em>逻辑和一般逻辑差不多,但是要考虑旉因素。例如,“在你开?em>之后Q你可以看见你的鞋子”加上“过ȝ被打开了”意味着“你现在可以看到你的鞋子?/p>

动态逻辑学对于象Zuck教授q样的天才理论家来说非常׃hQ因门学U的知识也许可以用来证明计算机程序是否正。我记得在第一堂课上,Z证明“如果你有一盏关着的灯”ƈ且“你按了一下开关”,那么“现在灯亮了”,Zuck教授׃用了两黑板加上边上的墙壁?/p>

证明q程难以|信的复杂。我觉得如此复杂的证明过E很可能会有错误,但是我没办法证明证明q程本n是正的。事实上Q写在黑板上的证明蟩q了很多中间步骤Q许多步的证明用了演绎法,使用了归UxQ以及一些研I生才懂的证明方法?/p>

作ؓ译֐作业Q我们需要证明以下命题:如果灯过L关着的,q且现在它是开着的,误明有人按了开?/p>

我真的试着证明它了?/p>

我花了许多小Ӟ试图证明q个命题?/p>

在无C时的努力后Q我发觉Zuck博士的原始的证明有一个逻辑上的错误Q也许这个错误是我的W记抄错了,我不知道。于是我l于认识刎ͼ如果Z证明一个简单的问题需要花三个时写下几黑板的证明步骤Q再考虑到这个O长的证明q程中可能会引入U种错误Q那么这U机制是不可能用来证明Q?em>有趣?/em>东西的?

对动态逻辑学家来说Q?em>有用是无关紧要的?/p>

于是我退Z那门评Q发誓永q不会去读计机pȝ研究生?/p>

q个故事的主题是Q计机U学和Y件开发不一栗如果你非常非常q运Q你的学校会开软g开发的评。然而,他们也可能不开q样的课E,因ؓ名牌大学认ؓ教授实用技巧的事情应该留给那些二三的技术学院或者某些释攄人再安置计划。你可以在Q何地方学?em>~程Q我们是耉大学Q我们培L来的世界领导人。你付给耉16万美元的学费是Z学习如何写@环语句吗Q你把耉当成什么地方了QJava速成班吗Q哼?/p>

问题在于Q我们没有一个专业的学校教授软g开发。所以如果你xZ个程序员Q你可以q计机p读书(当然计算机科学也值得学习Q,但是你学?em>不是软g开发?/p>

如果走运的话Q你可以在计机pd掘出很多有大量编E实늚评Q就象你能在历史pL到很多提供写作水q的评一栗这些课E绝对值得学习。如果你喜欢~程Q不要ؓ你不能上教授诸如lambda子或者线性代数的评沮Q在那里你连怸下计机的机会都没有。找扄有没有名字中带有“实习(PracticumQ”字L评Q不要在乎Practicum是个拉丁语。有用的Q无奈状Q课E就是需要在评名中塞一些拉丁语Q才能从那些装模作样QLiberal Artsy FartsyQ管理层的眼前蒙淯兟?/p>

不要担心工作都跑到印度去?/strong>

啊哈Q如果你人在印度Q你无所谓了。愿你n受外包带来的工作Zqn体健店?/p>

但是我听说现在愿意读计算机系的学生越来越了。据说原因之一是工作机会都跑到印度M。我认ؓq种观点是大错特错。首先,Ҏ眼前的商业时选择事业是非常愚蠢的。其ơ,即工作真的都跑到印度和中国MQ编E对于其他有的工作来说都是极好的训l,例如业务程工程Qbusiness process engineeringQ。第三,无论是在国q是印度Q好E序员仍然是非常短缺的,L信我。当Ӟ现在有许多所谓搞IT的h吵吵嚷嚷地说׃形势不好Q工作太难找。但是事实如何?恕我直言Q好E序员找工作q是很容易。第四,你还有更好的L吗?历史pȝ毕业生找工作更容易吗Q去法学院如何?据我所知,99Q的律师恨他们的工作Q每分钟都恨。而且律师一周工?0时。正象我以前说过的,如果你喜Ƣ计机Q那么感谢上帝,你将属于全世界h中的极少数的q运儿,q些q运儿热׃们的工作Q而且工作也可以提供体面的收入?/p>

实际上,我也不认为报考计机pȝ来越有多大的意义。相对于internet泡沫时期大家都疯狂的往计算机系挤,现在的h数回落只是回归正常水q已。在泡沫时期Q我们这个行业涌入了许多对计机毫无兴趣的南郭先生,他们梦想的是拿着高的吓h的薪水加׃h的期权,然后q轻退休。谢天谢圎ͼ现在q些人都跑了?/p>

好好做夏季毕业实?/strong>

明智的招聘者知道热qE的人初中就为当地的牙医写数据库E序Q高中就在计机夏o营教课,为校报规划网站,在某个Y件公司做实习。他们找的就是这L人?/p>

如果你喜Ƣ编E,你最Ҏ犯的最大的错误是“有zd接”。我知道Q其他专业的学生假期打工可顾不了q些条条框框。但是你不一P你拥有一U特D技能,不要费它。当你毕业时Q你的简历上应该已经|列一堆的~程工作实习。让其他人去“ؓ大家提供UR服务”(Tom Welling是个例外Q他业余旉LhQ?/p>

最后,Z让你的生zLҎ一点,也ؓ了说明我q篇文章是能够自圆其说的Q我给我自q公司的做做广告。我的公司Fog Creek软g公司Q可以ؓ大学生提?a >软g开发方面的实习Z。在我们公司Q你可以学习“编码,开发,商业”。去q在我们公司实习的Ben是q么说的Q可不是因ؓ我给他什么好处他才这么说。二月一h臻I抓紧Z吧?/p>

如果你听了我的徏议,你就会太早地卖掉Microsoft公司的股,拒绝Google提供的职位,原因是因Z已经拥有自己的公怺。到时候可别后悔,更别怪我Q呵c?/p>

本文最先用英文出版Q题?/span> Advice for Computer Science College Students

emu 2006-08-08 10:41 发表评论
]]>
[转]L面试扑ֈ理想员工Q非官方的面试技术指?/title><link>http://m.tkk7.com/emu/articles/62308.html</link><dc:creator>emu</dc:creator><author>emu</author><pubDate>Tue, 08 Aug 2006 02:40:00 GMT</pubDate><guid>http://m.tkk7.com/emu/articles/62308.html</guid><wfw:comment>http://m.tkk7.com/emu/comments/62308.html</wfw:comment><comments>http://m.tkk7.com/emu/articles/62308.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/emu/comments/commentRss/62308.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/emu/services/trackbacks/62308.html</trackback:ping><description><![CDATA[ <a >http://chinese.joelonsoftware.com/Articles/Interviewing.html</a> <a > </a> <br /> <br /> <table class="slugTable" cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td> <p class="slugText"> <strong>L面试扑ֈ理想员工Q非官方的面试技术指?/strong> </p> </td> </tr> </tbody> </table> <br /> <font color="#808080"> </font> <font color="#808080"> <font size="2">作者: 周思博 (Joel Spolsky)<br />译: Chen Bin <br />~辑Q?Rick Ju <br />2000q??3?br /></font> <br /> </font> <p>雇䄦合适的人对于Fog Creek软g公司来说是非常关键的。在我们q个领域Q有三类人可以挑选。在一个极? 是哪些؜q来? 甚至~Z最基本的工作技? 只要问这cMh两三个简单的问题Q再M下他们的历,可以轻易地剔除他们。另一个极端的cd?<a target="_blank">才华横溢的超U明?/a> q些Z仅ؓ了好玩就用汇~语a为Palm PilotQ一U手掌电脑)写了一个LispQ一Uh工智能编E语aQ编译器。在q两U极端类型中间的是一大群不能定水^的候选者,也许他们中的某些q些什么?q里的关键是明白明星和那一大堆属于中间cd的h的区别,因ؓFog Creek软g公司只雇佣超U明星。下面我要介l一些找U明星的技巧?</p> <p>Fog Creek公司最重要的雇佣标准是: </p> <blockquote> <b> <p>有头? q且<br />完成工作</p> </b> </blockquote> <p>是q些了。符合这h准的人就是我们公叔R要的员工了?Cq条标准?每天上床前背诵这条标准。我们公司的目标之一是雇䄦拥有q样?i>潜质</i>的hQ而不是雇佣懂某些技术的人。Q何h所拥有的某些具体技术都会在几年内过Ӟ所以,雇䄦有能力学习新技术的人,要比雇䄦那些只在q一分钟知道SQL~程是怎么回事的h对公司更划算一炏V?/p> <p> <b>有头?/b>实是一个很隑֮义的品质。但是让我们看一些在面试时能提问的一些问题,通过q些提问Q我们可以找出拥有这U品质的人?b>完成工作</b>非常关键。看h<b>有头?/b>但是不能<b>完成工作</b>的hl常拥有博士学位Q在大公司工作过Q但是在公司中没有h听他们的Q因Z们是完全q实际的。比起准时交zdQ他们宁愿对于一些学院派的东西沉思。这些h׃下特性而可以识别出来。他们L爱指Z个根本不同的概念间的怼性。例如,他们会说“Spreadsheets是一U特D的~程语言?然后׃个礼拜写一动人的Q智慧的白皮书。这白皮书了,作ؓ一个编E语aQspreadsheet关于计算语言Ҏ的Ҏ面面。聪明,但是没用?/p> <p>现在Q我们来谈谈<b>完成工作</b>但是没有<b>头脑</b>的h。他们爱做蠢事。从来也没有考虑q将来得靠他们自己或者别的什么h来亡补牢。通过刉新的工作,他们成ؓ了公司的<i>负?/i>而不是资产。因Z们不仅没有ؓ公司贡献价|q浪费了好员工的旉。这些h通常到处_脓大堆的代码,而不愿意写子E序。他们是完成了工作,但是不是以最聪明的方式完成工作?/p> <p>面试时最重要的法则是: </p> <blockquote> <b> </b> <p> <b>做决?/b> </p> </blockquote> <p>在面试结束时Q对于被面试者,你不得不做一个直截了当的军_。这个决定只有两个结果:<b>雇䄦</b>或?b>不雇?/b>. 回到你的电脑前,立刻用电子邮仉知招聘负责Z的决定。电子邮件的主题应该?b>雇䄦</b>或?b>不雇?/b>。接着你需要在正文中写两段来支持你的决?</p> <p>没有其他的答案?i>永远不要</i>_“雇佣你Q但是不能在我的团队中”。这是非常粗鲁的Q因Z在暗C应试者没有聪明到能有和你一起工作的资格Q但是以他的头脑适合q入那些天生输家队伍。如果你发觉自己被诱惑,惌出那句“雇佣你Q但是不能在我的队伍中”,那么q单的把这句话变成“不雇䄦”再说出口。这样就没事了。甚臛_果某个h在特定领域很能干Q但是在别的队伍中将会表C好,也是<b>不雇?/b>。事物变化的如此之快Q我们需要的是在M地方都能成功的h。如果某些情况下你发C一个白痴专Ӟ拥有某些Ҏ能力的白_Q这个专家对于SQL非常Q非常,非常的精通,但是除此之外什么也学不会,<b>不雇?/b>。在Fog Creek公司他们没有来?/p> <i> </i> <p> <i>永远不要</i>_“也许,我吃不准”。如果你吃不准,意味着<b>不雇?/b>。看Q比你想象的Ҏ的多。吃不准Q就说不Q同P如果?i>不能作出军_</i>Q那意味着<b>不雇?/b>。不要说Q”嗯Q雇佣,我想是这L。但是关?..Q我想知?...”。这U情况就?b>不雇?/b>?/p> <p>最重要的是Cq点Q放弃一个可能的好h要比招进一个坏人强Q译者按Q中国有位哲q,宁可错杀一千,不可放过一个,呵呵Q。一个不合格的求职者如果进入了公司Q将要消耗公司大量的金钱和精力。其他优U员工的还要浪Ҏ间来修复q个人的错误。如果现在你q在犹UQ?b>不雇?/b>?/p> <p>如果你是Fog Creek公司的面试官Q当你拒l了大量的应聘者时Q不要ؓFog Creek公司因此雇不到MZ而忧虑。这不是你的问题。这是招聘负责h的问题。这是h力资源部的问题。这是JoelQ译者注: Fog Creek公司的老板Q本文作者)的问题。但<i>不是</i>你的问题。不停地问自己,哪种情况更糟p?一U情冉|我们变成了一个庞大的Q糟p的软g公司Q充斥着许多脑袋I空如可可果壳的家伙Q另一U情冉|我们是一个小而高品质的公司。当Ӟ扑ֈ优秀的应聘者(q聘用他们)是很重要的。找到有头脑而且完成工作的h是公怸的每个员工的日常工作之一。但是当你作为Joel Creek公司的一员真的开始面试一个应聘者时Q要装作现在正有很多优秀的hx破头挤进Fog Creek公司。MQ无论找C个不错的应聘者是多么的难Q永q不要降低你的标准?/p> <p>但是你如何作出雇佣或者不雇䄦q样艰难的决定?你只要在面试q程中不停地问自己:<i>q个?b>有头?/b>吗?</i>q个<i><b>完成工作</b>吗?</i>要作出正的回答Q在面试时你必须问对问题?/p> <p>开个玩W,下面我要问个有史以来最差的面试问题: “Oracle 8i中的数据cdvarchar和varchar2有什么区别”这是一个可怕的问题。掌握这U琐的技术细节和Fog Creek公司想雇佣你之间没有M联系。谁会去记这U东西?如果有在U帮助,你可以在15U内扑ֈ{案?/p> <p>实际上,q有更差的问题,{会儿我会谈到的?/p> <p>现在我们要谈到有的部分了:面试时提哪些问题。我的面试问题清单来自于我去微Y公司扄一份工作的l历。这里实际上有几百个微Y面试问题。每个h都有偏爱的问题。你也可以发展一套自q面试问题以及面试的个人风|q样你就可以比较ҎC?b>雇䄦/不雇?/b>的决定。以下是我成功用过的一些面试技巧,</p> <p>在面试前Q我M遍应试者的历,然后在一张纸片上随便写以下我?i>面试计划</i>。这个计划实际上是我要问的问题清单。以下是一个例子(用来面试E序员的Q:</p> <ol> <ol> <b> <li>介绍 </li> <li>应试者参加过的项? </li> <li>无法回答的问? </li> <li>C语言函数 </li> <li>你满意吗Q? </li> <li>设计问题 </li> <li>挑战 </li> <li>你还有什么问题? </li> </b> </ol> </ol> <p>在面试前Q我非常Q非常当心,避免自己先入Z。如果在面试前你已l想当然地认为,一个麻省理工的博士一定是一个有头脑的h。那么在接下来的一时的面试时间内Q无论那个麻省理工的博士说什么都不能改变你的最初印象。如果在面试前你p个应试者是个傻瓜,那么他面试时说什么也无济于事。面试就象一个非常精巧的天^。一时的面试结束后p对一个h下结论是不容易的Q但是你又必d面试l束后得出结论)。一些不L的细节可能会影响最后的l论。如果你在面试开始前对于应试者有了一点了解的话,好比天q的某一端加上了重重的砝码。这样面试本w就会变得没有用处了。以前有一ơ在面试前,一个招聘负责h跑进我的戉K_“你肯定会爱上这个家伙的!" 对一个男? 天哪Q这直让我发疯。我本来应该_“嗯Q如果你q么定我会喜欢他,Z么你不干脆雇佣他,何必让我费旉来面试?”但是那时我q太q轻q稚, 所以还是面试了那个人。当q个家伙开始说一些蠢话时Q我对自pQ“哇塞,q应该是个例外情况,也许是大愚。”我开始带着玫瑰色眼镜看他了。于是我以说<b>“雇佣?/b>l束了面试,虽然他是一个糟p的面试者。接下来发生了什么事Q除了我Q其他的面试官都_<b>不要雇䄦</b>q个人。教训是Q不要听别的人的话,在面试应试者前不要四处打探q个面试者的情况。最重要的是不要和别的面考官谈论应试者,除非你们都已l作Z独立的判断。这才是U学的做法?/p> <p>作ؓ面试步骤的第一步,<i>介绍</i>的目的是让应试者放L。我通常?0U钟Q讲一下我是谁Q接下来面试会如何进行。我L使得应试者确信,我们兛_的是他(她)<i>如何</i>解决问题的,而不是他Q她Q的最l答案是对还是错。顺便说一下,面试Ӟ你不要和应试者隔着一个桌子坐着Q否则在你和面试者之间就有了一个障,q且暗示着一U比较正式严肃的气氛Q这样应试者就很难放松了。更好的办法是把桌子靠墙攄Q或者和应试者坐在桌子的同一边,q样有助于应试者放松。只有应试者不会因为紧张而表现失常,你才能更有效的进行面?</p> <p>W二步的内容是问应试者最q做了些什么项目。对刚毕业的学生, 如果有论文就问问论文, 没有的话, 问问他们做q什么很喜欢的大作业.例如Q有时候我会问一下,“你最喜欢上学期哪门课E?不一定要和计机相关的。”事实上Q如果应试者回{的评和计机没有关系Q我会比较高兴。有时候你会发现这个计机pd届生选择了尽可能的计算机相兌E,但是却选修了很多和音乐相关的课E。但是他Q她Q却说最喜欢的课E是《面向对象数据库》。哼|不错? 不过如果你直接承认你喜欢音乐胜于计算? 而不是在q儿胡说八道的话, 我会更高兴一炏V?/p> <p>当面试有工作l验的hӞ你可以让他们谈一下前一份工作?/p> <p>我问q个问题的目的是在寻找一样品质:<i>热情</i>。在应试者谈CQ她Q最q做q的目Ӟ你观察到以下q象都是不错的: </p> <ul> <li>谈到他们做过的项目时变得热情z溢Q他们的语速更快,语言更生动活泹{这说明他们Ҏ些东西有兴趣Q有热情Q因为现实中有许多hҎ做的目Ҏ漠不兛_呢)。即使他们激动地表达对做q的目的负面感情,q也是一个好的信受“我曄Z一个老板安装Foo Bar Mark IIQ但他是个傻瓜!”表现出热情的h是我们要雇佣的人。差的应试者对工作Ҏ׃兛_Q所以根本不会激动。一个非常好的信h当应试者很Ȁ动地谈论上一份工作,以至于暂时忘C他们正在被面试。有时候应试者刚开始面试时表现的很紧张 -- q是很正常的现象Q所以我通常忽略不计。但是当他们谈到单色计算艺术QComputational Monochromatic ArtQ时Q这个家伙变得极端兴? 一炚w不紧张了。不错,我喜Ƣ这L应试者,因ؓ他们兛_他们做的事。(什么是单色计算艺术Q拔掉你的电脑显C器的电源就可以看到了) </li> <li>能认真地去解释事情。某些h被我拒掉的原因就是他们不会用普通h能明白的语言去解释他们做q的目。很多工U专业的人L以ؓ所有h都知道Bates理论Q译者注: Bates TheoremQ一U经学的理论)或者Peano公理l(译者注: Peano's AxiomsQ数Z的一些定理)是什么。如果应试者开始满口行话了Q让他们停一停,然后你说Q“能帮我个忙吗?是Zl习一下,你能把刚才说的用我老祖母也能理解的话说一遍吗Q”但即便如此, 有些是l用那些术语, 而且Ҏ没法让h明白他们在说什么。天哪! </li> <li>如果q个目是一个团队项目,看看他们是否在有承担领导责Q的迹象?一个应试者可能会_“我们用的是XҎQ但是老板说应该是YQ而客戯应该是Z。”我会问Q“那?i>?/i>怎么做的Q”一个好的回{可能是“我设法和团队中别的人开了个会,然后一hZ办法...”坏的回{看h象,“嗯Q我什么也<i>不能</i>做。这L问题我解决不了。”记住,<b>聪明q且能完成工?/b>。要搞清楚某人是否能<b>完成工作</b>的一个办法就是看看他Q她Q过L否們֐于完成Q务。事实上Q你可以d要求他们l你个例子证明他们能担Q领导作用Q完成Q务。-例如克服公司的陈规陋习?</li> </ul> <p>现在我们谈谈清单上的W三ƾ,<i>无法回答的问?/i>。这很有。这个主意的关键在于问一些不可能有答案的问题Q就是想看一下应试者怎么办。“西雅图有多眼U医生?”“华盛顿U念有多重Q”“洛杉机有多加油站Q”“纽U有多少钢琴调音师??/p> <ul> <li>聪明的应试者猜C不是要测验他们的专业知识Q他们会U极地给Z个估计。“嗯Q洛杉机的h口是七百万;每个人^均拥?.5辆?..”当然如果他们的估计完全错误了也没有关系。重要的是他们能U极地试着回答问题。他们可能会试着搞清楚每个加油站的储量。“嗯Q需要四分钟l一个储油罐加满油,一个加油站有十个a泉|天运行十八个时...”他们也可能试着从占地面U来估计。有? 他们的想法的创造力让你吃惊. 而有? 他们直接要一个LA的黄去查。这都是好迹象? </li> <li>不聪明的应试者则被难住了。他们目瞪口呆地望着你,好像你来自火星。你不得不提C:“嗯Q如果你惛_立一个象z杉机那么大的城市,你需要徏立多个加a站?”你q可以提CZ们:“加满一个储油罐要多长时_”不q,q些榆木疙瘩脑袋q是只会坐在那里发呆Q你得拖着他们往前走才行。这cMh不会解决问题Q我们可不要q样的h?</li> </ul> <p>关于~程问题Q我通常要求应试者用C语言写一些小函数。以下是我通常会出的题目: </p> <ol> <li>一个字W串逆序 </li> <li>一个链表(linked listQ逆序 </li> <li>计算一个字节(byteQ里有多bit被置1 </li> <li>搜烦l定的字节(byteQ? </li> <li>在一个字W串中找到可能的最长的子字W串Q该字符串是由同一字符l成? </li> <li>字符串{换成整数 </li> <li>整数转换成字W串Q这个问题很不错Q因为应试者要用到堆栈或者strev函数Q?</li> </ol> <p>注意Q通常你不会希望他们写的代码多?行,因ؓ你没有时间理解太长的代码?/p>现在我们来详l看一看其中几个问? W一个问? 逆序一个字W串。我q辈子还没有见过那个面试者能把这题目一ơ做寏V所有的应试者都试图动态生成缓冲区Q然后将逆序的字W串输出到该~冲Z。问题的关键在于Q谁负责分配q个~冲区?谁又负责释放那个~冲区?通过q个问题Q我发现了一个有的事实Q就是大多数认ؓ自己懂C的h实际上不理解指针和内存的概念。他们就是不明白。这真叫人吃惊,无法惌q种Z能做E序员。但他们真的是Q这个问题可以从多个角度判断应试者:<br /><ul><li>他们的函数运行快吗?看一下他们多此调用?i>strlen</i>函数。我曄看到应试者写的strrev的算法竟然只有O(n^2) 的效率,而标准的法效率应该是O(n)Q效率如此底下的原因是因Z们在循环中一ơ又一ơ调?i>strlen</i>函数? </li><li>他们使用指针q算吗(译者按Q原文ؓpointer arithmeticQ指的是加减指针变量的|Q用指针运是个好现象。许多所谓的“CE序员”竟然不知道如何使用指针q算Qpointer arithmeticQ。当Ӟ我在前文说过我不会因为应试者不掌握一U特定的技巧而拒l他。但是,理解C语言中的指针不是一U技巧,而是一U与生俱来的才能。每q一所大学要招q?00多个计算机系的新生,所有这些小孩子4岁就开始用BASIC语言在Atari 800s写冒险游戏了。在大学里他们还学Pascal语言Q学得也很棒。直到有一天他们的教授讲了指针的概念,H然Q?i>他们开始搞不懂?/i>。他们就是不能再理解C语言中的M东西了。于?0%的计机pd生{pd学政d。ؓ了挽回面子,他们告诉朋友Q他们之所以{pL因ؓ他们计算机系׃貌美的异性太。许多h注定脑子里就没有理解指针的那根u。所以说理解指针是一U与生俱来的品质Q而不是一U单U的技巧。理解指针需要脑子{好几个弯Q某些h天生不擅长{q几个弯?/li></ul><p>W三个问题可以考考面试者对C的位q算的掌握,但这是一U技巧,不是一U品质,所以你可以帮助他们。有的{他们徏立了一个子函数用来计算byte中ؓ1的位的数目,然后你要求他们优化这个子函数Q尽量加快这个函数的q行速度。聪明的应试者会使用查表法Q毕竟这个表只有 256个元素,用不了多内存)Q整个表只需要徏立一ơ。跟聪明的应试者讨Z下提高时_I间效率的不同策略是十分有意思的事情. q一步告诉他们你不想在程序启动时初始化查询表。聪明的面试者可能会使用~冲机制Q对于一个特定的byteQ只有在W一ơ被查询时进行计,然后计算l果会被攑օ查询表。这样以后再被查询时直接查表p了。而特别特别聪明的面试q会试有没有徏立查询表的捷径,如一个byte和它的置1的bitC间有没有规律可@Q?/p><p>当你观察应试者写C代码Ӟ以下一些技巧会对你有帮助: </p><ul><li>事先向应试者说明,你完全理解,没有一个好的编辑器光在U怸写代码是困难的,所以你不在乎他们手写的代码是否看上M整洁。你也完全明白没有好的编译器和调试器Q很隄一ơ就写出完全没有bug的程序,所以请他们不必为此担心? </li><li>好程序员的标志:好程序员写完“{”符号后Q通常立刻跟上“}”符P然后再在当中填上代码。他们也們֐于用命名规则,虽然q个规则可能很原始。如果一个变量用作@环语句的索引Q好E序员通常使用可能少的字Wؓ它命名。如果他们的循环语句的烦引变量的名字是CurrentPagePositionLoopCounterQ显而易见他们写代码的经验还不够多。偶,你会看到一个CE序员写下象<b>if (0==strlen(x))</b>一L代码Q?i>帔R</i>被放?=的左辏V这是非常好的现象。这说明他因为L把=和=Q搞P已经自己Lq种习惯以避免犯错? </li><li>好的E序员在写代码前会订一个计划,特别是当他们的代码用C指针时。例如,如果你要求逆序一个链表,好程序员通常会在U的一边画上链表的草图Qƈ表明法中的索引指针当前Ud到的位置。他们不得不q样做。正思h是不可能不借助草图开始写一个逆序链表的程序的。差的程序员立刻开始写代码?</li></ul><p>不可避免的,你会在他们的E序中发现bugQ于是我们现在来CW五个问题:<b>你对代码满意吗?</b> 你可能想问,“好吧,bug在哪里?”这是来自地q一针见血的问题,要回{这个问题可要大费口舌。所有的E序员都会犯错误Q这不是问题。但他们必须能找到错误。对于字W串操作的函敎ͼ他们通常会忘记在输出~冲区加上字W串l束W。所有的函数Q他们都会犯off-by-one错误Q译者按Q指的是某个变量的最大值和最值可能会和正常值差1)。他们会忘掉正常的C语句l尾的分受如果输入是雉度字W串Q他们的函数会运行错误。如果malloc调用p|而他们没有ؓ此写好错误处理代码,E序会崩溃。一ơ就能把所有事情做对的E序员非?非常,非常地少.不过要是真的C一个的? 提问更有意思了. 你说,"q有Bug"。他们会再仔l地查一遍代码。这个时? 观察一下他们内心是否开始动摇了, 只是表面上勉强坚持说代码没有问题。MQ在E序员写完代码后Q问一下他们是否对代码满意是个好主意。就像Regis那样问他们!Q译者按QRegis Philbin是美国ABC电视|的游戏电视节目L人,他的口头是“这是你的最后的{案吗?”)</p><p>W六部分Q关于设计的问题。让应试者设计某样东ѝJabe BlumenthalQExcel的原始设计者,喜欢让应试者设计房子。Jabe_曄有一个应试者跑到白板前Q画了一个方块,q就是他的全部设计。天哪,一个方块!立刻<b>拒绝</b>q样的家伙。你喜欢问什么样的设计问题?</p><ul><li>好的E序员会问更多的信息。房子ؓ谁造的Q我们公司的政策是,我们不会雇䄦那些在设计前不问设计的h。通常Q我会很烦恼我得打断他们的设计,说“事实上Q你忘记问这个房子是l谁设计的了。这个房子是l一长颈鹿造的。? </li><li>W笨的应试者认计就像画画,你想M么就M么。聪明的应试者明白设计的q程是一pd艰难的权衡。一个很的设计问题是:设计一个放在街角的垃圾。想一想你得做多少权衡Q垃圄必须易于清空Q但是很难被偯Q易于放q垃圾,但是到狂风大作Q里面的垃圾不会被吹出来Q垃圄必须坚固而便宜。在某些城市Q垃圄必须特别设计Q以防恐怖分子在里面藏一个定时炸式V? </li><li>有创造力的应试者会l出有趣而独特的设计。我最喜欢的问题之一?i>为盲计一个放调味品的架子</i>Q译者按Q原文ؓspice rackQ老外的厨戉K有个专门放调呛_的架?上面放了很多罐|,里面装了各种各样的调料)通常许多应试者的是把布莱叶文Q一U盲Z用的文字Q刻在放调料的罐子上Q这h字会卯v来而变形。我到一个应试者,他的设计是把调料攑֜抽屉里,因ؓ他觉得水q_感知布莱叶文比垂直地做更方便。(试试看!Q这个答案这h创意Q我震惊!我面试了有一打得E序员,从来没有人想到过cM的答案。这h创意的答案确实跃q了普通h考虑问题的条条框框。仅仅因个答案太有创意了Q而且应试者别的方面还q得去,我雇佣了q个应试者,他现在已l成为Excel团队中一个优U的项目经理了Q译者按Q本文作者曾在微软工作过Q? </li><li>L争取一?i>定的了l?/i>。这也是<b>完成工作</b>的特质的一部分。有时候应试者会犹犹豫U不能作出一个决?试图回避困难的问题,留着困难的问题不作决定就直接向下q行,q很不好。好的应试者有一U推动事情自然地前进的們֐Q即使你有意把他们拖回来。如果关于某个话题的讨论开始原地打转变得没有意义了Q好的应试者会_“嗯Q我们可以整天谈个,但是我们得做点什么。ؓ什么我们不开?..?</li></ul><p>于是我们来到了第七部分,<b>挑战</b>。这部分很好玩。在面试中留心一? 当面试者的回答l对的百分之百毫无争议时, 你可以说: " ? {一下等一?" 然后׃两分钟玩一下魔鬼的游戏Q译者按Q原文ؓdevil's advocateQ魔ga人指的是q背自己的良知,为错误邪恶的观点辩护Q? C一定要在你可以肯定他正时和他争论?/p><pre wrap="">q个很有意? <br /></pre><ul><li>软弱的应试者会屈服。那我就和他?b>拜拜</b>了? </li><li>坚定的应试者会扑ֈ一个办法说服你。他们会以肯D_ȝ的口才来说服你,“也许我误会了你的意思,”他们这样开_但是正文仍是坚定地站E立场。这L人我?b>雇䄦</b>?</li></ul><p>不得不承认,面试双方的地位ƈ不是q等的。有可能应试者由于害怕你的权力而不敢于你争辩?b>但是</b>Q好的应试者有_的热情和勇气坚持正确的观点,他们׃热切希望说服你而会暂时忘记正在被面试。这L人就是我们要雇䄦的h?/p><p>最后,可以问一下应试者有什么想问的。一些h喜欢看看应试者这时是否会问一些聪明的问题。这是市面上行的面试书c的标准技巧。我个h不在乎应试者问什么,因ؓq时我已l做了决定。麻烦在于,应试者也许已l见??个hQ进行了好几轮面试,他们可能很篏了,以至于不能ؓ每轮面试都准备一个聪明而独特的问题。所以如果他们没有可问的Q没关系?/p><p>我L留下面试的最?分钟来推销我的公司。这很重要?i>即我不打算雇䄦眼前q个应试者?/i>如果你幸q的扑ֈ一个很的应试者,你当然愿意做M事情说服他(她)来你的公司。即使他们不是好的应试者,你也要尽力让他们为Fog Creek公司Ȁ动,q样面试l束时他们会对Fog Creek公司留下一个很好的印象。记住,应试者ƈ不仅仅是可能的雇员,他们也是֮Q也是我们公司的推销员。如果他们觉得我们的公司很棒Q他们也怼推荐朋友来面试?/p>啊哈Q我记得我说q我会给Z些应该避免的非常不好的反面的试题例子? <p>首先Q避免不合法的问题。有关种族,宗教Q性别Q出生国Q年龄,服役记录Q是否老兵Q性取向,生理障碍的问题都?strong>不合法的</strong>。即使他们的历说他们1990q在军中服役Q也不要问有关问题。也许这会让他们愉快地谈论在h战争中的l历。但是你的问题还是不合法的。如果简历上写着他们上过Technion in Haifa, 不要问他们是否是以色列h, 即只是Z闲谈, 因ؓq是q法? 下面有一个很好的不合法的例子?a >点击q里</a>有很多关于什么是q法的讨论。(但是q个|站的其余问题够愚蠢的。)</p><p>其次Q不要在问题中给予应试者暗C,我们公司喜欢或者不喜欢什么样的员工。我能想到的一个例子是问应试者是否有孩或者是否结婚了。应试者也怼x们不喜欢有家庭拖累的员工?/p><p>最后,不要问那些脑{急{弯的题目Q例?根火柴怎么拼出4个三角Ş。象q样的灵Z动的问题是不能看出应试者是否有“有头脑/完成工作”的品质?/p><p>面试与其说是U学不如说是艺术。但是只要你C<b>有头?完成工作</b>q个原则Q你可以应对自如。有Z问问你的同事他们喜Ƣ的面试问题和答案。这是我们公司员工午饭时热衷的话题之一?/p><br /><br /><font style="FONT-FAMILY: Georgia, Times, serif" color="#808080" size="2"><span style="FONT-FAMILY: SimSun">本文最先用英文出版Q题?/span><a >The Guerrilla Guide to Interviewing</a> <span style="FONT-FAMILY: SimSun"></span></font> <img src ="http://m.tkk7.com/emu/aggbug/62308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/emu/" target="_blank">emu</a> 2006-08-08 10:40 <a href="http://m.tkk7.com/emu/articles/62308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]膨胀软g?0/20的谣?http://m.tkk7.com/emu/articles/62306.htmlemuemuTue, 08 Aug 2006 02:38:00 GMThttp://m.tkk7.com/emu/articles/62306.htmlhttp://m.tkk7.com/emu/comments/62306.htmlhttp://m.tkk7.com/emu/articles/62306.html#Feedback0http://m.tkk7.com/emu/comments/commentRss/62306.htmlhttp://m.tkk7.com/emu/services/trackbacks/62306.htmlhttp://chinese.joelonsoftware.com/Articles/StrategyLetterIV.html

W四战略:膨胀软g?0/20的谣?/strong>


作者: 周思博 (Joel Spolsky)
译: Bo Yang
~辑Q?Wenjing Jiang
2001q?/span>3?/span>23?/span>

1993q_微Y公司的电子表DY件Excel 5.0出版了。它是一个巨大的软gQ需?5兆的盘I间。当q我们还记得最早上?1985q左?的PC盘只有20兆,所?5兆显得很多?/p>

{到Excel 2000出版的时候,它竟需?46兆的盘I间Q几乎增长到1993q的十倍!微Y公司的程序员真是差劲Q对不对Q?/p>

不对?/p>

我敢打赌Q你以ؓ我要写一o人厌烦的Q批评膨胀软g的文章。这U文章因特网上到处都是。批一批,怨一怨,q些庞大臃肿的YӞ令我讨厌Q还是vi和edlin比Microsoft Word与Emacs强多了,因ؓ前两者很y灉|...

哈哈Q把你蒙了!我才不会d一那L文章呢,因ؓ那种说法Ҏ不对?/p>

1993q_Ҏ当时盘的h|Microsoft Excel 5.0占用?36元的盘I间?/p>

2000q_Ҏ当时盘的h|Microsoft Excel 2000占用?1.03元的盘I间?/p>

Q这些数字是Ҏ此处的硬盘历史h格数?/a>计算的,以把通货膨胀的效果算q去了。)

从实际经角度出发,Excel好像变小了!

说真格的Q什么叫膨胀软gQ?u>Jargon File把它嘲贬地定义ؓQ“提供最低等的功能,同时占用不成比例的磁盘与内存I间的Y件。特别是形容应用软g与操作系l升U来用的。此词在Windows/NT上是常见的,Windows/NT也是它的来源。?/p>

我猜q帮人只不过是恨Windows而已。自从虚拟内存在Windows 386(1989q?上出现后Q我已经有十多年没有把内存用完过了。再说硬盘h格已l降?0.0071元一兆,而且降快?/p>

也许Linus Åkerlund能把q个问题解释清楚。他?a >他的|页 上写道:“这些膨胀软g的一个大~点Q就是即使你只想q一件很的事,你也要负载这个很大的E序。它把你的内存全用掉了…你不是很有效地利用你的pȝ。它毫无必要地把你系l的效率弄得很低。?/p>

我明白了Q原来它把你的内存都用完了。嗯Q不寏V自从Windows 1.0?988q出版以后,操作pȝ只把用到的代码页攑֜内存中。如果你有一?5兆的可执行文Ӟ但运行时只用C兆的代码,操作pȝ只把这两兆从磁盘装入内存中。而且如果你用的是比较C版的Windows的话Q操作系l还会自动调整硬盘,把这两兆代码|在一P使程序v动得更快?/p>

我想没有Z否定Q在今天强大而便宜的计算ZQv动一个大E序比仅仅五q前起动一个小E序q要快。那么那些h在瞎叫唤什么呢Q?/p>

RA Downesl了我们一个提C。看h他花了几个钟_把Microsoft的一个小E序研究了一通,而且因ؓq个E序有一兆大,令他十分气愤Q他写那文章,一兆硬盘只?.15分)。以他看来,那个E序应该下?5%才对。可W的是,他研I的那个E序叫做RegCleanQ你很可能没听说q。它的作用,是把Windows registry中没用的东西扑և来删掉。如果你整天为Windows registry中没用的东西担心的话Q你性格上很可能有ؓ事物着qP难以克制的弱炏V所以我怀疑批判膨胀软g?a >_?/a> 的体玎ͼ不是软g问题?/p>

实际上讲Q膨胀软g的存在是有道理的。最L的,如果E序员不用担心Y件的大小Q那么Y件就可以早点出版。用户可以早点得到更多的功能。这些功能用时有益,不用时无実뀂假如你的Y件商在出版Y件之前,׃个月的时_把它的Y件羃?0%Q这对你的实际好处来_几乎是感觉不到。也许,你的盘要是快满了的话,你可以多下蝲一首MP3歌曲。可是你多花两个月的旉Q等新Y件出版的损失Q你感觉得C。而且你的软g商会丢掉两个月的销售额Q损失更大?/p>

很多搞Y件开发的人,?80/20"的老规律引׃。这个规律好像很有道理:80%的h只用20%的功能。所以你以ؓQ只要实?0%的功能,p得到80%的销售量?/p>

不幸的是Q那从不是同L20%。每个h都用C同的功能。再q去十年中,我大概听说过几十家公司,下定军_不互相吸取教训,企图出版“轻形”版本,只有20%的功能的文字处理软g。大多数情况是,他们把Y仉到记者哪里去评论Q那些记者评论的ҎQ就是用q个新的文字处理软gd他们的评论文章。文章写完了Q记者就要用到“字数”这个功能了Q因为大多数记者写文章时有明确的字数限制。可是“字数”这个功能在软g里却找不刎ͼ因ؓ它是属于“没人用?0%”里面。结果记者就会写一文?/a>Q一斚w说着q个“轻形?软g怎么怎么好,膨胀软g怎么怎么p,另一斚w又说我不能用q个软gQ因为它没有“字数”这个功能。而且q种文章 l常有h写?/p>

当你L销你的“轻形?软gӞ你跟人家_“嗨Q这个Y件很yQ只有一兆。?人家听了一般都很高_然后׃问你有没有对于他们来说很重要的功能,要是没有Q就不会C的Y件?/p>

基本概要是:如果你的战略是?0/20”,你就很难卖出你的软g。事实就是这栗这个战略自从Y件工业开始时有Q从来没有胜利过。o人吃惊的是,很多倒闭了的公司的高U主还觉得它是个好的主意?/p>

Jamie Zawinski 在讨论改变世界的首版Netscape时讲得最好:“Mozilla [Netscape 1.0]很大q不是因为里面全是没用的东西Q如果真是那P解释h倒很方便Q。Mozilla很大Q是因ؓ你的需要很大。你的需要很大,是因为因特网是个很大的东ѝ网上有很多型的浏览器Q说h基本上是没用的。我们当初写Mozilla的时候,从未x它做成一颗完无~的明珠。?/p>



本文最先用英文出版Q题?/span> Strategy Letter IV: Bloatware and the 80/20 Myth  

emu 2006-08-08 10:38 发表评论
]]>
[转]行进中开?http://m.tkk7.com/emu/articles/62302.htmlemuemuTue, 08 Aug 2006 02:32:00 GMThttp://m.tkk7.com/emu/articles/62302.htmlhttp://m.tkk7.com/emu/comments/62302.htmlhttp://m.tkk7.com/emu/articles/62302.html#Feedback0http://m.tkk7.com/emu/comments/commentRss/62302.htmlhttp://m.tkk7.com/emu/services/trackbacks/62302.html

http://chinese.joelonsoftware.com/Articles/FireAndMotion.html

行进中开?/strong>


作者: 周思博 (Joel Spolsky)
译: Siyan Li 李思g
~辑Q?Paul May 梅普?
2002q???br />

时不ӞL一阵儿Q我什么事也干不了?

我也d公厅Q东瞄瞄Q西看看Q每十秒钟查一ơ电子邮Ӟ|上逛一圈。也许干点儿象付q通卡账单之类不需要大脑的事。不q要回去哗啦哗啦写程序,可没门儿?

Tetris

q种不出zȝ状态,一般通常会持l一两天。在我的软g开发生涯中也有q几个星期干不了zȝ时候。就像他们说的,我不在状态,我进入不了情况,我找不到l织?

Zh都有情A波动Q有的h温和一些,有的响动大点儿,也有的可以整个ؕ套。但不管怎么着Q那D不出活期似乎L跟忧郁有点儿关系?

我不由得联想到那些专家说Qh们基本上控制不了自己吃什么。Q何节食计划都长不了。大家L悠回各自的正怽重。也怽Z个Y件工E师Q我也不能控制什么时候最能出zR我唯一希望的就是发呆那D能被哗哗干z那D|qI最l还能؜饭吃?

Go read The Onion for a while.

自从我干上Y件开发这一行vQ我q_每天只有两三个的高效旉。这真让我头大。我在微软实习的时候,另外一个实习生告诉我,他每?2点上班,5点下班?个钟头还包括午餐旉Q但他的同事q对他特别满意。因Zq的zL一般h都多。其实我也一栗我每天只有两三个小时的高效旉。看着别h那么卖力的干Q还有点不好意思。不q呢Q我Ll里出活最多的。由此可见,“h件理论”和极限~程都坚持不加班Q每周只q?0时Q还是有炚w理的。他们都清楚q么做不会降低一个小l的生能力?

每天只能q两时q没让我太担心,真让我担心的是完全干不了zȝ那些天?

我老想q是怎么回事ѝ我努力回忆我出zL多的时候。估计是微Y把我搬到一间漂亮的新办公室的时候。舒适豪华的办公室,H外风景如画Q窗寚w樱桃花开满了矛_堆砌的庭院。所有的一切都那么恰到好处。我马不停蹄地干好好几个月,一口气把Excel Basic的详l设计搞定。用象纪늢那么高的一叠纸Q详l描素了一个超大型目标模型和编E环境,工作之细_令h难以|信。我自始至终没停过手。去波士参加MacWorld I的时候,我都带着一台手提电脑,坐在哈佛商学院的大阳C把Windowscd的所有文仉写完了?

按步qq不难。通常我一天是q样度过的:1Q去上班?Q查电子邮g和上|等{?3Q考虑是否应该吃完中饭在开始干zR?Q吃完中饭回来?Q查电子邮g逛网?Q终于决定应该开始工作了?Q查电子邮g逛网Q东瞄瞄Q西看看?Q再ơ决定确实应该开始开始干zM?Q打开该死的编辑器?0Q一直会些程序学到晚?Q?0Q写到忘记时间?

在以上第8步和W?步之间似乎有点缺P因ؓ我不是每ơ都能顺利地执行下去?

bike trip Ҏ来说Q启动是唯一的难题。静止物体在不受外力作用的情况下会保持静止。大脑里有些物质的质量大得不可思议Q让它加速太难了。但是只要速度上去了,在全速行使的情况下,倒不用什么劲pl箋C厅R就象骑着自行车去作一ơ自ҎI美国的旅行Q一开始,你根本想象不花那么多旉让R轮动hQ可是一旦动h了,让它们l{׃是一件很隄事了?

也许高效率的关键:启动h。配对编E法之所以成功,说不定就靠两个h在一P互相Ҏ启动h?

Joel in the Army 我在以色烈当伞兵Ӟ一ơ,有个军来给我们讲实战战术。他告诉我们Q步光|术其实只有一U:行进中开火。你一边开火一Ҏ着敌h冲过去,火力让敌人抬不v头来Q不能朝你开?(当一个军人喊Q“掩护我”的时候,他的意思就是“在我冲q街时候,你朝敌h猛烈开火,q他猫hQ没法朝我开?。前q了Q你可以占领阵圎ͼ接近敌hQ这样你的胜要大的多。你要是不往前冲Q敌人就有时间来搞清楚Ş势,q可不妙。你要是不开火,敌hp朝你开火,撂倒你?

我很长一D|间都在想着q个教导。我想通了不论是战斗机IZ格斗q是大规模舰队攻击,大部份军事战略战术都是以行进中开火作为基的。我又化了十五年旉才想通了行进中开火也是一个h在现实生zM成功的基本原则。你每天都得往前进点儿Q不用想你写的程序怎么差劲Q怎么卖不出去Q只要你不停地写Q不停地改,滴水也能I石。同Ӟ 要注意你的竞争对手朝你开火。他们是不是惌你全心全意应付他们的扫射Q好让你往前走不了呢?

xq些q来Q微软开发出来的资料存取ҎQ从OBDCQRDOQDAOQADOQOLEDB直到现在?ADOQ?NETQ不停翻斎ͼ技术上有必要吗Q还是因为那个设计组实在y脚Q每q他妈一q就得重新发明一遍资料存取技术?(实际上可能真?。它最l的效果其实是一道掩护火力,让竞争者别无选择Q只能把本来该用来开发新功能的宝贉|间都用来UL和升U了。仔l看看Y件行业,q得好的公司寚w些对大公叔R依赖最,不用把所有精力都用来潮流而把E序重写一遍,q得修改那些只有在Windows XP上才会出现的~陷。那些花太多旉ȝ微软未来发展方向的公司Q日子都好过不了。有些h见了.NET发怵,忍不住要?NET来完全重q体系l构Q以己别无选择。哥门儿Q看清楚了,微Y是在朝你开火呢Q而且q只是掩护火力。这游戏是q么玩儿的。这样一来,他们可以大步朝前走Q而你却不能。你要支?a >Hailstorm 吗?SOAP呢?q有RDFQ是因ؓ你的֮需要,所以你支持它们Q还是因为有人朝你开火而你觉得应该q击Q大公司的营销部都懂火力掩护。他们到客h那儿pQ“你们不一定非买我们的。谁的品最好您应该买谁的。不q,我们x醒您Q在下单之前最好先认他们支持(XML/ SOAP/CDE/J2EE)。否则你们就会被他们的技术套牢。”。等到小公司dq个客户推销的时候,那个听话的CTO׃问他们:“你们有J2EE吗?”。他们回d只好不管卖不卖得掉,都埋头打造他们的J2EE。他们也再没有Z来展Cq特色了。其实,q只不过是个打勾功能。因为有个打勾拦在那儿空着Q你必Lq个功能。其实谁都不需要它。这是火力掩护?

对于我这L公司来_行进中开火意味着两g事。别跟时间过不去Q同时你q得每天都进步。天不负苦心人,你终有出头的一天。我昨天׃一天时间只不过让FogBUGZ的颜色稍微好看点。这不要紧,只要不停步。最重要的是Q我们的软g来好Q客来越多。在我们辑ֈOracle 的规模之前,我们q不需要通盘战略。我们只需要每天早晨到办公室来Q别多想Q打开~程器?

It's getting better all the time... o/~


本文最先用英文出版Q题?/span> Fire and Motion  

emu 2006-08-08 10:32 发表评论
]]>
[转]看v来简单, 实际上复?http://m.tkk7.com/emu/articles/62300.htmlemuemuTue, 08 Aug 2006 02:29:00 GMThttp://m.tkk7.com/emu/articles/62300.htmlhttp://m.tkk7.com/emu/comments/62300.htmlhttp://m.tkk7.com/emu/articles/62300.html#Feedback0http://m.tkk7.com/emu/comments/commentRss/62300.htmlhttp://m.tkk7.com/emu/services/trackbacks/62300.html

http://chinese.joelonsoftware.com/Articles/NothingSimpleSeems.html

看v来简单, 实际上复?/strong>


作者: 周思博 (Joel Spolsky)
译: Bo Yang
~辑Q?Billy Chen ~校
2002q?/span>3?/span>4?/span>

我们?/span> CityDesk 里有一个用性上的小问题?/span>

 

 

问题是这LQ你可以用菜单上“导入网”的命oQ从因特|上导入一个文件。你也可以用鼠标拖放的方法,从磁盘上导入一个文件。但是菜单上没有“导入磁盘文件”这个命令,所以有些用?/span> 没有发现CityDesk 有这个功能,或者他?/span>试图用“导入网”这个命令去导入盘上的文gQ结果造成无法成功导入?/span>

 

我一开始想q个问题很好解决Q大概的Ҏ是用一个两个页面的文g导入向导。第一问你:“你要从哪里导入Q”。如果你选择“磁盘”,W二就会提CZ选一个文Ӟ你要是选择“因特网”,W二就会提CZ输入一?/span> URL.

 

我差点就开始动手去实现我这个想法了Q但是有些事情得我q没有这样做。我军_先写一个小的规U再说。写出来的规U如下:

 

W一?/span>

你要从哪里导入?

/因特|?/span>

 

W二(盘Q?/span>

标准的打开文g对话?/span>

 

W二(因特|)

用小览器让你输入一?/span> URL

 

H然间我惛_一个问题?/span> Windows的打开文g的对话框Q通常是由操作pȝ提供的。能不能把这个对话框攑ֈ我的文g导入向导里面呢?

 

?/span> ?o:p>

 

我查了一下。是可以q样做的Q但q不是一?/span> 好玩 的事Q而且要花好几个小时的旉。我能不能不使用导入向导的方式呢Q我重写了一下我的规U:

 

两个菜单:

1Q从|上导入|页 -> URL 输入 对话?/span>

2Q从盘上导入网?/span> ?gt; 昄打开文g对话?/span>

  

q就好多了。三分钟的设计时_省了我几个小时的~程序时间?/span>

 

如果你这辈子׃二十分钟以上的时间去~Y件代码的话,你就可能发现了一条规则:事情没有看v来那么简?/b>?/span>

 

像拯文gq样单的事,都充满了危险。如果第一个参数是个目录会如何Q如果第二个参数是个文g会如何?如果同名的文件已l存在于目的子目录会如何Q如果你没有写的权限又会如何Q?/span>

 

如果在拷贝文件的q程中失败了怎么办?如果目的地是在一个远E计机上,但是需要n份验证怎么办?如果文g很大但网l连接又慢,所以你需要显CZ个进度条怎么办?如果文g传输速度降到几乎是零了,你什么时候放弃拷贝而给用户一个错误信息呢Q?/span>

 

一个面试测试员的好办法Q就是给他们一个简单的操作q程Q然后让他们列出可能出现的错误情c一个在 Microsoft面试时典型的问题是Q你怎样L试打开文g对话框呢Q一个好的测试员Q可以轻而易丑֜列出几十个o人难以想到的情况L试(比如“一个文件显C在对话框里Q然后你L开它,但是在你?b>打开的按钮之前,q个文g被另一个用户删除了”)?/span>

 

好,我们得到q样一个公理:事情没有看v来那么简单?/span>

 

软g工程里还有一个指导思想Q那是你要永远x设法d低风险性。一个要特别心去避免的风险Q就是项目进度g期的风险。项目g期很不好Q因板会训你,闹得你挺不高兴的。除此之外,q也存在l济斚w的原因,那就是当初你军_l你的Y件加某个功能的时候,你觉得这个功能只需要一个星期就能完成。现在你认识到该功能需要二十个星期才能完成Q那么你当初的决定当然就是错的。如果你当初q道需要花掉二十个星期的话Q你可能׃Z同的军_了。你作出的错误决定越多,你公司的财被一ơ性冲销处理的可能性就大Q甚至你们公司的标志会被收入债权人的 仓库 Q。到时候你的前老板抱怨道Q“我们公司关门倒闭了不_气h的是q上 fuckedcompany 的资格都没有。?/span>

 

事情没有看v来那么简单,再加上减低风险性的指导思想Q只能让你得出如下的l论Q?/span>

 

先设计再~程序,先思而后行?/span>

 

让你失望了,很抱歉。我知道你读q?/span> Kent Beck 的书Q?/span> 所以你以ؓ动手之前不做设计是可以的。对不vQ那?b>不可?/b>的。你修改E序不可?/b>像修改设计文仉样“容易”。有些hL发表q样的谬论:“我们现在用高工具了,?/span> Java?/span>XML?我们在几分钟之内Q就可以改动E序里的很多东西。ؓ什么不在程序里直接设计呢?”哥们儿Q你可以在你自行车上加个发动机,但你不能把它变成汽R。如果你以ؓ把你拯文g的程序,qE式改ؓ抢占式,而且改得比我写这句话q快Q那你就大错牚w了?/span>

 

不管怎么_我不认ؓ Extreme Programming 是在鼓吹零设计的理念。他们只是说Q“不要作M无必要的设计”,q没有什么错嘛。但Z听到的ƈ不是q样。大多数E序员是在找不用设计的借口Q所以他们像飞蛾扑火般投向“不用设计?q个馊主意。这是一U奇怪的Q让你事倍功半的懒惰方式。我懒得先在U怸把这个功能给设计好了Q所以我先写程序,然后发现不对Q我去改,l果反倒花更多的时间。或者,更经常发生的是,我先写些E序Q发现它不对Q但是没旉改了Q结果我的品质量低劣,而且我还是要扑և些借口Q说明它Z么“一定要那样“。那只不q是马虎潦草Q缺乏职业精?/span>

 

Linus Torvalds d设计 的时候,他是在讲那些规模庞大的系l。大规模的系l必L慢进化,要不然它们就变成 Multics 了。他不是在说你那个拷贝文件的E序。你再想惻I Linus Torvalds 脑子里有一个很清楚的\U图Q知道他要到哪去Q所以他觉得设计没什么用Q也不为奇。但不要上当Q基本上说那对你不适用?/span> Linus Torvalds 比我们聪明多了,所以他能干的事Q不{于我们一般h也能qӀ渐增式设计及实现是好事。频J地发布版本是可以的Q但针对在大众市Z的Y件来_频繁发布版本会用户不高_l不是个好主意——可以多搞些内部的里E碑取而代之)。设计上不要拘惔于Ş式,那只是浪Ҏ间。我从来没有见过某个目得益于不动脑{的程图?/span> UML ?/span> CRC Q?/span> 或者其他什么时髦的Q花里呼哨的设计Ҏ。至于那?/span> Linus Torvalds 说的pȝQ?/span> 那些 有一千万行代码程序的庞然大物Q它们应该慢慢进化,因ؓ人类q不知道怎样设计那种规模的Y件?/span>

 

但是当你坐下来写你的拯文g的程序,或者计划给你的软g下个版本增添功能的时候,你一定要先作设计。不要让报急的可使你草草动手?/span>



本文最先用英文出版Q题?/span> Nothing is as Simple as it Seems  

emu 2006-08-08 10:29 发表评论
]]>
[转]The Joel Test: 软g开发成?12 法则http://m.tkk7.com/emu/articles/62299.htmlemuemuTue, 08 Aug 2006 02:26:00 GMThttp://m.tkk7.com/emu/articles/62299.htmlhttp://m.tkk7.com/emu/comments/62299.htmlhttp://m.tkk7.com/emu/articles/62299.html#Feedback0http://m.tkk7.com/emu/comments/commentRss/62299.htmlhttp://m.tkk7.com/emu/services/trackbacks/62299.html阅读全文

emu 2006-08-08 10:26 发表评论
]]>
一个需求镀金的教训 http://m.tkk7.com/emu/articles/4767.htmlemuemuWed, 18 May 2005 08:05:00 GMThttp://m.tkk7.com/emu/articles/4767.htmlhttp://m.tkk7.com/emu/comments/4767.htmlhttp://m.tkk7.com/emu/articles/4767.html#Feedback0http://m.tkk7.com/emu/comments/commentRss/4767.htmlhttp://m.tkk7.com/emu/services/trackbacks/4767.html

一个OA目Q原来的需求文档已l面目全非了Q得益于版本理Q找C需求差异分析前的最后一个版本:

3.1.2.6. 安排其他用户日程
?nbsp;用户在查看同事日E安排页面中点击“添加日E安排”按?BR>?nbsp;pȝ昄日程安排d面
?nbsp;用户选择旉Q填写事务详情,预计需要时_选择事务cdQ是否公开
?nbsp;用户点击“提交”按?BR>?nbsp;pȝ查时间冲H?BR>?nbsp; 旉上没有冲H?BR>  ?nbsp;pȝ记录C?BR>  ?nbsp;pȝ昄操作成功面
 ?nbsp;存在旉冲突
 ?nbsp; pȝ提示存在冲突的事务,提示是否修改事务
  ?nbsp; 用户认d
    ?nbsp;pȝ记录C?BR>    ?nbsp;pȝ昄操作成功面
   ?nbsp;用户选择修改事务
    ?nbsp;pȝq回到日E安排添加页?/PRE>

写完q个版本之后我出差去做需求差异分析,其他同事则按照暂定的需求文档开始做~码Q时间紧q,设计被蟩q了Q后来的设计文档都是?/PRE>
代码反向工程处理的)?/PRE>
在我出差期间Q有个同事提ZQ一个日E安排在某些情况下应该可以指z多个同事Q因此生了一个“日E草E쀝的概念Q即一个日E可
以先赯然后再反复指z多个用户。负责开发这一模块的兄弟们觉得大有道理Q于是照此开发?/PRE>
出差回来后我更新了需求文档,但是q一部分用户q没有提出异议,因此没有修改。直C周开发基本完成,q周一开始做SIT。这时我才发现原来我现在要安排一个日E的话一定要先v草一个“日E草E쀝再把它指派l自己或者别人。这好比我要发个emailQ就要先写个email保存到草E箱里面Q再去草E箱里面把它扑և来发?/PRE>
q当然是不能接受的,于是要求兄弟们按可能少的修改工作量q行修改Q也是说把保存草稿再取E这个过E包装v来,自动保存后直
接指zև厅R但是由于检查时间冲Hƈ做出响应的流Eƈ不是E设计的Q不得不修改了流E、设计ƈ重新~码。今晚和兄弟们一起加班修正这个问题,希望明天可以开始SIT.
“一个日E安排在某些情况下应该可以指z多个同事”是一个没有被认的需求镀金,在没有被仔细考察的时候就ȝ的被依以设计Q造成了今天的困境?/PRE>

jackei 发表?SPAN>2005-01-19 10:19 AM  
q就是ؓ什么一直在在测试过E中Q超出已l明定义的需求的功能也同h软g~陷Q因中新增的功能是未l确认的Q另外,对于目来说Q也增加了一些原本可控的风险之外的新的风险。昨天还在同大家解释q个问题Q看来emu帮我扑ֈ了一个更好的例子^_^

emu 发表?SPAN>2005-01-21 5:08 PM  
出已经明确定义的需求的功能也同h软g~陷Q?

从来没有从这个角度考虑国问题,有意思?

实际情况是我们常常没有充分明的需求定义。第一步规范不hQ后面就只有走远了…?/DIV>

emu 发表?SPAN>2005-04-22 11:55 AM  
q个镀金模块最l的下场是,原来的代码全部删除,重新按照原先的设计开发了一遍?/DIV>



emu 2005-05-18 16:05 发表评论
]]>
վ֩ģ壺 MM131޹Ůþ| ŮһëƬѹۿ| ߹ۿ޳| ѿƬѲ| ww4545Ļѵַ| ˳Ƶ߲Ų | gayƬgvվ| ˳ַ߹ۿ| ž޹Ʒ| ø߹ۿ| Ʒ1024Ƶ| 99Ƶ| ƬӰԺۿ| ޳aƬ߹ۿ| ޸һ| ޾ñĻ| ޾ƷҾþþþþ| ۺɫƵ߹ۿ| ޳?vƬ| ԲƵ| þþþþþƵ| ĻӰԺww4164h| 2019Ļֱ| þóѲվ| ˶wwwҹվ| ѹۿ| Ƭѿ| Ƶ߹ۿ| һѹ| hƵ߹ۿ| aëƬ| ɫƬѿ| Ļ| aëƬѹۿ| ҳ߹ۿ| 999߾ƷѲ| þùƷƵ| 4399Ӱѹۿֱ| ˳վ| 99߾Ʒѹۿ| ëƬѹۿ|