第333期 | 胡光:学霸是怎么学习编程的?
池建强
讲述:池建强大小:8.70M时长:09:30
你好,这里是卖桃者说,今天和你聊聊我们的专栏作者胡光老师,江湖人称“胡船长”。
胡光老师曾担任百度高级算法研发工程师。在百度就职期间,他开发了部门内部的第一版推理引擎,并顺利在人物关系推理等应用场景中落地实施。目前自己在创业,从事教育行业,有一家编程学习的培训公司海贼科技,帮助众多学生从零开始学编程。同时,他也是极客时间专栏《人人都能学会的编程入门课》的作者。
我前两天和胡光老师聊,发现人家真的是妥妥的一枚学霸:高中被保送到了哈尔滨工程大学,本硕博连读,在校期间还曾拿过 ACM 亚洲区金牌,进过两次全球总决赛。他说,自己是在激烈的竞赛环境中成长起来的。今天,我就来和你聊聊胡光老师的故事,看看学霸是怎么学习的,以及他是如何理解编程的。
缘起:编程学好了,能做游戏?
胡光和编程的缘分始于 2006 年。当时,胡光正在读高中,他的微机老师向大家推介一门除数学、物理、生物和化学以外的第五大学科竞赛——信息学竞赛。老师在讲台上介绍了一大堆,不过这些东西胡光都忘得一干二净了,只有一件事他至今还记得,那就是课间和老师的对话,也正是这番对话,燃起了他学习编程的兴趣。
当时,胡光对计算机的认识都是和游戏相关的,像什么《热血传奇》《红色警戒》等等。所以到了课间的时候,他就跑过去问老师:“老师,编程学好了,能做游戏么?”老师说了一声“嗯”。虽然是那种不置可否的“嗯”,但对当时幼小的胡光来说,这就是肯定句。于是乎,他就踏上了学习编程的道路,一发不可收拾。
不过,学霸也曾逃过课。刚开始学习编程的时候,老师从最基本的语言基础开始讲起,先讲定义变量,然后是顺序程序结构、分支程序结构 if 语句、循环程序结构 for/while 语句。讲这部分,一共花了 4、5 节课的时间。胡光当时就有点儿坐不住了,觉得这个太简单了,没啥意思,干脆逃课算了。于是,他就逃了一节课。
当时,胡光的弟弟和他一起学习编程,一起上课。后来他问弟弟,那节课都讲了什么,弟弟说:“老师讲的是各种结构之间可以互相嵌套,分支里面可以放循环,循环里面可以放分支或者再放循环。”
听完弟弟的回答,胡光的脑海里立马浮现出了一张大大的编程地图,那是一种递归式的结构。他意识到,简单的语法通过循环嵌套,最终可以产生功能特别复杂、结构特别优美的程序。也正是从这个时候开始,他打定主意要学好编程,探索其中的奥义。从那以后,他就再也没有逃过课了。
学习:大量练习,等待“开窍”
胡光的信息学竞赛成绩虽然不能和同时期的那些真正的牛人相比,但也算是小有成绩,后来还被保送到了哈尔滨工程大学,本硕博连读,外加学费全免。本科期间,他还参加了大学生的算法编程竞赛,并拿到了 ACM 竞赛亚洲区金牌,进过两次全球总决赛,这个成绩可以说是相当不错了。
简单介绍下 ACM 竞赛,它的全称叫做 ACM 国际大学生程序设计竞赛,始自上个世纪 70 年代,是世界范围内历史最悠久、规模最大的程序设计竞赛,有“程序设计奥林匹克”之称。
这个竞赛考验的是大学生运用计算机来分析问题和解决问题的能力,难度非常大,能拿金牌的都不是一般的选手。要么天资聪颖,天生就是编程的高手;要么勤奋过人,日复一日地刻苦练习。
胡光说,他属于后者,也就是“努力型”选手。虽然是大家眼中的“学霸”,但他的学习实在没什么特别的技巧,就是大量的练习。有一段时间,他做题做到了“走火入魔”的程度,连睡觉都在思考题目的解法,甚至在梦中,他还找到了独一无二的解题方法。万万没想到,第二天醒来他真的就会了。
对胡光来说,大量的练习,不仅是为了看遍所有的题目类型,更重要的是寻找那个“开窍”的时间点。每个“努力型”选手,“开窍”需要的练习量是不同的,有人做 10 道题就能理解相关算法的本质,有人得做 20 道。但这些其实并不重要,真正重要的是,谁能坚持住,谁能抵得住漫长且枯燥的练习,成长起来。
胡光认为,在“开窍”前放弃思考是最可惜的。他建议,平时不管是学习也好,做事也罢,不要怕慢,可以给自己多一些耐心,也许能有更大的收获。
经验:如何学好编程?
掐指算来,胡光到现在一共写了 13 年程序。在这些年的工作中,他了解或者熟悉的编程语言有十几种之多,甚至他自己还开发了一门娱乐级编程语言 Hython。
对于如何学习编程,胡光也结合自己的经验,聊了聊他的看法。比如他学过的编程语言特别多,有人可能会发出“学习难度大”、“容易混淆”的感慨,但实际上并不是这么回事儿。因为编程语言设计者,更多的还是为了让人们使用自己的编程语言进行开发,所以语言设计本身都会有前辈语言的主流特征。这就意味着,只要你学习了一门主流语言后,会大大降低你学习第二门语言的成本。
至于为什么自己开发一门娱乐级编程语言,胡光给出的回答是:经历了开发编程语言这个过程,会对很多语言的特性理解得更深刻,知其然,知其所以然。所以当你自己能开发出一门编程语言的时候,站在开发者的角度再去学习其他编程语言,简直就属于“降维打击”般的学习。
胡光认为,能够快速地掌握一门编程语言的核心,从来不在语言本身,而在于你的基础知识。如果你的基础知识不够牢固的话,再厉害的编程语言,你也无法发挥其应有的作用。而编程的核心,则在于表述你的思维,至于用什么编程语言进行表述,并不重要,重要的是,你需要先有相关的编程思维。就像我们上学时候写的作文一样,用什么语言写作文并不重要,重要的是文章中所展现的思想。
有句话说得好,“语言从来不是编程的障碍,思维才是”。在胡光看来,所谓的“思维”,大多数时候反映出来的是“编程技巧”,更形式化一点,叫做 “编程范式” 和 “算法数据结构”。编程语言的各种语法特性,其实就是在支持各种各样的 “编程范式”。如果你在学习编程的过程中,能按照 “编程范式”的角度,将语言的各种特性进行分门别类的学习,那么既可以找到学习的重点,又能清晰准确地理解每个语法及语言特性。
比如,如果你是刚刚接触 Python 的小白,你在做程序设计时,想要将相关的过程封装成函数方法,也就是采用面向过程的编程范式。那么,你只需要学习 Python 关于支持函数定义的相关语法部分,就能上手用 Python 开始写程序了。
当然,关于如何学好编程,还是胡光老师的专栏《人人都能学会的编程入门课》讲得更详细、更丰富,我在这里也帮这门课吆喝吆喝。这门课非常适合编程初学者,针对编程初学者的痛点问题,胡光老师在专栏里设计了独特的学习结构,还打造了“编码能力训练”环节,帮你解决枯燥乏味、不懂、难学的种种问题。我也给大家伙儿申请到了优惠口令 MacTalk20,具体的优惠信息参见文稿。
好,关于胡光老师的故事就先聊到这里,明天接着和你聊他的创业故事、关于创业的心得,以及他这么多年一直在坚持的人生原则,请持续关注。
卖桃者说,咱们明天见。
(编辑:夏天)
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
该免费文章来自《卖桃者说》,如需阅读全部文章,
请先领取课程
请先领取课程
免费领取
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(5)
- 最新
- 精选
- 罗耀龙@坐忘茶艺师学编程 我也来说一句。 我就是一位茶艺师,完全的零基础的30岁大叔,第一门正经的编程课就是胡光老师的这门编程入门课。现在已经在啃第18、19讲。 想知道我学的怎么样?看看我在每节课下面的留言吧(都被精选了)。 一句话:跟着胡光老师好好学,自己好好练,你也能学得好编程。
池建强回复: 太厉害了
2 - 奔跑的熊池老师,每天上下班听极客时间已经成为习惯。希望极客时间APP提供播放列表定制的功能。比如听卖桃者说,播放列表是从最新到最旧,有几篇听了下级再听上级,由于车上通过方向盘按钮和中控屏幕按下一首、上一首无效(直接停止播放了),体验不太好。课程的播放顺序倒是对的,也无法编辑播放列表。极客时间让我受益匪浅,希望越做越好!
池建强回复: 收到,谢谢你
- 信念胡光老师的算法公开课什么时候开始呀?
池建强回复: 预计下周上线
- 诺言果然,主动性是学霸的必然素质。3
- 学要有所用其实关于如何学好编程,很多人都不愿提及的一件事,那就是智商!1
收起评论