文科生为什么要学编程?一个现实考虑是找工作。文科生的优势在于写作能力与人际沟通能力,如果再懂一些编程,在今天的职场上是普遍受欢迎的。从美国到中国,越来越多的互联网企业开始招募懂编程的文科博士、硕士,这些可都是高薪噢!我们实验室的毕业生在BAT(百度、阿里巴巴、腾讯)、微软、新浪等都留下了足迹。
再拔高一点,从全球大趋势来看,英国把2014年设立为“Year of Code”。从今年9月开始,英国5~16岁的学生都必须学编程。美国总统奥巴马也专门发表演讲,呼吁所有美国人学编程。
当下有本畅销书叫做《你编程还是你被程序控制:数码时代的10条指令》。作者写道:“你是想要指挥技术,还是让我们被技术及那些懂技术的人指挥?如果你选择了前者,你就获得了文明自主殿堂的一席之地;但如果你选择了后者……那可能是你最后一次能自己有权作出的选择了。”
当然,还有其他一些更实际的收益。如果做学术或商业研究,懂编程才能自己从网上抓第一手数据;而且可以促进学科间合作。这里有效的共同语言不是中文或英文、而是数学或统计模型和编程语言。
不过,在我自己看来,文科生学编程,主要为了训练编程思维方式。什么是编程思维?第一,你能把你面对的问题“计算化”,也就是用计算机可以理解的语言把问题表述出来。你每天都会面对问题,回家房子太乱,上班面对数据也太乱。为什么你会感觉无从下手?因为你并不知道你要解决的问题是什么。所以首先要明确问题——是垃圾太多需要扔掉,还是物品摆放不合理?垃圾太多应该怎么办,物品摆放不合理又该怎么办。你手头有哪些工具可以用?你期待最后整理成什么样子?明确问题之后,用计算机可以理解的语言把问题表述出来——编程思维就是培养你的这种能力。
其次,这可以培养做事逻辑。初学者最容易犯的重大错误就是事先考虑不周、计划不全,只想到明显的结果而没有穷尽所有的可能性,结果留下隐患,即所谓bug。还有,这样可以培养规范化的习惯。比方说定义方法、变量,哪些字母大写、哪些小写,前后拼写一致,标点准确,格式对齐、缩进,还有句句留注释,等等。
有人问,你纠结这些细枝末节干什么?这样训练下来,我们都成了机器人,还有什么创新能力?事实恰恰相反。魔鬼存在于细节之中。恰恰是这些细枝末节,最容易被忽视,最容易出错。计算机对错误是零容忍度的。而且,规范化是培养这样一种思维:尊重规则,在规则基础上创新。
那么,文科生学编程具体要学什么呢?我们系的博士生5年前也躲着编程走,现在都在学——有些在学习比SPSS更强大的R语言、有的学习适用于文本挖掘的Python语言,也有的学习更专业的Java、C++等语言。这在亚太地区算是领先的,但在欧美大学文科生学编程就不是新鲜事了。专攻哪种语言好呢?我认为只要能熟练地掌握上述任何一种都好。当你系统地掌握了一种语言,你就会发现,各种语言之间的差别不大,肯定比学完英语再学法语德语容易。
最后谈谈怎么学编程。第一,投入时间。“一万小时定律”说,每天花4小时专做一件事,每周5天,坚持10年,有了这一万小时,基本上你就可以成为某个领域的熟手。诸如此类的还有“10年法则”等等。如果10年太长,等不及,那你就要增加投入,每天8小时,5年练成。
这些法则定律传达的信息是:要掌握某种知识,必要的甚至大量的时间投入是必不可少的。我在美国从博士生到升大学终身教授的9年间,几乎天天写代码,通常深夜才有时间,一转眼就是窗外鸟鸣,东方已白。时至今日,实验室一批高手,我不需要自己操刀,但同样学习新语言,不然怎么与他们以及遍布全球的合作者沟通?
除此之外,动手写,犯错、改正,再犯错、再改正,这是学编程最重要的过程。
第二,文科生别着急啃那些厚厚的教程,先看教学视频。第一次没看懂很正常,别着急。 “重复”、“过遍数”是开始学编程的不二法门。
第三,学规范,纠细节,养成好习惯,终身受用。学外语,尽量不要看词典,而是从上下文猜词义,学到的才是活语言。学编程,恰恰相反,要随时查手册,才能“被训练”出规范。
(祝建华系香港城市大学媒体与传播系教授、互联网挖掘实验室创始人)