|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Oracle收购Sun后Java前途未卜。自2003年以来,我承当了北京理工年夜学盘算机学院《Java言语程序计划》这门课的教授教养义务,从2000级到2011级,十年弹指一挥间。
这十年中,软件手艺的前进能够用上“飞一样平常”如许的描述词。响应地,我这门课程也在不休地厘革,特别是审核体例,由履历了以下历程:
闭卷测验(一张试卷定成就)-->闭卷测验+课程计划-->开卷测验(可带书,不同意带电脑)+课程计划-->完全的开放测验(可带书、可带电脑、可上彀)+课程计划
典范试题及谜底拜见以下链接
2008级测验试题在这里(2010年)
2011级测验试题在这里(2013年)
之以是走这条路,是由于我日趋构成了如许的一个概念:
以闭卷体例考程序计划,是最无用的审核体例,遗害无量。
为何这么说?
先来看看闭卷体例所带来的坏处。
1它请求先生往机器影象大批的常识。
以Java而言,你最少得影象两部份内容:Java语法和JDK中的罕见类的用法。语法还好说,JDK云云复杂,有几人能背上去?又能背下几?
更主要的,这引诱了先生将高中养成的进修办法间接使用于年夜学课程进修,而且这类办法看上往还真的“无效”,实际上是误人后辈。程序计划言语怎能如许进修?
扣心自问:我用Java/C#写了近十年程序,对Java/C#编程可谓熟习,但又能记得住JDK和.NETFramework中的几内容?我在实践开辟时不也是必要查询互联网和官方文档吗?
别的,Java/C#等言语的编译器己相称完美,开辟者看到的编译毛病信息已相称靠近实在的毛病缘故原由,再加上Eclipse/Visualstudio之类的IDE所供应的“智能改正”倡议,语法成绩早就不是程序计划言语进修的次要停滞。再让先生花大批工夫往影象这些语律例则,实无需要。
2它绑住了出题者的四肢举动
因为必需能让年夜部分先生合格,因而测验内容必需严厉地限定于书籍,出格地,还应当给先生在测验前以“指点”的名义“规定测验局限”,否则,年夜部分不合格,先生闹将起来,还真欠好开场。
一般来讲,课本的编写和出书要履历一个对照冗长的周期,并且一旦出书,最少坚持数年的不乱是基础请求,但这关于盘算机专业而言很要命,手艺前进与常识更新极快,别说数年,一年事后,课本中的有些内容大概就过期了,另有些内容乃至大概被放弃。闭卷测验强迫必需在这个“陈腐”的锅里炒冷饭,炒饭的人疾苦,用饭的人也疾苦。
何必呢?
以是近年来,我基础上保持了利用流动的课本,也保持了闭卷测验这类情势,而代之以开放式的不休更新的“PPT+大批实例”的教授教养体例。
复杂地说:我把Java编程相干的内容举行分化,每部分构成一个教授教养模块,每一个常识点或编程特征,我都供应一个能够运转和修正的实例。这些实例不但展现了特定的常识点或编程特征,实践上仍是一些能够复用的代码模块,先生既能够经由过程运转、修正这些实例把握特定的常识与妙技,更能经由过程把这些代码模块举行组装,开辟出新的程序。
因为保持了教材而接纳了模块化的PPT+实例,使得我能够很便利地年年更新教授教养材料,减少失落老的内容,增补新的内容。好比近几年我就把Java语法的教授教养课时举行年夜幅紧缩(全留给先生自学),到场了正则表达式、Ant、Android程序计划等外容,同时增添对开辟中十分主要的基本手艺(好比多线程开辟、对象汇合、数据布局与算法)等外容的先容。
我是一位教导事情者,其实不算程序员,但我一向对软件开辟有着深挚的乐趣,也写了多年的代码,因而在计划Java测验试题时,我力争让这些试题更靠近实在的开辟场景,并从中展现出我但愿先生勉力的偏向。
上面就以客岁岁尾计划的Java测验试题为例,扼要地说说这些试题的计划构思。
2011级的Java课程成就由两部分构成,卷面测验成就占60分,课程计划占40分。
卷面测验同意先生上彀乃至QQ间接相同。
有些人大概会疑虑,这么干,不是勉励先生互相剽窃吗?
这要看你怎样出题和怎样请求先生答题。
我出的题年夜多间接从开辟理论中抽取,就算你百度,也只能找到部分谜底,现实上,在科场上,仅2个小时,我很确信先生基本不成能有年夜多的工夫往渐渐百度一个成绩,敲代码都来不及,另有工夫往QQ?
第一部分判别题,这是常识性的题型,我只管拔取一些对照风趣和主要的常识点,这些常识点我多数在教室上讲过或现场演示过,来上课的先生应当会有这些印象,但那些没来上课的先生,做错就别怪我了。
这里我就先生逃课多说两句:
我在教室上点名抽查先生的上课率,影象里十多年来不凌驾五次,就这还年夜多是教务处请求的。我一向以为,假如你讲的课只会标新立异,还用点名这类体例强迫先生来听,其实是一种能干的体现。
我就从不委曲先生来听课。
我的立场是:
你来,我就只管把一些“干货”教给你,固然,你学不学得会是另外一回事,我最少包管本人有几货就倒几货。
黉舍又不是企业,师生之间没有合作干系,也没有基本上的好处抵触,躲甚么私?相反,先生往后越牛,先生脸上越有光华,就越满意。
想一想多少年退休以后能够和他人吹嘘:XXX你晓得吗?年夜牛吧!昔时我还教过他呢,事先就发明此先生凶猛……
团体虚荣心失掉满意,爽啊!
只惋惜两点:
1自己属程度无限公司,能倒的货其实无限。
2很多先生其实给延误了,年夜一年夜二堆集的开辟履历少得不幸,我讲的那些从理论中得出的工具,能发生共识的机率很少。
只管云云,我仍是抱着如许的概念:
该讲甚么仍是要讲甚么。即便先生听不懂,最少也能够留下个印象,等他们卒业走上事情岗亭,再把握起来就会快很多,究竟:没吃过猪肉,最少也见过猪跑步嘛!
至于那些喜好逃课的先生(我信任他们要逃毫不会只逃一门课),假如他们逃课把工夫用到邪道,我不仅不否决,乃至还赞成,我以为这些是有主意的先生。但假如逃课躺在宿舍里睡觉玩游戏看年夜片每天做梦,年夜好岁月花在这下面,……,假如是我的孩子如许,我早一巴掌轮已往了!
现实上,我不是你老爸,你爱来不来,爱学不学,任意。我本人还一堆事呢,没哪一个闲工夫管你!
最初再絮聒一句(这仿佛是先生的通病——话多):每一个人终极城市为本人的举动买单。
回到正题,再谈谈试卷。
第二部分是简答题,考察的面相称广。
试卷的第11题触及到Java开辟中的一个共同征象:100.1*2能失掉准确的值,100.1*3就不可了。我估量那些“经由过程看书学编程”的先生99%是不晓得会有这个运转了局的,我也不记得有哪本课本谈到过这个成绩,这个征象是我在开辟中碰到的,就把它弄到试卷上了。这题就看先生的剖析才能了。
第12题是Java编译器在编译泛型代码时的“擦除”特征,我在课上讲过,PPT中也有。晓得这个词是一回事,晓得用是另外一回事。有些同砚此题空缺,why?不凌驾10行代码,你敲到Eclipse里试一试,不就看到提醒了?
第13题是Android跨线程更新TextView的成绩。我次要是看看有无先生举行过略微深切一点的Android开辟理论。这道题回覆得欠好是料想中的。
第14题本意是送分题,我订的答题尺度是:只需谜底中有LinearyLayout或RelativeLayout之类词语呈现,就给分。但实践答题情形让我无语了,有云云多的先生此题是空缺。
我像个老僧人念佛似的每天夸大“下手下手”,总有些先生懒到一学期不翻开电脑编写哪怕一个Android使用程序。好吧,偶供认败了,偶不妥老僧人了,偶出家。
第15题是程序功能优化的标题。关于Integer与int之间的区分与接洽我在课上讲过良多,还在课程上展现过JDK的源码和反汇编出来的字节码指令。信任给先生的印象深入,因而年夜多半先生都晓得Integer比int慢的缘故原由,但只要几个能发明并注释第二个征象(由于我课上没间接讲):为何不论是Integer仍是int,第二次、第三次代码运转的工夫比第一主要少那末多?
第16题是程序架构计划的成绩。对先生开辟履历少的近况我心知肚明,因而对此题我从不报太年夜期望,先生晓得用try/catch就好了。假如晓得能够将JVM抛出的通用非常转换为特定的营业逻辑非常那就不错了(有一两先生这么干了),假如还能进一步谈到多层架构下的非常处置战略那就更好了(没有一个先生谈到这些)。
第三部分是编程题。
这部分标题我要检查。我低估了把代码从电脑上抄到试卷上的事情量,以是100%的先生工夫不敷,最初一道题没有一个能做完的。
关于这个成绩,我的调剂战略是:
下一届先生我将不再请求他们供应完全版的源代码。你只需以笔墨、流程图乃至是手绘的表示图体例告知我你的编程思绪,再列出个中的关头代码就好了。
这大概会带来必定的反作用,好比某先生大概编程不错,但笔墨工夫太差,写的工具我看不懂。但我又想,表达才能也是一种很主要的才能,假如你写的程叙文档连我这类具“专业常识背景”和“超强纠错才能”的先生都看不懂,那其别人就更看不懂了,扣你分也别叫屈!
抓紧工夫学学语文很主要啊!
另有,练练字也很主要。有些先生试卷上谁人脏啊,谁人乱啊,我就不说了……
心境卑劣,多扣两分,实为人情世故。别怨我。
第17题请求一个办法向外界前往多个值,一个地道的编程技能考察题,这题几年前考过。就有先生百度到了,间接Copy到卷子上,最后怕我扣分,又说明“这是经由过程百度从金先生的博客上Copy来的,不要算剽窃哟……”。
“连变量名都没改,一成不变Copy,本来这不是剽窃”——我靠,古代版孔乙已啊。
不外这几个先生还算老实坦率,我心柔嫩,都没扣分。
第18题请求把一个数组转换为环型链表。很复杂的题,但我没发明有同砚在办法代码前部增加数占有效性检测的代码:好比传进的数组参数为null或为空的情形。看来放学期OOAD我得好好讲讲防卫型编程成绩。
第19题是一道复杂的多线程题。有些先生对照伶俐,他们发明这三个事情义务内容高度分歧,以是只写了一个Thread子类,给其增加一个begin和end字段指明轮回的肇端值和停止值。有些先生就对照机器了,三个线程就写了三个类,这三个类大批代码是一样的,就是轮回肇端值与终值分歧,因而抄代码到卷子上抄到手都断了。
同砚,对形成你抄代码抄到手断的情况我暗示深切怜悯与自责,并包管今后不会再请求人人年夜范围地缮写代码。但你是否是也该动动头脑写出伶俐一点的代码呢?
第20题是一个对照综合的标题。后面也说了,因为我思索不妥,100%的先生没一个能答完整题的,由于没工夫了。我信任假如授与充足的工夫,应当会有些无能的先生完成这道题。
第一小问没甚么好说,假如不必JDK7中的现成组件,本人写一个递回遍历文件树的办法就好了。递回是一个程序员的基础功,递回都写不出来,你能够洗洗睡了,别干这行了。Soeasy.
第二小问排序。有些同砚间接利用Collections.sort办法升序排序,再reverse()一下,它就降序分列了,间接利用JDK中响应组件而不是手写冒泡排序等办法。这是伶俐的先生。
在实践开辟中,当你必要完成某个功效时,先往查查JDK文档,看看有无现成的,没有或现有组件不克不及满意需求,再本人下手。不要动不动从头创造轮子,现实证实,本人创造的轮子常常埋没着诸多本人认识不到的BUG或成绩,一般不如那些经由对照严厉测试的JDK中的“轮子”牢靠。
第三小问分组。这里的关头是你必要选择符合的数据汇合范例。不晓得是我写的成绩形貌有成绩仍是先生在了解上有成绩,我明显在标题申明中写了“好比”两个字,N多先生却恰恰以为“只要”三个组——txt、exe和无扩大名。同砚,你见过哪一个操纵体系中只要这三品种型扩大名的文件?那些不是这些扩大名的文件你放到哪往呢?间接疏忽失落?
这道题中:组的个数是变的,每一个组中的文件个数也是变的。
针对这个需求,你选择JDK中的哪些对象汇合来机关出切合本题场景请求的数据布局?这是这道题的关头点。
第四小问线程同步。我的PPT中先容了N种用于完成Java线程同步的组件与办法,另有N个例子,良多都能够用在这里。但没有一个先生能准确地完成这一小问的开辟义务,我估量缘故原由有二:
(1)工夫不敷了
还有就是总有人问我到底该学习什么语言,什么语言有前途,那么我的回答是不论是C,C++,java,.net网页编程,ruby,asp或是其他语言都可以学,编程的关键不是语言,而是思想。 |
|