热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

做的比完美的要好吗?第1部分

资源在实现复杂的给定算法时,保持干净的代码和良好的体系结构的挑战背景在我学士学位的上学期中。在电气工程领域,我们被分配了实施WFQ-GPS路由算法的项目
资源

在实现复杂的给定算法时,保持干净的代码和良好的体系结构的挑战

背景

在我学士学位的上学期中。 在电气工程领域,我们被分配了实施WFQ-GPS路由算法的项目,作为计算机网络课程的一部分。 除了将其实现为在线调度方法(这会对输入数据包的处理产生影响)之外,我们没有任何其他限制。 效率是一个奖励。

我认为这个项目是一个很好的机会,可以提高我的软件工程技能,并以干净有效的方式编写此算法。 不幸的是,我的愿望没有实现,由于期限的限制,我和我的伴侣妥协了,最终交出了一个“完成”而不是一个完美的项目。

学期结束后,我决定实现自己的目标,并以正确的方式完成此项目。

决定

  • 我需要学习C ++。 最初的项目是用C编写的,但是我知道C ++包含更多有用的数据结构(例如STL库),并且在内存分配和实现设计模式方面更加灵活。
  • 我是C开发人员,我已经知道C ++的主要概念。 那么,成为C ++-er的最佳方法是什么? 有一些指南概述了这两种语言之间的区别。 但是,我发现最有用的是咨询我的一位资深C ++开发人员。 他为我提供了对该语言及其最佳实践的更广阔视野。 他还同意在整个项目中指导我,这是无价的。

入门

提高我的绘画技巧

我开始绘制代码的体系结构。 我从以前的几个项目中学到的最好的教训之一是,这一步骤至关重要且非常有帮助。 它有很多优点,值得重点介绍:

  • 它可以帮助您更好地理解您愿意实现的功能,因为设计首先应该服务于算法的正确性。
  • 它是代码的映射-您可以在其中决定对象,对象之间的关联,共享资源和数据结构。 写作 (不是在你的脑袋假想文件)了这一切提前,你想想上述所有的力量,实际写入之前。 我通常使用draw.io或简单的笔和纸(希望获得更多好的工具的建议)。
  • 当事情变得肮脏(并且当您开始编写和/或有到期日期时事情确实变得肮脏)或在调试过程中时,可以返回到此安全区域。 它确切地提醒您您打算做什么。 当然,它将在此过程中进行修改,但这就像您的代码指南针一样。
  • 这对于与同行的协作非常有价值。

测试。 一切。

根据我过去的经验,以及我对C ++的了解,我对整个过程进行了几乎所有的测试。 这是我第一次采用这种方式,并且证明了自己。

一个很好的例子是我学会了在函数内部创建对象时必须使用“ new” (这使它们分配在堆中,而不是在函数堆栈中),以防我希望在函数(以及函数外部)使用它们的情况。然后释放此内存)。 这是在我将对象的创建导出到与main不同的功能之后,即使它只是“取出”相同的行并从中创建功能-我进行了测试并找到了问题。 多亏了我的导师,我才得以学习这种练习。

(我将在下一篇文章中详细说明在此类项目中何时,如何以及以什么方式进行调试)

一步一步来

一旦有了对效率,体系结构和对C ++功能的充分使用方面满意的坚实的代码框架,我便从一个基本示例开始。 它类似于算法的工作方式。 然后,我进入了我的第一个“真实”输入。

基本示例在第一次尝试时几乎完美无缺。 我的想法是:

我做对了所有事情,我的代码很棒,现在一切都应该正常工作。

不。 我的意思是,这的确带给我一个很好的观点,但是最初的实际投入仅部分起作用。 我希望它表现不佳。 这几乎使我完全放弃了我所画的体系结构,并且对代码进行了微调试,以了解其故障,而没有任何有关新功能和特性的文档。 不好。

多亏了Git,我让我想起了这个项目的目标,不久之后,我又回到了我的体系结构,即“罗盘”,试图找出缺少的内容。

目前,在3个输入中有2个工作正常,这非常令人满意。 这些天来,我正在努力理解为什么第三个不是。

要回到我的图纸。 第二部分见。

顺便说一句,您可以在这里找到我的代码,请随时提出您的建议,并帮助我成为更好的软件工程师。

From: https://hackernoon.com/is-done-better-than-perfect-part-1-2500e616ce16



推荐阅读
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 车载T-BOX智能网联终端的设计与实现
    本文介绍了一款基于瑞萨RH850微控制器、TICC2640R2F蓝牙微控制器和高通MDM9628处理器的T-BOX车载终端的设计。该终端通过集成CAN总线、GPS定位、数据加密、蓝牙通信和LTE无线数据传输技术,实现了车辆信息的高效采集与云端通信,支持远程车辆控制和诊断等功能。 ... [详细]
  • 地理信息、定位技术及其在物联网中的应用
    地理位置信息是物联网系统中不可或缺的关键要素,它不仅提供了物理世界的坐标,还增强了物联网应用的实用性和准确性。本文探讨了位置服务的基本概念、关键技术及其在物联网中的重要作用,特别介绍了定位技术的最新进展。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • Android 手机安全应用首屏布局设计
    本文详细介绍了如何构建一个功能丰富的手机安全应用的首个导航界面布局。通过实例代码和效果展示,帮助开发者快速理解和实现相关功能。 ... [详细]
  • 本文详细探讨了KMP算法中next数组的构建及其应用,重点分析了未改良和改良后的next数组在字符串匹配中的作用。通过具体实例和代码实现,帮助读者更好地理解KMP算法的核心原理。 ... [详细]
author-avatar
苦咖啡青柠檬
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有