构建之法
Posted ruangongyouxi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建之法相关的知识,希望对你有一定的参考价值。
首先作者提到软件=程序+软件工程,以及程序=数据结构+算法。
提到了一些来自大部分人的疑问。例如“1.我写了二叉树的遍历算法实现,在这里,二叉树是数据结构,遍历的实现细节是算法。C程序就是结果。但是这个程序有什么实际用处呢?在Java和其他一些语言中,似乎没有指针,那我可以不必了解二叉树么?2.我成了一名职业程序员,但是我发现所有的算法别人都已经实现了,我只要调用就可以。似乎我们公司的软件与数据结构、算法的关系都不大。那我当初辛辛苦苦学习的数据结构和算法有用么?如何区分一个好的程序员和不好的程序员呢?3.我上班后,发现以前同事写的程序真是垃圾,根本看不懂,无法维护。我要推翻重写!后来一个老员工笑嘻嘻地告诉我,我们现在看到的程序,就是去年的新员工愤怒地推翻重写之后的结果,大家反映还没有以前的版本好用呢。”
在我刚开始学习的时候带给我疑问最大的就是第二个问题。现在学的算法和数据结构在以后的工作中看起来并没有什么作用,现在进行学习的目的是什么呢。这学期转专业补修的离散课上,离散老师讲到了这个问题。他就华为遇到的情况进行了说明,讲到一些技术人员反映当遇到了这些技术限制的问题才明白学习算法与数据结构以及别的基础知识的重要性。当然,我还没有经历能体现出这些基础知识重要性的工作问题,但是通过老师的讲述,我大致懂了点。基础知识才是根基,当我们精通了最底层的知识后,就可以解决更多的问题。
作者举出“阿超的老爸”的例子对软件工程的一些概念进行了讲解。如下所示:
程序:在这里指的是源程序,就是一行行的代码。
构建:构建不仅仅是cc和link命令,一个复杂的软件不但要有合理的软件架构、软件设计与实现,还要有各种文件和数据来描述各个程序文件之间的依赖关系、编译参数、链接参数,等等。这些都是软件构建的过程。
对于别的概念作者提到“软件团队的成员每天都在修改各种源代码,怎么保证软件在修改过程中能不断提高质量,至少要维持以前的质量,不至于崩溃?有些时候,我们要为某个需求写一些特殊功能,不久后又要把这些功能再合并回主要版本。有些程序要配置不同的界面,运行在中文、英文或其他语言的操作系统上;有些程序还有32位版本、64位版本等。这是源代码管理的问题—有时候也叫配置管理。我们还有一系列的工具和程序来保证程序的正确性,这些工具流程和程序本身应该更正确,才能保证别的软件的质量。这就是质量保障,具体的验证过程叫做软件测试。一个软件或者服务要有人买,就得找到顾客,顾客有各种需求,有些靠谱,有些不靠谱;有些容易做到,有些难以做到。软件团队要从需求分析开始,把合适的需求梳理出来,然后逐步展开后续工作,如设计(软件架构)、实现(写数据结构和算法)、测试,到最后发布软件。
软件团队的人员也会流动,新的成员要尽快读懂已有的程序,了解程序的设计,这叫程序理解。软件在运行过程中还会出这样那样的问题,也许我们要时不时给软件打一个补丁,或者维护众多的服务器,团队的新老成员要一起工作,修复各种各样的问题,这叫软件维护,或者服务运营。这一系列过程就是软件的生命周期,有人得负责软件项目的管理。一个好的软件,即使功能和同类软件区别不大,但是会让人感觉到非常好用。这就是软件的用户体验。用户体验和数据结构、算法没有直接的关系,但是很多非常成功的软件就赢在这个方面。”
作者也提到了软件团队赚钱的途径,强调了商业模式的重要性。
我觉得软件从业人员的道德操守很重要,我工作之后一定会好好守住自己的底线。
以上是关于构建之法的主要内容,如果未能解决你的问题,请参考以下文章