You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
7.0 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 开篇词 | 从工程的角度深入理解Python
你好,我是景霄。
我是Facebook的一名全栈工程师目前从事机器学习的相关工作主要工作领域是人工智能的推荐排序系统与算法。工作期间我曾领导多个上亿用户级产品的开发与落地有丰富的工程与实战经验。
一听机器学习,很多人第一反应可能是“好难呀、厉害呀”。可事实上,我的编程之路并非一路高光。
不同于大城市长大或竞赛出身、十一二岁接触编程的人在刚上大学时我的编程基础几乎为零。大一上的C语言便是我出生起学到的第一门编程语言。初识计算机语言的世界很有趣也很吸引我这也是我成为程序员的最初动力。
和很多对编程感兴趣的人一样哪怕老师只是在讲台上照本宣科地读着N年前的课件我也会竖起耳朵认真听讲、认真做笔记。并且私下里我还买了不少厚重的大块头书在网上查了不少博客、帖子照着上面的例子一行行地敲代码。很多内容我并不理解比如指针、递归这类抽象的概念查了一堆资料也没看明白。但靠着死记硬背考试基本可以过关虽然这个过程比较痛苦也比较累。
后来为了更深入了解计算机我去了哥伦比亚大学攻读计算机硕士学位又陆续学到不少新的编程语言比如Node.js、Python、PHP、Scala等等。这个阶段我边学习边做项目却发现轻松了很多。
这两个学习阶段,收获和感受天差地别,难道仅仅是因为“万事入门难”吗?我不止一次反思过这个问题,终于发现,问题出在了**资料本身**上。
为什么这么说呢?一是因为书上或网上的很多东西,非常理论化,实例少之又少,单凭死记硬背很难真正掌握;二是这些内容中,原创的观点和经验更少,大多互相抄袭,内容雷同且不实用,远离实际工程,毫无借鉴价值。
但显然,市面上的资料问题,我们个人是很难解决的。我们能做的,便是克服常见资料的弊端,另辟蹊径来学习。这其中,最重要的一点就是,从工程的角度思考学习,以实用为出发点,多练习、多阅读、多做项目,这样才能有质的提高。
在Facebook工作的这么多年也验证了我的观点。我身边的新手他们学习新的语言总是只会啃书练习还难以上手而有经验的同事则不同他们能花很短的时间看完基础语法然后找行家去了解一些重难点、易错点最后亲自动手完成一个项目达到融会贯通的效果。这样下来可能几周时间就掌握得差不多了。
这样的差距确实让人心塞而这也是我开这个专栏的最初动力——帮助更多入门级程序员迅速成长。至于专栏主题我选择了Python这门编程语言原因也很明了。
这首先来自于我个人的重要感悟。经过多年学习工作的积累,我深刻认识到,**牢牢掌握一门编程语言及其学习方法,是日后在所有领域深造的根基**。而在实际工作和生活中,我更是见过不少反例,比如搞机器学习的工程师,算法、理论等极强,但是编程水平或是工程水平很一般,于是涉及到偏工程的工作或合作时,就显得力不从心,这样就非常可惜了。
另外不可否认Python确实是这个时代最流行、也必须要掌握的编程语言。Python可以运用在数据处理、Web开发、人工智能等多个领域它的语言简洁、开发效率高、可移植性强并且可以和其他编程语言比如C++)轻松无缝衔接。现如今,不少学校的文科生甚至中学生也开设了此课程,可见其重要程度。
因此我决定开设这么一个专栏从工程的角度去讲解Python这门编程语言。我不是语言学专家不会死抠一些很偏的知识点相反作为一名工程师我会从实际出发以工作中遇到的实例为主线去讲解Python的核心技术和应用。
专栏的所有内容都基于Python最新的3.7版本,其中有大量独家解读、案例,以及不少我阅读源码后的发现和体会。同时,在层次划分上,我希望能难易兼顾,循序渐进。专栏中既有核心的基础知识,也有高级的进阶操作,尽量做到“老少皆宜”。
从内容上来说,专栏主要分为四大版块。
**1\. Python基础篇**
第一部分主要讲解Python的基础知识。当然不同于其他基础教材专栏的基础版块并不只有基础概念、操作我同时加入了很多进阶难度的知识或是一些重难点、易错点等需要注意的地方。如果你觉得自己基础的东西都会了这部分不用学了那你就大错特错了。比如
* 列表和元组存储结构的差异是怎样的?它们性能的详细比较又如何?
* 字符串相加的时间复杂度,你真的清楚吗?
基础不牢,地动山摇。更深刻、实质的基础理解,才是更牢固的知识大厦的根基。我希望这一版块,不仅可以让入门级的程序员查漏补缺、打牢基础,也能让有经验的程序员,重新从工程角度认识基础、升华理解。
**2\. Python进阶篇**
这部分讲的是 Python的一些进阶知识比如装饰器、并发编程等等。如果你的工作只是写100行以下的脚本程序可能不怎么会用得到。但如果你做的是大型程序的开发则非常有必要。我希望通过这一版块让你熟悉各种高级用法真正理解Python理解这门编程语言的特点。
**3\. Python规范篇**
这部分着重于教你把程序写得更加规范、更加稳定。我在实际工作中见过不少程序员,会写程序,但写得实在有点“惨不忍睹”,导致最后调试起来错误不断,修改非常费劲儿。因此,我觉得用单独一个版块讲解这个问题非常有必要。
当然我不会用一些似是而非的规范来说教而是会用具体的编程操作和技巧教你提高代码质量。比如如何合理地分解代码、运用assert如何写单元测试等等。
**4\. Python实战篇**
没上过战场开过枪的人,不可能做主官;没有实战经验的语言学习者,不可能成为高手。这部分,**我会通过量化交易系统这个具体的实战案例带你综合运用前面所学的Python知识**。
真正要掌握一门编程语言,仅仅学会分散的知识点是不够的,还必须要把知识点串联起来,做一些中型的项目才能有更深的领悟与提高。
专栏篇幅只有40多篇但是每篇绝对都是干货满满。我希望这个专栏能帮助更多入门级和有一定项目基础的程序员真正掌握Python并且给你一些学习上的启发。
100天后晋级为Python高手让我们一起加油吧
课程的练习代码:[https://github.com/zwdnet/PythonPractice](https://github.com/zwdnet/PythonPractice)