Leo荐书系列介绍:
由于博客访问量的关系,某些PR公司找我写软文的价码儿已经开到千字600块了,但是本博客上仍然没有任何一篇某公司花钱买去的文章。我愿意花时间写的东西有三个特点,首先是写的不错,之后要么是对大家有帮助、要么是对我有帮助。
最近,常有出版社的编辑找我写书评或者读后感,我也希望能通过自己的阅读向大家推荐些好书,于是在博客上开了这个“Leo荐书”系列。目前计划每月更新两期。
Joel Spolsky给计算机专业大学生的建议
北京图灵的刘静编辑找到我,希望我写个《软件随想录:程序员部落酋长Joel谈软件》的读后感。我查了下,书的原名叫《More Joel on Software》,针对Joe之前出过的一本《Joel on Software》而言本书是第二本所以多个More,是由Joel的随笔、讲座集结而成,相当部分可以在他的博客上找到。至于为什么中文名字这么怪,为啥要很莫名的叫酋长,那您怕是要去问出版社了。
因为还没有样书,所以我从她给我的目录里选了三章,它们的名字是:
第8章 学校只教Java的危险性
第9章 在耶鲁大学的演讲
第10章 给计算机系学生的建议
从目录上看以上三章对目前正在就读大学的同学应该很有帮助。
“学校只教Java的危险性”里Joel的意思是Java比C更简单,可以降低计算机系同学的淘汰率,所以开设的学校越来越多;另外他还不同意美国很多学校取消数据结构和函数式编程这两门学起来很难的课。他的观点是课程太简单,不能淘汰那些不应该成为程序员的人。
托教育改革的福,中国的大学数据结构还是必修课,函数式编程好像是放在C语言里讲的。具说Joel的网站每篇文章点击都超过10万,不知道是否大家都同意他“大学课程越来越容易不便淘汰学生的观点”,反正我认为此观点不适用于国内。随着时间的推移,国内大学教育已有从精英教育转向职业教育的趋势,很多课程就是为了让大学易于掌握,说白了是门手艺,出去好谋生。搞的太复杂不利于大多数人,另外真正对计算机科学有兴趣的同学自会继续深造,多半与课程楼上月设置无关。
“在耶鲁大学的演讲”里Joel回顾了自己的大学生涯和职业生涯,其中包括不同公司对程序员的态度,值得大家借鉴。其中有关“内部程序员”的特征就是国内“做项目”程序员的切实写照。Joel的观点是“世界上大概有80%的程序员是内部程序员,如果你从学校毕业的时候
不是非常非常小心,你可能会发现不经意间你已经在开发内部软件了。让我告诉你,这种工作会把你榨干。”所以,尽量不要做“内部程序员”而应该去专业的软件公司,他提出三个理由:
1、你永远无法用正确的方法做事。你总是被迫用最保险的方法做事。
2、一旦你的程序可以用了,你就不得不停止开发。所有那些内部程序看上起就像给狗吃的早餐,只要狗能吃饱就行了,何必再多花钱让食物变得色香味俱全呢?你辛辛苦苦做出来的只是一些令人难为情的次品,然后,你还必须十万火急地为去年制造的次品打补丁。
3、如果你在专业的软件公司中编程,你的工作与公司的主营业务直接相关,是能够为公司直接带来收入的。这至少意味着一件事情,就是管理层会想到你。也就是说,你能得到最好的福利、最舒适的办公室和最佳的晋升机会。
我看的部分整体行文都很精彩,尤其是提到以上三个理由。做“内部程序员”其实也是国内大部分程序员员的现状,多少有些不得以而为之——每个人都应该先解决生存问题。
“给计算机系学生的建议”里Joel提出了8条建议:
(1) 毕业前练好写作。
(2) 毕业前学好C语言。
(3) 毕业前学好微观经济学。
(4) 不要因为枯燥就不选修非计算机专业的课程。
(5) 选修有大量编程实践的课程。
(6) 别担心所有工作都被印度人抢走。
(7) 找一份好的暑期实习工作。
(8) 寻求专业人士的帮助,培养你的自信心。
并对8条建议做了逐一的分析。让我惊讶的是第5条和第7条也是我在大学讲座里经常提及的,包括我写的《程序员羊皮卷》里也有提到。当然Joel讲的比我更加深入,希望大家有空去看看。
最后说下本书翻译,在最近看的译版著作里算是比较好的,可以看出译者阮一峰是下了很大功夫的,有关他的努力参考博文:http://www.ruanyifeng.com/blog/2008/10/i_will_translate_more_joel_on_software.html
相信本书其它的章节会更精彩,期待您的亲自阅读。
本书购买地址:http://www.china-pub.com/196194
附录:
软件随想录:程序员部落酋长Joel谈软件
内容提要
本书是一部关于软件技术、人才、创业和企业管理的随想文集,作者以诙谐幽默的笔触将自己在软件行业的亲身感悟娓娓道来,观点新颖独特,内容简洁实用。全书分为36讲,每一讲都是一个独立的专题。
本书从不同侧面满足了软件开发人员、设计人员、管理人员及从事软件相关工作的人员的学习与工作需要。
目 录
第一部分人员管理
1我的第一次BillG审查
那个时候,我们有一档子事叫做“BillG审查”。基本上,比尔·盖茨会审查每一个重大的功能。比尔说Fxxx这个词的次数越少,就代表审查的结果越好……在我的BillG审查大会上,微软的管理层都到场了。
2寻找优秀的程序员
优秀的程序员都在哪里?我能请到他们吗?员工推荐可靠吗?
3寻找优秀的程序员之实战指南
优秀的程序员想要什么?在工作环境中他们喜欢什么?不喜欢什么?如何使你的公司成为顶尖程序员的头号选择?
4三种管理方法
如果你要领导一个团队,或者一家公司,或者一支军队,或者一个国家,那么你面对的主要问题是如何“让人们去做你要他们做的事”,更文雅的说法是如何让所有人都向同一个方向前进。
5军事化管理法
软件开发团队中的优秀程序员可以去任何他们想去的地方工作。在这种前提下,如果被人当成士兵一样对待,他们会感到相当扫兴,因此你要是这样做,最后就只能成为“光杆司令”了。
6经济利益驱动法
“经济利益驱动法”假设每个人的行为动机都是金钱,让人们听命于你的最好方法就是给他们物质奖励或者物质惩罚,以此创造行为动机。如果你使用经济利益驱动法,你就是在鼓励程序员与制度博弈。
7认同法
一般来说,认同法要求你创造一个有凝聚力的、像胶水一样粘在一起的团队,就好像家庭一样。这样一来,人们就会对他们的同事产生忠诚感和义务感。
第二部分写给未来程序员的建议
8学校只教Java的危险性
作为一个雇主,我发现那些100% Java教学的计算机系已经培养出了相当一大批毕业生,这些学生只能勉强完成难度日益降低的课程作业,只会用Java语言编写简单的记账程序,如果你让他们编写一个更难的东西,他们就束手无策了。他们的智力不足以成为程序员。
9在耶鲁大学的演讲
在学校里,明白自己应该学点儿什么最重要;在职场上,明白自己想要什么以及该如何为目标奋斗最重要。
10给计算机系学生的建议
想成为一名优秀的程序员吗?一定要记住这七条建议。
第三部分设计的作用
11字体平滑、反锯齿和次像素渲染
苹果公司和微软公司的根本不同之处在于指导思想。
12寸土必争
创造一个有使用价值的软件,你必须时时刻刻都在奋斗,每一次的修补,每一个功能,每一处小小的改进,你都在奋斗,目的只是为了再多创造一点空间,可以再多吸引一个用户加入。没有捷径可走。
13大构想的陷阱
你在头脑中形成了一个整体的设想,想好了下一步要做什么,一切看上去都清楚无比,都不用你再设计什么东西了。你马上就一头扎入了工作,开始落实你的设想……这时候,你就已经犯了两个错误。
14别给用户太多选择
程序员受到一种愿望的驱使,渴望方方面面都照顾到,让每个人都感到满意。但是,这种愿望的基础其实是一个不正确的认识,更多的选择会不会让用户感到更幸福,我们需要重新思考这一点。
15易用性是不够的
社会化界面比易用性设计更重要。如果社会化界面一塌糊涂,那么就算你有世界上最好的用户界面,你的软件也活不了。
16用软件搭建社区
软件项目同建筑项目一样,设计规划非常重要,它能够决定在线社区的成败和它的类型。
第四部分管理大型项目
17火星人的耳机
“Web标准”到底该不该存在?它为什么会乱成今天这种一团糟的局面?
18为什么Microsoft Office的文件格式如此复杂(以及一些对策)
Office软件是复杂得不可理喻、功能极其丰富的应用软件。你不可能只实现其中最常用的20%的功能,然后指望80%的用户会感到满意。
19要挣钱,就别怕脏
不管别人雇你干什么工作,你都会遇到某种很不顺心的麻烦事。……但是,重要的一点是,每当你新解决了一件“麻烦事”,你的业务和市场都会有巨大的增长。
第五部分编程建议
20循证式日程规划
有效的日程规划是创造优秀软件的钥匙。这会使你的产品变得更出色,使你的老板感到更高兴,使你的客户感到更满意,以及最重要的一点,那就是使你下午5点能够准时下班。
21关于战略问题的通信之六
从长远的观点来看,那些不关心效率、不关心程序是否臃肿、一个劲往软件中加入高级功能的程序员最终将拥有更好的产品。
22你的编程语言做得到吗
那些具备了“第一类函数”功能的编程语言,能够让你更容易地完成进一步抽象代码的任务。这意味着你的代码体积更小、更紧凑、更容易重复利用、更方便扩展。
23让错误的代码显而易见
寻找一种代码的书写规范,让错误的代码变得容易被看出。让代码中的相关信息在显示屏上集中在一起,使你能够当场发现和改正某些种类的错误。
第六部分开办软件公司
24Eric Sink on the Business of Software的前言
当你亲身经历新生意的慢慢成长,你会感到一种难以置信的激动。那是一种快乐。
25Micro-ISV: From Vision to Reality的前言
如果你也想开一家小型的软件公司,我可以提供3点个人意见:想清楚你的软件能解决什么棘手的问题;不要独自一人创办公司;一开始不要抱太高期望。
26飙高音
用许多平庸的程序员取代少数优秀的程序员,这种做法的真正问题在于,不管平庸的程序员工作多长时间,他们做出来的东西都无法像优秀程序员做得那样好。
第七部分经营软件公司
27仿生学办公室
良好的办公空间能提高程序员的生产率,也能吸引来最优秀的程序员,因此,这样的支出是值得的。
28他山之石,不可攻玉
我学到了软件开发中重要的一课。那就是,对你最重要、最关键的部分,你一定要使用更原始的工具。
29简化性
如果你把“简化性”这个词理解成“不提供大量功能”或者“只提供一种功能,并把这种功能完美实现”,那么我会为你大胆说出心里话而喝彩,但是你不可能会有很大的发展,一种故意减少功能的产品是没有前途的。
30揉一揉,搓一搓
代码重构工具正在不断进步中,如果你也想加入,开办一家可怜兮兮的小公司,专门出售奇奇怪怪的编程工具,或者想为开源运动做出有用的贡献,那么这个领域是一片广阔天地,大有可为。
31组织beta测试的十二个最高秘诀
关于如何组织一次软件的beta测试的秘诀。这些秘诀对商业项目和开源项目都适用。
32建立优质客户服务的七个步骤
如何提供让客户对我们的服务交口称赞的优质客户服务?
第八部分发布软件
33挑选发布日期
有三种方法:经常发布稍作改进的版本;每12到18个月发布一次;每3到5年发布一次。那么具体该考虑哪些因素呢?
34软件定价
软件公司犯下的最大错误就是定价太低,那样它们就不得不关门歇业。但是,还有更大的错误,那就是定价太高,那样你的公司就没有足够的顾客,不得不关门歇业。所以,你最好不要定错价格。
第九部分修订软件
35五个为什么
当某个地方出错的时候,你就问为什么,一遍遍地追问,直到你找到根本性的原因为止。
36确定优先顺序
不同的事情有不同程度的“重要性”,而不是只有“重要”和“不重要”的两个选项。如果你想把所有事情都做完,最后只会一事无成。
![](https://p-blog.csdn.net/images/p_blog_csdn_net/jobchanceleo/EntryImages/20091130/1.png)