我对洛谷有关于我的舆论相关解释

· · 闲话

意外阅读到了有关我的舆论文章《【杂谈】隔行如隔山:如何正确看待算法竞赛与软件工程》。感谢洛谷的大佬们对我的错误的指出。在这里,我想对有关内容作出一点解释。

详细解释

在计算机科学的浩瀚海洋中,算法竞赛与软件工程往往被视为两座遥遥相望的岛屿。

这是事实。

一直以来,关于“OIer 的代码风格烂不烂”或者“工程派是不是只会调包”的争论从未停止。然而,近期社区和网络上发生的一些现象,让我不得不重新思考这个问题。我认为,争论的核心不在于谁的技术栈更高贵,而在于对他人的领域缺乏基本的敬畏之心。

我其实还是比较支持算法竞赛这个领域的,起码这说明国家重视计算机教育。我本身也是竞赛选手(Oier),在这个竞赛过程中补足了我在算法领域上的不足。

正如一句老话所说:“任何人至少应当只在自己的专业领域内发表意见,而对于自己不懂的另一领域,应当保持谦虚、谨慎的态度。”

我承认我在这点做得不够好,在此向努力进行竞赛训练的洛谷 Oier 表示歉意。

然而,CleanIce 却在讨论区中大谈特谈软件工程术语。他从兼容性讲到 C++ 标准委员会的决策,从可移植性讲到工程规范,甚至对广大 OIer 的计算机科学素养表示鄙夷,认为自己有义务给这群“只会写算法”的小白“科普”什么是真正的编程。

我并不是认为自己有义务给广大 Oier 进行计算机科学科普,这是我随意附带的一些内容。我正常回答的问题,附加了一些工程领域的建议而已。因此,哪怕评论我的回答有些废话,我都是接受的。

另外,我自己也是 Oier,我也在竞赛领域不断努力着。我承认某些话语可能过于极端或夸张,但我绝对没有对 Oier 和竞赛领域的鄙视态度

写这篇文章,并不是要挑起 OIer 和 软件工程师 的对立。相反,优秀的 OIer 往往在进入业界后能快速掌握工程技能,而优秀的工程师也懂得算法的重要性。

问题的关键在于:上下文

  • 对 OIer 来说:不要因为自己会写线段树就看不起 CRUD,工程中的架构设计、并发控制、系统稳定性同样博大精深。

就比如说,知名的数据库 MySQL 和 PostgreSQL 中也大量用到了 AC 自动机、B+ 树等高级数据结构。软件工程的难点在于要如何将这些算法和数据结构高效且易于维护地组织起来,自然要诞生各种繁琐的代码规范。

  • 对工程派来说:请尊重算法竞赛的特殊性。这里的代码是为了 AC (Accepted) 而生,不是为了 code review 而生。

当你想要跨界发表意见时,请先问自己几个问题:

  1. 我了解这个领域的规则吗?(比如 NOI Linux 的编译器版本)
  2. 我的建议在这个场景下实用吗?(比如 std::print 能过编译吗?)
  3. 我是抱着交流的心态,还是抱着“降维打击”的傲慢?

真正的强者,从不吝啬对他人的尊重,也从不随意在自己未知的领域指手画脚。

愿我们在追求技术的道路上,少一些 CleanIce 式的傲慢,少一些“李老师”式的笑话,多一份对技术本身的敬畏。

这段话很有深意,我很钦佩作者的思维能力。事实上,当时我陷入了故意引起的“对线”之中,并没有将自己抽离出来进行以第三方视角的思考。这是我要补气的东西。

我对我曾经说过的极端和夸张话语感到抱歉,但我保证我对竞赛领域没有鄙视的态度。竞赛领域与计算机科学存在一定的差异,这是事实。而我应该以尊重的态度去对待这个差异。

同样,我对文章的这个观点表示赞同:广大 Oier 可以尝试去接触工程计算机科学的有关内容。我在讨论区的回答一般是“竞赛领域 + 工程计算机科学领域”的格式,也是想尽可能地让那些有兴趣的 Oier 看见,而不是体现自己的优越感或者是进行鄙视。

总结

  1. 我对之前错误的言论感到抱歉,并保证我没有鄙视竞赛领域的态度。
  2. 我也热爱 OI 竞赛这个领域,我自己也在这个领域进行学习,一是争取升学福利,更重要的是补足我在算法领域长期的缺陷。
  3. 希望大家持公平态度。去看看原贴,我陷入了一个被故意设计的争端而未曾自省。

升华

我将继续在洛谷平台进行竞赛训练,也不会停止编写有关工程专业计算机科学的文章。在讨论区的回答中,我将保持“竞赛领域 + 工程计算机科学”的格式,注重语境,在给出正确而合适的回答的同时,我也希望能够帮到一些对计算机科学领域感兴趣的 Oier。

我本身对此事件感到悲伤,但在恢复理智之后,我发现了我的不足。这篇杂谈是最好的点醒我的一篇文章。也请大家相信,我的出发点是善良的,我在竞赛领域没有显著成就,但是我可能能够提供一些计算机科学有关的知识给对此感兴趣的 Oier 或洛谷上不到 0.1% 的非竞赛用户。此外,我也希望能够尽自己的力量,推进信息竞赛向更专业化、科学化的方向发展,逐步融合计算机科学中一些适合竞赛领域的内容。

也请大家进行监督,并对我未来可能犯下的错误进行批评。我也希望得到大家的支持,让我看到自己的价值。

最后,让我来用两段 C++ 的“Hello World!”程序结束这篇文章吧。一段是常见竞赛风格,一段是工程开发风格。

#include <bits/stdc++.h>
using namespace std;
int main() {
    cout << "Hello World!";
    return 0;
}
import std;

auto main() -> int {
    std::println("Hello World!");
    return 0;
}

谢谢大家!