大学生就业寒冬中的冬日暖阳在哪?
——向在校计算机专业大学生进一言
断断续续地花了约两个星期的时间,今天终于将Java试卷给判完了,长舒一口气。判卷真是一件苦差事,累人。
在批阅试卷的过程中,我有不少感触,联想到当今大学生就业形式的严峻,觉得如果将我的这些感触说出来,虽然不能直接帮助学生就业,但对于许多在校生来说可能会有点帮助。
先简单地说一下试卷的总体情况:
本次考试主要考核学生对Java面向对象各项基础知识与基本编程技能的掌握程度,与各软件公司的Java笔试试题相比,本次考试在深度与难度上差很远,出的都是一些很基本的题目。
考生为我校计算机学院2006级的学生,共120名。
尽管我觉得题目出得很容易,但在这一百多份试卷中,各方面都完成得很好的不多。我说的好主要指以下这几个标准:
(1) 答案正确无错;
(2) 对问答题的回答切中要害,简明扼要;
(3) 写出的代码规范易懂,能用简单的方法实现题目要求;
(4) 卷面整洁。
下面我先说一些在试卷中出现的非常典型的现象,并试作分析。
1 从书本学编程
从编程题可以看到,有不少同学基本上只是看书上的程序,认为“看懂”就行了,却没有动手编过自己的程序,因此,在他们书写的代码犯了许多“低级”的错误,试举几例:
l “\n”,“/n”不分
l 双引号和单引号不分,想当然地认为字串等于字符,比如’’和””是一样的。
l 变量未定义就使用,或者不理会变量的作用域,比如在for语句内部定义的变量在for语句外部又用上了
l 声明为private的变量可以被外界直接访问
l 大量漏掉语句后的分号“;”
l 大小写不分,比如 “For”与“for”;光是空引用我就见到了“NULL”,“null”,“Null”,甚至还有“Nul”。
l “大于等于”不是用“>=”,直接将数学上的“大于等于”符号放到代码中
l 返回int类型的函数没有return语句
l ……
这些问题,如果动手编过程序是不可能犯的,即使一时疏忽,也不应该在多段程序代码中重复同样的错误 。
我在讲课过程中强调过无数次“动手”的重要性,但仍有许多学生不动手编程,只看书来学习程序设计,这样的“赵括”在学生中还是有不少,对此,我实在没什么话好说了。
2 缺乏开发经验
这点与第一点是紧密相关的,由于没动手或动手少,学生们写出的代码就出现了许多不规范之处,举几个例子:
l 有些学生写的程序中有需要比对两个浮点数是否相等的语句,大多数学生都直接使用“==”来比对两个double类型的变量,其实应该求这两个数值的差的绝对值,当此差值小于一个很小的数时就可以认为这两个浮点数是相等的,这是因为当前的计算机无法100%精确地比较两个浮点数,这个编程细节我没强调,教材上也没说,因此好多学生都不知道应该怎样做。
l 试卷中有一个编程题目是要求编写一个实现Comparable接口的Book类(因而其对象可以相互比较大小),一个学生写的示代码如下:
class Book implements Comparable
{
public String bookName;
public int bookPrice;
public int compareTo(Object other)
{
if(this.bookPrice>other.bookPrice)
return 1;
if(this.bookPrice<other.bookPrice)
return -1;
return 0;
}
}
上述代码不对other参数进行类型转换就直接使用,也没有判断一下other为空引用时函数如何处理,应该返回什么样的值,虽然考试时比较紧张,但进行类型转换是不应该忘记的,因为不这样做根本通不过编译。
l 用复杂的方法来解决问题。上述编程题中要求编写一个函数找出存放在一个对象数组中书价最高的Book对象。并要求以一个保存了3个Book对象的数组为例。就有学生这样编写这个查找函数:
先用第一个Book对象与第二个对象比,然后将两者中大的那个再与第三个Book对象比。他为此写了一个嵌套很深的if语句。
程序功能是实现了,但这样一来,如果数组中有四个Book对象,他写的函数就没有用了,因为他的代码只是针对包含3个对象的数组写的,其代码几乎没有任何可复用性。
另一个的学生是这样做的:
他先new一个空的Book对象,然后再设几个中间变量(i, j , price之类),接着用这些中间变量在数组中先比对每个Book对象的Price,找到最大的Book对象后,再将这个Book对象的属性值逐个赋给前面创建的那个“空”的对象,再将此对象return出去……。
其实,Book对象在前面已实现了Comparable接口,因而直接调用其compareTo()方法比对,然后直接return出去不就完了吗?为何要绕了这么大一个圈?
l 考虑问题不全面,程序代码没有充分考虑到很可能发生的情况(比如对函数参数不进行有效性检测,想当然地认为数组中一定保存有对象的)等等,这种情况在试卷中太多了。
l 对业界的现状几乎是一无所知。在试卷中我出了一题:“简述J2EE,J2SE,J2ME这三个概念的区别。”这纯粹是送分题,只要你将这3个缩写的名称写全了就给分,但结果还是让我泄气,仍有近10名同学学了一学期的Java,不知道这3个东东是什么,他们给出的答案五花八门。为了节省时间,这里就不列出这些同学的“奇异答案”了。
这部分原因在我,因为这门课主要介绍Java面向对象编程特性,因此我只是在开头提了一下这些概念,但如果一名学生平时上上相关技术网站的话,是不可能连这几个最常见的术语都不知道的,这反映出一点,有一部分计算机专业的学生对业界技术发展的现状了解很少,而且好象他们自己也不关心这一点。
3 “细节”不细
阅读好的学生的试卷是一种享受,整个卷面干净整洁,回答问题条理清楚,所有代码都有缩进,并且在关键之处都加了注释,字也写得很工整,看上去让人心情开朗。
而有的学生就反其道而行之,整个试卷涂抹得比包公的脸还黑,这里一个箭头,指示下一段代码在某个角落里;那里一个叉叉,告诉我这段代码不要了,紧接着又是一个圈,圈了几行写得东倒西歪的代码,要让我去“动态组合”出他的代码……
我晕,为何你不能想清楚了再写?把试卷弄成这样,只能让别人感到你写程序的思路不清,做事缺乏条理。
我就知道有的学生会犯这个毛病,在考场上就说了,要求他们保持卷面整洁,并且我给编程题专门设了一分,凡是代码写得乱的,就扣掉一分,结果这一分不少学生都给我扣掉了。现在看来,这分太少了,以后考试加大到5分,凡是把试卷当草纸的,二话不说,先扣5分再说。
另外,有的学生不看题目,试卷上明明写得很清楚,简答题要在答题纸上回答,可仍有四五个学生直接在题目的空隙处答题,字写得比芝麻还小,我眼还没老花,仔细分辨还能认得出这些中国字,如果是一位老教师,估计会直接给0分,这反映出什么?很明显,这个学生是个粗枝大叶的人,我想,如果未来他要负责一个项目,会不会连用户想要什么都没弄明白就一头砸进去编码?
更让人感觉不好的与计算机无关,是语文问题。
试卷上出了5道简答题,每道题少则二十多个字,最多一百多字就可以回答清楚,可有的学生回答了半天,写了一堆,就是没有回答到要点上。
有的学生写的句子主谓宾不分,几个句子揉在一块,同时兼具汉语与英语语法,让人看了半天硬是没看明白他写的句子其含义是什么。
有的同学错别字超多,五六句话,几十个字中就可以挑出好几个错别字,这是不是电脑惹的祸?因为都用拼音输入,所以大家都不会写字了?
在此提醒注意一下,求职简历和面试笔试试卷中千万别出现这么多的错别字,那会砸掉你的工作机会的!
另外,以下为我出的另一道简答题:
面向对象软件系统有许多采用“事件驱动”运行模式,请解释一下什么是“事件驱动”。
我的原意是想了解一下学生对于这一概念的理解程度,因为书上没有现成的答案,我希望他们能用自己的话说清楚。然而有不少学生只会照搬书上的东西,他们随意从书上搬了一段下来硬套上去,或者东拉西扯,不知所云。这道题能用自己的语言表达清楚的不多,我想这不仅是技术理解的问题,更是语言表达能力的问题,这棒子是不是应该打到“应试教育”头上?
4 小结
本文仅仅是针对我所批改的120份试卷的情况进行的一个简单的分析,好的方面我没说,重点放在不足的地方。因为“好的优点不说跑不掉,坏的缺点不说撵不走”。这仅仅只是一次普通的考试,但如果这些不好的习惯被带到职场上,特别是在应聘笔试时你也来个错别字满天飞,整个答卷“一塌糊涂”,我想,好的工作机会恐怕与你无缘。
今明两年是大学生就业的寒冬,据说明年有超过600万毕业生要找工作,同学们,你们想好了怎样过冬了吗?
有的学生想以考研为手段避过这一段就业寒冬。但如果这些毛病没能得到改进,两年之后研究生毕业时,恐怕情况不会比本科毕业时好到哪里去,很可能是“死刑缓期两年执行”。
在此,我对大学生们提几点期望:
(1)对于要考研的同学,希望读研的两年,能成为你各方面素质得到提升的两年。
(2)对于要找工作的同学,希望你注意我提到的这些细节问题,精心准备,争取能早日找到满意的工作。
(3)对于还在校的同学,请抓紧在校的时间,多学点东西。古语云:艺多不压身。另一句俗语:再大的荒年也饿不死手艺人。未雨绸缪,居安思危。这是前人多少年经验的总结。
只要有真才实学,哪怕在“寒冬”中,你也会有“冬日暖阳”。然而如果腹中空空,哪怕艳阳高照你也会感到寒气袭人,道理很简单:因为处于激烈竞争的市场环境下,IT企业不愿也不敢养闲人。
————————————————————————————————————————
由金旭亮老师参与讲授的.NET专家培练营已上线,课程详情请见xuetang.itcast.net/
分享到:
相关推荐
作者金旭亮将其专业见解和实践经验融入到这本书中,让读者在应用层面上深入理解面向对象编程(Object-Oriented Programming,简称OOP)的设计原则和模式。本书内容涵盖了.NET 4.0环境的搭建、面向对象编程基础、设计...
《编程的奥秘--.NET软件技术学习与实践》是一本难得的学习VB.NET的好书,是金旭亮老师贡献给初学VB.NET者的一本启蒙书,有了这本书的指引,我们就能踏上面向对象编程之路。《编程的奥秘--.NET软件技术学习与实践》...
《金旭亮.NET系列》是一套全面介绍.NET技术的教程,由知名IT专家金旭亮编著。这套教程旨在帮助读者在短短七天内迅速掌握.NET框架的核心概念和实际应用,是初学者入门和专业人士提升技能的理想资料。下面将详细阐述...
可以使用Visual Studio或其他工具自动创建服务主机,也可以手动使用ServiceHost类在代码中打开服务。 5. **实例化模式(Instance Management)**:控制服务实例的创建和生存周期。有单例、多例和会话实例等模式,...
金旭亮-ASP.NET程序设计教程
### 金旭亮WCF课程系列之WCF概述——深入解析WCF技术 #### WCF:从面向对象到面向服务的转变 WCF(Windows Communication Foundation),作为.NET Framework的重要组成部分,自.NET3.0版本起引入,标志着从传统的...
【金旭亮C#课件】是一套由知名讲师金旭亮精心编排的C#编程教学资源,包含了丰富的学习内容。这套课件总计10个部分,旨在全面讲解C#语言的基础与进阶知识,适合初学者和有一定经验的开发者进行自我提升。 在C#这门...
金旭亮查找大文件工具是一款非常实用的电脑大文件搜索查找工具。您可以指定文件搜索位置以及文件的大小,软件在接受到您的指令之后就可以按照您的条件为您搜索相关的文件,并且在搜索后您还可以直接打开所在文件夹...
此教案针对零面向对象基础的学生,在前3讲的基础之上系统介绍“类”和“对象”这两个核心概念及其在多窗体编程中的应用,包括一个47页的PDF文档及多个示例源码,VS2010格式。后续教案将陆续发布,请关注CSDN博客上的...
在.NET 4.0面向对象编程漫谈基础篇中,金旭亮详细介绍了.NET框架下的面向对象编程的基础知识和技巧。面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它使用“对象”来设计软件。对象可以包含数据...
在OOP中,数据和行为被封装在一起形成对象,这有助于构建更为复杂且灵活的应用系统。 #### 1.2 面向对象的核心概念 - **封装**: 封装是将数据和操作数据的方法绑定在一起,同时隐藏对象的具体实现细节。例如,在...
《ASP.NET程序设计教程》是金旭亮先生的一部经典著作,主要针对ASP.NET平台进行深入浅出的讲解,旨在帮助读者掌握ASP.NET的核心技术和实际应用。本教程结合实例源码与基本素材,使得学习过程更为直观和生动。 在本...
金旭亮老师的书既通俗易懂又不乏深度,非常适合入门,虽然是讲.Net2.0,但丝毫不影响其价值,识货的人自然懂得!pdf扫描版,非常清晰,完整三级书签,文件较大,受csdn只能上传小于60MB的限制,只能压缩为4个分卷...
金旭亮《C#面向对象程序设计》教案_5:继承、接口与多态。此教案在前4讲的基础之上讲解初学者者比较难于理解的“多态”特性。包括一个39页的PDF文档及数个VS2010示例。前几讲的教案请访问...
本资源包是金旭亮.NET3.5系列课程中的一部分,包括一个PDF文档和几个VS2008示例项目,主要介绍如何在WCF应用程序中实现各种信息交换模式,包括“请求/应答”,“单向通讯”,“双向通讯”和“事件驱动”。...
本资源包是金旭亮.NET 3.5系列培训课程的一部分,重点介绍WCF开发分布式软件系统中非常重要的并发控制与实例管理的技术领域。包括11个VS2008示例项目和一个90页的PDF文档,要求大家动手进行实验,PDF文档有对实验...
献给所有对技术有好奇心和激情的软件工程师们