从清华到微软:我是如何学好计算机的?

昨天在知乎上看到一个问题:大一新生,想自学计算机,但是不清楚自学书籍的顺序与方法,请各位学长推荐自学顺序与书籍。

我们邀请了李伟老师回答这个问题,他依据自己的经验总结了一些内容,因此想将这些分享给大家,希望能够对你们有所启发和帮助。

李伟,博士毕业于清华大学,现在美国微软做高级工程师。

毕业后一直从事软件开发相关的工作,曾先后在百度自然语言处理部机器翻译组负责线上系统,在微软亚洲工程院从事Bing搜索的相关开发。近20年C++开发经验,出版了《C++模板元编程实战》书籍。

接下来一起来看看吧!


我的本科、硕士、博士学习分别是在北京工业大学、北京航空航天大学、清华大学3所学校度过的。在清华大学获得了博士学位。虽然经历了三所大学,但其实在每所大学中是生活都是比较规律的:以看书为主(早期还尝试打游戏,但由于打得不好,经常被虐,所以也慢慢放弃了)。

图片

我在本科时完成了学校组织的计算机辅修,到硕士期间开始使用MFC编写界面程序,从此开始系统性地使用C++进行程序开发。

分享一下我的经验吧。

我的大学专业是电子工程,不是计算机。虽然系里有计算机的课程,但相对计算机专业来说会差一些。我当时也是对计算机程序设计很感兴趣,因此从大学开始就开始了计算机的自主学习之路。

在学习之前,首先要明确你要学什么。计算机是一门很宽泛的概念,包含了很多分支。比如,程序设计算一个,CG开发也是一个,二者都是用计算机,但有很多不同。而程序设计又可以进一步细分,从顶层的界面开发到底层的算法,乃至操作系统,编译器都属于计算机的一部分。首先自己想一想要走哪一条路。可能刚开始并不了解要学到哪一步,但至少是要先明确大的方向,比如是要学程序开发还是工具的应用。

我当时对程序开发很感兴趣,因此就选择了这方面的内容来学习。在学习时,首先要注重基础

我当时的做法是:到我们学校卖教材的地方,问一下计算机系对应年级的教材是什么,买回来一些自己看一下。

当然,你可以有其它的办法,比如问一下计算机系的同学都在上什么课,可以去蹭课听或者学习一下相关的教材。学校开设的计算机课程都偏基础,但基础真的非常重要,没有一个好的基础,后续走不长的哈。

还记得我们当时系里开C语言(这是我们电子系开的为数不多的一门程序设计课),我的一个同学很不屑地说:现在 Visual C++都有了,为啥要学C语言啊。这种想法其实是完全不可取的,学校开设的很多课都是基础,一定要认真学。

在对计算机的基础有了一定的了解后,就可以尝试一些不同的选择

以程序设计为例,我当时会尝试Delphi,C语言,汇编等多种语言,看哪一种适合自己。每种语言的设计都有其独特性,基本上是在易用性、效率等方面求得一个平衡。尝试不同的语言的目的,一方面可以扩展自己的视野,另一方面可以找一个和自己比较“合的来”的语言。找到之后就要深入学习。

深入学习某一门语言的同时依旧不能放松对基础技能的继续了解。我本科所在的学校设立了辅修,我当时是在大二(或是大三)选择了计算机辅修的课,专门上课去学。虽然最后拿到的仅仅是一个辅修的证书,但在里面学的数据结构什么的是受用终身的。如果你有这个条件,也可以考虑这种方式。

在学习的过程中可能会遇到各种问题,这个时候就需要找一些相关的人去询问

我记得之前学C语言时,使用它编写辅修数据结构课上老师留下来的作业,结果总是编写不对,在多次修改不得其法后,我拿着自己的代码找辅修老师去看,结果辅修老师拿着我的程序在整个辅修班几百人的课堂上逐一批判,当时印象非常深,一次过后就对编写代码有了很深入的理解。

在学习同时,需要尝试使用它去解决一些问题,也就是做项目。这个也很重要,计算机的学习本身就是一个不断练习的过程,只有不断练习才能发现不足之处,从而不断提高。

注意在刚开始的时候,要做的练习应当避免一些误区:比如不要找你所学习的技术无法完成,或者做起来很难的事情。比如在刚开始学C语言时,不要找一个做界面的项目来尝试。因为此时做项目的目的是熟悉之前掌握的技术,而一般来说我们在学C语言时,更多的应关注与练习如何组织计算逻辑,如果此时你找一个做界面的项目,那么就和做项目的初衷相违背了。

项目可大可小,不一定是一个真的项目,也可以是自己想的一个问题,重点在于(1)稍微有一点难度,(2)使用目前学到的内容就可以解决。这样的项目才能用于巩固与提升自己学到的内容。

当通过一段时间,掌握了某一门基础的编程语言并有了一定的项目经验后,如果你能够不忘初心,还是对你所学习的方向感兴趣的话,那么可以尝试一些新的挑战。比如我在掌握了C语言后就想尝试使用它来写界面。这个时候你可能会发现,学校里的内容没办法满足你的需要了。

但在这个时候,由于你已经对你要学习的领域有了一定的了解,因此就会有一些自己的判断与选择,来选择下一步学习什么了。

然后就是继续这个过程,做项目,找不足,提升自己。很多东西的学习并不是越早越好,早期一定要注重基础,比如对于程序设计来说,要将计算机组成原理学好,学会用一门语言就OK了。学的同时可以看一下其它的领域,但一定要有所专注,同时不要花大量的时间去学一些离你当前水平“比较远”的东西。

比如,我就不建议在学好一门语言之前去碰“设计模式”。因为还不知道怎么编写一个程序的时候,学“设计模式”完全就是浪费时间。我是在使用一门语言去做实际项目时,发现用户的需求总是改来改去,每次修改都不得不花大量的时间修改程序。

在这样的背景下,我去看设计模式,就会有相对深入的认识。如果我在学习程序的一开始就去看设计模式,那么基本上就是事倍功半了。

杂七杂八说了一堆,希望能帮到你哈。

最后附上链接,有兴趣的盆友们去知乎点个赞吧~

https://www.zhihu.com/question/467188981/answer/1973842194

图片

  • 4
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值