美文网首页
工程化代码和编程的区别

工程化代码和编程的区别

作者: shmily微笑 | 来源:发表于2019-07-28 22:54 被阅读0次

     (前记:时常总结是一种好习惯,从这次开始培养这个好习惯。)

    工作也有一段时间了,不再是只会傻傻写代码的小萌新了,对一个项目的整个流程也算清楚了,知道项目是什么,每个阶段需要干什么。于是,在这里和小伙伴们分享下心得经验:谈谈工程化代码和编程的区别。

             首先,从字面意思上理解什么是编程和工程项目。编程(是编定程序的中文简称,就是让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程。软件工程,(即咱们程序员经常口头说的项目),从软件开发的观点看,它就是使用适当的资源(包括人员,软硬件资源,时间等),为开发软件进行的一组开发活动,在活动结束时输入(即用户的需求)转化为输出(最终符合用户需求的软件产品)。重要的三个阶段:一、定义阶段:可行性研究初步项目计划、需求分析;二、开发阶段:概要设计、详细设计、实现、测试;三、运行和维护阶段:运行、维护、废弃。从字面上就可以看出,编程只是对某种问题的计算机解决方法,而工程却涉及到客户需求、人员、软硬件资源、时间、产品产出,甚至和实际建筑工程有些类似。可能有些人说了,我就是个写代码的,需要知道那么多干嘛。答案是可肯定的,只有更好地了解整个工程流程,才能知道每个阶段需要干什么,客户需求什么,输出的产品是什么,才能轻松在给定时间内写出代码。

    其次,在实际开发中,编写工程化代码(主要以c\c++为例)需要注意什么?

    一、版本控制

    版本控制分三个部分——硬件资源环境、开发工具版本控制、程序版本控制。硬件资源环境,不能只考虑自己电脑性能和程序能否在自己电脑运行。首先要确定运行工程代码的硬件环境是windows、还是linux、某个手机平台、或者arm开发板,其次确定是32位还是64位,某些小萌新进去,一顿操作猛如虎,最后测试发现平台不兼容,通常为了追求稳定性,一般都是选择32位开发环境。对于涉及并发程序开发的,还要关注下cpu的性能,虽然现在cpu性能都很高,但不排除以旧服务器作为载体的。开发工具版本控制,这个就不多说了,只要和整个开发团队保持一致即可,如果只是你一个人使用的开发工具,不要追求最新、不稳定版本。最后,程序版本控制,这个最为重要。一般,公司都会有自己的版本控制服务器svn、github等,但我要说的是自己的程序版本控制,一般上传到服务器上的都是几经考验的稳定版本,但不排除有时候有些新修改漏斗没有觉察到或者自己需要恢复到某个阶段重新开发,这个时候有备份就至关重要了,所以每一个版本无论好坏都要给自己备份一下,有时候在关键时刻会助你一臂之力。

    二、接手项目

    并不是所有的项目都是重新开发,往往接手的项目已经是迭代了不知道多少版本的。接手项目,首先备份当前版本(版本控制的重要性)。接着确认大环境,查看平台,动静态链接库是否齐全,配置文件是否还在,尝试编译运行一下能否通过,确认无误后再阅读代码,有问题了尽快请教。阅读代码时,先不要急于看每个功能如何实现,先把整个逻辑流程过一遍,找到自己业务的模块,再将该模块实现功能仔细阅读,并单独实现,最后再加以改进。

    这个时候,最容易出现网上某程序员开始爆料前任写的代码&%%¥¥(一万字省略)。哈哈,那种程序员一看就是不了解工程流程。如果了解工程流程,就不会说这话。因为如果是开发阶段,肯定二话不说,自己就把代码重构了。如果是维护阶段,不论再大的坑,跪着也要把它舔完,这是你的使命,抱怨是没有任何意义的。然后,构思代码。为什么是构思代码,而不是写代码,因为直接写代码是没有灵魂的(大神除外)。构思代码的好处是,先把架构定下来,输入什么,输出什么,用什么数据结构和方法实现,这样不仅有助于接下来的编码,而且不容易反复推翻修改,三思而后动就是这个道理,这也有助于锻炼架构师思维(虽然我还是只老一点的小萌新,但人没有梦想和咸鱼有什么两样)。最后,代码的维护。还是程序版本控制(重要的事情说三遍,这是第三遍了)

    三、代码规范性和安全性

    很多大公司都有自己的一套编码规范。不论公司有没有规范,自己必须有一套符合大众的编码规范。不仅代码看起来赏心悦目,方便问题查找,而且也便于以后阅读和维护,最重要的是代码可以烂,气势不能输(不管你信不信,反正我是信了)。代码的安全性分两个方面:代码自身的安全性和程序代码的安全性。代码自身的安全性主要是指不要使用不安全的库函数、指针等。编程语言也是代码,也会有bug,只是我们水平太菜,没发现而已。但是已经有很多前辈帮我们踏过这些雷区,我们需要的就是偶尔关注一下版本更替的说明和多看大神们的经验,避免使用那些具有安全隐患的库函数,尤其是在使用指针时,须慎重,如无必要,,不要耍酷(大神除外),血的教训告诉我指针引发的问题是最隐蔽的。另一方面,我们也要学会防范不安全代码的发生。举个栗子,就拿做个计算器来说,最简单的两个数相加,在编程里就是return(a+b),但在工程代码里,这样做的计算器是没人用的,因为不安全,没有限制。如果输入两个数特别大呢,用long long型,超出long long型呢,或者输入没超出,结果超出了,返回负值,是正确结果吗?虽然,超大数相加,网上已经有很多解决办法,但是代码的安全性防范是写工程代码必须考虑的。程序代码的安全性就比较简单了,把自己的程序尽量封装成接口,这样既可以防止别人随意改动你的代码,也便于管理维护。

    附上华为C语言编程规范:https://www.cnblogs.com/leezheng/p/8098720.html

    四、开发新项目

    如果遇到不是接手项目,而是开发一个新项目。不用怕,这时候就是展现你脑回路的时候。首先,分析需求,谨记一句话:如无必要,不要自作多情。严格控制需求,仔细分析,清楚需求要做到什么程度,不要为了彰显自己半瓶水的功力,提升难度,补充需求,本来让你做个人脸识别,你非要加个活体检测,结果GG了。学习研究可以挑战下自我,做工程就不必装×了。其次,构思框架,三思而后行。架构很重要,人有骨架,楼房也有钢筋,一个好的框架,可抗八级地震,减少二次开发的次数,提高运行效率。这些都不需要我们管,那是大佬构思的事情。我们要构思的是,如何采集数据,采集完数据,如何保存数据,分析数据,产出结果,结果如何展示给客户。举个栗子,一个人脸识别demo,首先要采集人脸,需要一个摄像头。其次,采集的数据,需要保存。保存方式多种多样,本机保存,专用服务器保存,数据库保存,文件保存,文件保存又分txt,xml文件等,总之多种保存方式任你选择。假设选定xml文件格式,就需要xml文件的读取模块。采集到数据以后,不仅要保存还要分析,分析人脸需要三个步骤:识别人脸,与已存人脸进行对比,返回结果。获得结果后,如何展示。文字展示加图片显示。KO,构思完毕。然后,确定环境。需要硬件资源,至少一个摄像头吧,程序在什么平台上运行,x86电脑,开发环境vs2015+opencv3.5+opencv3.5+tensorflow1.11等,展示需要个显示屏吧。KO。接着,大环境确认了,就是详细设计。输入什么,输出什么,数据格式,中间流经几个模块,实现方法,故障处理,实时性要求等等。流程走下来,剩下就是填充代码和反复测试。最后,演示检验。就是这么简单。(吹牛就是爽)

    最后,还是提醒各位观众,吹牛一时爽,基本功要扎实。编程是练基本功的,工程是练思路和管理的,思路不行,永远只是个码农,基本功不扎实,思路再好也出不来干货,切勿眼高手低。(也是自勉)。

    后记:希望自己的经验能够给想要入行的小萌新们一点帮助,肤浅之言也请大佬们笑纳指正。

    相关文章

      网友评论

          本文标题:工程化代码和编程的区别

          本文链接:https://www.haomeiwen.com/subject/gndmrctx.html