欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《软件随想录》读书笔记

程序员文章站 2022-04-30 17:16:24
...

 

这本书写的很好,值得收藏,有很多惊喜的观念 ,也改变了我很多观念。

同时也觉得作者有一些夸张,煽动性比较强。所以看书也要保留自己的想法。

 

第一部分 人员管理

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 确定优先顺序

事实上,你听命于大客户的实际效果,只是让销售人员指挥开发人员,达到他们个人销售佣金最大化的目标。


你想把事情做完,无论何时,你一定要想清楚什么是眼下最重要的、必须马上做好的事情。如果你不做这件事,你就不能以最快的速度取得进展。


被收拾得干干净净的办公桌可能是一个信号,表明你的工作效率不高。


我一直蠢透了,长久以来,我觉得某件事是摆脱不掉的,我就想不如现在就把它做完。例如:买蓝色文件夹。


不要因为“反正迟早要做”,而去开发那些不重要的有趣味性的功能。


将功能定价,然后限定总价,选出值得做的功能。