昨天,在一次团队站立会议上,一位初级开发人员问我:“你怎么记得住这些东西?”我笑了。“我记不住。我每天都会用谷歌搜索。”
关注「索引目录」公众号,获取更多干货。
引言:忏悔
让我告诉你一个在技术面试或 LinkedIn 帖子中没人谈论的秘密:
我是一名拥有 8 年经验的高级软件开发人员,我会每天、甚至每小时都会在 Google 上搜索一些基础内容。
上周二,我花了 20 分钟在 Google 上搜索“如何在 JavaScript 中反转数组” ,因为我记不清它是.reverse()还是。.reversed().reverseArray()
它是.reverse()。
我已经使用过它一千次了。
我还是忘了。
你知道吗?谷歌、亚马逊和微软等公司 58% 的科技工作者都觉得自己像个骗子。你旁边那个似乎无所不知的高级开发人员?他们甚至会用谷歌搜索基本的语法错误。
这篇文章是我的忏悔。或许也是你的忏悔。我们是时候停止伪装了。
第一部分:本周我在 Google 上搜索的内容(我没开玩笑)
让我打开我的浏览器历史记录,把自己暴露出来。以下是我过去5天的真实搜索记录:
周一
-
“css flex 对齐项目中心不起作用”(我忘记设置了 display: flex with a height of 100dvh) -
“TypeScript 接口 vs 类型”(第 100 次) -
“如何退出 vim”(我是一名高级开发人员,但我仍然被困在 vim 中)
周二
-
“react useEffect 清理功能”(我知道这个。我只是……需要检查一下) -
“git revert vs reset vs restore”(哪一个再次删除提交?) -
“javascript 按日期对对象数组进行排序”(默认是升序还是降序?)
周三
-
“如何将 div 居中”(经典) -
“nodejs 读取文件”(是 fs.readFile吗fs.readFileSync?我总是忘记)
周四
-
“docker compose up vs docker-compose up”(有破折号还是无破折号?) -
“SQL 连接类型可视化”(我每次都需要那个维恩图) -
“正则表达式电子邮件验证”(永远都不要记住这个)
星期五
-
“如何撤消尚未推送的 git commit”(这实际上是我搜索次数最多的查询) -
“javascript 数组方法备忘单”(map、filter、reduce... 各自起什么作用?) -
“css 网格模板列”(重复(自动调整、最小最大……某某某)
每。周。
我应该成为我们团队的“专家”。
第二部分:我们在求职面试中说的谎言
以下是我在上次面试中所说的话:
面试官: “你对 React 的熟练程度如何?”
我: “非常熟练。我已经使用 React 5 年了。”
以下是我没有说的话:
我(内心独白): “我每天都用 React,但每次需要用到它的时候,我还是会去 Google 一下‘useContext 是怎么工作的’,因为我从来不用 Context。我把之前的项目中用到的 useEffect 模式都复制粘贴过来了。更别提 useReducer 了。”
面试官: “你使用 TypeScript 的经验如何?”
我: “非常广泛。我已经将几个项目迁移到 TypeScript 了。”
翻译: “我知道如何为函数参数添加类型。对于任何复杂的东西,我会谷歌一下或者打字any,然后继续。TypeScript 的错误信息可能就像古希腊语一样。”
面试官: “你对算法的掌握程度如何?”
我: “没问题。我理解时间复杂度,可以实现常见的算法。”
翻译: “我上周在谷歌上搜索了‘二叉搜索树实现’,然后复制粘贴了它。我实在没法从头开始写。大 O 符号?我依稀记得 CS50 里有。”
我们都在玩同一个游戏,假装我们知道的比我们实际知道的更多。
第三部分:“高级开发人员”的真正含义
以下是人们对“高级开发人员”的理解:
❌ 记住每一种编程语言
❌ 从不犯错
❌ 第一次尝试就能写出完美的代码
❌ 永远不需要 Stack Overflow
❌ 知道所有答案
“高级开发人员”的实际含义如下:
✅ 知道用 Google 搜索什么
✅ 能够阅读文档(即使文档很糟糕)
✅ 已经犯过所有错误(所以知道什么不该做)
✅ 能够有效地进行调试
✅ 知道何时寻求帮助
初级和高级之间的区别不在于知识,而在于模式识别和解决问题的速度。
真实场景:初级开发人员 vs 高级开发人员
问题: “按钮未提交表单。”
初级开发人员:
-
恐慌 -
谷歌搜索“按钮不起作用” -
阅读 10 篇不相关的 Stack Overflow 帖子 -
尝试随机解决方案 -
破坏其他东西 -
3小时后:仍然损坏
高级开发人员:
-
打开开发控制台(第一直觉) -
看到错误:“form.submit 不是一个函数” -
谷歌确切的错误信息 -
立即找到 Stack Overflow 答案 -
意识到有一个名为的变量 submit与本机方法冲突 -
5分钟内修复
高级开发人员知道答案吗?不知道。
他们知道怎么找到它吗?是的。
这就是区别。
第四部分:我反复用谷歌搜索但永远记不住的东西
即使是经验丰富的开发人员也记不住很多东西,因为你不会每天都用到所有东西。以下是我在 Google 上搜索过 50 多次的东西:
1. Git 命令
# Things I Google constantly:
git revert
git reset
git cherry-pick
git rebase
git stash pop vs git stash apply
我使用 Git 已经 9 年了。我仍然记不住reset --soft、reset --mixed和之间的区别reset --hard。
每次我需要撤消某些操作时,我都会回到 Google:“git undo last commit but keep changes”
2. CSS Flexbox 与 Grid
/* I have this Googled monthly: */
.container {
display: flex;
justify-content: ??? /* center? space-between? I forget */
align-items: ??? /* center? stretch? help */
}
我已经创建了 100 多个响应式布局。但每次我都需要那个可视化的指南。
3. 数组方法
// Which one flattens arrays?
.flat()
.flatMap()
.flatten() // this doesn't exist but I Google it anyway
// Which one adds items?
.push() // mutates
.concat() // doesn't mutate
// I mix these up constantly
4. Async/Await 与 Promises
// Every few months I forget:
async function getData() {
const response = await fetch(url)
const data = await response.json()
return data
}
// vs
function getData() {
return fetch(url)
.then(response => response.json())
.then(data => data)
}
我知道两种方法都有效。我忘了哪个更适合什么用途了。不过谷歌知道。
5.正则表达式
// I will NEVER memorize regex
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ // Googled this 10000 times
// Also this:
const phoneRegex = ??? // No idea, straight to Google
任何说他们不使用 Google 正则表达式的人都是在撒谎。
第五部分:谷歌耻辱堂
让我分享一下作为一名“高级”开发人员,我在 Google 上搜索过的最尴尬的事情:
我应该知道的基础知识
- “如何在 JavaScript 中声明变量”
(我慌了。是 var、let还是const?2025 年了,我仍然怀疑自己) - “undefined 和 null 之间有什么区别?”
(我知道这个。我也教这个。我仍然会用 Google 来确认) - “如何编写 for 循环”
(经典语法 forEach???map我在编码面试时一片空白)
“我应该被解雇”的搜索
- “如何在 Mac 上打开终端”
(我在会议上展示我的屏幕。我愣住了。记不起快捷方式了) - “JavaScript 如何实现两个数字相加”
(我得承认,我已经筋疲力尽了。另外,我忘了它是否 +也适用于字符串) - “什么是 html”
(我正在写文档,对它的定义犹豫不决。冒名顶替综合症严重影响了我的工作)
诚实的人
- “高级开发人员冒名顶替综合症”
(这让我陷入了“我是否有资格胜任我的工作?”的困境) - “作为一名程序员,用谷歌搜索所有东西是正常的吗?”
(剧透:是的。谷歌搜索是一项技能,擅长谷歌搜索可以让你成为一名优秀的程序员) - “如何退出 vim”
( :q!或者:wq?或者是:exit?帮助。)
第六部分:为什么小辈们认为我们是巫师
初级开发人员看着我的工作并认为我是某种编码向导。
他们看到的是:
-
我打字很快 -
我快速修复错误 -
我自信地编写代码 -
我很少陷入困境
实际发生的情况:
-
我打字很快,因为我已经复制粘贴了这个模式 1000 次 -
我修复错误很快,因为我之前也犯过同样的错误 -
我能自信地编写代码,因为我 5 分钟前就在 Google 上搜索过解决方案 -
我很少遇到困难,因为我知道如何有效地使用谷歌
速度的幻觉
在脚本式教程视频中,开发人员工作速度非常快,因为他们已经构建了应用程序,并且知道如何解决问题。但实际上,这需要更长的时间。
初级人员在教程中看到的内容:
“我将在 10 分钟内构建这个身份验证系统!”
现实:
-
2 小时谷歌搜索 JWT 实现 -
1 小时调试为什么令牌没有被发送 -
30 分钟搞清楚 CORS -
1 小时后才意识到自己忘记了哈希密码 -
总共4小时
第七部分:“知道”与“发现”的真相
观察经验丰富的开发人员犯的错误、走错的方向或在谷歌上搜索,对于初级开发人员来说非常有帮助。
这是软件开发的肮脏秘密:
你不需要知道一切,你需要知道如何找到一切。
我实际记住的内容(简短列表)
-
基本语法(变量、函数、循环) -
核心概念(范围、提升、闭包) -
如何使用调试器 -
如何阅读错误消息 -
如何有效地使用谷歌
我每次都会用 Google 查找的内容(长列表)
-
其他一切
任何开发人员都不可能了解所有事情。技术栈太庞大了。框架更新太快了。语言不断添加新功能。
如果您记住了 API,那么您就做错了。
第 8 部分:谷歌搜索的艺术(高级技能)
让我教你真正的高级技能:如何像专业人士一样使用 Google。
第一级:初级谷歌搜索
搜索: “按钮不起作用”
结果: 1000 万个不相关的结果
浪费时间: 2小时
第 2 级:中级谷歌搜索
搜索: “react 按钮 onclick 不起作用”
结果:更好,但仍然通用
浪费时间: 30分钟
第 3 级:高级谷歌搜索
搜索: “react button onclick event.target undefined typescript”
结果:确切的 Stack Overflow 答案
节省时间: 2分钟
高级开发人员 Google 公式
- 包含的技术:
“React”而不仅仅是“JavaScript” - 包含错误消息:
来自控制台的精确文本 -
如果相关,请包含上下文: “typescript” - 添加年份:
“2025”以过滤旧答案
例子:
❌ "how to fetch data"
✅ "react 19 fetch data async await typescript 2025"
高级技术
使用站点操作符:
site:stackoverflow.com react hooks
site:github.com typescript error
使用引号进行精确匹配:
"TypeError: Cannot read property 'map' of undefined"
排除结果:
react hooks -class components
擅长谷歌搜索可以节省大量的开发时间。
第九部分:冒名顶替综合症谈话
让我们来讨论一下这个显而易见的问题:冒名顶替综合症。
如果您曾经觉得自己像个骗子,并且疑惑“我真的是一名开发人员吗,我知道什么,我只知道 StackOverflow、YouTube 和谷歌搜索”,那么您并不孤单。
我的冒名顶替综合症时刻
周一早上站立会议:
经理: “Elvis,API 集成做得太棒了!”
我(表面上): “谢谢,很简单。”
我(内心): “我从 Stack Overflow 复制粘贴了 80% 的内容,虽然不完全理解 JWT 的工作原理,但它通过了测试,所以……🤷♂️”
代码审查:
初级开发人员: “哇,你怎么知道在这里使用 WeakMap?”
我(对外): “性能优化。”
我(内心): “我在 Google 上搜索‘javascript 内存泄漏修复’,然后点击了第一个链接。”
技术面试(作为面试官):
候选人: “我不记得 reduce 的具体语法...”
我(对外): “没关系,理解这个概念很重要。”
我(内心): “兄弟,我每次都用 Google 搜索 reduce。你真棒。”
现实检验
谷歌、微软、亚马逊、Facebook 和苹果公司 58% 的技术员工面临冒名顶替综合症。
那个说话自信满满的 CTO?他们醒来后浑身冷汗,怀疑自己是不是犯了一个可怕的错误。
那个人人都敬佩的建筑师?他们正在谷歌搜索基本的语法错误。
你并不孤单,你很正常。
第 10 部分:作为一名初级开发人员,我希望了解的事情
如果我能回到过去,和年轻时的自己谈谈,我会这样说:
1. 谷歌搜索是一个功能,而不是一个 Bug
初级的我: “我不需要谷歌这个。真正的开发人员知道这些东西。”
资深的我: “真正的开发人员知道如何使用 Google。那些假装不知道的人是在撒谎。”
2. 你会忘记语法——这没关系
即使是经验丰富的开发人员也无法记住很多东西,因为你不会每天都使用所有东西,所以你会忘记一些事情。
我至少忘记了 50 次 React Context 语法。每次我都得自己查找或者从项目中的其他文件复制粘贴。
3. 复制粘贴不算作弊
初级的我: “我应该从头开始写所有内容才能真正学到东西。”
资深的我: “我已经把整个身份验证系统复制粘贴过来了。你只要明白你粘贴的是什么就行了。”
4. 没有人无所不知
在科技领域,不可能事事精通。科技发展如此之快,没有人能够真正掌握所有的技术和概念。
你的工作不是了解一切。你的工作是解决问题。
5. 犯错是工作的一部分
即使是经验丰富的开发人员也会花费数小时来解决简单的错误、走错方向并犯错误。
上周我花了 3 个小时调试代码才意识到变量名有拼写错误。
userId对比usreId
三个小时。
我是一名高级开发人员。
第 11 部分:真正让你变老的事情
既然我们已经确定“无所不知”并不是资历的标志,那么什么才是呢?
当你满足以下条件时,你就是高级开发人员:
- 你知道你不知道什么,
年轻人假装自信。老年人承认无知,然后去谷歌搜索。 - 你可以阅读错误消息,
初级用户会感到恐慌。高级用户则会阅读堆栈跟踪,然后在 Google 上找到确切的错误信息。 - 你在
模式识别之前调试过同样的错误。你看过这部电影。 - 你知道什么时候该寻求帮助
。年轻人独自奋斗了好几天。老年人在谷歌搜索了 30 分钟后就会寻求帮助。 - 你可以简单地解释复杂的事情,
因为你已经在 Google 上搜索过很多次了,所以你现在实际上已经理解了。 - 您编写的代码其他人可以维护
,因为您必须维护糟糕的代码(您两年前编写的代码)。 - 你接受不知道
“我不知道,让我谷歌一下”并不可耻——这是诚实的。
第 12 部分:生活中的一天(真实对话)
让我带你回顾一下昨天。典型的“高级开发人员”的一天:
上午 9:00 - 晨间站立会议
我说: “我今天将完成支付集成。”
我的意思是: “我将第五次在 Google 上搜索如何集成 Stripe,因为我每次都会忘记。”
上午 10:00 - 开始编码
谷歌搜索 #1: “条纹支付意图反应”
谷歌搜索 #2: “条纹 webhook 签名验证”
谷歌搜索 #3: “条纹测试卡号”
(我用谷歌搜索了每一个项目)
上午 11:30 - 漏洞出现
错误: Cannot read property 'amount' of undefined
我的过程:
-
盯着代码(2分钟) -
添加 console.log所有位置(5 分钟) -
谷歌错误(30秒) -
查找 Stack Overflow 答案 -
意识到我忘记在访问对象之前检查它是否存在 -
捂脸 -
添加 if (payment?.amount)检查 -
固定的
总时长: 8分钟
初级开发人员时间:本来是 2 小时
为什么?不是因为我更聪明。因为我已经犯过100次这样的错误了。
下午 2:00 - 代码审查
青少年代码:
const data = response.data.users.map(user => user.name)
我的评论: “如果response.data.users未定义怎么办?”
小辈: “哦!我没想到这一点。”
我没有说的是: “我上周忘了检查这个,导致生产崩溃。我吃过不少苦头。现在你不用再吃了。”
下午 4:00 - 架构会议
经理: “我们应该如何构建微服务?”
我说的是: “我们应该使用带有消息队列的事件驱动架构。”
5 分钟前发生的事情:我在 Google 上搜索了“微服务通信模式”并阅读了第一篇文章。
下午 5:00 - 帮助一名青少年
小辈: “你是怎么记住这些命令的?”
我: “我不知道。我有小抄。”
我(显示书签文件夹):
-
Git 命令速查表 -
CSS Flexbox 指南 -
JavaScript 数组方法 -
React Hooks 模式 -
常见的正则表达式模式
小辈: “等等,你用小抄吗?”
我: “每一天。”
第 13 部分:我实际使用的资源
让我分享我的秘密武器(也就是我每天访问的书签):
我最常访问的 10 个网站
- Stack Overflow
- 显然 - MDN Web 文档
- JavaScript/CSS 参考 - React 文档
- 当 Stack Overflow 不够用时 - CSS-Tricks
- 解决所有 CSS 问题 - http://regex101.com
- 因为正则表达式是不可能的 - http://caniuse.com
- “我可以使用这个 CSS 属性吗?” - npm 趋势
- 比较软件包流行度 - GitHub
- 阅读其他人的代码 - http://DevDocs.io
- 所有文档都集中在一个地方 - ChatGPT/Claude
- 新的谷歌(别评判我)
我的 Chrome 书签栏
📁 Daily Use
├─ "git commands"
├─ "flex vs grid"
├─ "array methods"
├─ "async await examples"
└─ "typescript utility types"
📁 Regex (never memorizing)
├─ "email validation"
├─ "phone number"
└─ "url pattern"
📁 Interview Prep (for when I interview)
├─ "big O cheat sheet"
├─ "system design"
└─ "behavioral questions"
第 14 部分:不使用谷歌搜索的真正危害
这是一个有争议的观点:有时候你不应该使用谷歌。
自己解决问题的时间
- 学习基础知识
。如果你学习 JavaScript 时每次都去 Google 搜索“如何编写函数”,那你根本学不会。要不断练习,直到掌握为止。 - 调试自己的代码
在谷歌搜索之前,先尝试自己理解错误。阅读错误信息。检查行号。思考。 - 理解核心概念
不要只是谷歌搜索“什么是闭包”。 进行实验。打破常规。理解为什么。
平衡
- 坏处:
用 Google 搜索每一行代码 - 优点:
15 分钟后卡住时使用 Google - 最佳做法:
通过 Google 学习模式,然后自己实现
第 15 部分:我对初级开发人员的建议
基于现实情况,忘记语法和犯错误正是开发人员所做的事情,以下是我的建议:
1. 不再对谷歌搜索感到内疚
我们所有开发者都依赖 Stack Overflow、YouTube 和 Google。这不是弱点,而是工作原因。
2. 建立个人知识库
记录你反复在 Google 上搜索的内容:
# Git Commands I Always Forget
## Undo last commit (keep changes)
git reset --soft HEAD~1
## Undo last commit (discard changes)
git reset --hard HEAD~1
## View commit history
git log --oneline --graph
3. 学会阅读文档
Stack Overflow 很棒,但官方文档更易于理解。
4. 拥抱不适
如果你身处一个你不是最聪明的人的房间,这意味着你正在学习和拓展自己。
5.问“愚蠢”的问题
这么“蠢”的问题?另外三个人也想知道同样的问题,但都不敢问。
6. 老年人结对计划
观察经验丰富的开发人员犯错误、走错方向或在 Google 上搜索可能会非常有帮助。
你会发现我们都是在边走边想办法。
结论:承认自己不知道的解放
我希望你们从中得到以下几点:
你并不是因为使用 Google 搜索而成为冒名顶替者。
忘记语法并不意味着你的技能降低。
虽然你不知道所有事情,但你并不是一个糟糕的开发人员。
你是人。我们不断学习各种信息,花费无数时间进行调试,怎么能指望记住所有东西呢?
我从事专业开发工作已有十年。我领导着一个团队。我的年薪达到六位数。我开发的产品已服务数百万用户。
我每个月至少会在 Google 上搜索一次“如何将 div 居中”。
初级人员和高级人员之间的区别不在于知识,而在于是否知道如何快速找到知识。
因此,下次当您发现自己疯狂地在 Google 上搜索一些“基本”内容时,请记住:
在某个地方,谷歌的一位高级开发人员正在谷歌上搜索完全相同的东西。
欢迎来到软件开发领域。别再心怀愧疚,继续用谷歌搜索吧。
轮到你了:你会用 Google 什么?
我给你看过我的了,现在也给你看看你的吧。作为一名开发者,你在 Google 上搜索过的最尴尬的事情是什么?
谷歌搜索次数最多的名人堂作品:
-
“如何退出 vim” -
“git强制推送” -
“javascript 降序排序” -
“css垂直对齐” -
“正则表达式电子邮件”
你的是什么?👇
关注「索引目录」公众号,获取更多干货。

