我的编程之路——关于Python 学习的回忆

11 minute read

本来今天想写点关于“编程、打字速度、刷入法”的一个讨论,因为一个朋友建议,希望我能写写关于编程的学习经历。不如就在今天吧。谈一谈我是如何学习 Python的。

要说我现在写 Python 的水平,可能还只是停留在使用框架和包上,距离真正的 Python 大神还差一段距离。不过像爬虫 Scrapy、requests,后端 FastAPI,数据分析 Pandas、Numpy,还是能够信手拈来。从 Python3.4 到 Python3.8 每个版本更新有怎样的迭代都有个了解,一些魔术方法、奇淫技巧用得较少偶尔能够抖个机灵。因此我现在大多数时间还是在用 Python 做一些 CRUD 增删改查的工作、衔接多种数据库做数据处理以及其他大数据组件的调用插件。至于 Python 算法的能力,那又是另一个无关编程语言,而是算法与数据结构的能力了,到目前为止仅刷过了 283 道题,还需继续努力。

所以我所说的可能对你没有什么帮助,如果你感兴趣,可以接着往下看。

初次接触编程—还是那个 C 语言

在大学以前我其实还不知道有编程这回事。直到上了第一门编程课,遇见了那本到今天也想骂又念念不忘的红皮书《C 程序设计-谭浩强著》。

C程序设计(第四版)

当时学编程的最直接感受就是当时老师说的一句话:暂时不用管这个 #include 、main 是什么意思,我们 C 程序都需要这样的格式才能够执行代码。

1#include <stdio.h>
2
3main() {
4    printf("hello world\n")
5}

不求甚解,大概是当时止步于编程大门前一个绊脚石。

结识好伙伴 Java

大二的时候,我有个室友,从大一开始就和我是同一专业、同一个班,后来我和他一起转专业,从物联网转到软件工程,我们俩也神奇地分到同一班、同一个寝室。我们都对实验室感兴趣,于是去找到了当时做 Web 方向的实验室。室友他其实从高中就开始学习编程,自己在没有任何外力的情况下啃了一大部分《Java 编程思想》,因此在大学期间已经具备了 Java 编程的基础,不仅在 C 语言中考得高分,在实验室中也收到了指导老师的看重。

某一天,因为实验室有众多不同领域的老师,开始分方向进行小组学习。一个是有大好前景的 Java Web,一个是 Python 视觉处理。室友虽然一直在向我传达选什么方向都可以,但还是透露出他希望我选择 Java 方向,因为实验室主导老师擅长这个,室友他也熟悉。也正是因为于此,我不甘一直在他的带领下,我希望能够和他,站在一起。所以还是选择了些许陌生、迷茫的 Python。(即便当时大一下的暑假我自己看完了大部分《Java 从入门到精通》,还是坚定地做出了选择)后来,我们俩回顾当初这段经历,依然觉得我可能选错了,但我,还是不后悔。也不得不说,当时通过对比学习了两门编程语言基础语法,也为我快速学习 Python 奠定了良好基础。基础语法如隔层纱,只要花时间去阅读、去尝试就能了解与理解

结识新朋友 Python

其实当时也抱着很高的热情想学 Python,第一本看的 Python 书便是《Python 编程入门》。得益于有点 C 和 JAVA 基础,这本书我拿到的第一周就把基础都看完了,只有三个实践项目因为都不是很感兴趣就没看下去了:一个是打飞机游戏、一个是 Django 后台,还有一个是 GUI 可视化。后来也有没有接触过 Python 的同学,希望我能推荐一本入门的书,我也毫不犹豫地推荐了它。对了,现在这本书已经有第二版了,相信也不会差。

Python编程

再就是,大二那年每当我一有时间就会去刷一个慕课网的视频,因为每看完一节都会有经验值。很有一种打怪升级的感觉。最重要的是可以选择自己感兴趣的模块先学起来,再把一些不是很感兴趣的“怪”也打倒吃掉经验。那时候,基本上慕课网上所有 Python 的视频我都看完了,大概 30-40 个的样子,现在有 100 多个,更为丰富了。

logo2020

现在想起了,这个过程也是很重要的。学习技术不单单学习其语法,关键是调动好奇心和激发求知欲,让我对各种 Python 所能实现的“魔法”非常感兴趣,比如:正则表达式、遇见数据采集,实现线性回归、文件处理、必学模块 collections 等等。每次点开新的视频真的像是打开了新的世界,原来 Python

还能这么玩儿。

拥抱 Python 踏进编程大门

虽然在慕课网学习了很多“花里胡哨”的视频,但其实我自己也能感觉得到,我还是不会编程,不会脱离视频、脱离教程自己去写代码,对比那位室友,还是差的太远。山人自有妙计,既然学习的都是零零散散的,不如报个编程学习班吧。不管是当时还是现在,可能有人嘲笑我说,一个软件工程专业的人,还需要报外面的培训班。我当时其实想得很清楚:一般报班的都是大四临时抱佛脚或者转行的人,而我作为大二的学生连临时抱佛脚的同学都赶不上,倒不如在大二期间借助培训班,扎实编程基础。

真的没有让我失望。当时我学习的是为期 6 个月的 Python 爬虫。第一个月老师让我们放弃 Pycharm、VSCode 等能够自动补全的编辑器。课上的练习、课后的作业,完全在下面这样的白板(Python 自带的 IDLE,左边是编辑窗户口,右边是执行窗口)中手打代码。

image-20211111200833219

一个月后,不仅让当时的我感觉到编程能够如此顺手,现在看来也是编程的真正破冰阶段——抄写代码,提高写代码的熟悉度。就很像是游泳一样,想要学会游泳,不是说掌握手、脚、呼吸等技巧就可以了,还需要对水的熟悉度、亲和度,说白了就是要下水。想学编程还是得动手。

克服畏惧,独自写代码

即便掌握了编程语言基础语法,即便对写代码有一定的手感。一旦脱离老师在视频中的指导,自己独立去完成一个项目还是有些吃力。说到底还是实践少了,课上老师手把手教的例子没有都亲自做做一做,听过就当学到了,实际上并没有。因此,在真正会写代码之前,还要克服两个心理。第一个要克服怕难的心理,第二个要克服不想动手的习惯。越不想写,越不会写;越写的少,越连字母符号都找不到。那么怎么办?还是回头看视频,看老师怎么从 0 到 1 进行编程,从空白页写到满屏代码,跟着老师一个字母一个字母地敲。同时可以配上手抄不太理解、关键代码,味道真的绝了。

面向搜索编程

在有了部分实践后,自己也会产生一些思考,也就是说怎么提问。这个阶段开始也是比较难的,不知道怎么描述问题、不知道怎么组织语言。如 Python 编译器报错飘红,不再是问为什么编译器它会出错,而是会说,它在告诉我什么错误类型?我的代码哪里写错了?需要用什么方法才能正确?

然后就会去搜索引擎,用关键词来描述你遇到的问题。来到这里,恭喜你,编程的大门为你敞开~

最后,你可能要问了,程序员的工作就是在用搜索吗?没错,我们的工作内容就是面向百度编程、面向 Google 编程。