我的 2019 年 Web 开发个人技术栈

2025-05-24

我的 2019 年 Web 开发个人技术栈

在本文中,我将谈谈我的个人技术堆栈和 Web 开发相关工具。

但是,在开始之前,请允许我先简单介绍一下自己。

我是谁?

我是一名 Web 工程师,在一家电子商务/支付公司工作,主要从事后端开发,使用 Golang 和 Java 作为核心技术。

我于 2011 年计算机科学专业毕业后开始编程。

我仍在寻找我真正的激情所在,我的第一份工作是在一家非常小的初创公司,这迫使我做从前端到后端的所有事情以及一些基本的操作,而在过去,HTML、CSS 和 jQuery 足以构建前端。

多年来,我更加专注于后端开发,主要使用 PHP 和 Symfony。

后端开发、软件架构和工程实践是我的主要关注点和热情所在,但我想了解软件开发生命周期的所有领域,并能够自行构建和推出任何产品,“从创意到生产”。

这就是我的目标,并尝试平衡我的学习来反映这一点。

如今,成为一名全栈开发专家几乎是不可能的。科技世界太广阔了。但我也不相信“单一语言”开发者的存在。

快速学习和适应的能力是一项必备技能。

我认为最佳平衡点介于两者之间。我非常认同“T型开发者”的概念。

如今,全栈开发人员这个术语也非常主观,因为除了传统的前端/后端之外还有更多的领域。

我喜欢 Adam Wathan 的这个定义:

这就是我想要成为的全栈人才。

在接下来的部分中,我将介绍一些我最喜欢的适用于 Web 开发所有领域的技术和工具。

请记住,我并不是所有这些方面的专家。远非如此。

是的,后端技术和一些基础设施,我有丰富的经验,并且每天都在使用它们。

其他的,更多的是通过阅读文章、书籍和小实验获得的理论知识,但我确信这些知识的价值,并计划在有机会时将它们用于实际项目中。

后端

那么让我们从我的主要专业领域后端开发开始吧。

我的技术栈中主要有两种语言:PHP 和 Golang。

PHP 和 Symfony

PHP 和 Symfony 是我比较熟悉的技术,因为我的职业生涯大部分时间都在使用它们,从旧的 PHP 5.3 和 Symfony 1.4 到闪亮的 PHP 7.3 和 Symfony 4。

PHP 或许并非当今最流行、最漂亮的语言,但它却是一门非常成熟的语言,在过去几年里取得了长足的进步。它还拥有一些优秀的库和框架,以及一个强大的社区。

它是一种“无聊”的语言,在我看来,在你的堆栈中拥有一种无聊的语言,你可以依靠它快速构建工作软件而不需要考虑太多,这是任何开发人员必备的。

如果没有Symfony ,我可能不会对 PHP 如此热衷

Symfony 是一个出色且成熟的框架,专注于良好的 OOP 设计和设计模式。它拥有非常完善的文档,并且非常注重开发人员的体验和性能。

如果您喜欢 OOP、设计模式和简洁代码,那么使用 Symfony 会是一种乐趣。

我不再在工作中使用 Symfony,但我已经工作很多年了,我可以使用它非常快速地构建产品。

Golang

我从事 Golang 专业工作已有一年多了,这是一段奇妙的经历。

我认为它与 PHP 形成了很好的互补,因为 Go 的一些优点恰恰是 PHP 的一些最弱点,例如并发性和长时间运行的进程。

Go 语言极其轻量且强类型,我很喜欢。它并非真正的面向对象语言 (OOP),但拥有一些强大的概念,例如接口,有助于构建结构良好且模块化的代码库。

Goroutines 非常适合构建高度并发的应用程序。

作为一种编译语言,它易于分发和安装,使其成为最适合命令行应用程序、系统工具、实用程序、微服务和 API 的语言之一。

Go 席卷了 DevOps 工具领域,成为KubernetesDockerTerraform等流行软件的首选语言

我编写了越来越多的 Go 语言,它正在成为我的主要语言。

有了 Symfony 和 Go,我相信我可以解决 99% 与后端开发相关的问题。

未来

我将继续更多地使用 Go,但 Symfony 在我心中永远占据着特殊的位置。

Typescript是一种我关注的语言,因为它越来越流行。

我从来没有真正用它做过所有的事情,但如果有一天我想用我的堆栈中的 OOP 语言取代 PHP,Typescript 看起来是一个强有力的候选者。

我还想尝试一下更函数式的语言。Scala、Haskell,不过还没想好。


前端

我明年的目标之一是提高我的前端技能。

每周都会有一个新的 JS 框架,而我不想成为一名前端开发人员,因此选择一个稳定、成熟、具有良好的向后兼容性记录、良好的文档和庞大社区的堆栈是需要考虑的非常重要的因素。

目前有两个主要的生态系统符合这些标准:ReactVue

我选择 Vue 是因为我更喜欢它使用模板而不是 JSX 进行设计的方式,而且我认为它更容易理解。

Vue 拥有强大的工具和库生态系统。

使用 Vue 本身来构建单页应用程序,使用NuxtJS来构建需要服务器端渲染的应用程序,使用Gridsome来构建更多静态站点,我可以构建各种前端。

我甚至可以连接Nativescript来构建原生移动应用程序。

如果您更喜欢 React 生态系统,那么也存在相同类型的工具。Next.js代替 Nuxt,GatsbyJS代替 Gridsome。

一些 React 工具更加成熟,例如 Gatsby 与 Gridsome 相比,但我仍然希望它们能够赶上。

CSS 是很多后端开发者的痛点。我的设计能力也很糟糕。

Tailwind CSS是一个很好的选择,我期待Tailwind UI的组件。

或者您可以使用经典的 Bootstrap 并从Themeforest等网站购买一些主题。

脚本

每个开发人员都需要不时地执行某种实用程序脚本,从数据迁移实用程序到部署脚本。

Python 是此类脚本最流行的语言之一,因为它非常容易学习并且预装在许多系统中。

但 Go 在这方面也非常合适。你可以在本地用简单的“go run”运行它,也可以将它编译成一个包含所有依赖项的二进制文件(这在 Python 中比较麻烦),以便在远程系统上运行。

我可以编写 Python,但由于我在使用 Go 方面经验更丰富,因此它成为此类脚本的自然选择。

借助 bash 的一点帮助可以完成更多基本的事情 ;)

数据存储

几乎每个应用程序都需要以某种形式存储数据。

我使用MySQL来处理关系数据,使用Redis来处理内存数据库、缓存等,使用ElasticSearchAlgolia来执行全文搜索。

当我不想费心设置数据库,NoSQL 存储就足够时,Cloud Firestore真的很有用。它非常适合原型、小型个人应用以及专注于前端/移动端的应用。

我开始更多地关注一些“​​云原生”解决方案,例如FaunaDBArangoDBCockroachDB

消息传递

消息队列系统在许多用例中都很有用,例如长时间运行的进程或不同服务之间的通信。

在我目前的工作中,我使用Apache Kafka,它非常适合复杂的事件驱动系统。

对于个人项目,大多数情况下,我想要一个更简单、更托管的解决方案。这时,Amazon SQSGoogle Cloud Pub/Sub就派上用场了。它们对于大多数基本工作负载都是免费的。

对象存储

对于存储用户上传的文件,Google Cloud StorageDigitalOcean 空间是两个不错的选择。

另一项出色的服务是Cloudinary ,它更专注于媒体上传。

CMS 和 BaaS

为了轻松提供内容编辑功能,Netlify CMS非常适合基于 Git 的工作流,而Prismic非常适合类似 API 的工作流。

对于自托管解决方案,请选择 DirectusStrapi

基础设施

未投入生产的代码实际上没有什么用处。

我相信每个开发人员都应该了解基础设施和应用程序部署的基本概念。

我非常欣赏 Netlfix 的“运营你所构建的”和“全周期开发人员”的概念,其中开发系统的团队也负责运营和支持该系统。

您可以在这篇博客文章中阅读更多相关内容。

云服务通过抽象网络、存储等低级复杂性,使开发人员能够更轻松地完成所有这些工作。

对于通用型主机托管,我首选DigitalOcean平台。它对开发者非常友好,而且服务优质,价格实惠。

他们提供的服务不如 AWS 或 Google Cloud 等大型公司丰富,但托管 Kubernetes 集群和托管数据库的引入是一大进步。

在今年早些时候他们收购了Nanobox之后,我对他们未来的PaaS也非常好奇。

当 DigitalOcean 不能满足我的所有需求时,我就会使用Google 云

Cloud RunCloud FunctionsContainer RegistryCloud Pub/subCloud SchedulerCloud firestore等工具为构建各种应用程序提供了基础。

这些工具具有很好的免费层级,允许免费构建小型项目。

对于提供基础设施,TerraformAnsible运行良好。

当我只需要部署前端或静态站点时,我会使用Netlify

Namecheap用于管理我的域名,Cloudflare用于 DNS 和 CDN。

对于监控,Google Cloud 和 DigitalOcean 都提供了良好的内置基本监控功能。

作为替代方案,DatadogSentry是一些很棒的工具。

我仍在寻找一个好的日志解决方案。Logz.io看起来不错,它基于 ELK 技术栈,这个技术栈非常流行,我工作中也在用。他们的社区计划对小型项目来说也非常慷慨

UptimeRobotOpsgenie保证我在网站关闭时收到通知。

工具

我正在使用GitLab进行私人项目和 CI/CD,但随着私有仓库的免费计划以及 GitHub Actions 和包注册功能的推出,我可能会把所有内容都迁移到GitHub。这是一个艰难的决定,因为我很喜欢 GitLab 的产品愿景,但 GitHub 在某些方面仍然更加完善。

Codacy为我提供了自动代码审查和代码分析功能,并且 4 个用户可以免费使用。

对于编码,我使用VScodeJetBrains IDE。

DockerDocker-Compose提供了简化的开发环境。

Postman用于测试 REST API,Cacher用于存储代码片段,Dbeaver用于连接数据库。


结论

我真的很喜欢我的堆栈,我相信我可以用它构建几乎任何与网络相关的东西。

这不是一个静态列表。

在科技领域,一切都在快速发展。

定期更新和尝试新技术非常重要,我的堆栈将在此基础上不断发展。

但避免“炒作驱动开发”非常重要。

你的堆栈中总是有一些“无聊”的成熟工具,它们可以让你以快速和可持续的方式继续构建事物。

最终,人是最重要的,因此,要专注于构建有用的东西,改善人们的生活,而不要依赖于堆栈!

替代文本

文章来源:https://dev.to/brpaz/my-2019-personal-tech-stack-for-web-development-2d5j
PREV
我的 2018 年 Linux 开发环境
NEXT
如何以质量思维启动软件项目