About Cheating and Plagiarism

我先描述一下此次事件的具体经过。昨天3月15号的晚上十点,是第四次作业的deadline。在15号之前,只有五位同学提交了作业,而在临近deadline的这几个小时内密密麻麻地提交了二十多份作业。和第三次作业一样,我会去github上把各位的代码clone下来看看(就像各位会看看我的一样),这是栋哥搞博客教学的目的,能让我们之间有交流的机会,甚至能够领略其他学长、甚至是业界大牛的风采。同学们的作业当中,有bug的我还给他们提出了意见(例如郁杨的博客下面就有我提的意见)。

当时我看同学们的代码,有让我比较震惊的事情发生,有的同学的一些代码与我的几乎一模一样

例如,接下来两张图是我写的。

这下面是一些同学的代码。

我发下面这张打过马赛克的图片,主要的目的是想告诉你们,我心里有谱。

在看到第一份“雷同”的时候,我倒是觉得我能帮助到他人,自我感觉还不错。但是接连几组的雷同代码出现在我的面前,我坐不住了。我看了这几组“借鉴”了我的代码的同学们的博客,只有恺翔同学在博客中明确的标注了有参考我的代码,其他的人并没有提到,甚至还说这是自己想出来的思路。

所以,我在班群里说了这么一句话。

很让我难过的是,到目前为止,大部分“借鉴”了我的代码却没有标注的人还没有来找我说明。反倒是让一些只是单纯地看了我博客的人觉得不好意思来向我道歉。

我真的觉得,有点悲哀的。

我也是从新手走过来的,在之前,我遇到一些问题的时候,我也很希望有人能来帮助我。如果真的有人能帮到我了,我会很感激他们。这次能有缘分和大家做同学,我想,既然有这个机会帮助到大家,我就会尽最大的努力提供我能提供的帮助。

我确实有点生气,也把这件事情跟几个朋友倾诉了。有的人跟我说干脆以后你把作业写好等到deadline之前再发。说实话这不是我的风格,我并不想把什么事都堆到deadline之前一点点时间再做,那样或许会为了及时完成而应付导致作业质量下降。相反,我每次整理一篇博客大概都会花一两个小时甚至更久的时间。发完之后,我还会从头到尾看几遍,字斟句酌,生怕我哪里写的不通顺,可能让人看不懂;生怕哪里的语义表达不清,或许会产生误导……我对自己整理博客和写的代码有一个要求,那就是能让看我博客的各位看得懂!可是很讽刺的是,我费尽心思写出的博客,费尽心思写出可读性高的代码,确实可读性高了,所以你们也就很轻松地看懂,很轻松地拿去用了(我的方法并不是最好,我觉得王源、郁杨做的都比我好,但有可能,我的代码是最好借鉴的)。

还有一位朋友建议我只发博文不传代码,或者博客上锁,deadline之前再解锁。这有违我的内心:我不想提防我的同学们,相反,我很想帮助得到你们。知识需要学习并且分享,那才是大家写博客的意义,才对得起栋哥的苦心。而且我一直觉得,主动学习比被动学习更有效果,所以我经常乐于为他人讲解困惑,在主动为他人解惑时,也能让自己的水平提高。我向来不是藏着掖着的人,很久之前做过的各种笔记有人来找我要我也就给他们了。但我觉得,免费的才是最贵的。那些笔记,是我自己整理的,我自己的东西。直接向我要笔记的,往往是为了应付考试临时抱佛脚,我也不觉得他们能从中学到什么东西,或者整理出自己的东西。相比之下,我更喜欢的是能够来和我一起探讨问题的同学,那样才是我欣赏的态度。

或许有的人觉得,我很小气,我太神经质,我是傻逼之类的,我不会去妨碍你们这样想。我并不想表面上装作“和和气气”,那不是我赵畅的为人,我只是想做我自己内心认为对的事情。我帮助别人也不是为了让别人对我感恩戴德,而是你们这样子做(“借鉴”)并不是代表我的博客帮助了你们,相反,我会觉得是我害了你们!今天由于临近deadline,所以觉得在网上抄一份代码也无所谓,那么考试的时候也能作弊,写论文、做实验的时候也可以造假了?!不要觉得我是在危言耸听信誉是一个人最重要的东西,是需要用一辈子去积累的。如临深渊,如履薄冰!(看看国家的征信制度吧,只要你失去了自己的信用,那么以后买房买车,贷款什么的就别想了,够你吃一壶。)

我很感谢思泳同学能够直面这次的问题,知错能改善莫大焉。我很乐意为你解答你的疑惑。你提到了:

而对于不关键代码,……复制粘贴也算是抄袭的话,那就是不可理喻的了。

例如百度一下冒泡算法,就会发现很多种方法,如果说我们学会了其中一种方法,而在之后要用到这种方法发微博就要说明出处的话,那是不可能的。……作为一名程序员或学生,应该要全理解这段代码然后能在脱离网络的情况下写出来,复制粘贴是可以的,只是一种学习过程,当然,你不这么做现在也没有任何惩罚,只是这样自欺欺人是一定要在以后付出代价的

就算你认为这段代码不关键,但那是他人的工作成果。如果你自认为引用一下无所谓,那么请标明你的引用来源,更何况你“引用”过来是为了完成作业,作业的目的是为了让你学习,而不是什么压榨你的时间的存在,所以请认真对待作业。如果看了别人的思路有启发,那很不错,但最好还是写自己的东西

你举的冒泡排序的算法作为例子,我倒是觉得没有什么问题,我对于加粗的部分尤其赞同。然而这两件事情是不可以相提并论的,它们的属性不同。你可以通过百度冒泡算法来学习算法怎么写,但你不可以堂而皇之地借鉴别的同学的代码,这是有关于学术诚信的事情。

如果这种观点不对的话,并且你的观点是所有程序员公认而非某个人的个人观点话,请告诉我,我一定会改正。

最近我在学习CSAPP,我会去CMU的课程网站上使用他们的学习资料。在看他们的的ppt时,有一些东西让我非常的震惊。没错,就是震惊,只有这个词能形容我看到以下这个页面时候的感受。

Academic Integrity,学术诚信。在这门课还没有正式开讲之前,CMU使用了长达十页的ppt篇幅介绍关于学术诚信的重要性。先学做人,再学其他知识。其中包括的内容有

  • 哪些获取使用信息的行为是不符合学术诚信的要求的?
  • 到底哪些行为属于作弊、抄袭的范围?
  • 哪些行为不属于抄袭和作弊?哪些行为是受到鼓励的?
  • 如果你违反了学术诚信的规定,有什么后果
  • 场景分析,举了很多生动翔实的例子来说明。

我觉得我们中国的大学有一点理念确实落后于国外的大学,就是关于学术诚信。诸位应该很少有在大学时上过的课,老师有专门为大家科普学术诚信的内容把?到了期末考,作弊什么的现象屡见不鲜,甚至很多毕业论文的内容也被称为“学术垃圾”。下面我对上面几个内容翻译一些CMU课程条例中的规定,希望大家能够有所思考

以下都来源于CMU ICS 2017春季课程的PPT和课程条例,我是渣翻译,还请大家上网站看原文

Firstly,Ignorance is not an excuse!

不被允许的使用他人信息(use)的行为:
1.剽窃代码,包括复制、上网搜索、重新输入(注:看着别人的代码重打一遍)、窥视他人文档和代码。

2.重用原先的课程或者网络上的代码或解决方案。

不被允许的使用自己信息(supply)的行为:
1.分享代码(注:我不反对我们的课程形式,只是希望大家自觉)

2.口头为他人描述代码(注:这里指的是描述具体的代码段)

3.为他人提供非常细节的指导(注:providing detailed directions,自己意会为什么这个是作弊吧)

哪些行为不是作弊,甚至受到鼓励?
1.帮助他人在如何使用各种工具方面,包括但不限于系统、网络、编译器、调试器。

2.帮助他人关于高层次的设计问题(注:Helping others with high-level design issues only,比方说,探讨整个问题的框架,是允许的。如果需要讨论的问题要用代码来描述,那就不是高层次的设计问题)

3.帮助他人关于高层次的debug(Helping others with high-level (not code-based) debugging. 例如:你有一个流程图,但思路受阻,可以请教他人,他人指出你流程图中有一个流程不对)

4.向老师和助教请求帮助。使用老师或助教或课程提供的代码和页面。

特别地,在PPT中,还特别提到This is OK,Googling a man page for fputs。如果你某个函数不会用,是可以去查找它的用法的。

违规的后果

(注:截取几条)

AIV:Academic Integrity Violation,每个在CMU的大学生如果因为作弊或者诚信问题受到处分会记上一个AIV。

共勉


最后,塞翁失马焉知非福。起码说明我的代码和博客写的还是很好的,能够让大家看得懂。还有就是,很感谢几位支持我的朋友。

推荐几个链接给大家:

posted @ 2017-03-16 13:23  畅畅1  阅读(2046)  评论(5编辑  收藏  举报