我在M2公司做架构之二次开发

一、如何看开源项目二次开发?

以前在创业公司做开发的时候,那个时候也可以叫半个全栈,我对于开源项目二次开发是极其不喜欢非常讨厌,因为我觉得这些东西都不难,为何就不能自己写呢?还有就是我觉得开源项目二次开发不利于我的成长,毕竟是在人家的基础上开发,太多的受制于人。后来随着经验的慢慢积累(包含教训),我的看法改变了。
过去我的看法可归纳为:

  • 牺牲了我的成长空间,限制了我的成长;
  • 受制于人,用人家的东西得让人家的套路来。

如今我的看法可归纳为:

  • 提高研发效率,避免重复造轮子的时间浪费;
  • 提高设计编码能力,认真阅读和理解他人代码,学习他人所长,避免他人所短,让自己每次写代码都比过去写的更好;
  • 提高问题解决能力,各种奇葩问题不断打磨我解决问题的套路。

二、开源项目如何进行二次开发?

1.是否符合业务的需求

通常我们要抄袭或者是在该开源项目上进行二次开发,在动手前,最重要的就是确认是否符合我们的需求,如果不符合我们的需求,属于无用功。那么如何确认是否符合业务需求?找产品经理、项目经理进行确认,确认无误后再动手。

2.能够将开源项目跑起来;

试问要二次开发,如果跑都跑不起来,怎么进行二次开发呢?过去在创业公司参与编程教育项目的开发工作,其中OJ系统我们是基于一些开源项目的二次开发,但在未确认具体的OJ系统二次开发前,我们调研了很多开源项目,当时的经理也给我们团队每人分别指派了任务,其中有一个任务分给我,要我去研究某国外的OJ系统,最后发现这个OJ系统在GitHub上非常不活跃,好几年前了,以及文档匮乏,根本就跑不起来。最后我只得放弃了,经过一系列的调研和实践,我们最终采用了HustOJ作为二次开发的目标。

3.具备该开源项目所需编程语言的基础;

如果不具备该开源项目所需编程语言的基础,你将会非常痛苦。因为二次开发通常是需要改源代码的,起初可能是改一点,但随着需要业务链打通,需要较大的改动,这个改动不是指将对方的完全推翻,而是指在其中加上我们自己的业务逻辑,如果你不具备该开源项目的编程语言基础,报错基本上就能把你给弄”懵逼”。其实,最理想的情况下,最好还是自己所擅长编程语言对应的开源项目,那样的话,学习成本就会较低且问题基本可控。例如曾经在某创业公司做的关于OJ二次开发、VsCode二次开发、EduSoho二次开发,当时我们后端团队基本上具备JS基础,对于VsCode二次开发相对得心应手,但对于EduSoho、HustOJ则显得有点寸步难行,关键在于我们对于PHP不熟。

4.熟悉该开源项目结构(数据库表设计、代码目录结构等)

前面所说具备该开源项目所需编程语言的基础虽然会给我们二次开发造成一些影响,使得我们难以前行,但是呢?如果我们没有熟悉其代码目录结构以及数据库表设计,那么我们的修改将毫无意义,编程语言虽然是一个重要因素,但不是最关键的因素。当时在某创业公司做打通EduSoho、HustOJ与我们自己系统的联通,相当于最小改动原则,EduSoho、HustOJ核心逻辑和大部分代码我们不动,我们从HTTP通信调接口以及数据库中间表关联的方式进行联通,最终两周的时间就把这件事情搞定了,而我成功的因素之一就是事先熟悉EduSoho和HustOJ的项目结构,将这两个开源项目的文档以及主要核心代码都阅读了一遍。

5.战胜困难的决心和耐心

战胜困难的决心和耐心非常重要,因为开源项目二次开发的过程中,你会遇到各种各样的奇葩问题,而面对这些奇葩的问题,你必须要自我鼓励给自己打气,同样你也需要耐心,明确真正的问题,最后要有决心解决这个问题。我当初VsCode二次开发做的不是非常好,原因在于遇到问题时我心生胆怯,还没针对问题进行排查,就说自己解决不了。而后在某教育SaaS公司我受到了很多打击以及教训,最后促使我形成了面对问题的方法论,加上近一年多在M2公司的不断实践和总结,使我内心在面对问题时更加强大了。

文章目录
  1. 一、如何看开源项目二次开发?
  2. 二、开源项目如何进行二次开发?
    1. 1.是否符合业务的需求
    2. 2.能够将开源项目跑起来;
    3. 3.具备该开源项目所需编程语言的基础;
    4. 4.熟悉该开源项目结构(数据库表设计、代码目录结构等)
    5. 5.战胜困难的决心和耐心