从Vibe Coding到半古法编程:构建可持续的软件开发实践
1. 从“氛围感”到“可持续性”一个开发者的反思最近几个月我发现自己陷入了一种奇特的开发状态打开编辑器戴上降噪耳机播放精心挑选的“专注歌单”在一种近乎“心流”的氛围中手指在键盘上飞舞代码行云流水般产出。这种状态在圈子里有个时髦的词叫Vibe Coding。它强调的是一种感觉、一种氛围、一种沉浸式的编码体验追求的是那一刻的创造力和生产力峰值。我一度沉迷于此觉得这就是高效开发的终极形态——直到我负责的一个中型项目进入维护期并迎来了第一次大规模需求变更。那一刻我所谓的“高效”产物变成了一团连我自己都需要花半天时间才能理清逻辑的“艺术品”。没有清晰的注释变量命名随性而为模块边界模糊那些在“氛围感”下灵光一现的复杂逻辑如今看来如同天书。我幡然醒悟追求瞬时“ vibe ”的编码就像一场绚烂但短暂的烟花无法照亮项目漫长的生命周期。真正的效率不是某个下午写了多少行酷炫的代码而是在未来的一个月、一年里你和你的队友能多快、多稳地理解、修改和扩展这些代码。这促使我开始反思并实践一种被我称为“半古法编程”的开发哲学。它不是要我们回到穿孔纸带时代而是倡导在利用现代开发工具便利性的同时有意识地回归并坚守软件开发中那些历经时间考验、朴素但至关重要的工程实践。其核心目标正是可持续开发——让代码库像一座精心规划的城市能够随着时间推移从容地容纳增长与变化而非沦为一片随时可能坍塌的“创意”废墟。2. 解构 Vibe Coding瞬时快感与长期隐患要理解为何需要转向我们得先看清 Vibe Coding 的吸引力与陷阱。这种模式之所以流行是因为它精准地击中了开发者的几个爽点。2.1 Vibe Coding 的“魔力”何在首先它极大地提升了短期的个人沉浸感与创造力。在隔绝干扰、情绪和思维都调到最佳频段时开发者确实更容易进入心流状态解决复杂问题或实现精巧功能。其次它迎合了快速交付的成就感。在敏捷、快速迭代的背景下能迅速产出可运行的功能代码带来的正反馈是即时的。最后它某种程度上是一种对过度工程化和繁琐流程的反抗。当开发者厌倦了无尽的会议、僵化的流程和为了“设计模式”而设计模式时Vibe Coding 提供了一种直接、纯粹地与问题对话的方式。2.2 当“氛围”散去暴露出的四大可持续性危机然而当项目周期拉长团队协作介入需求开始演变时纯粹依赖 Vibe Coding 的弊端便会暴露无遗。我将其总结为四大可持续性危机代码可读性危机这是最直接的问题。Vibe 状态下的思维是跳跃、发散的写出的代码往往是“思维的直接映射”缺乏对“未来读者”的关怀。晦涩的“一行流”、临时起意的缩写变量名、缺乏上下文注释的复杂算法都成为了后来的“阅读理解题”。我曾写过一个处理数据转换的链式调用当时觉得优雅无比两周后回头看花了二十分钟才重新捋清每一步在干什么。系统可维护性危机Vibe Coding 常以“快速实现功能”为首要目标容易忽视模块化、关注点分离和接口设计。代码往往高度耦合像一团理不清的毛线。当需要修改某个业务规则或替换某个底层服务时你会发现牵一发而动全身修改成本呈指数级上升。这直接违背了“对修改开放对扩展开放”的开闭原则。团队协作危机你的“ vibe ”是你的你的队友无法共享。当你的代码严重依赖个人化的、未文档化的“灵机一动”时就等于为团队设置了认知壁垒。代码评审变得困难知识无法有效传递新人上手成本极高。项目风险从技术风险转变为了“人员单点故障”风险——一旦你休假或离职相关模块就可能无人能轻易接手。技术债的隐形积累在 Vibe 的驱动下开发者容易选择“最快出活”的方案而非“最合适”或“最稳健”的方案。绕过必要的错误处理、采用即将废弃的 API、复制粘贴代码而不是抽象复用……这些决策在当下节省了几分钟却在未来埋下了一颗颗需要花费数小时甚至数天去排查的“地雷”。技术债悄无声息地累积最终会拖慢整个项目的迭代速度。注意这里并非全盘否定心流状态的价值。高效、专注的编码状态是宝贵的。问题的关键在于我们不能让“追求这种状态”成为牺牲代码长期健康度的借口也不能让编码过程完全被这种瞬时状态所主导。3. 何为“半古法编程”可持续开发的实践框架“半古法编程”是我对一系列经典工程实践的组合与强调。所谓“古法”指的是那些在《人月神话》、《代码大全》、《重构》等经典著作中被反复强调却容易被现代“快节奏”开发所忽视的原则。而“半”意味着我们并非抛弃现代利器如强大的 IDE、版本控制、CI/CD而是用这些“古法”原则来驾驭它们形成一种平衡的、可持续的开发范式。3.1 核心原则一代码首先是写给人看的这是“半古法编程”的基石。计算机能执行晦涩的代码但你的队友和未来的你需要理解清晰的代码。这意味着命名是最高形式的注释变量、函数、类的名字应该清晰地表达其意图和职责。宁可calculateMonthlyCompoundInterest长一点也不要calcMCI让人猜。我现在的原则是如果一个名字需要额外的注释来解释它是什么那就应该重命名。函数短小且只做一件事一个函数应该像一个段落只表达一个完整的、细粒度的思想。长度通常不应超过一屏20-30行。如果函数太长或者需要注释来解释它“还”做了什么就该拆分了。这极大地提升了可测试性和可复用性。注释解释“为什么”而非“是什么”代码本身应该说明“是什么”What。注释应该解释“为什么”Why——为什么选择这个算法为什么这个参数边界值如此特殊为什么这里需要绕过一个已知的库 Bug这些是代码无法自述的上下文对维护者至关重要。3.2 核心原则二设计优于修补重构是常态Vibe Coding 往往是先写代码后见结构。“半古法编程”则倡导在动手前花少量时间思考设计并在编码过程中持续重构。前期微设计不需要庞大的 UML 图但在实现一个复杂模块或功能前花 10-15 分钟在白板或笔记上勾勒一下主要的类/函数、它们的关系和数据流。这能避免你陷入代码细节后才发现整体结构走偏。拥抱重构不要害怕修改已经工作的代码。当你发现代码有坏味道如重复代码、过长的参数列表、特性依恋等或者添加新功能时发现现有结构不友好这就是重构的信号。现代 IDE 的重构工具重命名、提取方法、内联变量等非常强大配合完善的单元测试可以安全地进行。把代码库的整洁度视为一个需要持续维护的变量而不是一次性的任务。3.3 核心原则三自动化验证是安全网“古法”编程时代测试可能是手动的、滞后的。现代“半古法”则将其自动化、前置化作为开发的有机组成部分。单元测试是设计工具编写可测试的代码会自然促使你写出松耦合、高内聚的模块。测试驱动开发TDD是一种实践但即使不严格 TDD养成“实现功能后立即补充单元测试”的习惯也能为你构建一张强大的安全网。当未来修改代码时运行测试套件能给你重构的勇气并快速捕获回归错误。集成与契约测试对于模块间、服务间的交互定义清晰的接口契约并编写集成测试或契约测试。这能防止一个模块的修改无意中破坏其他依赖模块在微服务架构中尤为重要。3.4 核心原则四版本控制不只是备份Git 等工具是现代开发的基石但很多团队只用了其“备份代码”和“协同编辑”的皮毛。“半古法编程”强调将其用作项目管理与知识承载的工具。有意义的提交信息每次提交的信息应该像一句清晰的陈述句说明这次变更的意图。例如“修复用户登录时令牌过期不刷新的问题”远比“更新代码”有用。这能让git log或git blame成为理解代码演变历史的宝贵资料。分支策略与代码评审采用清晰的分支策略如 Git Flow GitHub Flow并通过 Pull Request (PR) 进行代码评审。PR 不仅是找 Bug更是知识共享和设计讨论的场合。评审时除了看正确性更要关注可读性、一致性和是否遵循了团队约定。这是打破“个人 vibe 壁垒”、提升代码集体所有权的最佳实践。4. 从 Vibe 到可持续我的日常实践转变理念需要落地。以下是我个人工作流中几个关键的转变它们帮助我在保持一定开发节奏的同时显著提升了产出的可持续性。4.1 开发节奏的调整从“马拉松式心流”到“番茄钟式循环”我不再强求或等待长达数小时的“超级心流”状态。取而代之的是采用类似“番茄工作法”的节奏但内容更具结构性25分钟专注编码设定一个明确的、细粒度的目标例如“实现用户注册服务的输入验证逻辑”。5分钟微观复盘与提交这5分钟至关重要。快速回顾刚才写的代码命名是否清晰函数是否过长有没有明显的“坏味道”进行快速的微观重构重命名、提取函数等。然后立即将这部分工作成果提交到本地分支并编写清晰的提交信息。这相当于为你的思维进度设置了“保存点”也让代码变更历史更清晰。循环进行每完成2-3个这样的周期可以有一个稍长的休息并规划下一个稍大一点的任务模块。这种节奏强迫我进行“即时重构”和“即时归档”避免了代码在本地堆积成一团难以分割的“泥球”。4.2 工具链的辅助配置让“古法”更轻松现代工具可以很好地服务于“古法”原则关键是如何配置和使用它们。IDE 静态分析插件配置并认真对待 ESLint、SonarLint、Checkstyle 等工具。将它们设置为在保存时自动运行并将规则调至“严格”模式。让工具自动帮你捕捉潜在的 Bug、代码风格问题和复杂度违规。这不是限制创造力而是将你的脑力从低级的格式检查中解放出来专注于逻辑本身。代码模板与片段为常见的、需要规范化的代码结构如新的 React 组件、Spring Boot 控制器、单元测试类创建代码模板。这能保证团队代码结构的一致性也减少了重复性劳动。“写作”模式下的编辑器有时我会特意将 IDE 的主题切换到一个更接近写作软件的、高对比度、字体舒适的“写作模式”并隐藏所有非必要的工具窗口。这提醒我此刻的首要任务是“写出清晰易懂的文本代码”而不是调试或运行。4.3 团队约定的建立共享的“可持续”文化可持续开发不能只靠个人。在团队中推行一些简单的约定能产生巨大的杠杆效应。定义团队的“代码卫生”标准在项目启动或迭代初期花一点时间共同讨论并确定一些基本规则。例如函数行数上限、单文件行数上限、必须写的注释类型如公共 API、复杂算法、禁止的编程模式等。将这些规则写入项目的README或CONTRIBUTING.md并配置到共享的 lint 规则中。推行“童子军规则”“每次签入代码时都让代码库比你来时更干净一点。”这意味着即使你只是修改一个 Bug如果顺路看到了一个拼写错误、一个可以重命名的变量、一小段重复代码也顺手将其修复。这种集体负责的文化能防止代码库在无人注意时缓慢腐化。定期举办“代码考古”或“重构道场”每隔一段时间如每两周团队可以一起花一小时随机挑选一个近期修改的或比较复杂的模块进行集体阅读和讨论。目的不是批评而是共同学习这里的设计是否合理有没有更好的表达方式这种活动能极大提升团队的代码审美和设计能力。5. 面对现实挑战在 deadline 压力下如何坚持最大的质疑往往是“项目时间这么紧哪有时间搞这些‘花架子’” 我的经验是这不是“花架子”与“赶工”的二选一而是一种投资思维和风险管理。5.1 短期“慢”与长期“快”的辩证法在单个功能点上遵循“半古法”可能比 Vibe Coding 多花 20% 的时间用于思考设计、命名、写测试、重构。但是这个功能在整个生命周期内被阅读、调试、修改、扩展所花费的总时间会远低于那团“ vibe 代码”。当第一个需求变更到来时节省的时间就可能追平甚至反超。这是一个典型的复利效应前期微小的、持续的健康投入会在后期带来巨大的时间收益和风险降低。5.2 优先级策略关键模块必须“古法”胶水代码可“半 vibe”并非所有代码都需要同等程度的“古法”对待。我们需要区分核心复杂度与偶然复杂度。核心业务逻辑、基础架构、公共组件这些是系统的骨架和心脏会被频繁阅读和修改。对这些部分必须严格执行“半古法”投入时间进行精心设计、充分测试和清晰文档化。这里的“慢”是为了整个系统的“稳”。一次性的脚本、简单的数据转换、临时的胶水代码对于这些生命周期短、复杂度低的代码可以适当放宽标准采用更接近 Vibe 的方式快速完成。但即使如此也应保持最低限度的可读性清晰的命名和基本的注释因为你无法百分百确定它未来不会被用到。5.3 沟通价值向非技术利益相关者解释当面临时间压力时开发者需要有能力向项目经理或产品经理解释技术债的代价。用他们能理解的语言“如果我们现在用这种‘走捷径’的方式实现它确实能提前两天上线。但根据经验下个季度当我们需要在此基础上增加类似功能时修改成本会增加至少五天并且引入 Bug 的风险会提高三成。我们现在多花一天半时间把基础打扎实可以为后续所有相关功能节省大量时间总体来看是更快的。” 将技术决策转化为商业风险和效率的讨论更容易获得理解与支持。6. 可持续性带来的真实收益超越代码本身坚持“半古法编程”一段时间后我收获的远不止一个更整洁的代码库。它带来了一系列连锁的积极效应。个人压力的降低最大的感受是“心安”。我不再害怕接手自己两个月前写的代码也不再恐惧进行大的重构。因为我知道有测试套件作为安全网有清晰的代码结构作为地图。这种可控感极大地减少了技术工作带来的焦虑。团队效率的实质提升新同事 onboarding 的速度明显加快。他们可以通过清晰的代码和提交历史自学提出更有深度的问题。代码评审变得高效讨论更多地集中在设计层面而非语法细节。知识不再淤积在个人脑中而是在代码和文档中流动起来。应对变化的从容当新的业务需求或技术变更到来时我们能够更准确、更快速地评估影响范围和工作量。修改代码更像是在结构良好的乐高积木上添加或替换模块而不是在豆腐上雕刻。这种灵活性是业务团队最看重的技术价值之一。职业能力的长期投资持续实践这些“古法”是对你自身设计能力、工程思维和代码审美最扎实的训练。它让你从一个“能写出运行代码的程序员”成长为一个“能写出经得起时间考验的软件系统的工程师”。这种能力在任何团队、任何技术栈下都是稀缺且宝贵的。7. 找到你的平衡点不是抛弃而是融合最后需要澄清的是我并非主张彻底抛弃 Vibe Coding 带来的心流和创造力。相反我认为“半古法编程”是为这种创造力构建一个坚固、可扩展的舞台而不是让它在流沙上表演。我的建议是将你的开发过程视为一种有节奏的舞蹈在探索与设计阶段可以尽情发挥 vibe在白板、草稿代码中天马行空寻找解决方案。一旦核心思路确定进入实现与构建阶段就要切换到“半古法”模式像一位严谨的工匠将创意转化为坚实、可维护的代码实体。在调试与优化阶段 again可能需要 vibe 来灵感迸发找到那个诡异的 Bug 或绝妙的优化点。关键在于要有意识地在这两种模式间切换并清醒地认识到每种模式的适用场景和潜在代价。可持续的开发不是压抑创造的激情而是用工程的纪律为这份激情护航让它不仅能点亮瞬间更能温暖项目漫长的旅程。对我而言从沉迷 vibe 到拥抱“半古法”是一次从追求编码的“快感”到追求软件的“韧性”的成长。这条路值得每一个希望自己的代码拥有更长生命周期的开发者去尝试和探索。

相关新闻

eMMC、UFS、SSD到底怎么选?

eMMC、UFS、SSD到底怎么选?

引言在嵌入式系统设计过程中,工程师常面临eMMC、UFS与SSD之间的选型困惑。本文从底层架构出发,系统梳理三种存储方案的技术差异与应用场景,为硬件选型提供参考。一、存储芯片的通用架构不论是eMMC、UFS还是SSD,其核心均由闪存颗粒…

2026/10/14 1:15:28 阅读更多 →
解密网络资源捕获:零门槛掌握浏览器智能嗅探实战指南

解密网络资源捕获:零门槛掌握浏览器智能嗅探实战指南

解密网络资源捕获:零门槛掌握浏览器智能嗅探实战指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾在浏览网页时&#xff0c…

2026/10/14 20:53:09 阅读更多 →
如何为孩子选择一所既能快乐成长又能顺利衔接小学的幼儿园?

如何为孩子选择一所既能快乐成长又能顺利衔接小学的幼儿园?

本文核心观点:尊重每个孩子、赋能无限可能,是《国营北京市北郊农场幼儿园》六十余年坚持的办园底色。该园通过自主游戏、农耕主题课程、奥尔夫音乐、跑酷篮球、阅读识字及思维课程,配合科学营养配餐与细致生活护理,帮助孩子在快乐…

2026/10/12 10:19:00 阅读更多 →

最新新闻

Dubbo服务注册与暴露全流程解析:从Spring容器启动到注册中心

Dubbo服务注册与暴露全流程解析:从Spring容器启动到注册中心

1. 从一次线上故障说起&#xff1a;为什么要搞清楚服务注册与暴露很多同学用 Dubbo 做微服务&#xff0c;配置文件里写个<dubbo:service>或者加个DubboService注解&#xff0c;服务就能被调用了&#xff0c;至于背后发生了什么&#xff0c;基本靠“框架自动搞定”这句话糊…

2026/10/14 20:52:20 阅读更多 →
从零搭建私有文档问答:向量检索与RAG实战指南

从零搭建私有文档问答:向量检索与RAG实战指南

1. 从零搭建私有文档问答&#xff1a;为什么向量检索是绕不开的那道坎很多人第一次接触大模型应用&#xff0c;脑子里想的都是"我把文档丢给模型&#xff0c;它就能回答我的问题"。真动手才发现&#xff0c;模型根本读不到你的私有文档——它只认训练时见过的东西。于…

2026/10/14 20:52:20 阅读更多 →
Mahout推荐系统实训:从协同过滤原理到可调试工程实践

Mahout推荐系统实训:从协同过滤原理到可调试工程实践

1. 这不是“学个框架”那么简单&#xff1a;Mohout推荐引擎在真实实训场景中的定位与价值你点开这个标题&#xff0c;大概率是刚收到实训任务通知&#xff0c;或者正对着教学平台里“创新实训&#xff08;19&#xff09;”这行字发呆。别急着去GitHub搜安装命令——先搞清楚一件…

2026/10/14 20:52:20 阅读更多 →
LDA主题模型实战指南:从原理到可解释文本分析

LDA主题模型实战指南:从原理到可解释文本分析

1. 这不是“黑箱”&#xff0c;而是文本挖掘的基石级工具&#xff1a;LDA到底在解决什么问题&#xff1f;你可能已经听过LDA——Latent Dirichlet Allocation&#xff0c;中文常译作“潜在狄利克雷分布”。但别被这串数学味十足的名字吓退。它既不是高不可攀的理论模型&#xf…

2026/10/14 20:52:20 阅读更多 →
医疗医药AI+BI小范围试点落地路径分享

医疗医药AI+BI小范围试点落地路径分享

导语 医疗医药行业数智化转型持续推进&#xff0c;AIBI成为企业优化经营决策、提升业务效率的核心抓手&#xff0c;但不少企业在落地时容易陷入“盲目铺摊子却无法验证价值”的困境&#xff0c;小范围试点是控制项目风险、验证业务价值的关键起步阶段。医疗医药行业有合规要求高…

2026/10/14 20:52:20 阅读更多 →
5G信令流程解析实战:从NAS、RRC到NGAP的日志分析与排障指南

5G信令流程解析实战:从NAS、RRC到NGAP的日志分析与排障指南

简介&#xff1a;《5G信令流程解析信息介绍及学习技巧》面向5G通信初学者及相关从业者&#xff0c;集中讲解信令流程中的关键概念与学习方法&#xff0c;帮助读者理解用户终端、基站、核心网等通信实体及其交互机制。文档从背景知识出发&#xff0c;阐述5G相对前代在速率、延迟…

2026/10/14 20:51:17 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起&#xff1a;它到底想解决什么问题第一次看到"AnyPS5"这个标题&#xff0c;我脑子里冒出来的第一个念头是&#xff1a;这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述&#xff1a;Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师&#xff0c;我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性&#xff0c;实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景&#xff0c;也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间&#xff0c;确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中&#xff0c;这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →