人生最终的价值在于觉醒和思考的能力。 —— 亚里士多德
如果你问我,作为大学老师,我存在的意义是什么?
一直以来,传道、授业、解惑是教师最显著的标志。教师的功能就是把人类已有的知识经验传授给年轻一代,使其在较高的起点上发展。因此,教师作为知识的传授者不仅要有精深的学科知识,而且还必须懂得如何传授知识,是学科知识和学科教学法的双重专家。
同时,由于科学技术的高速发展,多媒体和网络技术的运用拓展了人们获取知识的途径,教师作为唯一信息源的作用日趋减少。教师不能再把单纯的知识传递作为教学的主要任务,而应该把学生形成正确的学习态度、方法以及灵活的知识迁移能力作为教学的主要任务,担当起学习的促进者的角色。教师应该帮助学生觉醒,引发学生思考,促进学生快速成长,把学生打造成为可持续发展的个体。
如果你是传说中的救世主Neo,我就是那个为你开启那扇门的墨菲斯:
我很感谢张奶奶让我上《教育心理学》这门课,它对我太重要了!
We are what we repeatedly do. 我每学期都在上这门课,每次备课都能有新的领悟。随着教学阅历的增长,越来越觉得陈琦老师和刘儒德老师了不起,他们写书的时候是真的思考了的,书写得很好,很有深度!
德德老师有一个很有意思的观点,人这一辈子,如果能够把教育心理学里边的某个概念真正搞懂,那就已经很了不起了。我非常认同这种观点!在整个北师大心理学生态里边,我更像是一位教育心理学理论的践行者,在教育心理学理论(犹如黑夜中远方的灯塔)指引下,不断地探索最佳的教学模式。
Q1:如何运用“迁移”来提高学生在新情境中的问题解决能力?
迁移作为一个普通的动词来理解时,它的意思指的是离开原来的所在地而移向另一个地方。在教育心理学中,迁移指的是一种学习对另一种学习的影响,指在一种情境中获得的技能、知识或态度对另一种情境中技能、知识的获得或态度的形成的影响。迁移对于提高学生的新情境的问题解决能力具有直接的促进作用。
我们来看一个例子:
先提供给学生一个学习材料,让学生建立起"交叉火力"的概念,效果如下图所示。
在军事行动中,交叉火力(Crossfire)指交战一方队员之间的火力线,两个或者多个火力单位射在阵地上,并不是朝正面射击,而是左侧单位朝右射击,右侧单位朝左射击,这样就会出现火力的交叉。
然后让学生解决一个新情境下的问题:
通过γ射线可以对病人体内的病灶进行损伤手术,但是这样从一个方向射进来的时候,也会对照射到的正常组织造成损伤,该如何解决这个问题呢?
这个问题的解决需要将之前的“交叉火力”概念迁移到新的利用射线手术的新情境中,答案在下图中不言自明。
这个部分是用来致敬YH老师的,在本科一年级,就在普通心理学课上给我们讲解新情境的问题解决,从此爱上了这个地方——魔法心理学院!
布鲁纳认为,某个学科的基本知识结构和学习态度/方法的掌握,不仅便于学生对教学内容的理解和记忆,而且还有利于学习迁移的发生。他强调,为了便于学生获得知识和技能,要注意两点:(1)教材呈现的顺序要注意从一般到个别的不断分化;(2)教材的知识结构要从已知到未知逐步系统化。
布鲁纳鼓励的是一种探索新情境下问题解决的能力和态度/方法。比知识本身更具有价值的是更接近本质的概念/原理和get知识的态度/方法。
Q2:如何用Matlab画法国、德国和其他带长条的国旗,掌握画图机制和矩阵操作?
Matlab考试的时候,选择各国的国旗作为考试主题之一,表面上是我选择了这个题目,实际上是国旗这个题目选择了我。因为,国旗题有一些明显的优势。(1)国旗题的可扩展性很好,国旗种类繁多,五花八门,具备从一般到个别的不断分化,和构建从已知到未知的可能;(2)它可以帮助学生更好地掌握画图和矩阵操作。这一开始的设定,主要是画带长条的国旗,比如法国。
法国国旗呈长方形,宽(Width)和高(Height)之比为3∶2。旗面由三个平行且相等的竖长方形构成,从左到右分别是蓝色、白色和红色三色。蓝色是圣马丁长袍的颜色,代表自由;白色是为了纪念民族英雄圣女贞德,代表平等;以及红色源自圣但尼军旗,代表博爱。
法国国旗最早出现在1789年的法国资产阶级革命时期(法国大革命时期),巴黎国民自卫队就以蓝、白、红三色旗为队旗。1794年2月15日,旗帜最终被确定为法兰西第一共和国的国旗。
要想画好法国国旗,需要两方面的知识:第1是利用图形窗口画图的知识,第2是矩阵操作的知识。我们先来看图形窗口画图方面的基础知识。
[1] 图形窗口机制可以简单的用一个图来概括:
Root代表屏幕,Figure代表图形窗口,Axes是坐标轴。我们一般会先创建好图形窗口和坐标轴,然后选择在内存中把图Image的矩阵Matrix准备好之后,再用imshow函数画到坐标轴上。
因为这个是脚本文件(区别于函数),所以一上来要先清空屏幕和工作空间,每次运行程序都相当于重新开始。
% 清空
clc; clear;
% Root是默认的,所以不需要管它。我们直接来创建一个图形窗口:
% 图形窗口
hFigure = figure(1); % 这里的1是图形窗口的标识id,也可以创建图形窗口2,3,4 ... N;
set(hFigure, 'position', [100 100 600 400]); %设定图形窗口的位置属性 600是宽,400是高;
%这里的100 的意思是,以屏幕左下角为原点确定的x=100和y=100的位置;
% 坐标轴
hAxes = axes('parent',hFigure); %当坐标轴来到这个世界,首先要确定好它的父对象是谁;
set(hAxes, 'units','pixels', 'position',[0 0 600 400]); % 然后再设置它的属性;
% 为什么一开始要先设置 'units'属性呢?是因为坐标轴默认的是 normalized或者character,normalized是比例,按照比例来写应该是 [0 0 1 1],或者是 character,这个是参考字符x设定的单位。这两者操作起来都不如pixels像素来得直观、方便和精确,所以一般这里要把'units'属性改成'pixels'。位置属性,设置成 [0 0 600 400]代表的意思是,以图形窗口的左下位置为原点,宽是600,高是400。
[2] 矩阵知识主要涉及到矩阵的创建和行列的赋值:
创建矩阵一般用 zeros 或者 ones,前者创建值全为0的矩阵,后者创建值全为1的矩阵。
赋值涉及到一个行列的元素标识的方法,第一个参数是行,如果填写 : (左边有一个冒号)代表的是所有的行;第二个参数是列,如果填写1:200代表从第1列到第200列。
% 图形矩阵
imgMatrix = zeros(400,600,3); % zeros函数是专门用来创建值为0的矩阵用的,这里的400是行(高),600是列(宽),3代表的是RGB值,所以生成的矩阵是 400*600*3的值为0的3维矩阵。接下来,我们要对竖条的颜色,蓝色,白色和红色进行设置:
imgMatrix(:,1:200,1) = 0; % R == 0
imgMatrix(:,1:200,2) = 0; % G == 0
imgMatrix(:,1:200,3) = 1; % B == 1 这样设定就是蓝色
imgMatrix(:,201:400,1) = 1; % R == 1
imgMatrix(:,201:400,2) = 1; % G == 1
imgMatrix(:,201:400,3) = 1; % B == 1 白色
imgMatrix(:,401:600,1) = 1; % R == 1
imgMatrix(:,401:600,2) = 0; % G == 0
imgMatrix(:,401:600,3) = 0; % B == 0 红色
% 把准备好的图画矩阵画到坐标轴上
imshow(imgMatrix, 'parent', hAxes);
我们来看看效果撒 : )
在答疑的时候,我会让我的学生画法国国旗,并且把代码发到QQ群里边,并且故意会问,考试的时候会考什么国旗?
出题不能乱出,必须有迹可循,这个是原则!
有同学或许已经猜到了,会考德国国旗。您猜的没错!德意志帝国来啦:
内容虽然变了,但是考察的核心知识点仍然集中在(1)图形窗口画图 + (2)矩阵行列操作
德国国旗呈长方形,长宽之比为5:3。旗面自上而下由黑、红、金三个平行相等的横长方形组成。黑红金为德意志民族所喜爱的颜色。
% 清空
clc; clear;
% 图形窗口
hFigure = figure(1);
set(hFigure, 'position', [100 100 600 400]);
% 坐标轴
hAxes = axes('parent',hFigure);
set(hAxes, 'units','pixels', 'position',[0 0 500 300]); %相比法国国旗,宽和高有改动500*300
% 图形矩阵
imgMatrix = zeros(300,500,3); %相比法国国旗,行和列数有改动 300行 500列
imgMatrix(1:100,:,1) = 0; % R == 0
imgMatrix(1:100,:,2) = 0; % G == 0
imgMatrix(1:100,:,3) = 0; % B == 0 这样设定就是黑色
imgMatrix(101:200,:,1) = 1; % R == 1
imgMatrix(101:200,:,2) = 1; % G == 0
imgMatrix(101:200,:,3) = 1; % B == 0 红色
imgMatrix(201:300,:,1) = 1; % R == 1
imgMatrix(201:300,:,2) = 0.8; % G == 0.8
imgMatrix(201:300,:,3) = 0; % B == 0 金色
% 把准备好的图画矩阵画到坐标轴上
imshow(imgMatrix, 'parent', hAxes);
如果就这样,也未免太不像我的风格了,因为只是把颜色改一改,矩阵操作从竖条(对列进行操作)改成横条(对行进行操作),太过简单了。所以,通常这样的变化里边,还会增加一个知识点,就是如何对图片进行保存。这个知识点又分为3个小步骤:
(a)给当前图形窗口截屏用的是getframe函数,参数可以是gcf,也可以是gca;
(b)获取其中的图画矩阵,我们需要借助截屏生成的结构体中的.cdata变量;
(c)保存图片我们用的是 imwrite函数,参数是图画矩阵,保存图片的路径,和保存的格式。
% 给当前图形窗口拍个快照
hFrame = getframe(gcf); %这里的gcf是get current figure的意思,也就是获取当前的图形窗口句柄;gca是get current axes的意思,也就是获取当前的坐标轴的句柄的意思。由于坐标轴的大小撑开跟图形窗口的大小是一样的,所以这里getframe不管是对gcf拍照截图还是对gca拍照截图,结果都是一样的。这么说又是有一小点问题的,因为有的时候截图会出现白边,我印象中,要想把白边去掉,图形窗口的宽和高可以设置的比坐标轴大一些,然后getframe()函数的参数填写gca就可能能解决这个白边的问题。【后来我的学生CS告诉我,这里的关键是坐标轴的标尺的设定,不能从0开始,而应该是从1开始。所以,一个人总是会发现过去的自己是愚昧的,这恰恰代表着一种进步!
hAxes = axes('parent',hFigure);
set(hAxes, 'units','pixels', 'position',[0 0 500 300]);
后边这句应该改成:
set(hAxes, 'units','pixels', 'position',[1 1 500 300]); 】
这里得到的hFrame你可以从Matlab命令窗口双击看下,它是一个结构体变量,包含两个部分,一个是hFrame.cdata,另外一个是hFrame.colormap。我们要的图片矩阵是前者。
% 获取当前窗口的图片矩阵
imgFrame = hFrame.cdata;
% 保存图片矩阵
imwrite(imgFrame, 'GermanyFlag.jpg', 'jpg');
++++++++++++++++++++++++++++++++++++++++++++++++++
这个是去年大一的水平,去年大一的,从竖条迁移到横条,加上保存图片的细节的变化,难度算是“顶天”了。我不喜欢这个天花板,我后来越来越清晰地认识到这个天花板并不是北师大心理的真实教学水平,这里边有太多细节是可以改进的,学生的水平应该远远超过这个水平,注意:是远远超过这个水平!! 就好像很多人觉得自己在水里憋气只能半分钟一样,实际一个正常人可以憋气5分钟,而吉尼斯世界纪录是20+分钟。
今年(2016级)大一的水平,要比去年(2015级)厉害,原因是多方面的,其中一点是今年的两位课代表,QZJ爸爸和YYM妈妈十分给力,事无巨细都能安排得妥妥当当,把心理学院为他人服务便得到他人尊重的优良传统发挥到了极致。
另外一个原因是,今年一下子冒出来几位大佬级别的人物,他们总是在周末的时候来到1521,以刷爆Matlab考试题目为乐,国旗题是比较早被刷爆的。
这又不得不说这一级的大佬还有一个特别赞的地方,他们喜欢帮助其他同学答疑,还会独立制作带注释的版本和发布攻略(而且喜欢匿名,搞得我现在都很想知道发布帖子的学生到底是谁,好奇心害死个人啊!)。这种学习&分享的氛围使得这一级学生的整体水平得到了大大的提升,我一开始有点不适应,明显低估了他们的水平。这里要强调一个学习共同体的概念,这一级的学习共同体建立得是比较好的,一些带有英雄属性的学生会帮助其他学生一起成长;相反,2015级的匿名都是反过来,拼命煽动大家不要学习。有一句很经典的话,是2015级匿名说的“不是不想成长,而是成长会痛啊”。这句话,其实已经暴露了一个问题,就是本科生并不太容易建立起“勤勉”的习惯,还是停留在初中高中那种,为了象牙塔里边的分数(代币,或者说小红花),而不是为了真实世界的实力的提升而学习。特别是大一的时候,还不太适应大学的自主学习的要求,也没有摆脱为了分数而学习的惯性。所以,很容易陷入,考试前开启学霸模式想考个较高的分数,好应付家长老师,平时不努力提升自己的实力的境地(有点类似拖延症)。本科生习惯老师出的题目在教学的范围之内,也就是100%的教学,考试题目在70%左右的位置(所谓的舒服区);他们极其不适应的是,100%的教学,考试题目在他们的120%的位置(所谓的发展区)。如果一个题目在150%,他们会认为这肯定是不可能完成的(所谓的恐怖区或者绝望区)。
实际的情况却是:分数是骗人的!学习真正重要的部分,不是你获得的分数,而是你真实习得的知识和掌握的技能。就好像英语考试一样,你一开始是可以拿着大学英语考试成绩去忽悠,实际上你只要一开口别人就知道你的英语水平。
针对大部分本科生的特点,有两个很有趣的问题:(A)到底要不要设定教学目标,教学目标能不能动态的根据具体的情况可以做调整?(B)可以不可以进行多次考试?这两个问题会放在后边详细地讨论。
因为一开始只解禁了圆形,也就是我准备把去年非常有难度的日本国旗请出来,考察学生们的坐标轴的细节上的设置和三角函数的运用(题目的初衷仍然是画图+矩阵操作,但是这个时候考试涉及的知识点范围扩大了)。这个题目很快就被一个叫做WZH的大佬给突破了;即便后来我增加了难度,请出了格陵兰岛国旗,还是挡不住她和其他大佬快速成长的步伐。
我进一步解锁了三角形,最后我把一直承诺一定不考试的五角星都解锁了(不得不启用最终兵器,却也知道这个已经远远超出了一开始考察画图机制和矩阵操作的设定,开始加入了新的思想,把大二要教的策略也加上了,而且有了亲自上阵演示画国旗的冲动)。想想去年最后一次考试考的是彩虹旗(后来才知道这旗有深意啊囧),这一级的学生已经远远走在了2015级的前面。
比如,有一次考试我考中华帝国国旗,当时我故意在考试时把LXZ喊出去聊了一会,考试的时间是固定的,中途被我喊出去聊天会占用个几分钟,其实相当于增加了难度的。按照常理,在压力情境下,学生都是会很紧张的,我很期待的局面是“老师,在考试呢,我得赶紧回去做题了”。可是LXZ十分淡定,聊天的时候没有一丝紧张感,回到座位上几下就把中华帝国国旗给画出来了,画完了还说,老师,我这是自己摸索出来的方法,没看其他人的代码(她强调的是她没有用GL的代码,这个事情后边我会重点解释)。他们寝室几个像WQQ都是好样的,那个ZZR,兼具天赋异禀+内心尊贵+越挫越勇,几年难遇。我这时候确信,这一级整体上做到了所谓的长江后浪推前浪,后浪把前浪拍死在沙滩上。有一种不知不觉发财了的感觉,不禁窃喜... ... 这是当老师的成就感,能够看到全民启智的局面是作为老师的荣耀!
故伎重演,如果说从法国到德国是发生迁移的第一回合的话,那么,一开始让学生突破日本国旗,并且分发到QQ群里边,在考试的时候故意请出格陵兰岛国旗就是发生迁移的第二回合。
Q3:如何用Matlab画日本、格陵兰和其他带圆的国旗,掌握用三角函数知识画图和坐标轴设置方法?
曾经有网友用武大郎的故事、WSJ和“膏药旗”调侃日本和日本国旗,抛开所有这些偏见,大和民族有很多优点值得我们学习(要对别人的优点足够敏感!),以及客观地说日本国旗设计得是挺好的!
日本国旗正式名称为日章旗,在日本国内的常用名称为“日の丸”。旗面上一轮红日居中,辉映着白色的旗面,白色象征着神圣、和平、纯洁和正义;红色象征着真挚、热忱、活力和博爱。
让学生画完日本国旗,要求学生把代码发布到QQ群之后,我就开始找新的国旗,终于被我找到了,它就是格陵兰岛国旗:
格陵兰旗是一位格陵兰原住民图厄·基斯当臣 (Thue Christiansen)设计的。根据设计者的解释,白色横条代表占当地土城面积80%的冰片和冰盖,红色横条代表海洋,红色半圆代表太阳,白色半圆象征冰山。
先来看日本国旗怎么画(切换到英文注释,重要的用中文注释):
% filename is:: drawJapanFlag.m
% clear
clc; clear; close all; % close all figures/windows
% figure
hFigure = figure(1);
set(hFigure, 'position',[100 100 600 400]);
% axes
hAxes = axes('parent',hFigure);
set(hAxes, 'units','pixels', 'position',[0 0 600 400]);
% image matrix
imgMatrix = ones(400,600,3) % 函数从zeros(默认黑色)换成了ones(白色)
% imshow
imshow(imgMatrix,'parent',hAxes);
% 到这里,背景的白色就画出来了,接下来是关键的,圆怎么画
用关键词 matlab + 画圆,会在百度上很容易搜索到这么一段代码
----------------------------------------------------
alpha=0:pi/20:2*pi; %角度[0,2*pi]
R=2; %半径
x=R*cos(alpha);
y=R*sin(alpha);
plot(x,y,'-')
axis equal
fill(x,y,'r'); %用红色填充
----------------------------------------------------
我们先来看看把这段代码放到matlab的编辑器中产生的效果:
这个过程,很多学生都经历过,大概的代码都是实现的这样的效果。这个时候,我发现学生里开始出现一种有趣的“不求甚解”的现象,有的学生并不理解代码的含义和背后的画图机制,但是把代码拷贝过来直接用一样能把圆画出来。
大学之道在于传道、授业、解惑。学生遇到困惑,就会问我,这个时候不求甚解把问题解决了,这样可以吗?我都会很确信的回答,当然!
过程不重要,能解决问题就行,具体细节可以不用深究。
后来我才意识到,这个回答应该有一个前提条件,就是在任务(往往任务都有timing时间限制)过程中,以解决问题为导向;而如果不是任务状态,基础当然是越扎实越好,学习越系统越有利于之后的新情境的问题解决。
克服不求甚解,需要的是深入探究(让我想起美剧《越狱》里边的男主,把监狱里边每个罪犯都系统研究了一遍),以下图为例:
我曾经问过YYM有关数学三角函数的知识,她能够很快说出来。这个过程让我对她的数学能力比较认可。我自己是把这部分知识还给老师了的,但是,经她一指点,能很快捡起来。
两部分的知识,一部分是坐标轴设置的细节,画圆的坐标轴的设置和一般的坐标轴的设置不太一样。一般的坐标轴,原点在左下位置,x轴和y轴可以不等;画圆的坐标轴的原点在中心点,x轴和y轴是等长的。axis([-100 100 -100 100]);
另外一部分是三角函数的知识,如果圆的半径是R的话,A点映射到x轴和y轴的值的公式就是:Ax = R * cosβ; Ay = R * sinβ;
结合我们之前的画图基础知识,在一个坐标轴中画圆的代码整理修改如下:
---------------------------------------------------- by psyJt 2017/6/4
% clear
clc; clear; close all;
% figure
hFigure = figure(1);
set(hFigure, 'position',[100 100 600 400]);
% axes
hAxes = axes('parent',hFigure);
set(hAxes, 'units','pixels', 'position',[0 0 600 400]);
% image matrix
imgMatrix = ones(400,600,3);
% imshow
imshow(imgMatrix, 'parent', hAxes);
% axes_round
hAxes_Round = axes('parent',hFigure);
set(hAxes_Round, 'units','pixels', 'position',[200 100 200 200]);
axis([-100 100 -100 100]); % 坐标轴的细节设置,就是这一步达成的!
% plot round
alpha = 0:pi/60:2*pi; % 角度[0,2*pi],这里我把原来的20改成了现在的60,增加圆的平滑度
R = 100; % 半径原来是2,现在改成适合日本国旗的100
x = R*cos(alpha); % 三角函数的知识
y = R*sin(alpha); % 三角函数的知识 <== 我问YYM,她数学好她告诉我的
plot(x, y, '-'); % plot可以把一系列的x,y描画出来
% axis equal; 不需要这一步了,改成
fill(x,y,'r'); %用红色填充
% 补充一个
axis off; % 把坐标轴去掉
----------------------------------------------------
我们来看下效果撒 : )
不对啊!日本国旗怎么有黑边啊
fill(x,y,'r'); %用红色填充
要把上边那句调整成:
fill(x,y,'r', 'edgealpha',0);
fill函数将edgealpha设置为0可以去掉黑边。这个是我在周末答疑的时候,JXY教我的。阿弥陀佛,教学相长啊!
接下来怎么画格陵兰岛国旗?
简单分析下:背景是两长条,这个比法国德国要简单;颜色?那我有photoshop,采颜色获取RGB值并不难;画圆呢?分两次画,每次画一个半圆就行了。
我们试着按照这个思路写下画半个圆的代码,试试:
------------------------------------------------------
% clear
clc; clear; close all;
% figure
hFigure = figure(1);
set(hFigure, 'position',[100 100 600 400]);
% axes
hAxes = axes('parent', hFigure);
set(hAxes, 'units','pixels', 'position',[0 0 600 400]);
% image matrix
imgMatrix = ones(400, 600, 3);
imgMatrix(201:400,:,1) = 190/255;
imgMatrix(201:400,:,2) = 0;
imgMatrix(201:400,:,3) = 40/255;
% imshow
imshow(imgMatrix, 'parent', hAxes);
% axes for round
hAxes_Round = axes('parent',hFigure);
set(hAxes_Round, 'units','pixels', 'position',[200 100 200 200]);
% image round up
alpha=[0:pi/60:pi];
R=100;
x=R*cos(alpha);
y=R*sin(alpha);
plot(x,y,'-');
fill(x,y,[190/255 0 40/255], 'edgealpha',0);
------------------------------------------------------
我们来看看效果:
这图怎么回事?说好的半圆,怎么整个坍塌了。
画全部的代码,加上后一半,还是会出现问题。
所以,尽管一开始我们想的很好,画一个半圆,再画一个半圆,以为这样就能达到我们想要的效果,其实并不然。
一开始遇到的是坍塌的问题,看起来挺吓人,最后回来再看才知道这并不可怕(可怕的是不求甚解!一旦你理解了事物背后的规律,一切尽在掌握)。因为只要把两个半圆都画上,自然就能整个支撑起来。当然,如果想画一个半圆也是可以的,想撑起来,比如在所有的操作后边设置好坐标轴,还是那句 axis([-100 100 -100 100])。
真正导致效果不好有两个原因,第一,画图机制里边有一个是否继续画图的状态,这个状态如果是开放的,你可以继续往一个图里边添加新的元素;如果这个状态是封闭的,你就没有办法再在一个图里边添加新的元素,或者添加了原来的那个元素也就没了。第二,画图结束之后,坐标轴要想办法消去。
针对第一个分先后画两个半圆问题的解决办法是:需要在画完第一个半圆之后保持画图的开放状态,要用到hold on语句; 等两个半圆都画完了之后,再hold off。有的时候,发现问题解决的方法很偶然,当WZH告诉我hold on可以解决覆盖问题时,觉得买哈根达斯的决定不能再正确了!教学相长,说的应该就是这样一个互相促进的过程吧!
针对第二个问题的解决办法是:画图结束后,坐标轴要消去,需要用到 axis off 语句。
完整的代码如下:
------------------------------------------------ by psyJt 2017/6/5
% filename is:: drawGlldFlag.m
% clear
clc; clear; close all;
% figure
hFigure = figure(1);
set(hFigure, 'position',[100 100 600 400]);
% axes
hAxes = axes('parent', hFigure);
set(hAxes, 'units','pixels', 'position',[0 0 600 400]);
% image matrix
imgMatrix = ones(400, 600, 3);
imgMatrix(201:400,:,1) = 190/255;
imgMatrix(201:400,:,2) = 0;
imgMatrix(201:400,:,3) = 40/255;
% imshow
imshow(imgMatrix, 'parent', hAxes);
% axes for round
hAxes_Round = axes('parent',hFigure);
set(hAxes_Round, 'units','pixels', 'position',[200 100 200 200]);
% image round up
alpha=[0:pi/60:pi];
R=100;
x=R*cos(alpha);
y=R*sin(alpha);
plot(x,y,'-');
fill(x,y,[190/255 0 40/255],'edgealpha',0);
axis([-100 100 -100 100]);
hold on;
% image round down
alpha=[pi:pi/60:2*pi];
R=100;
x=R*cos(alpha);
y=R*sin(alpha);
plot(x,y,'-');
fill(x,y,[1 1 1], 'edgealpha',0);
hold off;
axis off;
% save
hFrame = getframe(gcf);
imgFlag = hFrame.cdata;
imwrite(imgFlag, 'glldFlag_good1.jpg');
------------------------------------------------------------
我们来看效果 : )
画过带长条的法国德国国旗,考彩虹旗没有任何难度可言,所以去年大一大考的时候这个题目就是送分的题目,拼手速;
画过带圆的日本和格陵兰岛国旗,考中华帝国飞机徽,也是没难度,拼手速。当然,我今年没有再考彩虹旗和飞机徽这样的题目,只是在答疑的时候会给个别学生练练手。
当长条和圆都没有办法阻止大一学生进步的步伐时,我只好把新情境押在了三角形上。我首先想到了捷克,这是一个神奇的国家,不仅仅是因为他们曾经有一位非常帅气的球员出现在我喜欢的斑马军团,他的名字叫做内德维德:
更重要的是,我们每个人都要感谢出生在捷克的一个叫做夸美纽斯的教育家。他提倡不论男女,不论贫穷富贵,每个人都应该接受“百科全书式”的教育。
夸美纽斯的思想对我们这个国家也是有重要的启示意义的,而且时代在进步,高等教育也不应该成为一部分人的特权,而应该让每个人都有机会接触高等教育,至少应该有机会领略发现学习的魅力,开启智慧——醒来吧,少年!
所以,上捷克国旗,不全是因为它包含三角形,还因为心中的这份敬仰!
三角形有两种,一种是实心的,一种是线条,颇费了一番周折,我找到了一个很特别的旗帜,以色列国旗:
长条的部分没有难度,可这六芒星却是把最优秀的几位学生给难住了!
如果这帮学生再遇到类似的情境,是一定能有办法破解难题的。可惜第一次,WRQ和ZH他们没有能突破这道坎,刚猛有余,策略不足!战斗可不是光是逞匹夫之勇就可以赢的啊 T T
从行列操作,到画圆,再到三角形,会出现一次次飞跃。因为三角形本来就不是矩阵操作,需要学生转换思路。这恰恰是所有的学习过程中最难的,形成了某种思维定势(好处是这样解决问题的速度会很快),又要跳出原来的框架去适应新的画图方法。
外事不决用谷歌,内事不决问百度。度娘吉祥,看看能不能给我们带来用Matlab画三角形的思路。度娘很给面子也很给力,给了下面这些提示:
======================================================================
%x表示三角形的三个顶点的横坐标
%y表示对应于y的三个顶点的纵坐标
x1=[1 2 1];y1=[1 1 2];
x2=[1 2 2];y2=[2 1 2];
x3=[2 2 2.5];y3=[1 2 1.5];
x4=[2 2.5 3];y4=[1 1.5 1];
x5=[2.5 3 3];y5=[1.5 1 2];
x6=[2 2.5 3];y6=[2 1.5 2];
%fill 函数用于填充三角形
fill(x1,y1,'y');hold on
fill(x2,y2,'m');hold on
fill(x3,y3,'c');hold on
fill(x4,y4,'r');hold on
fill(x5,y5,'b') ;hold on
fill(x6,y6,'g')
======================================
捷克国旗的代码如下:
------------------------------------------------ by psyJt 2017/6/12
% filename is:: drawCzekhFlag.m
% clear
clc;clear; close all;
% figure
hFigure = figure(1);
set(hFigure, 'position',[0 0 600 400]);
% axes
hAxes = axes('parent',hFigure);
set(hAxes, 'units','pixels', 'position',[0 0 600 400]);
% image matrix
imgMat = ones(400,600,3);
imgMat(200:400,:,1) = 1;
imgMat(200:400,:,2) = 0;
imgMat(200:400,:,3) = 0; % red
% imshow
imshow(imgMat,'parent',hAxes);
hold on;
% triangle
x = [0 0 300];
y = [0 400 200];
fill(x,y,[0 0 0.5]);
hold off;
% getframe
hFrame = getframe(gcf);
imgFlag = hFrame.cdata;
imwrite(imgFlag, 'CzekhFlag1.jpg','jpg');
--------------------------------------------------------------------------
以色列国旗的代码如下:
... ...
从第一回合螺旋上升到第二回合,从第二回合螺旋上升到第三回合,都特别难!
一个难题,A不会,B也不会(都没有某方面的知识经验),为什么A就能在B束手无策的情况下很快找到问题的解决办法呢?这差距到底在哪里?
在整个过程中,我越来越坚信,布鲁纳是对的!因为我们未来面临的大部分问题,都不是在象牙塔里遇到的,而是全新的问题。作为全中国最好的本科生培养项目,我们要培养学生的是面对未知的态度和从未知到已知的方法!不会,有什么关系,那只不过是暂时的状态而已,我能很快从不会到会,在短时间内把自己打造成某方面的专家。这是人类千百年来进化得来的赖以生存的必杀技(与病毒不断通过改变基因适应环境不同,我们人类有可塑性很好的大脑来适应外部世界)。
如果看到这里,你也许已经猜到了,这个基于Matlab入门的课程,却不仅仅是在教Matlab。它更确切的说,是在教具体的Matlab技能的同时,也在教学生一般性的问题解决的思维。我和很多老师不一样,就在这个点上。我不觉得具体的知识,或者某一项技能有那么重要,但是,获得一般性的问题解决的思维和快速学习能力,很重要很重要!
我也不觉得成绩很重要,成绩不重要,真不重要!成绩是骗人的,甚至有一波人会利用学生的这种心理,奴役学生(却被感恩戴德)!如果理解到这一层,就能明白,为什么我会开多次考试,因为成绩不重要,成绩就只是附属品,我们所有的操作都可以转到“尽可能地促进学生成长”这个目标上来。奴役学生的,正是制定规则的人,他们不自知啊!!不知道自己的这种奴役的行为更整个系统的螺旋上升是相悖的。
是什么改变了我?
[1]之所以会选择坚持连续考试这样的方式,甚至冒着得罪领导的风险,到底为的是什么?这其实是一次偶然,当我去年有一次进行补考的时候用的捷克国旗,去年的大一,今年的大二有两个学生(应该不止两个,只是她们太明显了),一个叫FY大姐大,一个叫QCY川妹子。她们就是在多次补考的时候突然对Matlab产生了兴趣(所以,兴趣是可以培养的!),给我发消息说,她们“根本停不下来”。问题解决的过程是有一个自我观察、自我评估和自我强化的过程的,一旦这个环路形成了之后,就会对编程上瘾。2007年,我就是在一个月内掌握的Matlab,我很清楚根本不需要外部奖赏,编程过程中的问题解决产生的成就感是会让人可持续地获得成功的喜悦。
所以,选择多次考试,等于给了这样的后知后觉的学生一次机会啊!都说,救人一命胜造七级浮屠,这个给天之骄子以学习成长和突破自己的机会胜造七十级浮屠!!
[2]选择多次考试,还有一个好处是“围观”。每次考试我都是在QQ和微信群里直播的(这真的是最好的时代啊!),考试的学生会全力以赴,而其他同学,包括考过的和没有考过的,都可以观察考试,甚至还可以跟着一起模拟考试。所以,每次考试不仅仅是来现场的学生的考试,还是其他学生的很好的历练机会。加上每一次考试的考题都在传递新的信息,学生,还有我都能在整个过程中得到了成长。
有什么比成长更重要的呢?!在刘儒德老师的《教育心理学》这本书中,关于如何评价一个教师的教学效果,最核心的是这个老师是否尽职尽责,以及学生是否在整个教学过程中得到了成长!成长,是最重要的!!建立起成长性思维,即便以后没有老师在身边,还是能够自己不断地提升。那个拐点,需要学生达到一定 学习速度,超过了这个速度,就真的“根本停不下来”了。
[3]选择多次考试还可以传达有用的信息,比如,这次考试的关键词是 combine,我等于把之前的考试的考点串一起,第二题和第三题,考的是文件和文件夹操作的题目 + 快速刺激材料生成,考点之前都考过。这个信息是“一定要去看之前考过的同学发布的考题的信息”,只有这样你才能真正跟上这个螺旋上升的节奏,要不然即便是开多次考试也没有意义。我的考试规则是连续两道题目在规定的时间做出来就给满分。我仔细观察过,这两个题目很多人就是差那么一点。是的,你考不了满分,差那么一点,就是真的不够满分的资格。而且,我也基本确信,这波差一点的学生再考一次估计就能突破了。
[4]通过考试来教会学生使用一般性的策略,提升运用元认知策略的能力。比如,周日下午的那次考试,我就在一开始出了史上最难的题目,非常难,难到所有学生都认为这次考试太难了。所有的学生遇到超级难题的时候,第一个想到的就是去解决它。
我事后问过一个叫做WZR的学生,他跟我说,遇到超级难题,他就不会再继续做,积蓄力量冲击他觉得能完成的题目。
考场如战场,每次考试的真正目的不是为了解决所有的问题。我的考试的规则是什么?是连续两道题目做出来就给满分,而实际考试的时候有5道题目。看到所有的学生一开始遇到超级难题就去拼命尝试的时候,我是很郁闷的!策略啊!你不能总是刚正面,你得学会调整(元认知策略)!!!
周日下午,我也发现了2个好苗子,一个叫做ZFX,一个叫做CJY,第一题这么难,居然真画出个样子来了,那天给了3个满分,其中两个就是她们。她们画的并不完美,但是还是拿到了满分。这个过程恰恰说明,这个考试的设定,并不是静态的,而是动态的。
10010,五个题目,第一个题目超级难,然后连着两个题目特别容易;第四个题目比较难,最后一题容易。这个是什么?这个是八卦阵啊!打仗的时候,在面对八卦阵的时候,看起来没有机会,其实冲进去就是机会;看起来有机会,冲进去阵型一变化,就会被包围截杀。10010是整个教学过程中最重要的发明,当智慧发挥到极致,会越来越觉得道理都是相通的。
我从一开始就知道“五星红旗”一定要事后给出代码的,所以那个时候就是为了给学生传递信息用的,主要是传递两个信息:一个是“ 舍得”,有舍才有得,什么都舍弃不了,就什么都没有办法改变啊!考试的时候题目都是高于平时难度的,需要你发挥出自身水平的150%的实力,如果你发现自己的能力实在达不到,就要果断舍弃,要把力量集中起来冲击个别能够完成的题目;另外一个是事后的,也是我一开始就想好的,我会把完成的这个画五星红旗的操作过程写成一个带注释的.m文件发给学生们,让他们从这个过程中学会怎么遇到困难的时候能真的跨越它们;让他们怎么从一个“不求甚解”的状态提升到真正了解掌握Matlab矩阵操作和画图机制的状态!
五星红旗题的内容:
请按照图中提示画出中国国旗(要有格子和圆,以及四颗小五角星和大五角星的连线)。
五星红旗的注释版如下:
------------------------------------------------ by psyJt 2017/6/11
% filename is:: drawChineseFlag.m
% 第一题:请按照图中提示的方案画出中国国旗(要有格子和圆,以及四颗小五角星和大五角星的连线)
% 画国旗本来是特别好的题目,目的是为了让大家掌握矩阵操作和画图机制
% 但是由于某同学创造了一套方法把各种形状填充刷爆之后,这个题目失去了它原来的价值,大家不再认真理解画图背后的机制,因此画国旗的题目到了岌岌可危马上就要舍弃的境地
% 那天晚上我苦思冥想,终于找到一种方法,避免大家不!求!甚!解!的情况下,能真正理解其中的画图机制,现在这个题目就是在这样的背景下创建的
% 是脚本,上来要先清空
clc;clear;
% 这是画国旗任务,画图自然要用用图形窗口来画,所以先要创建一个图形窗口
hFigure = figure(1);
set(hFigure, 'position',[0 0 600 400]); % 生成一个图形窗口之后,要设定它的原点x y和宽高 width height
% 然后创建坐标轴
hAxes = axes('parent',hFigure); % 坐标轴来到这个世界的第一个任务是'认爹',你属于哪个图形窗口的,先明确好从属关系
set(hAxes, 'units','pixels', 'position',[0 0 600 400], 'color','r');
axis([0 600 0 400]); % 这个地方就是我说的,不求甚解的地方!不管你是去看WZH还是GL的代码,是没有这个设定的,也因为没有这个设定,R的初始值很诡异,有时候不管怎么设它好像都是对的(日本国旗的圆都能画对,其实是碰巧对,不是真的掌握了)
set(hAxes, 'xtick',[0:20:600]); % 坐标轴x轴可以用这个方法设置起始值、刻度和最大值
set(hAxes, 'ytick',[0:20:400]); % 坐标轴y轴可以用这个方法设置起始值、刻度和最大值
grid on; % 很巧妙,可以用grid on将刻度画出来,对应题目中要求的需要画格子的操作
% 因为题目中还要求画线,所以需要把大五角星和小五角星的坐标找到,每个格子是20像素,这个是数出来的
% 大五角星 - 第一颗小五角星
a = [100 200]; b=[300 360];
line(a,b,'color','k');
% 大五角星 - 第二颗小五角星
a = [100 240]; b=[300 320];
line(a,b,'color','k');
% 大五角星 - 第三颗小五角星
a = [100 240]; b=[300 260];
line(a,b,'color','k');
% 大五角星 - 第三颗小五角星
a = [100 200]; b=[300 220];
line(a,b,'color','k');
%这样的划线是不完整的!! 由于后边会放置新的坐标轴,因此会形成遮挡,如何破解这个遮挡,需要在坐标轴内部的圆中间画半径,把整个连起来(这是最难的部分!!)
% 画一个大五角星
hAxes_DaWJX = axes('parent',hFigure);
set(hAxes_DaWJX, 'units','pixels', 'position',[40 240 120 120]);
axis([-60 60 -60 60]); % 坐标轴之所以调整成现在这样,是为了方便画圆(这又是另外一个细节,重要!!!)
% 这里采取了直接画五角星的做法,在拼音输入法敲入 'wujiaoxing'选实心五角星的那个选项
text(0,10,'★','horizontalalign','center','fontsize',98, 'color','y');
hold on; %这里要hold on是因为后边还要画圆
alpha=0:pi/20:2*pi; %角度[0,2*pi]
R=60; %半径
x=R*cos(alpha);
y=R*sin(alpha);
plot(x,y,'-k');
hold on; %这时候就可以释放了
axis off;
% 指向第一个小五角形
a = [0 R*cos(atan(3/5))]; b=[0 R*sin(atan(3/5))];
line(a,b,'color','k');
% 指向第二个小五角形
a = [0 R*cos(atan(1/7))]; b=[0 R*sin(atan(1/7))];
line(a,b,'color','k');
% 指向第三个小五角形
a = [0 R*cos(atan(2/7))]; b=[0 -R*sin(atan(2/7))];
line(a,b,'color','k');
% 指向第四个小五角形
a = [0 R*cos(atan(4/5))]; b=[0 -R*sin(atan(4/5))];
line(a,b,'color','k');
hold off;
% 第一个小五角星
hAxes_XiaoWJX1 = axes('parent',hFigure);
set(hAxes_XiaoWJX1, 'units','pixels', 'position',[180 340 40 40]);
axis([-20 20 -20 20]);
text(-2,-1,'★','horizontalalign','center','fontsize',32, 'color','y', 'rotation', 90 + atan(3/5)/(2*pi) * 360);
hold on;
alpha=0:pi/20:2*pi; %角度[0,2*pi]
R=20; %半径
x=R*cos(alpha);
y=R*sin(alpha);
plot(x,y,'-k')
hold on;
axis off;
%
a = [0 -R*cos(atan(3/5))]; b=[0 -R*sin(atan(3/5))];
line(a,b,'color','k');
hold off;
% 第二个小五角星
hAxes_XiaoWJX2 = axes('parent',hFigure);
set(hAxes_XiaoWJX2, 'units','pixels', 'position',[220 300 40 40]);
axis([-20 20 -20 20]);
text(-2,-1,'★','horizontalalign','center','fontsize',32, 'color','y', 'rotation', 90 + atan(1/7)/(2*pi) * 360);
hold on;
alpha=0:pi/20:2*pi; %角度[0,2*pi]
R=20; %半径
x=R*cos(alpha);
y=R*sin(alpha);
plot(x,y,'-k')
hold on;
axis off;
%
a = [0 -R*cos(atan(1/7))]; b=[0 -R*sin(atan(1/7))];
line(a,b,'color','k');
hold off;
% 第三个小五角星
hAxes_XiaoWJX3 = axes('parent',hFigure);
set(hAxes_XiaoWJX3, 'units','pixels', 'position',[220 240 40 40]);
axis([-20 20 -20 20]);
text(-2,-1,'★','horizontalalign','center','fontsize',32, 'color','y', 'rotation', 90 - atan(2/7)/(2*pi) * 360);
hold on;
alpha=0:pi/20:2*pi; %角度[0,2*pi]
R=20; %半径
x=R*cos(alpha);
y=R*sin(alpha);
plot(x,y,'-k')
hold on;
axis off;
%
a = [0 -R*cos(atan(2/7))]; b=[0 R*sin(atan(2/7))];
line(a,b,'color','k');
hold off;
% 第四个小五角星
hAxes_XiaoWJX4 = axes('parent',hFigure);
set(hAxes_XiaoWJX4, 'units','pixels', 'position',[180 200 40 40]);
axis([-20 20 -20 20]);
text(-3,1,'★','horizontalalign','center','fontsize',32, 'color','y', 'rotation', 90 - atan(4/5)/(2*pi) * 360);
hold on;
alpha=0:pi/20:2*pi; %角度[0,2*pi]
R=20; %半径
x=R*cos(alpha);
y=R*sin(alpha);
plot(x,y,'-k')
hold on;
axis off;
%
a = [0 -R*cos(atan(4/5))]; b=[0 R*sin(atan(4/5))];
line(a,b,'color','k');
hold off;
%% 对当前图形窗口进行 getframe的抓取图片的操作
hFrame = getframe(gcf);
imgChineseFlag = hFrame.cdata;
% 保存为jpg图片
imgPathName = 'ChinseFlag.jpg';
imwrite(imgChineseFlag, imgPathName,'jpg');
---------------------------------------------------------------------------------------------------------------------------
我们来看效果:
中国国旗,带注释一口气写完,我用了39分钟,这就是我的真实水平。
还是那句话,我出考试题目一定有迹可循,所以,下一个题目考什么国家的国旗?
.
.
.
.
.
.
.
.
.
.
.
..
.
.
.
.
.
.
.
.
.
.
聪明的一休,你猜对了,当你会画长条、圆之后,如果我解锁了五角星,那么考试题目一定会是:朝鲜国旗思密达 O(∩_∩)O~
韩国国旗怎么画?
最后,我总结一下从2015级第一年Matlab入门课到2016级第二年Matlab入门课的improvements,成长是很重要的,一定要不断地成长:
(1)装备升级:我发现总有那么几个学生的装备达不到Matlab的最基本的要求,所以我提前准备了几台笔记本,上课的时候带过去,确保至少上课和课后的作业,这几个学生不会因为装备的原因学习受到影响。对于条件还可以的学生,我一般都会推荐他们把内存加到8G,换成SSD固态硬盘。
(2)提前Matlab软件安装:2015年级的TangTang告诉我说,有十几 二十个学生找过她安装Matlab,她都给拒绝了。这件事对我触动很大,因为很多学生学不好Matlab不是因为其他原因,就是因为没有准备好。所以,2016级一开学我就让QZJ去他们的群里发消息,学生只要把笔记本带过来放在我办公室就可以自己先去忙,过个1个小时后回来,matlab就装好了。
(3)增加现场演示:我发现演示的效果很好,所以增加了现场演示的环节。1423的大屏幕,或者用我自己的投影仪,一边码代码一边讲解,有不懂的马上就问,这个过程对学生的提升会起到很大的帮助。有学生反馈说,看三四个小时还不如看老师演示10分钟的呢。当然,现场演示还有一个好处,就是让学生意识到,码代码不一定要拷贝代码,可以直接敲代码。我都是直接徒手敲代码的,想到哪写到哪,整个过程行云流水,也会对学生们产生正向的示范作用。
(4)答疑升级:学生一开始不重视答疑,总以为凭自己的能力可以搞定Matlab拿到理想的分数。实际的情况却是,很多学生都有一定程度上高估自己能力的倾向。教练还是很重要的,一开始的各种规范的建立需要有专业教练的指点。除非是天才级的,不然这个互动的过程是必不可少的!而且,即便你是天才级的,有教练指点和没有教练指点,差别还是挺大的。现在都有QQ和微信,不用来现场答疑直接通过QQ和微信答疑效果也是挺好的。答疑必不可少!为了答疑,我也是蛮拼的,每周会让YYM和QZJ他们把好吃好喝的买好,鼓励学生来答疑。糯米滋真的很好吃(口水)。有学生在QQ群里说,能不能买哈根达斯(爱她就带她吃哈根达斯),我开始不知道这冰淇淋这么贵,后来在哈根达斯冰淇淋店刷卡付钱的时候,发现额度相当大,但是都答应学生了,做不到伤士气,感觉自己为了学生好好学习,确实是挺拼的。
(5)课代表升级:我记得我跟2015级的课代表WY说,你去买一些零食答疑的时候给大家吃。“好的!”答应的很干脆。结果,答疑的时候WY压根就没有买零食。他说,老师我还以为您是开玩笑的(流汗!)。第二周答疑,我又跟他说,去买一些零食。他说“这次一定买!”然后周末答疑的时候,我连他人都找不到。虽然是很小的一个细节,但是我确信因为没有零食的诱惑,至少有20个同学在来答疑和不来答疑摇摆的时候,选择了“要不这周就不去答疑了吧”。2016级的课代表YYM是我在安装Matlab的过程中淘到的宝贝,她和QZJ组成的超级靠谱的黄金组合,在很多教学过程的细节都做到极致的好,使得这一级的学习效果大大提升。我在整个教学过程中发现,四川重庆的娃都不怂!做事情很认真,能把我的一些想法完全贯彻下去,而且他们学东西也很快,真的很感谢遇见这么好的课代表!!
(6)教学目标升级:可能是第一年上Matlab入门课,我还是有点懈怠,教学目标定得有点低了。我是在大二的实验心理学实验课的时候突然意识到教学目标离大二的教学要求还是有一点差距。所以,第二年我有意识地提升了教学目标。
(7)更新评价标准升级:在整个教学过程中,我会注意观察学生身上的品质,对于具备以下几种品质的学生,我都会点赞:属性一,“越挫越勇”,在每次考试结束后会懂得总结并带着新的领悟再来一次的学生,给这类带坚韧品质的学生点赞满分;属性二,“内心尊贵”,有时候考试前我会故意试探学生说,要不要给你透露点题目,有学生就会果断拒绝我说“不要!”,给这类自带内心尊贵的学生点赞满分;属性三,“探索未知”,对新情境的知识充满好奇心和探究欲望,对这类学生我会毫不犹豫点赞满分;属性四,“服务他人”,人品好,不仅自己优秀,还乐于帮助身边的后进的同学,点赞满分;属性五,“学习分享”,刷爆考题之后,还懂得把自己的心得总结成帖子并分享给同学们,点赞满分。
(8)考试题目升级:根据过去六年的教学经验,我开发了一系列的考试主题,当前的这个利用Matlab画各国国旗的教程就是其中之一:愤怒的小鸟系列;文件读写和文件夹管理系列;画国旗系列;文本图片化系列;倒计时系列;函数系列;Matlab GUI系列;图像处理系列等等。单纯跑步是很枯燥的,如果有一定的活动/任务带动能大大降低活动的枯燥程度,让学生专注于内容本身,学起来就会很有意思,大大地激发学生兴趣。
。。。。。。
教学没有什么所谓的技巧或者秘诀,教学就是要用心,当你把方方面面的工作做好了之后,教学效果自然就上去了。这里的最关键的因素,是爱,北师大之所以是一所伟大的学校是因为北师大有“大爱无边”的优良传统。学生怎么评价老师是不重要的,学生的成长才是最重要的,把学生的成长放在第一位,不断改进,不断升级,不断成长,不断地促进学生发展,把学生培养成可持续发展的个体,这不就是吾辈的使命吗 O(∩_∩)O~