Skip to content

写了 10 年代码,我才发现最该学的其实是… #431

@mqyqingfeng

Description

@mqyqingfeng

很长一段时间,我以为成为“更优秀的开发者”就是学更多工具。

更多框架、更多库、更多教程。如果我不持续升级技术栈,我就会感觉自己在落后。

所以我不停地切换,尝试新东西……

结果呢?我并没有真正进步。

我花了很长时间才明白这个简单的道理:

成长并非来自做更多的事情……

而是来自对正确的事情理解得更透彻。

深度理解vs广度学习

1. 掌握基础知识

你不能跳过 HTML、CSS 和 JavaScript,指望框架能带你一路顺风顺水。

如果你的基础薄弱:

  • 你会在 React 模式方面遇到困难

  • 你会误解 Next.js 的行为

  • 你会一直感觉自己像是在猜

扎实的基础可以消除你之后的大部分困惑。

2. 理解浏览器做了什么

很多开发者在了解开发环境之前就开始使用框架。

但所有功能仍然在浏览器中运行。

请求、渲染、缓存、DOM 更新……这一切都在你的代码底层进行。

如果你不理解这一层,框架就会感觉像魔法而不是工具。

3. 提升数据结构和算法思维

即使你不是每天刷 LeetCode,你仍然需要结构化思维。

你不需要记住所有东西,但应该理解这些模式:

  • 搜索和排序

  • 递归和迭代

  • 栈、队列、哈希映射

这种思维方式无处不在,不仅仅出现在面试中。

这就像编写可运行的代码和编写可扩展的代码之间的区别。

4. 理解框架而不是死记硬背它们

框架不是魔法。

了解它们实际的工作内容:

  • 渲染模型

  • 路由

  • 状态管理

  • 服务端与客户端行为

一旦你理解了“为什么”,“怎么做”就变得简单了。

前端开发基础知识体系

5. 上下文比建议更重要

网上很多开发建议都是正确的……但只在正确的上下文中。

在个人项目中有效的,在生产环境可能失败。在创业公司有效的,在企业系统中可能崩溃。

不要问“这个好吗?”

要问:“这个什么时候好?”

6. 理解业务

不要只是实现需求。

要理解:

  • 它们解决什么问题

  • 它们会影响哪些人

  • 为什么现在这件事很重要

这就是开发者和工程师的区别。

7. TypeScript 不只是关于类型

大多数人认为 TypeScript 只是添加类型。

其实不是。

它讲述的是:

  • 明确意图

  • 及早发现错误

  • 让重构更安全

一旦你习惯了,纯 JavaScript 就会让你觉得有风险。

8. Next.js 不只是“更简单的 React”

如果你使用 Next.js,要深入了解,不只是看懂文件夹结构。

理解:

  • 服务器与客户端组件

  • SSR 与 CSR 的权衡

  • 缓存行为

  • 路由模型

否则,你的应用能跑……但在生产环境中可能会出现不可预测的行为。

9. 正确使用工具

工具使用不当会浪费大量时间。

掌握:

  • Git

  • 你的 IDE

  • 浏览器开发者工具

这些工具每天都在使用。

这里的小改进累积起来的速度比你想象的要快得多。

10. 把问题拆成小块

大型任务让人感到压力巨大。

但它们中的大多数只是许多小问题的组合。

将它们分成:

  • 用户界面

  • 逻辑

  • API

  • 状态

  • 极端情况

这项任务变得容易多了。

你也会更快地看到进步。

一次解决一个问题,事情就会开始好转。

问题拆解流程

11. 不要复制你解释不了的代码

只要理解代码的功能,复制代码是没问题的。

问题出在盲目复制上。

后来,当出现 bug 时:

  • 你不知道该往哪里看

  • 你不会知道发生了什么变化。

  • 你不会知道你做出了哪些假设。

这就是为什么小 bug 会演变成漫长的调试过程。

12. 优先选择可读性高的代码,而不是设计巧妙的代码

写出巧妙的代码会让人感觉很好。

但之后,它就变得难以阅读、调试和修改。

大多数代码被阅读的次数比编写的次数多,因此从长远来看,可读性总是更重要的。

巧妙的代码能让人眼前一亮,而易读的代码则能让人受益终生。

13. 不要过早优化

一个常见错误是在完全理解问题之前就尝试优化。

先让它工作。

然后让它清晰。

然后只在真正重要时才优化。

过早优化增加了复杂性却没有价值。

14. 像陌生人一样阅读自己的代码

几天后回来看你的代码。

如果它让你困惑……那就是反馈。

清晰的代码应该无需费力就能理解。

15. 搜索是一项真正的技能

你不需要记住所有东西。

这项技能不是记忆,而是导航。

你需要知道:

  • 如何搜索

  • 如何过滤噪声

  • 如何识别好的答案

这才是经验的真实面貌。

16. 调试 = 消除错误假设

大多数 bug 并不复杂。

那只是你不知不觉中对自己撒的谎。

  • “这个变量肯定有值”

  • “这个函数肯定会运行”

  • “这个 API 总是返回我期望的结果”

调试的过程就是不断证明自己是错的,直到最终回归现实。

调试就是消除错误假设

17. 创造要大于消费

看教程很容易感觉高效,因为看的时候一切都说得通。

但真正的理解只发生在你独自面对空白屏幕尝试构建东西时。

如果你从不离开教程,你永远学不会思考。

所以关掉视频,自己动手试试,你肯定会遇到问题卡住,那就是成长的地方。

18. 卡住时休息一下

强行解决问题会让人感觉很有成就感。

但暂时离开往往能更快地解决问题。

不用担心,即使你停止盯着它看,你的大脑仍然会继续运转。

19. 卡住太久就寻求帮助

如果你已经卡住几个小时,不要再想了。

经验证明,再往下也很少带来突破,通常只会带来挫败感。

大多数开发者都乐意帮忙的,前提是你已经尝试自己解决问题了。

20. 提出更好的问题

谁也帮不了你解决“它怎么不起作用”这种模糊的问题。

但他们可以帮忙做这件事:

  • 以下是我尝试过的方法

  • 以下是我预期的结果

  • 事情的经过是这样的

好的问题不仅能更快地得到答案,还能迫使你更深入地理解问题。

21. 沟通是工作的一部分

写代码只是开发者工作的一部分。

另一部分是:

  • 解释你的决定

  • 讨论权衡取舍

  • 与团队协作

在实际工作中,沟通问题比技术问题更容易引发问题。

技术能力vs沟通能力

22. 学会清晰地解释你的想法

写代码只是工作的一半,解释它是另一半。

你需要能够描述你在做什么、为什么这样做、存在什么权衡取舍。

这体现在:

  • 代码审查

  • 技术讨论

  • 文档编写

清晰的沟通能够防止误解,否则会变成 bug 或浪费时间。

如果你能把复杂的概念用简单易懂的方式表达出来,你在任何团队中都会立刻变得更有价值。

23. 完成比完美更重要

在发布前试图让事情完美通常会拖慢整个流程。

比起本地一个完美的版本,从生产环境中运行的版本中你能学到更多东西。

24. 始终考虑用户体验

即使你不是设计师,你仍然可以塑造用户体验。

  • 加载状态

  • 错误消息

  • 响应时间

这些细节比大多数开发者想象的更重要。

因为用户看不到你的代码。

但他们会感觉到。

25. 对工作表现出热情

如果你与你所创造的东西缺乏联系,那么光有技术是不够的。

人们会注意到你真正关心的是产品,而不仅仅是代码。

你不需要表现得过于兴奋,但你需要表现出解决问题的兴趣,而不仅仅是完成任务。

这种态度会让你更可靠、更值得信赖,也更有可能获得更好的机会。

大多数时候,热情会悄然转化为职业发展。

26. 寻找导师

你不需要独自解决所有问题。

一位好的导师可以指出真正重要的事情,帮你节省数月的试错时间。

他们不会给你所有问题的答案,但他们可以帮助你避免一些愚蠢的弯路。

有时是公司里的高级开发人员,有时是网上你很欣赏的人。

向那些已经达到你想达到的高度的人学习。

27. 为开源做贡献

开源软件能教会你教程永远无法教会你的东西。

你将面对真实的代码库、真实的限制条件,以及真实的人员对你的工作进行审查。

一开始可能会觉得有点吓人,但这正是关键所在。

从小处着手:

  • 修复漏洞

  • 改进文档

  • 提交小型 PR

随着时间的推移,你会逐渐了解大型系统的实际结构,以及在你自身圈子之外,协作是如何真正运作的。

28. 保持开放的心态去学习新事物

当你觉得自己“弄明白了”的那一刻,你的速度就开始放慢了。

工具会改变,模式会演变,去年行之有效的方法今天可能就不够用了。

你不需要追逐每一个潮流,但你应该保持灵活。

要勇于质疑自己的习惯,并在出现更好的方法时尝试这些方法。

29. 指导年轻开发者

教学是提升自身理解力最快的方法之一。

当你向别人解释概念时,你会立刻发现自己知识上的不足。

你不需要成为专家才能提供帮助;只要稍微了解一些就足够了。

  • 回答问题

  • 审查代码

  • 指导他人完成他们的第一个项目

它迫使你更清晰地思考,同时也让整个生态系统变得更好。

30. 在社交媒体上分享你的作品

许多优秀的工作之所以不为人知,仅仅是因为没有人谈论它们。

发布你的项目、经验教训或小成就,有助于你随着时间的推移建立声誉。

你不需要“爆红”,你只需要坚持不懈。

人们开始记住你的名字,而机会往往就来自于这种悄然的曝光。

最后

大多数增长并非来自重大突破。

它源于持续不断的小改进。

你不需要了解所有事情,

只需要再每次建造时都多花一点心思。

这就是普通代码如何变得优秀的过程。

也是优秀开发者成长为卓越开发者的过程。

我是冴羽,10 年笔耕不辍,专注前端领域,更新了 10+ 系列、300+ 篇原创技术文章,翻译过 Svelte、Solid.js、TypeScript 文档,著有小册《Next.js 开发指南》、《Svelte 开发指南》、《Astro 实战指南》。

欢迎围观我的“网页版朋友圈“,关注我的公众号:冴羽(或搜索 yayujs),每天分享前端知识、AI 干货。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions