(注:本文曾发表于《程序员》2015.11.B期)
现在,像达内、华清远见、国嵌、北大青鸟、传播智客等等IT培训机构很多,为尚未毕业的大学生、毕业了一时找不到工作的大学生、工作后想转行的再就业者提供了一个掌握新技能的机会,通过三个月或半年或更久的培训,你就可以掌握某一种技能,比如Android开发、Java Web开发、iOS开发、嵌入式Linux开发,然后,没然后了吗……
Sorry,然后还是有的,只不过,“然后”并不是像培训机构的销售代表频频给你通电话时宣传的那样光明罢了。有的机构会推荐你就业直到你彻底失望他们推荐的单位,有的机构会放你出去闯荡江湖四处碰壁……形式不一,但,一段痛苦的旅程从此开始了,这倒是真的。
很多单位歧视培训机构毕业的学员,你所在的单位是这样吗?或者你从IT培训机构毕业后,找工作时被鄙视了吗?
为了弄明白为什么IT培训机构出来的程序员在找工作时经常遭遇不平等对待,我们需要弄明白“教育”和“培训”的差别。
教育和培训
大致上讲,我们所说的“教育”,指的是掌握一般性的原理与技巧的过程;而我们所说的“培训”,不过是学会某种特定技能的过程。
上面是温伯格在《程序开发心理学》中说到的,符合大多数人对“教育”和“培训”的理解。
你可以通过培训机构学会理发、做饭、修汽车、写代码、做蛋糕,这没什么稀奇的,当我们接受培训时,就是为了某项技能而去的,不是吗?我去蓝翔,难道不是为了开挖掘机吗?
通常我们认为培训机构(学校)是学习某种不太复杂的谋生技能的摇篮。这种技能还有一个特点,就是相对稳定、变化不是特别频繁,能够在相当长一段时间内保持基本的稳定性。所以,一旦你获得了这项技能,就可以靠它吃饭吃上一阵子,一年半载,三年五年,十年八年,都有可能。
而教育,我们通常认为是一项基础性的工作,重知识,重原理,周期长,见效慢,与社会脱节,有时还能把人变傻(注意我不是讽刺现行教育制度,也不是诋毁我们伟大的大学教育)。虽然如此,很多IT公司的基础部门还是被受过正规大学教育的朋友们占据了重要岗位。因为大家普遍认为,虽然学校教育严重脱离社会现实,但名牌大学的学生的智力水平、学习能力,平均来看还是高于未能考上大学的中学生,更适合于从事某种对智力、学习能力有些特别要求的技术岗位。
没错,程序员正是这样的岗位。程序员的平均智力水平和学习能力高于大部分的其它行业从业者。
然而,教育和培训的差别,并不是关键。关键是,出于某种原因,面试官或公司主管对出身“培训机构”的人有偏见。为了说明这一点,我们先要看看程序员需要的特殊能力。
程序员需要的特殊能力
成为一个合格的程序员,需要以下“特殊”能力:
自知之明
自我学习
努力
看起来没什么出奇之处,也许你会觉得一个程序员最重要的能力不是上面三项,没关系,知否知否,应是绿肥红瘦,随便怎么看,横看成岭侧成峰,一千个观众就有一千个哈姆雷特,嗯,开启口水模式……这里省略500字……
大家公认程序员从事的是烧脑性工作,行业发展日新月异,各种新语言新技术新框架新概念层出不穷,需要程序员时刻保持归零的学习心态,持续不断地保持学习维持竞争能力和价值。所以,我也是从这个角度出发,选择了前面提到的三点,实际上这三点指向的是“学习之道”。
自知之明
我们要了解自己拥有什么、缺乏什么,然后才能开始学习。
通过不断地总结、回顾自己做过的事情,我们就可以慢慢了解自己的能力边界。哪些事情做好了,好在哪里,为什么好在那里而不是别处,是由你自身的哪种行为、才干、能力决定的?哪些事情做得不好,坏在哪里,为什么坏在那个点而不是其它的点,改善你自身的哪种行为或能力可以改变事情的走向,还是说你没什么能改变的那就是你的局限?
当你了解了自己,就能发现自己应该做什么,就能决定自己的学习方向,而不是盲目地把自己交付给别人(学校、老师、家长、培训机构),因为,没有什么人真的可以为你负责,能为你负责的,只有你自己。
当然,自知是最难的事,也不是一朝一夕的事,需要不断的自省和内视才可以做到。
自我学习
知名的教育专家林格有两本非常著名的书,《教育是没有用的》和《学习是不需要教的》。林格有一个非常核心的观点:学习能力是人与生俱来的能力,是人之天赋,是不需要教的,但这种能力会随着年龄的增长和家庭教育、学校教育的误导而萎缩或消失,所以,教育的方向就是营造一个环境,让人自己发现自己的学习能力。
六祖慧能一朝顿悟传承衣钵,佛性自在每人心中。只不过,世人多如神秀,认为“身是菩提树,心如明镜台,时时勤拂拭,勿使惹尘埃”,一定要借助外力和各种各样的清规戒律,方可保持灵台清明,最终获得某种修行。这种扭曲了教育本质的说法、做法大行其道,导致中学教育(大学相对自由)重知识、重规矩、重技能而轻发现、轻唤醒、轻因材施教、轻有教无类,最终扼杀了学生的自我学习能力。所以,很多人不是天生不会学习,而是在成长过程中在家庭、学校、社会的各种外力撕扯中慢慢丧失了自我学习能力。更甚之,多数人不自知这种能力的丧失。
然而,程序员尤其需要自我学习能力。
学校会教你操作系统原理,会教你计算机组成原理,会教你算法,会教你C语言,会教你Java,各种知识都会教你。然而你到工作中,能不能用你学到的知识解决问题,实在是个未知数。
培训机构会教你怎么写Java代码,怎么安装某个IDE,怎么完成一个个人博客或购物车之类的小项目。然而,你是在框好的架子下被动地按照老师的要求“完成”了这些事。到了工作中,面对巨大的未知和陌生的项目,你能不能举一反三灵活运用,充满了未知。
一个程序员能不能自己学会一门技术、能不能自己解决一个问题特别重要。因为,很少有主管会手把手的教会你编程和设计的实际技巧,也很少有主管会大发慈悲把你送去研习班学习工作需要的技能,在一个现实的环境里,一切都要靠你自己。假如你自己不能独立习得某项必须的技术,真没有人能帮得上你。假如你自己不能独立解决问题,真没有人能始终拉扯着你。这也正合梁漱溟说的话:“任何一个人的学问成就,都是出于自学。学校教育不过给学生一个开端,使他更容易自学而已。青年于此,不可不勉。”
很多人轻视培训机构,是认为培训机构的老师,多数脱产,没有丰富的一线工程实践,是业余选手,而这些“业余选手”却要通过短短的一期培训来为社会培养“专业选手”,这基本是一个笑话。即便我们能举出不少从培训机构出来的优秀选手,那也只能说明,这个选手本身具有很好的学习能力。
如果一个人意识到了自己还具备自我学习能力,那他完全没必要去培训机构浪费动辄六七千一两万的学费——他完全可以自己学到必须的知识和技能,假如他真有兴趣的话。
而要检验你是否还有自我学习能力,先不要去培训机构,自己找本讲编程的书、找台电脑、连上网,花一两个月时间就能搞明白你是否适合做一个程序员。一旦你通过了这种自我学习实验,那时再挑一个培训机构系统地学习某条技术栈不迟。
言而总之,你能不能成为合格的或优秀的程序员,取决于自我学习能力,而不是参加过专业培训。所以,很多公司在招募程序员时,不太愿意考虑培训机构毕业的学员,因为在面试官的心里,觉得如果你有能力,自己就可以学会,完全没必要去培训机构,你接受了培训,他反倒认为你可能缺乏自我学习能力(以及对技术的兴趣),担心你不能胜任将来的工作,他太了解了,你学的那点东西根本不够用,还有很多新东西等着你学,所以,他不愿意考虑你。
而对于知名大学的毕业生,虽然可能和你一样是一张白纸,但别人会以为,能进得了大学当得了学霸,起码学习能力没问题的概率高一些。
努力
有一句话是这么说的,“以大多数人的努力程度之低,根本还轮不到拼天赋”。其实,努力也是一种天赋。为什么有的人明知努力可以改变生活,可他还是不努力呢?因为,臣妾做不到啊!为什么做不到,因为他缺乏“勤奋”、“努力”之类的天赋和才干。真的,勤奋、努力的人,多数是生就的,少数是被后妈(生活)逼的。
程序员白天要上班,晚上偶尔还要加个班,自由时间少,而新技术很多,什么时候去学呢?你以为实际的项目一定可以让你锻炼新技术吗?要知道,大部分的项目在技术选型时,会考虑技术的成熟度和团队的技术储备,很少有冒险采用大家都不熟悉的技术的,不可控因素太多,风险太大,项目失败的概率很高。那这样的话,你什么时间丰富自己呢?
八小时之内是现在,八小时之外是将来。你可以用的,就是你的业余时间了。你看,人家都在打游戏、看电视、挎着女伴的胳膊去速8,你还要苦哈哈的学习,如果你没有“努力”这种天赋,是很难做到的。
所以,很多面试官在面对培训机构毕业的人选时,也会有诸如“如果你有自我学习能力并且努力,其实没必要上什么培训班,完全可以自己搞定”之类的想法,而你上了培训班,是不是反过来证明你不够努力咧……然后,他又会想,是不是因为你没自知之明不知道自己要干啥才被忽悠到培训机构去交学费了呢……也许,他还会想,是不是因为你对技术其实不感兴趣只是想谋个事儿干呢……
额,你看,面无表情之下,其实各种想法如同暗流漩涡,澎湃不息……所以,最后,你可能就只好“回去等消息”了……
不知道说了这么多,你是否明白了个中原因——面试官会觉得培训出来的学员,可能对技术没有那么浓厚的兴趣、缺乏足够强的自我学习能力也不能很好的自律和努力。但在我的观念里,其实应该这么看待IT培训机构的学员:他只是找了一个类似学校的地方系统学了一些东西,和别人并无什么不同,如果他对技术有兴趣,有自我学习能力,一样可以做一个优秀的程序员。