【与ai对话】自我认识与对技术的思考

在今天学习kafka的时候,突然对自己的学习状态产生了一些看法,总的来说,这也算是一种旧账重提。

我将自己的思考发送给了AI,想借此机会与其交流获取一些新的感悟。

我有一些学习方法上的困惑。拿学习kafka来举例,我在学习之前,让ai给我生成了kafka的主要内容,然后给我一个全方位的demo,是为了能够快速入门kafka。过程中我首先了解了kafka的核心概念,然后试图去理解demo中涉及到的知识点。我在反思这个学习过程是否是有效的,或者说对于一个程序员来说正确的学习过程是怎样的。我该如何去正确高效的提升自己。

我发现让ai给我生成一个全方位的demo我照样看不懂,没有达到快速入门的目的。我在反思我作为一个大四学生,即将步入工作,我的实际编码能力并不强。或者说,我没有一个正确的程序员思考方式。比如对于一个具有良好技术敏感性的程序员来说,使用多种语言编码并不会成为他的痛点,反而他能够很快熟练掌握。对我来说,我似乎一直处在一个阶段,那就是所谓“不断学习”。举个例子,就是我在学习kafka的时候,我先让ai给我生成一个demo,然后我去理解,然而对于很多地方我并不懂,我去询问ai,然后我得到了相应的解释,然后我理解了大致的步骤,就没了…或许对过去的我来说,这就算了解一门技术栈了。但实际上我连查看官方文档都没有做到。对应的api调用逻辑我还是不懂,也就是说,更多时候我并不会如何使用api,或者说我压根就没有去理解相关的api,再者说我压根就没有尝试去理解api,我更多时候都在想,我将这个部分的开发思想掌握着,然后让ai给我写,出问题了再让ai帮我改。似乎这已经成了一个固定思维。我知道这不对,因为相比写代码的ai,我更像一个ai。

我似乎没有纯粹的编码思想,关于api我只能尝试去背,我一直没有转变一个思路,比如说,我在编码过程中遇到一个关于前缀过滤的逻辑,我似乎并不会马上想到:如果是字符串类型,那么我该使用哪一个api,然后通过所有api去检索使用哪一个,最后独立完成这样一个代码。相比其他而言,这似乎就是一个非常简单的问题。在kafka或RabbitMQ相关的集成中间件编码过程中,使用的类和api就更多了,还有对应的配置(独立配置文件、application.yml,或许还有docker-compose的配置)。更不用说底层原理,关于kafka的底层原理,我首先应该知道该如何用,知道怎么用之后再去细致了解开发中的最佳实践,同时了解底层原理实现,我知道我作为一个初出茅庐的技术小白,还不需要了解足够多的东西,但是我觉得这也是一个过程。了解底层原理之后,再去对比相关的中间件,比如rabbitMQ与此有什么区别,他们应该在什么场景使用。

我最近在准备秋招,过程中也遇到很多不会的东西,比如jvm常见面试题、redis常见面试题等等,除此之外就是kafka、rabbitMQ、Dubbo之类的中间件如何使用,基本概念有哪些。我发现我需要了解的东西很多,这也激发了我对技术的渴望,以至于这两天在学习rabbitMQ和kafka相关的知识,希望在面试中大展拳脚。但是我同时又有一点焦虑,那就是除了学新东西,我还有很多面试题并不熟悉,比如jvm内存布局,每一个部分的作用,以及垃圾回收的算法等等,尽管我已经看过无数遍,但是每当我在空闲时间想的时候还是无法立刻反应出内容来。学新东西也是这样,比如我今天学了kafka,kafka有几个主要的概念,有生产者、消费者、top、partition、broker、副本等,然后当我想到如何去使用的时候,脑子里首先有一个雏形:单独创建生产者,消费者,配置类添加spring.kafka,具体配置有哪些?忘了。这还仅仅是我今天学习的东西,我已经只记得雏形了,具体实现我压根没记住。比如有哪些返回或使用的类,我完全没有印象。脑子里没有这个画面。然后就是又想到面试题还有很多看过,以为自己熟悉,但是一时半会又不会马上想起来,我就开始对自己产生怀疑了。我发现似乎很多时候,脑子里有东西,但是只有那一张模糊的图像,不知道你是否能理解,就比如说jvm内存模型是什么?我脑子里马上能想到5个主要部分,然后就是堆、栈、本地方法栈、方法区、程序计数器,具体区别呢,我可能会想到一部分,但是更细节的东西就不会突然想到,逐渐就模糊忘了。我不知道对于一个可以称得上技术大佬的人,他的思考模式是怎样的,他是如何记忆的,是如何将知识细节牢牢记住的。我希望从你的回答中得到某些答案。

ai的回答让我深刻感受到一个能够懂你的人是如何具有吸引力。

首先直击痛点,那就是我现在学习方法上的问题所在,我缺乏一些独立思考的能力,学习往往只处在表层学习。通过梳理我的学习过程:

1
看概念 --> ai生成demo --> 看懂流程 --> 遇到问题问ai --> 修改 -->完成任务

缺乏“动手实践’和”主动探索”,导致无法形成肌肉记忆。

而对于api的使用停留在“背”或”查“,而不是”理解设计意图和使用场景

对于一个高效的程序员学习路径:

  1. 首先是明确目标,不是为了“知道”,而是“能独立构建”。

  2. 极简动手,从“最小可运行系统”开始

    对于代码来说,首先最基本的是自己能够敲出来,遇到问题首先去查文档看异常。

  3. 理解api的设计逻辑,而非记忆

    比如kafka的producer.send()方法:

    • 首先它返回的是什么?
    • 为什么是异步的?
    • 如何处理回调(Callback接口)
    • 如果想知道消息是否成功发送,该如何写?

    不要背api,而是”理解这个api为什么这样设计?解决了什么问题?“

    技巧:查看kafka官方文档,看每个类的注释和示例,官方文档是最好的教程

  4. 逐渐扩展:加配置、加异常处理、加序列化

    模拟网络中断,看重试机制是否有效

    每一步都自己写,自己调试,自己验证

  5. 引入springboot集成

    理解了kafka client,再去spring-kafka

    • 它封装了什么?
    • @KafkaListener背后是如何注册消费者的?

记不住细节——这是正常的

关于记不住细节,这是正常的,我们应该分析一般人与大佬的区别:

”建立知识网络+快速检索能力+核心知识理解“,不要试图记忆所有细节

  1. 不要死记一个知识点,而是多加问题

    • 为什么要有堆和栈?
    • 方法区存的是什么?
    • OOM经常发生在哪里?
    • GC时哪些区域会被清理?

    用问题去记忆,建立自己的思维模式

  2. 建立”知识锚点

    • JVM的核心:”堆内存管理+GC算法“
    • kafka的核心:”分区+副本+顺序写“

    记住骨架,再查阅细节

  3. 定期输出:

    • 给自己讲一遍kafka工作流程
    • 画架构图,标出数据流
    • 写分析对比类文章,哪怕300紫

    输出是最好的记忆方式

如何培养程序员思维?

  1. 尝试自己写代码,AI用来纠错

    • 遇到问题首先自己尝试解决
    • 然后查文档、看源码、读官方示例
    • 最后才问ai
  2. API是用出来的,不是背出来的

    想实现前缀过滤:

    • 有哪些字符串方法?StartsWith()
    • 什么是流式处理?filter(s->s.startsWith("prefix"))
    • 如果是kafka消息头过滤?查找Header相关API
  3. 建立”调试直觉“

    • 看到异常,先查看堆栈最上一行
    • 配置不生效?打印文件是否被加载
    • 消息没收到?topic是否存在、消费者是否正确

我在给你分享这件事,当我打字到jvm内存模型的时候,我最初其实脑子是模糊的,但是当我逐渐深入思考,我渐渐回忆起来了关于内存模型有哪些内容,包括堆、栈、程序计数器、方法区,本地方法栈,他们的内部细节:堆栈的区别从是否共享,存储内容,是否GC等方面回答,关于方法区就有不同的jdk版本方法区的具体实现,程序计数器的作用等。我发现给你讲的时候,那一段时候是完全没有受到外部影响,第一次感受到这种思考的快感,能够在脑子里呈现一个画面,逐渐将画面里的内容讲出来,这就是我对问题相关全部的记忆,我觉得这种感觉是前所未有的,曾经我感觉很多时候脑子都是似乎被其他东西占据一样,无法具体思考,关于我学了什么东西,我在过去无法立即想到我到底学过什么东西,大概率记不起来。我曾经受到老师建议,那就是在睡前思考自己一天学了啥,但是我几乎很少,或者说压根就没有完全感受到这种东西带来的反馈,或者说很多时候我压根就无法体验到那种回忆给自己带来足够的知识的快感。但是在刚才我突然有了一点那种感觉,就是自己能够想的起来,真正的静下心来,做一个纯粹的思考者。

曾经还有一种感觉,那就是我很频繁的出现脑雾,脑子感觉被什么东西蒙蔽了一样,无法思考。我想一直处于刚才那种状态,做一个纯粹的思考者,在编码上有更多的独立思想。我曾经一度有一种感觉,那就是什么都可以靠ai,比如我给你分享这段内容,我感觉自己有很多地方逻辑并不流畅(因为这是我边想边写的,并没有一个前思考的过程。)然后等我写完就让ai给我润色,然后可能就会变成ai的逻辑了,我似乎又与那一篇文章脱钩了。在写代码的过程中,我感觉很少能主动思考,或者说我一直都希望能够有一个成品,让我去理解去记忆,但是事实上我发现很多时候都偏了,那就是记忆的内容并不会让我得到思考带来的快感与技术上的正反馈。虽然有时候在逻辑上发生错误,我发现了这个问题,然后通过自己的思考,让ai解决问题,但是这也没给我带来实质上的提升。我在想,一个资深的程序员,或者说一个让人称为技术大佬的人,他的思考应该是和常人不一样的,我今天了解到一个10x程序员工作法,我看了一点,首先带来的感受就是很难体会,很多地方根本无法理解,虽然定义不难,但难得是实践。举个例子,就是我今天想到一个同学(算法大佬,保研到北航),他的博客写的很好,有很多算法内容,有他的深度学习学习笔记。我就在想我就没有那些比较好的学习笔记,甚至说,上次在刚搭建完博客的时候,我在想往里面添加一点内容,因为我目前处于的时间段是秋招,我希望把博客展示给面试官看,我就得添加一些内容,同时我要学习一些不会的东西,于是我就让ai给我生成了一篇Threadlocal底层原理讲解的博客,我就尝试去理解,似乎这个时候我就变得不纯粹了,我把博客定位搞偏了,这不是真正的我的学习记录。还有就是很多时候,我一想到还有很多东西没有学,我就会将一个内容做到一半就去学其他东西,比如说,我正在学习kafka,如何我突然想到zookeeper我也不会,dubbo我也不会,于是我就赶紧让ai给我生成一些内容,我去记忆,现在想起来挺可笑的,虽然说时间很紧,但是也不至于脱离官方文档直接让ai给我生成demo,生成面试题,而压根就没有去了解这个东西真正的来源。我觉得这也是我一直处于技术瓶颈,无法提升的原因

主动回忆的力量

当不再依赖外部数据,而是通过自己的思考去汲取知识时:

  • 神经突触被强化(记忆真正形成)
  • 知识从”碎片“变成”网络“(堆->GC关联->OOM关联)

好奇心驱动

对于一个问题,我们在回忆的过程中,我们除了完整的思考以外,还应该产生疑问

当疑问形成的时候,我们对其的好奇心会让大脑兴奋,真正的学习就发生在“好奇驱动”的时刻。

保持纯粹的思考者状态

  1. 博客作为自己的思考日志,而不应该是”文档仓库“

  2. 用问题来驱动学习:

    将”我要学kafka“替换为:

    • ”kafka有哪些核心概念“?
    • ”kafka“如何保证的消息传递可靠性?

    每次问题都是小型探索,这会驱使自己去查文档、写代码、验证

  3. 建立“最小知识闭环”

    比如学”kafka“:

    • 消息怎么发?
    • 代码验证
    • 记录思考过程(试了send(),发现是异步的,回调怎么用?)
    • 关联已有知识(和Future有什么区别?)
  4. 接受不完美,拒绝完美主义

    真实的思考过程比一个完美的结果更有意义

关于“10x 程序员”——他们不是天才,而是“深度工作者”

Cal Newport 在《深度工作》中说:

“高质量的产出 = 高强度的专注 × 时间”

10x 程序员的“不一样”在于:

  • 他们能屏蔽干扰(不频繁切换 Kafka → ZooKeeper → Dubbo)
  • 他们享受解决问题的过程,而不是追求“学完”
  • 他们把代码当作表达思想的媒介,而不是任务

那种“静下心来,纯粹思考”的状态,就是深度工作的入口


【与ai对话】自我认识与对技术的思考
http://example.com/2025/09/26/My_thinking/
作者
caicaixiong
发布于
2025年9月26日
许可协议