iOS coder重生之Backend开发

经历了将近一年的时间,终于阶段性地完成了我从iOS开发到后端开发的角色转变,现在我也可以自豪地说,我已经接近一名全栈了,已经熟悉了后端开发的各种工具、环境和一些做事方式,接下来就是继续更加熟悉框架、工具、语言,以及继续深入研究后端的一些技术方案和实现策略。

开发流程

在这将近一年当中,经历过太多的坑了。

幸运的是,我们作为一名通用软件的工程师,这个行业发展了这么多年,工作流程已经趋于稳定,所以,在我个人看来,无论是什么样的开发角色,对于开发这个岗位来说,工作流程大概可以分为以下几个方面,我们只要对号入座的学习,一定程度上是可以事半功倍的。

语言 框架 IDE选择 依赖管理工具 测试工具 编译运行环境 操作系统 打包工具 发布 CI/CD 监控指标
OC Cocoa Xcode cocopods XCTest Runtime Apple OS cocopods/Xcode App Store Xcode Cloud/Github action/Circle CI Crash Rate/ANR
Swift Cocoa Xcode cocopods/Swift Packages XCTest Runtime Apple OS cocopods/Swift Packages/Xcode App Store Xcode Cloud/Github action/Circle CI Crash Rate/ANR
php laravel phpStorm/VS composer PHPUnit PHP 引擎 Windows/Linux/Unix/MacOS npm/yarn/Build docker Image 1. Publish image K8S
2. API configuration Apache/Nginx(WebServer) Github action/Circle CI/ArgoCD 响应率,错误率
JS/typescript nestjs webStorm/VS npm/yarn Jest NodeJs Windows/Linux/Unix/MacOSX npm/yarn/Build docker Image/webpack 1. Publish image K8S
2. API configuration Apache/Nginx(WebServer) Github action/Circle CI/ArgoCD 响应率,错误率

在针对开发流程的梳理之后,可以从流程层面可以很容易看出iOS开发和后端开发的异同点,以此,我们对于相通的地方来进行类比学习,针对不同的地方来进行针对学习。

但是,首先,我们需要确定的是,要学习的语言和框架分别是什么,我由于兴趣和项目需要的原因,选择的是JS和NestJS框架。

这里,有一个网站,或许能有所助益,https://roadmap.sh

image.png

借助这个网站,我们可以清晰地规划自己的学习路径。

侧重点的转变

正所谓屁股决定脑袋,作为一名前端或者iOS开发,在开发过程中的侧重点一般在以下几个方面(按照我脑袋中的顺序排列)

  1. UI/UX的实现

  2. 怎样的数据结构可以更好地驱动UI

  3. 如何更好地后端交互

  4. 各个模块之间如何更好地调用

  5. 如何更好地持久化数据

  6. 线程的使用,协调UI渲染时主线程和其他线程

  7. CI/CD怎么做更快更稳定

  8. 降低崩溃率/卡顿率

而在后端开发过程中,我的侧重点变成以下几个方面了:

  1. 数据如何更好的存储,注重表结构的设计

  2. 如何和前端更好的交互

    1. contract怎么设计

    2. 怎么更好地兼容多平台,例如,Auth怎么做,BFF怎么做,数据结构怎么设计

    3. 怎么更好地做API的版本管理

  3. 各个模块或者服务之间如何更好地协作,如何更好地设计事件

  4. CI/CD怎么更有效率,不同环境的部署怎么做能更好地做e2e测试

  5. 降低接口响应时间/HTTP错误率

当然,侧重点的转变主要还是因为前端和后端的服务对象不同。

前端应用更多的是服务用户,所以如何将页面做的更好是首要,然后再向后思考如何更好地为页面汲取数据。

而后端更多的是服务前端,或者其他后端服务,重点在于数据处理和API设计,所以数据是首要,如何存储数据,如何传输数据,是重中之重。

思维方式的转变

由于工作的侧重点变了,所以思考的方式也会随之改变。

作为一名iOS开发,在日常生活中,我会习惯性地对一个正在使用的APP思考,这个特效是如何实现的,这个APP的页面是如何组织起来的,或者这么多页面同时存在切换,它是如何进行内存管理的?

而作为一名后端开发,我开始思考的是,微博的互粉功能在数据结构上是怎么保证高效率查找的,微信消息是怎么做到丢失率这么低的?

更加明显的是,在进行需求分析的时候,之前习惯性的将页面作为锚点,比如讨论业务需求首先确定这个页面交互如何实现,然后确定什么数据更好的驱动页面,然后再定API。

而后端更多的考虑是背后的数据表字段怎么定义,表关系如何管理。

但是,可喜的是,由于现在同时具备这些经验了,所以又可以提起那个老生常谈的策略:分层,或者分而治之。

所以,在进行需求分析的时候,更多的关注点,或者切入点就是BFF和contract怎么定义,用AOP的方式管理团队的关注点,大家讨论的时候只关注交互的地方,以及可能变化的地方,剩下的工作都在各自的领域中进行,互不影响。

这种方式同样适用iOS开发内部或者后端开发内部,比如我们同时完成一个大的功能,我负责A,你负责B,于是我们先定义好A和B的交互部分,将interface先实现,然后各自回到自己的领域做事,最后面向interface接洽就好。

如何更好的理解业务

随之而来的是,之前我可以理解页面,知道如何做UI/UX会更好地服务客户,而现在,我也可以理解数据了,知道如何更好地让数据流转和存储,所以针对业务,站在技术人员的角度,我们可以提供更多的建议,以及指导如何更好地拆解和实现业务。

比如,使用BFF来隔断前端所需的数据结构和服务器内部数据结构,用来避免业务变化对底层实现的影响,并且可以兼容各个平台,给不同的平台分发不同的数据结构。

业务的变化可以被隔离在domain中,前端对于domain的体现是不同的module或者一组页面逻辑,后端可以是module也可以是微服务,然后我们重点关注的他们中间如何交互。

比如,现在需要一个登录功能:

  1. 作为前端,我只在乎画出登录页面,调用登录接口,持久化session然后进入主页面。

  2. 作为后端,我只在乎如何进行Auth的实现,然后存储生成的 session并记录日志。

可以从流程中看出来,初始数据是前端提供的账号密码,从前端流向后端并进入数据库,而后端生成session存储在数据库,然后从后端流向前端,我们第一步需要做的就是确定数据怎么流,剩下的就是各自领域的事情,后端去研究数据怎么存,前端去研究页面怎么画,仅此而已。

在此基础之上,我们就可以把握整体,进行更好的架构设计和分层设计了。并且无论是前后端之间,还是前端内部,和后端内部。

如何开始

前面说了一大堆,成为全栈之后的好处和所得,如果你也有这个计划,那如何寻找一个机会,或者创造一个机会开始呢?

从一个纯粹前端转到后端,并不仅仅是技术栈的迁移,还包括思维视角的转变,以及一些基础知识的补充,例如docker,kafka,AWS等。

首先,我们得确立转职的原因:

  1. 主观上

    1. 兴趣学习

    2. 成为全栈开发

    3. 成为TL

  2. 客观上

    1. 项目需要

    2. 市场需要

如果仅仅是项目需要,那机会已经送到眼前,相信一般情况下项目上会给你时间和精力专门从事学习,并且还有机会直接进行开发练习,剩下的只是效率问题。

但如果没有客观的条件支持,那么我的处理方式是,找一个APP直接开始抄,例如小红书,微信等等。

用一个项目和实践来承载你的学习,这样子,就不是仅仅看看文档,并且练手的时候顺便分析学习了一个成熟产品,也不用耗神在创造技术的应用场景上。

接下来,需要确定的是你要点哪些技能点。

从兴趣、市场需求等各个方面,确定语言、框架,然后最好跟着官方文档进行学习。

上面分享的roadmap网站在这里就非常有用。

或者跟着某个学习视频来进行学习和练手,但是会有几个问题:

  1. 讲解的技术点不一定是官方最新建议的;

  2. 一般这种视频进行的练手项目都很简单,不能完全应对真实的使用场景。

学习方式

学习需要区分了解和使用

在这里,我将知识点分为三类:

  1. 知识类:这种类别的知识我们需要的是记住,例如我们看到狗就知道他是狗,例如我们知道我们需要用nodeJS去运行我们的应用,这类的知识主要在于主动获取并记住理解它;

  2. 技能类:这种类别的知识,就是唯手熟尔,例如我们需要熟练的使用JS中的各种语法特性,我们知道拆分数组需要用哪个函数。

    有一些知识起初是知识类的,当我们知道了解后,运用到实践当中,越来越熟练,就证明你彻底掌握了这项技能,从而变成了技术类的知识;

  3. 索引类:这种类别的知识,是技能类退而求其次的产品,有些技能或者方式我们并不需要掌握的如此熟练,但是,我们是知道有这种方法存在的,在需要精确的书写实践它的时候再去查阅就行了。例如π的前30位数字,或者八皇后的算法。

接下来,我们需要明确地知道你需要学习的这些知识对于你来说,要学到哪种程度,进行知识类别的划分,然后针对不同类别的知识,我们采取不同的学习方法。分清楚轻重缓急。

语言

针对语言的学习,重点在于练习,是我们需要不断使用和磨练的技能:

  1. 数据类型

  2. 数据结构

  3. 函数的定义和使用

  4. 线程

对应着OC,或者swift的一些语法结构,会学习的很快。

框架

针对框架,重点在于对控件的使用和对其文件组织方式的了解。

我们根据需求和兴趣选择某一个框架后,在这个框架中,构建运行应用,使用其提供的工具进行需求的实现,例如在NestJS中使用TypeORM或者接入Kafka非常方便,它使用module-controller-service的方式来组织文件。

我们去官方文档或者一些知名的开源项目,看看别人的最佳时间,懵懂的时候,抄就对了,当你自己走一遍流程下来,再回过头来进行回顾总结,肯定会有你自己的思考和帮助的。

练习

在上面的陈述中,我提到可以选择一个成熟的APP进行仿作练习,在这个过程中,使用TDD,并且使用chatGPT来进行pair简直是绝佳的选择。

TDD可以帮助我们快速了解框架,语法和API的使用,而pair能够帮助我们更好的了解它为什么这么写,为什么能够适用这个场景以及获取一些经验,尤其在有了chatGPT之后,就算没有一个大佬或者共同学习的小伙伴跟你pair,但是我们依然可以假装在pair。

写在最后

在这快一年的时间里,我接触了PHP,typescript,React,,React-Native,最近开始研读ES的标准,从一名iOS纯开发慢慢转型到后端甚至全栈,在这个过程中不仅仅是提升了自己的技术能力。

更多的是了解了不同岗位之间思考的差异,能够更好的作为TL拆分需求,跟各个岗位的同学们进行沟通。

并且,经过发现和总结后,又提升了一点点自己快速学习的能力。

现在只是想写出来,和大家共勉,其中当然有很多不那么恰当甚至错误的理解,也希望能够得到大家的指正。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容