关于Python的劝学指南
最近和几位朋友聊天,无意中谈到了关于Python的话题,这几位朋友之中有做财务的、有做投资的、也有项目负责人还有一些法务的朋友,他们所从事的行业与计算机没有太多关联,但是对Python所表现出来的热情,着实让我感到意外。他们选择学习Python的原因大致有两点:第一,认为Python很有用(有需求);第二,认为Python很简单(成本低,主要指时间成本)。那么,作为非计算机行业的从业人员,比如法律或者财税等其他非计算机行业的职业者,是否有学习这项技能的必要?这是我们今天要分享的话题。有言在先,分享这个话题,并不代表我本人的计算机水平达到了某种程度,只是作为一个业余学习Python的“过来人”,尝试对同样准备学习他的朋友们提供一些参考。对于专业选手来讲,本文的一些观点或许并不适用。Python很有用?编程之路大致有两种途径,一种是先系统地学习编程语言,然后用语言解决遇到的问题;另一种是先有了应用场景需求,然后拆分问题寻找编程的实现方法。第一种属于被动接受的学习方式,也是传统教育普遍采用的培养方式,优点是基础往往比较牢靠,对知识也有全面的认知,缺点是学习的时间比较久,前期看不到成效并且不容易坚持下来。另一种属于主动探索的学习方式,通常是脱离学校教育后的主要学习方式,优点是目标和需求比较明确,能切实地解决问题,缺点也比较明显,没有系统化的指导和培养,往往需要自己寻找解决各种问题的方案,会走一些弯路,需要一点百折不挠的劲头才行。前者,适用于几乎所有的语言学习,后者适用于简单的语言学习,比如Python,也适用于从一门语言向另一门语言转变的学习,比如从C++转学Python。我是接触计算机比较早的一批人,起先学习的编程语言是C++,但是在取得该语言等级认证后的很长一段时间里,我并没有做出过任何一个实用的程序项目,因为如果不从事计算机行业,这些编程语言几乎没有任何应用场景,但Python算是个例外。我使用Python的第一个应用场景是毕业后的租房。当年的豆瓣网还是个很纯粹的平台,上海许多优质的房屋直租信息常常会在这个平台发布,对于有租房需求又没时间泡在平台上的我来讲,通过程序检索指定区域内的租房信息并将信息实时反馈给我,无疑是一个不错的方案,于是我向计算机专业的朋友请教了解决方案,他们向我推荐了Python(相比之下,这个场景用包括C语言在内的其他语言都很难实现),在见识到它强大的网络爬虫功能后,我开启了自己的Python之路。律师的职业中,Python的应用场景主要围绕着文本文档处理和信息筛查展开,具体可以分为这样几类:(1)文本信息的筛查,尤其是对批量文本进行深度检索。比如,某年在某省高院协调处理地产纠纷诉讼事务的时候,我们对于解除房地产合作协议的诉讼案件收费标准与当地法院有了不同的看法,当地法院倾向于按照合同总价款的比例收取,而我们倾向于按照申请金额的比例收取,两个收费的标准相差了近多万。为了佐证我们的观点,我们调取了北京、上海、广州等几个重要城市的近余份裁判文书,并从中提取出诉讼费的裁判数据,形成了一份关于诉讼费收取的专项报告,其中对文书筛选的工作便是通过编程来完成的。(2)网站关键信息检索。比如,在一些官方网站检索功能受限的情况下,通过遍历网页的方式可以较准确地检索到官方公布的数据和文书(此处,忍住吐嘈某度在信息检索方面的商业化运作,以及某些行政类网站信息维护的质量,暂略去字)。又比如,在公报案例库还不健全的时候,通过自定义编程建立起自己的数据中心。(3)资料的收集、归纳和整理。比如,某年在研究某集团公司历年来的余件重大诉讼案件的过程中,提取历年来的案件信息,汇总整理报告的部分,也是通过编程辅助完成的。又比如,在企业并购的业务中,需要对某上市公司历年公报信息进行收集,正常情况下历年公布的信息需要逐一下载,这项工作同样也可以通过程序自动处理。(4)格式化文本及文档。包括PDF及OFFICE格式文档操作,格式转换,信息提取与变更等,通常可以很方便地实现多任务的串联操作。对于想要接触Python的朋友,建议大家认真地了解一下编程与自身应用场景需求之间的匹配问题,如果有好的软件可以方便地实现这些应用场景,其实并不需要自行编程处理。比如,一些课程机构宣扬的用Python操作Excel,就我个人的体验来看,其中很多应用场景并不如使用Office办公软件方便,倒是财会的朋友常用的VBA功能可以尝试使用Python作为替换。技术发展至今,编程所能够解决的问题仍然局限于批量的、规律的以及重复性的一些工作,或者把一些分散的独立任务串联到一起,这是编程所能实现的基本任务。如果想要应对那些少量的、不规律的以及一次性的工作,启用编程并不是一个好的选择。因为少量的工作可以径直做完,并不需要通过编程处理(技术化解决的优势并不明显);而不规律的工作场景,由于所需要的个性化细节过多,一般的编程技术难以实现或者技术尚不能实现;对于一次性的工作需要考虑编程花费的时间成本与收获之间的平衡,花费过多而收获却少反倒不如直接处理来的快,这是在实用性能之外需要考虑的成本因素。当然,有一部分朋友需要用编程解决一些专业性的计算和模拟测试等问题,这不在本文的讨论之列,这类需求应当归入专业需求者的行列,不适用于业余需求者。Python很容易?片面地强调Python学习起来很容易是不对的,事实上,容易与困难始终是相对的。我们可以说Python语言相对于其他语言来讲容易的多,因为有良好的扩展性能,许多应用场景可以由封装完备的库(可以理解为系统安装不同的操作软件,只不过这是非视窗化的软件)来实现,因此Python的程序代码比其他语言要简洁许多。早期最流行的一份学习资料是《简明Python教程》的小册子(原作Swaroop,C.H由沈洁元翻译,适用于python2.0版本),整个文档仅有70多页。支持3.0的版本也不需要购买教程,官方已经提供了最权威的版本(详见