以《软件随想录》开篇
实习期间,闲来无事翻翻各种书,一本备受推崇的《软件随想录》便到了我手上。只觉得内容独辟蹊径,细读总有些道理。自认为尚未达到旁征博引炉火纯青的境界,在此摘抄几句寥寥。
1.比尔并不是真的想来评论你写的东西,他只是想确定你对实现那些目标是不是有把握。那个他准备好的最难的问题,如果你答出来了,没人知道会怎么样,因为还没有人答出来过。
这让我想起了实习公司的新晋产品总监。产品中心每周一早上10点会有一个汇报会。我有幸听过一次,这位总监不断提问,越问越难,甚至汇报者如鲠在喉,并且咄咄逼人的态势足以让人双腿发抖两眼发黑到会议结束后10分钟都缓不过来。如人饮水,冷暖自知。没有被逼问过的我反倒佩服这位总监,因为他问的问题都just to the point,能看出是用心良苦准备良久的。
2.从数量上说,优秀的人才很少,而且从不出现在招聘市场上。
确实有那么几分道理,大公司确实很多是从学校里直接捞人才的,他们更倾向于和学校共同培养,毕业直接为其卖命,这时候的学生尚未意识到世界上还有人才市场这件事情。校招实习不正是这么一种趋势么。。。前些日子,组里申请了些外包hc便发布到招聘市场,面试前大哥说,可以通过的人不一定会完全满足我们的招聘要求,只要保证聘来能用即可。
3.有些实习生确实是优秀程序员,但是我们愿意让他们离开。
不同的工作环境可能会影响一个人的潜力。所以,某个offer没有拿到不要灰心丧气啦,或许不是因为你能力不足的原因,而是面试官觉得你去另外一家公司更能发挥你的潜力。。
4.Fog Creek的招聘理念:聪明,能够完成工作,不收怪人。
“事实上,有时候,古怪反而是进入微软公司高级管理层的先决条件。”
5.没有什么比因为技术原因赢得一场由于政治原因本来要输掉的争论更让人心满意足了。
接触新的语言、框架和技术的经历会让程序员感到更开心。哪怕不敢为了学习的目的用新东西重写核心程序,搞搞内部工具也是可以的。如果程序员开始抱怨薪水,那这是一种他们不喜欢这份工作的信号哇。
6.内部激励比外部激励强得多。认同感很重要。
人们又追求局部利益最大化的倾向,如果用经济利益驱动,就是在鼓励程序员与制度博弈。更像是一种设计精巧的推卸责任的方法,表面管理层根本不知道如何引导人们做出更好的工作。我们要做的是创造一个有凝聚力的团队;并且需要向他们提供必要的信息,使雇员也能根据外部环境变化相应做出有利于公司的决定。
7.指针和递归的真正价值在于那种你在学习它们的过程中所得到的思维深度,以及你因为害怕在这些课程中被淘汰所产生的心理抗压能力,它们都是在建造大型系统的过程中必不可少的。
推理能力,抽象思考能力,以及在若干个不同的抽象层次上同时审视同一个问题的能力。不好意思,鄙人觉得自己这些能力都不精通!!!大学里与Java入门相关的计算机系课程让这些能力的欠缺欲盖弥彰。
8.世界上有80%的程序员是内部程序员。但是这些人,第一,永远无法用正确的方法做事。第二,做不出优秀的产品。第三,工作与主营业务不直接相关,没有管理层的了解。
这就是为什么程序员最满意的职业生涯实在真正的软件公司里,而不是在银行里担任IT技术人员。。。
9.如果你喜欢编程,那么你真是收到了上天的眷顾,你是非常幸运的少数人之一,能够以自己喜欢的事谋生。
大多数人的工作目的是为了攒下钱去干那些自己真正喜欢干的事。
10.毕业前练好写作,学好C语言、微观经济学。
我大概是为了这最后一条才开始写这篇随笔的吧。。正如公司里的EPC变革,每个需求都要有prd(产品策划)+详细设计文档(开发作)+单元测试代码。当技术文档的任务落在自己头上的时候,意味着自己已经开始放大自己的影响力了。。微观经济学方面,一个理解基本商业规则的程序员将会更有价值,搞懂供给和需求,明白竞争优势,理解净现值、贴现、边际效用。
11.随便找一样东西,如果你看不出它的缺点,那么你的思维转型还没有成功。 你之所以会有好运气,那是因为你寸土必争。
有一种思维定势,用批判的眼光看。改正了一个又一个小细节后,最后拿出一个真正优秀的产品。功能不仅可以用,而且还很美。
12.无论何时,只要设计报告用形容词来描述产品,而没有提及细节,那么你就知道你有麻烦了。
正如产品策划的prd中,要有现网逻辑+改动后的逻辑;进入开发前要有设计视觉稿。甚至包括到了字数截断、icon颜色具体值等等。。
13.世界上所有以内容为主的网站,没有一个会单单因为易用性的改善而多赚到哪怕一美元。
用户界面的设计目标是帮助用户能够成功操作。而社会化界面的设计目标是帮助人与人之间的社会关系能够成功运作,即使这意味这必须要冒犯某个特定的用户。避开攻击最好的方法之一就是让它看上去获得了成功,这是装死战术在软件中的表现。
14.在原始规划时,应该为以下几点留出缓冲:新的功能设想;对手的新动向;整合中出现的问题;解决各种错误;易用性测试;软件beta版测试。
正如我们公司里在需求评审的时候,会预估客户端开发时间,后台开发时间,联调时间,测试时间。若因为时间紧急没有留buffer,便会及时提出delay风险。这个时间预估是由一线程序员提出,并避免管理层向程序员施加的压力。
“循证式日程规划:在每个项目开始的时候花时间做详细规划,然后每天花几十秒在工作时间记录单上记录下何时开始完成一项新任务。”“有效的日程规划是创造优秀软件的钥匙。它强迫你首先完成最重要的功能,让你做出正确的选择,思考要开发一个怎样的软件。”
使产品更出色,使老板更高兴,使客户更满意。最重要的是!!6点准时下班!!!
15.从长远的观点来看,那些不关心效率、不关心程序是否臃肿、一个劲往软件中加入高级功能的程序员最终将拥有更好的产品。
正如内存价格直线下降,CPU速度每年都在翻番。
“简化性:可以理解成与用户行为紧密对应的程序模型以及由此产生的产品的易用性;也可以理解成简洁明快的视觉呈现仅仅是一种美学上的定义;但绝不能理解成不提供大量功能或只提供一种完美实现的功能。”
16.让错误的代码显而易见。
本质上,软件质量的改进会创造出新价值,而且价值创造的速度要快于成本提升的速度。如果压低程序员的工资,那么就会得到质量很垃圾的软件,而这实际上也不会省钱。5个平庸的程序员也代替不了1个优秀的程序员。人力与工时的互换真的是一个神话。
17.对你最重要、最关键的部分,一定要使用更原始的工具。
你对其有足够的信心,并且可以随时修改。
18.建立优质客户服务:“永久性解决问题。”“要求用户先改变设置再改回去以维护他们的自尊。”“帮客户解决好问题,他们实际上变得比没有问题时还要满意,是培养出死心塌地忠实客户的机会。”
19.软件开发周期的基本规则:
①确定发布日期,可根据客观情况也可根据主观愿望。
②列出软件要实现的功能,按照优先顺序排序。
③每当落后于预定进程时,就把排在最后的功能砍掉。
真正需要关心的不是这个月的利润,而是将所有时期包括未来的利润的总和最大化。从技术上看,要的是所有未来利润的净现值最大化。
还是个freshman的时候,好像想过自己大学要做点什么。但每次都是脑子一热,手上正在做的东西总会因为新想法的萌生而被搁置。
包括现在是个老腊肉了,在博客园久居的决定也不知道会持续多久。。。