软件随想录读书笔记

这本书是一部关于软件技术、人才、创业和企业管理的随想文集。

作者以诙谐幽默的笔触将自己在软件行业的亲身感悟娓娓道来,观点新颖独特,内容简洁实用。

从不同侧面满足了软件开发人员、设计人员、管理人员以及从事软件相关工作的人员的学习与工作需要。

本书要点

如何从上大学伊始便规划自己的程序员之路?

成功的软件项目是如何运作的?

怎样才能找到并留住最优秀的程序员?

软件公司具备哪些特质才能成功?

本书是一位软件行业老兵的随想录,为圈内圈外的读者了解软件行业打开了一扇门。

总结了软件行业最本质、最重要的实践、技巧和种种前车之鉴

精编书摘

人员管理

作者通过回忆在微软工作的时候,自己设计Excel函数语言的时候被比尔盖茨做例行审查,盖茨在作者提交的规格说明上认真做了笔记,审查的时候问了非常细致的问题,包括一个在之前产品出现的日期函数错误问题。作者通过将比尔盖茨与其他几位不懂技术的大公司高管对比,得出结论。

优秀的人才从不在市场上求职

内部激励比外部激励强的多。人们会为那些他们真正想做的事格外努力地工作。

认同法的管理目标是,使得人们认同你希望达到的目标。

认同法的作用是设法创造出内部激励。

写给未来程序员的建议

能够在多个抽象层次上同时思考问题的能力,是设计出哟秀软件架构所必须的。

当程序员遇到问题的时候,他们会把问题重新定义,使得这些问题可以用算法解决。这样一来,问题转化成他们可以解决的形式,但是实际上,那些问题是一种琐碎的问题。也就是说,程序员解决的只是问题的某种外在形式,而并没有解决真正的问题。

微软公司中那些真正优秀的程序经理都是具有优秀写作能力的人。

对计算机专业学生的7条建议

  • 毕业前练好写作
  • 毕业前学好C语言
  • 毕业前学好微观经济学
  • 不要因为枯燥就不选修非计算机专业的课程
  • 选修有大量编程实践的课程
  • 别担心所有工作都被印度人抢走
  • 找一份好的暑期实习工作
  • 寻求专业人士的帮助,培养自信心

团体中最有权势和影响力的程序员正是那些表达能力强的程序员,他们无论是做书面表达还是做口头表达,都能够清晰、自如、具有说服力地传达观点。

一个普通程序员与一个优秀程序员的区别,在于他们能否与他人交流思想。

设计的作用

一般情况下,用户在面对模棱两可的选择的时候,会倾向于自己习惯的那种。

创造一个有使用价值的软件,就必须时时刻刻都在奋斗,每一次的修补,每一个功能,每一处小小的改进,都是在奋斗,目的就是为了再多创造一点空间,可以再多吸引一个用户加入。没有捷径可走。你需要一点运气,但是这不取决于你是否幸运。你之所以有好运气,那是因为你寸土必争。

给客户的选择越多,他们的选择就越困难,就会感到越不开心。

社会化软件运作的方式在很大程度上决定了围绕它所形成的用户社区的类型。

避开攻击最好的方法之一就是让它看上去好像获得了成功。

管理大型项目

在它们的结合点,所有相关的事宜都必须取得一致,否则两者无法一起工作。

标准当然很重要的,但不能迷信标准。

理想主义者在大原则上是百分之百正确的,而实用主义者在现实中也是正确的。

编程建议

你的目的是最有效率、最物有所值地实用你的时间。

只有第一线的程序员才能提出完成日期的估计值。

一发现错误就立即修正,将用时算入原始任务的用时之中。

防止管理层向程序员施加压力,要求加快开发速度。

一份日程规划就是一个装满木块的盒子。

有效的日程规划是创造优秀软件的钥匙。它强迫你首先完成最重要的功能,让你做出正确的选择,思考要开发一个怎样的软件。

从长远的观点来看,那些不关心效率、不关心程序是否臃肿、一个劲往软件中加入高级功能的程序员最终将拥有更好的产品。

程序员的最高境界:用心构建代码,发挥洞察力,将它们写的清晰易懂,不容易出错

这里提到了如何应对XSS攻击

让错误的代码显而易见是一种很好的实践,但未必是所有安全问题的最佳解决方案

让一行代码相关的所有信息尽可能地靠拢,缩短它们之间的物理距离。

只要一看到代码,就会试着去找出错误,这样能防止程序出现问题。

为了使代码真正强壮可靠,当你查看代码的时候,需要有一个好的代码书写规范,允许相关信息集中在一个地方。

出现在你眼前的关于代码行为的信息越多,你就能越轻松简单地发现错误。

开办软件公司

创办软件公司的真正乐趣就是,创造一些东西,自己参与整个过程,悉心培育,不间断地劳作,不断地投入,看着它成长,看着自己一步步得到报偿。这是世界上最带劲的旅程。

本质上,软件质量的改进会创造出新的价值,而且价值创造的速度要快于成本提升的速度。

经营软件公司

良好的办公室——尤其是单独的办公室——能够提高程序员的生产率

组织beta测试的最高秘诀

  • 开放式的beta测试是没有用的
  • 要想找到那些能够向你反馈意见的测试者,最好的方法是诉诸他们言行一致的心理
  • 不要妄想一次完整的beta测试的所有步骤能够在少于8-10周的时间内完成
  • 不要妄想在测试中发布新的软件版本的频率能够快于每两周一次
  • 一次beta测试中计划发布的软件版本不要少于4个
  • 如果在测试过程中为软件添加了一个新功能,那么哪怕这个功能非常微小,整个8个星期的测试也要回到起点,从头来过,而且你还需要再发布3个或4个新版本
  • 即使你有一个申请参加beta测试的步骤,最后也只有五分之一的测试者会向你提交反馈意见
  • 不要混淆技术beta和市场beta

技术支持团队必须能够与开发团队直接沟通。

发布软件

软件开发周期的基本规则

  • 确定发布日期,这个日期可以根据客观情况也可以根据主观愿望进行选择
  • 列出软件要实现的功能,然后按照优先顺序排序
  • 每当落后于预定进程时,就把排在最后的功能砍掉

挑选软件发布日期的三种方法

  • 经常发布稍作改进的版本
  • 每12到18个月发布一次
  • 每3年到5年发布一次

如果你的顾客人数较少,那么最好经常性地发布小幅修改的新版本

如果已经有了(或者想有)大量的付费用户,那么最好不要频繁地发布新版本

对于有几百万用户和几百万整合点的软件系统,最好偶尔才发布新版本

从易用性的角度看,降低发布的频率,把多处修改改为一次发布,而不是多次发布。而且在发布的时候,努力使得整个网站的视觉效果发生变化,让网站看上去怪怪的,使得用户凭借直觉就知道网站发生了重大变化。

修订软件

当某个地方出错的时候,就问为什么,一遍遍地追问,直到找到根本性的原因为止。然后,针对根本性的原因开始着手解决问题,要从根本上解决这个问题,而不是只解决一些表面的症状。

最好尽一切可能坚持制作面向整个市场销售的上架软件。

不要因为有些事情不得不做,就去做。

如果想把事情做完,无论何时,一定要想清楚什么是眼下最重要、必须马上做好的事。