问题如题:

设计和实现AI算法算法时有没有必要在代码中加注释,没有用必要在实现之前弄个UML图???

今天看到一个博文:

https://www.cnblogs.com/siyuanwai/p/15432932.html

里面又怎一端话:

看了这段话后我有了一些想法。

现在的AI算法发展的十分迅速以至于很多AI算法不再只停留于算法层面,在某种意义上来说现在的很多AI算法都可以用AI系统工程或是AI工程来描述,总的来说现在的AI算法不同于传统的AI算法,不再是那种结构单一、逻辑简单、代码量较少的那种小体积的代码结构。现在的很多AI算法都是有多个组成部分,而每个组成部分又可能接着细分,最终的子组成部分可能才是传统意义上的算法,在这种情况下还用传统的算法编写方法来编写代码很难适应现在的情况,即使算法的最初面对者是学术界的,即使这些算法并没有工程方面的要求,但是这么复杂的,这么大体积的算法可能用工程项目来说更为贴切。

复杂的AI算法与其说是算法不如说是AI算法工程项目更为贴切。

就像本文题目中所说的,AI算法需要不需要在代码中加注释,需要不需要在算法代码编写之前使用UML这类的软件需求或结构设计软件进行下规划呢。(特殊说明下,这里并不是说要用UML设计一个完整的流程,因为这个用不到,再复杂的AI算法项目最终面对的往往也不是最终用户,最终面对的也还是算法本身,所以我们往往需要设计一些各个算法子组成部分间的关系结构可能就可以了)

说下个人观点:对于越来越庞杂的AI算法项目,在编写代码之前做好一定的设计分析工作,如使用UML中的类图之类的分析设计图即可,在编写具体的AI算法项目的代码时也加入适当的注释,毕竟代码量大了,逻辑复杂了,往往没有注释的情况下是难以解读的。要是以前的较短代码量的算法代码没有注释也是能够接受的,现在的AI算法项目代码量大的惊人,逻辑结构也搞的错综复杂,如果没有一点软件工程的知识来支撑是难以编写出具有可读性的AI代码的,同时现在的AI研究在学术界还是工程界都是需要不对的调参,不断的优化,不断的改进的,如果代码设计之初就没有构建清楚整个项目的代码结构,那么后期的优化改进就会变得像打补丁一样折磨人。可以说不好的项目代码架构设计,不好的编码风格,没有适当的代码注释,这些问题不仅仅是开发工程师的噩梦同时也是AI算法开发工程师的噩梦。现在的AI算法在代码量和代码变更程度上更像是开发项目而不是传统的那种小代码量的算法,因此使用适当的项目开发技术作为支撑是很有必要的。

最后给出我很认同的一句话:

编写高质量可维护的代码是程序员的基本修养。

同时我也认为编写高质量的代码不仅仅是程序员的基本要求同时也是AI工作者的基本要求,AI工作者在编写AI算法程序时保证良好的代码质量也是十分必要的。

====================================================

python 官方给出的编程规范:

https://www.python.org/dev/peps/pep-0008/

设计和实现AI算法算法时有没有必要在代码中加注释,没有用必要在实现之前弄个UML图???的更多相关文章

  1. Linux内核设计第四周学习总结 使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

    陈巧然原创作品 转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数A ...

  2. 贝叶斯公式由浅入深大讲解—AI基础算法入门

    1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生,要么不发生,从来不会去考虑某件事情发生的概率有多大,不发生的概率又是多大.而且概率虽然未知,但最起码是一个确定 ...

  3. 贝叶斯公式由浅入深大讲解—AI基础算法入门【转】

    本文转载自:https://www.cnblogs.com/zhoulujun/p/8893393.html 1 贝叶斯方法 长久以来,人们对一件事情发生或不发生的概率,只有固定的0和1,即要么发生, ...

  4. 2018科大讯飞AI营销算法大赛全面来袭,等你来战!

    AI技术已成为推动营销迭代的重要驱动力.AI营销高速发展的同时,积累了海量的广告数据和用户数据.如何有效应用这些数据,是大数据技术落地营销领域的关键,也是检测智能营销平台竞争力的标准. 讯飞AI营销云 ...

  5. 实践案例丨基于ModelArts AI市场算法MobileNet_v2实现花卉分类

    概述 MobileNetsV2是基于一个流线型的架构,它使用深度可分离的卷积来构建轻量级的深层神经网,此模型基于 MobileNetV2: Inverted Residuals and Linear ...

  6. 3.5星|《算法霸权》:AI、算法、大数据在美国的阴暗面

    算法霸权 作者在华尔街对冲基金德绍集团担任过金融工程师,后来去银行做过风险分析,再后来去做旅游网站的用户分析.后来辞职专门揭露美国社会生活背后的各种算法的阴暗面. 书中提到的算法的技术缺陷,我归纳为两 ...

  7. 十大经典排序算法详细总结(含JAVA代码实现)

    原文出处:http://www.cnblogs.com/guoyaohua/p/8600214.html 0.排序算法说明 0.1 排序的定义 对一序列对象根据某个关键字进行排序. 0.2 术语说明 ...

  8. 【优化算法】Greedy Randomized Adaptive Search算法 超详细解析,附代码实现TSP问题求解

    01 概述 Greedy Randomized Adaptive Search,贪婪随机自适应搜索(GRAS),是组合优化问题中的多起点元启发式算法,在算法的每次迭代中,主要由两个阶段组成:构造(co ...

  9. JAVA十大经典排序算法最强总结(含JAVA代码实现)

    0.排序算法说明 0.1 排序的定义 对一序列对象根据某个关键字进行排序. 0.2 术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面: 不稳定:如果a原本在b的前面,而a=b,排 ...

  10. 从算法入手讲解如何在SQL Server中实现最优最简

    算法是计算机科学中一个重要的研究方向,是解决复杂问题的关键.在计算机世界中,算法无处不在.数据库是存储数据和执行大批量计算的场所,在数据库中使用一些简单的SQL命令,进行存储.查询.统计.以解决现实世 ...

随机推荐

  1. Prometheus + Grafana (1) 监控

    简介 Micrometer/Prometheus/Grafana体系是当前最成熟的低成本Java监控解决方案,而且通过其他的Prometheus exporter,还可以进行诸如我们可能需要的Wind ...

  2. Next.js 13 如何使用loading.js

    要在next.js 13中使用loading.js,我们需要先在对应的文件目录下创建loading.js文件 文件结构如下: app test1 loading.tsx page.tsx 如上面的目录 ...

  3. python根据文件目录批量过滤空行

    import shutil import os path = "E:\\in\\" #文件夹操作目录 path2 = "E:\\out\\" #文件夹输出目录 ...

  4. 一些常见功能的查询sql

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 一些常见功能的查询sql 日期:2019-4-10 阿珏 ...

  5. Puremvc

    Puremvc 框架unitypuremvc PureMVC健壮.易扩展.易维护 Many so-called Model-View-Controller frameworks today seem ...

  6. Dell服务器配置RIAD并创建热备盘

    在系统启动期间,按F2键进入System Setup(系统设置)主菜单 单击Device Settings(设备设置). 单击所需的RAID controller(RAID控制器)设备. 4.单击Co ...

  7. Lfu缓存在Rust中的实现及源码解析

    一个 lfu(least frequently used/最不经常使用页置换算法 ) 缓存的实现,其核心思想是淘汰一段时间内被访问次数最少的数据项.与LRU(最近最少使用)算法不同,LFU更侧重于数据 ...

  8. [ABC184F] Programming Contest题解

    前置知识 meet in middle (折半搜索) 会的大佬请跳过 不会的请自己前往oi wiki或CSDN(百度吧,少年) 解题思路 纯暴力 看完题目考虑将每一种情况计算出来,排序后找不超过T的最 ...

  9. 用hive或mr清洗app数据

    1.项目背景 从大量源数据中清洗出有效数据供后续程序使用. 源数据参照log.txt文件 2.项目源数据说明 9841EF7BDBDF0AC9AF42AEBB4E4F8D4F Id 12 状态1 22 ...

  10. yb课堂之用户下单模块开发 《十四》

    开发用户下单购买视频接口 VideoOrder模块下单接口开发 VideoOrderController.java package net.ybclass.online_ybclass.control ...