杨二

Machine repeats, Human creates

阅读笔记《软件随想录》

我的第一次BillG审查

比尔并不是真地想来评论你写的东西,他只是想确定你对实现那些目标是不是有把握。他的标准做法是不断地提问,越问越难,知道你答不上来,承认自己不知道为止。

迷信MBA的人们总是愿意相信,懂不懂公司业务没关系,只要懂管理就行。

优秀的程序员在哪儿

就同所有行业中最好的人才一样,那些优秀的程序员是不会出现在招聘市场上的。通常优秀的程序员在整个职业生涯中,可能会有4次求职。

一些真正优秀的程序员往往在10岁的时候就开始编程。

寻找优秀的程序员之实战指南

Fog Creek的招聘理念:

  • 聪明
  • 能够完成工作
  • 不收怪人

许多人选择编程,首要的原因就是,他们宁愿将自己的时间花在一个公平有序的地方,一个严格的能者上庸者下的地方,一个只要你是对的就能赢得任何争论的地方。

写给未来程序员的建议

对于某些最激动人心的编程任务来说,指针仍然是非常重要的。比如说,如果不用指针,你根本无法开发Linux内核。如果你不是真正地理解指针,连一行Linux代码也看不懂,说实话,任何操作系统的代码你都看不懂。

指针和递归要求一定水平的推理能力、抽象思考能力,以及最重要的,在若干个不同的抽象层次上同时审视同一个问题的能力。因此,是否真正理解指针和递归与是否是一个优秀的程序员直接相关。

在耶鲁大学的演讲

我在西海岸生活的那段日子让我习惯了这样一种看法,即管理只是一种不得不做、让人厌烦的杂物活,之所以公司需要管理,就是为了不影响聪明人的工作,让他们把事情做完。经理存在的唯一理由就是把家具的位置摆好,不要挡道,只有这样,真正的天才才能做出优秀的成果。

给计算机系学生的建议

大多数学生都很自以为是,从不会虚心向前辈求教,他们觉得那样太烦。但是,很幸运,在计算机领域,这样做是对的。因为他们的前辈很可能会说一些不靠谱的话,比如“到2010年之前,对纸带打孔员的需求将超过1亿人”,还有“目前Lisp语言的相关人才非常抢手”

  • 毕业前练好写作
  • 毕业前学好C语言
  • 毕业前学好微观经济学
  • 选修有大量编程实践的课程
  • 选修几门非计算机的课程
  • 别担心工作被印度人抢走
  • 找一份好的暑期实习工作

设计的作用

除非受过专门的训练,明确知道自己想要什么,否则人们挑中的就是人们最熟悉的。

你之所以有好运气,那是因为你寸土必争。

为了发现可以改进的地方,你必须有一个思维定势,始终如一地用批判的眼光看世界。随便找一样东西,如果你看不出它的缺点,那么你的思维转型还没有成功。

无论何时,只要设计报告用形容词来描述产品(“该产品酷毙了”),而没有提及细节(如“它的标题将是拉绒铝的颜色,所有的图标将带有一点反光,好像被放在三角钢琴上一样”),那么你就知道你有麻烦了。

微软公司和开源软件运动都存在这个问题,那就是程序员受到一种愿望的驱使,渴望方方面面都照顾到,让每个人都感到满意。但是这种愿望的基础其实是一个不正确的认识,更多的选择会不会让用户感到更幸福,我们需要重新思考这一点。

管理大型项目

火星人的耳机

每一个业内的程序员至少应该理解标准如何生效、标准应该如何生效、我们又怎么会沦落到今天这种一团糟的局面。(说的是Web浏览器标准)

Jon Postel的鲁棒性原则:输出行为要保守,接受行为要宽容。

编程建议

不必太在意软件的效率问题和内存占用,只要把很酷的功能做出来,然后等着硬件升级就可以了。

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

每一行代码都可以通过自身判断正误。

寻找一种代码的书写规范,让错误的代码变得容易被看出。让代码中的相关信息在显示屏上集中在一起,使你能够当场发现和改正某些种类的错误。

写出真正可靠的代码的方法就是使用那些考虑了人类常见缺陷的简单工具,而不是使用那种含有隐藏副作用、产生有瑕疵的抽象层、假设程序员绝对不会出错的复杂工具。

经营软件公司

几乎所有技术支持方面的问题都有两种解决方案。一种是表面的、快速的解决方法,只求把问题解决了事。但是只要你深入思考一点,就会发现还有另一种解决方式,能够防止类似的问题再次发生。如果每次发生问题,你就寻找解决方法,永久性地解决它,那么长此以往,会发生什么结果?那就是所有常见的和容易的问题都被解决了,留下来的都是一些非常罕见的和奇特的问题。