- 教程
- 文档
【免费下载链接】30-seconds-of-code
Coding articles to level up your development skills
本指南对应仓库中的文章 avoiding-bad-advice.md,属于 30 seconds of code 的 Web 开发文章集(见 webdev.yaml,tag 为
webdev/career/programming)。它探讨一个开发者社群中普遍存在的现象——"资深初级病"(senior juniorism):初级开发者对自己略懂的一小片知识过度输出,却完全意识不到自己的盲区,从而催生大量看似有理实则有害的建议。读完本文,你将掌握一套判断建议可信度的思维框架:理解“三类知识”模型、学会甄别信息来源、用实验和批判性思维替代盲从,并能对照真实案例(如 JS 强制类型转换、class 语法、ReactuseEffect)识别坏建议的典型形态。
何为“资深初级病”:坏建议的温床
Aspiring programmers are always looking for advice, especially from experienced developers who have walked the same path. 然而并非所有建议都同等可靠。有些建议甚至相当危险——它们导向糟糕的编码实践和坏习惯。
"资深初级病"(senior juniorism)正是这一现象的集中体现:juniors write too much about the few things they know, completely oblivious to their own blind spots——初级开发者对自己仅有的那一点知识反复输出,却对自己看不见的盲区毫无察觉。这类内容往往披着"过来人经验"的外衣,实际上却是把一孔之见包装成放之四海而皆准的真理。
值得强调的是,这篇文章本身也来自 30 seconds of code 的文章体系。仓库中同类文章(如 escaping-tutorial-hell.md、explicit-code-is-always-better.md、no-code-is-inherently-evil.md)均被归入webdev文章集合,该集合的定位是"精选故事、技巧、问答,聚焦文章涉及的语言与技术以及职业建议与教训"(见 webdev.yaml 中的描述)。换句话说,这个仓库本身就长期生产"技术建议"——因此它对"建议本身也可能有害"的反思尤为可贵。
坏建议为何会像野火一样蔓延
原文从三个维度剖析了坏建议泛滥的成因,这三点彼此叠加,最终形成传播闭环。
1. "假装直到成功"(fake it till you make it)的副作用
"If I had to guess, I'd blame thefake it till you make itmentality first and foremost." 这一口号本身带有激励色彩,但经常被过度当真。当一个人假装自己是专家时,他给出的建议往往过时、不完整,甚至完全错误(outdated, incomplete or simply incorrect)。在公开分享的门槛极低的时代,这些错误内容会被迅速复制、放大,如野火般蔓延(spreading like wildfire)。
2. 自学路径跳过了地基
第二个元凶是:许多开发者是自学成才(self-taught)。互联网带来了海量信息,同时也让"跳过基础"变得前所未有的容易。这一点在安全领域尤为致命——a single mistake can lead to a major breach(一次失误就可能酿成重大安全漏洞)。缺乏系统训练的人更容易把"能用"误当成"正确"。
3. 经验不足导致视野单一
最后是经验不足(lack of experience)。经验当然不是一切,但随着时间推移,经历更多不同的情境、问题和观点,人自然能形成更均衡的视角(balanced view)——这种多元暴露是刚起步时根本不具备的。经验的价值不在于"活得久",而在于"见过足够多的反例和变体"。
将上述三者与"边学边公开"(learning in public)的心态叠加,事情就很容易失控:新手被鼓励尽早输出,输出的却是未经验证的认知,于是坏建议的传播获得了加速度。这正是我们必须学会识别坏建议的根本原因。
三类知识模型:知道自己"不知道什么"
要避免踩坑,首先得理解知识的三种类型(the three types of knowledge):
- 你知道自己知道的(what you know you know)——你有把握、可复现、经得起检验的知识;
- 你知道自己不知道的(what you know you don't know)——你清楚自己存在空白、需要补充的领域;
- 你不知道自己不知道的(what you don't know you don't know)——你甚至意识不到它的存在,这才是最危险的盲区。
文中给出的告诫朴素而深刻:必须承认世界上有大量我们不知道的东西,并保持谦逊去承认它。即使是最资深的开发者也有知识空白。这条认知与本仓库另一篇文章 benefits-of-writing.md 形成了呼应——写作的过程会强制你"摸清知识空白"(uncover any gaps in your knowledge),从而把第三类未知向第二类、第一类转化。反过来,从不检验自己认知边界的人,最容易被第三类未知吞噬,并在输出建议时把它伪装成第一类知识。
如何识别并规避坏建议
原文给出了三条可操作的策略:
- 挑选可靠的来源(pick reputable sources)——如经典书籍、权威文章或领域内真正的专家。但必须清醒:即使是可靠的来源也可能带有偏见或已过时(biased or outdated)。权威不等于永恒正确。
- 自己动手研究(do your own research)——用代码做实验,亲自验证结论在当前语境下是否成立。这一条与 escaping-tutorial-hell.md 中"实验是最好的出逃方式"的观点一脉相承:亲自构建、亲手调试获得的知识,远胜于被动跟随教程与二手结论。
- 发展批判性思维(develop your critical thinking skills)——对不同来源的结论进行交叉比对,主动寻找反例,而不是把第一个看似合理的答案当成终点。
这三步是一条完整的"建议安检线":先用声誉过滤来源,再用实验验证事实,最后用批判性思维审视语境适配性。任何一条建议如果能通过这三关,才值得被写进你的代码库。
自省:作者也曾踩过的坑
原文的可贵之处在于它并不以"真理传教士"自居。作者明确声明:自己的写作(包括这篇文章本身)也是一种建议,同样应该被"带点怀疑地对待"(take it with a grain of salt)。他回顾了自己过去盲目追随甚至复现坏建议的经历,并给出三个极具代表性的案例——这三个案例恰好覆盖了 JavaScript 生态中最容易产生"绝对化教条"的三个领域。
案例一:"强制类型转换永远是有害的"——其实不然
"Coercion is always bad, except it isn't."强制类型转换(如1 + '1'、==宽松相等)是 JavaScript 的语言特性,在特定场景下可以很有用;围绕它的种种困惑,根源在于没有彻底理解它的运作机制,而非特性本身邪恶。
案例二:"永远不要在 JS 里用 class"——类语法门槛
"Never use classes in JS"的观点有一定依据:class 本质上是基于原型(prototypes)的语法糖(syntactic sugar)。但对从面向对象背景转来的初学者而言,这种"教条式否定"更像是一种守门行为(gatekeeping)——为了彰显圈内人身份而抬高学习门槛。与其禁止某个语法,不如解释清楚它底层与原型系统的关系,让学习者自行判断。
案例三:"避免在 React 里使用 useEffect"——伪替代方案
"Avoid useEffect in React, opting for third-party hooks instead."第三方 hooks(如各种数据请求库)确实有用,但它们底层往往仍然依赖useEffect实现。回避它并不能让你真正绕过它,最终你还是要以某种方式学习它。用"换个库"来逃避原理,得到的只是延迟而不是解放。
作者坦承自己犯过不少错误,未来也还会犯。但他始终在尝试从错误中学习、改进写作,并且更加审慎地对待自己给出的建议——这本身就是对"建议者应有自我怀疑"这一主张的身体力行。
批判性思维的实践:如何把建议放到语境中检验
上述三个案例揭示了一个共同的检验方法:把"绝对化陈述"还原为"有条件陈述"。坏建议几乎总是以"永远/绝不/总是"(always/never)的形式出现,而好的建议通常携带条件与边界。结合本仓库相关文章可以总结出几条可落地的检查清单:
- 检查适用语境:这条建议针对的是哪种规模、哪种语言、哪种团队?explicit-code-is-always-better.md 在推崇显式代码时也明确承认"约定与抽象在确有明确收益时才值得引入"——任何好建议都自带前提条件。
- 检查替代成本:放弃某个特性后,你改用的是什么?它是否隐藏了同样的复杂度?正如
useEffect的例子:用第三方 hooks 替代,复杂度只是换了层皮。 - 检查门槛效应:这条建议是在帮助新手理解,还是在制造"懂行"的优越感?"禁止 class"式的教条往往兼具这两种效果。
- 检查学习路径:建议是否鼓励你理解原理,还是鼓励你绕过原理?escaping-tutorial-hell.md 强调"保持好奇、沿途提问",正是为了对抗绕过式学习。
- 检查输出动机:给出建议的人是否对自己的盲区有足够自觉?是否像 no-code-is-inherently-evil.md 所批评的"最佳实践崇拜"那样,把讨论永远停留在"分析"而不落到"实验"?
结论:把谦逊写进你的判断系统
"资深初级病"是一个危险的现象,它催生坏建议的传播。要避免落入这个陷阱,需要做到四件事:
- 承认自身知识的边界(acknowledge the limits of your knowledge)——主动区分三类知识,警惕"不知道自己不知道"的领域;
- 挑选可靠来源(pick reputable sources)——但永远不要把权威当作免检通行证;
- 亲自研究验证(do your own research)——用代码实验代替道听途说;
- 发展批判性思维(develop your critical thinking skills)——把每条建议放回具体语境中检验。
"并非所有建议生而平等"(not all advice is created equal),最终做出明智决策的是你自己——依据的是具体语境,而不是某个博主的绝对化断言。正如仓库中 the-frontend-trap.md 所提醒的:技术景观变化极快,今天的"真理"可能明天就沦为脚注。保持好奇、保持怀疑、持续实验,才是对抗坏建议的最可靠疫苗。
如果你对"如何避免被教程误导"有共鸣,可以继续阅读 escaping-tutorial-hell.md;想深入"显式优于魔法"的工程主张,可参考 explicit-code-is-always-better.md;若想了解过度设计带来的反噬,no-code-is-inherently-evil.md 与 tech-stack-refactoring-problems.md 都是很好的延伸阅读。
- 教程
- 文档
【免费下载链接】30-seconds-of-code
Coding articles to level up your development skills
相关推荐
SauronEye实战案例:如何在大规模网络驱动器中快速发现安全漏洞
SauronEye实战案例:如何在大规模网络驱动器中快速发现安全漏洞 SauronEye是一款专为红队设计的搜索工具,能够帮助安全人员在大规模网络驱动器中快速定
30-seconds-of-php-code 项目教程
30 seconds of php code 项目教程 1. 项目的目录结构及介绍 30 seconds of php code/ ├── src/ │ ├──
30-seconds-of-code的技术架构与构建流程
30 seconds of code的技术架构与构建流程 30 seconds of code项目采用Astro作为核心静态站点生成器,构建了一个高性能的技术文
教程文档
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考