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

1. 什么是进阶?

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

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

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

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

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


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

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

仅就计算机技术而言,了解一门编程语言的语法也还只是一个开始,最多算是解决了数据处理的问题,另外还考虑考虑数据的存储与传输问题。一般来说,也就是基本的 数据传输协议与数据库知识 等。

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

对这些 现成框架的了解以及基本用法的掌握 ,应该也是很有必要的。

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

但就一门具体的语言来说,还涉及 这门语言的总体生态,特别是其核心库 。以 Python 来说,了解其基本数据结构当然很重要,但很多其它常用的数据结构和算法也都在核心库,或者第三方库中有实现,对绝大多数用户来说,自己再去实现一遍,既麻烦又低效,也很容易出 Bug,是得不偿失的。

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

这里涉及的问题,就是 代码的可读性与可维护性,文档与测试,设计模式与版本管理 等各方面的内容。


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


2. 如何进阶?

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

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

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

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

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

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

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

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

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


3. 除此之外呢?

除此之外呢?

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

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

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

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

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

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

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

Python:什么是进阶,如何进阶?的更多相关文章

  1. Python之路,Day16 - Django 进阶

    Python之路,Day16 - Django 进阶   本节内容 自定义template tags 中间件 CRSF 权限管理 分页 Django分页 https://docs.djangoproj ...

  2. Python爬虫与数据分析之进阶教程:文件操作、lambda表达式、递归、yield生成器

    专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...

  3. Python自动化开发 - Django【进阶篇】

    Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...

  4. python进阶介绍(进阶1)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6411664.html 本文出自:[Edwin博客园] python进阶介绍(进阶1) 1. python基础 ...

  5. 万门大学Python零基础10天进阶班视频教程

    点击了解更多Python课程>>> 万门大学Python零基础10天进阶班视频教程 课程简介: 旨在通过两周的学习,让学生不仅能掌握python编程基础从而进行计算机程序的开发, 还 ...

  6. python之路——面向对象(进阶篇)

    面向对象进阶:类成员.类成员的修饰符.类的特殊成员 类成员 类成员分为三大类:字段.方法.属性 一.字段 静态字段 (属于类) 普通字段(属于对象) class City: # 静态字段 countr ...

  7. Day7 - Python基础7 面向对象编程进阶

    Python之路,Day7 - 面向对象编程进阶   本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个 ...

  8. python基础 (初识函数&函数进阶)

    函数基础部分 .什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率. 2.定义函数 定义:def 关键词开头,空格之后接函数名 ...

  9. 洗礼灵魂,修炼python(15)--列表进阶话题—>列表解析/列表生成器

    是的,我是想到什么知识点就说什么,没有固定的主题,我的标题都是在写完博客再给的.本篇博文说说列表进阶话题.其实列表应该是比较熟悉的了,而毫不夸张的说,在实际的开发中,列表也是使用的最多的,以后你会体会 ...

  10. 第二弹:超全Python学习资源整理(进阶系列)

    造一个草原要一株三叶草加一只蜜蜂.一株三叶草,一只蜂,再加一个梦.要是蜜蜂少,光靠梦也行. - 狄金森 "成为编程大牛要一门好语言加一点点天分.一门好语言,一点点天分,再加一份坚持.要是天分 ...

随机推荐

  1. scala基础-1

    函数式编程 ​ 并行编程 ​ 多核计算.云计算 ​ 引用透明,给值确定,结果也确定 数据类型 三种变量修饰符 ​ val 定义immutable variable ​ var 定义mutable va ...

  2. DVWA--Command Injection

    首先我们查看源代码一下 <?php if( isset( $_POST[ 'Submit' ] ) ) { // Get input $target = $_REQUEST[ 'ip' ]; / ...

  3. [CSP-S模拟测试]:城市游戏(图论+DP)

    题目传送门(内部题109) 输入格式 第一行,两个整数$n,m$. 接下来$m$行,每行三个整数$u,v,l$,描述了一条道路连接的两个路口的编号以及道路的长度. 输出格式 输出一行一个整数,为所求的 ...

  4. 【学习】mysql 时间戳与日期格式的相互转换

    1.UNIX时间戳转换为日期用函数: FROM_UNIXTIME() ); 输出:2006-08-22 12:11:10 2.日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() Sel ...

  5. Ruby Programming学习笔记

    #将ARGV[0]转换成正则表达式类型 pattern= Regexp.new(ARGV[0]) #Devise gem包 Devise是Ruby中使用最广泛的身份验证gem包之一.Devise为我们 ...

  6. java基本类型对齐

    1.Java 基本数据类型和精度 整数数据类型 关键字 描述 大小 格式 byte 字节长度整数 8 位二进制补码 从 +127 到 -128 short 短整型 16 位二进制补码 从 +32767 ...

  7. leetcode-easy-listnode-141 Linked List Cycle

    mycode  98.22% # Definition for singly-linked list. # class ListNode(object): # def __init__(self, x ...

  8. BOSCH汽车工程手册————自适应巡航速度控制ACC

    驾驶员通过自动速度控制器操纵键,将汽车行驶速度控制在预设的期望速度上. ACC系统则在自动速度控制的基础上检测本车到前面行驶汽车的距离以及相对速度,以及其他车道上的信息. 利用这些数据就能控制两车之间 ...

  9. CSS + ul li 横向排列的两种方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. Java中this和super的用法总结(转)

    原文地址:https://www.cnblogs.com/hasse/p/5023392.html 这几天看到类在继承时会用到this和super,这里就做了一点总结,与各位共同交流,有错误请各位指正 ...