自学编程 vs 参加培训

作为一名高校计算机专业教师,经常有人向我询问:

我是非计算机专业的,想找一份程序员的工作,是不是应该报一个培训班去学?

我自己除了在入门阶段上过两个电脑培训班(全部都在上个世纪九十年代)之外,后来就再没参加过,我觉得根本就没这必要,自学足矣。

并且我对现在以赚钱为最高目的的、鱼龙混杂、弄虚作假成风的IT就业培训行业印象并不好,所以我总趋向于不推荐学生参加培训。特别是计算机专业的学生,如果我听到计算机专业的学生在毕业之前还需要参加一个软件培训班才能找到工作,那我一定会深深地叹息……

但是随着问类似问题的人越来越多,我也开始日益认真地思索“通过参加培训班来学习软件技术”这件事情,是不是真的不应该推荐?

本文就是我对这个问题思索的一点结果。

在这里,我不讨论IT培训机构存在的必要性,这都是一个产业了,它存在的必要性还用废话吗?

我关注的是从学习者角度而言,“自学”与“参加培训”这两种方式的对比和选择策略。

首先明确一点,我认为,对于计算机专业的学生,如果还需要参加培训班才能找到工作,那么我可以肯定这个学生的四年时光是被浪费了,不应该这样的。不要把责任全推到外部环境上,哪怕学校再差,周围人再怎么不爱学习,只要真的认真学了,断不至于惨到不参加培训班就找不到工作的境地。

那么,对于非计算机专业的学生,应不应该参加培训呢?要知道,以就业为目的的IT培训,学费通常高达数万,可一点也不便宜啊。

我的回答是:是不是需要参加培训,这是要看人的。

有些人不必花这个钱,通过自学完全可以找到工作,而有些人,参加相应培训是合适的。

一、哪些人可以走自学之路而不用去报培训班呢?

我总结了一下,适合于自学的人应该具备四个前提条件:

(1)有足够的时间,不急着马上找工作。比如还是在校的一、二年级学生,或者现在有工作有饭吃,只不过是想转行跳到IT行业。

这个时间段的长短,我个人认为至少一年,用两年的时间自学比较合适。

(2)是一个有着较强的自控能力的人,能坚持长期的自学。

就我的观察,能坚持自学的人在人群中所占的比例并不高,我觉得可能不会超过四分之一。

(3)具有高中以上学历,更具体地说,掌握了高中数学所介绍的内容,同时,具备基础的英文阅读能力。不具备高中数学基础,很多技术你学不会,而看不懂英文,会给你的学习带来巨大的障碍,甚至难以为继.

(4)具备基本的物质条件和学习环境,比如你不至于穷到买不起电脑买不起书,上不了网……

如果你满足以上条件,那么,你完全可以不上培训班,也能靠自学学出来。

不满足以上条件的,则可以考虑参加培训班。

下面我展开来说一说。

二、学习时间长短带来的影响

上培训班的一大好处就是“省时间”。

培训机构通常会依据当前技术的发展现状、业界的人才需求变化情况,动态地调整教学内容,构建出一个比较完整的就业培训体系,能够让你在短短数月之内,带你入门。

作为一名写了二十多年代码,参加过大大小小的一堆项目,学过一打以上的各种编程语言或技术的老码农来说,我认为编程中充满了套路,只要能掌握这些套路,把这些套路用熟,应付中低层次的软件开发工作是不成问题的。

而在传授开发套路这块,培训机构是比较高效的,只要你选的是靠谱的培训机构,人别太笨,基础别太差,培训老师手把手教你,经过几个月的强化训练,多数编程套路都能学会。

那培训机构的问题在哪里呢?

问题也出在 “省时间”上。

为了节约时间,培训机构必须要尽可能高效地将大量的知识“灌入”学员的大脑,同时必须通过达到一定强度的编程训练,让学员掌握那些开发套路。

认知科学的研究成果表明,知识的消化与吸收,职业技能的学习与精通,本质上是在大脑神经元之间建立连接,重塑大脑结构的过程,这个过程的时间可以缩短,但不能无限地缩短。另外,不同的人,拥有不同的背景和基础,在学习与掌握相同的知识与职业技能时,所花的时间是不一样的。

但培训机构是不管这些的,它的目的是赚钱,先把学生招进来,然后向他们的大脑中以尽可能短的时间塞入尽可能多的东西,只要能糊弄住面试官,让学员能找到一份工作就行了。

所以下面这种现象是必然会出现的:

同一班的学员中,那些原先有一定基础的,学习与消化知识能力较强的,多半能够在培训期间构建出自己的知识与技能体系,他大脑中的知识己经构成了一个整体,知识组织得井井有条:


另外一些学员,短时间内被灌入过多的知识,来不及组织和消化,他的大脑中知识就变成了这样:


很多开发高手都认为:

编程是一种技能,是一种使用特定工具去解决各种问题的能力。

多数人都能成为一名合格的程序员,但能成为优秀程序员的人数并不多,这里面的关键就在于分析问题与解决各种问题的能力存在着巨大的差异。

这种分析问题与解决各种问题能力,并非天生,而是需要后天努力训练得来。

使用刻意练习的方法,能帮助你有效地在特定的时间段内熟练地掌握特定工具的用法,会用特定的技术去解决己知领域的己知问题,但面对变化了的,真实的复杂的实际问题时,单纯的套路是没法解决问题的。

好的培训班对于培养那些并不需要太多创造力的初级程序员(即我们所说的“搬砖”程序员)是有效的,它们设计了一整套比较完整的、符合当下业界实际需求的培训体系统,并且有意无意地也应用了一些教育学的研究成果,它们其实是在传授一些开发模式和编程套路,它们的目的,就是在比较短的时间内,将这些开发模式与套路灌入学生大脑,让其能机械式地反应就行了。

不少培训班的训练模式,有点类似于应付高考。

回想一下,为应付高考,在高中是怎么干的?

分析高考试题类型,为每种类型总结出相应的解题套路和技巧,然后反复训练,以便能达到熟练的程度……

培训班的方法其实与之一致,只不过其学习成果的验收方法不是全国统一的高考,而是由各用人单位组织的“单独考试”罢了,培训班的成效,以其学员能通过多牛企业的面试,拿到多高工资的Offer为衡量标准。

所以,培训班的大问题,就是它只教授工具与技术的具体使用方法,介绍一些典型的套路,但却无法或很难提升学员的分析问题和解决问题的能力,因为这种能力的提升,是无法短期速成的。

对于学员本身的长远成长,以盈利为目的的IT就业培训班其实漠不关心,这是由资本的本质所决定的。

对此,上培训班的学员自己必须心中有数。

三、学习者个人因素带来的影响

前面说过,自控能力强的人在人群中所占的比例不高,很多人都是克服不了人性的弱点——好逸恶劳,导致学习活动不能坚持,三天打鱼两天晒网,……,对于这些人,需要外部环境来“约束”和“强制”他们学习,只要经济条件许可,参加培训班是一种可行的路。

道理很简单:

培训班营造了一个集体学习的大环境,同时,学员花了五位数的钱,难道不肉痛?

那还不好好学!不然,那钱不白花了吗?

有了这个环境,有了这种怕损失的心理,学习自然不会偷懒,只要时间与精力投入了,学习总会有效果的。

对于那些意志坚定有毅力的人来说,其学习动力来自于内,根本就不需要有这样的一个外部强制力量,就能主动地认真地学习。

这种人,走自学之路是推荐的。

但同时要知道,决定走自学之路的人,面临的一个主要问题是:很容易走错路,走弯路,掉坑里……

所幸的是这个问题在互联网时代被大大的缓解。最近几年兴起“知识变现”,其特征就是可以用钱来买知识,买时间。

你只要愿意为学习投入,花必要的费用,就能得到被其他人整理好的精炼过的知识,就能了解他人经过多年总结而得到的经验,从而节省大量的时间,提高了学习效率。

比如我个人就在罗胖的得到App上花费了上千元订阅吴军的《硅谷来信》、王煜全的《前哨》、万维钢的《精英日课》等专栏,从这些每天推送的音频中,我获得了很多有价值的信息,一点也不亏。

又比如知乎的Live也是汲取、传播与分享知识的双赢平台,我第一次办的Live——《如何自学计算机专业课程》,第二次办的Live——《如何自学编程》,都是我总结二十年开发和自学经验,十多年教学经验而得到的,我相信听众只需要认真地听听这些Live,就能帮助听众少走很多弯路,有效地提升自学效率。

其实各种学习资源,互联网上还有好多,比如国内外名校的MOOC,都是可以免费去学的,还有诸如知乎、StackOverflow、简书等网站,上面都沉淀了大量的他人的知识与经验,你还可以通过互联网直接向特定领域的牛人请教,比如知乎、微博都开通了付费问答,花些钱,就能得到那些在特定领域经验丰富的人的建议,向这些“老师”请教的机会,以前是不存在的,……,

有这么丰富的资源,为什么不去主动利用这些资源来提升自学的效率呢?

所以,新的时代,我们学习观点要改变:

为知识花钱,为学习花钱,为效率花钱,这是花钱的最好方式。

花钱其实是省钱,并且最终能帮你赚钱。

这看上去很俗,但其实就是这个道理。

只要你能善用互联网上的各种资源,你会发现,通过自学入门并不会比通过培训班入门慢多少,而你在这个过程中所培养出来的自学技能,将让你受益终身!

四、从更高更大的视角看自学与培训

不管自学也好,参加培训班也好,最终都是为了培养软件开发的职业技能。

现在让我们回归问题的本质——软件开发。

软件开发实际上分为两个大的阶段:

1 问题定义、分析与设计阶段,这是最需要智商、创造力和经验的阶段,真正的开发高手,就是在这一阶段体现出远超普通人的水平,而在这一阶段所需要的能力,对不起,培训班教不出来,也无法速成,只能靠人自己的努力,慢慢地培养和增强。

2 使用各种技术与工具,将第一阶段的成果实现出来。这一块就比较机械了,多数人经过训练都能掌握,培训班在这一块的效率是很高效的,它们多半能在较短的时间内,教会学员特定编程语言(比如Python)特定工具(比如Git)与特定技术的使用(比如Spring MVC),并且传授给他们一些开发的“套路”(比如分层架构与设计模式),从而将学员成功地培养成为一个能够“搬砖”的软件工人,即初级程序员。

由于目前软件行业人才需求量大,因此,这些只能搬砖的初级程序员是很容易找到一份工作的,这也就是为什么培训班多半会收学生五位数的学费,而学生也愿意支付的根本原因。

所以,上培训班,实际上是花钱让别人引你入门,成为一名初级程序员多半问题不大,经过三五年的工作训练,初级程序员多数能成为中级程序员,但到了这个级别,不少人的水平就开始停滞在这个水平上,徘徊若干年,直到遇到“职业危机”,主动或被动地下岗、转岗,成为“程序员是吃青春饭”这一观点的论据。

要想爬出这个“技术青春饭”的陷阱,是否能从中级程序员进入高级甚至一流程序员的这一层次是关键。

如果你选择通过培训入门,那么一定要牢记,培训班只能帮助你走出职业生涯的第一步,并且这一步它还要了你一大笔钱,这是你必须付出的代价。

从初级到中级程序员,你所在公司可能还会通过一些给新人配备导师啊,入职培训、在岗培训等方式给与支持与帮助,再往上走,多半就只能靠自己自学了。如果你在的公司不提供这些帮助员工成长的机制,那么,甚至从初级到中级的成长之路,也得靠你自己。

由此可以看到,自学其实是个人成长的最主要方式和手段

如果你具备我在前面介绍过的四个前提条件,那么在入门初期(其成果是成长为一名初级程序员),如果你不愿意花上培训班这笔钱,是完全可以通过自学达到相同的目的,当然,时间要长两到三倍。

在培训班学习效率是比较高的,前面也说过,这里再重复一下:一方面是培训机构也都付出了相应的努力,让自己的培训课程体系尽可能地高效,二是有一个集体的强制学习的环境,这对于那些自控力不强的人来说,外界给与一定的强制性是必须的。三是学员花了较多的钱,如果家境不太好的,这些钱可能还是借来的,这也是一种强大的敦促努力学习的心理因素。

三大因素作用下,培训班的作用立竿见影。

所以必须承认培训班具有这些好处。

但也必须明确,培训班的好处大都是短期的,用不了多久就会消散。

自学就不一样了,虽然在初期,要入门成为一名初级程序员,可能花比培训班长两到三倍的时间,但正是这种较慢的自学过程,有效地锻炼了你的自学能力,而这种能力,对于你成长为中级和高级程序员来说,是极为重要的。

你不妨看看周围,没有一个技术牛人不拥有很强的学习能力,各行各业都是如此。

所以,对于想节约时间的,可以报个培训班入门,找到一份初级程序员的工作多半问题不大。

但从长远来看,以成长为高级程序员为目标,初期通过自学入门,和通过培训班入门,后者并不会比前者更节省时间。

好了,写了这么多,我相信我己经把问题讲清楚了,最后给一个流程图,帮助你在“自学”还是“培训”中作出选择:

最后,祝大家学习进步!

86 条评论