《高效能程序员的修炼》读书笔记

2016-06-26

第1章 入门须知

  • 软件开发的整个历程,就是程序员耗尽毕生精力去编写代码,以使其他人能从代码编写工作中解脱出来,从而可以很方便的使用计算机来做他们真正需要做的事情的一个过程,所以不是每个人都需要知道如何去编程。
  • 跟钱打交道的人往往会挣很多钱,看看华尔街就知道了。
  • 预测未来最好的方法是创造未来。 - Kay
  • 杰出程序员跟普通程序员的区别不在于他们掌握了多少种编程语言,也不在于他们谁更擅长 Python 或 Java。真正的关键是,他们能不能把他们的想法表达清楚。杰出的程序员通过说服别人来达成协作,通过清晰的注释和技术文档,他们让其他程序员能够读懂他们的代码,这也意味着其它程序员能够重用他们的代码,而不必重新去写。
  • 人需要花一生的时间去学习如何有效的写作。这事没有捷径,你必须自己去提高,可以从写博客或从 stackoverflow 网站写回答开始,坚持每周练习几次(否则别想成为杰出的程序员)。
  • 每个人都应该大量写作,不管是撰写博客、写书、回复 stackoverflow 上的问答、写电子邮件,还是写其它的东西,写下来,然后回过头去斟酌一下。这种书面沟通有助于理清我们的思维。 - Jon Skeet

第2章 把一堆烂事搞定的艺术

  • 每一天,你一定要一起床就热情澎湃。否则,你就只是在打工。
  • 教同伴是提高我们自己的专业水平最好的途径之一。
  • 如果你想造一艘船,就不要催着工人们去收集木材,分派工作,发号施令,你应该教会他们的是对无边无际大海的渴望。
  • 迭代的速度胜过迭代的质量。
  • 编程这类任务需要你在大脑里同时记住很多东西,你记住的东西越多,你编程的效率就越高。请远离干扰,并且避免同时做多个项目。

第3章 高效编程之原则

  • 无论你的软件出现什么问题,甚至最开始出错的地方根本就不是你的代码,你也应该总是假定问题出在你的代码上,并且根据这个假定采取行动。
  • 作为一个软件开发者,你就是自己最大的敌人。你越早认识到这点,你的处境就会越好。
  • 最好的代码就是完全没有代码。每一行被你带到这个世界的新代码都需要被调试,需要被其他开发者阅读和理解,并且被维护和支持。正是因为我们当中的程序员写了太多糟糕代码,所以才说代码是我们的敌人。
  • 如果你热爱编程,而且爱的情真意切,那你应该惜墨如金。
  • 避免写注释。你应该总是专注于编写代码,而忘了还有注释这种东西存在。
  • 当我脑子里有了一个明确的目标并且有一段复杂的代码要写时,我会把时间花在实现代码上面,而不是(用注释)写下它的故事,讲给我自己听。
  • 不管文档上怎么说,源代码才是最终的事实,是你能找到的最好的、最确定的、最新的文档。
  • “向橡皮鸭求助”这种解决问题的方法,就是完全投入地向一个假想的人或者没有生命物体问一个透彻而详尽的问题。
  • 与其担心你全心投入的下一个大创意是否足够出色,不如担心你能执行得有多好。
  • 在软件开发领域,执行意味着专注于构成你的应用程序的所有微小细节。
  • 你团队里的每个人都应该能通过由陌生人主持的“电梯测试” —— 在60秒内,清晰的解释他们在做神马,以及为什么人们会在意他们正在做的事情。
  • 性能是一个特性(能帮助克敌制胜)。

第4章 招聘程序员须得其法

  • 在雅达利,我们聘用一个人的标准是看他的业余爱好,而不是依据他在学校里的学习成绩。
  • 应聘者对公司文化的认同往往比他们高超的编程技能更加重要,前者更能决定我们是否成功。
  • 不要让候选人主导面试过程。
  • 电话面试的目的,不是让候选人复述他们做过的事情,面试官应该把他们从舒适区推出去一点,问他们以前没见过或没做过的问题,你要了解这个人在面对新事物(比如你的代码库)时会做出什么样的反应。

第5章 促使团队紧密协作

  • 要想赢得信誉和尊敬,最好的方法就是努力工作并取得实实在在的成绩。
  • 如果你想建议些什么,你应该为此付出实际的行动,做好充分的准备。
  • 最有效的一种技术领导就是以身作则。
  • 让我们公开讨论,这样我们就可以相互学习怎样把我们喜欢的事情做得更好。
  • 只要保证你有超过一双的眼睛在看你写的代码,无论是结对编程还是代码审查,你都一定会开发出更好的软件。
  • 会议是浪费工作时间的最佳去处。
  • 你不必和团队里的每个人都成为朋友。
  • 永远不要低估真正和另一个人通话的力量,尤其当你是在远程办公。
  • 远程开发代表着未来。

第6章 蝙蝠洞:程序员的高效工作场所

  • 每个程序员都应该有两台显示器,有一台快速的电脑,自己选择鼠标和键盘,有一把舒适的椅子,能快速接入互联网,都应该有安静的工作环境。作为程序员,你要去争取应有的这些权利,你可以让公司做出改变,要不然你就换一家公司。
  • 购买一张优质的桌子和一把优质的椅子是你作为一名软件开发工程师所能做的最好的投资之一。
  • 拥有更多的显示空间确实会让你的工作更有效率。

第7章 设计时要把用户放在心上

  • 令人赏心悦目的产品和让人勉强容忍的产品的区别,就在于它们的细节有没有被做好。
  • 从用户角度来说,用户界面就代表了你的软件。
  • 用户界面设计优先于软件。
  • 理想情况下,搜索都应该只返回一个结果,那个结果就是你真正要找的东西,并且在一页内就能完全显示。
  • 用户不会阅读你放在屏幕上的任何东西。更具体的说,用户只会读取足以让他们完成任务的、最少量的文字。
  • 把最重要的内容写在尽可能靠近页面顶部的地方。
  • 终极的单元测试是,用户是否想要使用你的软件。
  • 除非你把软件发布出去,送到用户和客户的面前,否则你无法知道那些被做砸的东西到底是什么。
  • 应该对你的用户和客户做出及时的响应,并且通过基于他们的反馈持续改进和完善你的软件来展示你对他们的诚意。
  • 请尽早发布你的软件,即使第一版做的很差劲,也要坚持把它发布出去。

第8章 安全基础:保护用户数据

  • ......你访问过的网站越多,你以用户名和密码搭配的方式登录乃至信任的网络就越多,这些网络中某个网站被人攻破的概率也就越大......
  • 限制每个用户的登录尝试次数是安全领域的“101”。这样可以一定程序上防范字典是攻击。

第9章 加强代码测试,别让它太差劲

  • 把开发人员带到“战壕”里面去是至关重要的,因为开发人员交付代码后,客户才是真正与代码休戚与共的人。
  • 要先避免失败,最好的办法是不断的尝试失败。
  • 同级之间的代码评审时你为提高代码质量所能做的最大的贡献。
  • 我同情那些不写单元测试的傻瓜。
  • 任何时候当你想要把某些信息打印到屏幕或输出给调试器,你都应该把它改写成一个单元测试。
  • 如果你不找来真正的用户做可用性测试的话,你是无法知道你的程序能否正常工作的!
  • 快速失败。当你的程序碰到问题时马上失败,而不是自动绕开问题来使软件表现的更加健壮。

第10章 创建并管理社区,同时从中受益

  • 倾听社区的声音,但别被它们牵着鼻子走。
  • 优秀的艺术家善于模仿,伟大的艺术家善于剽窃。
  • 沉默以对是最残酷的惩罚方式。

第11章 揭露营销伎俩,以及如何规避

  • 禀赋效应。人们一旦拥有某项物品之后,他们对该物品价值的评价要比拥有之前大大增加。

第12章 轻重缓急,了然于心

  • 要搞明白你没日没夜的拼命工作到底是为了什么。
  • 经历胜过物质。

附作者最后推荐的程序员必读之书的豆瓣书单

Comments
Write a Comment