从前端走向后端

从前端走向后端

每次过年回老家聚会,遇到不熟悉的亲戚朋友,经常被问到职业是什么。一开始,我总是很认真的回答这个问题,结果常常引出一番尴尬的问答。

“你是做什么的?”  
“我是做软件的,程序员。”  
“做APP的吗?”  
“不算是,但是又有关系,做APP分前端和后端,我做后端的。”
“什么是后端?“
“后端就是你看不到的东西”
“我都看不到,做了有什么用?”
“比如你在淘宝上购物,点了‘提交订单’按钮,弹出‘正在提交’的对话框,背后还做了很多事情比如核销优惠券、检查商品库存等等,这叫做后端。”
“你这样说我就明白了。”
“明白了吧!”
“你是管仓库的。”

以上是和一个读过大学的年轻人的对话,要是老年人就更谈不下去了。隔行如隔山,为了避免浪费口舌,我调整了一下策略。再有人问我“你是做什么的”,我都回答“修电脑的”,结果有好事者就掏个碎屏的手机出来,说“电脑可以修,手机也可以修吧?”。

严格来说,我算是全栈开发者,不是用Node.js通吃的伪全栈,而是掌握了HTML、CSS、JavaScript / JQuery、Vue、Android以及Java技术体系的真全栈。我并不是跟大家吹嘘自己技多不压身,因为掌握前端技术完全是生活所迫。如果可以选,我宁愿把花在JavaScript的时间用去学习Java。

1.项目经验

一些小公司招人,给不起薪资的时候就会说“非常锻炼人”,这可不是套话。小公司为了节省成本,那可是人尽其用。只要是个程序员,还管什么前端后端,通通都要做。我就在这样的公司干过,被迫学会好多东西。我做过的前端项目里面,除了小公司项目,还有一部分是私活。

  • 毕业设计管理系统

项目特点:这是我的毕业设计,程序员的蹒跚学步。在这个项目里,我把HTML和CSS运用的非常熟练,用原生JS校验表单、操作DOM。
运用技术:HTML、CSS、JavaScript、ASP、Access

  • 伪原创文章生成器

项目背景:十年前的百度还无法高效的分辨文章是否原创、语义是否合理。将原创文章的句子打乱,加入特点关键字组成一篇新文章,叫做伪原创。这种伪原创文章读者看来狗屁不通,百度看起来是原创的。只要网站发布一定数量的伪文章,域名的年龄长一些,在搜索特定关键字时,能获得很好的排名。
项目特点:这是个人创业项目,用来采集、生成伪原创文章。为了做这个项目,我不得不学习PHP,因为ASP太孱弱、Java太繁琐。
运用技术:HTML、CSS、JQuery、PHP、MySQL

  • 掌购手机商城

项目特点:这是某小公司的移动电商网站,只支持手机浏览,主要销售数码产品、服装。在这个公司里,我学会了很多技术,比如用冲击钻打孔、修打印机、装货架。
运用技术:HTML、CSS、ASP、MS SQL Server

  • 剧场售票/检票系统

项目特点:私活项目。采用Vue开发微信公众号售票功能,用iView开发Web管理端。开发了一个检票APP,运行在基于Android系统的手持检票机上。
前端技术:HTML、CSS、Vue 2.0、Android
后端技术:Java、Spring Boot、Mybatis、MySQL

2.前端的发展

在一次求职中,我删除了简历中所有前端相关的技能和项目经验,只找后端开发、系统架构相关的职位。放弃Web前端或者Android开发的原因有两个:

  • 前端离业务太远

前端工程师调了一个后端接口,只要接口能调通,返回结果正确,就不用管什么了。负责接口的后端工程师,首先要精通业务逻辑,确保结果无误;其次接口设计要合理,尽可能高并发低耗时;充分考虑扩展性,严苛的情况下要监控接口的可用性。

在任务分工上,前端天然就离业务远一些。事实上,相当多的前端工程师主动远离业务,只做一个API Caller。

  • 前端的发展面太窄

我们先来看看常用前端技术:

  1. Web:包括但不限于HTML、CSS、JavaScript、JQuery、Bootstrap、Node.js、Angular / React / Vue等,主要用于开发Web网站、微信小程序、手机APP。
  2. Electron:基于Chromium和Node.js,使用JavaScript、HTML 和 CSS 构建跨平台的桌面应用,代表作 Vs Code, Fackbook Messenger。
  3. WPF / WinForm:微软的桌面软件技术,主要开发基于Windows的企业管理软件、工业软件。
  4. QT:跨平台的C++开发库,主要开发桌面软件、嵌入式软件。
  5. Android / IOS:主要开发消费类的手机APP。

前端技术发展非常快,有些技术也非常复杂。以APP原生开发为例,性能优化就包含了很多方面,比如从简单的启动优化、 UI优化、 卡顿优化、 崩溃优化、安全性优化,到深层次的弱网优化、 大图加载优化、 储存优化、 高效传输优化、 极限瘦身优化,实际开发过程中的OOM问题原理解析、 ANR问题解析、 Crash监控方案。

然而,多数产品只是展示后端数据、基本流畅就行,不需要工程师深入了。通常企业要求前端工程师做到两点:高效率,三五天出个Demo;跨设备,一套代码多个平台用,节省成本。前端在中小公司发展面非常窄,最多就做个前端组长;只有知名大厂喜欢技术专精人才,要求研究框架原理和造轮子。

3.专注后端

相比前端,后端工程师要掌握的东西也太多了,随便罗列一下:

  1. 分布式:掌握解决三高(高并发、高性能、高可用)的微服务架构,常见方案有Spring Cloud、Spring Cloud Alibaba,可能还要处理分布式事务、管理集群日志的问题。
  2. 消息队列:业务系统常常采用消息队列对请求削峰填谷,提高系统稳定性,常用的消息队列产品有RocketMQ、Kafka、RabbitMQ。
  3. 数据库:运用关系型数据MySQL或者Oracle持久化数据,设计表和查询优化是基本功。NoSQL数据库如Redis、MongoDB等使用广泛,如何与关系型数据库搭配使用,又是基本功。
  4. 反向代理:至少掌握Nginx的基本原理与配置。
  5. 容器化:至少掌握Docker与K8S的基本原理,解决容器化应用的常见坑。
  6. 操作系统:掌握Linux基本原理以及查看日志、内存占用、CPU负载等命令。

除了上面的6点,还有大数据处理、分布式文件系统、Service Mesh等等。很多技术是一套解决方案,不能简单的归类为后端了。像淘宝这样高流量的网站,上面说的技术全都用上了,对前端而言,能看到也只是接口而已。后端开发的知识面很广,发展方向更多,许多技术管理的职位也是后端工程师担任,这是我转向后端的根本原因。

如果你做前端时间不长,而且兴趣不是特别大,建议转型做后端开发,会发现很多有趣的事情,比如加班特别多。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注