`
wdhdmx
  • 浏览: 300317 次
  • 性别: Icon_minigender_1
  • 来自: 山西
博客专栏
D4bbb5f7-9aa4-3e66-8194-f61b3f0241c2
天天编程
浏览量:21515
社区版块
存档分类
最新评论

《软件随想录》读书笔记

阅读更多

 

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

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

 

第一部分 人员管理

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

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


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


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


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


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


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



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics