*************************** fullstack *************************** 单体架构与微服务架构 ============================== 个人项目只用单体,不适于微服务。 微服务的使用场景是在公司项目,一个团队或者一个人维护一个微服务。 如果个人项目使用微服务或者在公司一个人维护多个微服务,调试困难,难实现单元测试的概念,或者不同微服务间调试困难。 个人更偏好于单体架构, 不要过于追求使用微服务的公司,就找小公司或者低业务量的岗位好了。当然微服务技术还是要稍微了解下的。 语言优先级 ============================================= 1. Python: 第一语言,吃饭语言 2. Golang: 第二语言, 预备役语言 3. Nodejs: 第三语言, 打造完整产品不可或缺的语言 4. Rust: 加速Python 5. C: 编程界的钢琴 对于Java,可以只学基础内容(方便看涉及到Java语法的视频, 如数据结构与算法是用Java写的),但框架不要浪费时间去学 .. note:: 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 -> ...