Johnny JavaScript 的职业冒险 AWS GenAI LIVE!

2025-06-07

Johnny JavaScript 的职业冒险

AWS GenAI 直播!

我一直在寻找既有漫画又有非虚构类的好书,我的朋友圈里有位程序员推荐了丹尼尔·H·平克的《约翰尼·邦科历险记》。这本书讲述了一个工作毫无前途的男人用魔法筷子召唤了一位仙女般的职业顾问,分享了六个重要的职业经验。

请继续听我讲,因为我觉得这本书很有价值。尤其考虑到我职业生涯才刚刚起步,确实需要一些建议。令我惊讶的是,每一条建议都与我迄今为止的编程生涯非常契合。我非常想与大家分享这些见解。

于是我问自己,如果他不是像《约翰尼·邦科历险记》里那样,而是一位名叫约翰尼·JavaScript的程序员,那会怎么样?这六项职业必备技能又会发生怎样的变化?

事实证明它们确实经受住了时间的考验。

1. 没有计划

这本书的第一个建议,也是我认为最重要的建议,就是你永远无法预测你的职业生涯将会发生哪些转折。谁知道五年后,甚至一年后你会在哪里呢?行业可能会发生变化或消亡。你可能会搬到一个新的国家。试图进行长期规划几乎是不可能的。

作为一名编写JavaScript的人,我完全同意长期计划很少能成功。

框架、语言、库、模式,对于程序员来说,它们都变化很快。你不可能只学几个工具就坚持用上几年(最多)。如果你几年前学过 Angular,那么现在 React 的需求量更大了。如果你学过 CSS 浮动网格框架,那么现在 CSS Grid 已经来了。即使你的工具保持不变,你也需要根据相关的变更和弃用更新它们。

成功的编程生涯建立在以下基本原则之上:

  • 学会学习
  • 理解和编写文档
  • 流行的编程方法,例如 MVC 模型或面向对象编程
  • 所有语言中通用的基本语法和规则,例如数据类型和函数
  • 与他人(尤其是设计师)进行良好沟通
  • 针对不同的工作选择合适的工具。

我们学习这些技能是出于根本原因,因为它们在面对变化时具有内在的价值。无论你使用什么工具、框架,或在什么公司工作,这些技能都会对你有所帮助。

我原本的计划是从事新闻工作,但现在我却在从事现在的工作,用的是 Ember 这个模式库,业余时间用 React,还涉猎了 Rails 和用户体验设计。这一切都发生在一个我从未想过要搬来的城市,还在一家我在当地聚会上发现的公司工作。谁知道五年后我会在哪里呢?

无论我身在何处,我的基本技能都会有所帮助。这才是真正的计划。

2.思考优势,而不是劣势

不久前,我开始学习 Ruby 和 Rails,因为它是我们的一个应用框架。另一个原因是,虽然我的前端技术很强,但后端编程却很欠缺。我认为改进自己的弱点对于长期成功至关重要。

在努力追赶同事们的水平后,我意识到了这本书分享的下一个教训:专注于你的优势,而不是你的劣势。以下两个认识激励着我:

  1. 我不像喜欢前端那样喜欢后端——它让我感觉不流畅。我可以连续几个小时沉浸在 CSS 和 JavaScript 中而不会感到疲倦。改进和使用后端让我的工作效率比使用 Ruby 好得多。它让我的工作不再感觉太像工作。
  2. 把精力分散在太多事情上,会分散我的精力,阻碍我的进步。如果前端是我擅长并且喜欢做的事情,我就必须愿意全力以赴。这样才能让我成为专业人士,而不仅仅是一个业余爱好者。

所以,不要执着于把自己的弱项练到和周围高手一样。学习足够多的知识,才能在你需要的任何领域有所突破,但要知道哪些领域最适合你。前端?后端?信息架构?UI 和 UX?数据和分析?编程的世界里,有很多选择可以关注。

“全栈开发者”这个梗其实只是一个神话。找到一个能让你心流的东西,并倾注你的热情。

3. 这与你无关

和大多数年轻程序员一样,我更注重个人项目:它们有多酷,它们展现了哪些技能,以及我从中学到的新工具。我投入了大量时间,并将它们发布到互联网上,希望人们会喜欢它们。

毫不奇怪,这种事从未发生过。

然后我创建了一个Markdown 文件仓库,里面全是编程笔记——语法、技巧、提醒等等。我甚至还加了一些非虚构类的笔记,用来记录宝贵的见解。我这样做是为了更好地记忆知识,当然,我也认为它对其他人也有用。

// An example of my notes:
// a small snippet from my notes on Ember Models

##### Loading Multiple Models

If you need to load multiple models as a single promise object, the `RSVP.hash` tool lets you do this. It accepts a hash, where each value is a promise. This way you can have a promise activate once all the promises are resolved, such as a loading screen being toggled off.

model(params) {
  return Ember.RSVP.hash({
    character: this.store.findRecord('character', params.character),
    teams: this.store.findAll('team')
  });
}
Enter fullscreen mode Exit fullscreen mode

这是我第一个真正意义上的 repo,而且我不仅仅专注于工作。它也是迄今为止我最受欢迎的 repo,获得了超过 40 个 star 和多个 fork。

直到我读到这本书中的这一课,我才意识到这一切意味着什么:

你来这里是为了服务,而不是为了自我实现。

我见过的最受欢迎的代码库之所以受欢迎,原因显而易见——别人觉得它们有用。这也是 Bootstrap、Foundations、Rails 和 Ember 等框架被广泛使用的原因。他们把自己的技能发扬光大,并专注于外部项目,而不是只顾自己做些虚荣的项目。

这也是为什么,几年前我问一位招聘人员,人们最希望程序员具备什么技能时,她说沟通能力强。她发现,大多数程序员能很好地与计算机沟通,但几乎无法与人交流。这限制了他们与他人分享知识所能带来的价值

作为一名年轻的程序员,这是一个艰难的教训,但我正在努力。我慢慢地有了信心,能够发现并修复之前没人发现的问题,我的经理也对此表示赞同。我更大的目标是为开源项目做出贡献,哪怕只是一点点,但我认为我还没有达到那个目标。但我希望做更多这样的事情,因为我知道这对每个人的职业生涯都有帮助,最终也会对我有所帮助。

但抛开这个实际原因,我试图记住一个原则:在编写代码之前,先检查一下你的自我。

即使是在个人项目中,我也尽量记住这一点。正因如此,我在练习 Vue 时,做了一个通勤计算器,这样人们就能知道开车上班有多浪费时间。

这不是帮助他人的最佳方式,但只是循序渐进而已。

4. 坚持胜过天赋

我尝试运行某个应用时,它多次崩溃。最初几次,整个过程漫长而令人沮丧,我尝试了所有方法,但都失败了。我一直以为,一旦我掌握了技巧,就能更快地凭直觉找到问题所在。

几年过去了,我发现这些构建错误的速度越来越快。但这只是因为它们和我以前见过的错误一样。每当出现新的错误,我都会拼尽全力去修复它。这总是一场斗争,就像代码在考验我坚持下去的意志一样。我只能通过坚持不懈、尝试新旧技巧来修复错误。无论我学到多少,进步都依赖于我坚持不懈地解决这类问题。

这本书证实了我每次都学到的一个教训:世界上有很多才华横溢的人,但如果他们不坚持自己的学习和工作方式,那么其他人就会超越他们。

我或许是世界上最有才华的程序员,能够写出流畅的函数、详尽的文档,以及绝对简洁的 CSS,不会让天使哭泣。但如果我不坚持学习和提升,这一切都毫无意义。坚持不懈是我以及与我共事的经验丰富的开发人员能够做到以下事情的主要原因:

  • 调试复杂的错误
  • 构建一个可伸缩的大型应用程序
  • 管理遗留代码的问题
  • 紧跟行业变化
  • 完成艰难的最后期限

人才固然重要,但这些比人才更需要坚持。否则,所有这些重要任务都将半途而废,公司也将陷入困境。

这就是为什么坚持在编程中如此重要。坚持不仅能战胜天赋,更是最重要的天赋之一。因为每一项技能的强大,都取决于你不断提升的坚持。

5. 犯优秀的错误

编程有时就是犯错,不是吗?一两年后,大多数程序员都会发现:

  • 他们编写的代码几天后就过时了
  • 旨在防止错误的测试未能捕捉到新的回归
  • 选择了错误的框架和方法(通常是因为它们很新而且很炫!)
  • 匆忙编写的 CSS 让程序员们绞尽脑汁多年
  • 周五下午推送的更改无意中导致服务器崩溃

这些都是大多数应用或软件的常见错误。值得庆幸的是,所有这些错误都提供了学习的经验。我们可以学习应该包含哪些其他测试,哪些框架可以满足不同的需求,以及哪些 CSS 不会招致上帝的愤怒。编码的基础是学习和改进。

需要注意的是,只有当我们接受错误并从中吸取教训时,这种方法才有效。当事情出错时,深呼吸,大声说:“我做错了。下次我会通过做X来避免同样的错误。”

“绝妙的错误”是指我们从中成长的益处大于其最初的后果。到那时,它就不再是失败,而是成功了。

编码的伟大之处在于它总是伴随着错误,而我们可以将所有这些错误转化为优秀的错误。

6.留下印记

这或许不是本书中最重要的建议,但它放在最后,因为它是最重的。你必须问自己一个问题:

我的工作重要吗?

生命有限。我们应该利用时间去创造积极的变化,留下美好的印记。但人们常常回避这个沉重的问题,直到年老。到那时,可能已经太迟了。即使你并不喜欢这个答案。

人们在海滩上留下印记,也就是脚印。

考虑到我们所编写的程序正日益影响着他人的生活,这对我们来说是一个尤为重要的问题。Ethan Marcotte 写了一篇很棒的文章,探讨了设计从来都不是中立的,我相信这同样适用于编程。我们编写的代码有着许多深远的目的和影响:

  • 如何组织信息或向需要信息的人隐藏信息
  • 个人数据如何被收集、分析甚至出售
  • 用户如何与界面交互,这可以增强他们的体验或操纵他们的注意力
  • 我们的应用程序的可访问性如何,例如对于残疾人士或互联网接入较差的贫困地区而言。
  • 算法如何增强或恶化工人用户的体验

我的观点与 Marcotte 的文章一致——尽管我们可能认为代码是中立的,但事实并非如此。尤其是在程序日益定义社会、人际关系、工作和生计的今天。

这条建议是关于你该知道你会留下什么样的印记。你的工作总会在某个地方留下印记——无论是伦理、道德还是政治影响。它或大或小,但它都会存在。要知道你想留下什么样的印记。不仅是在你的职业生涯中,而是在你的整个人生中。

在你回头后悔当初没有这样做之前,先问问自己这些问题。真相或许无法让你自由,但至少可以指引你走向更好的道路。

结论

《约翰尼·邦科历险记》帮助我将许多关于职业生涯的臆想提炼成切实可行的建议。尽管这本书写于十年前,但至今依然具有现实意义。甚至可以说,随着编程行业的发展,它的重要性只会越来越大。

本书六个教训的简要列表。

像我这样的博客文章永远无法取代这本书本身,所以我强烈建议你买一本,既是为了书中的建议,也为了它独特的呈现方式。至少,我希望这些技巧,从我作为一名程序员的角度来看,能够展现这本书的实用性。

因为尽管我热爱编程,但这份热爱并不能支撑我整个职业生涯。我必须学会如何应对工作。这六个技巧让我意识到,学习工作不仅仅是可能的——编程让学习变得值得。

意识到这一点可能比我听过的任何职业建议都重要。

文章来源:https://dev.to/maxwell_dev/the-career-adventures-of-johnny-javascript-1cc3
PREV
JS 数组方法!🐱‍🏍 1) Array.prototype.map() 2) Array.prototype.filter() 3) Array.prototype.sort() 3) Array.prototype.reduce() 就是这样 奖励表情包 编码愉快🚀
NEXT
React 是我在山羊群中发现的宝藏