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. hash索引

    hash算法 哈希表(hash table ,也叫散列表),是根据关键码值(key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个 ...

  2. microsoft office 2010 visio激活

    office2010 tookit这款绿色的软件进行Visio2010激活 http://jingyan.baidu.com/article/4f34706ecae169e387b56dd1.html

  3. 剑指offer:把一个支付算转化为整数

    1:首先,根据课本上的程序,是这样的: #include "stdafx.h" #include "iostream" using namespace std; ...

  4. what we regret most 国外的调查结果: 一生中最后悔的事情

    http://v.163.com/movie/2013/4/U/9/M93FDHRBE_M93FFFNU9.html 来自为知笔记(Wiz)

  5. erlang创建100万个进程,每一个进程花费多少时间呢?

    最近工作需要,需要先测试一下erlang启动进程的时间开销: 看了一片博客,感觉挺好的,学习erlang推荐http://www.blogjava.net/yongboy/ 于是参照他的文章里面的一个 ...

  6. 浏览器端-W3School-JavaScript-Browser: Navigator 对象

    ylbtech-浏览器端-W3School-JavaScript-Browser: Navigator 对象 1.返回顶部 1. Navigator 对象 Navigator 对象 Navigator ...

  7. 代码代码:输入两个正整数m和n,求其最大公约数和最小公倍数。15 20 5

    import java.util.Scanner; //输入两个正整数m和n,求其最大公约数和最小公倍数.15 20 5 public class Test { public static void ...

  8. emqtt 系统主题

    $SYS-系统主题 EMQ 消息服务器周期性发布自身运行状态.MQTT 协议统计.客户端上下线状态到 $SYS/ 开头系统主题. $SYS 主题路径以 “$SYS/brokers/{node}/” 开 ...

  9. LoadRunner遇到的问题

    1. :

  10. PC端网页嵌入百度地图

    1 打开百度地图生成器: http://api.map.baidu.com/lbsapi/creatmap/ 2 设置好了之后,点击获取代码,将代码粘贴到文件中保存为html文件 参考网址:https ...