实话实说,我在下载这本书的试读章节时候并没有抱读下去的希望,因为关于软件工程的书有很多,大多是枯燥而理论性极强的,读起来会颇感乏味,只是顺手把所有的试读书籍都下载下来。但是当我打开的时候,却不由自主的用了将近一个小时把试读的两章细细品味了两遍。
很少见到有讲工程的书能像本书的作者一样把软件工程讲的如此生动而有趣,也让我从另一个角度去反思,到底什么才是软件工程。我不得不承认,或许我现在还在停留在编程而不是工程阶段——研究学习各式各样的代码,讨论java和.net的优劣,甚至去争论linux的开源和android的非完全开源。
于是我发现,时间久了,编程已经不是那么复杂的一件事,有时候甚至不需要敲打很多行代码,只要从从前的项目中copy过来就可以了。想来这也是为什么程序员们的键盘上,“ctrl”、“c”、“v”这几个键是磨损最严重的。其实编程相对于软件工程来说只是最后的一环,软件工程不等于无休止的coding。
作者的“牛屎图”清晰而简明的归纳了什么是软件工程。从整体上来说可以从需求说起,对目标需求的描述和分析。在往前走,怎么去实现这个需求目标,便是“过程”(制定计划、角色间关系、划分职责)和“方法”(形成各种架构、设计)要去做的事情;最后用什么快速的去实现“过程”和“方法”,便是“工具”,从某种程度上说就是由程序员实现。
读到此处,一章终了,已经让我对软件工程有了全新的了解。所谓“大道至简”,其实的确并不复杂,作者仅仅用几个自己亲身经历的小故事而一些幽默简单的解说就让我对软件工程、对管理有了全面而深刻的认识。
继续读下去,走入了“工具”的世界。大多数的程序员们都是以钻研“工具”为重的,所以简历上最多见的永远是掌握了什么什么语言,精通了什么什么框架等等,并且以此为奋斗目标,却从来不曾想过到底这些都意味着什么。在本书里,作者用“秦统一六国”这样一个生动例子,告诉我们“秦不仅仅关注技法,而是关注法治”,引用原文一段话:
兵器只是作为一种征战的工具,在秦军中起着相当重要的作用。但秦国并不迷信兵器,而是把兵器作为工具取而用之,并透析剑、弩等武器的本质,了解具体特性的成因与功用,进而规范成方法技术(而非技法技巧)。这些构成了秦军的军事基础,成为战争——这个浩大工程的组成部分。
工具之于工程,本质在于关注并发挥有益于工程全局的那些特性。一人一技,一器一物,又岂能是工程的要义?因此,我们最终看到拥有利器巧技的六国都不在了,最后只剩下一个强秦统一了天下。
同样的反思我们的软件工程领域,很容易就发现举凡成功的大型公司,如google、facebook都不是因为“工具”(也就是说什么技术牛人)而闻名天下的,可以想见其他的未成功的公司未必就没有更厉害的“工具”使用者,他们依靠的是成熟的组织管理体系和创新精神。回归到刚才的“牛屎图”中,成熟的组织管理体系属于“过程”范畴,而创新精神则大多属于“实现对”范畴。所谓“工具”,有能力的高手或许大多也是“唯手熟尔”。
当然,我们也可以想见,作者并不是让我们完全抛弃“工具”,只是让我们换一个角度看问题。所谓“方法”、“过程”等等的思考也需要建立在“工具”的经验之上,没有人能跳过这个过程。所以现阶段的我们,要踏实的一步一个脚印的走在路上,静下心来研究代码,先成为一个“巧匠”。最后用作者的一段话结束这篇读书笔记,也是我想说想做的:
“必先是匠人,之后才会是艺人,再之后才会是艺术家。程序员就是程序员,如果不静下心来做代码,好高骛远则终将一无所成。”
- 大小: 30.1 KB
分享到:
相关推荐
### BPMN 2.0中文版试读版关键知识点解析 #### 一、BPMN 2.0概述 **商业流程建模与标注 (BPMN) 版本2.0**是一种开放标准,旨在提供一套通用符号,用于描述业务流程。BPMN 2.0的目标是使业务用户能够理解业务流程的...
- **试听/试读**:提供课程预览功能,让用户在购买前了解课程内容。 - **会员系统**:可设置不同等级的会员,享受不同的权益,鼓励用户长期留存。 - **积分兑换**:通过参与活动或完成任务,用户可以获得积分,...
- **朗诵训练**:采用多种形式,如试读、范读、听读、比赛,提升朗诵技巧。 - **内容探讨**:引导学生讨论诗歌描绘的景象,通过想象加深对诗歌的理解。 - **写作模仿**:鼓励学生运用所学技巧,描绘自己的家乡...
- **多层审核**:内容经过多轮内部审阅,包括编辑、专家审稿和用户试读等阶段,确保信息的准确性。 - **事实查证**:对所有数据和引用进行严格的核实,防止错误信息的传播。 - **版权保护**:遵循严格的版权法规,...
4. **实践能力**:通过展示会的形式,增强学生的表达能力和团队合作精神。 #### 教学重点与难点 - **教学重点**:让学生理解并体验不同民族的文化特色,通过朗读表达出对这所小学的喜爱之情。 - **教学难点**:...
- **核心思想**:通过逐步遍历矩阵的外围,并逐步向内收缩边界来完成打印。 - **实现步骤**: 1. **初始化边界**:设置左上角坐标 `(tR, tC)` 和右下角坐标 `(dR, dC)`,初始值分别为 `(0, 0)` 和 `(matrix.length ...
- **网络管道**:通过互联网向消费者传递信息。 - **媒体合作**:利用电子和平面媒体传播经营特色和各项活动。 - **电子邮件营销**:通过电子邮件进行营销,积累潜在客户。 - **合作伙伴**:与便利店、邮局、手机...
- **实用价值**:无论是对于初学者还是有经验的开发者来说,这一章都提供了丰富的实践指导和示例代码,有助于快速掌握 USB 应用开发的关键技术。 通过上述内容,读者可以了解到在不同开发环境下实现 USB 设备读写的...
- **免费资源**:部分网站提供免费的电子杂志,有的是试读版,有的是完全免费。 6. **未来发展趋势** - **个性化推荐**:通过数据分析,为用户推荐符合兴趣的电子杂志。 - **虚拟现实/增强现实**:将VR/AR技术...
- **全面性**:本书涵盖了从基础理论到实践应用的全方位内容,不仅适合初学者入门,也适合有经验的开发者进一步提升技能。 - **实用性**:通过大量的实例代码和案例分析,使读者能够快速掌握网络编程的实际操作技巧...
### WCF从原理到实践(试读) #### WCF概述 Windows Communication Foundation(WCF)是微软开发的一个统一的编程模型,它简化了通过多种网络协议和服务类型进行通信的应用程序的构建过程。WCF旨在为.NET ...
SOA(Service-Oriented Architecture,面向服务的架构)则是一种设计思想,强调将业务功能实现为服务,便于跨系统集成和复用。 - **互补性**:SOA更多关注整体架构设计和企业层面的战略规划,旨在构建一个灵活且可...
该书不仅适合初学者学习.NET环境下的网络编程基础知识,也适合有一定经验的开发者深入了解高级技术。 #### 2. 主题覆盖范围 - **基础概念**:介绍.NET框架的基础知识,包括类库、语言特性和开发工具等。 - **网络...
- **定义**:数据库管理系统(Database Management System, DBMS)是一套用于创建、维护和访问数据库的应用软件。 - **功能**:包括数据定义、数据操作、数据控制和数据管理等功能。 - **常见DBMS**:MySQL、Microsoft...