写点什么

成为一名优秀的 Web 前端开发者

  • 2015-08-09
  • 本文字数:2459 字

    阅读完需:约 8 分钟

本文记录了两位工程师为 web 开发者们所提出的多条建议,其中一位推荐了多种实用的工具与技术,而另一位则对于如何克服浏览器开发时所面临的挑战提出了诸多建议。

Rebecca Murphey 是来自于 Bazaarvoice 的一位软件工程师。今年早些时候,她发布了一篇博客文章“前端(JS)开发者的基本素质之2015 版”,为JavaScript 开发者在进行客户端web 开发时使用的工具与开发方式提出了一些建议。她在文章的总结中写道:

学习 ECMAScript 2015 ,推荐的参考资料有:《Understanding ES6》 ES6 Rocks 以及 BabelJS 。我们在此还要加上一条,即 Axel Rauschmayer 的著作《探索ES6 》。考虑到在当前这个时间点上似乎还没有必要了解ECMAScript 2015 的所有细节,Murphey 建议开发者更深入地了解如何使用异步调用、回调以及promise。

使用模块。Murphey 相信,模块毫无疑问应当作为客户端web 应用程序的构建块。她最近在使用 webpack 以实现模块化的效果,但她希望让每个人都能够使用 ECMAScript 标准模块的那一天能够早日到来。

测试你的代码。在 Murphey 看来,为你的代码编写测试,并且保证代码的可测试性是至关重要的。虽然她对于 Intern “非常中意”,但出于习惯,她还是坚持使用 Mocha 。关于这一方面,她也强烈推荐 Michael Feathers 的著作《修改代码的艺术》。

实现流程自动化。Murphey 曾经尝试使用 Grunt Gulp ,但她最终还是选择了 Yeoman 。因为在“使用不熟悉的技术开始一个全新的项目”,或是对第三方 JavaScript 应用的开发进行标准化时,Yeoman 的表现“非常出色”。Murphey 也提到了 Broccoli ,认为它将来或许能够取代 Grunt 和 Yeoman。

编写高质量的代码。她的建议是,对“违反了项目中经过良好定义的风格指南”的代码进行重构,还应当使用 lint 工具,例如 JSCS ESLint

使用 Git。Murphey 建议在 Git 中使用特性分支,因此得以“通过交互式 rebase,在与他人分享提交时对提交进行清理,并且尽可能地在较小的单元上进行工作,以减少冲突的发生机率”。此外还应当通过 ghooks 在 push 操作与 commit 操作前运行钩子操作。

在服务端生成 HTML。出于性能方面的考虑,Murphey 推荐在大型项目中尽可能在服务端生成 HTML。“预先生成这些文件,将其作为静态文件保存,以加快处理请求的速度。随后在客户端的相应事件中可通过客户端代码操作这些 HTML 文件,并在客户端模板中修改。”

拥抱 Node。Murphey 建议 web 开发者熟练掌握 Node.js 的相关知识,至少要了解如何初始化一个 Node 项目、如何搭建一台 Express 服务器、以及如何使用 request 模块转发请求。

Philip Walton 是来自 Google 的一位软件工程师,他最近撰写了一篇博客文章“如何成为一名优秀的前端工程师”。这篇文章的观点另辟蹊径,他并没有向读者推荐任何工具或框架,而是专注于如何处理这一领域中的某些挑战。在他看来,优秀员工与真正杰出的人才的差别不在于他们的知识量,而在于他们的思考方式。他是这样描述开发者的智慧的:

真正理解背后的过程。对于 Walton 来说,仅仅编写出可以运行的代码算不得优秀。他见过许多编写 CSS 与 JavaScript 的人,他们 “只求找到能够运行的代码,然后就继续下一步工作了。”很多时候,开发者并不了解某段代码运行的机制。Walton 建议开发者进行深入钻研:

要充分理解代码的工作原理或许会很耗时间,但我向你保证,从长远来说,这种方式最终将节省你大量的时间。一旦你充分理解你所参与的系统是如何运作的,你就无需不断地进行猜测与检验这些费时的工作了。

预先了解浏览器将产生的改动。Web 开发者应当持续了解有哪些浏览器的改动会破坏现有的代码。以下代码在 IE10 中必然会导致整个 JavaScript 框架的方法出错:

var isIE6 = !isIE7 && !isIE8 && !isIE9;

仔细阅读规范。Walton 指出,虽然阅读规范是一项艰辛的任务,但一旦出现浏览器对某个页面的渲染不同的情况,这一任务就是不可避免的了。他为此特别举例说明:

最近我遇到这样一个例子,与可伸缩(flex)元素的默认最小尺寸有关。根据规范所说,可伸缩元素的 min-width 与 min-height 的初始值是 auto,而不是 0,这就意味着在默认情况下,这些元素不可能收缩到比其中的内容尺寸还小。而在过去 8 个月中,Firefox 是唯一一个正确地实现了这一特性的浏览器。

如果你遇到了这个跨浏览器的不一致性问题,并且注意到你的网站在 Chrome、IE、Opera 和 Safari 上的展现完全相同,只在 Firefox 上有所差别,那你很可能会认为是 Firefox 的问题。实际上,我曾多次发现这一情况,在我的 Flexbugs 项目中,有许多由用户报告的 bug 其实都是由这种不一致性所导致的。而如果我按照用户所提议的那些临时方案来改变实现方式,那么在两周前所发布的 Chrome 44 中又会产生问题。由于这些临时方案选择了违背规范的方式,它们在无形中起到了提倡不正确行为的负面作用。

代码审查。Walton 表示,从阅读他人的代码中可以学到很多知识,它可以拓宽你的思路,了解“新的工作方法”,同时也有助于你在团队中的工作。实际上,这一点确实相当必要,因为“作为一位工程师来说,你的时间大部分都是在一个现有的代码库中添加或修改代码”,而不是从头开始编写全新的代码。

与更聪明的人一起工作。Walton“强烈”建议你至少在职业生涯的初期阶段要尽量在某个团队中进行工作,向更有经验的团队成员学习,并让他们审查你的代码。如果之后选择了自由职业者这条职业路线,那么 Walton 建议你参与开源项目,这同样可以感受到在团队中工作的益处。

重复发明轮子。Walton 相信,虽然“重复发明轮子对于业务来说是有害的”,但它对于学习很有好处。在有些情况下,他建议你自己编写代码,而不是依赖于第三方的代码,因为这一过程将让你学到许多东西。当然这也要看情况而定。

将你的经验记录下来。Walton 的最后一条建议是将你所学到的东西用文字记录下来:“按我的经验来看,写作、演讲以及开发 demo,这些方法能够迫使我对知识点进行充分的挖掘,并做到从内到外的完全理解。哪怕你写的东西完全没人看,但写作的过程本身就已经值得你付出的努力了。”

查看英文原文: Becoming a Great Web Front-end Developer

2015-08-09 08:0010216
用户头像

发布了 428 篇内容, 共 182.2 次阅读, 收获喜欢 39 次。

关注

评论

发布
暂无评论
发现更多内容

MySQL SQL脚本语句加上数据库存在判断

Andy

2023-05-28:为什么Redis单线程模型效率也能那么高?

福大大架构师每日一题

redis 福大大

GPT用于复杂代码生产所需要满足的必要条件

canonical

低代码 GPT GPT-4 可逆计算

Parallels Desktop如何退出账号?PD18虚拟机退出账号方法

理理

Parallels Desktop下载 PD18虚拟机破解 Parallels如何退出账号

mac分屏功能怎么用?mac分屏软件推荐 magnet

理理

Magnet中文版 Magnet破解版 mac分屏功能 Magnet Mac下载 苹果窗口管理软件

StarUML教程:CLI(命令行界面)功能的使用

理理

StarUML教程 CLI(命令行界面) UML软件建模器 StarUML for Mac StarUML Mac破解下载

Typora for Mac:一款极简风格Markdown写作软件

理理

Typora破解 Mac软件 Markdown文本编辑器 Typora Mac下载

GitHub星标126K的京东「微服务进阶笔记」首次开源!好评如潮

Java你猿哥

Java 架构 微服务 Spring Cloud ssm

软件测试/测试开发丨学习笔记之Web自动化测试

测试人

程序员 软件测试 自动化测试 测试开发 web自动化

软件测试/测试开发丨学习笔记之用户端Web自动化测试

测试人

程序员 软件测试 自动化测试 测试开发 web自动化

QUIC 协议:特性、应用场景及其对物联网/车联网的影响

EMQ映云科技

车联网 物联网 mqtt QUIC

耗时一周整理的牛客网上最火Java面试八股文,面试必备

架构师之道

Java 面试

关于Spring Cloud Alibaba,看阿里这篇笔记真香

Java你猿哥

分布式事务 微服务 Spring Cloud 服务治理 Spring Cloud Aliababa

iOS MachineLearning 系列(20)—— 训练生成CoreML模型

珲少

写给程序员的可逆计算理论辨析

canonical

开源 低代码 Docker 镜像 可逆计算 Nop平台

ps神经滤镜是干什么的,神经滤镜的功能和作用

理理

ps神经滤镜 PS2023破解 Neural Filters下载 Photoshop2023 Mac

大模型全情投入,低代码也越来越清晰

引迈信息

低代码 大模型 JNPF

阿里巴巴工程师1480道Java面试题及答案整理( 2023年 整理版)

Java你猿哥

Java MySQL redis JVM java面试

学懂缓存雪崩,缓存击穿,缓存穿透仅需一篇,基于Redis讲解

Java你猿哥

Java redis 缓存击穿 缓存雪崩 Redis缓存穿透

MySQL Idea 启动主程序 无法识别时区

Andy

Git安装和配置教程:Windows/Mac/Linux三平台详细图文教程,带你一次性搞定Git环境

小万哥

git Linux 程序员 后端 C/C++

利用springboot初始化机制三种实现策略模式的应用

Java你猿哥

Java spring Spring Boot 设计模式 ssm

Redis和MySQL的爱恨情仇!

Java你猿哥

Java MySQL redis ssm 缓存雪崩

经典智能合约案例之发红包

timerring

区块链

用Python做一个翻译器 | Python小知识

AIWeker

Python 人工智能 python小知识

阿里巴巴Java开发手册(华山版)

Java你猿哥

Java MySQL ssm JAVA开发 Alibaba

智能工厂 | 联合汽车电子有限公司汽车驱动科技上海智能工厂

工赋开发者社区

希尔伯特旅馆里,住着AI的某种真相

脑极体

AI 智能涌现

文心一言 VS 讯飞星火 VS chatgpt (24)-- 算法导论4.2 6题

福大大架构师每日一题

福大大 ChatGPT 文心一言 讯飞星火

太牛了!在GitHub上“千金难求”的SpringBoot趣味实战课免费分享

Java你猿哥

Java spring Spring Boot ssm SpringBoot实战

MySQL 启动apollo-adminservice 报错 Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'serverconf0_.Cluster' in 'field list

Andy

成为一名优秀的Web前端开发者_JavaScript_Abel Avram_InfoQ精选文章