Coding Horror
文章平均质量分 87
happydeer
一路向前
展开
-
我同情那些不写单元测试的傻瓜
J.Timothy King写了一篇很棒的文章:“先写单元测试的12个好处”(Twelve Benefits of Writing Unit Tests First)。遗憾的是,他在文章最后说的话完全是画蛇添足。然而,如果你不愿意改掉先写代码的老习惯,如果你觉得固执己见比设计优秀的软件更重要,好吧,我对你深表同情。把你的怜悯用在不认同你的人身上,并不是推广你主张的最有效的方式。翻译 2012-12-24 13:06:04 · 2996 阅读 · 0 评论 -
关于网络密码的可怕真相
在2010年12月,Gawker网络被黑客攻破了,结果导致一系列网站如Lifehacker、Gizmodo、Gawker、Jezebel、io9、Jalopnik、Kotaku、Deadspin和Fleshbot同时出现安全缺口。如果你是我们旗下任何网站的一名评论员,你可能也有一些麻烦。译者注:Gawker是最有名的明星追踪网站之一,其信条是“信谣、传谣、不造谣”。Gawker认为“人人都是狗翻译 2012-12-14 16:15:04 · 4886 阅读 · 0 评论 -
代码评审:Just do it!
在“The Soft Side of Peer Reviews”(同级评审的柔软面)一文中,Karl Wiegers以下面这段高调的声明开篇:译者注:Karl E. Wiegers是世界著名软件工程大师,以需求、项目管理、过程改进等领域的研究和实践著称。曾任IEEE Software杂志编委和权威期刊SoftwareDevelopment的特邀编辑和专栏作家。他曾经在柯达公司工作18年,领导过翻译 2013-01-29 22:14:15 · 2779 阅读 · 0 评论 -
从《偷天情缘》看A/B测试的问题
译者注:A/B测试是一种网页优化方法,可以用于增加转化率、注册率等网页指标。使用A/B测试首先需要建立一个测试页面,这个页面可能在标题字体、背景颜色、措辞等方面与原有页面有所不同,然后将这两个页面以随机的方式同时推送给所有用户。接下来分别统计两个页面的用户转化率,即可清晰地了解到两种设计的优劣。在前不久的一次旅行途中,我在飞机上碰巧又看了一遍《偷天情缘》(GroundhogDay)。翻译 2013-02-01 16:05:22 · 3063 阅读 · 1 评论 -
对你的屁股好一点!
作为软件开发人员,买一把上乘的电脑椅也许是你能做的最明智的投资之一。事实上,在过去几年看过各种各样的椅子之后,我得出了一个结论:如果你想买一把上乘的椅子,你要花的钱不会少于500美元。如果你在座椅上花的钱没那么多——除非你正在经历那场跨世纪互联网泡沫破裂后的资产拍卖——你可能正在犯一个错误。我对上述结论仍然深信不疑。我建议所有读到这篇文章的程序员,都去认真考察一下你在工作场合所坐椅子的价值翻译 2013-02-06 09:47:27 · 6431 阅读 · 0 评论 -
学海无涯苦作舟
作者在Twitter上发的一条短讯:“每一天,你一定要一起床就热情澎湃。否则,你就只是在打工。”3:51 PM –2012-5-1在我们创办Stack Overflow网站之后,有些人开始承认:我们构造了一个还过得去的“捕鼠器”,把大家都吸引到那里去提问和回答问题。不可避免的猜测也随之而来:我们是否可以用你们的引擎来构建一个关于各种主题的问答网站呢?我们的答案就是Stack Excha翻译 2013-03-05 09:20:47 · 3682 阅读 · 1 评论 -
你永远不会有足够的奶酪
“令人赏心悦目的产品和让人勉强容忍的产品之间的差别,就在于它们的细节有没有做好。”在Human Factors International公司做的一篇演讲文稿里,他们提到了一个叫“哥伦比亚障碍装置”的东西。译者注:Human Factors International是一个由商业心理学家和管理咨询师组成的咨询公司,主要针对以用户为中心的产品设计提供咨询服务。译者注:哥伦比亚障碍装置(C翻译 2013-03-30 19:22:36 · 2815 阅读 · 0 评论 -
分页显示该休矣
当你有很多东西要显示给用户、而且内容多得远非一个屏幕可以放得下的时候,你会怎么办?很自然,你会想到分页。在2007年,Vitaly Friedman写了一篇文章叫“Pagination Gallery: ExamplesAnd Good Practices”(分页艺术馆:样例赏析以及好的做法)。他在这篇文章里罗列了现实世界里的很多例子,在这里我就不再赘述了。如果你看过一种分页方案,其实你也翻译 2013-03-30 20:09:56 · 4985 阅读 · 1 评论 -
你的团队里有“坏苹果”吗?
烂苹果是团队的毒药!Steve教了我们几招如何去识别团队中的"烂苹果": 1. 他们不虚心向同事学习,而是极力掩饰自己的无知。他们常说,"我不知道怎么解释我的设计;不过,它肯定没问题。"或者,"我的代码太复杂了,没法测!"2. 他们过分地强调个人隐私,"我不需要别人来审查我的代码。" 3. 他们占山为王,"没人能解我代码里的bug。我现在没空去解它们,不过下周我翻译 2013-01-03 21:11:43 · 3445 阅读 · 0 评论 -
第一版做得不好,但照样发布
我曾经发布过的软件中没有一个能让我满意的。哪怕一个也没有!部分的原因是,像很多其他的软件开发者一样,我是一个完美主义者。于是,有些问题就不可避免了:开发计划太激进,时间太短了。我们需要更多的时间! 我们碰到了原先没有预料到的技术问题,它逼着我们做了一个折中的解决方案。 我们的设计做错了,不得不在开发的过程中做出改变。 我们的团队出人意料地发生了内部摩擦。 客户跟我们想象中的不一样。 设计师翻译 2013-03-30 19:16:47 · 2577 阅读 · 0 评论 -
怎样招聘程序员
在招聘程序员方面,没有所谓的神奇“银弹”!但我可以分享一些建议和诀窍,它们经过我的实践证明是有效的。这些方法我多年来一直在用。我把它们总结如下:首先,要求通过几个简单的“Hello World”在线测试。我知道这听起来很疯狂,但有些自称是程序员的人根本没写过代码。时至今日,还有人常常过来告诉我:他们在面试过程中碰到一些应聘者连最基本的编程测试题目都不会做,真是难以置信!那也是为什么翻译 2012-12-25 09:41:30 · 3959 阅读 · 1 评论 -
坏苹果是团队的毒药
最近一期的《美国生活》采访了WillFelps。他是华盛顿大学的一位教授,曾经组织过一次社会学实验来证明“坏苹果”的出奇强大的影响力。译者注:《美国生活》(《This American Life》)是一档叙事类的广播节目,每周一期,在超过500家电台播放,大约有170万听众。这个节目由芝加哥公共传媒公司制作出品。它也是美国最流行的播客(podcast)。大学生们每4人一组,组建了几个团队,翻译 2013-04-08 09:07:09 · 8870 阅读 · 16 评论 -
结对编程与代码评审
Tom Dommett对“结对编程”(Pair Programming)有一些正面的经验。他把它们写下来,并分享给大家了:这个概念是要让两个开发者在同一台机器上工作。他们都有各自的键盘和鼠标。在任何一个给定的时间,其中一个人作为“驾驶员”而另一个作为“领航员”。这两个角色每隔一段时间(可以是一小时,也可能是任意时候)交换一次。“驾驶员”负责编写代码,“领航员”则负责阅读、核对、拼写检查以及在脑翻译 2013-03-26 14:40:45 · 3356 阅读 · 1 评论 -
这样的会议让人很纠结
很纠结吧?永远也不要参加这样的会议!顺便说一下,解决这个问题的方法就是“可用性测试”(Usability Testing)。好好想一想:我们做决定的时候,是要无休无止地争吵、最后谁吵赢了谁说了算呢,还是要基于真实的数据?这个变化是一场革命!翻译 2013-04-12 08:28:12 · 3655 阅读 · 0 评论 -
今天上班可以放羊
如果你受雇于谷歌,那你只须拿80%的时间用在本职工作上。而另外20%的时间,你可以用来做任何你想做的事情——前提是,你所做的事会以某种方式帮助谷歌进步。至少理论上是这样的。到目前为止,谷歌的20%时间政策在软件开发行业里已经很出名了。不过,大家有所不知的是,如果追溯回去,这个概念其实早在1948年就由3M公司提出了。3M公司的全称是 Minnesota Mining and Manufac翻译 2013-04-13 20:48:56 · 5118 阅读 · 0 评论 -
国外程序员的BASIC情结——我的编程生涯始于BASIC
关于BASIC,Edsger Dijkstra曾经说过这么一段话:“那些已经学过BASIC的学生是不可教化的,再去教他们优秀的编程风格注定徒劳无功。他们已经脑残,再生无望,成不了优秀的程序员。”BASIC是Beginner'sAll-purpose Symbolic Instruction Code的缩写,意为“初学者的通用符号指令代码”,它是在1964年由美国的两位教授Thomas和John翻译 2013-05-14 09:54:02 · 8160 阅读 · 1 评论 -
游戏玩家到程序员的蜕变
Greg Costikyan写了一篇散文,题为“Welcome Comrade!”(同志,欢迎你!),号召从事游戏开发的业余爱好者们武装起来:遥想当年,一个人单枪匹马几天时间就能开发出《毁灭战士》这样的游戏。制作第3代的《毁灭战士》也不过用了几人周(man-weeks)。然而,游戏开发的成本在不断攀升。比如在1992年,制作一款电脑游戏通常需要花费20万美元;但现如今,仅仅买一个题材动辄就翻译 2013-06-09 09:07:17 · 3842 阅读 · 2 评论 -
会议是浪费工作时间的最佳去处
本文为翻译初稿。更多精彩内容,敬请关注《高效能程序员的修炼》,人民邮电出版社。今天你开了多少个会?这个星期呢?这个月呢?现在你再自问一下,那些会议中有多少是值得参加的?如果把相同的时间用在工作上,你又能完成多少事情?这不禁让人想知道,我们究竟为什么要开会。在GitHub,我们不开会。我们没有固定的工作时间,甚至都没有规定工作日。我们不记录休假或者病假的天数。我们没有经理,也翻译 2013-03-27 06:53:02 · 3961 阅读 · 9 评论 -
软件定价:我们深谙其道吗?
本文为翻译初稿。更多精彩内容,敬请关注《高效能程序员的修炼》,人民邮电出版社。一段时间以来频繁光顾iPhone应用商店,以致于产生了个副作用:我开始从根本上改变了对软件定价的看法。这么多优秀的iPhone应用程序,要么是免费的,要么只卖区区几块钱。软件的定价已经低于冲动购买的门槛,以致于花钱买东西已经成了不费脑筋的事:看到有趣的东西,只要你喜欢,买!但那些定价高于5美元的应用程序呢?令翻译 2012-11-17 21:22:03 · 10638 阅读 · 4 评论 -
管理中要有信任
管理中不可缺少信任!但是,信任是无法代替管理的。信任并不意味着要让大家感觉良好,以期无为而治。你必须确保团队知道如何管理自己的工作,并且监视他们,以确保他们在正确地工作。适当的监视并不意味着不信任,而是要对他们的工作表示出浓厚的兴趣。翻译 2013-07-10 09:36:33 · 4264 阅读 · 2 评论 -
十年磨一剑——一夜成名背后是十年的努力
Gmail的原开发主管Paul Buchheit曾经说过,Gmail的成功是一个漫长的过程:Gmail的开发始于2001年8月,在此之后的很长一段时间里,几乎所有的人都不喜欢它。有一些人因为它的搜索功能而使用它,但他们也带来了无穷无尽的抱怨。甚至有相当一部分人认为我们应该终止这个项目,或者按照一个企业级的产品重做这个项目——它应该有一个本地的客户端程序,而不是这个异想天开用JavaScript翻译 2013-07-17 10:06:35 · 8384 阅读 · 11 评论 -
勿以专家自居
对于权威,我心存芥蒂。我在“StrongOpinions, Weakly Held”(观点鲜明,但不固执己见)一文中曾经说过:当我了解到别人把我视为专家或者权威,而不是像伙伴一样的志趣相投者时,我就会觉得非常困扰。如果非要说我在迄今为止的职业生涯中学到了一点什么的话,那一定是:当你用专家或者自以为洞悉一切的眼光去面对软件开发时,你必将面临失败。如果真的有所谓的专家的话,他们一定要比普通翻译 2013-07-06 10:04:30 · 3270 阅读 · 5 评论 -
程序员不爱读书,但这很不明智
StackOverflow.com的主旋律之一,就是软件开发者不再照着书本学习编程了。Joel Spolsky曾经提到过:“程序员似乎已经不再读书了。相比于程序员的从业人数,编程类图书市场小得简直不值一提。”翻译 2013-07-22 09:16:05 · 26132 阅读 · 102 评论 -
困惑:单元测试该在什么时候写?
很多年以来,用于随机测试(ad-hoc test)的工具我都是自己开发的。但在最近的一个项目中,我终于采用了NUnit和TestRunner来做正式的单元测试。下面是我编写的第一个单元测试,看起来很简单,而且轻轻松松就通过了:_PublicClass UnitTests Private _TargetString As String Private _TargetDa翻译 2013-09-29 15:22:32 · 5611 阅读 · 2 评论 -
异常驱动的开发(Exception-Driven Development)
不管怎么样,软件在发布的时候总是会带有bug的。所有软件都是这样。只要是软件,它就会崩溃,它就可能丢失数据,它还会难以学习、难以使用。问题不在于你在发布软件的时候带出去了多少bug,而在于你能多快地修复那些bug?如果你的团队一直在践行异常驱动的开发模式,答案就很简单了——别担心,我们马上就会改进我们的软件!看着吧,我们会越做越好!翻译 2013-10-25 09:58:49 · 3151 阅读 · 0 评论 -
大多数时候是软件的Bug,但是... 有时候的确是硬件的问题!
尽管软件是不可靠的(这已经臭名昭著了),但我们不能总是把矛头指向软件。有时候,你面对的确确实实是一个硬件问题。翻译 2013-10-23 17:44:09 · 4858 阅读 · 0 评论 -
程序员是“逻辑人”
在软件开发者身上的所有“坏毛病”中,最严重的可能是:我们自以为是典型用户... 任何人都能做出来一个没人会用的复杂软件。这其实并不难!把软件做得容易使用才是需要真本事的!翻译 2013-10-30 09:27:44 · 5681 阅读 · 7 评论 -
如何写技术文档
技术文档是怎么写出来的?过程非常滑稽、有趣!翻译 2013-11-02 11:08:55 · 4770 阅读 · 0 评论 -
别把产品发布当目标
产品终于开发完成了,发布了,万事大吉了?Oh, no~~~ 这不是终点。别把产品发布当目标!翻译 2013-11-04 09:46:43 · 2288 阅读 · 3 评论 -
Jeff Atwood:Google的头号UI问题
谷歌在用户界面上追求的“极简主义”是让人叹为观止的。但是,真有人在使用“I'm Feeling Lucky”(手气不错)这个功能吗?翻译 2013-11-18 08:55:34 · 3164 阅读 · 0 评论 -
功能越多越好吗?
有时候,我怀疑商业软件当前的模式劫数难逃。乏善可陈的功能被没完没了地堆砌在一起,到头来几乎总是走向灭亡。翻译 2013-11-07 08:28:11 · 3093 阅读 · 0 评论 -
UI设计——最后一根稻草
如果你想再加一个什么UI元素,请确信,你所加的那个UI元素不是压倒骆驼的最后一根稻草。翻译 2013-11-14 08:39:43 · 2881 阅读 · 0 评论 -
可用性并非阳春白雪
写代码?这个环节的工作其实不难。开发出人们真正想用的应用程序,然后把它们发布到用户手上,这才是难事!如果你的项目里没有人关心可用性,那么你的项目注定会失败。翻译 2013-11-21 08:59:53 · 2744 阅读 · 3 评论 -
敢于说不
创新并不是要接受所有的东西,而应该对除了关键性功能之外的所有东西统统说不。翻译 2013-11-13 08:39:11 · 3327 阅读 · 1 评论 -
基于用户行为数据进行持续的产品创新
亚马逊如何进行快速的创新?在可用性方面,为了超越靠猜测行事,你必须去观察用户如何使用你的软件,除此之外别无他法!翻译 2013-11-23 14:31:31 · 4166 阅读 · 0 评论 -
YouTube上的版权保护
YouTube网站上90%的内容都是有版权的,而且很显然在这些内容的使用上并没有得到授权——基于这个现实,我们该怎样去理解YouTube在版权保护方面的官方立场呢?翻译 2013-08-08 08:49:22 · 30457 阅读 · 4 评论 -
象牙塔式的开发
我向来不鼓励象牙塔式的开发模式——开发团队常年封闭在“高塔”之中,一门心思地做着魔法一样的软件。这些开发者根本不知道用户会怎样使用他们做出来的软件。你若问他们,“最近一次面见用户是在什么时候?”他们甚至可能都回答不上来!因为缺失强有力的证据,开发者都假设其他所有人都是开发者。这种想法的危险性就不用我多说了吧!根据我的经验,越是把开发者孤立起来,他们最终做出来的产品就最糟糕。尽管大部分团队都有专翻译 2013-11-11 08:35:16 · 3418 阅读 · 3 评论 -
用户界面很难做
我无意评论“女程序员不懂情调”;我的意思是,对“大部分程序员不擅于设计用户界面”的指责不无道理。翻译 2013-11-11 08:45:30 · 4072 阅读 · 3 评论 -
电脑犯罪的历史与现状
我(Jeff Atwood)写过一篇文章“I Was a Teenage Hacker”(我10几岁时曾是一名黑客),描述了我在1980年代后期使用计算机做过的一些非法之事。我那时犯罪了吗?我真的是一名罪犯吗?我不这么认为。说白了,我那时还不没有聪明到足以对社会构成威胁的程度。即便是现在,我也没达到那种水平。不过,确实有两本经典图书描述了活跃在1980年代的黑客们,而这些人也确实聪明得难以置信翻译 2013-05-02 09:39:37 · 7569 阅读 · 2 评论 -
Jeff Atwood质疑iPhone的单键设计
我喜欢使用iPhone,但我对它的一个设计不敢苟同:苹果始终坚持,设备的正面永远只能有一个按键。单单一个按键要控制多少东西啊!功能过载了!我现在都害怕使用iPhone的“Home”键了,因为它“让我思考”。我很多时候都在误操作。事情本不应该是这样的!翻译 2013-11-25 09:15:22 · 3623 阅读 · 8 评论