这是the5fire总结出来的Python程序员或者程序员的进阶之道——零到入门,入门到初级,初级到中级,中级到高级。仅供参考
前言
上次在群里有同学又在问基础的问题,我不反感基础问题,就是比较反感不动脑子就贴图出来求解答的问题。有时我干脆不说话,有时我会给个地方让他去搜索。前两天突然冒出个想法,始终有一部分人会花费大量时间在低水平的重复上,得不到进阶的法门。于是我冒出一句:“Python进阶最简单的方式:搞清楚你所写代码文件的每一行,每一个字符的意义。”
相对于推荐几本进阶的书籍(Python基础看完了?来两本进阶书)来说,能够自行且有效的去找“食物”是更为重要的事情。
理论
在the5fire刚来北京,还是一个人住的时候,每次搬家到一个新的地方,都会在下班之后或者周末的时候,徒步把周围转上一转(溜达溜达)。然后看看地图。对自己所在的方位有一个大概的印象。有时候一转就是几个小时。溜达的目的很简单,我需要了解我周围的生活设施,环境,各种方位的路线。另外还有一个点就是满足我的好奇心,那些未知的地点和环境,总比已知的来的有趣。
现在我就在想,如果把这个类比到Python的学习中或者任何语言/技能的学习中,是不是合理。
拿Python来说,假设我是个新手。刚看了《Python基础编程》或者任何其他的基础书籍,然后能把书上的代码敲下来(注意!是敲下来,不是找个地方copy下来),运行了一下,发现能输出结果,跟书上一样。那么ok,这本书你熟悉的书就是你的“新家”,首先要做的事是熟悉你的“新家”。the5fire在很多文章中都说过,基础的书籍看完一本,然后就做练习,写代码。再看其他的基础书籍是无益的。所有的练习都是为了让你掌握书中的知识,掌握书上提到的,只是刚开始。
比方说,书上说了,敲下如下代码到hello.py文件中,然后python hello.py,得到正确的输出,说明你熟悉了print用法了。
# coding:utf-8
print(u'你好世界')
然后你开始看下一章。练习for循环的使用,输出10此“你好世界”:
for i in range(10):
print(u'你好世界')
报错了。然后截图贴群里。迎接你的可能是石沉大海。对比下来你可能会发现只是少了第一行的# coding:utf-8,那么,这是为什么呢?
实际上,在写多个代码的时候,我们应该意识到自己在写的是什么东西,我们往某个文件里写上一些文字/字符,然后用python <文件名>,刚好能跑,好巧!那我再写下一个文件,刚好出错。
所以我说:进阶最简单的方式,就是搞明白你写的每个字符的意义/作用。那怕只是一个helloworld.py,你搞明白这一些后,会比那些已经学到了文件操作部分的人更了解Python,并且在后面会踩更少的坑。
好了,the5fire来总结下理论部分:从熟悉的地方中找到陌生的东西,然后搞懂,慢慢往外延伸,可能会比较吃力,但是哪有好走的捷径?
下面分阶段来说下
the5fire根据自己经验总结,仅供参考
这里只说初学者和工作一两年的同学
初学者
初学者指刚看了些语法,让程序碰巧可以跑起来的那些人。看了一些书,写了一些程序,但是实际经验缺乏。
对于这个阶段的同学来说,最好的进阶之道就是自己仔细review下你写的所有项目,找出一个觉得比较有意思的,研究透。比方说那本基础教程中的十个例子(其中有一些比较老,可以忽略),把所有涉及的内容都看下,还是那句话,了解作者/你自己写的每行代码的含义,之后尝试把项目扩展,看能不能让别人使用。
这个时候,你会开始考虑,怎么合理的把代码打包,然后发给室友或者朋友,让你的代码跑在他们的机器上?你可能会去搜索:如何打包python项目,或者如何把python项目打包成exe(如果你用windows的话,当然,我是不建议一直在windows学Python的,这样会找不到工作的)。
搞定打包之后,室友说你这个程序太垃圾,一运行就挂。这时你可能会想“我要怎么记录程序运行到哪了挂了呢”,你会找到logging模块的使用方法。
以此类推吧。你知识的边界仅仅通过一个项目就可以扩展的很大,大到能够满足你去找一份工作。
初级工程师
工作一两年的同学,暂且定为初级工程师吧。当然,我了解的实际情况是,始终会有人即便工作(正式使用Python讨饭吃)时间不长,在意识上也能够领先那些工作多年的人很多。人跟人的情况还是不同的。
这个阶段的同学,在生产环境中用了Python很久了,熟悉每天的日常工作。每天都想搞点事情出来,然后在github上赚star。(好吧,我承认我是在说我自己)。
初级工程师的工作一般是上级分派下来的,一个系统的某个模块。一开始很happy的coding,然后提交代码,被review,被吐槽———— 长此以往,终于提交代码时不再需要重新改很多次了。慢慢的,觉得不就是几个亿访问量的系统吗,你看,我也在维护呢,没让它挂过。然后沉溺在自己的熟悉的代码中。
对于这个阶段的工程师来说,进阶的方式很简单,因为Ta已经在生产环境中了,是其中的一个环节(其实理解为一个螺丝钉也未尝不可),Ta需要做的事情是熟悉自己每天维护的项目中从来不属于自己的部分。很多人都不愿意去开发、维护不是自己做的东西,除非那个同事离职,然后把项目交接给Ta。
日常工作中,我们经常能看到这样的例子,同一时间进入公司的两个人或者几个人,刚来的时候技术都差不多,但是过段时间你就会更想把重要的活儿派给其中一个。
作为一个螺丝钉,就得有螺丝钉的觉悟,知道自己的可替代性。我把所有的系统都比喻做数据的搬运工/整理员,你需要了解你所处理的数据的上下游,还有整个系统的全貌。
精通你现在维护的系统,以及上下游,是这个阶段进阶的更好的方式,当然也不是说不要搞业余的项目,主要看你侧重点在哪。
在工作多年后,我曾经回顾过我在工作两年的时候所做的一些事,要是能有人给我讲这些,我可能会成长的更快。
总结
就写这些吧,其他的几个阶段都是一样,从熟悉的地方出发,看看未知的环境。开阔下自己的视野,扩展下自己的知识边界。
《道德经》中讲:道生一,一生二,二生三,三生万物。所有的事物/系统都不是一蹴而成的,经过不断的演变,呈现现在的样子。但是原理/理论是相通的。
- from the5fire.com微信公众号:Python程序员杂谈