我在培训机构做过5年以上的技术讲师,教过Oracle、Flex、Java、C语言、android等课程。总共带过二十几个班级(包括一些中途接手的班级),所以对IT培训行业来说相对比较了解,我来说下培训机构和学员的情况。
学生来源主要有这四种:
1、计算机专业且未工作过(包括大三的学生)
2、非计算机专业且未工作过(包括大三的学生)
3、已工作过且非计算机专业。
4、高中毕业。
这些学员有一个共同的特点:底子差。
即使是计算机专业的,也是混出来的。很多学员连二进制八进制十六进制转换之类的基础知识都不懂,更加不要说队列、链表之类的数据结构了,但这些是程序员必备的基础知识。如果是社会班,完全零基础的学员至少在50%以上,甚至100%,学校班的情况会好一些(因为有政府补助,自己不用出钱,又有机会找到工作,所以报名的学生还是蛮多的),因为通常是计算机相关专业,至少学过C语言,至少了解if…else、for语句。
然后是课程的情况。我呆过的培训机构学员在培训期间通常要培训两门课程,例如Java和C语言,每门课程大概200多课时,其中还包括60课时的实战项目(这也是我一直吐槽的,课时实在是太紧张了,我认为培训一门技术课程就足够了,这样可以掌握的扎实一点,也有利于学员以后的发展,但从市场的角度来说,两门语言就多了一种就业推荐方向,也更容易招生)。从课程设置来看就知道学习进度是很紧的,有些学校里要上一个学期的课程这边一节课就上完了,所以对于学员来说只能是知道个大概,不可能深入掌握。举个例子,I/O处理3个课时,多线程处理也是3个课时,6个课时下来,学员只知道线程和线程池是怎么创建和使用的,文件是怎么打开、读取/写入、关闭的,但这些只是最简单的用法,而且这些知识点都没有串连起来。事实上在实际工作中文件处理肯定要用到多线程,还要考虑大并发时的各种优化,但是培训时不会讲这个,因为基本上学员能把基础的用法掌握好就已经阿弥陀佛了。而实战项目是让所有学员共同完成一个项目,这个项目是以前做过的实际项目,但是项目通常比较老旧,新项目授权很难,而且资料整理也需要时间,所以通常是好几年前的项目了。项目有源代码,但是不给学员,只有最终的效果图,由学员自己根据学过的知识完成编码、测试、部署、项目进度控制等等,讲师不参与项目,只提供技术支持。从最终效果来看,学员只能说完成了这个项目的基本功能,但不会去考虑系统性能、并发、优化方案等等,所以编码质量可以说是一塌糊涂的。作为讲师来说,这么多的学员不可能都照顾的到,个别优秀的学员会指导一下他们如何处理这些问题,如果学员比较主动,例如SQL优化不懂,那讲师也会指导他怎么优化,如果你自己不问,那通常也不会去讲这个。所以说实战项目阶段能够比较清楚学员的知识掌握情况,有些很差的学员连一个很小很简单的功能都做不出来,而好的主动的学员则能学到更多有用的知识。
再来说下班级的情况。一个班通常来说在20-30人左右,经过5个月左右的培训,我认为能够去找工作的大概在10%左右,绝对不超过20%(实际上肯定不止,有些班级甚至是100%就业,因为有些学员做的是不用编码的工作)。后来简单去了解了一下以前学员的情况:3年后还在IT这行的应该是不到50%了,有些虽然还在这行业,但做的是比较边缘的事情,还有些是做测试,真正还在编码的应该是不足5%了。
最后总结一下培训出来的学员情况。精英不会来培训,因为他们可以很容易找工作,来培训的人通常是找不到工作的和想改行的。而能够在前10%里的人基本上是逻辑思维能力比较好的,头脑聪明,反应也快,简单来说就是悟性好。那种头脑一般,但学习很努力的人通常处在班级中游。而且还有一点比较有意思,那就是学历高的通常培训成绩越好,这点来看其实学历还是有用的,因为他们的底子更好,悟性高,所以学东西更快。
而公司也存在几种情况。大型公司要的是精英,BAT之类的就不用去想了。中型公司也有难度,社招通常是招有工作经验的,校招一般要挑学历和学校。而小公司要控制成本,最好一个人能干几个人的活,得是个多面手,所以通常招有经验的,而且万一招个差的进去,代码里埋一堆的坑,时不时爆一个谁也受不了,就算招进去了估计也呆不久。
那么培训出来的学员怎么就业呢?我觉得分两部分来。
1、从学员本身来看,找准自身的定位。几个月培训下来自己总应该清楚自己的情况,如果你不适合写代码,那可以考虑测试、运维、产品等职位,不是非得写代码的,否则代码一堆简单bug,让别人每天鄙视,最终还是混不下去的。
2、从公司来看,如果要写代码的话,我觉得外包公司相对比较适合。因为外包公司对技术要求不高,而且通常会有一个经验丰富的人带,对于新人来说是个很好的机会,因为你可以从最简单的入手,不懂有人可以问,而且外包通常对交付物的质量要求比较高,这对代码质量的提高是有很大的帮助的。但是外包公司也有不好的地方,他们的开发效率不高,使用的技术可能比较老旧,技术水平提升慢,文档比较多,可能需要外语等等,因此你想走技术路线的话最好不要超过三年,三年之内该学的东西也差不多学完了。
我目前在一家500人规模的公司担任架构师,也经常面试一些应聘者,2年前面试过一批培训机构出来的学员,最终留下了两个,现在他们发展的很好,每次评价都不错(至少有B级),他们就是属于悟性好的那种,后来也有应聘测试岗位并通过面试的,目前发展都挺好。后来随着公司发展壮大,改成只招985和211的本科或硕士了,这几个人里有比较优秀的,但也有评价不怎么样的(C级)。
培训机构出来的学员在面试时可能会有点吃亏,因为大部分的学员不够优秀,拉低了企业和面试官的印象分,但并不代表公司不要培训机构出来的程序员。
如果你希望成为一名程序员,我提几点建议:
1、找一家比较靠谱的培训机构,而且必须是好的培训老师。老师都不好学生能好到哪里去。
2、你可以成为班里的前两名。
3、多问老师一些实际工作中会碰到的问题。
4、多看一些面试的问题,例如BAT的面试题,不懂就问,搞懂它。
5、培训期间通常都会有实战项目,不要只是满足于功能的实现,这对面试没有任何帮助,而是技术难点,怎么攻克,并且需要考虑实际情况,例如大并发、优化方案等等,即使你没有实现,但知道怎么去做。
唠唠叨叨了很多,对于一个从培训机构出来从讲师重新做回程序员的码农来说,感触良多,希望以上说的这些对你有用。
最后回答这个问题,为什么公司不要培训机构出来的程序员?答:或许是你还不够优秀。