Logo

site iconManatee LazyCat

懒猫微服CEO,Linux, Emacs开源社区从业二十余载。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

Manatee LazyCat RSS 预览

一个离不开折叠屏手机的研发

2026-04-06 00:00:00

我现在已经离不开折叠屏手机了,我给你们讲一下,一个研发的人为什么离不开折叠屏手机

  1. 因为它收起来的时候,它的屏幕是非常窄的,这个宽度就像iPhone 4的那个宽度一样,对于单手操作是非常友好。现在的手机屏幕默认太宽了,有时候你够不着,容易摔手机

  2. 展开的时候就可以左侧编程,右侧做测试。关于折叠屏手机的编程视频,可以看我上个推特

  3. 你出差的时候,折叠屏手机就是一个完美的电子书啊!完美的电子书啊!还是完美的视频播放器

最佳代理实践 (2026-4-6)

2026-04-06 00:00:00

自建VPS

今天这篇文章手把手教你怎么自建机场,方案:

  1. 丽萨 VPS: 有美国家庭 IP,方便注册 Claude Code 和 ChatGPT
  2. CloudFlare: 主要是买域名方便, DNS 设置也方便
  3. Hysteria2: QUIC 协议, 伪装性好, 对 FlClash 原生支持

下面就是手把手的教程, 熟手不超过 5 分钟, 跟着我一步一步的来

购买丽萨 VPS

  1. 打开 lisahost.com
  2. 购买美国 9929 网络, 我买的一年 499, 支付宝直接付, 会有一点税, 比 499 多一点
  3. 主机默认是 CentOS, 我重装成了 Ubuntu
  4. 记住你主机的三个关键信息 VPS IP、 随机端口、 实例密码 (这三个信息下面会用)

购买域名

  1. 注册 CloudFlare 账号
  2. 在左边面板找到 Domains -> Registrations, 搜索你想买的域名, 直接用信用卡买
  3. 购买的时候输入美国地址, 用 美国地址生成器 生成需要的信息填入

域名解析到VPS

  1. 进入 Cloudflare, 左上角输入框搜索 DNS, 找到 DNS->Record, 点击你刚才买的域名
  2. 找到蓝色的 Add Record 按钮, 点击添加域名记录
  3. 填写内容如下:
Type: A
Name: hy2
IPv4 address: 填写 VPS IP
Proxy status 开关: 把开关关闭, 从橙色开关切换为灰色, DNS Only (Cloudflare 默认对域名提供安全防护, 但是 QUIC 协议不支持 Cloudflare 代理,所以这一步最重要)

添加好了域名解析等 1 ~ 2 分钟, 一般你 ping hy2.你的域名.com 可以 ping 通就证明域名解析生效了

配置服务端

登录 VPS

ssh root@你的VPS-IP -p 你的随机 SSH 端口

安装 hysteria2

bash <(curl -fsSL https://get.hy2.sh/)

配置 hysteria2

nano /etc/hysteria/config.yaml

上面配置文件的默认内容删除,换成下面的配置

listen: :443

acme:
  domains:
    - hy2.你的域名.com        # ←←← 改成你设置的子域名
  email: [email protected]      # ←←← 改成你自己的邮箱(用于Let's Encrypt证书)

auth:
  type: password
  password: "你的超级强密码"   # ←←← 改成你自己的强密码, 后面 FlClash 客户端需要用到

masquerade:
  type: proxy
  proxy:
    url: https://www.bing.com
    rewriteHost: true

# 可选优化(推荐保留)
quic:
  initStreamReceiveWindow: 16777216
  maxStreamReceiveWindow: 16777216
  initConnReceiveWindow: 33554432
  maxConnReceiveWindow: 33554432
  maxIdleTimeout: 30s
  maxIncomingStreams: 1024
  maxIncomingUniStreams: 1024
  congestionControl: bbr

按 Ctrl + O → 回车保存 → Ctrl + X 退出

启动服务 hysteria2

systemctl restart hysteria-server
systemctl enable hysteria-server

systemctl status hysteria-server 命令看到是 active 就 OK 啦

安装 FlClash

ArchLinux 用下面方式安装 FlClash PC 客户端

yay -S flclash

配置 FlClash

把下面文件保存为 proxy.yaml, 然后把里面的域名改成 Cloudflare 买的子域名, 把密码改成 VPS 服务端 /etc/hysteria/config.yaml 里面设置的超级密码, 搜索我在下面模板文件中标注的 ←←← 注释

打开 FlClash PC客户端

  1. 打开 FlClash 第三个标签, 点击 “添加配置”, 选择 proxy.yaml , 保存
  2. 打开 FlClash 第二个标签, 选择 自建/家宽节点
  3. 打开 FlClash 最后一个标签, 应用程序里面打开 ‘自启动’、‘静默启动‘、 ’自动运行‘ 的选项
  4. 切换到第一个标签, 右下角点击开始, 搞定!

FlClash 手机端配置也是类似, 添加配置文件、 选择家宽、 选择自动运行。

# 锚点区
Proxy_first: &Proxy_first {type: select, proxies: [节点选择, 全部节点, 自建/家宽节点, 全球直连]}

Direct_first: &Direct_first {type: select, proxies: [全球直连, 节点选择, 全部节点, 自建/家宽节点]}

Include_all: &Include_all {type: select, proxies: [节点选择, 全部节点, 自建/家宽节点, 全球直连], include-all: true, exclude-filter: "(?i)(🟢 直连)"}

Urltest_Base: &Urltest_Base {type: url-test, include-all: true, tolerance: 20, interval: 300, max-failed-times: 1, hidden: true}

# 用于下载订阅时指定UA
global-ua: clash.meta

# 全局配置
mixed-port: 7890
ipv6: true
allow-lan: false
unified-delay: true
tcp-concurrent: true
log-level: warning
# interface-name: eth0  (路由器下根据情况指定出站接口)
authentication:
#  密码设置选项默认无
- ""
skip-auth-prefixes:
- 127.0.0.1/8
- ::1/128

geodata-mode: true
# GEO 文件加载模式(standard:标准加载器/memconservative:专为内存受限 (小内存) 设备优化的加载器 (默认值))
geodata-loader: standard
geo-auto-update: true
geo-update-interval: 48
geox-url:
  geosite: "https://hub.mirrors.2020818.xyz/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat"
  mmdb: "https://hub.mirrors.2020818.xyz/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.metadb"
  geoip: "https://hub.mirrors.2020818.xyz/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip.dat"
  asn: "https://hub.mirrors.2020818.xyz/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/GeoLite2-ASN.mmdb"

#  密码设置选项默认无
external-ui: ui
external-ui-url: "https://hub.mirrors.2020818.xyz/https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip"
# 下载面板地址可更换:https://github.com/MetaCubeX/metacubexd/archive/refs/heads/gh-pages.zip

# 匹配进程 always/strict/off
find-process-mode: strict
global-client-fingerprint: random
keep-alive-idle: 600
keep-alive-interval: 30

# 策略组选择和fakeip缓存
profile:
  store-selected: true
  store-fake-ip: false

# 流量嗅探
sniffer:
  enable: true
  sniff:
    HTTP:
      ports: [80, 8080-8880]
      override-destination: true
    TLS:
      ports: [443, 8443]
    QUIC:
      ports: [443, 8443]
  force-domain:
    - "+.v2ex.com"
  skip-domain:
    - "+.lan"
    - "+.local"
    - "+.localhost"
    - "+.home.arpa"
    - "localhost.ptlogin2.qq.com"
    - "+.msftconnecttest.com"
    - "+.msftncsi.com"
    - "Mijia Cloud"
    - "dlg.io.mi.com"
    - "+.push.apple.com"
    - "+.apple.com"
    - "+.wechat.com"
    - "+.qpic.cn"
    - "+.qq.com"
    - "+.wechatapp.com"
    - "+.vivox.com"
    - "+.oray.com"
    - "+.sunlogin.net"
    - "+.heiyu.space"
    - "+.lazycat.cloud"
  skip-src-address:
    - 6.6.6.6/32
    - 2000::6666/128
    - fc03:1136:3800::/40
    - 10.0.0.0/8
    - 172.16.0.0/12
    - 169.254.0.0/16
    - 192.168.0.0/16
    - fd00::/8
    - fe80::/10
  skip-dst-address:
    - 6.6.6.6/32
    - 2000::6666/128
    - fc03:1136:3800::/40
    - 10.0.0.0/8
    - 172.16.0.0/12
    - 169.254.0.0/16
    - 192.168.0.0/16
    - fd00::/8
    - fe80::/10

# 代理模式
tun:
  enable: true
  stack: gvisor
  mtu: 9000
  dns-hijack:
    - "any:53"
    - "tcp://any:53"
    - "any:853"
    - "tcp://any:853"
  auto-route: true
  auto-redirect: true
  auto-detect-interface: true
  strict-route: true
  route-exclude-address:
    - 6.6.6.6/32
    - 2000::6666/128
    - fc03:1136:3800::/40
    - "192.168.0.0/16"
    - "10.0.0.0/8"
    - "172.16.0.0/12"
    - "169.254.0.0/16"
    - "224.0.0.0/4"
    - "fd00::/8"
    - "fe80::/10"

# DNS模块
dns:
  enable: true
  cache-algorithm: arc
  listen: 127.0.0.1:1053
  ipv6: true
  prefer-h3: false
  respect-rules: true
  hosts:
    '+.local.localhost': 127.0.0.1
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  fake-ip-filter-mode: blacklist
  fake-ip-filter:
    - "+.lan"
    - "+.local"
    - "+.localhost"
    - "+.home.arpa"
    - "localhost.ptlogin2.qq.com"
    - "+.msftconnecttest.com"
    - "+.msftncsi.com"
    - "+.heiyu.space"
    - "rule-set:fakeip_filter_domain"
    - "geosite:cn,category-games@cn,private"
  default-nameserver:
    - system
    - 119.29.29.29
    - 180.184.1.1
  proxy-server-nameserver:
    - https://doh.pub/dns-query
    - https://223.5.5.5/dns-query
  direct-nameserver:
    - https://doh.pub/dns-query
    - https://223.5.5.5/dns-query
  nameserver:
    - https://dns.google/dns-query#节点选择
    - https://dns.cloudflare.com/dns-query#节点选择
  nameserver-policy:    
    "+.heiyu.space,+.lan,+.local,+.localhost,+.home.arpa,geosite:private":
      - system
    "+.googleapis.cn,+.googleapis.com,+.xn--ngstr-lra8j.com":
      - https://dns.google/dns-query#节点选择
      - https://dns.cloudflare.com/dns-query#节点选择
    "geosite:cn,category-games@cn":
      - https://doh.pub/dns-query
      - https://dns.alidns.com/dns-query

proxies: 
  - name: "🟢 直连"
    type: direct
    udp: true        

  - name: "懒猫微服"
    type: http
    server: 127.0.0.1
    port: 31085
    skip-cert-verify: true

  - name: "[自建 1] 美国家宽-HY2"
    type: hysteria2
    server: hy2.你的域名.com     # ←←← 改成你设置的子域名
    port: 443
    password: "你的超级强密码"    # ←←← 改成你自己的强密码
    sni: hy2.你的域名.com        # ←←← 改成你设置的子域名
    skip-cert-verify: false
    alpn:
      - h3
    udp: true

# 策略组
proxy-groups:
  - {name: 节点选择, type: select, proxies: [自建/家宽节点, 全部节点, CK 自用订阅请勿分享外泄], icon: "https://pub-8feead0908f649a8b94397f152fb9cba.r2.dev/select.png"}
  - {name: 自建/家宽节点, type: select, include-all: true, filter: "(?=.*(?i)(自建|CF|The_house|private|home|家宽|hgc|HKT|HKBN|icable|Hinet|att))", exclude-filter: "(?=.*(?i)(机场|Seattle))", icon: "https://pub-8feead0908f649a8b94397f152fb9cba.r2.dev/private_node.png"}
  - {name: STEAM,type: select, <<: *Proxy_first, icon: "https://pub-8feead0908f649a8b94397f152fb9cba.r2.dev/steam.png"}
  - {name: 全球直连, type: select, proxies: [🟢 直连, 🔗 代理], icon: "https://pub-8feead0908f649a8b94397f152fb9cba.r2.dev/direct.png"}
  - {name: 隐私拦截, type: select, proxies: [🚫 拒绝, ⚪ 丢弃 ,🟢 直连, 🔗 代理], icon: "https://pub-8feead0908f649a8b94397f152fb9cba.r2.dev/block.png"}
  - {name: Final, type: select, <<: *Include_all,  icon: "https://pub-8feead0908f649a8b94397f152fb9cba.r2.dev/final.png"}
  - {name: 反重力, type: select, include-all: true, filter: "(?=.*(?i)(自建|CF|The_house|private|home|家宽|hgc|HKT|HKBN|icable|Hinet|att))", exclude-filter: "(?=.*(?i)(机场|Seattle))", icon: "https://pub-8feead0908f649a8b94397f152fb9cba.r2.dev/private_node.png"}
  - {name: 全部节点, type: select, include-all: true, tolerance: 20, interval: 300, exclude-filter: "(?i)(🟢 直连)", icon: "https://pub-8feead0908f649a8b94397f152fb9cba.r2.dev/all.png"}
# 功能型代理组默认隐藏 start
  - {name: 🔗 代理, type: select, hidden: true, proxies: [节点选择]}
  - {name: 🚫 拒绝, type: select, hidden: true, proxies: [REJECT]}
  - {name: ⚪ 丢弃, type: select, hidden: true, proxies: [REJECT-DROP]}
# over
  - {name: CK 自用订阅请勿分享外泄, type: fallback, include-all: true, interval: 300, icon: "https://pub-8feead0908f649a8b94397f152fb9cba.r2.dev/fallback.png"}
  - {name: GLOBAL, type: select, include-all: true , proxies: [节点选择, 自建/家宽节点, 全部节点, 反重力, STEAM, 全球直连, 隐私拦截, Final, CK 自用订阅请勿分享外泄], exclude-filter: "(?i)(🟢 直连)", icon: "https://pub-8feead0908f649a8b94397f152fb9cba.r2.dev/global.png"}

rules: 
  - PROCESS-NAME,adb,全球直连
  - PROCESS-NAME,adb.exe,全球直连
  - PROCESS-NAME,懒猫微服,全球直连
  - PROCESS-NAME,lzc-core.darwin,全球直连,no-resolve
  - PROCESS-NAME,antigravity,反重力
  - DOMAIN-KEYWORD,antigravity,反重力
  - IP-CIDR,223.6.6.6/32,全球直连
  - IP-CIDR,120.53.53.53/32,全球直连
  - IP-CIDR,119.29.29.29/32,全球直连
  - IP-CIDR,180.184.1.1/32,全球直连
  - DOMAIN,doh.pub,全球直连
  - DOMAIN,doh-pure.onedns.net,全球直连
  - DOMAIN,dns.alidns.com,全球直连
  - DOMAIN,dns.google,节点选择
  - DOMAIN,dns.cloudflare.com,节点选择
  
  - DOMAIN-SUFFIX,googleapis.cn,节点选择
  - DOMAIN-SUFFIX,googleapis.com,节点选择
  - DOMAIN-SUFFIX,xn–ngstr-lra8j.com,节点选择
  - DOMAIN-SUFFIX,xn–ngstr-cn-8za9o.com,节点选择
  
  - DOMAIN-SUFFIX,gvt1.com,节点选择
  - DOMAIN-SUFFIX,gvt2.com,节点选择
  - DOMAIN-SUFFIX,gvt3.com,节点选择
  - DOMAIN-SUFFIX,googlevideo.com,节点选择
  - DOMAIN-SUFFIX,1e100.net,节点选择
  - DOMAIN-SUFFIX,ytimg.com,节点选择
  - DOMAIN-SUFFIX,ggpht.com,节点选择
  - DOMAIN-SUFFIX,gstatic.com,节点选择
  - DOMAIN-SUFFIX,googleusercontent.com,节点选择
  - DOMAIN-SUFFIX,googleapis.com,节点选择
  - DOMAIN-SUFFIX,android.com,节点选择
  
  - DOMAIN-SUFFIX,linux.do,节点选择
  - DOMAIN-SUFFIX,oa-sg1.2020818.xyz,全球直连
  - DOMAIN-SUFFIX,oa-us1.2020818.xyz,全球直连
  - DOMAIN-SUFFIX,2020818.xyz,节点选择
  - DOMAIN-SUFFIX,heiyu.space,懒猫微服
  - DOMAIN-SUFFIX,lazycat.cloud,全球直连
  - DOMAIN-SUFFIX,lazycat.ai,全球直连
  - DOMAIN-SUFFIX,lazycatmicroserver.com,全球直连
  - DOMAIN-SUFFIX,gitee.com,全球直连
  - DOMAIN-SUFFIX,tower.im,全球直连
  - DOMAIN-SUFFIX,zaomusic.com,全球直连
  - DOMAIN-SUFFIX,gvt1-cn.com,全球直连
  - DOMAIN-SUFFIX,gvt1.com,全球直连
  - DOMAIN-SUFFIX,hf-mirror.com,全球直连
  - DOMAIN,p.tencentmusic.com,隐私拦截

  - GEOSITE,category-ads-all,隐私拦截
  - GEOSITE,private,全球直连
  - GEOIP,private,全球直连,no-resolve
  - GEOSITE,category-games@cn,全球直连
  - GEOSITE,category-public-tracker,全球直连
  - GEOSITE,openai,节点选择
  - GEOSITE,category-ai-!cn,节点选择
  - RULE-SET,ai_domain,节点选择
  - GEOSITE,youtube,节点选择
  - GEOSITE,google,节点选择
  - GEOIP,google,节点选择,no-resolve
  - GEOSITE,github,节点选择
  - GEOSITE,onedrive,节点选择
  - GEOSITE,microsoft,节点选择
  - GEOSITE,apple,全球直连
  - GEOSITE,telegram,节点选择
  - GEOIP,telegram,节点选择,no-resolve
  - GEOSITE,facebook,节点选择
  - GEOSITE,netflix,节点选择
  - GEOSITE,disney,节点选择
  - GEOSITE,hbo,节点选择
  - RULE-SET,emby_domain,节点选择
  - GEOSITE,spotify,节点选择
  - GEOSITE,bahamut,节点选择
  - GEOSITE,tiktok,节点选择
  - GEOSITE,bilibili,全球直连
  - RULE-SET,bilibili_ip,全球直连,no-resolve
  - GEOSITE,biliintl,节点选择
  - GEOSITE,category-media-cn,全球直连
  - GEOSITE,steam,STEAM
  - GEOIP,twitter,节点选择,no-resolve
  - GEOIP,ai,节点选择,no-resolve
  - GEOSITE,gfw,节点选择
  - GEOSITE,geolocation-!cn,节点选择
  - GEOSITE,cn,全球直连
  - GEOIP,private,全球直连,no-resolve
  - GEOIP,cn,全球直连,no-resolve
  - MATCH,Final

rule-anchor:
  ip: &ip {type: http, interval: 86400, behavior: ipcidr, format: mrs}
  ip_text: &ip_text {type: http, interval: 86400, behavior: ipcidr, format: text}
  ip_yaml: &ip_yaml {type: http, interval: 86400, behavior: ipcidr, format: yaml}
  domain: &domain {type: http, interval: 86400, behavior: domain, format: mrs}
  domain_text: &domain_text {type: http, interval: 86400, behavior: domain, format: text}
  domain_yaml: &domain_yaml {type: http, interval: 86400, behavior: domain, format: yaml}
  class: &class {type: http, interval: 86400, behavior: classical, format: text}
  class_yaml: &class_yaml {type: http, interval: 86400, behavior: classical, format: yaml}

rule-providers: 
  emby_domain: { <<: *domain, url: "https://hub.mirrors.2020818.xyz/https://raw.githubusercontent.com/Lanlan13-14/Rules/refs/heads/main/rules/Domain/emby.mrs" }
  ai_domain: { <<: *domain, url: "https://hub.mirrors.2020818.xyz/https://raw.githubusercontent.com/Lanlan13-14/Rules/refs/heads/main/rules/Domain/ai.mrs" }
  bilibili_ip: { <<: *ip, url: "https://hub.mirrors.2020818.xyz/https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/refs/heads/meta/geo-lite/geoip/bilibili.mrs" }
  fakeip_filter_domain: { <<: *domain, url: "https://hub.mirrors.2020818.xyz/https://raw.githubusercontent.com/Lanlan13-14/Rules/refs/heads/main/rules/Domain/fakeip-filter.mrs" }

懒猫微服的配置

FlClash默认用Tun模式,会接管手机和电脑所有流量,上面的配置文件已经在规则上把微服的域名排除在外,还需要在客户端进行下面配置,才能保证懒猫微服直连:

  1. PC端和移动端: 点击 ‘工具’ 标签, 选择基本配置,打开 IPv6 开关
  2. 移动端: 点击 ‘工具 -> 访问控制’,右上角点击‘开启’,搜索懒猫微服并勾选,点击保存,把懒猫微服排除在 VPN 之外

这两点配置好以后,重启 FlClash 和懒猫微服客户端, 就可以同时科学上外网并能直连回家中的微服啦。

真正好用的CC Switch命令行

2026-04-04 00:00:00

最近公司懒猫微服的LightOS发布了,我每天都在微服的Webshell做AI编程,有时候遇到一个AI中转站挂了就需要在命令行环境切换AI中转站,本来电脑上用 cc-switch 真的很好用,所以就下载了 cc-switch-cli

用的时候就发现,天啊,这是怎么设计的?虽然非常像GUI版本的 cc-switch, 但是交互真的超级超级难用,用了半天都不知道怎么编辑和添加管理.

清明节刚好从菜地干完活回来,在家编写的小龙猫的时候,就顺手重新写了一个 cc-switch 的命令行版本 cctui, 按照 lazygit 的风格重新设计, 极简, 只有添加,删除,编辑的功能,其他功能一概没有,全程在底部用 lazygit 风格的快捷键保障,保证第一天用cctui的人都可以流畅操作.

喜欢用命令行的朋友,欢迎使用cctui,欢迎发PR, happy hacking!

AI会让软件业更繁荣

2026-04-03 00:00:00

AI不会干翻软件业,只会让软件业更繁荣,因为制造软件的成本降低了,原来只有专业软件公司能造的软件,现在普通公司也能造了

换而言之,AI会增加软件业的需求,打个比方,蒸汽机发明后,农民会失业,但是用工却变多了,因为工人多了很多

老程序员会被各大行业抢着要,应届毕业生很难很难找到工作,因为有了AI,企业对新人的成长和培养包容度会降低很多,企业宁愿高薪招老程序员,也不愿意招新手程序员,因为新手程序员相对于AI来说,时间成本太贵

当软件不再稀缺,稀缺的将是思想

2026-03-31 00:00:00

过去的软件行业,核心竞争力建立在高门槛、长周期和重交付上。谁能组织更大的工程团队,谁能把复杂需求翻译成稳定的系统,谁就更有优势。但 AI 一旦把理解、推理、生成和修正的能力继续往前推,软件行业最深层的变化就不再只是效率提升,而是整个行业属性会被改写。软件会越来越像一种即时响应、按需生成、持续迭代的服务,软件制造的门槛会被压低,而真正拉开差距的,将从写代码的能力,转向表达问题、组织上下文和提出独特思想的能力。

AI的推理速度再增加100倍,软件行业就彻底变成了服务行业

今天的软件交付,依然带着很强的制造业气质。产品先定义需求,设计师先画界面,工程师再实现功能,最后上线给用户使用。整个过程像工厂流水线,软件是被生产出来的,用户只能在既定功能里做选择。

但如果 AI 的推理速度、上下文理解能力和执行能力再往前跨一个数量级,软件就会从先造好再卖,变成边理解边服务。用户不需要等待功能排期,也不需要先适应软件的结构,而是直接表达目标:我要完成什么,我遇到了什么问题,我想达到什么效果。软件则根据目标即时生成页面、流程、规则、自动化动作和数据组织方式。

到那时,软件的价值不再是功能清单,而是持续解决问题的能力。软件公司看起来更像服务公司,软件本身则更像一个随时待命、持续演化的服务接口。

AI不会让软件消失,只会让软件成万倍的增长

很多人会误以为,既然以后和 AI 对话就能完成事情,那传统软件是不是会越来越少。事实更可能相反。正因为生产软件的成本被压到极低,过去大量不值得做的需求,都会变成可以被实现的小工具、小流程、小系统和小服务。

以前一个需求要经过立项、设计、开发、测试、部署,成本太高,所以绝大多数长尾需求都被放弃了。未来只要一个想法足够清晰,一个具体场景足够真实,软件就可以被快速生成和持续调整。过去只有大公司才配拥有的内部系统,未来个人、小团队、小商家甚至家庭都可能随手拥有。

所以 AI 不会让软件消失,它只会让软件像空气一样弥漫。软件不再是少数产品经理和工程师集中生产的大件商品,而会变成无数细小、灵活、贴身的能力单元,渗透到几乎所有场景里。

以前源代码是软件的核心,现在Markdown是软件的核心

这句话并不是说代码真的不重要了,而是说软件生产的核心资产正在变化。过去最重要的是源代码本身,因为只有把代码一行一行写出来,系统才真正存在。谁掌握代码,谁就掌握软件。

但在 AI 时代,越来越重要的不是怎么写,而是你到底想让它做什么。Markdown 在这里代表的不是一种具体语法,而是一种更接近自然语言的组织方式:目标是什么,规则是什么,边界是什么,例子是什么,风格是什么,哪些不能做,哪些必须做。也就是说,描述、约束、文档、上下文和知识库,会越来越成为软件质量的源头。

源代码不会消失,但它会越来越像一种中间产物。真正决定软件上限的,往往是前面的表达质量。谁能把业务讲清楚,把规则写清楚,把例子给清楚,把上下文组织清楚,谁就更容易让 AI 产出高质量的软件。

原来古法编程的成本产生的稀缺性将不存在,未来利用AI软件制造工具的独特思想,将是稀缺性

过去软件行业的稀缺,来自掌握复杂技术的人太少。你要懂语言、懂架构、懂数据库、懂网络、懂部署、懂调试,还要有足够长时间的训练,才能稳定造出真正可用的软件。这种门槛天然制造了稀缺性,也构成了行业壁垒。

但当 AI 能把大量编码、重构、测试、排错、文档生成和系统拼装都变成低成本能力时,传统古法编程所形成的很多稀缺性就会被快速冲淡。不是工程能力完全不重要了,而是单纯依靠执行层面的技术壁垒,将越来越难以长期构成护城河。

未来真正稀缺的,会是你能看到什么别人没看到的问题,你能提出什么别人没想到的产品形式,你能不能把模糊需求变成清晰上下文,你能不能借助 AI 工具把一个独特判断快速变成真实的软件服务。软件制造工具会越来越普及,但独特思想、独特视角、独特审美和独特判断,仍然只属于少数人。

软件不会消失,程序员也不会消失,但软件行业的重心一定会迁移。制造会越来越自动化,服务会越来越即时化,代码会越来越被意图驱动,真正有价值的人会越来越像思想的制造者和上下文的组织者。当造软件这件事不再稀缺,人的判断力和创造力,才会第一次站到行业正中央。