今天这篇文章为蜗牛创想CEO邓强老师对内的全员邮件,在公司成立7周年这个特殊的日子,邓老师向大家分享了蜗牛创想近年来在探寻职业教育本质上的一些思考和体会。
今天这篇文章为蜗牛创想CEO邓强老师对内的全员邮件,在公司成立7周年这个特殊的日子,邓老师向大家分享了蜗牛创想近年来在探寻职业教育本质上的一些思考和体会。
各位同事,大家好!
今天,是蜗牛创想成立7周年的日子,作为一名讲师很想跟大家谈一谈关于职业教育这个话题,分享一些我个人的思考。我是一名具备13年教学经验的讲师,现在同样在给学生上课。2009年以来,我从未离开讲台半步,我热爱这份事业,热爱这三尺讲台,它不仅带给了我成就与荣耀,也让我收获了金钱与事业。“桃李满天下,雨露润春华”,相信每一个师者,一定也可以收获桃李满天下的成就与荣耀。
公司旗下蜗牛学苑作为一家IT教育机构,我们究竟应该培养什么样的学生?我们究竟应该怎样去培养学生?另外一个层面,作为蜗牛学苑占据着半数人员规模最大的教学团队,我们究竟需要什么样的老师?怎样才算是一名好老师?这四个问题,我相信是任何一家教培机构或者各类学校都想要明白的问题,但是往往该问题又很难回答清楚。
不瞒大家讲,其实我一直对当今中国的教育现状有些意见,尤其是大学教育,存在的问题很多,这方面的情况我就不细聊了,我们也改变不了,但这并不妨碍我爱国。正是基于我对当前大学教育的认识,蜗牛创想一直想自己办一所大学。但是这也是一桩大买卖,而且受到的约束太多,只要体制不改变,也许我们去办一所大学也最终会变成我们自己最讨厌的样子,这些今天咱们都不去谈了。换个角度去想,大学教育要不出问题,也许就没有我们这类职业教育生存的空间了,某个方面来说,我们得感谢大学。今天咱们就深层次的聊聊蜗牛学苑这些年,在IT职业教育这个领域的一些思考和经验。
首先,让我们一起来思考两个问题。
问题一:大学教育,三年或者四年,花费至少接近10万?都没能让你学会一门手艺,那为什么职业培训短短几个月的时间(以IT行业为例,学费大概2万左右),就能让你学会一门手艺呢?
问题二:为什么一名大学生,花费了10万块钱,连工作都找不到,但是却没有学生投诉这所大学,它不给我安排工作。但是,一名培训机构的学生,花费了2万块钱的学费(加上生活费住宿费什么的应该也不会超过3万),培训结束后找不到工作,就要控诉这家培训机构呢?
你们觉得这对我们这样的培训机构公平吗?显然不公平,为什么会这样呢?从某个层面来说,大学老师都是高学历、专家教授一大堆。而一家培训机构,显然师资排面没法跟一所大学比,甚至一所高职院校可能都比不过,但却做到了这些人做不到的事。有些大学就业率账面数据不错,但是大家不要忘记了,有多少学生是对口专业就业的?而我们这样的机构,学生是否全部对口专业就业?所有这些现象,总结起来就两个字:目标。就像我开篇的四个问题一样,核心其实也是在问:目标在哪里?
一名高中生苦熬12年为了上大学的目标是什么?一名大学生到蜗牛学苑来培训的目标是什么?在我看来,为什么上大学,很多人是不知道的,因为这就是一个过程,我得上大学,不上不行,仅此而已。一名大学生毕业了想做什么?不知道。就像你问一名小学生,为什么要上初中一样,这能有什么为什么呢?因为就是得上而已。那么你再问一名初中生,为什么要念高中?他的目标很明确,为了能上大学。但是又有多少人继续问,为什么要上大学?如果问了,答案也都差不多,因为上了大学才能找到好工作,那么你不妨继续再问,什么样的工作是好工作?我相信,没有几个人能真正回答出来。
但是我们换个场景来看,你再问问来蜗牛学苑学习的学生,我相信他们基本能够回答清楚这几个问题。比如为什么要上大学?因为企业找工作要看学历,我没有办法,必须要有学历,要不然连门都进不了。比如为什么要搞IT?因为我喜欢搞IT,因为IT行业工资高,因为我之前的工作连女朋友都找不到…… 。什么样的工作是好工作?只要能够坐在办公室吹空调,还能有时间谈恋爱,并且工资收入也不低…… 。这些答案在参加培训的学生心中,无比清晰。
也正因为抱着很清楚的目标而来,所以如果没有达成学生的目标,自然是非常不爽的(就像一名大学生的目标是拿到毕业证,顺便长大,只要长大了,毕业证拿到了,基本上也就不责怪学校了,也许还能在大学谈场恋爱,把游戏玩嗨,岂不美滋滋)。所以,我们一直强调,做培训,是教给学生一门手艺,让他们找到满意的工作,这是满足了基本目标。在此基础之上,如果能够帮助学生夯实基本功,让他们在未来的职业生涯中长期受益,那便功德无量了。或者我们退一万步说,确实学生连找到工作这个基本目标都没能达成,但是只要我们老师认真帮助和指导他,跟学生交朋友,一切都从一名老师的责任出发,跟学生敞开心扉,坦诚相待,他为什么还要控诉你呢?
其实这一点,我们也可以和大学做一个对比,非常简单的对比,比如你的大学老师能在期末的时候叫出你的名字来不?很多不能,这只能说明老师没用心(当然,那种一个学期都不知道老师长啥样的学生就算了)。我们的老师能在一两周之内叫出所有学生的名字不?能,说明你用心了。
即使你用心了,还会不会有一些“不识好歹”的学生啊?确实是有的,但是毕竟是少数,作为一名老师,不能因为这极少数的奇葩和不懂感恩,而放弃我们作为老师的追求和信仰。我们完全没有必要为了让所有学生都满意而放弃作为一名老师的责任和底线,那必然没有办法成为一名好老师。反过来,我们也没有必要一味找学生的问题,觉得一切都是学生的错,毕竟我们是教育机构,学生如果什么都好了,也用不上我们这儿来了是不是?
说了这么多,那么回到我开篇提到的4个问题上来,我先简明总结一下我的答案:
问题一:我们究竟应该培养什么样的学生?
答:作为一家职业教育机构,我们应该培养具备动手能力和解决实际问题能力的学生;我们应该培养对工作保持敬畏,对技术充满好奇的学生;我们应该培养企业需要并能为企业创造价值的学生。
问题二:我们究竟应该怎样去培养学生?
答:PBET(Project-Based Experiential Training),基于项目的体验式培训,以项目为主线、以训练为核心、以思路为支撑、以实战为手段,以满足企业用人需求甚至超越用人需求为最终目标。
问题三:我们究竟需要什么样的老师?
答:蜗牛学苑需要热爱教育的老师,需要崇尚技术的老师,需要认真负责的老师,需要有职业信仰的老师,需要不惧怕权威的老师,需要内心强大的老师,需要追求卓越的老师,需要坚持原则的老师,需要与学生做朋友的老师。我们要的不多,仅仅是一名具备人格魅力的老师而已。我们要的也不少,因为当你不足够牛逼的时候,你很难做到。
问题四:怎样才算是一名好老师?
答:作为一名好老师,他的灵魂是自由的。
接下来,我从一些更加细节的方面,来阐述一下我对教学的理解(教学是指教与学两个层面)。
13年前,我怀着无比的热情投入到教育行业,成为一名全职的讲师,我觉得这样的工作才是我所追求的,我喜欢这份工作,我可以一个月上课28天(平时给学生上课,周末给在职人员上课),没有周末没有休息乐此不疲,这种感觉痛并快乐着。痛的是活生生把一个脑力劳动变成了干体力活,快乐的是有越来越多的学生认可我,并且那一个忙碌的月份,我拿到自毕业以来最高的薪水:2万块。就像很多人喜欢玩游戏一样,其核心是什么?及时的反馈,其实当老师也一样,你可以及时得到反馈。学生是否认可你,是否尊重你,是否得到更高的评分,学生是否学会了,是否爱学习,是否找到好工作了,这些反馈都是比较及时的。我们那时候几个老师就互相比,看每个月的调查问卷,谁的评分最高,这些都是及时的反馈。
但是那时候,由于教学经验并不那么丰富,也没有太多对于教学的思考,只是一门心思想着怎么样把课备好,把技术提升好,把细节理顺,把知识给学生讲清楚,多举一些案例,多理论联系实际,把企业的真实经验多去分享。慢慢地形成了自己的风格,积累了一些经验,那么我自己的风格是什么呢?两个字:严谨。到现在,这个风格也没有变,但是却被很多同事理解为了“严格、严厉”,这是对我风格的误解。当然,我们提倡老师要有不同的风格,比如风趣幽默、细致入微、不苟言笑、侃侃而谈、善于提问和引导、一丝不苟、跟学生打成一片等等。亦或者,你是一个杂风,啥风格都有点,但是不彻底,也是一种风格。我想无论如何,总是要慢慢形成自己的风格,为人师者,总要有自己一些坚持的东西吧。
大约是在2012年夏天的某个夜晚,那一天应该是7月7号,我清晰地记得我们后来为此次闲扯取了个装逼的名字:Double Seven,我跟我的前同事们相聚上海,我们探讨了很多,直到天亮。我们几个前东家校长没有谈论太多怎么招生怎么赚钱怎么管理的问题,聊得最多的话题:我们到底应该怎么培养学生。大致的观点有以下几种。
教练式培训。老师应该是一个教练,先甩一个任务给你,给你一些简单的提示,做完了根据情况来决定老师应该给学生讲什么。而不是一来就咔咔一顿讲,学生听得一愣一愣的,最后讲了一个小时,学生学会了20分钟,纯粹浪费时间。
终生学生。我们现在有这么多存量学生,应该要好好利用起来,这都是我们的核心竞争力,我们的财富。所以,我们不仅要为在读学生提供服务,我们还应该要为毕业学员提供更多的服务。
学生才是主体,不能把压力全部给老师,压力应该给学生。我发现我们的老师现在特别累,反而有时候感觉学生还比较闲,这肯定不对啊,这事儿整反了。是学生要学东西,不是老师学东西,老师怎么能比学生更辛苦呢。
培养精品而不是万金油。我们现在的课程,过于繁杂,很多内容杂而不精,表面上看是万金油啥都会点,但是真正去到企业以后扛不了大旗。所以课程体系有问题,不能这么设计,而是要跟上企业需求,培养企业最急需的人才,甚至专注于某个领域做深做透就行。
我认为要培养好学生,首先要培养好老师,老师应该是“富有魅力具备独立思考能力的灵魂工程师”。当老师做到这样的高度了,学生会被你吸引,用老师的人格魅力去引导学生、启发学生。
我的观点主要是要培养好学生,不能过多为了传递知识,尤其技能培训,应该要让学生多做实战项目,多去体验这个过程,最好是能把企业的工作过程全部放到教学中来,让学生完整体验这个过程,去了企业以后,面对各种问题,他都不慌,因为很多问题早就心里有数了。
大家当时谈得不亦乐乎,聊到兴起时,我们还一度想着,怎样能够设计一个平台来颠覆传统培训模式。为此,我们还设计了个网页的原型(现在还在我电脑上,确实现在看起来过于丑陋,就不给大家看了)。我们还制作了一份商业计划书,这个可以截图给大家看看,稍微没有那么丑,但是就是一些文字内容而已。
后来怎样了?结果便是不了了之。每个人都在工作岗位上忙碌,但是回到工作岗位上,IT帮的事、培养学生的事,我确实开始认真思考这些问题了。我已经做了3年时间的讲师了,有些问题必须要思考了。然后我看到了PBL(Problem-Based Learning,问题驱动的学习),我觉得这个理念跟我想到的项目驱动的理念关联度很高,但是又不完全一样。按照我的想法,Problem还是不够,问题还是一个一个独立的点,要完全模拟企业的场景,只能是项目,为了让学生体验到这个过程,必须要定义清楚什么是体验。
于是,我造了一个词:PBET,(Project-Based Experiential Training,基于项目的体验式培训),这个词具体是哪一年造出来的,我有点记不清楚了,大约是在2013年吧)。这个理念的灵感也是来源于Double Seven的那个晚上大家所讨论的。我觉得大家说得都有道理,怎么样用一个词来概括这些观点和思考呢,当我把PBET的意思写出来之后,我觉得,很多观点都被融入了进去。我把这个理念提给了前任公司,没有掀起什么波澜,但是我却很重视,我觉得它让我找到了教育的理论支撑。
其实后来蜗牛学苑在2015年成立时,所做的很多顶层设计,也是源于Double Seven的一些设想,我们的课程体系,也是源于PBET的理念。大家现在去百度搜索PBET这个生造出来的简写,除了搜索到一些专业术语外,能看懂的部分基本上是蜗牛学苑的文章。所以它不是一个什么流行词汇,它只是蜗牛学苑内部的黑话而已,它只属于蜗牛学苑。后来,我给PBET定义了6条基本原则:
PBET是蜗牛学苑独创的教学模式,以项目和任务为驱动,以达到真正培养人才的目的:
项目驱动:贯穿不同阶段的不同项目,是帮助学员提升的必备武器,项目经验的积累是核心任务。
任务驱动:由于项目的长期性将导致学习的反馈周期长,所以项目必须拆分为诸多细分任务进行。
场景式教学:通过事先设定某个特定场景下的特定问题,来探求该场景下的各种可能的解决方案。
对比式教学:通过对比不同技术的体现形式来实现同一功能,帮助学员深层次理解技术的本质。
可视化教学:面对比较空洞的概念或逻辑时,多用图表或流程图,多引用生活案例,帮助快速理解。
团队化培养:传统的教育模式强调的是个人能力的培养。而企业的真实项目更多的是团队作战。
接下来的一部分内容,我想更详细地去给大家解读一下PBET,也希望我们的课程体系,在更新到8.0版本的时候,能够将其体现得更彻底一些。
怎么理解项目驱动?就是每个阶段一个项目,阶段一开始,我们就会告诉学生,这个阶段我们要完成一个项目,这个项目具体是什么,有什么功能,长什么样,必须要清楚,然后整个过程全部贯穿这个项目。所以,我理解中的项目驱动,第一节课的内容是什么?就是介绍项目。为了完成这个项目,我们需要具备什么样的知识,需要解决什么样的问题,需要学习什么样的技术。学生听不懂怎么办?不会听不懂的,只是听完感觉不强烈而已,因为还没有体验到自己和这个项目的关系,我们继续前进。为了我们能一起完成这个项目,接下来我们需要理解这个项目里面会用到什么技术,学生还是对这些技术没有什么概念,没事,我们继续前进。
我以Java开发、测试开发这两个专业方向来给大家举例说明一下,PBET这六项原则具体怎么样的。我们就是要通过项目的设计,把知识和技术融入到项目中去。在我看来,做一个项目从来都用不到的知识,完全可以不重点学习,或者作为补充或扩展类课程,而是先完成项目主体功能,或者通过设计把更多知识融合进来。另外一种可能是,有些知识点,是下一个阶段的项目里面才会用到的知识,那就在下一阶段的项目再去讲授。这是需要设计的,而这种设计,才能称为课程体系。比如我们要设计一个Web站点,那么标准流程是:需求分析、UI原型设计、UI定稿、前后端开发、前后端对接、测试介入、修复Bug、上线运营、安全保障。当然,大家也能明白为什么我们现在要开设这5大线下专业了,那就是为了能完整覆盖从“UI、前端、Java、Python、测试、网安”这套生命周期。至于我们凡云教育的在线直播课程,今天就先不专门讨论了,其实我们的在线教育板块,很多理念还不能完全一样,有其独特性。
Java开发方向
第一阶段:我们主要的教学目标是掌握Java的核心编程和面向对象,以及常用API的使用。这个阶段我们还没有办法完成一个完整的Web应用的开发,无妨,那我们就专注于Java就行,所以我们要求学员来开发五子棋等这类趣味性更强的游戏,或者纯粹开发一个命令行应用也无妨。按照PBET的理念设计课程,大致会是这样。
先画一个界面出来,如果要画一个Windows界面,那么直接安装WindowBuilder或类似插件,拖拖拉拉界面就画出来了,万里长城开始了第一步。如果要画一个命令行界面,System.out.println就带出来了。接下来呢,我们以命令行WoniuATM举例,光打印了一个菜单不行,我们得有交互,所以我们需要判断,分支语句出来了,我们需要检测数据类型,数据类型的知识点出来了,字符串操作有了。接下来,我们需要完成用户登录,所以数组的功能出来了,要遍历数组去对比用户名和密码对不对怎么办呢?所以循环出来了,循环+判断的组合(初学者的第一个痛点)出来了,这个非常类似于PBL问题驱动,但是PBET中我们称之为任务驱动+场景式教学。
继续往下做,发现数组里面要存多个用户名和密码,不好存怎么办呢?二维数组可以试一试,ArrayList好像也行,但是最终觉得HashMap好像更合适,这一套都带出来了,而且就是这个项目中的真实场景。当然,我们必然在引入一个新的知识点的时候,会讲一下基础知识,而练习是什么呢,不是针对这个知识点本身的练习,就是解决这个项目的问题,重构新的版本。光有登录不成,还得要注册,你看哪个系统没有登录和注册功能?那么大家觉得注册这个功能应该怎么实现比较好呢?HashMap吧,如果我现在注册的时候不仅要输入用户名、密码,还得要确保已经注册成功的用户名不能再注册,再一次把循环+判断+数组这类知识进行巩固强化。另外,我还要再加两个功能:一是密码要输入两次,做二次确认怎么办?相信这个时候学生应该都能自己搞定了。另外一个功能是注册的时候,我们想让用户输入电话号码或者邮箱地址,这个合理吧?学生应该也能搞定了。
后来发现,这些玩儿得再转,还是有问题,一个注册功能,至少又引发了两个问题:
我们先说第一个问题,这电话号码或者邮箱地址万一用户乱输入怎么办?我们是不是得校验一下格式对不对?怎么校验呢?我们来试试用字符串一个一个判断的方式,比如电话号码是11位,第1位必须是1,第2位只能是3到9的数字,后面9位必须全部是数字,大家看看怎么弄?啪一个作业扔出来,开始抠脑壳,然后我们必须憋着,不能一上来就正则表达式,先用纯字符串判断的方式搞一稿,把循环、判断这些玩儿转。终于弄明白了,那弄明白了电话号码,邮箱地址可以不可以自己搞定了呢?又开始研究,字符串的各种API又用得到更多了。
接下来呢?引入方法、参数、返回值,既然我们搞明白了,那我们现在把这个功能封装起来,以后的代码随时可以调用不是更好?比如我们想后面让用户可以修改密码,修改电话,修改邮箱的时候,是不是可以直接调用了?
好,现在我们封装了一个电话号码或邮箱的接口,接下来呢,我教给大家一种简便的方法,用正则表达式来做就简单多了。你看,我的接口一模一样,但是我的代码部分不一样了,其他什么登录注册该怎么用怎么用,这段代码我用正则表达式代替了原生字符串处理的功能,整个项目不受任何影响。这叫什么?接口规范,只要方法或函数名一样,参数一样,返回值一样,至于代码怎么实现,不影响调用它的地方,一些设计理念慢慢渗透到学生的认知中去。
上面这一段字符串判断电话号码或邮箱地址和正则表达式判断电话号码的功能实现,也叫做对比式学习。并且用最原始的手段去巩固知识,强化字符串处理的API的用法。再对比着正则表达式去解决这个问题,大家一下子就爱上了正则表达式,效率太高了。而字符串操作的大部分问题,已经潜移默化地学习完了。整个场景都是连贯的,不拖泥带水,目标明确。
然后我们接着说注册功能的第二个问题,我们发现注册了的用户,下一次再启动一下程序,用户信息又没了,每次登录都得先注册几个用户才行,这很显然不对那怎么办呢?这时候讲解一下内存和硬盘,包括持久化操作的一些概念。自然而然引出了文件操作,要不我们把注册信息保存到文件里面?这样每次程序启动的时候我们就读取文件信息如何?接下来是文件读写的基本操作,什么字节流、字符流、编码、文件类、实例化的概念,能抛的先抛一下,能讲的先讲一讲,但是不用一口气讲完这些,咱们得憋着。先解决注册信息保存和登录读取验证的问题,于是我们可以引出CSV、配置文件、甚至JSON这些东西,终于完成了登录和注册,看起来可以用了。
接下来呢?怎么引入?那就先让学生再实现一个修改密码的功能,再实现模拟ATM机存钱转账的功能,打印流水的功能。这个时候,操作文件往往比较痛苦了,所以JSON数据的持久化读写操作会比CSV更方便一些,那就继续实现,并且涉及到ATM存钱转账的这些钱方面的事,可以不可以融入一点基本的金融知识,算算利息,注意一下转账不能转负数,校验一下转账的金融不能多于自己的余额,这一系列操作,也强化了数学运算、边界检验,包括像BigDecimal这一类,都可以先引入进来用着,同时把代码Bug这些日常操作多聊一聊,顺便当然可以继续聊真实项目中的这些扯皮背锅的事了。另外,在这里,我们提到ArrayList、HashMap,我们也提到了CSV、JSON、甚至我们也可以把Excel这些引入一下,放在一起对比,这些数据格式是如何去展现一张二维表的结构的,把某些相关知识综合起来做对比和总结性讲解,不至于让知识过于散落,也同时为关系型数据库的理解打下基础。
接下来,我们发现这个项目的功能越来越多了,我们代码应该怎么组织更合理呢?方案就是:面向对象、关系型数据库。接下来讲解面向对象,讲解MySQL,讲解JDBC,把系统的功能变成最终我们想要的样子:基于MySQL的面向对象的ATM模拟系统。这里面有一些面向对象的方式方法我们尽量融入,实在无法融入的,最后补充或者留给下一阶段。
第二阶段:我们专注于Web系统开发,那就是一个新的更真实的项目,做一个Web应用系统,比如经典的电商平台,或者继续第一阶段的ATM继续扩展到金融信贷平台,投资理财平台等。项目的过渡也比较自然。当然,第一节课,同样的,把项目甩出来,第二阶段,我们要把这个项目做出来。
我们假设没有UI团队,能不能模拟和体验,当然可以。老师把已经做好的HTML页面截图给你,来模拟UI设计稿。如果没有前端呢,也没问题,老师把HTML页面源代码直接发给你,来模拟前端已经完成。但是HTML页面没有JavaScript,无法交互怎么办?那这懒你不能偷,你学Java的必须要学JavaScript,你还不能只会JavaScript,你还得学习框架,因为企业要用框架。那学了就能解决这个问题了吗?当然!学的目的,就是为了解决我们项目中的问题。
接下来,搞HTML+CSS+JavaScript+
BootStrap+JQuery+AJAX这一套,然后是JDBC过渡到MyBatis,再来Servlet+
HTTP+模板引擎,然后就是从数据库设计,到前端页面设计,到后台接口设计,到MVC甚至直接上SpringBoot。整个过程与第一阶段类似。这里我就简单举点例子就行了,不再一一详述。概括起来一句话:为解决具体问题而学习,为真实场景而实战。
比如我们需要实现一个电商平台,业务上大家都还比较熟悉,那么我们从哪里开始呢?我觉得可以先从数据库开始,这样与第一阶段能够有一些连贯性,把MyBatis和数据库设计一起融入,然后开始设计后台接口,此时没有前面界面怎么办?没事,先用Postman做接口调试。然后自然而然要设计接口,需要讲到Servlet的各个模块,要讲到HTTP协议,讲完就完成注册、登录、商品列表、购物车,这些功能基本上可以覆盖Servlet的各个功能。然后呢?由于前面已经有JSON的数据格式基础了,直接先输出JSON,但是怎么跟前端界面对接呢?那么进而过渡到JavaScript的学习,用JavaScript解析JSON并填充内容到页面,那么填到哪里呢?先简单输出,再到表格输出,最后用DIV+CSS+表格等共同输出,页面就慢慢像那么回事了。进而继续学习更多前端知识,把页面整得稍微像样一点,但是发现使用原生前端三件套,效率太低,怎么办呢?这时候请出BootStrap+JQuery,对已经做过的简单页面进行重构,提升效率。
接下来就是AJAX,前后端交互,这个过程完成,基本功能就慢慢实现了。然后是页面内容的填充,发现使用JavaScript效率太低,所以我们需要使用后端模板引擎直接填充页面内容,但是此时,我们已经对前后端分离打了一些基础了。这个过程基础知识差不多可以了,发现Servlet的开发效率还是低了一点,那么此时已经可以把SpringMVC搞出来了,甚至于SpringBoot就可以弄了,把开发效率提上去,同时后续其他功能,就交给学生慢慢实现了,因为大部分知识,我们演示了,学生也跟着做了,剩下一些功能,那就自己独立完成了,老师提供关键指导就行。这个过程,引导学生去思考去优化,为第三阶段能够独立完成项目做好基础准备。
第三阶段:以上模式不做本质上太大的变化,但是我们就需要完全的企业级开发了,比如比如Spring套件、Vue框架、前后端分离、权限等。另外,我们引入学员独立项目,那么此时,我们需要团队化培养,需要大家协作,需要项目管理工具,需要版本控制工具,需要Git、需要Maven,需要文档,需要会议,需要讨论,需要扯皮,这些都是企业真实场景。还需要在Linux+Docker上进行项目部署,所做的一切,都是为了让这个项目能够交付,时间紧迫怎么办,该加班就加班,客户难道还天天惯着你吗?这叫体验,体验技术、体验痛苦、体验过程、体验成就,以后去企业了,有些事情也就见怪不怪了。
第四阶段:微服务、分布式、高并发、将平台从PC端切换到移动端,搞WebApp,搞小程序,学生已经非常习惯了。
整个阶段,我们到底会遗漏掉什么知识体系呢,我觉得什么都不会遗漏,即使真的觉得还是有遗漏,我们通过对比式教学,一定可以通过对比很快解决这个遗漏。如果做了这么多项目,有些知识点从来都没有用上,那么有什么学习它的必要呢,有些东西该淘汰就淘汰了,实在不想淘汰,那就作为就业补充强化课程,让学生自己解决问题了。我们不能像个保姆一样,什么都要我们来告诉学生,培训的目的:不是我们讲了多少,而是学生掌握了多少。
测试开发方向
对于测试类项目来说,也是一样的,其实测试的教学方式,还不完全一样。我们前期的测试项目的学习,完全可以一上来,甩一个基本成型的项目给学生,然后一句话不说,先让大家找找Bug,找找感觉,先看看谁找的Bug多。我们再来分析,为什么别人找得到Bug,你没找到Bug,接下来我们再谈一些方法论和技术,再继续深入找Bug。这叫体验,这种节奏的设计需要一个更有经验的老师,但是通过我们的标准课程体系,也是完全可以普及到所有讲师的。Bug找出点感觉来了,我们再来聊测试用例是怎么设计的,然后呢?还会涉及到测试环境部署、PC端移动端、数据库、软件研发流程等问题、为了做得更专业,所以我们单纯只是点几个Bug出来还是不行的,所以我们需要学习更多。
那么,我们不能只会Windows,不会Linux,因为服务器环境很多使用Linux,另外一方面来说,我们不能只会Linux不会Docker,因为很多企业在使用Docker。一步一步,一环一环,学生都非常清楚我们为什么要学这些,就是因为这个项目需要,那个项目需要,企业需要。
但是我发现每次配置这些服务器环境都好浪费时间,上一个版本,我们就要搞一次一样的事情,这弄不好还出错。而且体验了之后发现,每个项目不同版本有好多功能都差不多,还有就是兼容性测试,这个环境和另外一个环境,做的测试工作基本没有差别。这多做几次就烦了,这些问题也许学生并不会主动提出来,因为他们没有想过,但是我们老师可以引导。也许学生提出来了,那么我们就可以鼓励这个学生去找一找解决方案,然后在班级里面分享,这样让学生主导自己学习的过程,老师只要掌控好节奏就行。
最后我们发现,用自动化就能解决问题,所以我们需要学习自动化。怎么学自动化?并不是一上来就是Python咔咔写代码,对于测试专业的学生来说,写代码这个坎一直很难过去,所以我们可以先用SikuliX这样的图像识别工具来从UI自动化做起,让学生感受到原来自动化这么简单,没有想像中那么难。这玩意儿弄好了,都可以整个游戏外挂了,我们可以继续再问,要不试试整个微信抢红包功能玩玩?后来发现这个也有问题,比如对界面过于敏感,存在很多问题,怎么解决呢?玩一下SeleniumIDE,这个不错,特征识别。但是也有问题,它只能搞Web页面,Windows界面或者手机上好像搞不定,当然我们有的是办法。比如我们可以用Appium,也可以录制回放,还可以生成代码。比如生成Python代码,Java代码等都行。于是又出现新问题,代码看不懂了,那么我们就给大家讲讲这个Python代码是怎么回事,讲了一部分,再回来看看这代码能看懂不,还是看不懂?对于Web页面元素啥的没啥概念?我们继续给大家讲Web页面元素是怎么样构成的。
再后来,发现这弄来弄去,还是测试一个UI界面,但是企业不都流行接口测试吗?接口测试咱们怎么来设计课程?那就先从Postman入手,先弄一段接口把请求发着,进而触发了Socket/HTTP/HTTPS等协议的知识盲区,再一看,又发现Postman也可以生成Python代码,那么我们继续Python的学习,并使用Python来完成对Socket和HTTP的处理过程,整个过程就一个项目把UI、接口、Postman等工具练熟。
然后过渡到PyTest这类通用框架,这可以管理测试用例,还可以参数化,各类功能还不少。要不我们自己先来写一个简单的框架?比如模拟测试用例的自动化调用,模拟DDT数据驱动,怎么能解决这个问题呢,所以我们需要学习面向对象的知识,我们需要了解反射机制,我们需要了解装饰器怎么使用,这些差不多了,我们就来做一个简单的框架,实现测试用例的自动调用,实现DDT,再配合着UnitTest或者PyTest的运行器和参数化功能,对框架慢慢有些理解了。进而继续实现KDT、实现CBT、实现图像识别等框架(又回顾到SikuliX的对比学习),把前面的知识继续强化一遍,把UI和接口整合到框架中。
突然发现还有性能测试,这个工资还不低,那性能测试又是怎么回事呢?怎么模拟很多用户访问的情况呢,发现多线程这玩意儿可以解决问题,那自己用Python搞一个?当然没问题。但是企业好像也没有人用Python写代码来做性能测试,都用JMeter。那这Python的多线程不是白学了?当然不是,这是对比式教学很重要的一环,被Python+多线程+接口折磨了几天的话,学JMeter那就是一两天的事儿。接下来就是实战,在我们的服务器真实环境下对项目进行性能测试,从方案到实施到报告一步到位。有瓶颈了怎么办?监控和优化呗。从CPU优化、内核参数优化、数据库优化、IO优化、到网络CDN处理、到前端优化,一套组合拳下来,再困难的学生也不至于完全懵圈,多少都能懂一些关键场景,那么这些更难一点的技术,也确实会拉开学生之间的一些差距,不过问题也不大,我们毕竟还有第四阶段的更完整更综合的项目阶段,再鼓励大家学以致用。
最后,当然我们再来补充两个专题周:安全测试、APP专题测试,齐活儿。
无论是哪个方向,都可以是这样的一套思路,让学生很清楚我们学了这个是用来干嘛的,能解决什么问题,为什么要学习这个技术,心里清楚,这叫体验。而不是让学生一脸懵逼的学,然后做着一些可有可无的练习,学生也不知道学来干嘛,因为没有真实场景没有对比,找不到学以致用以及解决问题的成就感,这不叫体验,这跟大学教育就没有什么两样了。
上图是我去年直播讲授的Python Flask开发的课程(为出版的图片配套),基本上完全按照PBET的理念进行,大家可以从目录中看出来一些端倪。如果有时间,大家可以去认真看看这套课程的目录,或者简单听几段找找感觉:
https://www.woniuxy.com/course/119
也可以访问:
https://item.jd.com/12874957.html 在京东上看到这本书的目录,如何践行PBET理念,我觉得这本书和配套视频,算是体现得相对比较完整,但是由于是直播,所以并不能像线下授课一样完成整个闭环。但是在项目驱动、任务驱动、场景化教学方面,体现得也很不错,并且很多地方我也会使用对比方式进行教学。比如使用JavaScript和Vue进行前端内容填充的对比,比如使用Python完成一个ORM模型的原理实现,配合SQLAlchemy数据库框架的对比,再比如使用Python+字符串替换来讲解模板引擎的处理机制和使用Jinja2模板引擎来做对比等,同时在进行对比式教学的过程中,也让学生能够把很多原理理解得更透彻,并不会丢失对底层原理的理解。
同样,这本书的最后一章,我们补充了4个扩展课题:Redis缓存、页面静态化处理、全文搜索、接口和性能测试,并且也是为了更好地完善这套使用Flask开发的博客系统,优化其性能提升运行效率。对比我们的课程体系来说,并不是使用了PBET就无法把一些重要的知识补充进行,反而完全是可以的,并且是跟项目强关联的内容,不会单纯地只是为了补充而补充。
事实上,任何一个专业,一门课程,包括我没有举例的网络安全、UI设计和Web前端、Python数据科学这类专业,通过合理的课程设计,是完全可以达到PBET的所有要求的。目前我主要精力花在网络安全这个专业上,通过给3个班级进行授课,已经基本摸索出来了一套教学模板,也正在对更多班级进行验证,把PBET落实得更加透彻。
另外,我再补充一下关于场景式教学的手段中,对于安排晚间或周末作业的要求。所有作业的安排,一定基于以下三种情况来安排作业:
1.当天的项目或任务中,老师解决了一部分,还有一部分学生去解决,根据学生解决的反馈,安排第二天的讲解。
2.为明天要讲授的课程进行预习做准备,安排一些调研类任务或预习后完成某个任务。
3.利用已经学习过的知识,配合一点点第二天要学的知识,来安排一个相对新的任务,起到巩固今天,准备明天这种承上启下的作用。
这些课后作业的安排目的也是非常明确的,就是要解决一个关键问题。尽量不安排与场景或任务无关的作业,学生做了,也不知道用来干嘛,做出来了没有太大的成就感。
其实真正践行好PBET的模式,我们一定可以更好地培养学生解决问题的能力,也可以让老师们不单纯只是一个知识的传递者,而是一个技术的引导者,一个项目的监督者,我们也不再是填鸭式教学,尤其面向这种最多半年教学时间的短期培训,而是真正激发起学生的兴趣和热情,让老师真正扮演“传道、授业、解惑“的职责。同样的,在课堂上将不再有枯燥乏味的讲解,一定是环环相扣引人入胜的。这也是为什么,我们一直不提倡教学过程的完全标准化,也不要求大家上课要用PPT,而是要求大家通过随堂板书的方式整理思路,具体问题具体分析甚至允许少量的翻车情况和适当的现场调试的时间,因为那也是一种体验,让学生也可以感受到这个过程,老师是怎么来解决问题的。
之前我给很多人做培训的时候,仿造敏捷宣言也拟定了一套培训宣言,算是对PBET的收尾。
接下来,让我们再回到开篇提出的4个问题和我的总结性回答。
针对问题一和问题二,PBET应该能够回答得差不多了,但是肯定还不够的,还需要配合我们的教学管理和学习评价体系,也还需要我们的教学与班主任的各种配合,这方面我们内部已经运行得比较成熟了,虽然还要继续提升,但是至少目前大家基本上是能够达成一致的,所以我们就不过多阐述了,咱们学生个体的具体问题具体分析,保持关注坚守住底线和原则,不会错得很离谱。
至于问题三,我认为我的简述答案已经算是回答了这个问题,这个回答完全出自于我们的十六字价值观的一种外在表现,并不难理解:“诚实守信,坚持原则,尊重人才,崇尚技术“。那么剩下的篇幅,我想留给问题四,阐述一下什么是”灵魂的自由“这个话题。
我想先问大家一个问题,你觉得你自由吗?我从2009年当老师那一天开始,我就感受到了内心的自由,举几个简单的例子。
我在没有做讲师之前,我需要每天处理很多邮件以及管理团队,还得把甲方爸爸伺候舒服了,有时候还落不上个好,真的感觉有点身心俱疲。我觉得这不是我想要的职业和生活,但是做讲师后,我每天的工作非常纯粹,就是好好上课好好辅导学生,而且我有什么研究成果,我立马可以在学生面前展示,作为一个本来就喜欢研究技术的人来说,有地方展现自己的技术实力,我是非常享受这种过程的。并且我不需要应付谁,不需要讨好谁,无论是我的领导我的学生,我只需要用自己的能力去获取他们的认可,我可以批评他们,虽然我认真批评他们,但是我也认真帮助他们,是那种发自肺腑的情感,而不是把内心真实的情绪都压着。
2010年,我给学生讲QTP这门技术(一门比较古老的UI自动化测试工具),讲了一段时间后,我一直有一个技术问题没有想透,就是这个工具是怎么样去找到这个界面的元素并且还能对它进行操作的,我觉得我一定要把这个技术研究明白,这样我就可以自己写一款UI自动化工具了。于是我利用业余时间,研究了很多资料,慢慢找到了办法,然后我使用最原始的C语言、使用Java、使用JavaScript、使用C#,把这些类别的元素识别的原理用原始代码做一遍,后来的QTP课程,就是公司讲得最深最透彻的了,因为我不仅讲怎么用,也讲底层的一些原理。在这之前,没有老师这样来讲过,所以我就是几十名讲师中的第一个,我觉得很有成就感。同时,我还使用QTP自带的VBScript设计了更多可重用的简单框架,让整个自动化测试的过程,变得更加高效。后来给这套框架取了一个名字:CBT(Component-Based Testing,基于组件的测试),在后来慢慢地完善了CBT这套框架,融入到了我们的测试的课程体系中。
2010年我同时授课的比较多的另外一门课程是LoadRunner这款性能测试工具,这个过程跟上面的QTP有点类似,就是我一直在思考,它的底层原理是什么,我能不能自己开发一个这样的工具出来?我只要搞清楚背后的原理,我一定可以开发一个工具出来,功能不需要这么重(因为LoadRunner太重了,而大部分时候做的,只需要其中20%的功能就可以了),于是我又调查资料,理解一些轻量级工具的使用,慢慢的我构建起了一套用Java写的性能测试的脚本库。当然也有了“多线程+协议+指标+调优”的性能测试基础架构。
后来,我要主导开发Oracle数据库的课程和教材、主导开发Web系统测试的课程和教材,主导开发安全测试的课程和教材,再到后来创办蜗牛学苑,构建课程体系,这些都不一一去细聊了。但是整体感觉就是,做讲师只要你愿意,技术可以研究得很深,也可以做很多在项目当中无法真正做到或者没有精力去做到的东西。因为做项目,我们难免要应付,而做讲师,我们和学生的宽容度都挺高,就是你在保证课程体系基本要求的前提下,你可以继续深挖,构建自己的技术体系,给学生补充更多难度,让更多学生受益,让他们在面试的过程或者入职以后,都能够具备比别人更多的思考和深度。当然你也可以选择仅仅满足课程体系基本要求,但是,如果你连基本要求都无法满足,那么你不可能感觉到“自由”。
在蜗牛学苑这7年的时间里,我没有停止过技术的进步,无论是深度还是广度,又得到了巨大的提升。无论是测试、开发、网络安全、前端、后台等技术,还是在管理上的思考。这个创造的过程非常享受。人生短短几十年,真正能做一些创新或者创造,这种成就感是巨大的。
有时候我也会听到一些老师说,讲师做久了技术看不到什么进步了,感觉再出去找工作都没有什么竞争力了。其实这种想法是完全错误的,我们的讲师,任何一个人拉出去做一个高级工程师或者架构师,问题都不大。但是为什么某些时候可能会有这些疑惑呢,其实原因很简单,就是我们一期班一期班的开着,就是这么给学生讲课讲着,就感觉都没多大区别,仿佛看到了自己10年后,可能还在讲这些东西一样。这种情况,你当然感受不到“自由”,你只能感觉到“迷茫”,如果一名这讲师都是迷茫的,怎么可能带得出一群优秀的学生?其实如果我们能够按照PBET去执行,而不是为了讲课而讲课,以项目来驱动,而不是以知识来驱动,你把每个班当成一个项目,把每个班当成一名新客户,你的项目经验的积累将会是成倍增加的。假设以后不做讲师了,做项目经理、架构师、售前或者纯管理岗位,这些岗位能难倒你们?一个班几十号学生都在你的掌控之下,未来管理一个团队会很难?
关于“自由”这个话题,我能说的还有很多,比如我们想要了解最近的技术趋势,我一个人确实没有那么多时间,怎么办?安排学生,利用一个周末的时间,去调研一下最近的技术发展,下周一回来给大家做一些分享,这样你也可以收获更多的观点。比如今天确实不在状态,那么我们可以多安排一些学生自己主导的事情,无论是完成作业还是讲解技术,把主场交给学生。比如这次的考试,我们换一种形式,不以在线考试或者笔试的方式,我们可以整一次知识竞赛分组抢答的方式。比如我最近有一项新的研究,我想录制出一套课程,去在线课堂或者去B站发布我的视频,吸引更多的人关注,给自己多积累一些粉丝,增加自己的影响力。比如我觉得我想写一本书,我想开一个专栏,我想近期去找企业沟通,聊一聊企业的新技术趋势。只要你想你就去做,我们支持大家做这些事情,也提供一切能提供的资源。难道这还不自由?想做什么,就做什么,还有人支持你做。我不知道这都不叫自由,难道每天睡到自然醒,想上班就上,不想上班就不上那样的,才叫自由?当然,目前看起来,这种情况不多,你做不到,我做不到,连国家领导恐怕都做不到,我们的自由,一定不是这样的定义。当然,你也可以年轻时努力工作,早一点实现财务自由,早一点退休,向世界怒吼一声:老子不干了。对于这方面,我没有成功经验,我不知道真有那一天的时候,是不是真的能感觉到灵魂的自由,我暂时给不了答案。
真实总结起来,就是把自己变得足够牛逼,有勇于说不的权利。我举个简单的例子,比方说面对学生的一些投诉或者负面反馈,我敢于说,我做到是对的,他提的意见我不会采纳,因为学生不会比我更懂技术,不会比我更懂教育。比方说有人在网上骂我们,我们敢于正面回应,因为我们认为我们做的是对的,不怕被别人谩骂。我们不需要刻意讨好学生,因为他们是来接受教育的,我们帮助学生,但是我们不是服务员,同学,你不要搞错了。
有哪一个行业,合同上收钱的是甲方,给钱的是乙方?也许,只有教育行业吧。
心之所向,身之所往,终至所归,无问西东。
最后,趁着七周年之际,蜗牛学苑正式发布在线招聘网站:
https://www.woniuxy.com/job 作为我们打造职业教育闭环,实施蜗牛创想“开放战略“的重要一环:”为企业开放人才资源“,今天正式落地。蜗牛招聘与在线课堂5.0版本同步同系统发布,全新改版,全新架构,全新理念。开放永不止步,只为成就更好的你。
蜗牛创想6周年:蜗牛创想邀请您一起走下一个5年!
版权所有,转载本站文章请注明出处:蜗牛学院在线课堂, http://www.woniuxy.com/note/847