vlambda博客
学习文章列表

【译】前端开发技能是否足以胜任一份职业?

前言

业务焦虑,要对某个特定领域(业务)熟悉。本文这篇应该是英文,顺手意译了一下,有兴趣的大概了解一下。本期由facebook@Yangshun Tay分享。

正文从这开始~~

我最近参加了新加坡国立大学的黑客星期五黑客活动,在那里我遇到了一名大一的本科生,他问了我一个关于前端作为职业的问题。

说实话,我非常喜欢前端开发——web技术、UI/UX、web设计等等。但是随着越来越多的新开发者可以接触到这些技能(create-react-app, parcel等),我不禁想知道这些技能是否足以在今天的科技行业生存。这并不是一件坏事!降低程序员的进入门槛总是好的。然而,对于像我这样想把前端开发作为职业的人来说,我只是想知道拥有这些技能是否就足够了。

有趣的问题。我以前也对自己提出过同样的问题,但我确信现在我可能只需要涉足前端开发就可以了。😌

前端是复杂的,而且越来越复杂

大多数人会使用facebook.com、youtube.com和gmail.com等网站。这些应用程序有数百名工程师在工作(如果包括后端,则需要数千名工程师)。由于应用程序的要求性质-它必须加载速度快、安全、外观漂亮。如今,前端开发不再仅仅是构建呈现静态HTML的网站。现在的许多网站实际上都是web应用程序,必须在应用程序体系结构中投入大量的思想,这需要良好的软件工程能力。

这就是为什么你现在会看到很多前端工具,比如React、Redux、Relay、CSS模块、webpack等等。这些工具的存在是因为在web上构建丰富而高性能的用户体验的需求日益增长。成为一个优秀的前端开发人员是非常困难的,需要了解很多方面——HTML、CSS、JavaScript、浏览器api、安全性、性能、动画、SEO、网络,这个列表不是详尽无遗的,而且还在不断增长。总是有新的问题需要解决,有新的东西需要学习。几年前,由于前端生态系统中工具的爆炸式增长,JavaScript疲劳是一个相当常见的术语。事情变得更加稳定了,但是JavaScript社区目前仍然是变化最快的社区之一。

移动设备的兴起是否会威胁到网络开发者的生存?

许多产品现在都有一个原生应用程序版本,这可能会让人们认为前端(web)开发人员的存在可能受到威胁。我认为这只是在很小的程度上是正确的。优步(Uber)和Lyft这样的应用程序以移动为先是有道理的,但也有许多复杂的专业应用程序,比如办公效率和设计软件,web(或任何屏幕更大的界面)将永远占据上风。从更宏观的角度来看,移动应用程序和web应用程序都属于客户端应用程序的范畴。许多核心技能对于成为优秀的web开发人员很重要,对于移动应用程序开发也很重要——它们可以跨平台迁移。

像React Native和Flutter这样的工具也被开发出来,帮助工程师通过“一次”编写代码来构建跨平台的产品。这种方法并不是一种银弹式的解决方案,它还需要充分的证明自己,但是对于小型应用程序的原型设计,或者仅仅是移动应用程序的某些部分,它是非常有效的。在React Native中,你使用 React Native 原语编写应用程序,React Native运行时在平台中的JavaScript引擎上运行代码构建本机应用程序UI视图并处理应用程序逻辑。这与编写典型的web前端代码非常相似。Facebook的广告管理应用程序和市场标签是使用React Native构建的。通过了解web前端开发,有许多技术可以让您在移动平台上构建本地应用程序。

尽管移动设备的使用在不断增加,但仍然存在许多桌面电脑擅长的例子。谷歌套件,微软办公软件,设计工具仍然是更有效地操作在桌面上。事实上,现在许多桌面应用程序都是基于HTML5技术构建的,而不是使用诸如Electron之类的工具将web应用程序代码打包成可执行文件并交付给用户。你可能已经在不知情的情况下使用了其中的一些工具——Slack、Discord、WhatsApp桌面、VS Code、Atom编辑器等等。我认为只熟悉本地桌面平台工程技能的开发人员比前端开发人员更有理由担心。

网络是难以置信的跨平台!

多面手,精通一门(或多门)

然而,我认为作为一个前端开发在很多方面,被认为是一个专业的职位。这就是为什么t型很重要。我第一次接触这个术语是通过我在Grab的前经理Tim Goh。他建议我有一个专业(前端),但仍然知道一点点的一切。换句话说,你在你的核心基础方面很强,但你也擅长于一个特定的领域。

这是个好建议,而且也不是什么新建议。在大多数大学课程中,学生在选择自己的专业领域之前,都要学习基础课程。在新加坡国立大学计算学院的背景下,学生们在学校开始学习算法、数据结构、软件工程、操作系统、计算机网络等基础课程,然后选择编译器、计算机图形学、人工智能和机器学习、媒体、网络等更深层次的专业领域。

有了坚实的基础,人们就有可能转换域的可能性。肯定会有一个循序渐进的过程,但是有了坚实的基础,有了快速学习的技巧,这个过程就会变得更加顺畅。在极端的情况下,网络变得无关紧要,没有公司愿意雇佣前端开发人员,拥有强大基础的前端开发人员可以通过移动或后端工程,甚至是最热门的UI平台(AR/VR?)

有好的工具可以使用(如Create React App, Parcel)并不意味着前端开发人员需要具备良好的软件工程技能。如果你是负责构建工具的人,会发生什么?优秀的前端开发人员(或真正的软件工程师)深入抽象层,了解他们的工具如何工作,以及工具要解决哪些问题。他们还不断寻求挑战和改善现状,通过建设更好的技术来满足日益增长的需求。

在Facebook,前端工程师首先是软件工程师,其次才是领域专家。我在Facebook认识的许多前端工程师都对技术堆栈有着深刻的理解,他们不只是从事与浏览器相关的工作。在Facebook的范围内,前端工作还包括建立大量的基础设施,使我们的前端代码基础能偶很好地满足不断增长的技术和人们的需求。这意味着编写代码来进行大规模重构、发明新的UI范例、性能测试框架、为非类型化语言创建类型检查器、改变从服务器获取数据的方式并在客户端管理数据。如果Facebook的前端工程师没有强大的软件工程技能,这些工具就不会存在。

学习新的相关技能

如果没有机会在一个不相关的领域学习新技能,可能会很难。幸运的是(或者不是),由于前端生态系统中工具的爆炸式增长,我发现了一个领域,我对编程语言理论(静态分析、编译器和积分器)产生了新的兴趣。静态分析在我每天使用的工具中非常重要ーー它被模块bundlers用于将 JavaScript 文件捆绑在一起,从更加用户友好的 CSS 语法生成 CSS,现代JavaScript编译为JavaScript的旧版本,更常见的浏览器可以运行,甚至这篇用 Markdown 写的博客文章也使用静态分析转换成 HTML。

在学习了这本很棒的名为《interpreter》的书之后,我一直在考虑编写自己的interpreter,并将在业余时间进一步探索这个领域,将来可能会构建利用静态分析和编译的前端相关工具。

在一个相关但不同的领域增加新的技能可以帮助我在行业不再需要前端开发者的情况下保持相关性

总之,尽管前端开发被认为是非常专门化的,但是有足够的需求和复杂性使其在未来几年保持相关。威胁到互联网的将是用户与应用程序交互方式的彻底转变,可能会变成一种非视觉的范例,比如大脑控制的界面。然而,思维模式的转变不会在一夜之间发生,在这种情况下有足够的时间来做出反应(双关语)。精通软件工程基础知识,知道如何快速学习新技能,这将有助于你在不同的领域(以及职业)之间进行转换。

意见是我自己的,不代表我的雇主的意见。

为你推荐