第一部分 : 人员管理
1 我的第一次BillG审查:
在这个小结里面,作者通过回忆在微软工作的时候,自己设计Excel函数语言的时候被比尔盖茨做例行审查,盖茨在作者提交的规格说明上认真做了笔记,审查的时候问了非常细致的问题,包括一个在之前产品出现的日期函数错误问题。作者通过将比尔盖茨与其他几位不懂技术的大公司高管对比,得出结论。
“不懂编程的人管理公司,就好像不懂冲浪的人硬要去冲浪。”
我比较赞同作者的这一想法,通过自己为数不多的项目经验,我也能体会到一个内行的leader对一个软件项目的成功起到决定性的作用。假如团队的领导只遵循经济,管理或者其他一些行业的经验,盲目地参与到软件开发的需求获取,设计甚至系统架构过程中,那么这个项目十有八九会遭遇失败。
2 寻找优秀的程序员
3 寻找优秀的程序员之实战指南
这两节中,作者从理论和实践上向管理者传授了如何识别和招揽优秀程序员的方法。有一个观点说得很有道理,优秀的程序员不会出现在各类招聘市场和求职网站上,因为他们在一开始就会早早地从一个较好的实习公司得到机会,不用去找其他工作。如果它们离开了当初的公司,一种情况是创业,一种是跟着老板跳槽到另一家公司。这里我想说,优秀的程序员也可能是因为有很多猎头和一些公司的HR会主动联系他们而不会出现在招聘市场上。那么如何招揽优秀的程序员呢?作者就给出了创建技术社区,去名校招揽实习生作为人才储备,还有就是内部员工推荐,当然最好的方法还是使自己的产品足够有吸引力,无论是在前景或者经济或者技术上。同时在社交、生活等方面,要尊重程序员的成果,给予他们一定程度的自主权。看到这里我想起了马云曾说过的关于人才管理的一句话,员工为什么离职?要么是钱没给到位,要么是心受委屈了。真是切中要害。
在第三节,作者说程序员实际上不在乎钱,当有人在抱怨薪水的时候,说明他不是真正地喜欢现在的工作。这实际上跟我所处的环境的所见所闻有所不同。我所看到的周边的同学,在找工作的时候薪资的因素会考虑比较重的分量。大概是因为国情不同吧,我们这边的习惯是结婚成家必须有房子,有车更好,所以大家在经济上的压力还是比较大的。不过有一个现象是合理的,就是技术越强的人,能够找到自己满意薪资的职位的概率越大,薪水的水平也一般在最高的水平。
4 三种管理方法
5 军事化管理法
6 经济利益驱动法
7 认同法
在人员管理中比较流行的三种方法是军事化管理法、经济利益驱动法和认同法。军事化管理方法绝对不适用于程序员的管理。因为程序工作是创造性的工作,军事化管理需要的是绝对服从和严明的层级关系,这只会抹杀创造力,造成公司的人员僵化,从而极大降低工作效率。经济利益驱动的缺点是他将工作的驱动力从强大的内部驱动转变为相对弱的外部驱动。还有可能使程序员们具有局部利益最大化倾向,从而使他们的目标从优雅高效地实现需求转为考虑如何使得自己获得的酬劳最大化。而认同法,指的是使员工们认同你希望达到的目标。这种方法被认为是管理程序员最好的方法,但是实施起来也比较困难。结合我自己的经历,我非常赞同认同法是管理软件团队最好的方法,但是更同意它是一种实现起来比较困难的方法。可以说在我接触的程序员中,绝大多数都不是说对自己做出的东西有多么的认同。但是我认识的那两三位真正在做自己非常喜欢做的技术和产品的同学,都已经取得了相当的成就。
第二部分 :写给未来程序员的建议:
8 学校只教Java的危险性
作者的观点是,Java这门语言可能很适合工作,但是它的出现给程序员的教育带来负面影响。Java的出现屏蔽了一些类似指针和底层函数等能够区分程序员学习能力和智商能力的语法点,使得优秀的程序员和平庸程序员之间的差异变得不再突出。Java使同学们变得越来越懒。作为一个在学习和工作中主要使用Java语言的码农,我表示虽然很不情愿,但是作者说的对。虽然我们学校不是作者所说的只教Java的学校,但是我们院出来的同学好像都是把Java作为主要语言。仔细回想,我们的C++课,Linux课,我自己确实学得都不太好。希望能在之后的工作中,不怕吃苦,不惧困难,努力提高自己的技术全面性吧。
9 在耶鲁大学的演讲
10 给计算机系学生的建议
这两节中,作者给出了他对计算机类学生的建议。主要是7个方面:
毕业前练好写作;
毕业前学好C语言;
毕业前学好微观经济学;
不要因为枯燥就不选修非计算机专业的课程;
选修有大量编程实践的课程
别担心所有工作都被印度人抢走;
找一份好的暑期实习工作;
对这七条建议,就我自己而言可能就选修大量实践课程稍微符合。相信大家跟我一样,对印度人抢工作的说法比较感兴趣。原来在美帝各个行业都在担心中国和印度会抢他们的饭碗,看来人多力量大在IT领域的宏观观察方面还是靠点谱的。针对这种想法,一是真正优秀的程序员根本不会怕失去工作,二是除了计算机,其他的专业找工作的时候更坑爹,就作者的这两种观点,我无法反驳。
第三部分 :设计的作用
11 字体平滑、反锯齿和次像素渲染
这节的内容是作者通过比较微软和苹果对字体锯齿处理时候的不同思想,得出苹果重视桌面和出版物的设计效果,而微软则更倾向于实用性,但是这两种设计思想都会得到各自用户的认可。然后作者抛出观点:一般情况下,用户在面对模棱两可的选择的时候,会倾向于自己习惯的那种。
12 寸土必争
在开发商业软件的时候,我们应该对每一个细节反复思量,不放过任何能够产生正作用的微小改进。
我觉得就是这样,在产品上,所谓制作精良和粗糙的对比,对比的就是细节。就我们编写代码来说,当你的每个组件,每个函数都考虑算法和效率以及写法的优雅性,那么我们整个项目就不会说搞得很杂乱,很难看。
13 大构想的陷阱
本节是对《梦断代码》一书的评论。作者指出:在软件开发中,如果你头脑提前有了一个整体构想然后马上一头扎入工作去实现,那么久陷入了所谓的“构想陷阱”。一是对自己的构想过于自信,二是没有考虑团队沟通的问题。
其实我觉得就是针对这种陷阱,我们才有了后来软件开发过程中的需求分析,体系结构,模块设计,详细设计等阶段。不过凡事皆须有度吧,由于软件开发的特殊性,有时候我们按部就班地做了这些工作后发现,其实所有阶段的产出都被后续阶段修改的面目全非,那么这些阶段产物的维护管理又是很大的开销。所以,我们又有了敏捷开发的快速迭代模式。具体怎么搞,这个过程究竟是要多大程度上使用传统的软件工程迭代和敏捷开发,感觉还是要根据具体项目和团队成员来确定。
14 别给用户太多选择
“关闭笔记本竟然有15种不同的方法”,这是作者本节对微软vista操作系统的吐槽。
像这种问题,当一个功能的解决方案有很多备选的时候,我觉得正确之道是做一个调查,选出大家最认可的两三种保留,其他的可以一概不要。
15 易用性是不够的
本节旨在说明做好易用性的下一步是做好社会化界面的设计:主要包括界面的协调性、功能可见性、反馈性等。这章感觉没什么新意。
16 用软件搭建社区
程序员由于工作性质,一般比较宅,但是每个人都具有社会性,程序员也会渴望有多一点而的人际交往。于是他们涌向在线社区。我觉得我自己就是这样的,除了微信朋友圈之外,我经常刷知乎,微博,水虎扑论坛等。感觉技术上的社区对程序员之间的交流作用比较大,这里推荐一下v2ex, 程序员专属的交流场所。
第四部分 :管理大型项目
17 火星人的耳机
“Web标准”非常混乱,作者举了IE7和IE8之间冲突的例子。实际上由于这些混乱的标准,现在IE在前端界根本不受待见,几乎稍微现代一点的网页项目都是只需要在chrome和firefox里面运行正常就可以了。
然后作者就举了一个为火星人造耳机的例子来说明开发者面对各种各样不同的“标准”是怎样崩溃的。
18 为什么Microsoft Office的文件格式如此复杂
08年,微软公开了Office文件的二进制格式说明书,光Excel有349页那么多都没说完。然后作者说,要写出能与Office竞争,完美读取和生成所有Office文件的软件,需要几千年的工作量。我觉得金山WPS可能需要传授作者一点人生的经验。可能作者这里说的是一个人开发出所有的Office 办公软件吧。当然,这确实不太现实。
19 要挣钱,就别怕脏
这既是针对软件公司的运营来说的。包括业务推广,招聘各类型的人才,客户量的激增之后带来的各种麻烦。总而言之,创业在当今并不是随便找两个人搞个APP发布了,靠吹吹牛拉点投资就能叫创业那是非常可笑的想法。