后端老兵的前端突围:从 C++ 到全栈的进化之路


2017 年之前我是一名拥有四年多 C++ 开发经验的“老”后端。如果你也曾像我一样,在后端的世界里挥洒青春,却因为工作需要不得不硬着头皮踏入前端这片“新大陆”,那么这篇文章或许能给你一些共鸣和启发。

在我的职业生涯早期,C++ 是我的主要武器。我习惯了它的严谨、高效,以及对底层细节的掌控。Python 和 Go 也曾涉猎,但始终未能成为工作中的主力。至于 Shell 脚本,简单的操作尚可应付,一旦遇到复杂的安装脚本,就如同天书一般,让我一头雾水。

转折点出现在 2018 年,当时我作为后端主程负责一款新游戏的开发。其中一项重要的任务就是构建管理后台以及设计相关的 HTTP 接口。起初,我们自然而然地考虑过使用熟悉的 C++ 来实现这些需求。然而,C++ 在提供 HTTP 接口方面的复杂性让我望而却步,这个方案很快就被否决了。

最终,我们选择了 Go 来实现游戏登录前的数据获取等服务。不得不承认,Go 在构建 Web 服务方面确实有着得天独厚的优势,开发效率也相对较高。然而,真正的挑战还在后面——前端页面的开发。

对于一个没有任何前端基础的后端工程师来说,Go 的 Template 只能解决最简单的页面展示问题。例如,实现一个简单的用户列表和分页功能,就花费了我相当长的时间。随着业务逻辑的复杂性增加,Template 的局限性也暴露无遗。它能处理简单的参数传递,但对于稍微复杂一些的逻辑,就显得力不从心。

没办法,我只能硬着头皮开始学习 JavaScript。HTML 相对简单,CSS 当时也没被我放在重点关注的位置,心想大不了界面难看点,能用就行。很多前端框架也自带了基础的样式,这在当时对我来说简直是救命稻草。

然而,单纯学习 JS 语法只是万里长征的第一步。如何在浏览器端真正运行 JS 代码,这其中涉及到的知识远不止语法本身。JS 缓存如何禁用?如何调试 JS 代码?这些看似基础的问题,在最初都像一座座大山横亘在我面前。在那个没有强大 AI 辅助的年代,一个小小的报错就可能耗费我一整天的时间。我还记得我的一个同事,为了解决一个看似简单的 if 判断总是进入 {} 代码块的问题,熬了一个通宵,最终才发现竟然是在 if 语句的括号后面多加了一个分号!现在回想起来,虽然有些哭笑不得,但当时的无助感却是真真切切的。

好不容易JS的基本问题解决了,接下来又要面临技术选型——选择哪个前端框架?当时的我,并没有选择流行的 Vue 或 React,总觉得它们过于“笨重”,不太符合我们当时两三个后端既要开发业务逻辑、后台管理系统,还要兼顾运维工作的“小而美”团队的需求。最终,我们选择了一个策划提供的基于 Bootstrap 开发的框架就开始了。

然而,仅仅掌握 JS 和一个简单的框架,离实现功能完善的管理后台还差得很远。后台管理系统往往需要展示和处理大量的数据,而我当时的 MySQL 水平也仅仅停留在“会一点点”的程度。于是,我又开始了 MySQL 的学习之路。

随着时间的推移和不断的实践,我逐渐熟练掌握了前端和数据库相关的技术。当我把这些功能一点点实现出来后,又开始反过来补足 Go 语言的使用。毕竟,我也曾因为对 Goroutine 的理解不够深入,在发送推送消息时,错误地使用了闭包环境中的变量,导致给一个用户发送了几万条重复消息,场面一度非常尴尬。

当掌握的知识越来越多,我反而不再畏惧学习新的东西了。后续再实现游戏管理后台的各种功能,就变得越来越得心应手。特别是当我将常用的框架结构整理出来,并对权限管理、页面布局等内容进行抽象和封装后,再加上近几年 AI 技术的飞速发展,以前需要一周才能完成的功能,现在往往只需要半天就能高效完成,而且 bug 也极少出现。

回顾这段从后端“被迫”转前端的经历,我有一些经验想和大家分享:

  • 拥抱变化,不要给自己设限: 最初我以为后端就应该只专注于后端,但现实告诉我,掌握一些前端技能对于提升工作效率和解决问题非常有帮助。
  • 善用工具,特别是 AI: AI 不仅仅是一个代码助手,更是一个可以帮你拓展思路、发现更优方案的伙伴。
  • 技术选型要谨慎: 不要盲目跟风,选择最适合自己团队和项目需求的才是最好的。务必在 Github 上查看框架或库的 star 数量和维护状态,避免使用无人维护的“僵尸代码”。对于 Go 语言来说,我个人建议尽量选择 star 数超过 1K 的仓库。
  • 学习新语言要抛开固有思维: 不要试图用你熟悉的语言的模式去套用新的语言,更不要进行简单的代码翻译。学习一门语言的最佳实践,才能真正理解它的精髓。

这段经历虽然充满挑战,但也让我从一个纯粹的后端工程师,成长为能够独立负责前后端开发的“准全栈”。我希望我的这段经历能给正在经历类似困境的朋友一些鼓励和启发。前端并非洪水猛兽,只要你愿意迈出第一步,并坚持学习,终将能够破茧而出,拥抱更广阔的技术世界。