我应该成为前端开发人员还是后端开发人员?
这篇文章我一直想写很久了。
“我应该成为前端开发人员还是后端开发人员?”这个问题经常被提及,所以我也想在这里提出这个问题。不,这不是为了我自己,作者,而是为了你,可能刚接触编程、正在纠结该选择哪个方向的读者。
这个问题通常以二选一的方式提出,选项之间只有一种可能,绝不会同时出现两者。更重要的是,这个问题通常暗示,对于有抱负的开发者来说,这真的是仅有的两条道路。
我想向你提供一个探索性的思维实验,让你了解如果你想进入软件开发领域,还有哪些其他可能性值得探索。前端和后端Web开发只是众多可能性中的一小部分!
为什么你会考虑其他开发领域呢?Web 开发现在炙手可热,肯定是最佳选择,对吧?其实不然。不太热门的职位通常意味着竞争较小,申请人数也较少,因此公司往往会提供更高的薪酬,以吸引最优秀的候选人。
但是,你可能会问,“作为一名开发者,还有哪些其他的可能性?”
让我们先来详细探讨一下Web开发人员的概念。目前使用的核心后端语言和工具包主要围绕PHP、Node.js、Python、Ruby、.Net和其他类似语言展开。
现在想想这些语言各自的库。
你是否包含了访问数据库的模块?问问自己,“这个库是谁写的?”
有没有能解析 JSON 的库?或者能为数据生成 JSON 的库?XML 也一样?有没有能读取 JPEG 图像文件元数据的库?或者有没有能从其他系统获取 HTTP(s) 内容的库?
这些库都是由个人或团队编写、管理和维护的代码。这类库通常是开源的,并且欢迎贡献代码!
但它们是如何产生的呢?通常是有人在做某个项目时,发现了某种需求,编写了一些可重用的代码,然后决定将其打包成一个库。
举个例子,我以前用 PHP 做 Web 开发的时候,经常要写复杂的 SQL 查询语句来操作数据库。后来我发现大部分代码都是重复的,所以最终我把它们打包成一个单独的库并公开发布了。
有时候,看似简单琐碎的事情,却能为他人节省大量研究时间。我发布的另一个库只有一个文件和一个函数。它可以将运单号/追踪号码转换成各个承运商追踪网站的URL。只需将美国邮政(USPS)的追踪号码传递给该函数,它就能输出该包裹的追踪URL。虽然并不复杂,但这意味着我们可以众包研究多种不同的追踪号码格式!当使用该库处理其他承运商的包裹时,他们可以将这些承运商的追踪号码格式作为问题跟踪条目或提交拉取请求的方式提供,这样大家都能从中受益。:)
现在让我们把话题引向稍微复杂一些的方向。计算机语言并非独立存在,而是会随着时间推移而更新。这究竟是怎么回事呢?
计算机能够读取和理解Node.js内部的PHP或JavaScript等代码,而这些代码本身也是用其他语言编写的程序。这些领域目前也正处于活跃的开发阶段。其中一些语言背后有知名公司的支持,例如微软的.NET、谷歌的Go、苹果的Swift以及Facebook的Hack。每家公司都有专门的团队全职开发这些语言!
让我们退后一步,从更宏观的角度来看待这个问题。
你是Mac用户吗?还是Windows用户?Linux用户呢?或者甚至是FreeBSD用户?这些系统也都有人积极维护!嗯,算是吧……
是的,每个项目背后都有大量的人员参与。然而,它们并非独立的程序,而是多个程序的集合,这些程序通常由完全不同的团队维护。
例如,Windows 开始按钮的代码库与记事本的代码库完全不同,由完全不同的人员管理!
但这并不仅仅局限于面向用户的桌面应用程序。
整个计算机是由多层不同类型的程序层层叠加而成,所有这些程序彼此相互作用。
例如,你的键盘很可能是 USB 接口的(即使你用的是笔记本电脑,笔记本电脑自带 USB 接口也很有可能是 USB 键盘)。现代键盘的固件会接收按键信号,然后通过 USB 将信号发送回 USB 根设备。
想想看:“谁编写键盘固件?”
但是,USB 根设备会通过 PCI-Express 等方式与系统的其余部分进行通信。
想想看:“谁编写了USB接口代码?”
然后操作系统中还有一个键盘驱动程序,用于接收和解释这些命令。
想想看:“谁编写键盘驱动程序?”
驱动程序随后向操作系统内核发送信号,由内核进行处理和路由。
想想看:“键盘内核子系统是谁编写的?”
此时,键盘子系统通过内核的 ABI(应用程序二进制接口)将消息路由到当前处于活动状态且焦点所在的应用程序。
想想看:“ABI是谁编写的?”
假设我们的应用程序恰好是一个网页浏览器。这个网页浏览器在屏幕上显示一个表单,其中包含几个可交互的元素。
想想看:“是谁编写了浏览器代码来处理键盘事件,并将其发送到网页上正确的焦点项目?”
而这一切仅仅是因为你每次按键,每次打字。
网络浏览器的功能远不止接收键盘输入。它们使用各种协议通过网络发送和接收数据,对数据进行加密以保护隐私和安全,解码和显示各种照片、音频和视频格式,以及具备无数其他功能。
这看似一项艰巨的任务,但实际上并非如此。正如前文所述,这一切都是通过一系列更小、更简单的库来实现的。这些库大多完全独立于浏览器本身进行维护。
想知道这些库是什么吗?在基于 Chromium 内核的浏览器(例如 Google Chrome、Microsoft Edge、Opera 等)中,依次点击“设置”>“关于”,然后点击“开源软件”。我目前正在使用的 Microsoft Edge 浏览器列出了 371 个库。
你的操作系统中使用命令行界面吗?
每一条命令行界面命令都是某人曾经编写的程序或脚本。
是谁编写了所有这些命令?是谁管理和维护它们?谁又将编写它们的下一个版本?那个人很可能就是你!
但当我们离开台式电脑时,外面还有什么呢?
想想看……
我的智能电视的用户界面是谁编写的?
谁在编写手机应用程序?
等等,手机操作系统是谁编写的呢?!
那么那些物联网设备呢?谁来编写智能插座、智能开关和其他物联网设备的程序?
还有那些大家都喜欢操控的无人机,它们的软件是谁编写的呢?
正值圣诞假期,是谁编写了控制圣诞彩灯闪烁的微控制器代码?
谁负责编写你家微波炉或炉灶的数字界面程序?
当你开车行驶在路上时,是谁在控制交通信号灯?
那么,广告牌和商家橱窗上的电子标牌呢?
RGB LED灯现在非常火爆!但是谁来编写让它们变色和闪烁的代码呢?
最后,还有一个必须回答的问题……谁来设置录像机?
但这远非程序员可以探索的所有领域!面对无穷无尽的可能性,很快就会让人感到不知所措。
然而,其中绝大多数问题都可以归结为一个更简单的概念:问题和解决方案。
归根结底,我们作为开发者所做的,就是使用结构化的命令让电子设备为我们解决问题。
所以,下次当你思考“我应该成为前端开发人员还是后端开发人员”时,不妨换个角度思考“我想要解决什么问题,以及哪套工具最适合解决这个问题?”
或许扩展现有库就能解决当前问题。或许开发一个新的命令行工具也能解决问题。又或许确实需要一个友好的基于 Web 的图形界面。归根结底,这取决于有哪些工具可用,以及在当前情况下哪些工具最适合完成任务。
文章来源:https://dev.to/darkain/should-i-become-a-front-end-or-back-end-developer-5b9i