软件工程:设计难于实现

0x00 前言

记录一下我对软件工程的理解,说实话在校学习期间很难接触到真正意义上的软件开发,更别提会参考或采用软件工程的解决办法。更多的是编写一些很小很小而且漏洞百出的小程序,锻炼的只不过是对编程语言的熟悉和对一些算法的理解和掌握。而真正的软件开发应该不是这样的,虽然我目前还没接触到,但我知道肯定不是简单的编码,而是有一整套设计思路和开发流程的,因为这是质量和效率的保证。

0x01 设计与实现

对于软件的开发,我认为设计远比实现复杂,首先我们先忽略对需求的分析,就单纯从一个简单功能来看,设计对于整个开发都是十分重要的,设计不仅要考虑程序的整个流程和部署,还要考虑到最终结果是否是有意义的。就我个人而言,常常会因为设计而苦恼,首先是没有一个很好解决办法的思路,其次是设计不合理导致后续的实现异常复杂。也常因为自己写了一手好bug而感到奔溃,这些都不是实现的问题,更多的是设计不合理或者对于问题本身理解的偏差造成的。实现对于设计是相对容易的,无非就是编码,这和自己对编程语言掌握的程度有关,还有就是算法与数据结构的熟练程度有关。

0x02 理论的意义

理论的最大意义就是起到要个引导和规范作用,通过软件工程可以规范整个软件开发的流程和实施步骤,这也是为什么软件工程可以单独作为一门学科而存在的原因之一。软件工程把软件放在了一个产品的角度,从最开始的分析设计,开发实现,测试运维以及质量管理都提出了较为规范和通用的实施步骤和方法策略,从而使软件的开发难度降低,提高了生产效率。以前一直认为理论是无用的,实践才是硬道理,后来才发现自己对于理论的认知是有偏差的,理论并非夸夸奇谈,它的意义也并非限于其字面含义,而重要的是其提出的方法和理念。理论更像是人们总结出的经验,它并非局限于某个问题本身,而是针对某类问题的一个通用解决方案。理论研究和良好的理论体系对于一个行业的发展是至关重要的,我认为没有理论的支持,所有的设计和实现都是没有太大价值的。

0x03 软件开发困境

软件开发其实是一种实施细节,即使有很多理论的支持,还是抵不过多变复杂的技术,现在越来越多的框架,虽然免去了重复造轮子,但对于程序员来讲也并没减少负担,反而程序员需要去学习和了解这些框架和技术,完成开发任务。这些开发任务并非其他行业那样只要掌握了足够理论就可以解决多数问题,相反软件开发更多像是一种技术实施细节,这种实施细节只针对某个特定问题有用,换一个场景就未必有用了,所以在程序员行业,只有不断学习汲取新的东西才不会被淘汰。特别是这种实施细节对于软件开发是一种无法规避的难题,如果不了解是无法完成开发任务的,技术的更新迭代远比我们学习新技术的速度快,这是软件开发无法避免的问题,也是我们程序员不得不面对的难题。

0x04 敏捷开发

敏捷开发算是一种很好的开发策略针在目前状况下,我理解的敏捷开发是一种小而快的开发,适用于多变的小项。这种开发策略是一种可以针对具体需求进行随机应变的,可以理解为专注于某个需求进行精准开发。对于当下社会情形,精准显得越来越重要,随着社会分工越来越完善,协同合作也显得越来越重要,只有把工作划分到不同领域,才能提高生产效率,就像流水线一样;然后通过协同合作把各个领域的能力进行汇聚,才能发挥真正的价值,简单来说就是利用分工合作,提高效率汇聚价值。敏捷,我理解的就是高度的分工,互联网企业是分工合作体现的最明显的一类企业,无论从技术还是管理层都涉及到多个部门领域,而针对技术展开的部门和部门内部的工作组,都是分工的体现,在计算机行业想要完成任何一款产品研发都是要分工合作的,因为它涉及到多种各样的技术栈,而科技公司很难找到什么都精通的人才。为了适应市场需求,我们可能也只能进行精准学习,想要成为大牛,可能得不断学习,不断精进了。

0x05 总结

以上就是自己对于软件工程,对于软件开发以及将要投身于的IT行业的理解,自己写下这些东西可能毫无价值,但它代表的是当前的一些理解和思考,这可能是学生时期才会有的想法。多年以后,自己对于行业有了更深的接触和了解后,一定会有有一些不一样理解和思考的,那就等以后再说吧。