zhyq0826 / zhyq0826.github.io

三月沙的博客
http://sanyuesha.com
6 stars 1 forks source link

how to learn a open source project : 如何学习一个开源项目 #57

Closed zhyq0826 closed 5 years ago

zhyq0826 commented 8 years ago

开源项目多如繁星,谁都无法保证技术到底能流行多久,采用的技术栈到底能支持业务走多远,因此重要的不是学过了什么技术,而是如何最快速地学习和掌握一门新的技术并投入的实际生产使用环境中,如此,就不用担心学习的技术是否过时,是否有瓶颈,因为掌握了既定的学习方法和思路,任何时间都可以随时学习到一门新技术并投入使用。

以学习和使用 SQLalchemy 为例,来阐述整个学习的思路和过程。

step 1 提出问题

1.sqlalchemy 是什么? 2.sqlalchemy 能够做什么? 3.sqlalchemy 的特性是什么?这些特性又决定了它能够做什么,使用场景在哪里? 4.如果我要在实际项目中使用 sqlalchemy ,我关注的重点是什么(现在的和将来的)?sqlalchemy 的特性是否能满足我关注的这些点? 5.sqlalchemy 的组织架构是如何的?由哪些关键的组件组成?每个关键组件的承担的功能和责任是什么?各个组件的相互关系是什么?

step 2 按图索骥,找到这些问题的答案

大部分成熟的开源项目或流行的开源技术都有着不错文档,而且一般文档都会有如下几部分组成

在这个过程中切忌深入细节,细节已经是 how 部分了,这里只关心 what 和 overview why。

step 3 简单的使用

在以上问题解决之后,此时就需要一个简单的教程来实际体验一下。教程不是随随便 Google 一下 几个简单的 demo,好的教程最好是能做到深入浅出得逐步展开各个组件的使用,并且能很简单的描绘出组件的关系是如何在使用中体现的。

sqlalchemy 教程

这个教程由底向上说明了

  1. sqlalchemy 的 engine 如何和 db 进行关联 (体现了 engine 组件的使用和职责)
  2. schema 如何在 sqlalchemy 中定义,如何使用定义 schema 通过 session 进行交互 (体现了 schema 的定义)
  3. sql expression 如何用 Python objects 和 Python expression 实现 (体现了 sql expression 的转换)
  4. user defined class 如何 mapping to db schema (体现了 object mapping)
  5. user defined class 如何 interact with db (体现了 object 如何 interact with db)
  6. database relation 如何在 user define class 中体现 (体现了 object relation mapping)
  7. 关键部分 session 的生命周期、作用域、使用范围和限制

    step 4 进一步熟悉我们需要使用的关键特性的原理和使用限制

这里我们关注的几个点有

通过以上的练习,基本上已经可以投入使用了,然后在使用过程中不断揣摩如此设计的原因和了解背后的实现原理,不断修正之前对他的认识,并且调整在实际使用过程中的方式,以达到最佳状态:最佳的实践方式、最高的开发效率、最好的维护状态、最高的性能。