Python:什么是进阶,如何进阶?
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:什么是进阶,如何进阶?的更多相关文章
- Python之路,Day16 - Django 进阶
Python之路,Day16 - Django 进阶 本节内容 自定义template tags 中间件 CRSF 权限管理 分页 Django分页 https://docs.djangoproj ...
- Python爬虫与数据分析之进阶教程:文件操作、lambda表达式、递归、yield生成器
专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...
- Python自动化开发 - Django【进阶篇】
Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...
- python进阶介绍(进阶1)
转载请标明出处: http://www.cnblogs.com/why168888/p/6411664.html 本文出自:[Edwin博客园] python进阶介绍(进阶1) 1. python基础 ...
- 万门大学Python零基础10天进阶班视频教程
点击了解更多Python课程>>> 万门大学Python零基础10天进阶班视频教程 课程简介: 旨在通过两周的学习,让学生不仅能掌握python编程基础从而进行计算机程序的开发, 还 ...
- python之路——面向对象(进阶篇)
面向对象进阶:类成员.类成员的修饰符.类的特殊成员 类成员 类成员分为三大类:字段.方法.属性 一.字段 静态字段 (属于类) 普通字段(属于对象) class City: # 静态字段 countr ...
- Day7 - Python基础7 面向对象编程进阶
Python之路,Day7 - 面向对象编程进阶 本节内容: 面向对象高级语法部分 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个 ...
- python基础 (初识函数&函数进阶)
函数基础部分 .什么是函数? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率. 2.定义函数 定义:def 关键词开头,空格之后接函数名 ...
- 洗礼灵魂,修炼python(15)--列表进阶话题—>列表解析/列表生成器
是的,我是想到什么知识点就说什么,没有固定的主题,我的标题都是在写完博客再给的.本篇博文说说列表进阶话题.其实列表应该是比较熟悉的了,而毫不夸张的说,在实际的开发中,列表也是使用的最多的,以后你会体会 ...
- 第二弹:超全Python学习资源整理(进阶系列)
造一个草原要一株三叶草加一只蜜蜂.一株三叶草,一只蜂,再加一个梦.要是蜜蜂少,光靠梦也行. - 狄金森 "成为编程大牛要一门好语言加一点点天分.一门好语言,一点点天分,再加一份坚持.要是天分 ...
随机推荐
- UVA 11181 Possibility Given
#include<bits/stdc++.h> #include<stdio.h> #include<iostream> #include<cmath> ...
- centos 6.8安装mysql5.6
安装mysql 官方文档 A Quick Guide to Using the MySQL Yum Repository 下载 Yum Repository Go to the Download My ...
- unittest详解(四) 批量执行用例(discover)
前面我们说了,对于不同文件用例,我们可以通过addTest()把用例加载到一个测试套件(TestSuite)来统一执行,对于少量的文件这样做没问题,但是如果有几十上百个用例文件,这样做就太浪费时间了. ...
- Linux命令-文件管理(三)
Linux more命令 Linux more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(bac ...
- LOJ #6358 前夕 (组合计数、容斥原理)
题目链接 https://loj.ac/problem/6358 (另外一道\(4\)的倍数题左转loj #6356) 题意 题面写得就像一坨X一样,我来复述一下吧. 有\(N\)个元素构成的集合,要 ...
- [BZOJ2002][洛谷P3203][Hnoi2010]Bounce 弹飞绵羊(LCT维护链长)
luogu传送门 2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 16082 Solved: ...
- oracle存储过程及sql优化-(二)
接下来比较重要,我会先贴出一个存储过程,根据这个存储过程讲解 PROCEDURE AP_CXBB_GT3_SBFGL_SBFYJSQC (OUT_RECORD OUT SYS_REFCURSOR, P ...
- 一、基础篇--1.1Java基础-Session和Cookie的区别【转】
https://www.cnblogs.com/zlw-xf/p/8001383.html 1:cookie数据存放在客户的浏览器上(客户端),session数据放 @1:cookie不是很安全,别人 ...
- PHP 设置Cookie值注意项
Cookie 中的value值只能添加设置为String类型的字符串数据,但我们需要添加如数组,json串等其他类型的数据时,我们就要先对数据进行转换,再存入Cookie里了. Cookie 存储数组 ...
- Boston House Price with Scikit-Learn
Boston House Price with Scikit-Learn Data Description >>> from sklearn.datasets import load ...