很多人问我如果原来不是学计算机专业,想转行做计算机软件工程师,是否可以通过自学完成?这件事其实是可以做到的,不过大约需要一年左右的时间学习和一年左右的时间练习。具体的做法是这样的。
首先我们要倒着理解成为一个合格的计算机工程师需要什么样的知识体系。
既然是计算机工程师,一定要会写程序,这点大家恐怕都同意。但是大部分人即使能写一些程序,比如给你的单位算算账,处理一些业务的日志,或者设计一个控制家庭IoT的程序,却写不了几万行的大程序,比如在给你算法后写一个能够工作的人脸识别程序,因为这涉及的方方面面太多,光会写程序的人hold不住。
要想做到这一点,就需要理解搭建计算机软件的那些模块——数据结构和算法了。你可以把数据结构理解为盖房子的钢筋、门窗和大梁,把算法理解成盖房子的结构原理。没有这些,你从沙石出发,很难盖成一个大厦。
但是如果你善于利用已有的组建,懂得盖房子的原理,就可以很快设计出盖房子的流程,并且用半成品盖一个房子。于是,会写程序后,就需要了解数据结构和算法了。这就有些系统性了。
不过,即便人在设计软件时可以不受资源的限制,但是世界上任何一台真实的计算机的资源都是有限的。
因此再接下来,如果你想写一个效率较高的程序,问题又来了,你需要了解计算机能给你提供多少资源,你的程序在计算机系统结构这个框架内,应该怎么优化。
于是你就需要学习两门课——计算机的原理,以及计算机的系统结构。这样才能写出一个有效的程序。如果一个人不懂得这些知识,也能写程序,但是写出来的程序不够优化,在市场上没有竞争力。这就如同盖房子的人不懂得做预算,盖出的房子肯定是收不回成本。
好了,现在你学了一肚子的知识,其实离实用还有差距,接下来怎么用好它们呢?最简单的办法就是看一个例子,比如理解如何用计算机识别人脸,看看别人是怎么做的。于是你又需要学一门应用类的计算机课程,比如计算机视觉,学完它,你就知道计算机科学家和软件工程师是如何将一个生活中的问题,变成一个计算机可以解决的问题。当然,你学习自然语言处理、数据库,或者计算机控制等等都没有问题。总之要通过学习一门课,有切身的感受。
这些内容都学完了,恐怕至少要一年时间。在这中间,你需要不断地练习,这就如同教练告诉你打网球的技巧后,你不练习还是不会打一样。至于要练习多长时间,就看个人的天赋和悟性。
如果你要想成为顶级的工程师,10000小时的练习恐怕是必要的。但是,即使练了1万小时,也不敢保证就能成为顶级人才,这中间有很多其他的因素影响最后的结果。比如你是否能遇到一个好师父带你,是否遇到一个合适的项目让你练习,是否具有计算机思维,等等。当然,如果成为一个合格的工程师,可能1/4的时间也就够了,也就是2500小时,大约一年。
如果你想成为好的会计、律师,方法和上面描述的也差不多。
关于系统性学习有四个现象和原则要提醒你注意:
1. 要了解知识的背景和相关性。任何一个知识点都需要放到更大的环境中去理解。今天很多创业者和企业家非常如饥似渴地学习很多新概念,他们收看马云、雷军等人的每一次讲话,或者拿着德鲁克、哈耶克的书死磕。但是他们忽略了这些人讲话的场合,时间点和对象。不了解背景和环境,那些知识点就难以应用。这也是我们强调系统性学习的原因。
2. 今天的信息很多,大部分人要做的事情,不是更多地接受信息,而是选择和过滤信息,把所学的知识使用好。此外,学会使用Google查找信息以及讲述知识的视频,也非常重要,要能够在需要使用时手到擒来。千万不要把有限的脑容量用来记忆不常用的信息。
3. 学习的目的不能是为了“解除焦虑”,而是为了解决你真正遇到的问题。很多人莫名其妙地焦虑,然后学了一些热门的新知,一瞬间获得那种“哇,我懂了,我了解了新技术”的廉价快感,但是,这种快感来得快也去得快,焦虑并没有消除,甚至因为知道的东西多了更焦虑了。学习的目的应该集中在解决问题,并且为了解决问题进行深度思考,直到问题解决。
4. 系统的学习离不开讨论,这点大家学习时都有体会,就不多说了。
网友评论