地图书
首发于地图书

文科生自学Python编程(一):什么是编程?

程序员创业祖师

约法三章

话说天道循环,世间本无新鲜事,程序编写,其实自古皆有之。秦末汉初,天下大乱,高祖皇帝刘邦遂斩白蛇起义。元年十月,刘邦还军霸上,召诸县父老约法三章:“杀人者死,伤人及盗抵罪。”一时秦人大喜,争持牛羊酒食犒劳军士,刘邦由此取得了关中百姓的信任。

据《现代汉语词典》解释,程序,乃是行事的先后次序;工作步骤,比如如何吃饭,如何上课等。编程从字面理解,是指编制做事情的步骤规范,比如上课不能迟到早退,就是学校明文编制的规章程序。秦国犹如一家失去活力的垄断企业,秦法是他们臃肿过时的软件产品。秦法严苛,人心思乱,刘邦发现风口创业之后,与百姓约法三章,降低了法律执行成本,提高了速度,初代产品即成功解决这个问题,市场反映强烈。后来他的团队快速打败或者收购了其他创业对手,赢家通吃重新垄断市场后,才推出了更为完善的《九章律》,更好的满足了市场需求,可谓程序员创业祖师。

什么是编程?

由此可知,程序不等于计算机程序,编程也不等于计算机编程,程序可以存储在计算机中,又可以记录在纸张中,甚至如约法三章一般,口口相传记录在人的脑子里。编程则将解决问题的方法,进行具体化和规范化,并让其它计算设备,比如人脑或者电脑,都可以据此步骤正确执行,得到一致的结果。

因此,我称刘邦为程序员创业祖师绝不是信口胡诌。比如这个约法三章,用更加具体规范的语言,就可以描述为:

如果杀人,则判处死刑;如果伤人或者盗窃,则判处有期徒刑。

如果说人脑是一台生物计算机,那么“约法三章”程序分发给不同的人执行时,必然会有错漏,虽灵活有余,却精度不足。两千余年之后,现代人发明了可以不知疲倦、精确运行的电子计算机,世界由此进入信息时代。现在计算机程序已经无处不在,不可或缺,甚至有时候,就算女友百般挑逗,玉体横陈,你还是很佛系的坚持不能辜负队友,一定要刷完这局王者荣耀,女友无奈,只好去刷抖音看小哥哥去了。


不管是工作、生活还是学习,你都无法离开各种计算机软件


所以说,不管是蛟龙下海,还是神州飞天,中国的飞速发展,都离不开各种软件程序。既然程序无处不在,所以除了计算机相关专业学生和在职程序员外,也就有了越来越多的人,比如我们的文科生们,也开始苦逼的学习编程技术。编程不仅仅能替我们解决问题,解放双手,而且还能教会我们在面对问题时,一种新的思考方式。

所以已经成为历史人物乔布斯才说,“每个人都应该学习编程,因为它会教给你如何思考。”

我相信人只要脑子不笨,稍通文墨,就可以如“约法三章”一般,用自然语言编写各类程序。但由于计算机只认识0和1,笨得根本听不懂人话,而要人类完全用0和1这样的机器语言编写程序,几乎是不可能的事,就好像让你用喵喵喵和主子交流一样。为了解决这个问题,人类一直在研究如何用人可以理解和阅读的方式,快速编写规范的计算机程序,并由此诞生出了各种高级计算机语言,其中最为中国大学生熟悉的,大概就是C,以及谭浩强老先生的《C语言程序设计》。

比如我们可以用更接近于现在法律和计算机高级语言的方式来编写约法三章程序:

如果 犯罪行为 等于 杀人
    刑罚 等于 死刑
如果 犯罪行为 等于 伤人 或者 犯罪行为 等于 盗窃
    刑罚 等于 有期徒刑

自学编程非难事

上面所展示的编程方法,看起来似乎不难理解。但如果你是一个文科生,正好在尝试自学编程,往往明白编程可不是这么简单的事。

编程难吗?如果你把目标定位成毕业就进BAT或者华为工作,年薪200万,的确需要就读计算机相关专业,经过本科、硕士或者博士阶段多年的刻苦系统学习才行,这对计算机专业的学生同样是极难的事情。

编程简单吗?现在的父母热衷教育,儿童编程越来越火,只要先定一个小目标,中小学生课余也能学会编程甚至搞的有模有样,就算是是文科生,也总不能说堂堂大学生可翘课,可泡妞,却不如小学生被妈妈逼着去课外机构吧?

在我看来,自学编程到底难不难,主要在于实际的目标、合适的语言、合理的计划与正确的方法。

作为历史地理公益网站发现中国(ageeye.cn)的站长,目前又在创业,解决一些文史专业的信息化和成果转化问题,因此我有幸认识不少在读人文社科学生,相关领域的大学老师也多有接触。科研需要不断开拓创新,跨学科交叉融合又是大趋势,相对来说,人文社科和理工科的文理交叉科研,还远比不上文理科内部分支科学的交叉研究,这即是挑战,也是机遇。


发现中国


当然实际上,虽然理想可以伟大,但一来就把小目标订成一个亿,对于多数学生而言不太现实。很多文科的同学学习编程,并不是要搞什么大课题或者大系统,而是完成一个真正的小目标,又以数据处理居多。比如量化研究需要自动化的爬取、统计和分析数据;比如论文中需要一些复杂的数据可视化图表;比如人文学科的数据需要信息化管理。正因为此,不时有一些同学和我探讨,编程到底该如何学习时,我都建议应该有一个合理的小目标,这样即可以边学边练边思考,又有解决问题的足够动力和压力,而不是无的放矢,不知道学来干什么。

有了合适的目标后,你需要一个适合入门的编程语言,我在这里推荐Python,原因无它,简单易学、代码量少、类库丰富、跨平台、多功能而已。记得很多年前,我自学Python入门编程时,就有很多人评价说,Python特别适合非计算机专业的学生学习,用来快速解决未来学习和工作中的小问题,并且已经被国外许多大学作为编程入门语言,那句有名的五毛广告词“人生苦短,我用Python”更是深深的打动了我。

多年以后,随着人工智能等技术的发展,Python在国内名声日显,以至于现在很多文科学生入门编程的首先就是它,连一些文科教授,也开始自发的学习Python,并在朋友圈晒着自己的学习心得。我很庆幸当初的选择,同时也相信大家都能通过学习Python,轻松的进入了编程的大世界。

现在我们将自然语言的“约法三章”,翻译为Python语言程序:

if 犯罪行为 == '杀人':
    刑罚 = '死刑'
if 犯罪行为 == '伤人' or 犯罪行为 == '盗窃':
    刑罚 = '有期徒刑'

由于大多数编程语言都是美国人设计的,所以真正的程序代码中,如果、或者等关键词,必须翻译成if、or,这让我不知不觉哼起了这首中英混杂的歌:

Let me fly
I am proud to fly up high
生命已经打开
我要那你总精彩
Believe me l can fly
I am singing in the sky
你曾经对我说
做勇敢的女孩

而合理的学习计划,这自然是你的事,三更灯火五更鸡,正是男儿读书时,我告诉你有了Python后,有空随便学学就会,肯定是骗你的,但只要每天抽出一定时间练习和思考,学会编程基本不会有问题。

最后,你还需要一个正确的方法,这是后话,请听下回分解。


后记

在跨学科融合的大趋势下,国内不少人文社科单位,受限于经费较少、理念陈旧、缺乏信息技术复合人才等因素,信息化水平仍然很落后,文理融合研究面临诸多问题。我近几年一直致力于人文数字化方面的工作,有幸认识了越来越多的文史专业学生和老师,知道不少文科师生,基于日常的数据爬取、分析、可视化需求;开展文史量化研究课题;主持人文信息化项目等原因,都有想法或者已经开始自学编程,其中又以自学Python的居多。

人生苦短,我用Python。即便Python已经是最适合初学者零基础入门学习的编程语言之一,很多文科学生依然在网上瞎摸乱撞,不得法门。有鉴于此,我根据多年前自学Python入门编程的经验,以自然语言和编程语言的异同入手,用各种耳熟能详的文史故事作为案例,用通俗易懂的语言,而不是枯燥死板的概念和例子,引导初学者学习程序开发。

我认为编程非难事,只要有实际的目标、合适的语言、合理的计划,逻辑思维正常的人都能够学会编程,本专栏则主要讲解“正确的方法”这部分。为了让初学者更好的理解,同时考虑到文科师生一般不会接触到大型软件工程开发,因此以讲清楚基础概念,快速上手解决实际问题为主,不会讲解各种高级开发特性。

本系列章节不多,大致框架如下,并根据读者的反馈逐步调整:

  1. 程序的基本概念,以及人和电脑的交互过程。
  2. Python的安装和环境搭建。
  3. Python的基本概念。
  4. 面向对象编程的基本概念。
  5. 第三方库的介绍。
  6. 数据抓取、分析和可视化。

希望你能通过这个系列教程,顺利进行编程的大世界。


本系列在公众号、头条号、网易号等平台同步发布,帐名称均为“地图书”,欢迎关注。

编辑于 2019-11-18

文章被以下专栏收录

    在所有编程语言和领域中尝试编写中文代码,开发相关工具,总结经验,一致代码风格。包括中文命名,汉化现有语言,创造中文语法的编程语言等等。作为最熟悉的母语,用来编写代码会让代码更容易被自己和母语相同的其他开发者理解。基于英文的编程语言和框架中,使用中文命名有时有技术问题。希望这里为后人趟雷,填坑。多数现有API是英文的,这里也会对其中一些常用的进行汉化。当然,这里也会对基于中文的编程语言进行探讨。包括汉化基于英文的编程语言,以及创造新的编程语言。