为了账号安全,请及时绑定邮箱和手机立即绑定
慕课专栏

目录

索引目录

Python 核心技术精讲

原价 ¥ 78.00

立即订阅
开篇词:穿越舒适区,Python 开发之路如何进阶?
更新时间:2020-08-17 10:02:57
如果说我比别人看得要远一点,那是因为我站在巨人的肩上。——牛顿

我和 Python 以及这门专栏的故事

当看到Guido van RossumTransfer of power 中写到:After all that’s eventually going to happen regardless – there’s still that bus lurking around the corner, and I’m not getting younger… 时,我突然意识到这门具有将近 30 年历史的编程语言已经陪我度过了数千个日夜。

我和 Python

第一次接触 Python 时,我刚开始本科阶段的 C 语言和相关计算机基础的学习,那时它留给我的印象便是 “简单” 和 “简洁” ,但仅限于此。因为当时我对编程并没有太多的理解和概念。

一晃数年,直到研究生的后半段,我才拥有了一些可以了解和学习 Python 的时间和机会。我记得当时我阅读的关于 Python 的第一本书是《Learn Python the Hard Way》,这本书相当简单, 但不幸的是,我已经记不清其中的具体内容或是示例。但我仍清晰的记得作者在这本书的前言中所说的一句话:区分好程序员和差程序员的最重要的一个方面就是对于细节的重视程度,事实上这是任何行业区分好坏的标准。

硕士毕业后我进入了百度,成为了一名研发工程师,这时才是我真正的深入理解和应用 Python 这门编程语言的开始。为了更好的掌握 Python,我开始重新学习和审视它,这时的 Python 对我来说依然简洁,但却不简单了。

在深入了解 Python 的过程中,我认识到这门编程语言另外一个显著的特点便是易学难精,你可以很快速的掌握基础的语法,但如果没有足够的深入学习和理解,通常难以完全掌握它的动态性,从而很难写出兼顾优雅、高效与可读、可维护的程序

我和这门专栏

为了更好的认识 Python ,我先后阅读了 Python’s standard documentation 和 Python Wiki 中的大部分内容,以及大量的 PyCon Talks,其中不乏一些著名的 Talks,比如 Keynote - PyCon 2016 和 Data Structures in the Standard Library and Beyond。当然也少不了阅读优秀的图书,比如《Learning Python》、《Fluent Python》、《Python in a Nutshell》、《Python 源码剖析》等优秀作品。

上述的两个 PyCon Talks 比较经典,所以我把原版视频放在这里,大家有兴趣的可以看一下:

K Lars Lohn - Keynote - PyCon 2016

Brandon Rhodes - All Your Ducks In A Row: Data Structures in the Std Lib and Beyond - PyCon 2014

在这个过程中,我逐渐认识和了解了 Doug HellmannAlex MartelliSteve HoldenBrett Cannon 等 Python 领域内的众多专家。正是因为这些来自 Python 社区的 Python 专家以及核心开发者所编撰的资料和代码,我才能够有机会以更短的时间、更高的效率去深入这门语言。

但在这个过程中,我也慢慢的发现了一些问题:国内具有一定广度和深度的 Python 图书或者相关资料实属凤毛麟角,同时国外的一些优秀资料也没有得到充分的传播,整个行业仍然缺乏具有丰富经验的高级 Python 开发者,这也是激发我编写这个专栏的重要原因之一。Python 的社区文化包含团结、包容、分享和对解决复杂问题的热爱,这个专栏存在的意义也在于此。

在这个专栏中,我并不会做一些观点的简单灌输,或者单纯对某个技术点进行说教,而会更多的关注如何有效的使用 Python,有效的理解 Python 中那些设计的目的和意义,从而充分发挥这门编程语言的优势。

问题、能力与路径

除 Python 之外,在其他编程语言中,笔者对 Golang 和 Rust 也有过一些了解和使用,这两种语言都非常优秀并且各具特色,但相比之下,笔者仍然更喜欢 Python。

时至今日,Python 作为一个多范式、跨平台的编程语言,它已经具有足够多的优点。比如更加成熟稳健的社区、全面的生态、稳定的功能、庞大的使用基数,Python 自 1991 年起大致每隔 6 到 18 个月便会推出新的稳定发布版本,最新的稳定版本 Python 3.8.2 已于 2020 年 2 月 24 日正式发布。

Python 以优雅、简洁为特点的语法特性,并结合丰富的类库,多种编程范式,极大的提高了开发效率。相比于其他编程语言,Python 可以用更加简洁、清晰的代码逻辑实现想法,以极高的生产力完成产品原型。 Youtube、Instagram、Reddit、Dropbox、今日头条、知乎、豆瓣等都大量的使用了 Python 进行构建

但这同时往往又是一把双刃剑,如何在动态语言的灵活性中保证代码的可读性和可维护性,并提高项目的工程能力,是区分初高级 Python 工程师的门槛之一。接下来,笔者想分享的是在从事 Python 工程师的过程中一些更加细节的感悟:

进阶路上你是否也遇到同样的问题?

  • 在掌握了基础的语法和编写技巧后,如何向更深入的方向探索;
  • 进阶知识点太多,往往还存在 Python 版本迭代产生一些历史问题,如何才能梳理清楚进阶的脉络;
  • 对于一些常用技术点,明明使用已经非常熟练了,但仍然对其基本的或者更深入一些的原理比较模糊;
  • 缺乏对 Python 代码编写技巧的熟练掌握,缺乏对常见编码问题的理解和总结,导致不能游刃有余的处理各种场景,还很容易陷入一些常见的编码陷阱;
  • 如何才能合理的组织以及编写较大型的 Python 项目,并保证其稳定性以及可维护性?
  • ……

其实,这些问题的出现,正说明了 Python 语言是一门易学难精的编程语言。易学在于其设计哲学所提倡的优雅、明确、简单。掌握 Python 基础语法语句和数据结构的学习曲线明显缓于 C++ 等语言,而且 Python 语言的标准库和优秀的第三方扩展库在数量、质量、功能全面性、易用性上都十分出色,进一步降低了代码编写、功能实现的门槛。而难精,也正是产生上述问题的关键所在,其根本的原因在于但不限于以下几点:

  • 语言特性丰富:诸如 Keyword-Only / Positional-Only 参数、魔术方法、装饰器、元类、描述符、async / await 等,每一个概念背后所涉及的协议、原理、最佳实践等都需要花费时间和精力去掌握。

  • 动态语言,灵活性较高:动态语言给予开发者较大的自由度,但这也是一把 “双刃剑”。初学者往往对于某些概念理解的不深入,过高的自由度容易导致难以发现的 bug。

  • 多重编程范式:诸如过程式,面向对象,函数式编程等,这也导致了不同技术水平的开发者所写出的 Python 代码风格差别较大,初学者难以摸索到合理高效的学习和实践途径进行编码层面的提高。

  • 不仅要掌握语法特性,还需要具备工程能力:在使用 Python 进行面向企业级的应用开发中,往往需要掌握一定的打包部署、单测编写、性能优化、文档编写等工程能力,但目前能够深入学习这方面知识和技能的途径仍相对较少。

一个优秀 Python 工程师应该具备的能力

要解决进阶道路上的问题,实现更大的突破和自我能力的提升,首先要明确作为一个优秀的 Python 工程师应该具备什么样的能力:

  • 具备扎实的基础知识,对基本概念理解清晰:这里的基础知识应不仅包含 Python 语言,而且应涵盖计算机科学相关基础知识,比如操作系统、数据结构与算法、计算机网络等;精通常用数据结构的使用技巧,理解常用数据结构的基本实现原理,这样保证了我们在项目开发中能够做到在合适的场景下选择合适的数据结构。
  • 掌握常用的编码技巧,对编码规范了然于心:在编码时应主动考虑可维护性,当然,写好注释必不可少。熟练使用常用高级技术点,比如装饰器的编写,OOP 相关技巧的使用,高阶函数的使用等;理解元类、描述符等高级概念。这有助于提高我们对于框架源码、开源项目的阅读和理解;理解常用的设计原则与设计模式,这有助于我们更好的抽象业务代码,提高代码复用,减少冗余设计。
  • 熟练使用常用基础库:比如使用 collections 容器数据类型,利用 itertools 处理数据等;熟悉常用的第三方库,比如分布式任务队列 Celery,数据处理工具 pandas 等。
  • 具备并发编程能力,可以在项目中独当一面:可以应对实际业务中常见的并发场景,利用并行、并发等方式解决性能瓶颈;具备独立完成中小型工程项目或大项目的某个模块开发的能力,可以独立完成调试,单元测试、性能分析、打包发布等任务。对业务有良好的理解,具备分析问题、解决问题的能力,这一点也是在工作中最重要的一点。

要实现目标,我应该怎么做?

我们聊完了问题,说完了能力,那么具体该怎么做呢?下面我们一起来看下:

  • 工欲善其事,必先利其器:想要在浩如烟海的 Python 世界中驰骋,你首先需要称手的兵器,工程化的开发工具和开发环境,以及合理提炼的技术资料,这些都是不可或缺的编码利器。

  • 术业有专攻:Python 应用方向众多,在进阶过程中要避免填鸭式学习,每一个方向都需要大量的理论和实践积累。应尽量避免杂而不精,对每一个知识点要追根溯源,做到知其然知其所以然,当然,能做到阅读并理解源码是最好的。

  • 纸上得来终觉浅,绝知此事要躬行:在进阶过程中,理论知识的积累帮助我们建立起认知框架,但要在框架中融会贯通,就一定要注重实践,进行大量编码,在不断的编码实践中试错和理解。

  • 业精于勤,行成于思

    人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力。1万小时的锤炼是任何人从平凡变成世界级大师的必要条件。

    这是大家都熟悉的一万小时定律,同样在 Python 进阶道路上,我们也可以把一万小时作为目标,持续积累,不断进步。

Road Map

最后,笔者总结了一张 Python 进阶学习的 Road Map,同样也是本专栏的基本纲要,涵盖了 Python 从基础到进阶各个阶段的核心知识点:从开发环境的搭建到装饰器、元类、并发编程等进阶技能,从语言运行细节到常用基础库的最佳实践,从基本类型的操作方法到面向对象、异常等项目常用编码技巧等。

图片描述

当然,要写好这门专栏并在内容上同时兼顾广度和深度,并不是一件容易的事情,这意味着在关注广度的同时要学会聚焦,关注深度的同时要避免晦涩难懂。为了这个目标,笔者在内容上做了非常多的思考,常常为了一小段描述而花费一整天的时间,但仍不可避免的会在相关内容上、逻辑上或其他方面存在一些不妥之处,在阅读过程中若大家发现任何问题或者有任何建议,请随时联系笔者。

同时本专栏会保持长期的更新,主要针对专栏内容中的勘误、细节的详述与扩展,语言相关的新特性等。希望这门专栏可以伴随读者一起成长,无论是 Python 初学者、还是行业内的初级从业者、或 Python 爱好者,都能在阅读完这门专栏后,有所收获。

}
立即订阅 ¥ 78.00

你正在阅读课程试读内容,订阅后解锁课程全部内容

千学不如一看,千看不如一练

手机
阅读

扫一扫 手机阅读

Python 核心技术精讲
立即订阅 ¥ 78.00

举报

0/150
提交
取消