【前端人生】我的前端学习经验和方法技巧

原文首发CSDN,链接:http://www.csdn.net/article/2015-07-16/2825225-ThoughtWorks-phodal

(责编:陈秋歌)

发表于2015-07-17


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

但是,作为一个入门简单但是精通愈难的领域,竞争会变得愈加激烈

据说下期更精彩,记得关注哦~

0?wx_fmt=jpeg

点击可阅读原文

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值