软件工程阅读材料所思所想

  阅读材料请戳:http://blog.sina.com.cn/s/blog_553f355101017g6l.html

           http://blog.sina.com.cn/s/blog_553f355101017j8q.html

  软件工程是计算机的一个重要分支,是计算机科学应用于社会发展的重要途径。但是与计算机的其他领域不同的是,软件工程的一个很大的特点就是人机交互的体现。

       我们在学习算法、数据结构或者某一门特定的编程语言时,都是像基础学科那样循序渐进,通过对基本定义基本概念加深理解以求得更深层次的提高。然而软件工程并没有那么多明确的概念界定,因为我们要做的是建立在基本编程语言之上的“工程”,我们要做的是把对基础知识的理解应用到实际中去的产品。或者形象的说,软件工程就是搭建在计算机与用户之间的桥梁。我们要考虑的绝不仅仅是几个复杂的数学方法,用户永远是一个非常重要的部分。

  Software engineering will never be a rigorous discipline with proven results, because it involves human activity.

  具体到软件工程的实际操作中,编程已不仅仅是唯一要考虑的因素。你永远不是一个人在战斗,作为集体的一分子,你的一举一动都会影响整体的动向。这在编程这门“精细”的工作中显得尤为明显。一个人的精力毕竟有限,要实现大的工程,多人共同合作是必须的,但是怎样协调调度能让每个人最大程度发挥自己的功效并且使产品很好地契合实际目标,这就是我们的PM的首要任务。其实从软件工程的侧重点就能看出其与计算机科学的区别。计算机科学关注怎样用最优的计算机方法解决具体的数学问题,软件工程更看重怎样的软件成本合理、符合需求、运行稳定。

  We need software that can be put together in a reasonable amount of time, for a reasonable cost, that works something like its designers hoped for, and runs with few errors.

  实际应用的软件,并不是像解决数学问题那样板上钉钉、说一不二。软件有自己的生命周期,实际开发软件的过程也有著名的“瀑布模型”等作为规范化的标准,软件投入使用后还会根据需求的不断更新而做出相应的调整。这就是为什么软件都会有自己的升级版。如果一个软件发布后就不再更新,那一定是因为已经跟不上社会的发展而被淘汰掉了。软件工程不仅仅包括开发周期,发布后的维护与更新也是很重要的部分,或许是比开发更重要的部分。因为类似于爱因斯坦的“想象力比知识更重要”的观点,开发仅仅是用特定的方法实现目前需要的功能,而不断去发现新需求、新的待开发功能才是软件能够保持长久生命力不断做出贡献的关键。

  软件工程与计算机科学的区别明显并不代表它独立于计算机学科之外。如前面所说,软件工程的基础依旧是我们的计算机的基本知识。

  Core computer science topics are vital tools to any software engineer. A background in algorithms is important when designing high-performance application software.

  只不过我们现在需要加强认识的一点是从基础知识到产品的漫长过程。这其中的许多困难不是来自编程时实现功能的复杂度,而是在于从客户处了解到的信息转化成虚拟环境中的数学模型时会遇到什么样的问题。不得不再提那个经典的不等式:

  最符合实际的要求 > 用户的要求 > 用户表达出来的要求 > 软件团队理解的要求 > 具体开发人员的理解 > 在当前各种约束条件下的实现 > 给用户用

  最终发布的产品与实际问题的需要会差多远,就是衡量软件工程成功与否的重要标准。

  Classical computer science is helpful to software engineering, but will never be the whole story.

  好的软件工程,要有创意、远见、多学科思维甚至还要有人文精神。所以说这是很有挑战性的。我们愿意接受这种挑战。

  前一篇博客很好地表达了我们团队对于习而学的软件工程的看法。其实对于软件工程最基本的编程而言,learning by doing都是很好的成长手段。邹老师给我们上的软件工程课,强调产品、强调合作沟通、强调关注基础知识外的一切与产品研发有关的方法与细节。我们不是从书本上看到而是切身体会到敏捷开发、软件测试与分析以及Deadline的无穷魅力。

  这是很难得的体验,也是一种很独特的学习。只有更早地接触象牙塔外的东西,我们才能更早真正成长为能够走出校门独当一面的IT人。

  最后单就这两篇博客本身谈一下看法。就事论事来说,这两篇文章翻译的实在是太糟糕了。虽说有一大堆的“译者注”,但是措辞十分像机器翻译的行文风格是对文章理解的一个很大的阻碍。计算机科学的很多英文文章在语言组织上就能够很流畅地体现计算机的一些思想,所以我还是认为,哪怕是多辛苦翻一下字典,看原文的收获还是要多得多。(via @全疯男

posted @ 2012-12-11 22:54  CodingCook  阅读(954)  评论(0编辑  收藏  举报