我是如何自学编程的

今天来简单写一下我是如何自学编程的。

自从大半年前写了这篇文章《从英语翻译到人工智能:我如何用两年时间跨界转行》后,我就不断地在公众号和微博上收到标题里这个问题,这个周末终于有点清闲,就找机会把这篇写出来了。

16年年初,在我决定要从纯语言学转方向到计算机语言学之后,我就开始了自学基础编程(——之前有不少读者误会我是在学校转了专业,其实不是,一是因为我们学校没有计算机语言学,二是德国大学普遍不能转专业。所以我只是在课余自学而已)。看了一些前辈的科普后,我选择了先从 Python 开始。因为我以前在 Coursera 上过网课,体验很不错,所以那时也照例先在 Coursera 上找到了一门 Python 入门课。

我选择的第一门编程课是密歇根大学推出的《Python for everyone - learn to program and analyze data with Python》——相信很多自学编程的人都曾上过这一门相当热门的编程系列课。

image

16年上半年四五个月的时间里,每个周末我都拿出几小时花在密大这一系列共5个模块的课上。因为我对于新知识向来入门慢,结束这系列课所花时间确实不少,但我最终还是完成了所有课程内容和作业,也算是一只脚跨进了编程的大门。

现在回头看,密大这个系列的编程课最大优势在于教授讲得非常浅显易懂,Python 的基础知识点都一一讲过;但是,整体课程实在有些浅,很多计算机科学的基础知识都略过了,编程作业也太少太浅,导致单纯按这个课程走下来的学生必定练习严重不足。编程知识与技能的积累相辅相成,两者都需要用大量练习形成肌肉记忆,才能真正走到应用这一步。

当时 Coursera 上的课程还普遍免费,只有最后的 certificate 需要付费。我并不迫切需要 certificate,就利用 Coursera 当时的政策报名了好几个与计算机科学或数据科学有关的课程。除了密大的 Python 入门课之外,我还上完了杜克大学的《Mastering Data Analysis in Excel》。这个课则比我预想得讲得深不少,一方面帮我拾回了不少数学基础,另一方面我也无意中学到了一些数据科学(Data Science)的基础概念和方法,例如很是有用的二分类(binary classification)、混淆矩阵(confusion matrix)、熵(entropy)和互信息(mutual information)等。我认为,如果你大学没修过任何高数类课时,想要转行进入数据科学或软件工程的话,那至少杜克大学这门课里面的所有基础概念都应该认真掌握。

image

接下来16年的暑假,我申请到了去图宾根大学计算机语言学系实习的机会。在那儿,我第一次接触到了学术界关注的几大自然语言处理主题,比如分词、句法分析、情感分析等等,NLP 于我不再只是一个空中楼阁般的虚称。

同时,在我的积极争取下,mentor 给了我一个简单的编程任务,但需要用 Java 来实现。Java 基础完全为零的我在两周内通过自学挣扎着写完了一个短程序,完成了任务!

那时快速记下的种种 Java 语法细节,自然是过后全被我忘了,但这个经历让我初步认识到不同编程语言之间范式的不同,也让我了解到编程在现实中的应用形式,同时还大大锻炼了我通过谷歌和 stack overflow 在纷杂的互联网世界里快速寻找有用信息的能力……

暑假结束,我回到学校继续上课。一天我在翻李笑来多年前的旧博客时,看到他推荐过 MIT 6.00 (2008 fall) Introduction to Computer Science and Programming 这门网课(链接见文末)。后来我才发现这是门相当有名的经典计算机科学入门课,欧美很多自学计算机科学转行编程的前辈都学过并推荐这门课。于是我在课余也开始踏上了自学这门网课的“漫漫之路“。

image

不夸张地说,我认为从我开始上这门课的那一天起,我才真正入门了计算机科学(Computer Science)。以前只是入门了初级编程而已,其实根本还没碰到 CS 的门边儿——CS 之于 coding,就好比“懂得出海捕鱼之于只会去鱼市买鱼”一样,其实完全不能等同于一回事。

MIT 6.00 这门课很难,我直到2017年暑假才把所有课程视频看完、课后阅读读完、编程作业和考试写完。但这门课的两位教授(Eric Grimson & John Guttag)是我在网上见过的讲 CS 讲得最好的老师之二,跟着这两位教授的指引,我加深了对 Python 的理解,了解了几种基础算法的实现,学习了数据科学基础和机器学习,知道了测试的重要性,认识了几种常见编程范式,还了解了 CS 在工业中的具体应用。

很多初学编程的人,已经跟着一门像密大 Python for Everyone 那样的课程规规矩矩学完了 Python 的所有语法,但若抛给他一个实际问题、问他如何用 Python 实现,他就立马傻眼了。这些只学会了表层语法的人,都需要认真研究一门像 MIT 6.00 这样真正的计算机科学入门课,来提高对编程的理解与真正写程序的能力。

MIT 6.00 这门课也让我深刻认识到优秀的老师究竟有多么重要。天下老师手里的课本都相差无几,但大部分老师只是在做“努力把课本中的表层知识搬运到学生的耳边”这样的事,只有少数优秀的老师才真正理解一个知识点的内涵与外延、一群知识点之间的联系、不同学生的困惑之处,以及如何画龙点睛般化解学生的疑问。

秉承着这个“尽量只上好老师的课”的标准,在学完 MIT 6.00 后我又找到了另一门“名师课”:Peter Norvig 在 Udacity 上开设的免费课程《Design of Computer Programs》

image

In case you don't know Peter:Peter Norvig 是现任谷歌科研主管,USC 副教授,曾任 NASA 科研主管,出版过 CS 课本。Norvig 曾写过一篇名为《Teach Yourself Programming in Ten Years》的著名文章,欧美程序员几乎无人不知无人不晓。

这门课果然没让我失望。如果你已经很熟悉 Python,也有一些基础的 CS 知识了,那就可以上这门网课试试(链接见文末)。Peter Norvig 教了很多编程自学者容易忽略的程序设计的原则和算法考量,我常常一边上着课一边在内心惊呼:“噢,原来是这样!”

image
image

除了以上这些值得一写的网课之外,我还上过其他大大小小、免费或付费的在线课程,但总体来说,那些课程质量并没有太出挑的。

关于选网课,我总结了一下自己的经验和标准——非常简洁!如果你是真正想要扎实学到知识,而非为了快速获得一个不知哪儿来的认证或为了缓解自己的内心焦虑,那最重要的标准就是「老师」。

不论谁来教 Python,语法都一模一样,但优秀的老师积攒了大量业界经验和教学经验,优秀的老师能够设计出优秀的课程安排,优秀的老师可以高屋建瓴地点通你的困惑,优秀的老师拥有能感染学生的热情。只有跟着优秀的老师,才能最少弯路地进入一门新学科——你可是只有一次“入门”新领域的机会呀。

除此标准之外,付费还是免费、课时多少、有没有结课证书,这些都没那么重要。作为学生,对老师的要求应该尽量高一点,对自己的大脑尽量珍惜一点——绝不是什么人都可以来向你大脑里灌输内容。这样最终你自己的水平才会越来越高。

除了网课之外,在2017年春夏时,我去 IBM 全职实习了5个月。这5个月不仅大大提高了我的编程和测试能力,也向我揭开了编程在大数据和机器学习应用的实现方式。在有若干 mentor 和同事的环境中,显然我的进步也更快了。我也是从那时起从零开始学习 Bash 脚本编程,开始频繁使用 git,开始学着以编程思维来思考工作中的问题,学着用写程序来简化重复性工作、减轻不必要的工作量。

image

在 IBM 的实习结束后,我拿一部分实习工资买了一台 MacBook Pro,从此终于进入了用 macOS 编程的人生!我不得不也老生常谈一句,对于程序员工程师来说,硬件与软件工具都很重要。能力范围内能升级的工具都可以尽量升个级。

以上就是我在正式开始工作前近两年大致的编程自学之旅。其实也不外乎网课、实习、看书、练习,然而这样一点一滴的用心积累,确是进步的最快路径。

希望对想要跨界转行的你有所参考价值!

你有什么转行经验想和我和其他读者分享吗?欢迎在评论中留言!
.

参考链接:

University of Michigan: Python for Everyone <www.coursera.org/specializations/python>

Duke University: Mastering Data Analysis in Excel <www.coursera.org/learn/analytics-excel>

MIT 6.00 (2008): Introduction to Computer Science and Programming https://bit.ly/2neVySQ

Peter Norvig: Design of Computer Programs <udacity.com/course/design-of-computer-programs--cs212>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,881评论 4 368
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,052评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,598评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,407评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,823评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,872评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,037评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,778评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,505评论 1 247
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,745评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,233评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,568评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,231评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,141评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,939评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,954评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,784评论 2 275

推荐阅读更多精彩内容