高手教你快速学习编程语言
背景介绍:
Paul在牛津大学获得了哲学、政治学及经济学学士学位后,曾在微软,sybase,Hyder和QA培训等公司做软件以及技术培训工作。目前他是专业技术培训公司Mallon Associates的董事,并总管一家跨国金融服务公司的全球技术培训生项目。
你从当初自学编程到现在运作和掌管贵公司的专业技术培训业务,并总管一家跨国金融服务公司的全球技术培训生项目,这其间经历了多少年?
初中时学Basic的经历不算在内,我第一次正式学习编程是在1992年到1993年吧。
2013年的时候我成为我们公司的首席培训师。
2015年起我开始负责我们最大的客户的全球技术培训生项目。
这样算下来20多年吧!
我知道C++之父Bjarne Stroustrup请你喝过酒。
有很多人好奇你和Bjarne是怎么认识的。
我从是2003年开始为我们最大的客户提供技术培训服务的。
在我的职业生涯中让我特别惊喜的一个事件就是2013年的时候Bjarne Stroustrup加入了该公司。
那之后我有过几次和他面对面交谈的机会。
能和我心目中的偶像聊生活和技术实在是太兴奋了!
你本科所学的专业是PPE(Philosophy, Politics and Economics哲学、政治学及经济学),它和计算机编程并没有多少关系。
你是怎么想起来要自学编程的?
你的第一份编程工作是怎么得来的?
1992年到1993年我在牛津读书的时候突然生了一场重病。
当时为了方便治疗我不得不离开牛津回到家乡。
回到老家看病的那一年里我要养活自己所以不能无所事事(本文作者注: 在英国大部分年满18岁的人都自己工作挣钱不再依赖父母。除少数情况外,住在父母家的成年子女要给父母交房租和分担水电等生活费用。)。
看病之余,我需要找一份全职工作。
我的一个朋友当时在一家公司的技术部门工作,他的推荐帮我赢得了一次面试机会。
那次面试很顺利,那之后我就开始边工作边学习。
我记得最开始学的是两门语言,Visual Basic for Application和C++。
我当时的工作内容之一是在excel里面用VBA编程。
可是如果你之前并没有学习过编程的话,你是如何通过那次面试的呢?
我当时用了一个周末做了一些准备。
一个周末?
是的。
你已经做了很多年的专业技术培训,到现在你总共掌握了多少种编程语言?
我数一下。
Java,Scala,Perl,Python,JavaScript,C,C++,C#,SQL MDX,SQL的各种版本,Q,VB,F#,Forte,swift和ObjectiveC。
十六种?
差不多吧。
下面我想是程序员们最关心的一个问题了。
当客户要求你提供某种你原本不熟悉的编程语言的培训时,你是如何做到在非常短的时间内掌握,甚至能够给有过实际使用该语言工作的学员授课,让他们从中有所收获的并得到他们的好评的?
你有什么特别的学习方法吗?
我觉得学习编程语言和学习任何一门人类语言一样,你不能只是被动学习,你必须主动使用。
仅靠一本入门书学习语法并能写出一句可以编译通过的语句是不够的。
我会给自己布置题目,选择一些有趣的小项目,然后用这门新语言实现。
在项目的选择上你有什么考量吗?
我只选择自己已经用其他熟悉的语言做过的项目,这样可以把未知因素降到最低。这是其一。
其次我会根据要学的这门语言的特点去选择最合适发挥该语言优势的项目。
比如说Scala是一门函数语言,我会选择一些和数字处理相关的项目,而不会用Scala去做一个用户界面。
通过实际做项目来学习是个非常好的主意!
除此之外,你还有其他的学习途径吗?
学习编程语言和学习一门外语是类似的,在你着手写代码同时你也要学习如何阅读别人的代码。
就像你不会仅仅学了某门外语的基础单词和语法就立即去写作文一样。
你要花大量的时间去精读和泛读经典的作品,有了足够的输入才能自己有所输出。
你这样一横向比较就很清楚了。
学英文的时候,我们是从第一天就开始阅读简单的课文,然后在学习的初期,中期和所有的学习过程中要始终坚持阅读。
是的。
像要学好英文必须持之以恒地阅读原汁原味的英文作品一样,程序员必须坚持阅读他人的优秀代码。
我一直奇怪为什么人们学习编程的时候就把这一点给忽略了。
是不是有些程序员水平提高得慢也和平时工作中光写不读有一定的关系?
要做到不停地进步就必须坚持阅读优秀的代码对不对?
那你一般是从哪里去找合适的代码来读的呢?
假如你所在的公司需要你学习一门新语言好做一个新的项目,或至少你有相应的权限,那你就可以直接阅读公司内部已经上线的工作代码。
工作代码的质量虽然良莠不齐,但通过阅读你会慢慢体会到它们之间的差异,并从中学习。