Python:什么是进阶,如何进阶?

1. 什么是进阶?

一门编程语言的基础部分,往往非常简单。如果只考虑基本语法、数据类型、基本控制结构的话,大部分人应该一两天就学完 Python 了吧。之后,调用几个常用的库,写一些脚本,或者做爬虫,或者做数据分析,或者做一些其它自动化工作,就可以说已经入门了。

那么,接下来呢?当我们问如何进阶的时候,我们具体问的是什么呢?我们为什么要追求进阶,进阶又是一种怎样的状态呢?

显然,我们已经可以通过一些脚本解决一些简单的问题了。大多数时候,问如何进阶的人,暂时也没有碰到什么无法解决的问题。

但是我们知道自己掌握的还不够,还不足以依靠这些知识进入一个开发团队,并以这门编程语言作为主要开发语言,贡献于整个项目——或者说,与他人协作,共同解决一个比较复杂,比较庞大的问题。

从这个角度说,编程中所谓的进阶,大概是指能够以一门语言为主,参与到一个比较大的项目中,与他人协作,解决一个相对复杂的问题。


从这个目标看,我们对进阶的理解就要具体一些了。如果再分解这个目标,大概就会有以下思路:

1. 我们当然知道,解决一个比较复杂的问题,需要相当多的知识,这些知识不仅包括对计算机技术的了解,还包括对业务逻辑的理解,对商业目标的考虑等。

2. 大部分时候,我们所要处理的问题都是常见的,前人已经处理过的,并且有优秀的开发者作出梳理和总结,提供了一些方便的框架,常见的比如 web 框架、桌面 UI 框架、数据库操作、爬虫、数据分析框架等。

3. 对于日常的编程工作,我们可以简单地认为,大多数时候都是在做数据处理。那么,我们似乎有义务去考虑,如何才能让自己的代码在数据处理时更高效,更简洁——对的,这个问题主要涉及数据结构和算法的设计。

4. 团队协作的问题,当然也不能忽略。如何保证我们的代码在严肃的生产环境中不会出 Bug?如何保证别人能充分地理解,方便地调用我们的代码?如何保证我们写的程序不会随着需求的演变变得越来越臃肿,越来越复杂?如何保证我们离开这个岗位后,接手的人可以很容易地看懂并维护我们留下的代码?


这里所列的,都只是简单的思考方向,具体的内容,则随我们的目标而定。一般的建议是,直接去看招聘网站上的岗位要求,就能对具体目标有所了解了,这是最贴近实际的。


2. 如何进阶?

下一个问题是,如何进阶呢?

我们首先应该会达成的共识是:作为一门技术,编程应该在实践中学习,因此,进阶一定包含大量的实践,而不仅仅是理论的阅读与理解。

于是,我们的问题转换为,我们要学习哪些理论,做哪些实践?

参考我们在上面提出的四条思路,主要涉及的理论应该包括:数据存储与传输、常用框架、数据结构与算法、编码规范、文档、测试、设计模式与版本管理等。

在这些理论知识中,我们实践起来最方便,教材也最丰富的,应该是各种常用框架。事实上,我们要构建一个应用,解决一个问题,一般都会借助一个成熟的框架。

那么也就是说,可能最为常见的学习路径,就是学习框架,通过框架搭建自己的应用,并在这个过程中系统学习,不断引入其它各方面的理论和实践。

举例来说,我们可以着手学习一个 web 框架,写一个简单应用,在这个过程中不断引入其它方面的内容:

  • 首先是 编码规范 ,最为基础,内容也很少。就 Python 而言,可以先看一遍 PEP8 的建议,然后在 IDE 中引入一些检查插件,就可以按照规范进行编码了。
  • 第二个可以很快学会的是 版本管理工具 ,只需要花几个小时了解一下基本命令,就可以在之后的编程实践中用起来了。
  • 文档与测试,相对来说也比较容易上手,自然也可以紧接着引入自己的实践中。
  • 数据存储与传输、数据结构与算法、设计模式 等内容,相对地需要一定的系统学习,市面上也有丰富的材料,只要有一个整体的计划,在学习的过程中不断地与自己的实践相参照,自然可以融会贯通。

总的来说,这是一个有意识地学习的过程,不断反省自己的缺漏,不断引入新的实践内容。对于新人来说,开始上手都是容易的,可能比较困难的是对这些目标的持续反思,按这些规范严格要求自己。


3. 除此之外呢?

除此之外呢?

任何一门编程语言,除了语言本身,都包含大量社区实践形成的规范,或者说,经验总结。比如 PEP8 就是 Python 社区关于编码规范所形成的一套约定。这些经验,也可以认为是当前被比较多人所认同的最佳实践,我们当然有必要了解这些最佳实践。

事实上,是否知道并采用这些最佳实践,有时也可以作为我们判断一位程序员是否经验丰富的标准。

我们获取这类最佳实践的方法,一个是通过团队之间的相互学习,一个是通过书籍。

比如 《Effective Python:编写高质量 Python 代码的59个有效方法》 就是介绍最佳实践的书籍。里面的内容,有些我们已经习以为常了,也有些可能不太了解。

说来惭愧,当我阅读这本书的时候,有时心里是很慌的。我们写代码,经常过一段时间,就感觉之前的代码写得很烂,现在写得会好一些,于是感觉自己有点成就了,看了别人的实践,却发现自己的代码依然丑陋。

所谓“独学而无友,则孤陋而寡闻”,就是这个意思吧!

这篇文章已经比较长了,这个系列接下来的文章,会大体介绍《Effective Python》所推荐的最佳实践,叫做 “Python进阶自检清单” 。大部分内容确实只是把清单列出来而已,可能会涉及一些我自己的理解和补充。当然,出错的部分都是我的问题,还请大家多多指教!

05-20 03:40