跳到主要内容

The-trap-of-behavior

这篇是为数不多涉及技术的文章。希望通过这个案例,分享一段经历与思考,加速我们在人生中遇到困难时的解决方法,尤其在那些孤独无助的窘迫场景下,更好的思考路径,解决问题,走出沼泽。希望它对你有帮助。

子曰:学而不思则罔,思而不学则怠。 读书时思考往往太少。战术上的勤奋不能掩盖战略上的懒惰。战略是需要深度思考的。

1 背景

2024~2025 的春节,有充足的时间安静做一款产品,www.filone.com ,中间用到了一些自己不太熟悉的技术,离开熟悉的环境,一路颠沛流离,最终把第一版产品的一些核心功能搞定了。函数计算,用户认证(采用的第三方 OpenID,OAuth 平台,花了不少时间读文章,关系数据库到文档数据库),这期间还做了一些 AI 辅助编程。产品架构采用了多个云厂商不同产品的不同技术,然而所有这一切和后来完成的历程相比,最心累的不是面对新领域的未知感。真正无助的困境往往发生在你从未预知到的地方,而不是那些已经预见到的。

2 问题

在完成计划内的一些核心功能,尤其那些曾以为自己很难搞定,但最终搞定了的问题后,对自己信心爆棚,“强的可怕”,达到了愚昧山峰。然后决定把整个认证与权限逻辑更新一下,采用后端认证,并读了样例代码,后来这段样例代码,我都能背下来了。问题出在这个自以为很简单的改造,整整花了我夜不能寐的 4 天。问题是,如何把 MSAL-React 认证从 SPA 单页认证改造到 后端认证。 我阅读了一段 express 的代码,很简单,也全部看懂了,然后计划模仿换到 NextJs 15 版本的 “单页应用 + 服务端”,混合渲染框架,在这个过程中,有以下几个问题需要面对:

  1. 是否需要 msal-react, msal-node 配合使用
  2. 如果实现 NextJs 的后端 session

基于过往的编程经验,我认为这两个问题不是很复杂 ,并且还有 AI 编程助手的辅助。就这样,我踏上了旅程。

3 过程

整个过程可以分为三个阶段:

  1. 分析报错,基于自我认知,提示词给 AI , 让它生成,至到放弃,决定自己解决;
  2. 自己解决,基于认知,调试,调试,再调试,问题依旧,回退到单步代码调试;
  3. 单步调试,验证,分析报错,查找知识,根据知识,思考分析,最终解决。

其中调试用了至少 2 个半天,具体的过程不在这里表述。关于技术部分的简述引用为下:

问题的第一关,NextJs 实现类似 Express Session 的功能,获取用户登录状态,研究了一下,基于 Cookie ,可问题是不知为什么,表征用户状态的 session 在 express 中那么简单的代码,在我的环境死活没办法获得用户 http 请求中的 Cookie ,一度怀疑人生。开始各种测试,寻找 AI 解答,直到放弃,发现这个问题 AI 帮你解决不了,你必须要自己上。

怎么办? 这感觉就像你当了一把创业公司 CEO,融资也到位了,员工也都就绪,包括你自认为的最强团队。但你们在通往梦想征途的路途中,遇到了一个不曾预见的问题,你看到你的团队已经非常努力,你也知道他们曾经的实力,但当下摆在你们面前的问题,就是解决不了。

现实中我们往往有两种办法: 1. 继续解决,必须解决; 2. 回退到自己曾经知道的方法,再来一遍,最笨的办法,往往也是有效的。

我可以选 2 ,但这样我没有成长,问题还在那里,并且我知道他一定是可以解决的。借助于 AI 编程,我发现代码的速度的确飞速增长,完成任务变成了自然语言对话。在早期踩过几次 AI 编程的坑,积累了自认为更好的使用能力之后,看到任务一次又一次准确的完成,我甚至都懒得审阅他生成的代码。直到直到,这一次,一遍又一遍,我知道他搞不定了。当然也可能是我的使用方法不够智能。 总之,必须我亲自出马,搞定这个问题。你是最后一档防线,所有人的兜底。同时也暗示我们,你的认知是一家公司能力的边界,一将无能累三军,不提升自己的认知,给你一家 500 强公司和最强团队,前景也可能是倒闭。

4 分析

问题的最后,答案当然是搞定了。 可是在这个过程当中,我认为耗时太久了,整整 4 天,废寝忘食,一行一行的调整,在企业中这样的效率,我想是不能接受的,这也是能力的考验。分析下来,我想有以下 4 点:

  1. 虽然现在有了 AI 辅助编程,自动代码生成,但这并不意味者,你可以偷懒,全部交给 AI 。这是最重要的一课,就如同,“猛将必发于卒伍,宰相必取于州郡”,你可以是一名将军,但将军一定要了解士兵的工作,并且把你放在那个位置,你同样能做好一名士兵! 当然在足够大的组织中,也许会有另外一种方法论。但我相信做为一名普通人,我们面临的大多数问题和在社会中的组织层级,这一条仍然有效。
  2. 行动的陷阱。在盲目行动前,请进行有深度的思考,而不是懒于思考。也许是我所受教育的思维惯性,导致我常常忘记了,或者说是懒惰于深度思考,更喜欢直接上手试验,就如同指挥让 AI 干活的时候,和自己初步尝试调试的时候,也许是 AI 太能干,养成我的思维懒惰,没有预见到问题的严重性,和需要我扮演的角色,或者更清晰的说,我想是没有看到自己的未知,这是导致问题迟迟没有解决的最终原因。就如果历史上许多强盛的政权,最终被自己所奴役的对象推翻,我想这就是统治者的堕落。那么为什么会导致这种情况的发生?结合最后问题解决的答案,反思整个过程,我想是日常行为、教育差别、导致的思维惯性!!! 这次我所学到的最重要的一课是:“思考 ”。重新思考 我所熟知的那些概念,深刻理解并认知这些概念,纠正我的学习方式为对名词概念的深刻洞察与理解,而不是囫囵吞枣,这是我对抗 AI 时代和保持创新能力的核心要素。就如同这次的问题,是我长时间没有写代码,或做类似有挑战的事情 ,没有发现自己在平常工作中的思维惯性,对知识只求发散,越多越好,不求甚解,不具备本质的推导理解 ,直到这次事件让我重新审视我的学习方式!!(简单说就是读书时要多做证明题,对知识点,事务本质的理解能力)

5 成长

反思完上面的过程,想起一个故人,坐标杭州,时间 2023 年,当时在一个项目上和对方沟通的整个过程,我深深感受到对方做为一个技术负责人,对我们的产品刨根问底,层层分析那种精神和思维方式,让我从他的问题,对我们自身的产品有了更深的认知,和对自我的审视。说到成长,这件事情的成长,我在网上找了一篇文章,我想很好的阐述了这份成长指南。

链接如下 :

你距离一名优秀的程序员有多远?兴哥告诉你必备的三大能力_乔布斯 优秀的工程师-CSDN 博客

把部分内容摘超如下

一句优秀的工程师,他的作用顶得上 50 名普通工程师。(这里的工程师指程序员)--- 乔布斯

成为一名优秀计算机和软件工程师你必须具备三种能力:

  1. 裸编程能力;
  2. 调试能力;
  3. 理解底层系统的能力。

我认为核心的只有 2 条: 理解底层系统的能力,在此之上用好生产力工具。

这次问题,为什么我花了那么久时间,最后细节描述如下:

  1. 对 AI 所写的代码不求甚解,HTTP 状态码的忽视,导致没有意识到 307 重定向产生的后果,迟迟没有找到一个 “URL 不可用报错的原因”。
  2. 对 Cookie 机制的浅理解 ,导致花了更多时间
  3. 对 CORS 的不求甚解,导致排故迟迟没有进展
  4. 对 HTTP ,请求,响应,事件流,结合重定向机制的缺乏经验,导致不得不亲自试验
  5. 对 NextJs 客户端渲染,服务湍渲染,相结合的架构实现,未做底层思考与理解,导致的思维缺陷。

而所有这些结合在一起,最终形成了一场灾难,也就是我面临的痛苦,我想这也是10 倍程序员和一般程序员的在学习上的差别。幸运的时,今天,借助先进的互联网和 AI 智能产品,加速了我解决问题的过程,虽然用了 4 天,但总算独立解决了。更珍贵的是这次反思让我重新审视了自己的思维陷阱,不良行动习惯,为未来的成长开启新的篇章。