如果你的代码悲剧了,你的日志能帮你成为福尔摩斯吗?

 作者:Henrik Warne

翻译:童角大王

所有程序都需要一些记录日志的方法,这样我们才可以观察它的运作状况。当程序出现错误时,这样的未雨绸缪就非常重要了。

好程序员和坏程序员之间的一个不同点在于,优秀的程序员会记录有用的日志以及增加方便调试程序的工具

当程序工作如常,通常无法体现出日志的重要性。可是一旦程序出错,或者得到了错误结果,优秀的程序员就会脱颖而出。

案例1

一个测试人员跑来向我报告一个测试用例失败,我们一起检查日志,发现问题似乎出在另一个模块之中。一个本该返回数组的函数却只返回了null值。

当我们把嫌疑模块的日志打开,再次运行测试用例,却没有发现新的线索——是因为传递了错误的参数,还是外部系统的运行失败,或是一个被引用的模块出现错误?或者是什么别的原因?

我们去询问这段代码的责任人,他会回答到:“奥,那我们得加上日志,弄一个调试版本,再部署一次,看看到底是怎么回事。

这是大错特错的,对于已经部署到生产环境的程序,增加,部署调试版本可能是一件工程量浩大的工作!代码需要包含足够的日志信息,当调试模式打开时,就可以通过日志来判断为什么出错了。

案例2

我曾经开发过一个软件,它可以根据你手机目前所处的位置以及接收者运营商的不同,帮助你找到发送短信的最短(代价最低)路径。

有些时候运营商会限制或推广一些传输路径,在这潜在的千百条路径中,我们的系统可以考虑到这些限制,并帮你找到最便宜的那一条。

假设有一条本该使用路径B的短信意外地通过路径A传输了,是什么原因导致的呢?如果没有其他的日志信息(除了“嘿兄弟,路径A被使用了”),我们就只能面对着上百种可能的路径,不同的花销,特别的限制和复杂的算法,傻眼了。

而在我们的产品实现中,会以花费的多寡为顺序,将可能路径都记录在日志之中。因为各种限制的存在,有些路径会被筛选掉,这些路径以及被筛选的原因也会被记录在日志中。根据算法所接受的输入,以及在日志中列出的步骤,你可以更容易地看出为什么一条路径会被选中。

那么问题来了, 为什么有些程序员不写包含足够日志的代码呢?我觉得有三条原因:

1. 可能没有意识到代码总是会出错,我相信很多程序员都需要经历一些事情才会认清这个现实。

2.  自己没有做彻底的测试,如果你做过的话,你可以确定代码在哪些场景成功,在哪些场景“优雅地”失败。在这些场景,你自然会添加有效的调试日志。如果你没有做足够的测试,你也不大可能会添加日志。

3. 许多程序员还没有在生产环境中给代码排错的经历,如果生产环境有问题,而日志却不能给你提供线索,这样的血与泪会激励你以后一定要乖乖写日志。

当然,在不少情况下,就算拥有记录良好的日志信息,你也无法彻底了解为啥事情失败了。也许你还是需要部署一个新的调试版本。但是如果你的调试日志足够好,至少可以帮你缩小问题的范围。

所以大兄弟,你准备好了吗?如果你的代码悲剧了,你的日志能助你成为名侦探吗?欢迎里留言讨论!

原文地址:

https://henrikwarne.com/2013/05/05/great-programmers-write-debuggable-code/

640?wx_fmt=gif


码农翻身公众号开放投稿,可能是全网最高片酬:

用故事讲技术 ,稿费1000

技术/职场/感悟/面试等,稿费700

翻译类文章,每千字200

联系方式:onlyliuxin97(微信)

详情猛戳: 可能是全网最高片酬,速来!

往期精彩回顾

我是一个线程

我是一个Java Class

面向对象圣经

函数式编程圣经

TCP/IP之大明邮差

CPU阿甘

我是一个网卡

我是一个路由器

一个故事讲完HTTPs

编程语言的巅峰

Java:一个帝国的诞生

JavaScript:一个屌丝的逆袭

负载均衡的原理

阅读源码的三种境界

640?wx_fmt=jpeg

这个是完整源码 python FastAPI实现 vue 深度学习 大模型 【深度学习毕业设计】基于BERT的电商商品评论情感分析系统(PyTorch+FastAPI+Vue3) 模型微调训练 深度学习毕业设计 python课程设计 完整版 源码+sql脚本+论文 完整版 数据库是mysql 随着电子商务规模持续扩大,商品评论已成为消费者决策与商家改进产品的重要依据。海量评论文本具有口语化、领域词汇密集、正负情感交织等特点,传统基于词典或浅层机器学习的情感分析方法难以充分刻画上下文语义,分类精度受到限制。针对上述问题,本文设计并实现了一套基于 BERT 的电商商品评论情感分析系统,完成从评论采集、模型推理、结果存储到可视化分析的闭环。 系统采用前后端分离架构。后端以 Python 语言和 FastAPI 框架构建 RESTful 接口,使用 SQLAlchemy 访问 MySQL 8 数据库 db_bert_sentiment,核心推理模块基于 PyTorch 与 Transformers 加载中文 BERT 微调模型 BertForSequenceClassification,对评论进行 1 至 5 星五分类,并映射为正面、中性、负面三类情感;当微调模型文件缺失时自动回退到电商情感词典规则引擎,保证系统可用性。前端采用 Vue3、Vite、Element Plus、Pinia 与 ECharts 实现管理端界面,支持单条实时分析、CSV 批量导入、评论维护、统计分析、模型管理、个人中心和操作日志等功能。 在数据库设计方面,系统围绕管理员、评论、分析任务、模型信息、情感关键词和操作日志六类实体建立概念模型,给出独立的实体属性图与实体间关系图,并以表格形式详细列出各表字段名称、类型、长度、是否为空及备注。测试表明,系统能够稳定完成登录鉴权、情感推理、批量任务与多维图表展示,B
内容概要:本文提出了一种基于角蜥蜴优化算法(Harris Hawks Optimization-inspired Lizard Search Algorithm, HLOA)优化BP神经网络的风电功率预测模型,旨在解决传统BP神经网络在风电功率预测中易陷入局部最优、收敛速度慢、预测精度不高等问题。通过HLOA算法对BP网络的初始权重和阈值进行全局优化,提升了模型的泛化能力与训练效率。研究在Matlab平台上完成算法实现,并采用真实风电场数据进行实验验证,结果表明,相较于标准BP及其他优化算法(如GA、PSO)优化的模型,HLOA-BP模型在均方根误差(RMSE)、平均绝对误差(MAE)等关键评价指标上表现更优,具有更强的预测稳定性和准确性。该方法为可再生能源领域的时间序列预测提供了有效的技术路径与实践参考。; 适合人群:具备机器学习、智能优化算法及电力系统基础知识的研究生、科研人员以及从事新能源预测、电力调度等相关工作的工程技术人员。; 使用场景及目标:①提升风电功率预测精度,支撑电网安全稳定运行与能源调度决策;②学习并掌握智能优化算法与神经网络融合建模的方法论;③开展基于Matlab的仿真实验、算法对比与性能评估;④拓展应用于光伏发电、负荷预测等其他非线性时间序列预测任务。; 阅读建议:建议结合提供的Matlab代码深入实践,重点理解HLOA算法的搜索机制及其对BP网络参数的优化过程,通过更换数据集、调整参数配置等方式进行消融实验与对比分析,全面掌握模型构建与调优技巧,进而将其迁移至实际工程项目中应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值