<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Programming on 禅心剑气相思骨</title>
    <link>https://yiwei.dev/tags/programming/</link>
    <description>Recent content in Programming on 禅心剑气相思骨</description>
    <generator>Hugo -- 0.155.3</generator>
    <language>en</language>
    <lastBuildDate>Wed, 28 Jan 2026 23:30:03 +0000</lastBuildDate>
    <atom:link href="https://yiwei.dev/tags/programming/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>AI, 当程序员开始感到“绝望”</title>
      <link>https://yiwei.dev/posts/ai-despair/</link>
      <pubDate>Wed, 28 Jan 2026 23:30:03 +0000</pubDate>
      <guid>https://yiwei.dev/posts/ai-despair/</guid>
      <description>&lt;p&gt;昨晚和老友坐在街角一家有些年头的烧烤摊，炭火氤氲，烟气呛人。肉串的味道大不如前，似乎为了追求出餐效率，少了些许腌制的耐心。这种口感上的“降级”很像我们当晚聊天的底色——在一种不可阻挡的洪流面前，原本精细的手艺变得不再重要。&lt;/p&gt;
&lt;p&gt;作为常年与代码打交道的人，在这个新技术以周为单位迭代的时代，我们并没有表现出外界想象的那种亢奋。相反，酒精下去，浮上来的是一种近乎绝望的清醒。老友说，我们现在的处境，像极了工业革命前夕还在挥舞锄头的农民。当内燃机驱动的收割机开进麦田时，你锄头挥得再优雅、再有技巧，在发动机的轰鸣声中都显得滑稽且多余。那些我们曾经引以为傲的 K8s 运维经验、对底层工程细节的掌控，在能自动编排工作流的 AI 面前，正迅速贬值为一种旧时代的“民俗手艺”。&lt;/p&gt;
&lt;p&gt;这种无力感，本质上是“工具理性的反噬”。我们制造工具是为了解放自己，但现在的 AI 似乎不是在解放我们，而是在替代我们的思考过程。&lt;/p&gt;
&lt;p&gt;聊到现在的 AI 助手，我们都觉得它们还是太“乖”了，乖得有些迟钝。你推一下，它动一下，这种 Passive（被动）的交互模式，依然停留在“搜索引擎”的逻辑里。但真正的智能，或者说一个合格的 Digital Agent，不应该是一个等待指令的终端。我想，未来的 AI 应该是一种“流动的环境”。 当我深陷在复杂的代码逻辑或写作心流中时，它应该像一个懂事的秘书，敏锐地察觉到我的认知负荷已经满了，于是主动在后台静默地处理掉杂务，拦截一切不必要的打扰，而不是弹出一个对话框问我：“需要帮助吗？”——在这个注意力稀缺的年代，不打扰，才是最高级的智能。&lt;/p&gt;
&lt;p&gt;顺着这个思路，我们谈到了那个让人头疼的“文件系统”。人类的大脑从来不是按文件夹分类的，我们是按“关联”记忆的。我们会记得“那是去年冬天做的项目”，或者“那个让我熬了三个通宵的 Bug”。但现在的操作系统强迫我们将这些鲜活的记忆压缩进死板的树状目录里。我在想，未来的文件系统应该消亡，取而代之的是一个基于语意的“记忆层”。我不需要知道文件存在哪个盘符，我只需要表达意图，AI 就应该像从深海打捞沉船一样，根据时间、地点、甚至我当时的情绪，把那些碎片拼凑回来。这不仅仅是效率的提升，这是对人类思维方式的某种“回归”——让机器去适应人，而不是人去适应机器的文件协议。&lt;/p&gt;
&lt;p&gt;但在巨头的阴影下，这种智能也让人恐惧。既然在大模型上拼不过算力和数据，我们一致认为，“本地化（On-Device）”或许是最后的避风港。这是一个关于尊严的博弈：没人愿意把长达二十小时的生活录音、私密的碎碎念上传到云端供巨头训练。如果能有一个 1.5B 级别的小模型，它只住在我的手机里，只记得我的习惯，只懂我偶尔冒出的灵感，并且在物理上与互联网物理断开。这种极致的隐私和封闭性，可能是我们在数字全景监狱中，唯一能保留的“自留地”。&lt;/p&gt;
&lt;p&gt;夜色渐深，话题最终落到了职业的归宿上。未来的程序员，大概率会分化成两类：绝大多数人变成“预制菜加热工”，负责拼装 AI 生成的代码模块，也就是所谓的“调包侠”的终极形态；而只有极少数人，能像坚持古法烹饪的老牌厨师一样，去死磕那些 AI 暂时无法触及的物理边界和复杂系统。&lt;/p&gt;
&lt;p&gt;这顿烧烤吃得有些撑，临走时，路边的白炽灯晃得人眼晕。这个世界终究是一个巨大的草台班子，AI 正在重新分配桌上的筹码，而我们是那个看着牌桌规则被改写的人。二十年后，社会分工或许会重构完成，而现在，我们这群“旧时代的农民”能做的，或许就是在巨大的收割机开过来之前，先学会怎么给它写“咒语”。&lt;/p&gt;
&lt;p&gt;或者，像老友在微醺中半开玩笑说的那样：“实在不行，就别写代码了，去加仓几手内存厂商的股票吧。”毕竟，在淘金热里，卖铲子的人永远比挖金子的人活得久。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Asynchronous function in Unity</title>
      <link>https://yiwei.dev/posts/asynchronous-function-in-unity/</link>
      <pubDate>Mon, 16 Nov 2020 11:30:03 +0000</pubDate>
      <guid>https://yiwei.dev/posts/asynchronous-function-in-unity/</guid>
      <description>&lt;h2 id=&#34;async-and-await-keyword&#34;&gt;Async and await keyword&lt;/h2&gt;
&lt;p&gt;Since Unity 2019, Unity introduces C# task and async/await keyword to MonoBehaviour. For Unity callback functions like &lt;code&gt;Start&lt;/code&gt;, &lt;code&gt;Update&lt;/code&gt;, now it supports the async version, and with the &lt;code&gt;async&lt;/code&gt; keyword in the front, the function now will be dispatched asynchronously automatically by the engine.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-c#&#34; data-lang=&#34;c#&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;async&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; Start()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Start task delay 2 seconds&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;await&lt;/span&gt; Task.Delay(TimeSpan.FromSeconds(&lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Debug.Log(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Task delay 2 finished&amp;#34;&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The function on the above will be executed and the first log shows immediately while the second log shows after 2 seconds.
The C# build-in HTTP library also provides a nice async wrapper, which can be used in the asynchronous MonoBehaviour as well.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
