fullstack

单体架构与微服务架构

个人项目只用单体,不适于微服务。

微服务的使用场景是在公司项目,一个团队或者一个人维护一个微服务。

如果个人项目使用微服务或者在公司一个人维护多个微服务,调试困难,难实现单元测试的概念,或者不同微服务间调试困难。

个人更偏好于单体架构, 不要过于追求使用微服务的公司,就找小公司或者低业务量的岗位好了。当然微服务技术还是要稍微了解下的。

语言优先级

  1. Python: 第一语言,吃饭语言

  2. Golang: 第二语言, 预备役语言

  3. Nodejs: 第三语言, 打造完整产品不可或缺的语言

  4. Rust: 加速Python

  5. C: 编程界的钢琴

对于Java,可以只学基础内容(方便看涉及到Java语法的视频, 如数据结构与算法是用Java写的),但框架不要浪费时间去学

备注

Python和Golang都是我喜欢使用的语言。Go能完成的任务Py也能做,所以很容易出现工作只使用一种语言的情况,有时候为了使用Go而使用Go就显得没必要。

所以时间分配策略是工作和开源各自占用一个语言,即: 如果工作中以Python作为主力语言,那么新任务就应该以Python优先,除非上级明确使用Go或旧项目是Go的才使用Go完成任务。而Github开源就以Go为主力语言,定期查看issue, 尝试贡献go的pr, 在工作上, 可以参考和借鉴go库的实现原理。此策略可以确保两个语言都能得到充分的使用,不会说其中一种语言感到生疏

渐进式精通

以django为例

第一阶段: 入门

过一遍教程视频内容, 搭建bilibili-api/django

但不是所有的技术栈都有人出教程视频,或者已经过时。例如celery。

这种情况可以啃一遍文档, 搭建docs-sphinx

第二阶段: 熟悉

搭建mini-django

从源码或者第三方库提取和分析实现案例, 例如django.contrib.message

写好注释,分析实现了哪些django特性

但是部分框架不好找样例, 例如scrapy, 官方的example太简单,此时可以从单元测试tests提取和分析实现案例

第二次消化bilibili视频

标记哪些P是重点,哪些P用横线划掉

第三阶段: 精通

文字回答

在知乎搜素相关问题,尝试去回答

参与开源

选择插件开发,体积小容易从github下载

优先从没有教程视频的技术栈挑选,例如celery、sphinx等。

出视频教程

在B站基于第一步的视频针对性出进击的django

升级技术栈

维护策略

学习哪些技术

  • 全职岗位用到的技术

  • 公司的主流技术栈(即便不是自己岗位用到的)

  • 招聘网站的主流技术栈

  • 自己喜欢的技术栈

  • 容易找兼职的技术栈

教材的确定

  1. 优先通过B站找课程

  2. 如果找不到视频或视频过旧,则以官方文档作为教材,同时github issue驱动学习教材

技术栈有效期

视频用到的版本为 视频版本, 如果该子版本号仍处于维护阶段,则已当前子版本号的最新修订号作为该技术的 锁定版本

官文文档直接以最新版本作为 锁定版本 , 该版本的维护期结束的一年之后标记为 过期版本 ,意味着应该尽快重新学习来升级 锁定版本

更新策略

新学习时,学完基础内容即可结束学习阶段。

然后在以下的时间节点继续推进该技术的教材里程碑:

  • 最近刚好用到这门技术

  • 有新版本发布

触发更新事件时, docs-* 技术栈处理github issue,然后在光文档学习涉及到的技术点

例如scrapy, 锁定版本v2.9.0, 发现最新版本v2.11.0可升级到v2.11.1, 阅读一条issue,看下涉及到哪些知识点,结合文档内容完善到mini-scrapy

技术栈发展路线

深度 VS 广度

在大厂追求深度, 小厂追求广度,因此我选择走广度路线

下一阶段重点

从后端走向全栈,提高就业竞争力

js -> nodejs -> ts -> css -> sass -> vue -> …