<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PIEMM's Blog</title><link>https://blog.piemm.net/</link><description>Recent content on PIEMM's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Tue, 13 Oct 2026 15:40:42 +0800</lastBuildDate><atom:link href="https://blog.piemm.net/index.xml" rel="self" type="application/rss+xml"/><item><title>两次挫折之后</title><link>https://blog.piemm.net/posts/two-setbacks/</link><pubDate>Mon, 12 Oct 2026 21:56:00 +0800</pubDate><guid>https://blog.piemm.net/posts/two-setbacks/</guid><description>&lt;p&gt;这篇文章实际写于今天凌晨一点。&lt;/p&gt;&#10;&lt;p&gt;博客网站初步搭建完成后，我就在这个时间上传了这篇文章。&lt;/p&gt;&#10;&lt;p&gt;回望自己上大学以来经历的两次重大挫折，我开始重新审视自己的热爱、野心，以及未来真正想走的路。&lt;/p&gt;&#10;&lt;p&gt;第一次是在大一上学期。&lt;/p&gt;&#10;&lt;p&gt;那时，我开始接触股票，拿着父母资助的钱、自己的生活费，甚至借助同学的融资，带着几千块钱入市。我天真地以为，凭借自己的数学基础和对数学模型的兴趣，或许就能在市场中小赚一笔。我曾幻想着有一天能够成为一名 Quant，通过数学、统计学和算法建立交易模型，在金融市场中找到属于自己的优势。&lt;/p&gt;&#10;&lt;p&gt;但现实很快给了我沉重的一击。市场并不会因为一个人懂一些数学，就向他展示额外的善意。那些曾经让我感到兴奋的想法，在真实的市场面前显得稚嫩而脆弱。&lt;/p&gt;&#10;&lt;p&gt;第二次是在昨天。&lt;/p&gt;&#10;&lt;p&gt;这半个月，我投入了大量时间学习网络安全。我喜欢数论，喜欢密码学，也曾幻想着有一天能够逆向一个程序，分析复杂的加密算法，发现软件中的漏洞，写出属于自己的工具，成为一名真正的 Hacker。&lt;/p&gt;&#10;&lt;p&gt;这些东西在我看来很酷，也充满了神秘感。&lt;/p&gt;&#10;&lt;p&gt;然而，当我真正开始接触这个领域，看到学长和同辈们展现出的技术实力时，我再次感受到了自己的不足。那些曾经觉得自己或许能够很快掌握的东西，背后竟然有着如此深厚的知识积累和技术门槛。&lt;/p&gt;&#10;&lt;p&gt;两次经历，两次挫折。&lt;/p&gt;&#10;&lt;p&gt;我开始意识到，自己似乎总是想做很多事情。Quant、Hacker，这些身份在我眼中不仅代表着技术实力，也带有一种特殊的吸引力。我渴望成为这样的人，渴望证明自己有能力进入那些看起来高深、神秘，甚至有些遥不可及的领域。&lt;/p&gt;&#10;&lt;p&gt;但仔细想来，这种渴望有时反而让我迷失了方向。&lt;/p&gt;&#10;&lt;p&gt;我究竟是真的热爱建立数学模型、研究金融市场，还是仅仅向往 Quant 这个身份？我究竟是真的享受逆向分析、密码学研究的过程，还是仅仅觉得破解程序、发现漏洞的自己很酷？&lt;/p&gt;&#10;&lt;p&gt;如果我只是想通过某个身份证明自己，那么当我遇到更强的人、发现自己的不足时，挫败感就很容易淹没最初的兴趣。&lt;/p&gt;&#10;&lt;p&gt;我可能会因为暂时赚不到钱而怀疑数学的价值，也可能因为技术不如别人而怀疑自己是否适合编程。但实际上，这些事情并不能简单地画上等号。&lt;/p&gt;&#10;&lt;p&gt;一次投资的失败，不意味着数学建模没有价值；一次竞赛中的受挫，也不意味着自己不适合研究安全技术。&lt;/p&gt;&#10;&lt;p&gt;真正值得反思的，或许不是自己为什么没有迅速成为高手，而是自己为什么总希望迅速成为高手。&lt;/p&gt;&#10;&lt;p&gt;我喜欢数学，喜欢编程，也喜欢那些需要耐心、推理和创造力才能解决的复杂问题。相比于一个光鲜的身份，我或许更应该关注那些让我愿意长时间沉浸其中、即使没有即时回报也想继续钻研的东西。&lt;/p&gt;&#10;&lt;p&gt;我不必现在就决定自己将来一定要成为 Quant，也不必急着证明自己能够成为 Hacker。&lt;/p&gt;&#10;&lt;p&gt;我可以继续学习数学，深入算法，研究计算机底层原理，也可以逐步接触人工智能、量化金融、网络安全。未来，我可能会在其中某个领域找到真正愿意长期深耕的方向，也可能在不断探索的过程中发现自己此前从未想过的可能性。&lt;/p&gt;&#10;&lt;p&gt;我不需要因为一时的冲动，就把某个领域认定为自己的人生目标；也不需要因为暂时落后于别人，就急着否定自己。&lt;/p&gt;&#10;&lt;p&gt;当然，我知道，未来的人生中，我大概还会经历无数次失败。或许会有努力很久却没有结果的时候，也会有发现自己与优秀的人存在巨大差距的时候。但我想起一句话：&lt;/p&gt;&#10;&#13;&#10; &lt;blockquote&gt;&#13;&#10; &lt;p&gt;成功者失败的次数，可能比失败者尝试的次数还要多。&lt;/p&gt;&#10;&#13;&#10; &lt;/blockquote&gt;&#13;&#10;&lt;p&gt;失败并不值得美化，也不意味着只要坚持就一定能够成功。但如果每次失败都能让我更清楚地认识自己，修正自己的方法，理解一个领域真正的难度，那么这些经历至少不会毫无意义。&lt;/p&gt;&#10;&lt;p&gt;今后，我依然可能接触量化交易，也依然可能深入网络安全。这些兴趣没有必要因为两次挫折就被放弃。但下一次，我希望自己是因为真正想弄懂其中的原理，想解决其中的问题，才选择投入时间，而不是因为某个身份足够炫酷，或者我急于向别人证明自己的能力。&lt;/p&gt;&#10;&lt;p&gt;我想去学习数学背后的逻辑，研究算法的设计思想，理解程序运行的底层机制，探索人工智能的能力边界。我想知道一个复杂的问题为什么难，又能否通过自己的思考，把它一点点拆解、分析，最终找到解决方案。&lt;/p&gt;&#10;&lt;p&gt;至于最终能走多远，不必急于给出答案。&lt;/p&gt;&#10;&lt;p&gt;尤其是在今天，人工智能的发展已经深刻改变了知识获取、编程和问题解决的方式。我们或许不必再像过去一样，把掌握某种技术当作不可逾越的门槛。但这也不意味着我们可以跳过基础，更不意味着努力与积累已经失去意义。&lt;/p&gt;&#10;&lt;p&gt;恰恰相反，当工具越来越强大时，什么值得研究、什么值得投入，以及自己究竟想解决什么问题，可能变得更加重要。&lt;/p&gt;&#10;&lt;p&gt;我不需要因为 AI 越来越强大而焦虑，也不应该因为 AI 能够完成很多任务，就放弃亲自理解问题的乐趣。&lt;/p&gt;&#10;&lt;p&gt;我仍然可以学习数学、钻研算法、探索技术的底层，在一次次实践中建立自己的理解。&lt;/p&gt;&#10;&lt;p&gt;我希望自己以后做一件事，是因为我真的想弄懂它，而不是因为做成这件事之后，我会成为一个什么样的人。&lt;/p&gt;&#10;&lt;p&gt;保持稳定的心态，接受自己的不足，尊重技术积累的规律，不因暂时的落后而自我否定，也不因一时的兴奋而盲目投入。&lt;/p&gt;&#10;&lt;p&gt;大胆追求自己的热爱，但不必急着向世界证明什么。&lt;/p&gt;&#10;&lt;p&gt;毕竟，我还年轻。&lt;/p&gt;&#10;&lt;p&gt;还有很多东西值得学习，还有很多领域值得探索，还有很长的路可以慢慢走。&lt;/p&gt;&#10;&lt;p&gt;比起现在就决定自己要成为谁，我更希望自己能够在未来的日子里，逐渐成为一个真正懂得自己为什么而学习、为什么而探索的人。&lt;/p&gt;</description></item><item><title>开站记</title><link>https://blog.piemm.net/posts/site-launch/</link><pubDate>Mon, 12 Oct 2026 21:08:00 +0800</pubDate><guid>https://blog.piemm.net/posts/site-launch/</guid><description>&lt;p&gt;先说说这个站打算如何运转。&lt;/p&gt;&#10;&lt;p&gt;它的前身，其实只是一堆空目录。&lt;/p&gt;&#10;&lt;h2 id="拆掉栏目"&gt;&lt;a href="#%e6%8b%86%e6%8e%89%e6%a0%8f%e7%9b%ae" class="header-anchor"&gt;&lt;/a&gt;拆掉栏目&#13;&#10;&lt;/h2&gt;&lt;p&gt;搭站之初，我规划了很多方向：算法竞赛、数学、英语、计算机系统、金融科技。&lt;/p&gt;&#10;&lt;p&gt;每个方向建立一个目录，再配上一页说明，写清楚以后这里会记录什么。&lt;/p&gt;&#10;&lt;p&gt;规划完成后，真正放进去的内容是：&lt;/p&gt;&#10;&lt;p&gt;零。&lt;/p&gt;&#10;&lt;p&gt;原因其实很简单：&lt;strong&gt;空目录不会自己长出文章。&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;它只会在每一次打开编辑器的时候，让你先思考一个问题——这篇文章到底应该放在哪里？&lt;/p&gt;&#10;&lt;p&gt;起初，我做得最多的事情，是让这个站「看起来像一个博客」：挑选主题、调整配色、添加粒子背景、接入播放器。&lt;/p&gt;&#10;&lt;p&gt;这些事情修改一行，刷新一下，就能立刻看到变化；而写文章不一样。&lt;/p&gt;&#10;&lt;p&gt;写完一篇文章，需要隔一段时间重新阅读，删掉几处自己都无法说服自己的推论，修改几遍，才敢真正发布出去。&lt;/p&gt;&#10;&lt;p&gt;慢慢发现，搭一个博客最难的部分，从来不是把网站搭起来，而是写下第一句话。&lt;/p&gt;&#10;&lt;p&gt;所以现在，我把所有栏目都拆掉了。&lt;/p&gt;&#10;&lt;p&gt;这里暂时只有一个地方存放文章：想到什么，就写什么，不提前分类。&lt;/p&gt;&#10;&lt;p&gt;名字也还没有确定。既然现在还没有足够多的内容，那也没有必要急着给它取一个精准的名字。等文章慢慢积累，相似的东西自然会聚集在一起，到那个时候，再建立目录也不迟。&lt;/p&gt;&#10;&lt;h2 id="会写什么"&gt;&lt;a href="#%e4%bc%9a%e5%86%99%e4%bb%80%e4%b9%88" class="header-anchor"&gt;&lt;/a&gt;会写什么&#13;&#10;&lt;/h2&gt;&lt;p&gt;大概会涉及以下几个方向：&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;编程&lt;/strong&gt;：算法竞赛需要 C++，理解计算机底层原理需要 C，金融分析和数据处理离不开 Python。除此之外，我也对区块链方向比较感兴趣，未来可能会学习并记录一些 Rust 相关内容。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;数学&lt;/strong&gt;：出于对数学本身的热爱，这里可能会记录一些大学数学知识、统计建模、密码学算法，以及一些觉得有意思的问题。数学不只是考试中的公式，也可以成为理解世界的一种方式。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;竞赛&lt;/strong&gt;：目前主要在准备算法竞赛和数学竞赛。因此，一些算法、数学知识点，以及刷题过程中产生的思考，也会整理到这里，希望能够和更多人交流。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;专业&lt;/strong&gt;：作为一名金融科技专业的学生，自然不能忘记自己的专业学习。课程内容、项目经历，以及一些个人理解，也会在这里留下记录。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;考研&lt;/strong&gt;：希望未来能够继续深入学习计算机技术，因此计划跨考计算机 408。平时学习计算机相关知识的过程，也会记录下来。&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;语言&lt;/strong&gt;：这一部分不会占太大比重。可能会记录一些专业术语、英文表达，或者偶尔出现的一些感想。&lt;/p&gt;&#10;&lt;p&gt;除此之外，这里也不会限制主题。&lt;/p&gt;&#10;&lt;p&gt;可能是一道突然想通的题，也可能是一个深夜冒出来的奇怪想法。可能是一次失败后的反思，也可能只是某个瞬间觉得“这个东西挺有意思”，于是想把它记下来。&lt;/p&gt;&#10;&lt;p&gt;博客不一定只记录最终的答案，也可以记录寻找答案的过程。&lt;/p&gt;&#10;&lt;p&gt;这里会留下成长中的尝试、困惑、失败，以及一些慢慢想明白的事情。&lt;/p&gt;&#10;&lt;p&gt;不设边界。&lt;/p&gt;&#10;&lt;h2 id="一条约定"&gt;&lt;a href="#%e4%b8%80%e6%9d%a1%e7%ba%a6%e5%ae%9a" class="header-anchor"&gt;&lt;/a&gt;一条约定&#13;&#10;&lt;/h2&gt;&lt;p&gt;正文使用中文。&lt;/p&gt;&#10;&lt;p&gt;但专业术语保留英文原词。&lt;/p&gt;&#10;&lt;p&gt;这并不是一种折中，只是因为很多技术名词存在不同的中文译法，而英文原词往往更加准确，也更接近实际使用环境。&lt;/p&gt;&#10;&lt;h2 id="收尾"&gt;&lt;a href="#%e6%94%b6%e5%b0%be" class="header-anchor"&gt;&lt;/a&gt;收尾&#13;&#10;&lt;/h2&gt;&lt;p&gt;一个空的目录不算开始，第一行文字才算。&lt;/p&gt;&#10;</description></item><item><title>重新理解编程语言</title><link>https://blog.piemm.net/posts/programming/programming-languages/</link><pubDate>Tue, 13 Oct 2026 15:40:42 +0800</pubDate><guid>https://blog.piemm.net/posts/programming/programming-languages/</guid><description>&lt;p&gt;先讲讲自己的编程经历吧。&lt;/p&gt;&#10;&lt;p&gt;我最早接触编程是在初中的时候，当时因为参加竞赛，开始了 C++ 的学习。只可惜那时候只是参加了一些当地组织的比赛，并没有继续走到 NOIP 之类的竞赛舞台，现在想想也算是学生时代的一个小遗憾吧。（写到这里又开始感伤了哈哈）不过真正让我喜欢上编程的，其实并不是比赛本身，而是在第一次写出程序，第一次让计算机按照自己的想法解决一个问题的时候，那种很特别的感觉。我本身比较喜欢数学，也喜欢敲键盘，可能正是因为这两个原因，在写出第一个程序之后，我慢慢就喜欢上了编程。&lt;/p&gt;&#10;&lt;p&gt;很多人可能会觉得，会写代码就代表计算机水平很高，但其实并不是这样。我觉得自己就是一个比较典型的例子，虽然平时写代码不少，但距离真正意义上的计算机能力，还有很长的一段路。现实中的计算机领域，更多是工程实践、系统设计、软件架构等内容。而算法更多体现的是一个人的逻辑能力、抽象能力和解决问题的能力，这也是为什么高中阶段可能会看到一些数竞转信竞，或者数信双修的同学，因为两者在底层思维上确实有不少相通的地方。&lt;/p&gt;&#10;&lt;p&gt;高中时期，因为课业压力增加，我自然也不可能一直保持编程学习，只是在暑假或者一些空闲时间，零零散散写过一些基础代码。高考结束之后，我重新开始了编程学习之路，当时又接触了一些 C 和 Python。不过可能是因为 C++ 用习惯了吧，我其实并没有真正大量使用这两门语言。学完基本语法之后，更多时候还是继续使用 C++ 解决问题，甚至后来也逐渐接触了一些 vibecoding。所以现在回头看，虽然我知道 C 和 Python 的语法，但真正让我用它们完成一些复杂任务，反而没有 C++ 那么熟练。&lt;/p&gt;&#10;&lt;p&gt;后来，我慢慢接触到了区块链。这是我目前比较感兴趣的一个方向。如果未来只能选择一种技术改变金融领域，我大概率还是会选择区块链。关于这个方向，我之后也会单独写一篇文章，聊聊自己对区块链的一些理解。接触区块链之后，再加上自己对 C++ 一些特点的重新认识，我开始了解另一门比较新的语言——Rust。Rust 是我目前比较看好的一门语言，对它的一些描述是它试图在性能、安全和现代开发体验之间寻找新的平衡，这也是它吸引我的地方。当然，还有很多语言也值得学习，Java、JavaScript、Go、Swift、Lean、Solidity 等语言，都在自己的领域发挥着重要作用，只是受到发展方向、学习成本以及语言自身特点的影响，目前暂时没有深入研究。&lt;/p&gt;&#10;&lt;p&gt;介绍完自己的编程经历后，我想说的是：编程语言其实没有绝对的优劣。不同语言诞生于不同的背景，也适用于不同的问题。它们更像是工具箱中的不同工具，没有必要追求掌握所有工具，而是在面对问题的时候，知道应该选择什么工具，以及为什么选择它。&lt;/p&gt;&#10;&lt;h2 id="我的起跑线"&gt;&lt;a href="#%e6%88%91%e7%9a%84%e8%b5%b7%e8%b7%91%e7%ba%bf" class="header-anchor"&gt;&lt;/a&gt;我的起跑线&#13;&#10;&lt;/h2&gt;&lt;p&gt;在真正开始重新认识 C 和 Python 之前，我觉得有必要先回顾一下自己的起点。&#10;我的编程经历主要从 C++ 开始，而且很大程度上来自算法竞赛。&#10;不过这里需要说明一下，我熟悉的 C++ 其实并不是完整意义上的 C++。相比于工程开发中涉及的大量内容，我接触最多的还是竞赛中的那一套：STL、数据结构、算法模板，以及如何快速把一个想法转化成代码。&lt;/p&gt;&#10;&lt;p&gt;比如数组，我习惯使用：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;需要排序的时候：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;需要记录一些键值关系：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;mp&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这些东西在算法竞赛中非常常见，也逐渐成为了一种编程习惯。&#10;很多时候，面对一个问题，我想到的都是：&#10;有没有现成的数据结构？&#10;有没有合适的算法？&#10;自己能不能快速实现？&#10;程序能不能高效执行？&#10;这也是 C++ 带给我的一种思维方式。&#10;它提供了大量已经封装好的工具，同时又保留了足够的自由度，让我可以根据自己的需求进行修改和扩展，在保证开发效率的同时，也尽可能追求程序运行效率。&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;我在 C++ 里这么写&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;在 C 里对应&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;在 Python 里对应&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;vector&amp;lt;int&amp;gt; v;&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;动态数组需要自己管理内存，例如 &lt;code&gt;malloc&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;list&lt;/code&gt;，自动扩容&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;v.push_back(x);&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;手动扩容并添加元素&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;append(x)&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;int* p = new int[10];&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;malloc&lt;/code&gt; 分配内存，需要 &lt;code&gt;free&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;通常不需要直接管理&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;for(int x:v)&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;使用下标或者指针遍历&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;for x in list&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;map&amp;lt;string,int&amp;gt;&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;需要借助结构体、哈希表实现&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;dict&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;sort()&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;qsort()&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;sorted()&lt;/code&gt; 或 &lt;code&gt;sort()&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;当然，这张表只是列出了一些简单的区别。&#10;实际上，不同语言之间的差异远不止这些。看到这里可能会产生一个问题：&#10;为什么会有这么多编程语言？&#10;既然 C++ 已经可以完成很多事情，为什么还需要 C、Python，甚至 Rust？&#10;为什么不设计一门“万能语言”，解决所有问题呢？&lt;/p&gt;&#10;&lt;h2 id="为什么需要不同的编程语言"&gt;&lt;a href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e9%9c%80%e8%a6%81%e4%b8%8d%e5%90%8c%e7%9a%84%e7%bc%96%e7%a8%8b%e8%af%ad%e8%a8%80" class="header-anchor"&gt;&lt;/a&gt;为什么需要不同的编程语言？&#13;&#10;&lt;/h2&gt;&lt;p&gt;在学习了几门编程语言之后，我曾经有过一个疑问：&#10;既然 C++ 已经可以完成很多事情，为什么还需要 C、Python，甚至更多其他语言？&lt;/p&gt;&#10;&lt;p&gt;如果只是为了让计算机完成任务，难道一门语言不能解决所有问题吗？后来我慢慢发现，编程语言其实是在不同需求之间做出的选择。&lt;/p&gt;&#10;&lt;p&gt;计算机本身并不能理解人的想法，我们需要通过程序告诉它应该如何执行。但这里存在一个矛盾：&lt;/p&gt;&#10;&lt;p&gt;对于机器来说，我们希望程序运行得足够快，能够尽可能发挥计算机的性能；而对于人来说，我们又希望写代码的过程足够简单，可以快速验证自己的想法。&lt;/p&gt;&#10;&lt;p&gt;比如，如果我要控制一个机器，让它高效地执行某个任务，那么我可能需要更加关注底层细节，榨干它的所有性能。但如果我只是想快速验证一个想法，比如分析一批数据，那么我可能更希望少考虑一些底层问题，把更多精力放在自己的想法上。&lt;/p&gt;&#10;&lt;p&gt;这两个方向并没有谁一定更好。只是不同场景下，我们关注的重点不同。&#10;C 语言更接近计算机本身，它给予程序员更多控制权；Python 则更加关注表达效率，让人可以用更少的代码完成更多事情；而 C++ 则处在两者之间，既保留了底层能力，也提供了大量高级工具。&lt;/p&gt;&#10;&lt;p&gt;这也是为什么不同语言能够长期存在。它们并不是简单的替代关系，而是在解决不同的问题。就像现实生活中，不同工具有不同用途一样。一把锤子和一把螺丝刀没有必要比较谁更优秀，重要的是面对不同的问题时，知道应该选择什么工具。&lt;/p&gt;&#10;&lt;p&gt;对于编程语言来说也是如此。真正重要的可能不是“哪门语言最好”，而是理解：&#10;为什么这门语言会这样设计？&#10;它希望解决什么问题？&#10;它又做出了什么取舍？&lt;/p&gt;&#10;&lt;h2 id="往下看一层c"&gt;&lt;a href="#%e5%be%80%e4%b8%8b%e7%9c%8b%e4%b8%80%e5%b1%82c" class="header-anchor"&gt;&lt;/a&gt;往下看一层：C&#13;&#10;&lt;/h2&gt;&lt;p&gt;学习 C 的过程，有点像重新拆开一个已经习惯使用的工具。以前写 C++ 的时候，很多事情都是理所当然的。&#10;需要动态数组？&#10;vector。&#10;需要字符串？&#10;string。&#10;需要映射关系？&#10;map。&#10;需要动态申请空间？&#10;new。&#10;这些东西已经成为了一种编程习惯，以至于我很少再去思考：&#10;vector 的底层是什么？&#10;new 到底帮我做了什么？&#10;程序运行的时候，内存究竟发生了什么？&#10;而 C 语言恰好把这些问题重新摆到了面前。&#10;在 C++ 中，我更多关注的是：&#10;“我要解决什么问题。”&#10;而在 C 中，我需要开始关注：&#10;“计算机到底是如何完成这件事情的。”&lt;/p&gt;&#10;&lt;h3 id="看见-c-隐藏的东西"&gt;&lt;a href="#%e7%9c%8b%e8%a7%81-c-%e9%9a%90%e8%97%8f%e7%9a%84%e4%b8%9c%e8%a5%bf" class="header-anchor"&gt;&lt;/a&gt;看见 C++ 隐藏的东西&#13;&#10;&lt;/h3&gt;&lt;p&gt;比如动态数组。&#10;在 C++ 中：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push_back&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;即可完成扩容和添加元素。&#10;但在 C 中，没有现成的 vector，需要自己申请内存，管理空间大小，并在需要的时候重新分配。&#10;这让我第一次更加直观地理解：&#10;C++ 并不是凭空创造了这些能力，而是在 C 的基础上建立了一层更方便的抽象。&#10;同样，new 和 delete 也是如此。&#10;C++：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;delete&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;C：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c" data-lang="c"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;malloc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;free&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;看起来只是语法不同，但背后体现的是不同的设计理念。C 把更多控制权交给程序员。这带来了更强的自由度，同时也意味着程序员需要承担更多责任。内存泄漏、数组越界，这些问题不会因为语言简单就消失，而是需要开发者更加小心。&#10;学习 C 的意义，并不是因为以后一定要用 C 写所有程序，而是它让我重新理解：&#10;程序到底是如何运行在计算机上的。&#10;其实，这也是我后来重新认识 C 的一个原因。&lt;/p&gt;&#10;&lt;h3 id="一个问题"&gt;&lt;a href="#%e4%b8%80%e4%b8%aa%e9%97%ae%e9%a2%98" class="header-anchor"&gt;&lt;/a&gt;一个问题&#13;&#10;&lt;/h3&gt;&lt;p&gt;之前参加网络安全面试的时候，曾经遇到过一个让我印象很深的问题：&#10;&lt;code&gt;printf(&amp;quot;hello&amp;quot;);&lt;/code&gt; 这样一句简单的代码，在计算机内部到底经历了什么?&#10;（其实当时研究生学长问我的原问题是：&lt;code&gt;print(f)&lt;/code&gt; 这一行代码，在计算机中是如何一步一步执行出来的。）&lt;/p&gt;&#10;&lt;p&gt;当时的我其实回答不上来。因为平时写代码时，我更多关注的是：&#10;程序能不能运行？&#10;结果是否正确？&#10;算法是否高效？&lt;/p&gt;&#10;&lt;p&gt;但很少真正思考：&#10;这一行代码从源代码到屏幕上的字符，中间到底发生了什么？&#10;函数是如何被调用的？&#10;参数是如何传递的？&#10;数据经过了哪些层次？&#10;操作系统和硬件又参与了什么？&lt;/p&gt;&#10;&lt;p&gt;这些问题可能已经超出了某一门语言本身，而是计算机系统的基础。&#10;而学习 C，恰好提供了一条更加接近计算机运行过程的路径。&#10;它不会替你隐藏太多细节，反而会迫使你重新思考：&#10;一段程序究竟是如何从源代码，变成计算机真正执行的指令。&#10;至于这个问题的完整答案，我打算之后单独写一篇文章。&lt;/p&gt;&#10;&lt;p&gt;从一行简单的 &lt;code&gt;printf(&amp;quot;hello&amp;quot;);&lt;/code&gt; 开始，看看一段代码究竟是如何一步一步在计算机中运行起来的。&lt;/p&gt;&#10;&lt;h2 id="换一个方向python"&gt;&lt;a href="#%e6%8d%a2%e4%b8%80%e4%b8%aa%e6%96%b9%e5%90%91python" class="header-anchor"&gt;&lt;/a&gt;换一个方向：Python&#13;&#10;&lt;/h2&gt;&lt;p&gt;如果说 C 是让我往计算机内部看，那么 Python 则刚好是另一个方向。&#10;它让我开始思考：&#10;如果程序的目标是快速验证一个想法，那么我们是否真的需要关注所有底层细节？&lt;/p&gt;&#10;&lt;p&gt;在学习 C++ 的过程中，我逐渐习惯的一种思维方式是：&#10;变量是什么类型？&#10;数据存储在哪里？&#10;算法复杂度是多少？&#10;程序如何运行？&#10;这些问题当然很重要。&lt;/p&gt;&#10;&lt;p&gt;但有些时候，我们面对的问题并不是如何让计算机发挥极限性能，而是如何快速把自己的想法实现出来。&lt;/p&gt;&#10;&lt;p&gt;而 Python 恰好选择了另一种设计方向。&lt;/p&gt;&#10;&lt;h3 id="从写代码到表达想法"&gt;&lt;a href="#%e4%bb%8e%e5%86%99%e4%bb%a3%e7%a0%81%e5%88%b0%e8%a1%a8%e8%be%be%e6%83%b3%e6%b3%95" class="header-anchor"&gt;&lt;/a&gt;从写代码到表达想法&#13;&#10;&lt;/h3&gt;&lt;p&gt;比如在 C++ 中，如果需要保存一组数据：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push_back&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;push_back&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;而在 Python 中：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;同样的事情可以更加直接地表达。&#10;这种区别并不是简单的“代码多少”。&#10;背后体现的是两种不同的设计思想。&#10;C++ 更倾向于让程序员拥有更多控制权。&#10;Python 则希望程序员能够更加关注问题本身，而不是花费大量精力处理语言和底层细节。&lt;/p&gt;&#10;&lt;h3 id="动态类型带来的自由"&gt;&lt;a href="#%e5%8a%a8%e6%80%81%e7%b1%bb%e5%9e%8b%e5%b8%a6%e6%9d%a5%e7%9a%84%e8%87%aa%e7%94%b1" class="header-anchor"&gt;&lt;/a&gt;动态类型带来的自由&#13;&#10;&lt;/h3&gt;&lt;p&gt;Python 一个很明显的特点就是动态类型。&#10;在 C++ 中：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cpp" data-lang="cpp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;变量的类型在定义时已经确定。&#10;而 Python：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;它允许变量名在不同时间引用不同类型的对象。&#10;这种设计让 Python 写起来更加灵活。&#10;尤其是在数据分析、人工智能、自动化脚本等场景中，我们往往更关注：&#10;这个想法能不能快速验证？&#10;这个数据能不能快速处理？&#10;这个模型能不能快速运行？&#10;而不是一开始就设计完整的数据结构。&lt;/p&gt;&#10;&lt;h3 id="但隐藏复杂性并不代表复杂性消失"&gt;&lt;a href="#%e4%bd%86%e9%9a%90%e8%97%8f%e5%a4%8d%e6%9d%82%e6%80%a7%e5%b9%b6%e4%b8%8d%e4%bb%a3%e8%a1%a8%e5%a4%8d%e6%9d%82%e6%80%a7%e6%b6%88%e5%a4%b1" class="header-anchor"&gt;&lt;/a&gt;但隐藏复杂性并不代表复杂性消失&#13;&#10;&lt;/h3&gt;&lt;p&gt;不过，Python 的简单也并不是没有代价。&#10;很多时候，人们会说：&#10;“Python 很慢。”&#10;但这个“慢”其实需要具体分析。&#10;如果是大量简单循环：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-py" data-lang="py"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10000000&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Python 的执行效率确实通常不如 C/C++。&#10;因为 Python 需要解释器参与执行，并且动态类型也带来了额外开销。&#10;但如果任务主要是：&#10;数据读取、网络请求、调用成熟库、AI模型训练，&#10;那么 Python 的效率可能并不会成为主要瓶颈。&#10;很多时候，真正限制我们的并不是计算机运行速度，而是人的开发速度。&#10;以前学习 C++ 的时候，我更多关注：&#10;如何让程序更快？&#10;如何设计更好的算法？&#10;如何优化复杂度？&lt;/p&gt;&#10;&lt;p&gt;而 Python 让我看到另一种可能：&#10;程序也可以是一种快速表达想法的工具。&#10;很多人工智能、数据分析领域的发展，也离不开 Python 这种“降低实验成本”的特点。&#10;当然，这并不意味着 Python 可以替代所有语言。&#10;如果需要接近硬件、追求极致性能，C/C++ 仍然有不可替代的价值。&#10;但如果目标是快速探索、验证想法，那么 Python 提供了一种非常高效的方式。&#10;这也是我重新认识 Python 后最大的感受：&#10;编程不仅仅是让机器执行命令。有时候，更重要的是让人的想法能够快速变成现实。&lt;/p&gt;&#10;&lt;h3 id="一个反思"&gt;&lt;a href="#%e4%b8%80%e4%b8%aa%e5%8f%8d%e6%80%9d" class="header-anchor"&gt;&lt;/a&gt;一个反思&#13;&#10;&lt;/h3&gt;&lt;p&gt;其实，回过头来看，我之前没有真正掌握 Python，也有一些自己的原因。&lt;/p&gt;&#10;&lt;p&gt;写算法题比较多之后，我会对一些“黑盒”产生天然的抵触。&#10;在算法竞赛中，我习惯了去理解：&#10;一个数据结构为什么这样设计？&#10;一个算法为什么能够成立？&#10;一个优化为什么能够降低复杂度？&lt;/p&gt;&#10;&lt;p&gt;所以当面对 Python 中大量封装好的库和接口时，我有时候会产生一种不太适应的感觉。&#10;因为如果不了解背后的原理，只是记住：&#10;这个函数怎么调用。&#10;这个库怎么使用。&#10;那么这些东西很容易随着时间遗忘。&lt;/p&gt;&#10;&lt;p&gt;而 Python 恰恰是一门高度依赖生态的语言。&#10;很多时候，真正解决问题并不是自己从底层实现所有东西，而是知道：&#10;有没有现成的工具？&#10;如何正确使用它？&#10;它背后的原理是什么？&#10;这也是我过去学习 Python 时遇到的问题。&lt;/p&gt;&#10;&lt;p&gt;另一个原因，则是 C++ 使用习惯带来的影响。&#10;从 C++ 切换到 Python，并不仅仅是语法变化。&#10;它背后对应的是两种不同的编程思维。&#10;C++ 中，我习惯关注数据结构、类型和效率；而 Python 中，我需要更加关注如何快速表达想法。&#10;这种思维方式的转换，并不是简单背几个语法就能完成的。&lt;/p&gt;&#10;&lt;p&gt;之前参加网络安全面试时，也暴露出了这个问题。&#10;当时有同辈问我：&#10;脚本是不是自己写的？&#10;我回答是通过 AI 辅助完成。&#10;现在回头看，一个学习过 Python 的人，如果连一些基础脚本都无法独立完成，着实可笑。&lt;/p&gt;&#10;&lt;p&gt;但我觉得，能够早点发现这个问题，也是一件好事。&#10;至少它让我意识到：&#10;学习一门语言，不能只停留在知道语法、会调用工具。&#10;真正重要的是理解它的设计思想，并通过实际使用建立自己的能力。&#10;所以之后，我也会像前面重新认识 C 一样，重新补充自己的 Python 学习过程。&#10;从简单脚本开始，真正理解 Python 为什么适合快速表达想法，以及它在实际工程中是如何被使用的。&lt;/p&gt;&#10;&lt;h2 id="看一眼-rust"&gt;&lt;a href="#%e7%9c%8b%e4%b8%80%e7%9c%bc-rust" class="header-anchor"&gt;&lt;/a&gt;看一眼 Rust&#13;&#10;&lt;/h2&gt;&lt;p&gt;关于 Rust，其实目前我的了解还比较有限。&#10;我接触它主要是因为区块链和底层开发方向的兴趣。相比 C++，Rust 希望在性能、安全性和现代开发体验之间找到一种新的平衡。&#10;不过目前我还没有真正使用 Rust 完成过实际项目，所以这里不会过多评价它。&#10;等未来真正学习和使用之后，可能再回来打个补丁。&lt;/p&gt;&#10;&lt;h2 id="写给刚开始编程的人"&gt;&lt;a href="#%e5%86%99%e7%bb%99%e5%88%9a%e5%bc%80%e5%a7%8b%e7%bc%96%e7%a8%8b%e7%9a%84%e4%ba%ba" class="header-anchor"&gt;&lt;/a&gt;写给刚开始编程的人&#13;&#10;&lt;/h2&gt;&lt;p&gt;回头看自己的编程经历，我其实觉得自己从 C++ 开始学习编程是一件比较幸运的事情。&#10;当然，这并不代表 C++ 一定是最好的入门语言。不同的人有不同的目标，也会有不同的选择。&#10;如果你喜欢算法、数学，或者希望训练自己的逻辑能力，C++ 可能是一条不错的道路。它会让你接触数据结构、算法，培养一种更加严谨的思考方式。&#10;如果你的目标是快速做出一些东西，比如自动化脚本、数据分析或者人工智能应用，那么 Python 可能会更加适合。&#10;如果你想进一步理解计算机内部，理解内存、程序运行和硬件之间的关系，那么 C 会是一条很好的道路。&lt;/p&gt;&#10;&lt;p&gt;但无论选择哪门语言，我觉得最重要的不是“学会多少语法”，而是不要停留在：&#10;“这个函数怎么调用？”&#10;“这个代码怎么运行？”&lt;/p&gt;&#10;&lt;p&gt;而应该继续追问：&#10;&lt;strong&gt;它为什么这样设计？&lt;/strong&gt;&#10;&lt;strong&gt;它解决了什么问题？&lt;/strong&gt;&#10;&lt;strong&gt;它背后隐藏了什么？&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;编程语言会不断变化，新的语言也会不断出现。&#10;真正属于自己的能力，是面对一个问题时，能够分析它、拆解它，并选择合适的方法解决它。&lt;/p&gt;&#10;&lt;h2 id="换成我自己的选择"&gt;&lt;a href="#%e6%8d%a2%e6%88%90%e6%88%91%e8%87%aa%e5%b7%b1%e7%9a%84%e9%80%89%e6%8b%a9" class="header-anchor"&gt;&lt;/a&gt;换成我自己的选择&#13;&#10;&lt;/h2&gt;&lt;p&gt;回到自己身上，我目前对于这些语言的定位其实还比较简单。&lt;/p&gt;&#10;&lt;p&gt;C++ 依然会是我解决算法问题的主要工具。&#10;C 则更多承担“理解计算机”的角色。它让我重新关注那些平时容易忽略的细节：内存如何管理，程序如何运行，代码如何一步步变成机器能够执行的指令。&#10;Python 可能会是我之后需要重点补充的一门语言。以前我更多停留在“知道语法”的阶段，未来希望真正用它快速验证想法、编写脚本、处理数据，把它变成解决实际问题的工具。&#10;至于 Rust，目前更多是一种对未来的储备。我目前对它的了解还比较浅，真正的认识还需要等未来实际使用之后再慢慢建立。&lt;/p&gt;&#10;&lt;p&gt;所以现阶段，我对自己的定位大概是：&#10;用 C++ 训练算法思维，用 C 理解计算机底层，用 Python 提高解决问题的效率，用 Rust 探索未来可能的发展方向。&lt;/p&gt;&#10;&lt;p&gt;当然，这只是现在阶段的选择。技术的发展很快，自己的兴趣和方向也会不断变化。&#10;但无论未来使用什么语言，我希望自己始终保持一个习惯：&#10;不仅知道怎么写代码，也知道为什么这样写。&lt;/p&gt;&#10;&lt;h2 id="收尾"&gt;&lt;a href="#%e6%94%b6%e5%b0%be" class="header-anchor"&gt;&lt;/a&gt;收尾&#13;&#10;&lt;/h2&gt;&lt;p&gt;写完这些之后，我最大的变化可能不是学会了更多语言，而是重新认识写代码的方式。&#10;C 让我重新关注计算机本身，理解程序如何运行；Python 让我看到快速表达想法的价值；而 C++ 则连接了算法思维和工程效率。&#10;未来我可能还会学习更多语言，也可能会发现自己现在的一些理解并不完全正确。但至少现在，我希望自己不只是一个会写代码的人。&#10;&lt;strong&gt;编程语言只是入口。真正值得探索的，是代码背后的解决问题的方式。&lt;/strong&gt;&lt;/p&gt;&#10;</description></item></channel></rss>