项目学习 - Overview

提示

2020年6月想写一个如何开发项目的系列,那会起了个头后续一直没有跟进,就是你现在看到的这个系列... 很多初学者加我,问几乎没开发基础的如何进阶,那我索性把这个系列(其中一部分就包含零基础入门)开放吧;等我有空再完善吧... 这个系列的方向:

  • 零基础入门指引
  • 项目开发进阶路线
  • 开源项目学习

@pdai

提示

技术的本质最终还是要落实到具体的项目开发上,这是开发人员绝大部分的工作内容。只有更快更高效的把本职coding工作做好,才能有更多时间去思考去深入学习,所以这个系列带你从0到1理解web项目开发演进之路,从青铜到王者之路。@pdai

写在前面

为什么写这个系列

我常常看到这样的现状:

  • 很多初学者迷茫于一边要写业务代码,一边感慨自己无法提升;
  • 写项目的代码体系化的学习是两个维度的事,因为在了解了基础之后,你写代码可能更多的是业务堆码操作,你不一定懂为什么这样,但是却能依葫芦画瓢整出满足业务的代码。

所以为什么写这个系列?

为了让你更好更快的写代码,从写代码的角度循序渐进的提升,提升你本职工作(通常是堆码)能力的同时让你有更多时间来思考体系化的学习

如何看这个系列

在决定要写一个关于如何写项目代码的系列后,我思考了下应该如何写这个系列:

  • 首先,如果我写的太详细, 第一我没有那么多精力;第二你还不如去看书,书里面写的更详细;
  • 其次,大多数开发者缺的不是学习能力,是认知维度认知效率
  • 再者,其实网上很多学习的教程,虽然内容多,但是于学习者而言,有几个致命的问题:
    • 第一,需要花费大量时间甄别碎片化的内容;
    • 第二,缺少循序渐进,可能你找到几篇文章很好,但是它们无法循序渐进帮你提高;
    • 第三,这年头还缺学习的知识点么?缺的是方向性的指引,缺的是全局观。

思考完这几个问题之后,如下是我写这个系列所采用的方式:

  • 一定是循序渐进的,前后引入的Demo和项目有衔接,讲其中的演化,讲其中重要的点;
  • 用教练员的思维,给你方向性的指引,让你提升认知效率;从青铜到王者的逐步提升;
  • 都是基于开源的实战项目着手,让你直接学以致用。

Web学习路线

如下是我规划的拍脑袋的进阶路线,后续整理吧。

入门 - 青铜阶段

  • 基础知识点

    • Java
    • SpringMVC
    • SpringBoot
    • Vue
    • BootStrap
    • IDEA,Eclipse
  • CURD - 后端

    • SpringBoot - Hello World
    • SpringBoot - 无数据库的CRUD(分层+TDD)
    • SpringBoot - 无数据库的CRUD + ThyMeleaf页面
    • SpringBoot - MySQL的CRUD - MyBatis + ThyMeleaf页面
    • SpringBoot - MySQL的CRUD - JPA + ThyMeleaf页面
  • CRUD - 前后端分离

    • 后端API化
      • 后端API化 + Swagger UI
    • SpringBoot + VueJS
      • Vue 集成于后端 - VueJS + BootStrap https://gitee.com/renyong9511/springboot_vue/tree/master
      • Vue 部署至后端
        • 使用maven部署 https://blog.codecentric.de/en/2018/04/spring-boot-vuejs/
        • 使用Jenkins部署
    • Vue 前端工程化
      • Hello World
      • 完整的CRUD
  • 核心模块

    • AAA基础 - SpringSecurity和Shiro
    • RBAC基础
    • 登录 - 后端模块式登录
    • 登录 - 前后端分离式模块登录

进阶 - 白银阶段

  • web项目的技术栈演进

  • 早期的Web项目入门

    • 配置化,SpringMVC, MyBatis, Freemarker
  • 早期的Web完整项目

  • 单机后端应用模块演化

    • Ruoyi-fast

到此基本可以修改或者重组,拆分任何一个模块。拆分和优化重构是技术和经验的体现,通常而言团队中删除代码最多的人能力水平最高。@pdai

  • 单机后端模块化

    • Ruoyi
  • 前后端分离化

    • Ruoyi-vue
  • 微服务化

    • Ruoyi-Cloud

进阶 - 黄金阶段

  • Mall4J
  • Yshop

进阶 - 铂金阶段

上面都是横向的web开发结构学习,这个阶段你需要学习一些纵向的深入理解。并且多看看别人写的项目,做到项目层面的藐视,知道项目的技术点,改造,优劣等等。

  • Seckill
  • JustAuth https://gitee.com/yadong.zhang/JustAuth
  • 更多开源项目解读

进阶 - 钻石阶段

上面如果你写了一段时间的代码,你会发现其实写代码是很容易的事。虽然一些技术点知识被集中放在这里,但是在白银和黄金阶段你可以已经需要开始逐步理解相关的知识点了。

  • 钻石阶段 - Overview

    • 这个阶段需要思考什么
  • 从代码优化 - 重构和优化

    • 重构机制之如何去掉多余的if else
  • 从技术深度 - 知识点上深入

    • Java
      • 解耦机制之Java的SPI机制
    • Spring
      • 拦截机制之Filter和Inteceptor
      • 拦截机制之AOP切面拦截
      • IOC 依赖注入,控制反转
      • Spring Bean, IOC,容器
    • SpringBoot
      • SpringBoot自动配置机制
      • SpringBoot启动过程
      • SpringBootStarter依赖
      • 深入了解SpringBoot的启动过程 https://www.jianshu.com/p/cb5cb5937686
      • SpringBoot学习笔记 https://blog.hanqunfeng.com/2016/12/09/spring-boot-study/
  • 从技术广度 - 业务演进带来广度

    • FastDFS集成 - 分布式文件存储
    • 接口 - 幂等设计
    • 搜索 - ElasticSearch
    • 流式处理 - Flink

技术归根到底还是为了解决问题,所以需要落地(即将技术点组织)项目化和平台化

  • 从团队协作 - 平台化

    • 考虑项目的团队协作
      • 需求跟进 JIRA
      • 接口Mock - Moco
      • 文档管理wiki
    • 考虑代码管理
      • Git分支管理等
  • 从流程自动化 - 自动化部署

    • 脚本化是自动化的前提
    • Docker容器化
    • 持续集成CI - Jenkins
    • 集成静态代码检查 - SonarCube
    • 持续交付CD,版本管理
  • 从项目质量 - 项目质量保障

    • 程序员
      • 单元测试UT, 代码覆盖率
      • 代码评审code Review
    • 测试员
      • 功能 - 黑盒测试
      • 性能 - 压力测试
  • 从项目上线 - 项目上线前做什么

    • 代码审计,三方库License等
    • 渗透测试
    • 全链路压测
  • 从项目运维 - 监控运维及自动化

    • APM - application peformance management,Skywalking
    • Log - Elk
    • Trace - 链路追踪

进阶 - 星耀阶段

钻石阶段是大多数人可以通过埋头苦干实现的,大概在中上水平;思考问题的方式和目前你所处的职位将直接决定你未来的发展;就写代码而言,写代码的逻辑本质是分析和解决问题的能力,而写代码的思维方式决定者你的Coding的认知效率。

进阶 - 王者阶段

  • 技术

    • 金字塔模型
  • 机会

    • 机遇成本
    • 人是最重要的因素
  • 生活

    • 技术不是最重要的,生活的本身才是。
    • 爱自己,爱家人,爱生活,爱世界