前段时间一个新来的博士问我怎么学习编程。这位博士之前是学习自动化的,编程经验基本接近没有。鉴于她是一个编程小白,我只好按照“模仿+超越”的思路来给她提供学习编程的一些建议。
选择模仿对象
先说“模仿”吧。
我个人认为大多数学习都是从模仿开始,小孩子会模仿家长的行为和性格。当你在一个城市迷路的时候,你会用谷歌搜索路径,然后模仿地图提供的路径去行动。当我写程序遇到一个之前没遇到过的问题的时候,我也会在网上搜索这个问题的解决方案,并且按照网友提供的方案尝试解决这个问题。当然,就是在网上搜索解决方案这个行为也是我在刚开始接触电脑之后向别人模仿学习到的。
在上述的例子里,小孩模仿的对象是家长,你模仿的对象是谷歌地图,我模仿的对象是在网上提供解决方案的“网友”。在自学习编程的时候,我们没有一个老师可以模仿,貌似没有一个明确的模仿对象。其实不然,我们可以模仿的对象很多,比如书本,技术博客,别人的指导等等。在学校里,老师会告诉我们什么是正确的、什么是不正确的。但是在自学编程的道路上,我们需要自己去判断和选择什么是正确的模仿对象。如果轻易听信别人的介绍,可能会为此付出一定的“智商税”。包括我在这篇文章里给出的建议。
因此,我们自学编程的第一步是,自己选择一个优秀的模仿对象。无论是别人介绍的资料,或者自己查到的信息,都要经过自己仔细筛选后做出最后的选择。用学习python举例,我在硕士期间是跟着一本Python基础教程学习的。当时我是把这个教程里的代码一句一句地敲进电脑里,在抄代码和看结果之间不断地感受Python的运行机理。
当然,我们还可以选择《A Byte of Python》,这本书就在各个领域里受到广泛的好评。而且这本书已经被翻译成中文,相应的内容被放在网上供大家免费浏览和学习。
英文原版可通过http://python.swaroopch.com/在线阅读。
中文翻译版可通过https://bop.molun.net在线阅读。翻译版本最后修订于 2017 年 3 月 19 日。
你可以访问https://www.gitbook.com/book/lenkimo/byte-of-python-chinese-edition/以获得本书以下格式的下载:
EPUB (可在 iPhone、iPad、电子书阅读器上阅读)
在我看来,这两本书的任意一本都可以让绝大多数Python小白学会使用Python编程。我个人更倾向于后者。
坚持执行到底
在走出第一步的选择之后,我们需要开始自学编程的第二步,毫不犹豫地把学习计划执行下去。
我觉得坚持不能依靠毅力。坚持的关键在于修心,只要在思想上能认清坚持下去的益处,并提前对中途可能产生的困难进行预演和解决,坚持下去就几乎可以做到。说“几乎”是因为生活中总是存在一些我们预先想不到的意外出现。
就拿学习Python举例,如果我们忙于主业,学习python只是利用业余时间进行的,那我们就必须舍弃掉一些之前的爱好。比如我每周末必须抽出一段连续的时间来进行写作,这个习惯已经坚持了一年多,除了去英国看老婆那些天,几乎是坚持做到了。为此,我舍弃了周末看电视剧、电影、综艺节目的时间。久而久之,我自己对电视剧、电影和琳琅满目的综艺节目已经无感,提不起太大的兴趣了。其实这和佛学的“戒贪”是一个道理。人的精力是有限的,为此,我们必须明确一个目标,并为了这个目标而放弃掉其他大多数意义更小的目标。
我认识的一个南开大学的教授,84年出生,是南开大学的百名学科带头人、天津市的青年千人,前段时间刚被选入国家万人青年计划。据我所知,他是从读博开始就基本不看任何电影、电视剧以及一些他认为无聊的娱乐活动,而是从早到晚全心全意放在科研和学习上。这种坚持绝对不是靠毅力,而是靠觉悟,也就是觉得这些娱乐不仅得不到快乐反而让我感觉到无聊甚至是浪费时间。
说真的,我现在也是这样的感受,想不起来上次看电影是什么时候了,但我依然觉得每天都很充实。在坚持这一点上,我并不赞同村上村树在关于跑步的话题上说的“喜欢的事情自然可以坚持,不喜欢的事情怎么也坚持不了”。我认为,在理性的考量下,如果十分想得到某种利益(比如名声、权力、金钱),那么任何暂时不喜欢的事情都可以让人坚持下去,直到让人感受到“多巴胺”带来的幸福,从而变成喜欢的事情甚至是一种习惯一直坚持下去。
超越需要智慧
在上述的过程中,我们依然只是在模仿和学习,什么时候可以超越呢?
这个问题的答案就是我们自学编程的第三步,多与别人的交流、向更专业的人学习。
与别人交流这个事情没那么难,我一般秉持着向别人提供一些想法,并从别人那里得到一些建议的“交换式”交流方式。
向更专业的人学习则可以通过浏览专门研究、优化甚至开发编程语言的专家的个人主页得到。在我眼里,这些人不是那些写代码有很多经验的人,而是专门研究编程语言的人,至少是在编程语言这个领域发表过顶级会议或者权威期刊的专家学者。我目前比较受益的是UC San Diego大学的Philip Guo教授开发的Python Tutor软件,这个软件可以把Python程序的每一句代码都可视化,从而让学习Python的我们更加生动地理解Python代码是如何运行的。
Python Tutor软件地址:http://pythontutor.com/
例子:
用python学习深度学习
目前深度学习很热门,想学习的人很多,但是大多数人不知道如何入门。
其实我们只需要了解Python,然后利用强大的PyTorch这个软件包,我们就可以轻松上手深度学习了。
这个软件包让深度学习变得非常“傻瓜”,举个例子,我们只需要写一行代码,就可以在轻松地加入新的神经网络,并进行调参等操作:
PyTroch页面:http://pytorch.org/
今天的教程就到这里了,下一次我会跟大家详细介绍Pytorch这个软件的。敬请期待。