《软件随想录》读书笔记
这本书写的很好,值得收藏,有很多惊喜的观念,也改变了我很多观念。
同时也觉得作者有一些夸张,煽动性比较强。所以看书也要保留自己的想法。
第一部分 人员管理
1 我的第一次BillG审查
我在大约24小时前交给他的规格说明书,他在几乎每一页(大概500页)都加了评语。
比尔的最后一个问题:”你能保证所有的日期函数都一样么?”。
我说:“是的,只有1900年的1月和2月除外“。
比尔:行了,好,做的不错。”比尔对技术的了解令人惊叹,他理解可变数据,COM对象,Automation与虚表的不同。他信任那个干事的人,就不会干涉软件,但是你不能糊弄他,哪怕是一分钟。那年比尔36岁。
不懂编程的人管理软件公司,就好像不懂冲浪的人硬要去冲浪。
我在1994年离开微软,我觉得比尔已经彻底将我忘了。
2 寻找优秀的程序员
和所有行业一样,优秀的程序员是不会出现在招聘市场上。
公司完蛋的另一个可能的原因是,既然雇佣了一个不合格的程序员,就可能雇佣一大堆不合格的程序员,累积起来就导致了最终的失败。
优秀的程序员是那么优秀,未来的雇主通常会一眼看出他们的优秀。
我的目的是着手建立与下一代优秀程序员的联系,管道长达6年,没关系,我有长远眼光。
不推荐使用员工推荐,这样推荐不来优秀的明星程序员。
3 寻找优秀的程序员之实战指南
《人件》是一本伟大的书,想让程序员高效的工作,那么必须给予他们安静和宽敞的工作环境。
带上耳机隔绝噪音被证明会降低程序员的工作质量。
要是你们所有人还是坚持老一套的做法,随你们便,我就让这一点成为我的竞争优势好了。
没有理由不给程序员配备顶级电脑。至少两块大(21寸-30寸)液晶屏幕,自由在(amazon)订阅他们想看的书。
程序员希望之所以被雇佣,是因为自己的技能,希望被比人当做专家那样对待,有全力在自己的专业领域中做出决定。
当一个程序员抱怨“人际关系复杂”时,晋升的原因不是成果,而是人际关系。不能使用最合适的编程语言,被迫做技术落后的东西。
为了留住程序员,银行执行两个策略:给程序员发一吨钞票,给程序员完全自由,允许使用想学的热门技术,一遍一遍的重写每件东西。
4 三种管理方法
军事化管理法,经济利益驱动法,认同法
5 军事化管理法
士兵应该害怕他们的长官,甚于害怕任何他们将要面对的危险。亲密永远不会让普通士兵面对危险时挺身而出,只有恐惧才会让他这么做。
老板通常获得的信息最少。
用这个方法,最后只能成为光杆司令。6 经济利润驱动法
用这个方法,会牺牲产品质量,功能,效率。而且最后得不到好的产品。
7 认同法
我非常喜欢的做法是大家坐在一起吃饭。
我对员工说,我明年打算再雇佣6个人,如果6.0不早点退出,那么费用就是很大的问题。于是通过分享信息,员工知道了怎么取舍6.0的上市时间,他们会做出最有利于公司的决定。
认同法就是创造一个有凝聚力,像胶水粘在一起的团队,人们就产生了忠诚感和义务感,同时还要提供必要信息,是公司向正确的方向前进。
第二部分 写给未来程序员的建议
8 学校只教java的危险性
我从来没有见过那个能用C语言中的指针编程的人,竟然不能在两天里面学会java语言,并且写出的java程序的质量竟然不能胜过那些有5年java编程经验的人士。
计算机科学是由证明,算法,语言,操作系统,编译器 所组成的。
9 在耶鲁大学的演讲
一个好看的软件比难看的软件销量要好。
如果你在facebook上班,那么你可以花一个月的时间优化人名选择部分的ajax效果,使它变得快速美观,这种付出是值得的,这使你的产品比竞争者优秀。
10 给计算机系学生的建议
大多数学生都自已为是,不向前辈请教,幸运的是,这样做是很可能是对的。
把C语言学好,微观经济学学好,选择大量编程实践的课程。
别忘了,我们是耶鲁大学,我们的使命是培养未来的世界领袖。你交了16万美元的学费,却在学循环语句的写法,这怎么可以?你以为这是什么地方,难道是机场沿途的酒店里临时拼凑起来不靠谱的Java语言培训班?
CS323课程(编程实践多)有一个最大的优点,那就是它让许多人明白了原来自己不是编程的那块料,永远也成不了程序员。
第三部分 设计的作用
11 字体平滑,反锯齿和次像素渲染
12 寸土必争
一个闹钟我都需要摆弄半天才弄清楚如何关掉它,失败的产品。
每天进步一小步,将东西做的比昨天好一点点。你最后拿出来的是一件真正优秀的产品。它的第一眼就让人觉得震撼。
13 大构想的陷阱
看东西的时候,你的视力只是在视野中很小的一块区域的高分辨率,眼睛能快速移动,并且神经将移动过程完全抽象掉了。 神奇~~一个团队一起设计软件是非常困难的事情
架构太空人,将事物抽象到太空的高度,那里没有氧气,已经失去了使用价值。
14 别给用户太多选择
15 易用性是不够的
避开攻击的方法之一就是让它看上去好像获得了成功。这是装死展示在软件中的表现。
让自己喜欢用自己的产品。
16 用软件搭建社区
让浏览器记录你看过那些帖子,只要主题中有人回复,那么对URL进行小小的重构。
没有护栏的盘山公路更安全。
第四部分 管理大型项目
17 火星人的耳机
18 为什么MIcrosoft office 的文件格式如此复杂
19 要挣钱,就别怕脏
这一部分收获很少。接口(耳机插口的设计和兼容),历史遗留问题(早期电脑存储能力极其低下),做一些麻烦事来赚钱(发布跨平台版本,WEB版本)
第五部分 编程建议
20 循证式日程规划
强迫自己先完成最重要的功能。
21 关于战略问题的通信
有一些程序员将大量的经历投入优化工作,将程序变得更紧凑、更快速。但某一天发现自己是白忙异常,因为CPU,带宽等等发展的太快了,这种努力“不会带来长期的竞争优势“。
从长远的观点来看,那些不关心效率,是否臃肿,一个劲的加入高级功能的程序员最后总将拥有更好的产品。
取代Ajax的想法。
22 你的编程语言能做到吗
如果不懂函数式编程,你就无法创造出MapReduce,来自lisp函数式编程。
23 让错误代码显而易见
程序员的四种境界:
I。分不清什么是干净的代码,什么是不干净的代码。
II。对干净代码有一个肤浅的认识,只能看他们是不是符合代码书写规范。
III。开始找隐秘的不干净代码。
IV。精心构建代码,写出清晰易懂,不容易出错的代码。所有的输入都是不安全的,都必须编码才可以输出。
改善代码的方法:函数写的简短,声明的位置离使用的地方近一点。不用宏创建自己的编程语言,不用goto,括号不要超过一个屏幕。
寻找一种代码的书写规范,让错误的代码容易被看出,让代码中的相关信息在显示屏上集中在一起,让你能够当场发现和改正。(例:nameStirng,一看就知道是字符串。)
异常处理的难度实在太大,我的智商不足以用好他们。
第六部分 开办软件公司
24 Eric Sink on the Bussiness of Software 的前言
你亲身经历新生意的慢慢成长,你会感到一种难以置信的激动。
25 Micro-ISV:From Vision to Reality 的前言
不要一个人创办公司,没有方向不要去开公司,一开始不要抱太高期望。
26 飙高音
最好的工作条件——最好的程序员——最好的软件——利润。
优秀程序员不仅仅是生产率高10倍,而是普通程序员永远都唱不了高音。
第七部分 经营软件公司
27 仿生学办公室
我们正式搬到了纽约第八大道,这里我们开始寻找办公场所已经过去10个月了,在这之前,我们就在卧室和后花园里办公。
良好的办公环境——尤其是单独的办公室——能够提高程序员的生产率。
办公室需要可以关上门,有许多电源接口,不要在地板上拖电线,接各种数据线(电话,网线,电视线),可以结对编程,可以看到远方,可以聚餐。
让程序员吧办公室当家,需要办公室比家更舒适。
这是我远离朋友和家人的地方,我会长年累月的呆着这里,所以办公室必须好。
办公室月租金分摊到每个人头上,大约人均700美元,但这样能更容易的找到优秀的程序员。
这一章以后再看一遍(220-223)
28 他山之石,不可攻玉
如果你没有源代码,就不能解决第三方应用带来的问题。
在没有开源的情况下,尽量用原始的工具,重要的内容还是自己写,这样出问题后还能解决。
开放源码,但照样收费。
29 简化性
如果推出新版本,其中包含新功能,我们就会看到公司的收入出现了迅猛的、确凿的、重大的、持续性的增长。
一种故意减少功能的产品是没有前途的。
30 揉一揉,搓一搓
程序员在创业的时候,通常有一个坏习惯,认为其他人都是与他一样的人,有和他一样的需求,或者一样的点子。
我不想推到重来,我用了生命中的3个星期,彻底把代码整理一遍:
不添加新功能。
无论何时向代码库提交,程序都能完善运行。
所坐的就是逻辑的交换,都是机械性的,不会改变代码。31 组织beta测试的十二个最高秘诀
开放测试得到的反馈结果几乎没用。
报名测试的人只有五分之一的人向你反馈。
32 建立优质客户服务的七个步骤
问题只解决一次。
客户键盘没插好,客服应该说:有时候键盘接口会有灰尘,导致接触不良。吹一吹灰尘。
衬衫因为我的失误,不合适,衬衫公司免费的换了一批,我想我以后都会在他们那定制衬衫。
当客户打来电话,这是一个千载难逢的机会,一个可以培养出死心塌地的忠实客户的机会。如果你做的好,客户逢人就说你的服务那么出色。
在客户面前,你是一个木偶,公司的木偶,顾客是对木偶发脾气,不是对你。
我们的顾客脾气好,原因是我们的退货政策慷慨的离谱,“如果你使用我们的产品,不觉得异常欣喜,我们就不要你的钱。”
对客户服务人员,公司出钱让他们攻读克伦比亚大学管理的硕士学位,所以我们得到了有抱负,聪明的技术人才,所以他们创造的价值也会多得多。
第八部分 发布软件
33 挑选发布日期
确定发布日期,将功能按优先顺序排序,当落后预期进程时,将排在后面的功能砍掉。如果这样做,你会发现你砍掉的功能不会让你感到后悔,如果他们确实重要,那么在下一个版本中加进去就行。
如果你要写一篇750字的杰作,你可以先写出1500字,然后再编辑。
如果顾客人数较少,你最好经常性的发布小幅修改的新版本。
如果你已经有了大量的用户,那么你最好不要频繁地发布新版本。
如果是几百万用户和几百万个整合点的软件系统,最好偶尔才发布新版本。在2.0版本之前,避免做大规模的宣传,2.0版本才是那个我们想要让地球上每个人留下第一印象的版本。
34 软件定价
分断定价:专业版,学生版,高级版
第九部分 修订软件
35 五个为什么
当某个地方出错的时候,你就问为什么,一遍遍的追问,直到你找到根本性的原因为止。
为服务稳定性设置一个静态值作为目标,那毫无意义。我们真正需要的是不断改进工作质量的流程,我们实时记录每一次服务中断,提供完整的事后分析,找到根本原因。
36 确定优先顺序
事实上,你听命于大客户的实际效果,只是让销售人员指挥开发人员,达到他们个人销售佣金最大化的目标。
你想把事情做完,无论何时,你一定要想清楚什么是眼下最重要的、必须马上做好的事情。如果你不做这件事,你就不能以最快的速度取得进展。
被收拾得干干净净的办公桌可能是一个信号,表明你的工作效率不高。
我一直蠢透了,长久以来,我觉得某件事是摆脱不掉的,我就想不如现在就把它做完。例如:买蓝色文件夹。
不要因为“反正迟早要做”,而去开发那些不重要的有趣味性的功能。
将功能定价,然后限定总价,选出值得做的功能。