本文是 <程序员的修炼-从优秀到卓越> 的读书笔记的第五篇,这本书的作者是 Jeff Atwood,StackOverflow 的创始人之一,Jeff 的文章涉及面很广,他是一个经验老道的程序员、管理者、创业者,这本书谈到了编程之外的很多东西,不管你是初级工程师,还是资深工程师,本书都值得一读。随着你的阅历的增加,每一次重读这本书,都会有不一样的感悟,正如书名“从优秀到卓越”,作者为你指明了道路,至于是否能成功,则要看自己的修炼了。
我会把读书过程中一些精彩的言论摘录下来,有时会加入一些自己的见解或者经历,读书笔记的大纲与书本身的大纲是一致的,这也是我从另外一个地方学到并一直在用的“如何阅读一本书”,记录下来方便自己经常查看,也方便读者查看。下面是<程序员的修炼-从优秀到卓越> 读书笔记系列:
- 程序员的修炼-01:绝地反击之术
- 程序员的修炼-02:编程之道
- 程序员的修炼-03:Web 设计原则
- 程序员的修炼-04:关于测试的一些思考
- 程序员的修炼-05:了解你的用户
- 程序员的修炼-06:互联网那些事
- 程序员的修炼-07:游戏与编程
- 程序员的修炼-08:阅读之美
逻辑人的争议
软件开发者身上的所有的“坏毛病”中,最严重的可能是:我们自以为是典型用户。然而大部分的开发者没有意识到的是,我们其实是异类,我们绝非等闲之辈 — 我们是边缘人。
作者提到了“逻辑人”和“现代智人”的概念
逻辑人:逻辑人渴望控制那些让他们感兴趣的东西,而那些让他们感兴趣的都是些复杂的确定性系统。人是复杂的,但他们不像机器,他们的行为不具有逻辑性和可预见性,最好的机器是数字的,因为这样它就能变得最为复杂、精细,病区能被程序员轻易改变。
现代智人:一般的普通用户,他们只是想简单地使用,而不是去控制。
对于逻辑人来说,控制是他们的目标,而复杂是他们愿意为之付出的代价,对于普通人来说,简单是他们的目标,失去控制权是他们愿意付出的代价。逻辑人被一种对工作原理难以抗拒的认知欲望驱使着,相比之下,现代智人渴望的是成功。
Alan Cooper 列了一些逻辑人的典型特征,你可以对号入座一下:
- 不惜牺牲简单以换取控制
- 不惜失败以换取认知
- 不放过任何一点可能性
- 行为像体育特长生
另外一句话软件工程师们需要谨记:任何人都能做出一个没人会用的复杂软件,这其实并不难!把软件做的简单易用才是真本事。你必须停止像逻辑人一样思考,而应该学会像现代智人那样思考。
象牙塔式的开发
象牙塔式的开发指的是:开发团队常年封闭在“高塔”之中,一门心思地做着魔法一般的软件。因为缺乏强有力的证据,开发者都假设其他人都是开发者,这是很危险的。
作者建议:在整个项目周期内,请尽力将你的开发人员暴露在用户面前:参加用户会议,参与可用性测试和验收测试,与用户进行交流,分析用户的数据和行为。
Eric 提出的“互信关系”:当人们从你那里购买软件的时候,他们对眼下和将来有很多期望:
- 他们相信,你的产品可以在他们的机器上正常工作
- 他们相信,如果他们碰到了问题,你会帮助他们
- 他们相信,你会坚持不懈地改进产品
- 他们相信,你会一一个公平、合理的价格为他们提供改进后的版本
- 他们相信,你的公司不会再短时间内破产
让程序员设计界面的后果
优秀的程序员都有自知之明,知道自己能做什么,不能做什么。他们要么直接拷贝别人的优秀设计;要么本分地只做编码,而把界面设计的工作交给其他专家。
是朋友,就别让你的朋友做出只有程序员才会使用的界面。
保护“中间分子”
专家和小白都只是一小部分人,大部分水平相当的用户都属于“中间分子”,你应该重视这些中间分子,中等水平的用户数量是如此巨大,他们如此具有主导性,以至于你可以放弃新手和专家级别的用户。
为了迎合为数不多的新手和专家,你在软件开发过程中耗费了大量的时间,最终只是让产品变得更差,结果还冷落了核心用户群。
每个用户都会说谎
用户的愿望与现实几乎总是相悖的,我们提倡要观察用户的实际行为,而不是听他们叙述他们的所作所为,其原因就在于这种背离。观察是一种很强大的技能,要学会通过人民的行为来判断,而不是听他们说什么就是什么。
作者提到了“活跃用户的矛盾体”这个概念:活跃用户的矛盾体是一种自相矛盾,因为如果用户对系统多一些了解,从长远来看,是会节省时间的。但现实世界里,人们的行为模式不是那样的。因此,我们不能忍工程师针对理想化的用户开发产品,因为现实中的人是非理性的,我们必须根据用户的实际行为模式来设计产品。
每个用户都会说谎,预期询问用户是否喜欢你的软件–他们当然会说喜欢,因为当面说你的软件有多么糟糕头型是多么的无理 – 你应该效仿 Gregory House : 去观察他们是否使用了你的软件,以及他们是怎么使用的。基于行为数据去设计你的软件,而不要靠用户说的“谎言”(不管那些谎言带有多大的善意)
别把产品发布当目标
衡量程序员是否成功,有个标准是看他发布了多少代码,但是仅仅发布是不够的,有多少用户正在使用你的软件,这才是衡量成功的终极目标
聪明的软件开发者知道,他们的工作远远不止编写代码和发布产品;他们的工作是开发出人民真正想要的使用的软件。这当然包括编码,但还有大量的全局性的其他的事情,比如撰写技术文档、交互设计、培养社区用户、乃至产品愿景,这些对于软件的全面成功都是至关重要的。如果连这一点都没有搞明白,那么你写了什么样的代码就无关紧要了。
别问,需观察
用户口述他们想做的事情,与他们实际的所作所为相比,往往天差地别。从可用性的角度来看,询问用户他们想要什么是徒劳的,原因就在这里 – 你必须观察他们正在做了些什么。在可用性方面,你不能猜测行事,你必须去观察用户如何使用你的软件,除此之外别无他法。
在做设计的时候,如果能基于用户对你的软件的实际使用方式来做决定,岂不是更合理?不管你是在“低保真的可用性测试”转几篇每个观察用户,还是收集用户行为数据、然后在无形之中观察用户,宗旨是一样的:别问,须观察。
功能越多越好吗
软件依靠新功能来推动销售,但久而久之,那些新增的功能恰恰是使得软件越变越糟的罪魁祸首 。那种正在慢慢滋生的微妙的“功能癖” — 他会摧毁人们最喜爱的软件。
一个不好的趋势是:软件公司把现有软件修复 bug 的优先级设得比较低,而把为接下来的版本开发新功能这事看的特别重要。导致的结果就是,软件的质量每况愈下。(就像 Flyme 和 MIUI)
我们也许不该在盲目地把软件当成一堆功能来衡量 – 人们总有“食量”限制,就像在吃自助餐时,那么多事物你吃得完么?我们应该以结果为导向,衡量软件在帮助我们完成任务时的生产力或效力。
生物会为所欲为
作者认为,社会工程充其量是一种不精确的科学,即使在网络空间原型里也是这样。有人曾经说过,“在最精心准备的实验中”,即使条件收到最严格的控制,生物也将为所欲为
在构造社会性软件时,人是所有问题的根源,但解决问题最终还得靠那些人
为了一点绶带
作者总结了自己在 Stack Exchange 的工作内容:我所做的是、我最擅长的是、我最最热爱并且胜过世界上任何其他事情的是,为喜欢相互写几段文字的人们设计大型多人游戏。我吧他们的痴迷,引导到某种积极的事情上面;他们可以从中学习,还可以为整个世界创造一些可以重复利用的美妙作品 — 这依然是我所欲之事,因为我还保留有源源不断的痴迷。
为反社会人群构建社交软件
作者提出了 “10个可怕的想法”:
- 从根本降低参与的门槛
- 信任用户
- 生活就是世界上最大型的多人在线角色扮演游戏
- 总有坏事发生
- 喜好胜过金钱
- 规则可以很有趣,并且具有社交性
- 所有的现代网站都按游戏的方式来设计
- 考虑周到的游戏设计促成可持续发展的社区
- 社区的观点不一定是对的
- 需要一定的调解
如果你想在网上学点东西,你必须好好设计你的软件,引导人们与生俱来的社会群体冲动,并使他们重新聚焦在有价值的事情上。
《程序员的修炼——从优秀到卓越》是《高效能程序员的修炼》的姊妹篇,包含了Coding Horror博客中的精华文章。全书分为8章,涵盖了时间管理、编程方法、Web设计、测试、用户需求、互联网、游戏编程以及技术阅读等方面的话题。作者选取的话题,无一不是程序员职业生涯中的痛点。很多文章在博客和网络上的点击率和回帖率居高不下—— from 豆瓣
Jeff Atwood于2004年创办Coding Horror博客(.codinghorror.),记录其在软件开发经历中的所思所想、点点滴滴。时至今日,该博客每天都有近10万人次的访问量,读者纷纷参与评论,各种观点与智慧在那里不断激情碰撞 —— from 豆瓣
《程序员的修炼——从优秀到卓越》的写作风格风趣幽默,且充满理解和关怀;适合从新手到老手的各个阶段的程序员阅读,也适合即将成为程序员的计算机和相关专业的学生阅读。《程序员的修炼——从优秀到卓越》能够帮助读者更多地关注技术工作的人性和人文因素,从而实现程序员职业生涯的成功转折 —— from 豆瓣