不要做一个冒险者:与前端开发的疲劳作斗争

原作者:David Berner

最近跟一个做后端开发的朋友聊起了一个话题,我平常要花多少个时间来做除了编码或学习编码以外的事情。他给我看了一本来自Uncle Bob的书名叫《Clean Code》中的一段话,主要是对音乐家在演奏会前花费在准备上的时间和开发人员在执行代码前花费的准备时间进行了比较。

我喜欢这种类比,但我也不是完全赞同;这其实会导致思维的倦怠。我认为如果你想进一步提高或者扩展你的技能的想法本身是没问题的,只是不可能没日没夜的持续进行罢了。

前端开发很容易疲劳是非常现实的。我看过很多关于写JavaScript程序时疲劳的帖子,当然我认为问题应该并不局限在某个特定的开发语言。

我们首先应该明白,这绝对不是一种宣泄或者是咆哮,问题的根本原因主要是一切变化的太快了,我们喜欢的技术发展得如此迅猛。当然,我们也可以认为它使我们不得不有很强的紧迫感,有时感到自己都快要挂掉了。

从我的想法来说,任何一个问题都有它的两面性。

第一,作为一个前端开发者,可能你会认为应该掌握下面的所有内容:

  • HTML (代码干净, 语义标记清晰)
  • CSS (模块化,可扩展)
  • CSS 方法 (BEM, SMACSS, OOCSS)
  • CSS 预处理 (LESS, SCSS, PostCSS)
  • 最新的CSS (Flexbox, Grid)
  • JS
  • 最新的JS (ES6, Typescript)
  • JS 架构 (Angular, React, Vue)
  • JS 方法 (函数式编程, OOP)
  • JS 库 (Immutable, Ramda, Lodash)
  • 响应式设计
  • 测试 (TDD)
  • 测试架构 (Jasmine, Karma)
  • SVG
  • WebGL
  • 动画技术
  • 可访问性问题
  • 适用性问题
  • 表现层
  • 构建工具 (Grunt, Gulp, NPM Scripts)
  • 打包工具 (WebPack, Browserify)
  • NPM
  • 不同浏览器的相关知识
  • 敏捷开发
  • 版本控制 (Usually Git)
  • 视觉设计基础
  • 其他的软技能如时间管理
  • 基本了解正在使用的后端语言

除此之外,你还需要掌握一些东西,比如:

  • Service
  • PWA (Progressive Web Apps)
  • Web组件

第二,你的日常工作内容中可能不一有,或没给你时间学习,但是要求你思考需要的时候如何能够确保马上上手?

现在,作为一个消费者,你可能: - 订阅一堆开发类的新闻 - 玩你的Twitter - 参加每周进行的前端团队的工作汇报 - 通过Slack通道与其他的开发者扯扯淡 - 学习学习在线教程 - 看看视频课程 - 购买Web开发的书 - 参加聚会 - 出席各种会议 - 参加线下培训课程

作为贡献者,你还可能: - 写博客/杂志文章 - 演讲 - 发布视频做个播客 - 致力于一些开源项目 - 你自己的私人项目

最近我发现我所有的关注点被三件事占了,专注于编写代码,戴着耳机听代码讨论,在Slack上聊代码。有时候真的觉得够了,我的每个毛孔都堵塞了代码,已经滴水不进了,烦透了。

虽然这肯定有点儿极端,但我相信你们中的其他人经历过类似的事情。除此之外,你可能有一个全职工作,家庭,朋友,个人爱好。难怪我们中会有这么多人感到疲惫,那么想想看到底我们干这行是否是一个正确的选择。

我的一些前端朋友表示有兴趣换一个工作试试,他们可以在五点下班。但是认为编程工作还是吸引着某类人,如果我们把这个工作全部放弃了,成为地产代理,你会仍然希望成为最好的地产代理。在空闲时间去参加房地产代理会议和跟踪房价趋势。许多月前,我在金融业工作,我照样在晚上学习,读书,希望自己可以在这个领域成为一个高手。

所以说其实我们并不孤单,很多专业需要坚实的奉献和工作以外的学习。也许前端开发不一样的地方是,技术发展有些太快,以至于感觉有人不断改变工作岗位的要求。似乎每隔一天我收到一封电子邮件说“XYZ”技术已经完了现在都没人用了。我确定这肯定不是真的,否则我们就没有任何技术能够留下。

生态系统处于不断变化的状态,我认为这可能是一件好事。我个人喜欢定位好一个角色,然后不断学习提高和扩展自己,但这不是说我有时不会感到疲惫。

基于这些认知有一些事情我希望能记录一下,这样能够防止我头大并且能提供一些如何避免疲劳的建议。

在一起

我知道的开发人员,无论是在工作还是在外面,都是我认为最聪明的人。他们都感到不知所措。大多数人都有一些他们正在努力学习的技术清单。可能有少数人已经掌握了这些内容,但我们大多数人处在完全相同的位置,还需要继续努力学习。

我们仍然依赖Google和Stack Overflow来帮助我们完成一天的工作,并打开太多的标签页来寻找相关问题的答案。不是只有你一个人是这样!

很高兴知识掌握的角度来说这并不能说明你是一个很差的开发者,因为这不是什么丢人的事。

是的,实际上是大牛们也在干同样的事…

没有任何方法可以让你掌握所有的知识,你跟踪的大牛在Twitter往往也只是在几个领域很不错,每个都是这样的。你会注意到,他们只是在确定的领域,知名度很高。除此以外,他们和我们是一样的。 :)

“冒充者”我们都有过

我知道几个伟大的前端开发人员不是特别的满意对目前的岗位描述,因为他们感觉受到了欺骗,岗位描述里并没有准确的写清楚相关的要求,只是罗列相关的所有知识的清单。引用一个:

90%的开发者看起来是这么想,”我晕,我原来这么落伍!”事实上,它也困扰着我,我也在考虑我目前的水平和角色,只能简单的通过赚更高的工资来说明我比这个要求牛逼多了。

事实是,大多数工作要求都不准确。我的朋友Bård画了张图,显示了前端工作的说明和它们的所表达意思之间的区别。

不过有一件事是确定的,每一份工作,我们都要深入其中,最终你熟悉了工作中要求的工具和工作流程,并且只要你不断学习,最终会成为一个更好的开发者。不要害怕在工作中学习,获取新技能的最好方法是每天使用它们。

如果你不得已冒充你会某个技能,那就赌一下你实际上是一个牛逼的开发人员,通过自身的努力能够去实现它。

巩固基础知识和原理

新东西出来后很容易分散我们的注意力,但如果你的基础不坚实,就会经受不住时间的考验。

我的好朋友对我说过:

“专注于基本原理一直是我的口头禅。” 如果你可以建立良好的基础和解决问题,那就是重要的,你如何使用它们通过工具解决问题是永远会改变的。

例如,当React出来并成名时,它总是似乎与ES6捆绑在一起,我把我的重点放在这些语言的更改或添加,而不是框架本身的细微差别。一旦React死了,走了,我从最新版本的Javascript中取得的知识将继续存在。很多功能,你可以在Chrome浏览器上玩,所以你不必非得用Babel,并陷入了依赖关系的地狱。

你不需要学习一切

这真的是关键。我不认为新的框架,类库和模块,会抹杀了我们,我们要坚持自己的信念,我们不必须学习所有的内容。

有了学习,我发现最好的是保持集 如在我正在深入到ES6的功能进行JavaScript编程的时刻。

在我的列表上有很多其他的东西,我想学习,但我尽量不分心。例如,我喜欢刷新我的辅助功能知识,玩Polymer和潜入一些最新的CSS技术,如Grid,但如果我一次开始阅读太多不同的领域,我不会保留所有的信息。

这些东西跑不了,我需要他们马上就可以得到它们。避免急于尝试和花费大量时间消耗在一个给定主题上。要花费你的时间,那就确保你彻底了解它。

如果你像我一样,你会有一个不断增长的名单,但不要害怕从中挑选项目。不是一切都值得投资的时间,你应该尝试认识什么是值得学习,什么是可能在几年后消失。花时间学习编程设计模式和体系结构技术从长远来看总是有利的,而不是跨越框架土地的当前热点。你只会在赛道上短暂的一段时间内爽一下而已。

大多数公司没有使用最新技术

有很多新的东西出来,网络正在以令人惊讶的速度进展,但通常需要很长时间,企业实际开始采用这些新技术。大多数公司将等待一项技术成熟一段时间,并看到它在现场证明。

Angular是六年前创建的,我开始在一个创业公司工作,他决定三年前是他们的框架。Reactjs已经约三年了,我现在的公司在圣诞节之前开始使用它。我相信很多其他框架已经来了,在那段时间。如果我使用上他们所有我会疯了。

在CSS土地,Flexbox从2010年,六年前已经可用!浏览器支持仍然有限。我们在今年早些时候开始在生产中使用它,但我不认为它在其他地方被广泛使用。

我的意思是,没有急于学习所有的东西,而技术可能改变迅速,而潜在雇主的变化没那么快。你不必在一直跟在新技术的潮头,只要确保你密切关注它的发展轨迹。

你发现你不知道到的很多,那没关系

这是完全正常的。当你第一次出发时,你可能连什么是你不知道的你都不清楚。然后你学习一些东西,并觉得你是一个天才。再然后一点一点的幻觉解开,你开始理解实际上你有多少知道,有你不知道。

基本上,你得到的经验越多,你陷得越深。你需要平和的心态,否则它会消耗你。如果说有判定方式,应该是有种越来越有信心的感觉,说明你正在朝正确的方向前进。 我们选择的职业,你永远不可能舒服地坐在一个由所有前端知识构建的宝座上。

不要花所有的空闲时间学习写程序

很容易感到你远远落后于你需要掌握的编程技术和应该学习内容的更新速度。做一个计划拿出一些时间来,提升你的技能,然后看看你是否可以与老板谈判一下,另外花费剩下的时间做你喜欢的东西。

我在健身房里有一些编码聚会。锻炼对你的心灵和你的身体都非常重要。 每天至少应该尝试20-30分钟,保持你的头脑清晰,并帮助防止倦怠。

为你的家人和朋友花时间,当然尽量别和他们逛商店!

目前是一个对开发者有利的市场

不要担心找工作的事情。目前,我们处在一个非常幸运的位置,有更多的职位需要开发者来填补。我不知道这将持续多久,但现在利用好它!

你可以得到一份工作,即使不熟悉所有的技术。我发现在访谈中我进行了99%的人就是这样的。

最糟糕的情况下,请记住市场上的遗存项目中也有黄金职位。如果你是一个只喜欢旧方式和开发工具的开发人员,总是会有公司有遗留下来的项目,需要开发人员在他们这些软件上继续工作。

结论

我希望文章提到的这些内容有助于减轻你可能遇到的挫折感。你最怕的就是状态越来越差,直到事情被彻底搞砸了,因为一旦你内心确信了搞不定或者不想搞了,就很难恢复你对这个事情的热情,那你为什么要开始呢。

快乐的编程吧!

(aa,il)