我先描述一下此次事件的具体经过。昨天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。

共勉


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

推荐几个链接给大家:

About Cheating and Plagiarism的更多相关文章

  1. EECS 649 Introduction to Artificial Intelligence

    EECS 649 Introduction to Artificial IntelligenceExamElectronic Blackboard Submission Due: April 24, ...

  2. ICT638 Mobile and App Development

    Assessment Cover SheetStudent ID CohortStudent NameProgrammeEnrolledDiploma in Information Technolog ...

  3. BZOJ2348: [Baltic 2011]Plagiarism

    2348: [Baltic 2011]Plagiarism Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 304  Solved: 141[Submit ...

  4. 【论文笔记】用反事实推断方法缓解标题党内容对推荐系统的影响 Click can be Cheating: Counterfactual Recommendation for Mitigating Clickbait Issue

    Click can be Cheating: Counterfactual Recommendation for Mitigating Clickbait Issue Authors: 王文杰,冯福利 ...

  5. Cheating sheet for vim

  6. BZOJ2368 : Modern Art Plagiarism 树同构

    枚举$T_1$的树根,然后DP,设$f[i][j]$表示$T_1$的子树$i$是否存在包括i的连通子树与$T_2$的子树$j$同构. 若$j$是叶子,那么显然可以. 若$deg_i<deg_j$ ...

  7. Luogu P4670 [BalticOI 2011 Day2]Plagiarism 题解

    我最近是不是数据结构学傻了啊... 这道题看是1e5,所以复杂度为\(O(nlogn)\)的是完全可以跑过去的,然后看题,要求的对于每个数满足要求的区间的长度之和,我们自然而然的就可以想到用FHQ-T ...

  8. codeforces796E Exam Cheating

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  9. 【二分法】【尺取法】bzoj2348 [Baltic 2011]Plagiarism

    一开始以为死于精度……调了半天发现死于long long…… 一.二分法: #include<cstdio> #include<cstring> #include<alg ...

随机推荐

  1. C语言数组:C语言数组定义、二维数组、动态数组、字符串数组

    1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...

  2. Linux Oracle服务启动&停止脚本与开机自启动[转]

    在CentOS 6.3下安装完Oracle 10g R2,重开机之后,你会发现Oracle没有自行启动,这是正常的,因为在Linux下安装Oracle的确不会自行启动,必须要自行设定相关参数,首先先介 ...

  3. [js高手之路] dom常用节点属性兼容性详解与应用

    一.每个DOM节点都有一个nodeType属性,表示节点类型, NodeType一共有12种类型,我们可以通过遍历内置的Node构造函数获取 window.onload = function(){ v ...

  4. Entity Framework入门教程:Oracle数据源访问

    由于System.Data.OracleClient.dll从.NET Framework4.0之后已被弃用,所以我们无法在.NET Framework高版本中使用.一番搜索之后,发现好多文章提到.N ...

  5. LinkedList之modCount和expectedModCount

    modCount和expectedModCount是用于表示修改次数的,其中modCount表示集合的修改次数,这其中包括了调用集合本身的add方法等修改方法时进行的修改和调用集合迭代器的修改方法进行 ...

  6. java源文件中是否必须要有一个public类?

    java源文件中不必有一个public类,如果没有public类的话,那么文件名可以是任意合法名称,且编译完成之后如果该源文件中有多个独立的类,则会生成多个对应的.class文件.

  7. .Net高级进阶,WebApi和MVC进行模型验证的时候,教你如何自由控制需要进行验证的字段?

    现在,你有一个MVC架构的web项目,你要完成一个注册功能. 前台传了3个值到你的控制器,分别是账号.密码.邮箱. 如图:现在你要在控制器里面判断,账号名称.密码.邮箱不能为空,并且名称和密码不超过1 ...

  8. Yield Usage Understanding

    When would I use Task.Yield()? http://stackoverflow.com/questions/22645024/when-would-i-use-task-yie ...

  9. SqlBulkCopy 批量insert

    1.获取要插入的数据datatable /// <summary> /// 从FMS取银行信息 /// </summary> /// <returns></r ...

  10. java的引用数据类型,你知道吗???

    有些人很清楚java的八种基本数据类型,但说到java的引用数据类型就不清楚了. Java的数据类型分为两大类,即基本数据类型和引用数据类型,在基本数据类型中有8种 基本数据类型(逻辑型-boolea ...