黄峰达,ThoughtWorks软件开发工程师,自小开始接触软件编程,目前主要专注于物联网、前端开发领域。喜欢写技术文章,分享研发收获,长期活跃于CSDN、SegmentFault、Github等网站。现在正发起一个旨在帮助前端人员进步的项目( https://github.com/artisanstack ),欢迎围观。
该采访中,黄峰达介绍了他在前端开发领域的学习经验和方法技巧,他表示前端是一个入门简单、精通愈难、竞争激烈的领域,前端开发人员除掌握前端知识外,也应了解后端技术,代码整洁、测试更是前端开发人员实现进阶的重要技能。
CSDN:首先请做一个自我介绍。
黄峰达: 大家好,我叫黄峰达,毕业于西安文理学院电子信息工程专业,现就职于ThoughtWorks软件公司。我是一个从小学就开始玩编程(logo语言)的程序员,兴趣比较广泛,目前主要专注于物联网、前端开发。长期活跃于CSDN、SegmentFault,常常写写技术文章,刷刷Github。
CSDN:您什么时候开始投入到前端开发领域?背后有什么样的故事?
黄峰达: 大一时认识了一个朋友,在后来的大学期间里我们常常搭档拉一些私活、做一些网站。大一暑假时,我就尝试向几家网络公司投了简历,并获得了一个关于前端的实习机会。大二时,我们开始租用Linux服务器,做一些Web应用,正式踏上了我们的旅途。由于自己有一些美术基础,能同时胜任设计及页面实现工作,便做起了前端的工作。再后来开始关注Node.js,由衷的感受到前端技术犹如百花齐放,便开始深入技术基础。
CSDN:您是如何积极参与推动前端技术发展的?如有无相关演讲、书籍、博文、社区活动等。
黄峰达: 说到贡献,大的怕是还没有,也就是写写一些关于前端测试、开发的文章,在一些社区写写新的框架入门知识等等,也会在Github上写一些Demo并结合博客输出。除此之外正在发起一个旨在帮助前端人员进步的项目( https://github.com/artisanstack ),该项目的初衷是寻找一些代码写得不整洁的一些前端项目,添加测试而后对其重构。通过反复的项目练习来提高JS的代码水准。前端技术在最近几年发展迅猛,但很多开发人员并没有与之相匹配的项目能力。
CSDN:您目前比较关注前端的哪些技术?平时主要通过哪些渠道获得前端技术的相关信息。
黄峰达: 目前我比较关注的前端技术有:DSL、ES6 Proxy、Hybird应用。对于DSL来说,我可能更关注的是抽象出领域相关代码,而不是DSL本身。一是前端框架层出不穷,二是每隔几年系统就需要被重构。JavaScript由于本身的灵活性 + 函数式编程,实现内部DSL变得比较简单,同时在实现外部DSL方面有了很多的参考示例。如果我们的领域层和基础层紧耦合,那么我们采用新技术的可能性就比较低。ES6有很多新的特性,但是让人眼前一亮的就是Proxy,这门语言从此有了元编程的特性。Ionic在Cordova上封装了一层让开发变得更快捷,这就使得越来越多的公司开始采用Ionic框架来开发Hybird应用。
关于前端技术的相关信息的来源,可能会让人有点失望,毕竟新的技术层出不穷。从几年前Backbone的流行就意味着,技术的创新会基于原来的技术。我会经常学习一些后端的知识,如OSGi、NLP,再将这些知识带到前端试用。不过大抵上会有这样的三个来源:ThoughtWorks技术雷达、公司邮件、Github。公司邮件就不方便讨论了,大抵就是一些项目的Release,会附带一些技术栈的使用。Github上通常会有一些趋势等等,但是都不实用。
在ThoughtWorks技术雷达中,如果有一个框架处于评估的状态,那么很大程度上意味着这个框架已经被公司的某个项目使用上了。如果有一个框架处于试验状态,那可能说明这个框架已经在多个项目上使用了,如现在的Hybird框架Ionic在雷达中的试验状态,还有React.js在去年已经有多个项目使用了。总的来说,在技术雷达中的技术会比国内大公司的试用快半年左右。
CSDN:能否谈谈您获得今天的成就,自己的一些学习方法或技巧。
黄峰达: 对于前端开发人员来说,大多数的传统CS课程都在有意弱化这方面的知识,大部分的前端知识只能来自于网上的内容。
在学习新框架的时候,我习惯用横向扩展的方式来学,即基于原来相同领域内的知识。如刚开始接触React的时候,我会基于原来的Backbone的项目代换掉View层,而后再起一个新的项目用全新的技术栈。优点是这会在某种程度上降低学习的难度,同时学习速度比较快,缺点是这依赖于原来的知识储备。
在深入了解代码原理的时候,我会从第一个Commit开始看代码,然后间隔看Release。这比任何的文档都清楚,同时我们在创造新轮子的时候,会有一个更清晰的思路。
CSDN:您目前就职于哪家公司?贵公司在研发时主要使用哪些前端技术?前端技术架构是怎样的。
黄峰达: 我在ThoughtWorks担任软件开发工程师。公司在研发时用到的前端技术五花八门,就说说我们项目吧。当前在我们项目有一个移动站点,使用RequireJS来管理依赖,前台Backbone,后台提供API的前后端分离构架。在测试方面,我们用Jasmine来完成单元测试,用Selenium作为项目的功能测试。
CSDN:目前公司有没有尝试使用一些热门/新的前端技术?公司尝试这些技术的原因是什么?通过您的研究,觉得这些技术的优缺点是什么?
黄峰达: 由于我们在一些子项目上采用了微服务架构,这就意味着,框架及语言对我们业务的限制已经微乎其微。换句话说,采用新的框架不再像原来那么困难。最近我们在项目上尝试使用React与响应式设计,来整合现在的桌面版与移动版,同时考虑尝试用React Native构建App。我们觉得比较有意思的是,我们可以尝试一次构建我们的应用。React让人值得忧虑的一点是代码变得紧耦合。在整合的过程中,代码逻辑变得复杂,同时难以维护。
CSDN:现在前端新技术不断推新,您觉得前端开发者/公司该如何选择新的前端技术?
黄峰达: 目前前端可选的技术栈太多了,如Backbone、React、Angluar、Vue等等。对个人而言,除非有像类似于React引入Virtual Dom的新概念的框架出现,要不就很难引起我的兴趣。毕竟一门技术是基于原来技术的基础上而发展的,从来不会凭空出现一门新的技术。对于前端开发者来说,如果只是学习,那么学习相仿的框架只是在浪费时间。对于公司来说这是大有益处的,毕竟对以后来说迁移成本比较低。
在进行技术选型的时候,现阶段主要要考虑的是选择客户端渲染还是服务端渲染的问题。如果要采用服务端渲染,很重要的一点是尝试去采用微服务架构,这样做可以减少代码的耦合。对于客户端渲染来说,前后端本身就是分离的,不存在这样的问题。
CSDN:您觉得优秀的前端开发人员必须具备哪些技能?该如何提升自己的前端技能?
黄峰达: 我觉得代码整洁、测试是非常重要的基本技能。毕竟对于普通的前端开发人员来说,完成工作已经不是一件困难的事。但是由于代码写得不规范,我们很容易看到长的函数、magic number等等坏味道的代码,结果导致这样的代码难以读懂,需要更多的调试。测试本身就是一门艺术,如果我们可以让每个测试用例仅测试一个功能,那么我们会发现我们的代码变得更容易阅读。在这个过程上不仅可以删除一些无用的代码,而且在那之后我们有更大的信心对代码进行重构。
除此之外还有模式,无论是面向对象,还是函数式编程都存在模式。模式在某种程度上是更高层次的抽象,在面向对象中会有很多设计模式和设计原则,在函数式编程中亦是如此。
CSDN:请分析一下前端开发人员的未来职业发展前景。
黄峰达: 作为一个从前端人员走向全栈的程序员,我还是蛮看好前端开发人员的。依赖于Web本身强大的跨平台能力,我们可以开发Hybird应用。加之JavaScript可以作为后端服务的优势,前端开发人员可以不再局限于前端开发。换句话说,这个年代你可以拿JavaScript干以前不同领域的人们干的事。而在不久的将来,只需要一个repo就可以Run Everywhere。
但是,作为一个入门简单但是精通愈难的领域,竞争会变得愈加激烈。(责编:陈秋歌)
欢迎加入CSDN前端交流群:218126086,进行前端技术交流。