诸位考生:
方才放下笔,机房里的空气还有一股奇妙的油墨味。倒让我想起自己头一回见着Python的情形。那光景,这语言还不似今日这般风光。如今大家考完了,脸上那点轻松劲儿,像是三伏天喝了碗凉茶,五脏六腑都舒展开了。这感觉,我懂得。趁着这股热乎劲儿还没散,容我泡壶茶,与你们说说这Python里的“滋味”。
一、初识如品新茶,莫贪浓酽
初学编程的,十个有九个心急。恨不能三天读完厚厚一本教程,一周写出惊世骇俗的程序。这便如同牛饮,咕咚咕咚灌下去,只觉满口苦涩,茶的清香回甘,倒一样没尝出来。
Python这门语言,妙就妙在它像上好的龙井,清亮见底。那语法简洁得,几乎不像是计算机的语言,倒像是我们平日说话,略去了许多枝枝蔓蔓。
print("Hello,world!"),就这么直白地与你打招呼。这份亲切,是别的语言少有的。
我认得个同学,聪明得很,一上来便要写个网站爬虫,结果被那些"strip"、"scrapy"弄得晕头转向,连带着对Python也生了厌弃之心。何苦来哉?不如学学东坡先生喝茶的法子:“精品厌凡泉”。那意思是,好茶也得配好水,还得会煎。学Python,也得寻个恰当的“泉眼”,那便是你的起点。
且从这些“凡泉”饮起:
变量与数据类型,可莫小看。"a=1"这等小事。这便是根基。如同盖房,砖瓦都不结实,楼阁再好看也是要塌的。整数、浮点数、字符串、布尔值,一样样摸过去,感受它们的脾性。字符串为何要加引号?整数与浮点数运算时为何结果变了?这里头都有学问。流程控制里,"if"、"for"、"while",这是程序的筋骨。人生在世,也无非是“如果怎样,便怎样”的逻辑。用"for"循环在屏幕上画出一排小星星,那份简单的乐趣,是往后写再复杂的算法也难替代的。函数呢,这是化繁为简的妙法。一段代码,若能装进一个“函数”的匣子里,随用随取,便是得了编程的三昧。学着把大问题切成小问题,每个小问题用一个函数解决,这便是“分而治之”的古朴智慧了。
这个阶段,最忌贪多求快。把IDLE或你喜欢的编辑器当作一方小砚台,慢慢地磨墨,一笔一画地写。写个计算器,写个猜数字的小游戏,便很好。程序的“对错”,编译器自然会告诉你。但其中的趣味,却要你自己静心去品。调试时那满屏的红字,初看吓人,看惯了,倒像是学走路时免不了的趔趄,是它在你耳边絮絮地提醒:“这儿,步子迈得不对。”
二、登堂入室,方见庭院景深
基础牢靠了,便像是一壶茶喝到了第二泡、第三泡,真正的韵味才开始显现。Python的院子不深,但景致却一层套着一层,引人入胜。
此时,当细细把玩这几样器物:
数据结构里,列表(List)、元组(Tuple)、字典(Dict)、集合(Set),这是Python里的四大名器。各有各的妙用。列表灵活,可增可减,像个能伸缩的布袋。元组严谨,一旦定下便不改动,有古君子一诺千金的风骨。字典以键值对来寻物,快如闪电,好比一本编排精良的索引,键不可动,但值我随意。集合则只管有无,不论先后,专做那去重、求交的学问。用熟了它们,处理数据便如烹小鲜。面向对象呢,这是个大关口,许多人到此便生了畏难之心。其实不必把它想得玄乎。所谓类(Class),不过是一种分类的法子。世上有“猫”这类物事,你家的咪咪、邻家的大黄,都是具体的对象。它们共享猫的习性(方法),又各有各的毛色、名字(属性)。这般一想,是不是亲切多了?用类来组织代码,能让繁杂的程序变得井井有条,如同将散乱的书籍分门别类放进书架。
到了这步,你或许会碰到“库”(Library)的概念。Python的博大,不在其语法本身,而在其身后如汪洋大海般的“库”。想做科学计算,有 numpy、pandas,想做机器学习,有 scikit-learn、TensorFlow,想做网站,有Django、Flask。这便如同走进一座宝山,满目珍奇,容易挑花了眼。
我的建议是:按需取材,切忌囤积。你眼下需要处理Excel表格,便去学Pandas,想分析数据画个图,便去摸一摸Matplotlib。用不着的东西,暂且知道有那么个物事便好,不必立刻深究。学问是做得完的么?明朝的张岱说得好:“人无癖不可与交,以其无深情也。” 你对某个领域生了“癖好”,再循着这癖好去深挖相应的库,这学问便有了根,不会成了无源之水。
三、境界之别,存乎一心
技术纯熟之后,程序员的高下便不在那几行代码了。如同书法,笔画人人会写,结构的疏密、行笔的气韵,才是见功夫的地方。
Python是门“手艺”,讲究个“优雅”:
代码要有可读性,写 Python 要记住“做一件事,最好只有一种明显的方式”。 写代码,要想着是写给人看的,顺带让机器能执行。变量名、函数名要起得清楚明白,"student_name"总好过"sn"。多写注释,不仅是解释“做了什么”,更要说明“为何这么做”。隔三个月,你还能看懂的代码,才是好代码。代码也不可失简洁性。Python有许多“语法糖”,如列表推导式,能让你用一行代码完成一个循环的事。但这糖吃多了也腻。用不用,要看是否让代码更清晰,而非更晦涩。能简单,便简单。郑板桥画竹,曰“删繁就简三秋树”,编程亦是如此,能把复杂逻辑写得明明白白,是大本事。我们常常无法避免错误处理,程序难免出错。高明的程序员,不是写不出错的程序,而是能优雅地处理错误。预见可能出岔子的地方,未雨绸缪,这已是三分禅意了。
说到境界,不能不提调试。初学者怕出错,高手却爱出错。错误信息是编译器给你的最诚恳的信件,它一字一句地告诉你,它在哪里卡住了,为何不高兴了。读懂了这些信,你与机器的默契便深了一层。我常觉得,调试的功夫,一半在技术,一半在心性。心浮气躁时,一个简单的拼写错误能让你找上半天;心平气和了,那错误倒自己跳将出来。这和学习任何技艺一样,讲究个“心手如一”。
四、学习之法,贵在得趣
说了许多Python本身,再说说这学习的法子。如今网络发达,教程多如牛毛,是好事,也是坏事。好处在资源易得,坏处在容易让人东一榔头西一棒子,学不成系统。
我给几个建议是不是会好一点:
选择一套好教程:如同拜师,要认准一家。或是官方的文档,或是口碑好的书籍,从头到尾,扎扎实实过一遍。把这当作“正餐”,建立系统的知识框架。其他的博客、视频,只能算是“零嘴”,查漏补缺时用用便好。
多写,更要多看:自己埋头写固不可少,但也要去看看别人怎么写。GitHub是座宝库,里头有无数高手的代码。找些简单的、你感兴趣的项目,看看人家的代码结构、命名风格、文档写法。这比读十本教程都管用。看得多了,眼界自然不同。
乐于分享:考完了试,若有心得,不妨写下来。在论坛里帮人解答个小问题,或是把自己的习作放到博客上。教,是最好的学。要把自己学到的东西清晰地讲给别人,你必得先把它理得清清楚楚。这过程,本身又是一番锤炼。
最要紧的,是得找个乐子。Python能做的事太多了。你若爱文学,可以用它分析《红楼梦》的词频;你若爱音乐,可以写个程序爬取榜单;你若爱下棋,可以试着写个简单的棋类游戏。让编程和你真实的生活、真实的兴趣发生关联,它便不再是书本上枯燥的考点,而成了一件有趣的玩具,一件称手的工具。孔子说:“知之者不如好之者,好之者不如乐之者。” 你若是能从写出一行行代码、解决一个个小问题中得到纯粹的乐趣,那便再没有什么能难倒你了。
五、考完之后,山长水阔
刚经过一场考试,像是登了一座小山。山顶风大,吹得人衣袂飘飘,心情舒畅。这份舒畅,是努力后的甘甜,该当好好享受。但也要知道,山外有山。这次考试,不过是学习途中的一座凉亭,歇歇脚,看看风景,便该想着下一程路了。
IT这一行,尤其是Python的世界,变得快。今日流行的框架,明年或许就改了容颜。但那些根本的东西——解决问题的思路,清晰的逻辑,优雅的编码习惯——却像是老房子的梁柱,能历久弥新。守住这些根本,便不怕它万变。
茶喝到这会儿,也快淡了。最后再说一句体己话:编程是为了生活,切莫让编程毁了生活。对着屏幕久了,要记得抬头看看窗外的绿树,约三五好友吃顿饭,读本无用的闲书。代码是为人服务的,人的温热、情感、想象力,是再聪明的机器也学不来的。能把Python用得恰到好处,让它帮你把日子过得更方便、更有趣,那才是真正学到了家。
诸位后辈,路还长着呢。但今日你们既已尝到了这其中的一点甜头,便算是入了门。往后是晴是雨,是平坦是崎岖,都去走走看吧。这门手艺里,自有它的风光无限。
—— 一位与你们同路的学长,于考后闲窗下
