嵌入式软件设计中的哲学思想
此篇是研一开设的思想政治课程的期末作业,要求结合自己专业,写一篇学习报告,体现出本专业中与哲学相关的元素。
一、 前言
哲学是世界观系统化和理论化的体系。它研究了自然界、人类社会和人类思维的最一般的本质和规律。自然辩证法研究的是人与自然界的关系,人们认识自然改造自然的一般规律,以及科学技术发生与发展的一般规律。中国工程院院长徐匡迪院士也曾多次强调:“工程需要有哲学支撑,工程师需要有哲学思维……我们应该把对工程的认识提高到哲学的高度,要提高工程师的哲学思维水平。”嵌入式软件工程是软件生产和软件管理的工程科学,是应用计算机科学、电子科学及管理科学原理来开发软件工程。发展到今天,嵌入式软件智能程度越来越高,系统越来越复杂,怎样才能开发出好的嵌入式软件工程?有些人可能认为只要学好计算机科学、电路等理工学科,就能做好软件开发。其实不然。本文认为用好哲学思想才是设计开发高水平嵌入式软件的关键。哲学对软件的开发具有指导作用。本文主要谈的是在学习了《自然辩证法》的课程后,结合我们自己的专业学科知识,对自然辩证法在学科学习中的理论意义和实践操作中的指导作用作了简要的说明。而作为嵌入式软件方向的研究生,如何能在软件开发过程中的设计、实现、测试等环节中站在系统的高度分析问题,是工程化方法的一种灵活运用,也最能体现出科技方法论的指导作用。本文通过对自然辩证法,特别是其中的科学技术方法论和软件工程相结合,从一个侧面阐明了自然辩证法对自然科学学科学习的指导意义,进一步阐明哲学对一般科学的指导意义。而哲学作为时代精神的精华,在新时期对指导我们的学习与工作依然起着重要的作用。
二、 嵌入式软件项目需求分析中的哲学思想
如果从哲学的角度去审视一个事物,那么就应该本着“跳出画外看画”的原则去把握它,以客观的角度来看自己完成的事物,绝对不能形而上学。当拿到一项软件开发的任务时,首先,应该站在整体的角度,分清楚软件项目中的“元素”都有什么:比如从人的角度划分有业务方、实施方和监理方等,从流程的角度划分有立项、需求、设计、实现、确认和支持等。然后,一定要本着辩证唯物主义的基本原则,来对这些元素进行分析,再结合一个特定的历史背景,得出一套整体的软件工程规划蓝图。如果仅仅从站在自己团队的角度去思考问题,怎么省事怎么来是不行的,真正的软件工程的哲学应该是把尽量多的系统以及客户需求等“元素”结合起来,运用辩证唯物主义方法进行分析,得出一个整体的、最优的软件系统结构模型。还要做到整体性和系统性相结合,即将解决某一个问题所涉及到的所有因素构成一个整体,并且各因素具有关联性和顺序性。解决该问题时全面地思考所有的因素,将解决问题的过程作为一个系统工程来考虑,根据这些因素的关联性和顺序性,将解决问题的过程划分为若干阶段,制定一个分阶段操作的方案,在方案中给出各阶段的操作顺序和操作内容以及实现目标。
在嵌入式软件项目需求分析过程中,就需要用到这种整体性与系统性结合的思想。考虑整体性,就是关注该项目需求涉及的所有因素,因为每个因素都会对之后问题的解决产生影响,缺少哪个因素都会破坏整体性。软件危机产生的原因之一就是在软件开发活动中,只关注“设计”、“编码”等因素,而忽视“需求分析”、“测试”等其它因素,造成设计出来的东西与用户需求差别很大、没有弄明白客户的需求就开始开发,或者没有经过严格的测试就交给用户使用、软件很难维护等现象。考虑系统性,就要根据各因素之间的关系,给定合理的操作顺序。为之后软件开发中能够快速解决问题,将过程合理划分为若干阶段,并排定阶段顺序。在实际操作时,不能跳过某个阶段,也不能颠倒各阶段的顺序。对于某一种软件开发方法来说,这种分阶段操作的顺序是明确的,并且在开发实践中是严格按顺序执行的。但是在早期的软件开发活动中,没有认真考虑系统性,导致问题出现,例如没有仔细地做好“设计”(甚至“需求分析”也没有做好),就匆忙去“编码”,编码肯定是漏洞百出,只好回头重做设计,这是软件危机的典型表现之一。
三、 嵌入式软件设计中的哲学思想
当开始设计一个比较大的问题解决方案时,一般来说,先进行全局设计、后进行局部设计。先进行全局设计,就是先从宏观上把握这个问题,构建好解决问题的总体框架结构,将大问题分解为局部性小问题,暂时不考虑局部性小问题如何设计。在解决问题的总体框架结构已经构建好的前提下,再去考虑局部性小问题如何设计,详细研究每个局部性小问题的解决方案。嵌入式软件工程中的结构化软件设计方法,就是“先设计全局,后设计局部”思想的典型体现,结构化软件设计方法将设计分为“总体设计”和“详细设计”两个阶段,先进行“总体设计”,后进行“详细设计”。总体设计将被开发的软件系统划分成若干个模块,每个模块具有一定功能,各模块间具有一定的联系,这样就将软件的总体宏观结构搭建好了。详细设计是根据每个模块应该具有的功能,设计实现其功能的算法和数据结构,这样就将每个局部问题设计好了。
除此之外在设计方案时,我们绝对不能用静止的眼光来看待客户需求,因为客户需求是变化的,不是一成不变的。一旦需求变更,就会导致大量的开发返工,所以说静止的方案绝对不是一个好方案。我们应该遵循一个前瞻性原则,那就是尽量考虑将来都会发生哪些事情,即遵循“架构设计可扩展”的原则,为许许多多将来可能的发生变化的需求或是新技术预留出接口来。当然,这种方案设计的思路会大大增加设计的难度和开发的工作量,但这是必须要做的事情,因为我们应该从整个软件工程发展的角度去思考问题,与时俱进,即我们经常说的“用户的需求总是在变化,做方案应该多为用户考虑,尽量降低需求变更对方案的冲击”。
四、 嵌入式软件测试中的哲学思想
如果说存在就是被感知,那么就无疑是说未被感知的就是不存在,这就陷入了唯心主义,当然也有狭隘唯物主义的成分。以感知来确定存在与否,那么世上的鬼神论就能够站住脚了,感觉上认为有鬼有神,就进而推论事实上就是存在鬼神。那么测试也有力的将违心之说推翻。软件的缺陷是存在的,但是无法感知,如果能感知,就容易解决了,还需要花费大量的人力和物力来处理?它是存在的,但是难以感知的。感知的,必是存在的。所以我们测试,既要找出难以感知的缺陷了,又要确定感知的问题,究竟出现在哪里。
软件测试工作也是软件工程开发中比较重要的工作,虽然软件测试处于起步阶段。软件测试需要什么样的专业基础还没有定论,但哲学思想应该贯穿整个测试工作中,测试的目的是为了发现软件中尽可能多的缺陷,这里缺陷是一种泛称,它可能是功能的错误、性能低下、易用性差等等。测试总是先假设程序中存在缺陷,再通过执行程序来发现并最终改正缺陷。理解测试的目的是个很重要的意识问题,而这种意识恰恰是哲学思想。
五、 嵌入式软件开发团队中的哲学思想
工作在第一线的软件开发人员是程序员和项目经理,他们决定着软件的命运。良好的程序员队伍和出色的管理是软件项目成功的必要条件。管理不是管制。管理的目的是让大家一起把工作做好,并且让各人获得各自的快乐和满足。在项目完成时,他们会自豪地说:“看看我们通过努力取得的成绩吧”。所以管理者不能老惦记着自己是一个官,而应时刻意识到自己是责任的主要承担者。作为软件工程的项目经理,让大家都能够有一个更高的站位,调动团队每个人的积极性,发挥每个人的想象力,不去计较某个项目组多做一点还是少做一点。用历史唯物主义观点来发现软件开发中的矛盾点,用辩证唯物主义观点来解觉这些矛盾点。其实就这样做过一段时间之后,你会发现,遵循了这个原则的人,恰恰就是这个原则的最大受益者。
六、 结束语
以上结合自然辩证法所学与自己读研专业学习中的一些体会,尝试使用哲学的观点来看待软件、软件开发过程、软件开发方法中出现的一些现象。通过对软件开发行为进行一系列的哲学思考,从另外一介层面加深了对软件及软件开发内涵的理解和认识。
参考文献
[1]教育部社会科学研究与思想政治工作司.自然辩证法概论.高等教育出版社,2004
[2]徐匡迪.徐匡迪谈工程与哲学的关系[J].岩土工程界,2006
[3]钱学森.工程控制论[M].上海交通大学出版社,2007
[4]赵池龙. 实用软件工程[M]. 电子工业出版社,2003
[5]陈松乔,任胜兵,王国军.现代软件工程[M].北京:清华大学出版社,2004