推荐搞IT的你读读《软件随想录》

70f209bfd89b3f96b1d818d4053129ec.png

《软件随想录(Joel on Software)》,这是我多年前看的一本书,也是对我影响很大大的一本书。这不是一本讲软件技术的书,但跟技术强相关,推荐给朋友们读一下。

这本书严格来讲,不是作者专门写的书,是对作者 45 篇博客随笔的合集——记录了 2000-2004 年间的工作所感所悟。虽然不是按照时间顺序来的,但整篇文集整体上散而不乱,而且获得了第 15 届 JOLT 大奖,被读者誉为堪比《人月神话》的经典软件项目管理文集。

关于编程本身

软件和互联网行业本质上都是属于服务业:通过服务客户、满足客户需求来赚取利润,简而言之,卖的是服务,是客户体验,谁给客户的体验好,谁就能赚到钱。

所以,为了甲方提供更好的服务,作为提供服务的乙方就得不断地折腾自己,不断的折腾自己,在一定意义上就意味着晚交付,但晚交付对甲方来说就是不好的服务体验。这就是一个悖论。

所以从这点上来讲,Joel on software 就是教我们在整个开发过程中怎么样才能少折腾自己。

在本书中提到了著名的乔尔测试。是乔尔在 22 年前提的,现在已经成为开发团队的标准配置。

  1. 你们用源代码管理系统吗?

  2. 你们能一键编译吗?

  3. 你们做每日编译吗?

  4. 你们有 bug 数据库吗?

  5. 你们在写新代码前修改以前的代码吗?

  6. 你们的进度表是最新的吗?

  7. 你们有软件规格书吗?

  8. 程序员的工作环境安静吗?

  9. 你们使用了能买到的最好的工具吗?

  10. 你们有测试人员吗?

  11. 你们面试时会要求应聘人员写代码吗?

  12. 你们做过走廊可用性测试吗?

乔尔应该特别重视功能规格书,用了整4篇的篇幅来讲功能规格书:

  • 为什么要写

  • 什么是规格书

  • 怎么写

  • 以及写作技巧

归结起来就是:一是:为了减少日后与甲方的扯皮(节省沟通时间);二是:为了自己能顺利实现 feature,防止推倒重来,所以写规格书最根本的是让甲乙双方都看得懂。

乔尔在规格书中必写的内容:

  • 免责声明

  • 作者

  • 使用场景

  • 非目标

  • 概述

  • 细节

  • 待解决的问题

  • 多角度的注解

  • 规格书要与时俱进

其中我觉得 「非目标」 比较有意思。

每个开发者都会认为自己的功能是好的,要非实现不可,但软件开发毕竟付出的是脑力和时间,从效费比上来论,就要去伪存真,把能不实现的就不要去触碰,以减少在非必要功能上铺张浪费,所以在规格书中就明确什么不能碰,真是个非常聪明的点子。

当然,规格书不可能是一成不变的,尤其是在中国这个社会,变与不变都是甲方爸爸一句话的事,乔尔也提到了,产品代码开发完成之时,才是规格书定稿之日。

乔尔在书中提到了五个世界,就是软件开发的五个基本方向:

  • 盒装软件(2C的软件)

  • 内部软件(2B的软件)

  • 嵌入式软件

  • 游戏

  • 用过即抛的代码

每个方向注重的问题不一样,产生问题的解决方法也不一样,如果混淆的处理方法,那就是不断地折腾自己。对于新入行的开发人员来讲,要弄懂你们公司涉及的领域,以及理解老板为什么要这么做,理解了,就会减少很多负面的情绪。

比如乔尔讲「2C」「2B」的区别:

内部软件和盒装软件的一个关键差异就是,在达到某个临界点之后,再投入更多资金去提升内部软件的稳定性和易用性,其边际效果会有明显降低,而对于盒装软件,不断追求软件的稳定性和易用性,永远符合经济定律,都是对公司核心竞争力的提升。所以令人叹息的是,很多内部软件虽然能完美地实现既定的功能,但是质量却非常差。年轻、有热情的开发者经常会被泼冷水,劝他们不要再完善某个软件了,因为已经足够好了,这通常会让他们十分沮丧。

对于游戏和嵌入式软件来讲,乔尔提到只能有一个版本.而一个版本,对质量就有很高的要求,同时面临的经济压力也要求软件尽可能一次到位。—— 这个前提是单机游戏,这可能是因为在 2000 年左右,受带宽的限制,大型网络游戏还没出现,你看现在的网络游戏都是先推出再说,部分有 bug 可定时或随时迭代更新。

关于管理开发者

不得不承认,管理程序开发者团队与其他团队是有差别的。

比如“奖励有害论”:乔尔认为绩效评估会给员工带来巨大的压力

评价对于士气的影响是一边倒的:负面评价严重影响士气,而正面评价对于士气或生产效率没有影响

事实上,只要涉及脑力劳动者的,都脱离不了“文无第一、武无第二”的魔咒。文案、设计等工作者,都会对自己的作品感觉良好,奖励是给小部分的人,那么大部分得不到奖赏的人心情难免会沮丧,丧失士气。而且乔尔在评估机能失调这一章节,对这一现象再次进行了强调:

每一次试图对脑力工作成果进行定量评估,似乎都会以失败而告终,并且对团队造成巨大破坏

对原有代码推翻重来并不是好办法,曾经的网景公司,被乔尔反复引用. 最主要的一次就是网景公司的战略性错误,网景浏览器发布到6.0beta版,5.0版没有出现,是从4.0直接蹦过来的,6.0往后他们不再做代码优化,而是丢弃以前全部代码,从头开始写一个已经发行过的程序代码,当几年后最终改名为 Mozilla 的浏览器重新上市时,已经没了他们的立足之地。—— 估计现在年轻人都不知道网景浏览器曾经存在过。

普通的团队,我们更期望于一个人能同时开展多个项目,而根据乔尔的经验:

如果把一项任务指派给一个人,这个人能很好的完成任务;而当你把两项任务同时指派给某个人的时候,通常的结果是两件事都做不好。这个人要么做好其中一项任务,而完全不做另一项,要么会用比蜗牛还慢的速度同时做两项任务。这是因为在编程任务之间进行切换的时间太长了。

作为管理者要明白: 「程序员是单核单进程的CPU,工作要顺序来」

关于企业发展

乔尔在 2000 年创立了 Fog Creek Software,这本博客合集当然也记录了他的创业所感. 所以,对于从事软件、互联网创业的人来讲,这也是一本启蒙书。

乔尔讲,如果你想在软件行业取得成功,必须有一支完全理解并热爱编程的管理团队,但他们还必须理解并热爱商业运作。

所以关于企业发展,作者用自己在微软和朱诺的工作时的切身经历来阐明管理水平对商业的影响。

乔尔用了 5 个章节专门讲企业发展战略,他提出创业的两种模式:

  • 一种类似本杰瑞的慢慢的、自然的发展;

  • 一种是类似亚马逊这种靠大量资金的投入迅速做大

并指出最不可取的模式,就是在两种模式之间摇摆不定。同时,他也给出了警告,这个行业不能形成标准化的规则:

虽然能让任何人都产出可怜但勉强过得去的业绩水平,但同样对真正有才华的人它是一种沉重的负担,限制了他们的发展

总结

书中乔尔在这三个方面的态度:

  • 在编程上,追求效益的同时要少折腾自己;

  • 在管理上,要想尽一切办法促进开发人员的积极性,不做打击士气和积极性的事;

  • 在创业上,一定要考虑商业运作,因为软件行业的本质还是要赚钱的。

《软件随想录(卷一)》45章节的内容远不止讲了这么多。从初入行编程语言选择、开发工具的优劣到软件行业创业,都能在其中找到答案。

可以这样说,只要是从事的软件行业的或者想了解软件行业的人,读了它之后都会对这个行业有一种豁然开朗的感觉,别忘了这是一本快 20 年的书了。本书翻译的有好有坏,翻译比较好的,杨帆译本、阮一峰译本都还可以,当然,英文好的建议直接看英文原版。

关于作者

「乔尔·斯波尔斯基」

  • 1991 年,毕业于耶鲁大学,并曾在 Microsoft 的 Excel 团队工作,担任项目经理,负责在 Excel 5.0 中推出 VBA。

  • 2000 年,创立了Fog Creek Software并推出了Joel on Software博客

  • 2008 年,他与 Jeff Atwood 合作推出了Stack Overflow 程序员问答网站。使用为 Stack Overflow 提供支持的 Stack Exchange 软件产品,Stack Exchange 网络现在托管了 170 多个问答网站。

  • 目前,担任Stack Overflow、Glitch和HASH的董事会主席。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux c中的文件描述符与打开文件之间的关系

转载请说明出处:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高…

spss练习数据_读硕博,为你推荐5本最实用的SPSS数据统计书

SPSS (Statistical Product and Service Solutions),是由IBM公司所推出的一系列用于统计学分析运算、数据挖掘、预测分析和决策支持任务的软件产品。SPSS的基本功能包括数据管理、统计分析、图表分析、输出管理等等,也有专门的绘图系统,可以根…

她半年内举报了755篇问题论文,专挑中国“下手”?还牵扯到北大副校长.........

全世界只有3.14 % 的人关注了爆炸吧知识是挑刺还是打假?2020年7月23日,海外一家学术打假网站PubPeer曝出北京大学常务副校长、北大医学部主任、中国工程院院士詹启敏25篇论文涉嫌学术造假。这25篇论文的发表时间在1998年至2019年,贯穿詹启敏从…

C#获取用户客户端系统版本设备名称浏览器

先看效果使用Neget引用包UAParser项目的github :https://github.com/ua-parser/uap-csharpusing UAParser;...string uaString "Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 …

ABP vNext微服务架构详细教程——简介

简介该系列文章主要展示ABP vNext框架在微服务架构下的用法,提供一套可落地的技术实现思路,并演示各服务在Kubernetes下的部署方案。基础概念ABP vNext基于ASP.NET Core的应用框架,是.Net主流应用开发框架之一。提供基于模块化的灵活项目模板…

电脑怎么测试硬盘的读写速度_两块硬盘合二为一,电脑读写翻倍?这样的“好事”你必须得了解...

近日,技嘉在旗下顶级的B550 AORUS MASTER主板上做了一次PCIe4.0固态阵列测试,由于该款主板支持3个PCIe4.0的M.2固态硬盘,所以这次的测试为3块PCIe4.0固态组建RAID0,来进行读写测试。常见的PCIe3.0x4的固态硬盘的读写速度一般在250…

C# 动态创建控件时注册Name属性

动态创建控件1. 容器控件 .RegisterName("Name",要注册的控件) //注册控件2. 容器控件 .FindName("Name") as 控件类型 //找到控件并转换成相应类型注意仅通过控件.Name来设置是不能通过FindName来找到控件的,必须注册动态删除控件1. 容器控件…

java配置运行环境和配置

2019独角兽企业重金招聘Python工程师标准>>> 1:准备好下载的java。开始安装 2:第一次蹦出安装路径设置为(D:\java\jdk)。不要设置下图样式设置路径! 3:jdk安装完成后会再弹出如下窗口,让你选择独立的jre的安…

SQL Server 的锁定和阻塞

本帖提供两种做法,可避免在 SQL Server 事务锁定时产生的不正常或长时间阻塞,让用户和程序也无限期等待,甚至引起 connection pooling 连接数超过容量。 所谓的「阻塞」,是指当一个数据库会话中的事务,正在锁定其他会话…

结构体数组排列_学习RTOS(3)数据结构

在 FreeRTOS 中存在着大量的基础数据结构列表和列表项的操作,列表和列表项是直接从 FreeRTOS 源码注释中的 list 和 list item 翻译过来的,其实就是对应我们 C 语言当中的链表和节点,在后续的讲解,我们说的链表就是列表&#xff0…

python实现元旦多种炫酷高级倒计时_附源码【第20篇—python过元旦】

文章目录 🌍python实现元旦倒计时 — 初级(控制台)⛅实现效果🌋实现源码🌜源码讲解 🌍python实现元旦倒计时 — 中级(精美动态图)⛅实现效果🌋实现源码🌜源码讲解 🌍python实现元旦倒计时 — 高…

.NET6之MiniAPI(十一):本地化

.net开发体系里,大部分本地化的实现都是用资源文件实现(.resx),asp.net core中的多语Culture是指区域性的对象,而UICulture 该对象表示资源管理器在运行时查找区域性特定资源时所用的当前用户接口区域性。asp.net core实现也是通过添注入本地…

C#基础整理

元旦整理书架发现一本小册子——《C#精髓》中国出版社2001年出版的,粗略翻了下关于C#的知识点挺全的虽然内容谈得很浅也有很多过时的内容(话说这本书是我在旧书店花5块钱淘的)我保留原有章节并删减部分过时和不重要内容添加一些自己觉得重要的…

linux c之fdopen(int fd, const char *type)使用总结

1、fdopen(int fd, const char *type)的介绍 比如一写特殊文件不能用io打开,我们先要用open函数得到文件描述符,也就是这个fdopen函数的第一个参数,第二个参数是常量,不同类型不同意义,如下图 2、代码演示 #include<stdio.h> #include<fcntl.h>int main…

基于ASA防火墙的SSL ×××配置

基于ASA防火墙的SSL 配置实验拓扑图 实验目的&#xff0c;PC2通过SSL能够访问到PC1SSL服务端配置全在ASA上面&#xff0c;下面为配置步骤&#xff1a;第一步&#xff1a;建立RSA密钥证书&#xff0c;名称为ssl***keypaircrypto key generate rsa label ssl***keypair第二步&…

晚上去宾馆有什么是一定要带的?

1 前任垃圾袋&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 上一代摸鱼也是很厉害的&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 穿最帅最贵的衣服参加婚礼&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 去宾馆要带什么?&#xff08…

jQuery banner切换插件

今天学写了一个基于jQuery焦点图切换插件&#xff0c;有不对的地方还请多多指教&#xff0c;不多说下面是代码&#xff1a; 1、引jQuery库 <script src"http://code.jquery.com/jquery-1.11.1.min.js"></script> 2、Html部分 <!--Focus Html--> &l…