新書推薦:
《
泉舆日志 幻想世界宝石生物图鉴
》
售價:HK$
134.2
《
养育女孩 : 官方升级版
》
售價:HK$
50.4
《
跨界:蒂利希思想研究
》
售價:HK$
109.8
《
千万别喝南瓜汤(遵守规则绘本)
》
售價:HK$
44.7
《
大模型启示录
》
售價:HK$
112.0
《
东法西渐:19世纪前西方对中国法的记述与评价
》
售價:HK$
201.6
《
养育男孩:官方升级版
》
售價:HK$
50.4
《
小原流花道技法教程
》
售價:HK$
109.8
|
編輯推薦: |
适读人群 :计算机专业的高校学生;刚入行的小白程序员;遇到职业发展瓶颈的爬升期程序员以及打算(或已经)转为管理岗位的前程序员
这世上为什么有那么多难用的软件?学校里为什么教不出企业真正需要的程序员?在本书里,拥有20年经验的微软资深程序员将尝试回答这些问题,带领广大程序员走出软件困局。
|
內容簡介: |
全书基于作者的职业成长经历,讨论了程序员的大学教育、软件开发的生命周期、软件工程的复杂性、程序设计语言的发展历史、软件工程方法的演变历程,等等。本书行文幽默风趣,将经典的史料和生动的实例娓娓道来,还包括一些代码示例,可帮助新手程序员快速跨越从校园到职场的适应期,帮助爬升期的程序员深入理解软件工程的本质,也可帮助转做管理工作的程序员有效把握软件行业的发展脉络。
|
關於作者: |
[美]亚当巴尔(Adam Barr) 微软资深程序员和项目经理,拥有超过20年的工作经验,著有《Find the Bug》和《Proudly Serving My Corporate Masters》。
【译者】
乔海燕 中山大学数据科学与计算机学院副教授,研究方向为类型论及其在程序验证中的应用。
曾烈康 中山大学数据科学与计算机学院研究生,研究方向为边缘计算、边缘智能、智能物联网、分布式系统。
|
目錄:
|
译者序
前言
致谢
第1章 早期的日子 1
第2章 程序员接受的教育 32
第3章 软件的层次 62
第4章 夜晚的小偷 94
第5章 做正确的软件 132
第6章 对象 162
第7章 设计思维 197
第8章 你最喜爱的程序设计语言 230
第9章 敏捷开发 272
第10章 黄金时代 309
第11章 未来 331
|
內容試閱:
|
1988年11月,尚处于萌芽状态的互联网上的计算机遭到了一种计算机病毒攻击。这种病毒滥用了一个程序员的错误:假定可以信任另一台计算机发送了正确数量的数据。这是一个简单的错误,其修复也很容易,但是所使用的编程语言很容易受到这种类型错误的攻击,并且没有一种标准的方法来检测这种问题。
2014年4月,现在无处不在的互联网上的计算机遭到一种计算机病毒攻击。这种病毒同样滥用了一个程序员的错误:假定可以信任另一台计算机发送了正确数量的数据。这是一个简单的错误,其修复也很容易,但是所使用的编程语言依然容易受到这种类型错误的攻击,并且依然没有一种标准的方法来检测这种问题。
在经历了四分之一个世纪的发展之后,软件工程仍然停滞在易受攻击的编程语言和无法检测错误的阶段,这显然不是人们期望的。其他新的工程学科在发展初期会生产出不可靠的产品。例如,在航空业发展的早期,人们在车库里制造飞机,结果是可想而知的。而一百年后,我们已经无法想象那个没有航空旅行的世界了我们已充分掌握了这项技术,在统一的工程标准的基础上,可以制造出非常可靠的飞机。
但是,编写软件却不是这样的。虽然软件被称为工程学科,但它几乎没有工程的特征,即随着时间的推移,在严格的实验基础上建立起一个知识体系。人们自然会问关于工程产品的那些问题:它有多坚固?可以使用多久?什么情况下可能失败?对于软件来说,无论是针对程序的一个部分还是整个软件,这些问题都无法得到可靠的答案。专业许可是大多数工程学科的标志,但这却被软件行业视为潜在的诉讼来源,而不是制定标准的机会。
这样做不仅造成了用户可见的错误,还造成了程序员的重复工作、大量精力浪费、挫败感增加,并且使软件发布被延迟或永远无法发布。
如果你听说过软件行业,那可能是因为不同寻常的程序员面试方式。网站、书籍,甚至是为期一周的培训课程都致力于帮助人们为令人畏惧的编码面试做准备,在这个过程中要么完全有机会展示你的技能和知识,要么完全没有机会。尤其是白板编程,候选人必须在白板上匆匆写出短程序。一些求职者抱怨说,这并不能准确反映他们的日常工作,他们希望公司把注意力集中在他们背景中的其他方面。然而,这些求职者可能没有意识到,在他们的背景中并没有太多可以关注的方面。与其他工程学科不同,拥有软件工程学位并不能保证你理解已有的关于编程工具和技术的知识,因为这样的东西根本不存在。你在大学期间可能写了很多代码,但是没有办法知道这些代码是否有用。因此,要求求职者在白板上写代码片段是我们评估一个人的最佳方式。
请看这个笑话,尽管这不是什么好笑的事:你怎么称呼医学院毕业排名最末的人?答案是医生因为从医学院毕业并完成实习意味着他已经学会了如何做医生。我问过医生,他们是如何面试然后被聘用的。他们说,面试时从未被问过具体的医学问题或完成某种简单的医疗程序;相反,面试官谈论的是他们如何与患者交谈、他们对新药物的看法如何这类事情,因为面试官知道他们已经掌握了医学的基本知识。但是,对于计算机科学专业的毕业生来说,这样的普遍要求并不实际。
早在1990年11月,卡内基梅隆大学的玛丽肖(Mary Shaw)为《IEEE软件》杂志撰写了一篇题为《软件工程学科的前景》的文章,她解释说:工程依赖于有关技术问题领域的、以实践者可以直接使用的方式编纂的科学知识,从而为实践中常见的问题提供答案。普通的工程师可以用这些知识来更快地解决问题。这样一来,工程部门就可以共享先前的解决方案,而不是总依赖于某个行家的问题解决方案。她将软件工程与土木工程进行了比较,并指出,尽管大型土木结构在有历史记载之前就已经建成,但在过去的几个世纪里,它们的设计和建造都是基于理论知识,而不是凭直觉和积累的经验。我翻阅了美国土木工程师协会的出版物目录,其中尽是有趣的标题,如《水管情况评估》和《寒冷地区路面工程》,我很欣赏在其他工程学科中有这么多的理论知识。
回顾各种形式的工程史,肖写道,工程实践是从商业实践中产生的,它充分利用了一门伴随科学的成果。科学成果必须成熟和丰富到能够建模实际问题。这些知识也必须以对实践者有用的形式组织起来。然而,自从她的文章发表以来,软件工程界在构建支持真正的工程学科所需的科学结果方面几乎没有取得进展,它仍然停留在直觉和积累的经验阶段。同时,软件在现代生活中变得至关重要,人们认为软件比支撑它的工程方法的保障更可靠。
肖在文章的结尾说:好的科学依赖于研究者和实践者之间强有力的互动。然而,文化差异、无法访问大型且复杂的系统,以及完全难以理解这些系统,都干扰了支持这些交互的交流。同样,对如何将研究结果转化为生产环境的有用元素的理解不足,阻碍了研究界研究结果的采纳简单地说,如果能够培养学术界和工业界之间的建设性交互,那么软件的工程基础将发展得更快。
在2013年由计算机协会(ACM)主办的系统、编程、语言和应用:服务人类的软件(SPLASH)会议上,一位名叫格雷格威尔逊(Greg Wilson)的程序员发表了题为两个独行侠的主题演讲,讨论了软件学术界和工业界之间的这种分歧。在做了一段时间的程序员之后,威尔逊发现了里程碑式的书籍《代码大全》(Code Complete),这是第一批尝试解释软件工程实践的书籍之一,也是少有的关于软件实践研究的书籍之一。威尔逊意识到他以前不知道这一切,正如他在演讲中所说的:我怎么不了解我们熟悉的事情呢?后来他意识到他的同事跟他一样,而且,他们对自己的这种无知很满足,也不想多学点东西。他还评论说:参加软件工程国际会议的人中,不到20%来自工业界,而且大多数人在微软研究院这样的实验室工作。相反,只有少数的研究生和一两个富有冒险精神的研究人员参加大型的工业会议,比如年度敏捷大会。
对软件工程的焦虑这一术语自50多年前被发明以来就一直存在。本书不会提出解决方案,虽然我在最后给出了一些建议,但本书将尝试提供软件行业从早期到现在所经历的路线图。
除了几章以外,其他章节是按时间顺序编排的,始于1980年左右,大致与我作为一名程序员的经历平行。本书并没有尝试给出软件行业的完整历史,相反,它深入挖掘了一些特别重要和具有代表性的特定时刻。这些时刻包括一系列号称可以一并解决程序员面临的所有问题的想法,这些想法在还没有不可避免地回到现实时就被下一件大事取代了。与此同时,学术界和工业界之间的鸿沟不断扩大,使得每一个新的想法在研究中都不那么持久,而软件则进一步远离而不是更接近玛丽肖希望的工程基础。
从根本上讲,本书是关于一个我经常问自己的问题:是软件开发确实太难,还是软件开发人员能力不足?
最后,提醒一下不喜欢技术细节的读者:本书含有一些代码。不要惊慌。如果不了解程序员在想什么,就不可能了解软件行业;而如果不深入了解程序员编写的实际代码,就不可能了解程序员在想什么。好软件和差软件之间的区别可能就是一行代码一个程序员做出的看似无关紧要的选择。要理解软件中的某些问题,需要对代码有足够的理解才能明白,以及为什么程序员编写了糟糕的代码,而不是优质的代码。
所以请阅读代码吧!非常感谢。
|
|