我最近和一个后端开发的朋友讨论:每天我花多少时间coding或者学习工作之外技术?他给我展示了一段bob叔叔的书 “Clean code”,这里面对比了一个音乐家在音乐会的准备阶段对他们的乐器花的时间和开发者预习他们的代码
我喜欢这个类比,但是我不完全同意这个,就是因为这个想法容易造成第一阶段的倦怠。我认为你想要提升你的技艺,扩展你的技能。但是每天都学习提升是不可持续发展的
前端开发的疲惫是非常真实的。我已经看到了不少js疲惫的文章,但是我认为这个问题超出了这个特定的语言
更准确的说,这不是另一个关于这是如何的糟糕的或者一切的发展的太快的演说。我喜欢这门发展飞快的技术。同样,我能够欣赏它,当它是那么的难以克服,并且有些时候让我感觉到脸红
就我能说的,这是一个双管齐下的问题
首先,在我们的技术库里面应该拥有以下技术:
- html(写出干净语义化标签)
- css(模块化,可扩展性)
- css方法论(BEM/SMACSS/OOCSS)
- css预处理器(LESS/SCSS/PostCSS)
- css新技术(flex/grid)
- js
- js新技术(es6/typescript)
- js框架(Angular/react/vue)
- js方法论(函数式编程、oop)
- js库(immutable/ramda/loadsh)
- 响应式设计原则
- 测试(TDD)
- 测试框架(jasmine/karma)
- svg
- webgl
- 动画技术
- 易用性(accessibility)
- 可用性(usability)
- 性能
- 构建工具(grunt/gulp/npm)
- 资源管理(webpack/browserify)
- npm生态系统
- 不同浏览器的quirks知识
- 敏捷方法论
- 版本控制(git)
- 视觉设计基础
- 软技能、时间管理
- 后端语言怎么用的基本知识
在上面的基础上,你还要涉猎或者期待如下的知识
- service workers
- progressive web apps(PWA)
- web components(web组件)
第二点是我们每天的工作不一定覆盖了这些,或者给你时间去学习这些,所以如何保证你的手头掌握了这所有的工具
听到像“PWA”这样的技术,对程序员来说非常恐惧。不断涌现的新技术导致一种疲惫的感觉
现在,作为一个用户,你会像下面这样做:
- 订阅不同的周刊youxianj
- 搜索你的twitter feed流
- 参加周会以便在工作中赶上你的前端团队
- 拥有一个工作之外的slack频道,拥有一堆devs(Have a Slack channel outside of work with a handful of devs that you also talk shop with)
- folow 在线教程(希望不会过时)
- 学习视频课程,例如 Frontend Masters
- 购买开发书籍(希望不会过时)
- 参加聚会
- 参加会议
- 参加培训
作为一个贡献者,你可能会这样:
- 写博客或者杂志文章
- 涉足speaking
- 运行一个播客
- 为开源项目做贡献
- 拥有你自己的项目
最近,我发现我的关注力被分散为3块,1/3的时间coding,带着耳机一般听着code讨论,同时在Slack上聊code。我决定这够了-每一份精力都被code填满,我已经在精神上被耗干了
这当然是极端的情况,我相信你应该经历过很多类似的。在所有的这些之外你还有一份全职工作、家人、朋友、爱好。我在想我们大多数都感觉心力交瘁并且开始思考我们是否做了正确的职业选择。
我的一些前端同事已经打包这一切,并且转向一些能让他们5点下班的工作。但是我在想这个工作吸引了一些类型的人,如果我们扔掉它成为一个房产经纪,你一样会想要成为最厉害的房产经纪人,参加房产经纪的聚会并且在业余时间跟踪房子的价格趋势。数月以前,我在金融公司上班,我每个晚上都要学习以并成为我所选择的这个领域的精英。
在这个问题上,我们并不是孤独的,很多专家都需要贡献和工作之外的学习。或许对于前端开发来说,问题在于技术演变的如此之快,以至于这感觉像某些人一直在移动球门(导致你一直没法射门)。经常的情况是我们每隔一天我们就会收到一封邮件写着“XYZ”技术死掉了。我确信这并不是事实,要不然我们就会什么技术也没留下。
这个生态系统一个不断的变化的状态中,我想这是好事。个人来说,我喜欢在一个可以一直学习开发并且push自己。但是这并不是说我有些时候不会不知所措。
考虑到这一点,这里有一些我试着去阻止我的脑袋爆炸的事情我想要记住。也是一些避免疲惫的建议。
我们都一起处于这种状态中
我知道的开发者,在工作之中和工作之外都是聪明的人。但是他们感觉不知所措。大部分都有一推想要学习的wish list。或许也有许多人知道所有的事情,并且在每个领域的顶端,但是我们大部分都是出于同样的位置
我们依然依赖于google和stack overflow来帮助我们度过每天。并且有非常多的tabs打开着有关于某个问题(浏览器中)。你并不孤独!!!!
开心的享受这些技术,你不是一个槽糕的开发者,只是你还没有去尝试那些cool kid使用的东西
是的,及时是网络名人(web celebs)也处于一样的点
这里没有办法让你你能掌握所有的东西,这些你follow的twitter明星开发也只是某些领域非常非常好,你可能已经注意到他们在一些共同的领域因为很知识渊博都非常的出名。但是也是有例外的,他们也只是像我们一样的普通人。
冒名顶替综合症非常真实并且我们每个人都得了这个病
我知道很多优秀前端开发不会申请一些让他们感觉像骗子的角色,感觉好像没有掌握jd上面的所有的能力。引用其中一个人说的:
90%的JD让我感觉“啊,我是如此的落后”,事实上这也很困扰我,我会考虑继续留在当前的岗位上,并且尝试着赚push自己简单的赚更多的钱,因为我感觉我在这里是侥幸得到它。
事实上,大部分的工作描述都是一场闹剧,我的朋友Bard把这些对比放在一起,展示了JD和实际的需求
只要记住,这都是ok的,每一个你感觉困难的工作,最终你都会熟悉工具和工作流,你学着成为更好的开发
不要害怕在工作中学习,最好的学习新技术的方式就是每天使用它
如果你是冒名顶替综合症患者,大部分情况是,你实际是一个非常正宗的开发者,否则你不会有足够的自我意思来认识到这个问题
保证你的基础知识不会丢下
人们很容易被闪亮的新的技术分心,但是如果你的基本知识不扎实,那很有可能的情况是你不会你正在构建的东西将经不起时间的考验
有一次,我的一个好朋友这么对我说:
『我的口头禅就是专注于基础。如果你可以构建好的东西,并且解决问题,那这便是最重要的,你如何解决问题将不断变化』
举例,当react逐渐出名时,他一直和ES6绑定,我聚焦于这些变化语言附加的东西,而不是框架本身的细微差别。假设react要消失,这些让我处于js顶端的知识又继续存在。很多你可以在chrome里面玩的新特性。你不一定非得在babel中,深陷在这个依赖泥潭中。
你不一定需要学习所有的东西
这是最关键的点,我不认为新的框架、库、模块会杀掉我们,而是我们有一种信仰认为我们必须学习这些。
对于学习,我认为最大的赌注是保持聚焦—眼下,我钻研与ES6的函数式编程。
我的清单里面有很多的事情我想要学,但是,我试着不被分心。举个例子,我特别容易提高我的易用性知识(accessibility),玩Polymer、或者进入最新的css技术,例如grid。但是如果我同一时间专注与如此多领域,那我将保持不了所有的信息。这些其他的事情并不会去哪里,一旦我想要得到他们,我是立马可以得到的
避免急着对某个topic去尝试或者消费一切。珍惜时间,确保你彻底的理解了。
如果你像我,你将会有一个日益增长的清单,不要害怕剔除一些。便不是每一个事情都值得投资时间。并且你应该能辨别什么是值得学习的,什么会在几年后消失。花时间学习设计模式和架构技术将会比立即学习当下的热点框架要有意义。你将会以短期内争先恐后的学习流行技术而结束。
大部分公司也都不是使用的最前沿的技术
有一堆的新东西出来,web的进步比率非常惊人,但是公司实际开始采用这些技术一贯的都需要很长时间。大部分公司都会等待技术成熟一段期间,并且在技术已经被领域所证实后开始用
Angular 是6年前出来的,但是我开始在一个创业公司决定使用这个框架是3年前
Reactjs已经又三年时间了,但是我当前的公司是圣诞节才开始使用它,我相信其他框架也是那个时间出来的。如果我也扑向他们,我将会疯掉
在css领域,flexbox在2010年就可用了,6年以前。但是浏览器依旧是不支持它,我们开始在产品中使用它是今年年初,但是我没有在其他地方看到太多的使用
我的观点就是,不要冲动的学习所有事情,与此同时技术可能会发展的特别快,而你的潜在的雇主可能前进的非常慢。你不需要走在前沿。只要保证你有关注他的轨道
你学习的越多,你就会发现你不知道的更多,那是ok的
这是非常正常的,刚开始,你不知道你不知道的,然后你学会一些让你成为精英的东西,然后一步一步的这些幻想破碎,你开始理解到实际上还有很多东西你不知道
当然,你的经验越丰富,你进入的空白就越多。你需要很好的正视这一期,否则这就会消耗掉你。如果有什么不一样的地方的话,就是这种感觉应该给你信心,让你相信你在正确的方向上。大部分情况是,在我们选择的专业,你永远都不会感觉很舒适的坐在一个王座上,通过所有的前端知识构建的
不要花费你所有的业余时间学习
我们很容易就有一种感觉,就是我们落后与一起,我们需要无时不刻的进行写码或者学习。这是一张通往精疲力竭的单程票。花费一些时间来开放你的技能,试着去和领导沟通这些已经在日程表里了,使用剩下的时间做你所喜欢的。
我有些代码时间是在健身房,这对我们的大脑和身体都非常的重要,花费至少20-30分钟让你的思想锋利,并且帮助我们阻止精疲力竭
保证留给家人和朋友的时间,不要和他们谈论老本行(don’t talk shop with them))
这是一个开发者市场
不要担心立马能找到一份工作。这一刻非常幸运的位置,位置比开发人员多。我不知道这种情况会持续多久,但是只是现在利用他
你可以不需要知道所有的就获得一份工作,我发现在所有的面试中,99%的人都在骗取
最差的结果,老代码里面有黄金。如果你是一个开发者,并且喜欢旧的的方式,总是有公司喜欢旧技术,需要来为他们开发的。
总结
我希望这其中的一些点能够缓解你的一些沮丧感受,最差的事情是你到达顶端,但是感觉被耗尽。因为一旦你到达顶端,你将很难再恢复你刚开始决定做什么和为什么开始做这个的激情。
Happy coding!