【软技能】代码先放一放,学习一下工程的概念

前言

本篇文章适合于以下同学阅读

  • 接触编程时间不长的初学者;
  • 经常需要编程,但是对工程的概念相对模糊的同学。

初步认识工程

工程的概念大家或多或少都有接触过。比如在开发环境(如Qt Creator)里编写一个软件,我们首先需要新建一个“Project”,中文翻译通常叫做项目或者工程。一个项目中包含了以下内容:

  • 项目配置:用于告诉开发环境如何为你工作;
  • 项目代码:项目代码是开发者编写的,用于实现你的编程目标,比如实现一个播放器、实现一个游戏等;
  • 项目其他资源:如图片、文本等数据资源。

可以看到,**项目是实现一个目标,所需要的信息、资源、工具、步骤的集合。**换言之,把实现一个目标所需要的资源,有机的结合起来,就变成了项目。

在脑海中树立项目的概念是很有用的。项目能够让你更加有条理地、高效地管理你正在做的事情,让你能够更加专注于和目标相关的事物,而不是把精力放在无关紧要的东西上。

但是,上述的项目/工程仅仅是软件开发过程中的一个狭义的概念。在实际的软件开发行业中,也就是在公司、团队在做产品开发的实际生产实践中,需要将上述的“Project”(即项目/工程)的概念作推广。

概念推广

每个人都是初学者过来的,记得在笔者本人初学编程的几年内,总以为软件开发就只是写代码而已。随着参与了一个又一个实际的软件项目,笔者才明白,软件开发绝不仅仅是闷头写代码而已。

也许你觉得,编程做软件不就是写代码吗?我一直都是这样做的啊,代码也能写出来,也能运行很好。之所以产生这样的认知,是因为你没有接触到相关的实际问题。

例如,一个总价50万的软件,总代码行数5万行,如果交给你做,项目交付时间为三个月,软件的需求由客户来提,需求有一定的变动,你有多少把握去接?判断有多少把握,当然不是直接把代码写出来再评估,评估和分析的工作要在编码之前做好。例如,至少需要评估以下方面:

  • 需求变化范围:需求绝大多数情况下是会变的,就像是每个App每年都在更新。要和客户确认需求的变化范围,保证需求可控,考虑不可控因素。在后续的开发编码中,要对不确定因素做好软件架构上的冗余设计。
  • 技术难度:项目涉及到哪些技术,有哪些解决不了的问题,哪些难点大概需要花多长时间;
  • 技术选型:同一个业务可能有多个技术方案,选一个综合考虑最优的方案;
  • 软件的结构设计:代码在5万行的项目,对于一个人来说,是一个不小的项目了。可能你平时写万行以内的小工具、小demo不是很费力,完全用不上精心考量设计模式和架构。但是,随着代码行数的增多,代码的维护越来越难。如果软件没有一个章法、结构可寻,你的代码将逐渐失控。最典型的例子是,在你写一个新的功能时,需要在已有的代码中添加、修改或删除代码。但是因为代码量多,代码耦合性强,导致你每改一个地方,都有可能破坏已有功能,引入bug,导致软件bug横行,最终项目失败!
  • 软件测试如何做,以及需要多少工作量
  • 软件部署、维护如何做,以及需要多少工作量

如上所述,软件从开始到结束,除了编写代码,还有很多步骤需要完成,而且每个步骤都需要产出相关的文档、资料,作为后续编码人员进行编码的依据。现实中,软件公司的软件生产流程和上述过程类似。之所以说类似,是因为实际上并不是所有公司、团队都会严格遵循以上步骤。其中重要的原因是成本问题,步骤增多,成本自然会上升。对于规模较小的公司、团队,可能流程更加精简;规模较大的公司,因为出错成本高,会更加注重软件工程的实施,提高软件质量。

我们一定要摒弃“做软件只是写代码”的陈旧观念,写代码是软件过程中的重要部分,但并非全部。读者可能会觉得上述内容可能用不到,这是因为暂时你还没有遇到实际的问题。在日后的工作中,你将会逐渐地遇到这些问题。在遇到这些问题之前,最好先建立起相关概念,做好心理准备,并随着时间的推移,慢慢消化。

软件行业发展已有将近一个世纪,软件开发过程中,什么情况下会遇到什么问题,以及这些问题如何解决,相关的研究已经比较成熟。这一套成熟的理论,叫做“软件工程”。这个“工程”不再是“Project”,而是“Engineering”。

如果你想要进一步了解的话,可以查阅“软件工程”相关的书籍。这里推荐一本:《软件设计师教程(第五版)》。此书电子版百度云地址:链接: https://pan.baidu.com/s/1s9rQjIIAxFmccCf7fZUvOA,提取码: htcq。也可以关注公众号“Qt未来工程师”,后台回复1,获取下载地址。此书中有软件工程的相关章节。大家下载下来以后,可以在闲暇之余阅读。

Project和Enginnering的异同点

相同点:

  • 都是为了实现某个目标,而创建的信息、资源、步骤的集合。

不同点:

  • Project更倾向于代码管理,而Engineering倾向于整个软件从确定软件需要实现什么功能开始,到软件投入使用结束,整个过程中所有需要做的事情。

了解工程的概念对个人的作用

本文读者中可能有一些尚未参与到工作中的同学,对软件开发的整体过程可能没有完整的接触。了解软件工程,可以帮助你了解最真实的软件开发流程,为将来的工作作准备。

同时,软件工程中包含的一系列设计步骤和方法,是提高软件质量的重要保证。对个人来说,学会参与到软件工程为主导的开发过程中,是提高自身软实力的重要机会,能让自己的编程生涯更加顺利,减少不必要的麻烦,避免因质量、进度问题产生严重后果。

结语

笔者根据自己多年的编程和工作经验,简述了工程相关的概念,并没有作深入介绍。希望能够引起读者对工程的注意,帮助读者避开自己曾经走过的弯路,扩充知识面,提高自身实力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python程序设计搜题软件_智慧职教APPPython程序设计基础答案搜题公众号

智慧职教APPPython程序设计基础答案搜题公众号更多相关问题暑淫证与火热证的共同点是A.都有明显的季节性B.脉数有力C.发热神昏D.舌红绛每种生物都是有自己特有的一套遗传密码。()患者,女,34岁。营业员&…

【转】WebAPI ASP.Net 发布部署中常见的两个错误未能找到 CodeDom未能加载System.Web.WebPages.Razor

未能加载文件或程序集“System.Web.WebPages.Razor, Version3.0.0.0, Culturene 未能找到 CodeDom 提供程序类型“Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft... 在包管理器中异常安装包MVC5 及 CodeDom,重新编译部署即可…

QSplitter设置宽高比例的正确方法

问题 实际开发中,需要经常调整QSplitter中子窗口的宽度/高度比例。对水平QSplitter来说,是宽度比例;对垂直QSplitter来说,是高度比例。下面以水平QSplitter为例说明。 我们首先应该会想起看看QSplitter是不是有设置比例的函数。…

我要回家软件_工具用的好,下班回家早,推荐几个堪称神器的高效率软件

工具用的好,下班回家早,别人已经早早下班,你还在哼哧哼哧的加班,有时候并不是你比别人慢,而是你没有找到提高工作效率的工具呀,我这次推荐几个堪称神器的高效率软件工具,也许能极大的提高你的工…

【转】带你玩转Visual Studio——01.开篇介绍

开篇之前,先唠叨几句 本人从事C开发工作一年半,总想就C开发方面写点东西。写什么呢?想了一下还是写点跟开发密切相关的吧,要说跟开发最密切相关的那莫过于就是开发工具了,也就是常常说的集成开发环境(IDE)。 这一年多…

Qt中的角度和正方向描述清单

在Qt开发中,不同的API对应有不同的0度和正方向,本文做一个汇总,方便查阅。 函数/模块角度描述画圆弧QPainter::drawArc3点钟方向为0度,逆时针为正向画弦QPainter::drawChord3点钟方向为0度,逆时针为正向画圆饼QPainte…

丢失模式不联网有用吗_用眼过度,打开手机“护眼模式”真的有用吗?

现如今,人们越来越离不开手机,用手机办公或者用手机娱乐,因疫情在家学习的学生们,都需要通过手机来进行学习,深夜剁手的你是不是也躲在被子里,一遍又一遍地刷新着消息,入睡前的最后一件事是关掉…

【基础】Qt-VS调试器下载与配置

前言 因为MSVC版的Qt不自带调试器,所以在Windows上使用MSVC版的Qt进行开发时,需要配置调试器。 本文讲解了在Windows下,下载和配置MSVC版Qt调试器的过程,并给出下载地址。 调试器选择 下表列出了不同平台下的调试器选择方案&am…

【转】带你玩转Visual Studio——02.带你新建一个工程

接着上一篇文章带你玩转Visual Studio——开篇介绍继续讲这个主题&#xff0c;现在我们从创建一个新的工程开始。 一步一步创建项目 依次选择菜单&#xff1a;File\New\Project&#xff0c;打开New Project对话框。<1>.选择项目类型&#xff1a;Win32 Console Applicat…

python seaborn 热图 值对应颜色_基于行值的seaborn热图配色方案

我有一个数据帧&#xff0c;部分是这样复制的&#xff1a;import pandas as pdimport numpy as nptab pd.DataFrame(np.array([[ 46, 39, 25, 29, 21, 12, 33, 32, 70, 109, 144, 158, 161,184, 163, 113, 117, 82, 76, 88, 77, 76, 64, 35],[ 39, 33, 29, 29, 26, 14, 25, 33…

【必知必会】pro文件及常用配置

前言 笔者在工作中了解到&#xff0c;有部分同学对Qt的项目文件&#xff0c;即.pro文件的基本配置编写不是很了解。作为一名Qt工程师&#xff0c;.pro文件的编写也是必会的技能&#xff0c;本文对此进行一个讲解&#xff0c;并将相关资料做一个汇总。 .pro文件的介绍 .pro文…

stm32烧录软件_stm32怎么烧录程序

STM32烧录程序目前笔者知道的有三种&#xff1a;JLink &#xff0c;Ulink和串口烧录&#xff0c;使用工具分别为&#xff1a;JLink&#xff0c;ULink以及USB转TTL线。ULink 烧录程序在安装MDK过程中&#xff0c;会有提示是否安装驱动&#xff0c;该驱动就为ULink驱动&#xff0…

【转】第00课导读:生活中的设计模式——启程之前,请不要错过我

为什么叫设计模式 什么是设计模式设计模式与生活有什么联系为什么要学设计模式如何进行学习为什么选择 Python 弥补市场空缺大势所趋&#xff0c;Python 已然成风简单的 Python 基础 Python 的特点基本语法常用容器 List&#xff08;列表&#xff09;Tuple&#xff08;元组&…

【探究】信号槽到底能不能有返回值?

【探究】信号槽到底能不能有返回值&#xff1f; 前言 Qt信号槽到底可不可以有返回值呢&#xff1f;问了下身边的同事&#xff0c;有的人说可以&#xff0c;有的人说不可以。在实际项目中&#xff0c;确实没看到过有人使用带返回值的信号槽&#xff0c;可以说存在感很低。平时…

python yield 简单用法_通过实例简单了解python yield使用方法

实例代码如下def demo():print("开始执行...")while 1:res yield 这是返回值print("res:",res)d1 demo()print(d1)print(next(d1))print("*"*20)print(next(d1))执行结果如下&#xff1a;开始执行...这是返回值********************res: None这…

【转】第01课:生活中的监听模式——一坑爹的热水器

用程序来模拟生活从剧情中思考监听模式 监听模式监听模式的模型抽象 代码框架类图基于框架的实现模型说明 设计要点推模型和拉模型应用场景 【故事剧情】 刚刚大学毕业的 Tony 只身来到北京这个硕大的城市&#xff0c;开始了北漂的生活。但刚刚毕业的他身无绝技、包无分文&…

【经验】Qt项目开发必备工具

在实际的项目中&#xff0c;除了需要掌握Qt开发框架本身&#xff0c;还需要掌握一些开发工具。这些工具能起到事半功倍的效果&#xff0c;甚至某些工具是开发不可或缺的。下面笔者就介绍一些常用的开发工具的用法及下载地址&#xff0c;希望对缺少实际项目经验的同学提供一些参…

c与python内存传递_python - 从Python向C ++传递COM指针数组 - 堆栈内存溢出

我已经阅读了许多文档&#xff0c;示例和StackOverflow主题&#xff0c;但仍然无法正常工作&#xff01; 我正在为我的C COM对象编写一个Python接口。 这不是我第一次这样做。 过去&#xff0c;我已经成功地使用comtypes获取单个接口指针&#xff0c;并将它们传递给我的COM类&…

【转】TCP/IP协议--TCP的超时和重传

TCP是可靠传输。可靠之一体现在收到数据后&#xff0c;返回去一个确认。但是不能完全避免的是&#xff0c;数据和确认都可能丢失。解决这个办法就是&#xff0c;提供一个发送的重传定时器&#xff1a;如果定时器溢出时还没收到确认&#xff0c;它就重传这个报文段。 想法是完美…

【技术】Qt对话框讲解

前言 Qt中对话框QDialog是几乎每个项目都会用到的GUI窗口对象。本文通过讲解QDialog及其子类在项目中经常被用到的功能点&#xff0c;帮助小伙伴们理解和掌握其使用方法。 QDialog QDialog是Qt对话框类树中的基类&#xff0c;Qt为我们提供了很多QDialog子类&#xff0c;即标…