浅谈《构建之法》
第一个问题:软件工程师与程序员有什么区别?
我在《构建之法》的第43页看到关于高级工程师和新手之间存在一定的区别,但只是说高级程师拿到的工资高,下班比较早,但同样是在电脑前敲敲打打为什么高级程师会可以准时下班,拿到高工资了呢?
我的看法:因为高级工程师在软件开发方面的经验,还有对各个领域的知识与经验都还没有掌握,不仅新入门的程序质对代码的熟炼度以及项目的流程熟练度不够,而且写出的代码的质量也不够,程序员也是一步步地向软件工程师,在自个项目实战中积累经验、才能走软件工程师的道路。刚入职的程序员缺少团队合作的意识和高级工程师的团队合作是有区别的。我在《构建之法》这本书中也看到了关于工程师与程质的区别是关于代码的规范程度,说明程序员和软件工程师在这一方面也是区别的。
第二个问题:怎样衡量一个好的软件工程,一个好的件工程都有什么特点和优点?是只要用户用着如用的软件就是个好的软件的吗?
我在《构建之法》的第8章第47页看到需求分析阶段关于公司,PM,开发人员,测试人员做出来的软件产品,但是用户得不到满意,最后做出来的软件根本不能用的一个荡来荡去的秋千。
我觉得一个好的软件最重要的是用户与开发人员测试人员,公司,PM之间需求分析的重要性,我认为好的软件一定会得到用户的认可,但不一定得到用户认可的软件就是好的软件,因为我在第12章的用户体验一节的第252页看到评价手头软件的用户体验,说到:良好的用户界面和体验能让用户在使用软件的过程中感到愉悦,机械脑残的用户体验设计会让用户浪费时间,增加学习成本,犯本可避免的错误,心情沮丧,甚至出现事故。
第三个问题:如何预防软件危机,虽然软件危机并不能完全避免,那么怎样很好的降低软件危机发生的概率?
我觉得软件危机是不可避免的,软件是一种人为制造的,带有主观意识,所以不管需求分析阶段,以及其他各个阶段都做到所谓的零失误,但是软件危机还是会发生,下面列举以下几个史上软件失误的例子;
- Ariane 5 Crash
Ariane 5是一种可以发射航天器的火箭。这种火箭在升空后40秒就会发生爆炸,原因是系统软件中的整数溢出漏洞,当在系统中输入一个比软件内置的最大整数还要大的整数时,系统内存将不会存储这个整数数字,由此引起软件崩溃,导弹爆炸。一枚火箭价值3亿7000万美元。 - 爱国者导弹软件错误
在第一次海湾战争期间,一枚伊拉克导弹击中了美军军营导致28死98伤,而部署在周围的爱国者导弹系统没有及时对对方的导弹进行拦截,原因是爱国者导弹雷达追踪系统有软件缺陷,没有发现导弹。 - 千年虫
上世纪60年代的电脑工程师使用2位数来表示年份,当时是为了减少数据的存储量。但是到了1999年12月31日,就会出现千年虫的问题。因为到了2000年1月1日,电脑上会显示为“00”,系统会认为是1900年。为了解决这个看似很小的问题花费了大量精力。 - PayPal软件错误
来自宾夕法尼亚的Chris Reynold一度成为了世界上最有钱的人,原因是PayPal错误的向他的账户里打了9万2000亿美元。 - 《江南style》打破Youtube观看记录
Youtube网站使用32位有符号的整数来记录视频的观看次数。最初网站设定的视频最大观看次数被《江南style》打破,因此《江南style》的观看此数超过最大值后,变成了负数。之后谷歌将最大值扩大成了64位有符号的整数。 - Windows自带的计算器软件缺陷
Windows系统自带的计算器在计算√9-3时得到的答案不正确,正确答案应该是0,当计算器得出的答案是:
还有类似的例子√4-2=0,但计算器得出的结果并不是0。这个软件缺陷在windows的各个操作系统中都存在。 - Unix系统中的时间终结
Unix系统中的时间显示将在2038年1月19日无法显示。下面的网站是倒计时:http://www.coolepochcountdown.com/ - 软件中竞争条件缺陷导致50万人受到停电影响
2003年8月14日,一场大规模停电影响到了美国8个州和加拿大,总共50万人的生活。电脑专家指出是由于软件中的一个竞争条件缺陷导致的,单个操作中的2个独立线程使用了同一个代码,由于没有正常同步,2个线程导致了整个电厂系统瘫痪,最终使256个发电厂的发电机停转。当时最大的影响应该是很多无线基站没有信号不能上网,因此很多人将笔记本电脑通过古老的拨号上网方式进行上网。 - 价值3亿2700万的火星气候探测器
1998年12月11日发射的火星气候探测器希望找到火星适合人类居住的证据。不幸的是,由于工作人员把英制单位当成公制单位输进了软件,导致了这个价值3亿2700万的探测器比预定到达火星时间晚了286天。由于计算失误,探测器在错误的位置进入了火星大气层,不久后解体了。 - AT&T公司长途电话通信中断
1990年1月,AT&T公司的用户发现有9个小时无法拨打长途电话。原因是由于长途电话中继控制软件正在更新,这次更新的代价是在一天之内AT&T损失了6000万美元。
对于上面这些软件所遇到的问题,我觉得一个好的软件工程需要一个懂的团队合作的团队,必要而且非常仔细以及缜密的需求分析,还要在创造软件的同时及时和用户沟通,因为用户有可能并不能完全表达出自己的意愿,所以需要团队付出更多的努力。软件危机虽然无法避免,但是我们还是要汲取前人的经验,努力将软件尽可能的做到更好。