分类 默认分类 下的文章

写在第三次软件工程革命的前夕

大语言模型飞速进步,手写代码的时代已经结束,人工编码已无任何必要

回顾计算科学的发展史,我们一直在寻找更高效的方式与机器对话。从最早的打孔卡片、汇编语言,到C语言,再到如今高度封装的面向对象编程和各种现代框架,每一次跃迁都是对底层逻辑的进一步抽象。而大语言模型(LLM)的爆发,标志着这条抽象之路走到了终极形态——自然语言已经成为最强大的编程语言

现在的IDE不再仅仅是一个文本编辑器,它正在演变成一个意图解析器。面对海量的样板代码、标准的增删改查逻辑、甚至是复杂的算法实现,人类逐字逐句敲击键盘的投入产出比已经低到可以忽略不计。AI生成代码的速度和准确率已经跨越了“玩具阶段”,正式进入了工业级生产。在这个时代,坚持纯手工编码就像是在内燃机普及后依然坚持乘坐马车,这不仅是对生产力的巨大浪费,也是对工程演进规律的无视。手写代码的时代大幕正在落下,对于绝大多数标准化的软件构建而言,人工编码确实已无任何必要。

LLM加速技术平权,技术人员积累经验的核心价值在飞速贬值,八股面试已不可取 

过去几十年,技术人员的护城河往往建立在“经验积累”之上:熟悉某种语言的暗坑、背诵复杂的API签名、精通某个框架的底层源码,甚至是如何在不同环境下配置依赖。然而,LLM的出现无情地抹平了这道知识壁垒。一个逻辑清晰、善于运用AI的初级工程师,完全可以借助模型输出媲美资深工程师的高质量代码。技术平权正在以前所未有的速度发生。

在这样的背景下,企业招聘中依然盛行的“八股文”面试显得极其荒谬且滞后。考察候选人如何手写红黑树、如何死记硬背JVM调优参数或是CSS的各类边角料特性,已经完全脱离了现代软件工程的实际需求。当AI能在几秒钟内给出最完美的标准答案时,人类记忆力和熟练度的核心价值正在飞速贬值。未来的核心竞争力不再是“记住答案”,而是“提出正确的问题”——即问题拆解能力、系统边界定义能力以及对业务逻辑的深度抽象能力。

软件工程颠覆性重构,人类工程师应该聚焦在更高层的概念设计与对复杂系统的理解

告别“猪突式”开发,转向系统化Agent体系构建

过去国内的软件开发往往被业务推着走,习惯于“大力出奇迹”。一旦确立了需求,最常见的做法就是快速拉齐团队、堆砌人力、直接上手编码,这种“猪突式”的战术在人口红利期或许有效,但在AI时代已完全不可取。既然代码产出本身不再是瓶颈,那么“写得快”就不再具有决定性意义。

人类工程师的时间和精力必须从繁重的低级编码中解放出来,向上跃迁到更高层的概念设计。我们的工作重心将彻底转移到系统架构的宏观把控上:如何定义领域模型,如何划分微服务边界,以及最重要的是——如何构建一套系统化的Agent工具体系来辅助生产。这包括但不限于引入LLM网关进行提示词路由和流量管控,或者搭建多模型服务平台,让不同专长的AI模型协同处理代码生成、测试覆盖和安全审计等工作。工程师将从“泥瓦匠”转变为“流水线设计师”。

消解非必要复杂性,技术栈的大收敛时代

软件工程巨匠Fred Brooks曾将软件的复杂性分为“本质复杂性”和“非必要复杂性”。一直以来,工程师们耗费大量生命在配置环境、解决依赖冲突和查阅StackOverflow上,这些都是典型的非必要复杂性。LLM的出现极大地缓解了这一痛点,人类不再需要成为各个报错信息的搜索引擎。

随之而来的,将是框架和技术栈的残酷大收敛。AI将扮演技术栈的“自然选择”过滤器。那些文档完善、开源社区活跃、历史语料丰富的框架,AI写得最好、bug最少。因此,越来越多的团队会倾向于使用这些“AI友好型”框架,从而产生更多语料,形成正向循环。反之,那些语法孤僻、缺乏语料的小众框架和晦涩技术栈将因为AI支持不佳而彻底走向消亡。人类工程师应该顺应这一趋势,彻底放弃在低层次技术实现细节上的内卷,将全部心智聚焦于对复杂业务系统的理解与顶层设计。

再次回顾人月神话, Code Agent解决了什么问题

《人月神话》中揭示了一个残酷的定律:向进度落后的软件项目中添加人手,只会让进度更加落后。其根本原因在于,软件开发是一项高度依赖沟通协作的工作。人数的增加会导致人际沟通路径呈几何级数爆炸,最终让项目陷入万劫不复的“焦油坑”。

在过去,这似乎是软件工程的一个无解魔咒。但Code Agent 成熟,精准地切中了这个历史级痛点。** 它们通过自动化和智能化的代码生成、测试桩生成与集成测试,极大地压缩了项目所需的人力规模。过去需要十人协同一个月的模块,现在可能只需要一名资深架构师带领一群不知疲倦、无需沟通成本的Code Agent,在几天内就能完成。

这种模式让Brooks曾设想的“外科手术式开发团队”——由极少数精英主导,大量辅助工具支撑——真正具备了可落地的土壤。人和机器的沟通,远比人与人的沟通更加精确、高效且没有情绪内耗。因此,一个冰冷但必然的趋势是:大量只负责低端增删改查和简单逻辑实现的基础编码人员将面临下岗。 团队的规模将大幅缩减,但单兵作战的能力和项目的交付效率将得到指数级提升。

参考

破解代码

  • python

    import base64
    import zlib
    import json
    import argparse
    import sys
    import os
    import datetime
    import re
    import shutil
    
    # --- 核心工具函数 ---
    
    def bit_reverse_byte(n):
      """字节位反转"""
      return int('{:08b}'.format(n)[::-1], 2)
    
    # --- 解密逻辑 ---
    
    def sm_decode(encoded_txt):
      if not encoded_txt:
          return None
      try:
          if isinstance(encoded_txt, str):
              encoded_txt = encoded_txt.encode('utf-8')
          
          step1_data = base64.b64decode(encoded_txt)
    
          step2_buffer = bytearray()
          for byte in step1_data:
              step2_buffer.append(bit_reverse_byte(byte))
    
          step3_data = zlib.decompress(step2_buffer)
    
          text_str = step3_data.decode('utf-8')
          trans_table = str.maketrans("!@#$%^&*()", "abcdefghij")
          step4_text = text_str.translate(trans_table)
    
          final_data = base64.b64decode(step4_text)
          return final_data.decode('utf-8')
    
      except Exception as e:
          sys.stderr.write(f"[!] 解密失败: {e}\n")
          return None
    
    # --- 加密逻辑 ---
    
    def sm_encode(json_str):
      if not json_str:
          return None
      try:
          step1_b64 = base64.b64encode(json_str.encode('utf-8')).decode('utf-8')
    
          trans_table = str.maketrans("abcdefghij", "!@#$%^&*()")
          step2_replaced = step1_b64.translate(trans_table)
    
          step3_compressed = zlib.compress(step2_replaced.encode('utf-8'))
    
          step4_buffer = bytearray()
          for byte in step3_compressed:
              step4_buffer.append(bit_reverse_byte(byte))
    
          final_encoded = base64.b64encode(step4_buffer).decode('utf-8')
          return final_encoded
      except Exception as e:
          sys.stderr.write(f"[!] 加密失败: {e}\n")
          return None
    
    # --- 修改逻辑 ---
    
    def modify_license_data(json_data):
      """修改过期时间为明天"""
      # 获取当前时间 + 1天
      now = datetime.datetime.now()
      tomorrow = now + datetime.timedelta(days=1)
      
      print(f"[*] 设置新的过期时间为: {tomorrow.strftime('%Y-%m-%d %H:%M:%S')}")
    
      # 修改字段
      json_data['active'] = 1
      json_data['active_txt'] = '<font color="green">Active</font>'
      # 格式: YYYYMMDD
      json_data['licexpires'] = tomorrow.strftime("%Y%m%d")
      # 格式: DD/MM/YYYY GMT
      json_data['licexpires_txt'] = tomorrow.strftime("%d/%m/%Y GMT")
      json_data['download_time'] = int(now.timestamp())
      
      return json_data
    
    # --- JSON 特殊处理 ---
    
    def precise_json_escape(json_str):
      """只转义 fast_mirrors 和 licexpires_txt 中的斜杠"""
      def escape_slash_in_match(match):
          return match.group(0).replace('/', '\\/')
    
      pattern_txt = r'"licexpires_txt":".*?"'
      json_str = re.sub(pattern_txt, escape_slash_in_match, json_str)
    
      pattern_mirrors = r'"fast_mirrors":\[.*?\]'
      json_str = re.sub(pattern_mirrors, escape_slash_in_match, json_str)
    
      return json_str
    
    # --- 主程序 ---
    
    def main():
      parser = argparse.ArgumentParser(description="License 自动续期工具")
      parser.add_argument("file_path", help="原始 License 文件路径")
      # 新增 --replace 选项
      parser.add_argument("--replace", action="store_true", help="生成临时文件后直接覆盖原文件")
      
      args = parser.parse_args()
      
      # 1. 读取文件
      if not os.path.exists(args.file_path):
          sys.stderr.write(f"[!] 错误: 文件不存在 -> {args.file_path}\n")
          sys.exit(1)
    
      print(f"[*] 正在读取文件: {args.file_path}")
      with open(args.file_path, 'r', encoding='utf-8') as f:
          original_content = f.read().strip()
    
      # 2. 解密
      decoded_json_str = sm_decode(original_content)
      if not decoded_json_str:
          sys.exit(1)
    
      try:
          json_data = json.loads(decoded_json_str)
          
          # --- [需求] 打印刚读取出来的原始 JSON ---
          print("\n" + "="*20 + " 原始 JSON 数据 " + "="*20)
          print(json.dumps(json_data, indent=4, ensure_ascii=False))
          print("="*56 + "\n")
          
      except json.JSONDecodeError:
          sys.stderr.write("[!] 解密成功但不是有效的 JSON\n")
          sys.exit(1)
    
      # 3. 修改数据 (日期改为明天)
      modified_data = modify_license_data(json_data)
    
      # 4. 生成 & 精准转义
      compact_json_str = json.dumps(modified_data, separators=(',', ':'))
      final_json_str = precise_json_escape(compact_json_str)
    
      print("=============修改后的json=============")
      print(final_json_str)
      # 5. 加密
      new_license_str = sm_encode(final_json_str)
    
    
      # 6. 生成临时文件
      tmp_file_path = "/tmp/license2.php"
      try:
          with open(tmp_file_path, 'w', encoding='utf-8') as f:
              f.write(new_license_str)
          print(f"[*] 临时文件已生成: {tmp_file_path}")
      except IOError as e:
          print(f"[!] 无法写入临时文件 {tmp_file_path}: {e}")
          sys.exit(1)
    
      # 7. 处理 --replace 逻辑
      if args.replace:
          print(f"[*] 检测到 --replace 参数,正在覆盖原文件...")
          try:
              shutil.copyfile(tmp_file_path, args.file_path)
              print(f"[SUCCESS] 文件已更新: {args.file_path}")
          except Exception as e:
              print(f"[!] 覆盖文件失败: {e}")
      else:
          print("-" * 60)
          print(f"[*] 未使用 --replace。新 License 内容如下 (也保存在 {tmp_file_path}):")
          print(new_license_str)
          print("-" * 60)
    
    if __name__ == "__main__":
      main()
  • cron脚本

    */10 * * * * /usr/bin/python3 /root/crack.py /usr/local/virtualizor/license2.php --replace

注册后领取100刀

image.png

注册步骤

中途记得选这个,最后在账户里面 换绑信用卡
image.png

需要注意的是, Free Plan 帐户无法使用 lightsail(光帆)。并且当免费额度用尽,或注册满6个月后将被 AWS 自动关闭帐户。

AWS 会在免费期结束后保留你的数据 90 天。在这段时间内,你可以选择升级为付费计划,重新开通账户并恢复对资源的访问。如果在 90 天内你没有升级账户,AWS 将永久删除你的账户及里面的所有内容。

要下载数据,必须升级到付费套餐,随后,可以选择关闭您的 AWS 账户,以免未来产生账单。
也就是说,即便免费额度的有效期为 AWS 文档所称的 1 年,假如你注册的是免费帐户,最多也只能使用6个月。

选择客服支持服务

image.png

通过任务,领取额外的 $100 免费信用额度

收到激活成功的邮件(图2)后,点击 Go to the AWS Management Console 进入控制台。

下滑页面,在控制台接近底部的右侧找到 Explore AWS , 在筛选一栏选择 Earn AWS credits ,完成指定任务即可获得相应的免费信用额度。

image.png

image.png

前言:比想象中更快的未来

AI 对软件开发者职业生涯的冲击,远比绝大多数人想象的要来得快,也来得更猛烈。

回望过去短短两年,技术迭代的曲线令人咋舌:

  • 2024 年初: 我开始使用 Cursor。那时的 Agent 基本没有自主查找文件的能力,对代码上下文的理解仅限于模糊搜索。当时我去调研,让它编写一个Java单测,结果是几乎不可用,修复它的错误比我自己写还要慢。它更像是一个基于现有代码胡乱拼写的机器,而且并不会结合语法树、词法令牌去去进行查找、规划与判断。在今天大量agent已经在结合LSP上下文进行编程,它会主动找到关联的代码模块,并主动读取所需上下文
  • 2025 年 3 月: Claude Code 上线测试版,Cursor 诞生一年多。此时的 AI 编程仍停留在“提示词生成 + 程序员大量介入改错”的阶段。从交付角度看,大多数工具更像是一个“玩具”,代码存在大量事实错误,且常与需求背道而驰。
  • 2025 年底: 仅仅半年后,局面发生了质变。Codex、Claude、Gemini 等头部玩家的 Agent 已经能够独立完成复杂的 CRUD 页面开发。它们学会了通过 Plan 模式自主分析业务逻辑,主动向用户提问,甚至要求人类协助。生成的代码质量大幅提升,基本上已经具备了替代 1-2 年经验实习生的能力。

站在这个时间节点,作为一名经历过技术变迁的开发者,我想分享一些关于“Vibe Coding”(氛围编码/直觉编码)的实战经验与行业思考。


第一部分:驾驭 AI 的工程实践指南

1. 祛魅 Vibe Coding:它是工具,不是神

不管外界对 Vibe Coding 如何狂热,你必须清醒地认识到:Transformer 本质上是概率模型,而不是真正的智能。

  • 警惕幻觉: 不要让 AI 生成的代码在未经审查的情况下直接进入生产环境。
  • 语料决胜: AI 的表现极度依赖语料库的丰富程度。

    • 正面案例: 在 Next.js 和 Tailwind CSS 等热门开源技术栈下,Claude 的理解能力惊人,几乎能立即生成可用的高质量代码。
    • 反面案例: 在维护我司老旧项目(使用文档匮乏、早已停止维护的 iView 框架)时,AI 的表现堪忧,只能基于现有代码去“猜”。

结论: Vibe Coding 很好用,但它不是万能的。你依然需要具备深厚的判断力来驾驭它。

2. 上下文管理:Less is More

做好 AI 编程的第一步,是做好上下文(Context)管理。Unix 的哲学在 AI 时代依旧适用:保持简单与专注。

  • 及时清理: 善用 /compact 压缩上下文或 /clear 清除历史。如果上一个任务与当前无关,果断清空。
  • 精准投喂: 不要把整个项目扔给 AI。只提供必要的文件,减少噪音干扰。

3. 提示词工程:像工程师一样说话

不要像业余人士那样提需求,要使用严谨的工程技术语言。

  • 错误示范: “我需要一套权限管理系统。”

    • 结果: AI 会扔给你一堆宽泛且大概率不可用的 Demo 代码。
  • 正确示范: “我需要一套基于 OAuth 的权限认证系统,构建在 Spring 框架上。在此基础上,构建一套基于 RBAC 模型(Role-Based Access Control)的用户体系,包含‘管理员’、‘普通用户’等角色,并设计角色间的级联关系。”

    • 结果: AI 会精准识别技术栈和业务逻辑,甚至主动确认细节。

核心逻辑: 你的描述越接近技术文档,AI 的检索和生成效率就越高。

4. 任务规划:化身“核动力审查员”

高效的 Vibe Coding 核心在于任务的拆解与规划

  • 微观层面(精确制导):
    如果你清楚怎么改,只是忘了 API,请通过 @文件名 并在 Prompt 中指明具体的代码行位置。这能极大地缩短 AI 的推理路径。
  • 宏观层面(多 Agent 协同):
    不要在一个窗口里死磕。真正的高效开发者会像指挥官一样,在多个命令行窗口开启多个 Agent:

    • Agent A: 负责实现 Feature。
    • Agent B: 负责修复开发中的 Bug。
    • Agent C: 负责生成单元测试。
    • Agent D: 负责构建流程和 Shell 脚本。

    在这个模式下,Claude 就是你的核动力驴,而你——我的朋友,已经进化成了核动力审查驴

  • Plan 模式与提交策略:

    • Plan 模式: 面对复杂问题,强制 AI 进入 Plan 模式,先搜索、阅读、给出详细修改方案,经你确认后再动手。
    • 频繁 Commit: 让 AI 放飞自我时,最好的安全网就是疯狂提交 Commit。这让你能随时回退,而不用在 IDE 的撤销历史里苦苦翻找。
  • Monorepo 实践:
    尽量采用 Monorepo 结构,或者通过软链接将多个相关项目合并到一个文件夹。这有助于 AI 理解跨项目的依赖关系,建立全局视角。

第二部分:对未来的残酷预判

技术变革往往伴随着阵痛,这一轮 AI 浪潮的影响将主要集中在人的层面。

1. 初级开发者的“断层危机”

Fred Brooks 在《人月神话》中提出的“外科手术式编程团队”(由一名首席程序员主刀,其他人辅助)正在通过 AI 真正落地。

  • 门槛极速提高: 大量的基础代码将由资深工程师结合 AI 快速完成。
  • 成长路径消失: 过去,毕业生通过做“脏活累活”(修修补补、写简单的 CRUD)积累经验,逐渐进化为资深工程师。现在,这部分工作被 AI 接管了。
  • 新人的困境: 如果你大学毕业时连 Git 怎么用都没弄明白,只会刷算法题和背计算机底层知识,而缺乏丰富的工程实践经验,你将很难找到那份“入行”的实习工作。公司对实习生的要求将呈指数级上升。

2. 就业市场的存量博弈

这是一个简单的数学题:当单兵作战的效率提升了 5 倍甚至 10 倍,而市场需求并没有同步爆发时,结果必然是岗位的缩减。

这是一场正在发生的行业洗牌。大量的初级岗位将消失,留下来的是那些懂得如何驾驭 AI、具备系统架构能力、能对代码质量负责的资深工程师。


结语

时代的车轮滚滚向前,不会因为任何人的焦虑而停下。对于开发者而言,学会像指挥官一样思考,掌握 Vibe Coding 的艺术,从“写代码的人”转变为“设计系统并审查代码的人”,或许是我们在这个 AI 时代唯一的生存之道。

一个社会能否实现持续而广泛的繁荣,常常被归结为经济政策、技术创新或契约法制的问题。然而,在这些表层因素之下,一个更根本性的力量——社会各方力量的平衡与牵制——或许才是决定其长期命运的真正支点。许多国家之所以陷入“中等收入陷阱”或长期的发展停滞,其根源往往不在于经济本身,而在于社会权力结构的僵化、失衡或系统性失效。

正如哈耶克在《通往奴役之路》中所反复强调的:经济制度从来不是中性的技术安排,而是权力分配的体现。一旦社会将过多资源配置权与决策权集中于少数人或单一机构之手,其结果几乎不可避免地会反映为政治自由的萎缩与社会活力的枯竭。

从历史上看,发展困境常常表现为两种极端的权力失衡。

第一种,是政府或特定权贵阶层(Elites)的力量过于强势,以至于完全凌驾于社会其他阶层之上。在这种“权贵把持”的体制下,政治权力被高度垄断,社会中下阶层缺乏为自身利益发声的有效渠道,也难以凝结成一股足以形成牵制的力量。

哈耶克对此类体制的警告尤为尖锐。他指出,当国家试图对经济进行全面规划时,就必然需要决定“谁得到什么、谁被牺牲”。而这种决策并不存在所谓“科学中立”的标准,只能由掌权者的价值偏好来裁决。结果便是:权力不再受抽象规则(rule of law)约束,而是演变为对具体人的支配(rule of men)。
在这种结构中,所谓的“公共利益”往往沦为权贵自利的修辞工具。

在现实运作中,权贵阶层的首要目标并非社会整体福祉,而是维系统治联盟与供养庞大的国家基本盘——包括军事、警务、宣传、官僚体系及其附属利益网络。经济发展的动力因此被系统性扭曲:
只有当政权面临合法性危机、财政压力或社会动荡风险时,才会“恩赐式”地推动有限改革,以缓解矛盾、延续统治。

而那些真正可能赋权于民、分散权力、建立可预期法治秩序的市场化与制度化改革,在权贵眼中却构成根本威胁。正如哈耶克所言,计划体制最恐惧的,并非低效率,而是不可控的自发秩序;因为一旦社会拥有独立于权力之外的经济与组织基础,权力本身就将失去绝对支配地位。

第二种极端,则是政府权威与执行能力的全面溃散,沦为一个“空壳子政府”。一些南美国家或失败国家的经验表明,当国家无法提供基本安全、司法与公共品时,社会并不会自然走向自由与繁荣,而是陷入帮派化、武装化与寡头割据的状态。
这种情形同样印证了哈耶克的另一层判断:自由并不等同于无政府状态,自由需要一个受约束但有效的国家作为前提。

在这两种极端之间,前者——即“权贵垄断型体制”——往往表现出更强的表面稳定性与更长的治乱循环周期。但哈耶克提醒我们,这种稳定并非来自秩序,而是来自压制;并非源于共识,而是源于恐惧与依附。

当一个体系长期固化,只为上层建筑服务,而系统性剥夺大多数人的上升通道、尊严与选择权时,它实际上是在不断积累社会内部的破坏势能。这种势能或许在短期内被高压所掩盖,但一旦触发点出现,往往以极端形式爆发。

历史一再警示我们,一个“吃人”的体系,无论外表多么强大,其内部都蕴藏着自毁的种子。哈耶克所警惕的,正是这种从“为了效率”“为了公平”“为了稳定”出发,最终却走向全面强制与人格贬损的滑坡。

如果一个社会的上层建筑不能清醒地意识到:不给普通人以体面生存的空间、不给社会以和平博弈的渠道,其结果必然不是长治久安,而是周期性的全面崩坏——那么这种社会终将为其制度傲慢付出代价。

正如法国大革命,或中国历史上的黄巢起义(尽管性质与结果迥异),这些极端事件从不是历史的偶然,而是制度性堵塞和平变革通道后的必然回声。当“苟活”成为唯一理性选择时,砸碎旧体系便成为非理性的理性。

因此,一个国家和民族若想真正摆脱“专制体系下的苟活与治乱循环”,其根本出路并不在于等待“明君开恩”,而在于构建一个能够制度性约束权力的社会结构。
正如哈耶克所强调的:自由不是依赖统治者的美德,而是依赖制度对权力的限制。

这个结构必须确保社会各阶层,尤其是中下阶层,拥有真实、可持续的利益表达渠道与政治参与能力,使上层建筑清楚地认识到——权力的合法性并非源于历史、意识形态或暴力垄断,而只能源于被治理者的持续认可。

这正如亚伯拉罕·林肯在葛底斯堡演说中所言,一个能够长久存续的政府,必须是“民有、民治、民享”的政府。这不仅是道德宣言,更是对抗“通往奴役之路”的制度性答案。

同样,乔治·华盛顿以其行动示范了对权力集中与个人崇拜的警惕。他拒绝称王、主动交权,并非出于个人谦逊,而是清楚地理解:一旦权力不受节制,哪怕始于英雄,也终将终于暴政。
这种对最高权力的主动限制,正是对“权贵把持”体制最彻底的否定。

沪ICP备2024084999号-1