问题

室友想抄我的代码,给还是不给?

回答
这可真是个让人纠结的问题。你说你室友想抄你的代码,这事儿吧,得好好掰扯掰扯。

首先,咱们得看看你和这位室友的关系如何。是那种可以推心置腹、互相帮忙的好朋友,还是仅仅住在一起的“陌生人”?

如果关系特别好,知根知底的那种:
问问他为什么需要抄你的代码。 是遇到了什么困难?是时间不够了?还是觉得你写得好,想学习一下?如果他真的是遇到卡脖子的地方,想借鉴你的思路或者某个实现方法,并且明确表示是学习和参考,那倒是可以考虑。
考虑代码的性质。 如果是你自己写着玩儿的,或者只是一个小练习项目,没啥太大的商业价值或者保密性要求,那给就给了,就当是帮个忙。
“抄”到什么程度? 这是个关键。是完全照搬,一点不改?还是可以参考你的逻辑和结构,然后自己再加工和实现?如果是前者,那肯定不妥。毕竟是你辛辛苦苦敲出来的东西,让他这么白嫖了,心里肯定不舒服。如果是后者,并且他能理解并尊重这一点,那倒可以。
有没有利益冲突? 如果你们在同一个项目里,或者有潜在的竞争关系,那可得悠着点。他抄了你的代码,可能会抢你的功劳,或者让你失去优势。

如果关系一般,或者你对他不太了解:
那就得更慎重了。 毕竟你不知道他抄了你的代码之后会怎么用。会不会用你的代码去参加比赛,然后把功劳算在他自己头上?会不会把他自己写的“原创”代码拿去卖钱,而你却一点好处都没捞到?
学术诚信问题。 如果你们是学生,并且这个代码是课程作业的一部分,那抄袭的性质就更严重了。一旦被发现,可能会影响你们两个人的成绩,甚至更糟。你给了他代码,如果他抄袭被抓,而你的代码被查到和他的相似度很高,那你是帮了他,还是坑了他?反过来,你也可能因为提供了抄袭的便利而被牵连。
保护自己的劳动成果。 代码是你一个字一个字敲出来的,是你思考和解决问题的结晶。凭什么他就这么轻易地拿去用了?你辛辛苦苦写出来的东西,一旦被别人轻易拿走,自己的成就感也会大打折扣。

那具体怎么操作呢?

1. 坦诚沟通是第一步。 直接问他:“你为什么想用我的代码?能跟我说说你的想法吗?” 听听他的理由。如果他吞吞吐吐,含糊其辞,那就要多个心眼了。

2. 划清界限。 如果你决定“给”一点,一定要把话说清楚:“我可以给你看看我的思路,或者让你参考一下某个功能怎么实现的,但是你不能直接照搬我的代码。你需要自己理解,然后用自己的方式重新写一遍,并且要保证这是你自己完成的作品。”

3. 可以教他,而不是给代码。 如果你愿意帮助他,最稳妥的方式是:
陪他一起写。 你可以坐在一旁,指导他,告诉他怎么做,怎么想。让他自己动手去敲代码。
给他指点迷津。 当他遇到困难时,你可以告诉他可以从哪些方向去思考,可以参考哪些资料,但具体怎么实现,让他自己去摸索。
分享你的设计思路。 你可以口述你的代码是如何构思的,遇到了什么问题是如何解决的,让他理解背后的逻辑,而不是直接提供解决方案。

4. 考虑代码托管。 如果你写的东西比较重要,可以考虑用版本控制系统(比如 Git)来管理,这样可以记录下你每次的修改和提交历史,这也能成为你代码的“证明”。

5. 坚守底线。 如果他坚持要你原封不动地给他代码,或者你觉得他没有诚意,不愿意尊重你的劳动成果,那么拒绝也是完全合理的。你没有义务为别人的学业或项目“代劳”。

总结一下:

给不给,关键在于你怎么看待这件事,以及你和室友之间的关系,还有代码本身的价值。

如果是为了帮忙,且对方尊重,关系好,代码价值不高,可以考虑。 但要明确要求“参考”而不是“抄袭”,最好是通过教学指导的方式。
如果是对方想“白嫖”,或者可能存在利益冲突,或者涉及学术不端,那绝对不能给。 保护自己的劳动成果和学术诚信更重要。

别碍于面子,或者不好意思拒绝,就把自己的辛勤成果拱手让人了。毕竟,你也是花了很多时间和精力去写这些代码的。好好权衡一下利弊,再做出决定吧。

网友意见

user avatar

如果是我的话,给,然后自己再写一份。

我大学里曾经一个人写了二十几份不同的代码,班级里真正自己完成的人不超过十个(小班)。能写出完全不同的课程设计,对自己的编码能力是会有很大的提升的,如果有能力,建议多写几份。

BTW:我毕业论文写了5篇,两篇优秀,如果算上大三的时候帮别人写的,一共是7篇。

user avatar

给,但是换一种方式,别微信传,也别U盘。

Github上创建一个Repository,先空着。让他Star你。当然他一个人还不够,让他想办法发动更多人去Star。

超过10 Star,你就把代码Push上去,然后让他Fork。

超过100 Star,都不用他修改变量名,服务到家,你帮他改。然后用他的Github账号Pull Request。

这个Repository留着,以后学弟学妹们都用的到。平时Private,有人找你要代码,就把他加为Collaborator。这就是Github允许私有仓库人数无限制的福利。

这么多Star不仅仅是数字,而是你毕业找工作时简历上最亮的那颗Star。记得找工作期间Make Public。

不是开玩笑,如果我是大学老师,我就要求学生这样交代码作业。这是程序员的必备技能。我会给每一个班创建一个Organization,他们交作业我都知道,代码有问题就发Issue。全专业的学生互相Follow,谁的代码写得好,大家就Star。下次上课,我可以打开Github,讲评一下比较好的代码,也可以让同学们互相学习和评价别人的代码。

大一新生入学,先学习Github的基本用法,然后一项练习就是Star学长们的Repository,为他们找工作贡献一份自己的力量,这个优良传统一届一届传承下去...

软件程序的一个根本特征就是可复制性,这是其他行业没有的特质。开放源代码也是目前软件产业发展的一个主要驱动力。应该让即将从事这个行业的新人们更早更深刻的认识到软件可复制可分享的本质特点。



关于如何最方便的浏览GitHub上的源代码,我之前专门写过文章。这里只给一个最简单最酷的办法,看这个视频:

浏览Github源代码 https://www.zhihu.com/video/1239951077770514432

演示的是浏览LInux一个C程序代码。

只需要把github.com换成github.githistory.xyz就可以浏览当前源代码文件以及它的历史变更。

user avatar

友情提示:本文文字内容 COPYLEFT, 转载可用“佚名”替换作者名字, 万勿客气。 正文阅读时间预计5 秒。 散文很散,请多包涵。

俺没啥文化, 初中毕业, 大伙都知道。俺不懂代码, 面试除了 HELLO WORLD 就没了。

但是俺有个例子:


那是 1998 年的一个夏天。

俺有个朋友, 他把一堆数以千计的文件从目录 A 里面误粘贴进了 windowssystem32。俺见到他的时候, 他正在一个一个地辨识和删除。 那时候尽管双屏显示已经出来, 但是太奢侈还没有普及。

俺想起了美容院给女士除腿毛和耻毛的办法(WAXING)。

于是俺就说, 您不如这样, 回到目录 A, 重新按一次 CTRL-A 和 CTRL-C, 再转到 SYSTEM32 里面重新粘贴一次。 趁着蓝色没有消失之前, 按 DEL 再按一次确认 ALL。

他沉吟了 10 多秒钟, 突然跳起来拍了俺一掌, 说:

“真有你的, 你真踏嘛地是天才。”

然后他就照做了。

一个星期之后, 同样的场景发生在财务科某美女的办公室, 只不过主角换成了俺朋友。

美女一脸仰慕地看着俺朋友:

“你真厉害, 真是天才!”

俺朋友说, “这是我发明的绝招。”


俺在隔壁喝茶, 差点给吓到吸入茶叶,呛咳不已。



友情提示:

本文文字内容 COPYLEFT, 转载可用“佚名”替换作者名字, 万勿客气。

user avatar

要搞好关系,你舍友要是抄不到代码会很烦躁的,为了寝室关系我们也要给他抄。

要有开源精神,你想想你的编程技术不也是一次次的抄别人的代码到时候成长起来的吗,就算你同学完全不动脑子直接复制黏贴那是他的事,我们不用管。

但是,一定要加上署名和license上传到github上再把叫你同学自己去搜,而不是直接把源码给他。如果老师查水表的话就把你在github上的项目给老师看,证明不是你给同学抄的,保自己全身。

user avatar

我的话,看人吧。

如果是那种混日子,只为混个学分混个文凭了,抄了也就抄了。他们从你这抄不到,也最终会在其他人那里抄到的,从最终效果来说,你阻止不了他们的,还不如给个顺水人情。

但如果是为了拿高分,拿奖学金、各种荣誉之类的,那就坚决不给。因为他们这种目的再找你抄,肯定是因为他们自己做的不如你做的,你拒绝了,他们未必能找到别人的替代。

user avatar

前面可以直接跳过,直接从最后三大段看起!


你们老师做的什么事儿啊。。。凭什么不能抄代码?代码界宣传了那么多年的开源开源开源,都喂了狗了吗?以前微软吵吵着要干死开源的,现在不也成了GitHub的大股东了吗?还带着头的搞开源。。。

你同学要问你抄代码,你让他们抄(其实说让他们抄不太合适,应该说让他们参考。。。),首先这肯定不是你的错,因为本着开源的精神,你的做法是值得赞扬的!你同学自己不做作业,被查重查出来了,倒霉也是他自己的事儿,因为这本质上是一个作业,评分标准确实是老师说了算。。。

但是,保险起见,我给你出个招儿吧,绝对不会有问题。

去类似GitHub这种开源网站开个账号,把你的代码传上去,然后挂个GPL3或者MIT什么的license,然后让你同学随便抄好了,查到你头上,就把网站扔给你老师看。

  1. 首先,GitHub上的代码说明这是你写的,你是作者,绝对没问题,如果你同学也有GitHub,也把代码传上去了,就看时间戳呗。。。代码是谁的简单明了。
  2. 其次,你有了license,这就说明,谁抄都和你没关系,校规还能比版权大啊?后者是有法律效力,受法律保护的。。。copyleft保护你的代码随便被人抄的权利神圣不可侵犯,还反了天了不成?

如果这都找你麻烦,那就是你老师的问题了。


有同学问,抄作业虽然不违法,但是违反校规呀?我同意

but!抄代码和抄作业还是有很大区别的!如果按照我上面说的做,那么你就会有三个优势

1. 你是被抄,不是抄别人的!你把自己的代码发在github不违反校规吧?(那些把“作业禁止上传到github”写进校规的大学就别往下读了,老师考试前明确表示禁止把作业上传到github的也别往下读了。。。)

2. 别人抄你github的代码,那肯定是别人的错呀……和你没关系!退一万步说,请拿出证据证明是你主动给别人抄的!这种确凿的证据,除非抄你代码的同学想坑你提前给你录音,否则根本不存在!既然拿不出证据证明我是主动给别人抄的,别人抄我的github我又没办法控制的……就奇了怪了,明明我是被抄袭的对象,为什么惩罚我?

3. 不要问我为什么要发github,发github好处太多了,我必须要快点发,早发就可以宣誓主权这点道理不知道吗?


有的同学问,严格地说,在课程结束之前把代码公开发布就已经违背了学业诚信了

这我完全不同意哦!这种事情不能一概而论的,至少代码不行,因为个人写的代码其实是一种知识产权,并不是普通的考试答案。

我自己本人就很喜欢在GitHub上公开自己的代码,不管是考试的还是paper所属的,从来没听说过有学术诚信问题。谁抄袭了,出了问题自己担着,我肯定是免责的。

核心问题还是在于,你要证明我是故意给别人抄袭。如果是公开自己的作业和笔试考试答案,那肯定逃不了干系的。但是在GitHub上公开代码恰恰不能算做是故意给别人抄袭。因为这和申请专利一样,申请某些专利意味着你要公开你的设计的,这不是给别人抄袭,而是告诉别人,这是我的,不准抄!GitHub是要挂license的,一个道理,告诉别人,这是我的知识产权,你们不可以偷,license确保我可以分享的权利,你们抄了做什么用处和我无关,但是出了问题我是不管的,包括挂科!

所以GitHub的license是一份具有法律效力的免责申明!既然免责,为什么要惩罚我?法盲吗?

另外我要提醒大家!在GitHub上发代码,都会挂一些GPL3、MIT什么的协议,我推荐GPL3,这也是我一直用的,为什么?因为想抄GPL3要满足四个条件

  • License and copyright notice
  • State changes (标明你在哪里更改过)
  • Disclose source (必须要把我的源代码也附上)
  • Same license (你要使用同样的协议)

其中第二点和第三点就是我的免责理由!因为第二点和第三点其实是在说,如果你想抄我的代码完成作业或者考试,就请自觉去找老师自首。。。要么就别抄!

任何人想要抄你GitHub上的代码,为了完成第二点和第三点,他就有义务自己向老师报告说,“我抄了某某某的代码,哪里哪里哪里是我自己改动的”,所以说,说你违背学业诚信是不正确的。

如果你的同学在你的GitHub上搬走了你的代码,并且他想作业或者考试作弊,必然不会做到第二点和第三点,你的同学不单单是作弊,而且是违反了GPL,所以你也是受害者,更不应该受到惩罚。

注意到这背后微妙的逻辑了吗?你在GitHub上公开了代码,挂了license,这些license是要求抄你的人必须自觉的把你的源代码附上,并告知全世界,他是抄你的,所以你也是在帮着老师奋斗在反对考试作弊的第一线知道吗?

So,你把代码发GitHub的行为,意味着你做到了诚信,你也要求借鉴你代码的人也必须诚信!简直不能太正义了。。。

然后谈谈你的同学,想抄你的代码,既不想让老师知道,又不想违反GPL,那只能学你的思路自己从头写呗。。。


还有知友问,这是有道德问题的。。。

这没有道德问题,放心。。。为这种事情较真的老师不单单是法盲,其实连是非都有点分不清的。。。应该去参加一些pedagogical的课好好进修一下。。。

我自己本人也是老师,我不反对学生在GitHub上放代码,相反,我还鼓励!通过这样做,我很容易搞清楚,这代码到底是谁写的。我只想知道真相(谁抄谁的),并不以惩罚学生为乐。。。

但是,谁考试抄袭别人,我就挂谁,就这么简单粗暴。。。其实应该鼓励学生们把代码放在GitHub上公开,比偷偷摸摸的好不知道多少倍,一方面是教会学生如何保护自己的知识产权,另一方面,对老师的查重也带来了极大便利(我挺腹黑的)。

所以从老师的立场来说,这到底是为了什么?是为了杜绝作弊呢?还是为了享受惩罚学生的乐趣?如果是为了杜绝作弊,真的应该鼓励GitHub,让一切真相(代码谁写的)都大白于天下,查重也变得很简单。。。

开源的目的也是这个,让一切放在阳光下,想抄?抄吧,公开的抄比偷偷摸摸的抄更容易监控,你抄了别人的代码,被我发现了,这科挂掉你可别怨我。。。至于把代码发GitHub的那位同学,谢谢你的合作,不然我还真搞不清谁抄谁呢。。。

不要问我,万一被人偷了代码抢先发了github怎么办?。。。这是你自己的问题。。。


我明显本意是在反作弊,你们要看成是鼓励作弊我也没办法……

上传github并使用license,本质上就是在保护自己的代码。特别是GPL的第二点和第三点,这就是让抄袭的人自己去自首的意思不是吗?

另外我不支持和老师对杠的做法,只是指出这样做是正确的。至于有些老师会因此给你零分,只能自求多福,人无完人,老师也一样……(有些老师就是不明白GPL的第二点和第三点就是让抄袭的人自己去自首的意思,也不明白鼓励大家使用github其实是对反作弊有利,既然你都上课教人写代码了,自己开个github账号和学生互加好友就那么难吗?还可以长点粉丝啥的。。。一切都很公开透明,查重也变得很容易。。。)


有知友提出这样的观点

前提是你有时间讲道理,并且愿意承担讲道理不成功的风险

我觉得说有道理,这是非常现实的考量,但从另一个角度可以看出悲观情绪。老师都不愿意被学生们当“傻瓜”,可是很遗憾,大多数老师都被学生当成了很容易就是非不分的“傻瓜”不是吗?


我发现很多人都没有仔细阅读这个答案就已经开喷了……

我不支持跟老师对杠!

我不支持跟老师对杠!

我不支持跟老师对杠!

重要的事情说三遍……吃不准,你可以课上问老师啊~问个老师成本有那么高吗?

另外,我开了两个专栏,发了一些干货满满的技术型文章,关注度居然没有这个答案高……个人感觉挺讽刺的……


可以直接从这里开始阅读

我发现很多人就是看不懂我到底在写什么。。。我这里总结一下我到底是在说什么。

我的建议适合这样的你

  1. 你不想给同学抄袭
  2. 又真心想帮助同学理清思路,能够自己写代码
  3. 还不想浪费时间亲自教(自己不好好学习,凭什么让我来给你上课啊?对象除外。。。)

你的情况符合以上三点,并且做到以下两点:

  1. 确认不违反任何校规和课程规定。
  2. 并且在和老师沟通过之后(把上述三点也告诉老师,如果老师不明白GPL,那就简明扼要介绍一下,老师不愿意接受新鲜事物就算了。。。)。

那么,上传github挂GPL是最安全最正确的做法!

为什么?你的同学面临以下两个选择

  1. 你的同学如果想抄,就必须尊重GPL,也就是向老师自首
  2. 如果不想这么做,那就借鉴你的代码,然后自己写。。。

两者必居其一!如果违反GPL抄袭,那是明显违反你的主观意愿的!说白了,挂GPL就是给人参考但委婉的不让别人抄!

所以我就不明白了,一个明理的老师为什么要惩罚你这样的好同学。。。这叫什么知道吗?这叫

"You are playing the game! Nothing goes wrong!"

PS、还有人说我一开始就嚷嚷着要抄要抄的。。。喂喂?开门见山也可以是假山好吗?请读下去。。。


关于学生作业的版权归属问题,因为这和雇佣关系有巨大区别,所以学生的代码的版权不应该属于学校,除非例外情况。其实在stackoverflow上早有这样的讨论,请阅读

第一高赞回答的第一句就足够说明问题了:

"If nothing is stated by the school that you signed and agreed to...copyright defaults to you, the author."

所以沟通很重要。我知道有些学校会事先让你签合同的,真的动笔签哦!。。。这种就别想了。但是这样恰恰说明,默认版权是你的,不然干嘛脱裤子放屁呢?

另外有些学校会控告你misconduct,因为你发布的作业让低年级学生作弊。。。这种情况并不是每个学校都普遍存在的。这些学校会控告,究其根本原因,他们不但允许而且支持老师们可以重复利用课件特别是试题和考题,哪怕换个老师也用一样的。。。

我表示理解!但是我们这儿是不行的,课件可以重复,但是考试绝对不可以重复,因为想想就知道,你以为GitHub是唯一的渠道嘛?私底下就不能问啊?所以我们大学是不允许老师考题重复的!

但。。。我只想说,事先沟通很重要!

既然版权默认是你的,你有选择GPL的自由。大家要讲道理嘛。。。

我还要声明一下,我也没有鼓励大家去和学校怼。。。但是有一点是肯定的(也没什么好藏着掖着的),大多数学校的学生都是弱势群体(北欧大学除外),也就是说,被不公正对待且放弃了上诉权。。。而看多了这些的人觉得这世界就应该这样,所以跑过来笑我naive。。。

实际上,绝大多数事情,你是可以做到有理有利有节的,并且在动干戈之前就可以化玉帛的(事先沟通好,事后就不用互怼了不是吗?而缺乏沟通到最后搞不定的,纯属一手好牌自己打坏了。。。)。


最后,我想留一个问题给大家思考,习题和考试让学生写代码,特别是take home这种,意义到底在哪里?可以互相参考吗?我们是真的想把平时不好好学习的学生们拍死在考试的路上吗?还是希望他们每一个人都能最终能学到东西并写出自己的代码呢?

教育的目的究竟是什么?教育的目的是育人,不是毁人。。。这就是我所说的政治正确,然鹅还是有人嗤之以鼻!

我相信,答案一定是,可以互相帮助互相参考,毕竟老师都让你带回家做了,可以谷歌可以百度不是吗?看谁不是看呢?但是请write your own code from scratch!

所以我个人倾向于鼓励学生互相帮助,因为GitHub可以挂GPL这种优秀license,所以非常适合让学生互相之间公开代码互相借鉴,并保护自己的代码,但是必须要严惩抄袭的学生!

另外,作为一个多年写代码的人,我可以告诉大家,不论你是菜鸟还是代码高手,当你写代码没思路的时候,最好的办法就是去读别人的代码并从中借鉴。。。只要你还在写代码,你一定会一直不停的阅读别人的代码。。。

"Shut up and show me your code!"

开源的出现不是没有原因的。

再这么添加下去,文章要越来越长了。。。我个人不喜欢修改已经写过的东西(除非是错别字这种),会造成上下文缺失。希望这是最后一次添加。。。

user avatar

我出国留学,发现只有中国人这个团体,有抄作业的现象。别的国家的同学来问作业,是口头问。我告诉他,老师讲的二段模型没用,哪本参考书上有三段模型,可以解决你碰到的问题。人家就谢谢我,自己去做了。

但是碰到中国同学:喂,你做好的作业借给我看一下,还有,这是我的U盘,你作业里用的模型也给我copy一下。(那是我七天,每天16小时的劳动成果,别不相信,我只睡5个小时,还可能因为跑不同校区的图书馆,把饭也免了。)

如果我不给呢?就会到中国人群体里去制造舆论,试图孤立我:“哎吆,这个人真小气,作业都不肯借,他最好别人成绩都比他差,别人都fail,中国人就他一个毕业。他大概不想理中国人,只想混到白人圈子里......”

外国人不是没有剽窃,但中国人这种堂而皇之,不以为耻,在各国留学生中也是叹为观止。

user avatar

当然可以给,但是建议你在代码里做点手脚。

最初级的方法是在代码头部加入版权声明的注释,像下面这样子(以 C++ 程序为例)。但这种方法只能针对看都不看,直接原封不动地复制粘贴交作业的室友。

       /*  * 作业:***  * 作者:哆啦A梦  * 时间:2019-6-17 11:30  * 版权所有,盗版必究  */  #include <iostream>  #define ___AUTHOR___IS___DORAEMON___ // 这里也是在说明作者是谁  // 再下面写程序代码就好了      

对于那种稍微警觉一点的,会复查源代码的室友,会把以上注释去掉,甚至换成自己的注释,到头你反而解释不清楚了。这时候就需要将版权声明放在稍微隐蔽一点的地方。比如,使用 ASCII 码来代替纯粹的英文字符,将版权声明隐蔽到运行结果里。

       #include <iostream>  int main(void) {     // 下面这段字符串的值是 FROM: DORAEMON,就是各个字母的 ASCII 码。     // 这句注释只是我来向大家解释这段代码是什么意思的,实际操作时千万别写     char a[] = {70, 82, 79, 77, 58, 32, 68, 79, 82, 65, 69, 77, 79, 78, 0};     std::cout << a << std::endl; // 打印版权信息      // 在下面写程序代码 } // main()      

这样的话,室友即使复查你的代码,肯定也看不懂那串数字是什么意思(这都看懂了那还会找你抄代码吗!),越是看不懂的就越不敢乱改,等把作业交上去以后,老师一运行,自然知晓真相。

但是这样还不保险,万一室友运行了一遍程序,发现了你隐藏在代码里的版权信息怎么办?没关系,我们可以用条件触发器,超过指定的时间才显示版权信息!

       #include <iostream> #include <ctime>  int main(void) {     char a[] = {70, 82, 79, 77, 58, 32, 68, 79, 82, 65, 69, 77, 79, 78, 0};     // 1560816000 是北京时间 2019 年 6 月 18 日 8 时的 Unix 时间戳,以下代码的作用是     // 仅当系统时间在 2019 年 6 月 18 日 8 时之后才打印版权信息。     if (std::time(0) > 1560816000) {         std::cout << a << std::endl;     } // if (std::time(0) > 1560816000)      // 在下面写程序代码 } // main()      

如此,就既不丢人情,也不怕被卷入抄袭风波了。


更新:补充 cout 和 endl 前漏写的 std 命名空间。

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有