Как подходить к защите моего кода в качестве научного сотрудника? Стоит ли мне беспокоиться в первую очередь?

Я студент, работаю научным сотрудником в университете, в основном вместе с научным руководителем. Хотя у меня есть собственный проект, моя работа по-прежнему заключается в том, что я помогаю своему научному руководителю в его основных исследованиях.

Недавно мой руководитель поручил мне небольшой проект по кодированию, который ускорит анализ данных для экспериментов, что принесет пользу нам обоим. Я бы с удовольствием написал код, упрощающий его и мою работу, как и мою работу в качестве его помощника. Однако я опасаюсь, что написанный мной код будет рассредоточен и использован всей исследовательской группой. Это мнение связано с тем, что этот проект по кодированию возник во время группового разговора, в котором участвовали я, мой руководитель и другой исследователь, который указал, что такая программа сэкономит ему и другим в отделе время и энергию.

Мои два вопроса

Имею ли я право чувствовать, что другой исследователь использует меня для написания этого кода, или я эгоистичен?

Могу ли я защитить свой код от других, использующих его, не создавая напряженности/врагов?

Я считаю, что моя энергия и время в первую очередь зарезервированы для работы моего руководителя и моей собственной. Это код, который относительно легко написать, но требует много времени. Я вижу, что если другой исследователь хочет иметь этот ярлык в анализе данных, он может написать его сам. Меня бы не так сильно беспокоило, если бы проект исходил непосредственно от моего руководителя, как это было бы явно для нас. После этого, если бы им поделились, я не думаю, что у меня были бы такие противоречия. Скорее, исследователь, подтолкнувший проект, далек от моей работы.

В противном случае, если этот код распространится среди других исследователей, как я смогу получить его признание? Я получаю дальнейшее образование в этом отделе и хочу улучшить свою репутацию при поступлении в качестве значимого члена исследовательской группы. Возможно, я слишком мелочен или эгоистичен в отношении воздействия этого кода. Это первый раз, когда я столкнулся с написанием кода для чего-то помимо классной работы, и я хотел бы правильно подойти к ситуации.

Редактировать

Спасибо всем за то, что показали мне, что я был действительно идиотом. Большинство этих комментариев имеют смысл или дают пощечину, в которой я нуждался. Способность улучшать другие отрасли — это огромный интерес для меня в этой области, поэтому, глядя на это со стороны, становится очевидным, что я лицемерю. Я понимаю, что мне нужно изменить свое мышление, если я хочу заниматься исследованиями в будущем. А пока я буду максимально разнообразить код, чтобы помочь как можно большему количеству людей. Спасибо всем за участие.

Не могли бы вы запрограммировать его так, чтобы он работал только с вашими данными и вашими руководителями? Особенно, если вы предоставляете его в скомпилированной версии...
«Я опасаюсь, что код, который я написал, будет рассредоточен и использован всей исследовательской группой» — в чем может быть обратная сторона этого события?
AcademiaSE ( academia.stackexchange.com ) лучше бы подошла для этого вопроса.
О вашем редактировании: не корите себя! Хотя ваш первоначальный настрой был неправильным, лучше спросить, чем продолжать идти по пути, по которому вы шли.

Ответы (6)

Имею ли я право чувствовать, что другой исследователь использует меня для написания этого кода, или я эгоистичен?

Нет, вас не «эксплуатируют» — если я вас правильно понимаю, этот код принесет пользу и вам, и вашему руководителю. То, что это принесет пользу и другим, — это хорошо .

Могу ли я защитить свой код от других, использующих его, не создавая напряженности/врагов?

Возможно, вы сможете защитить его, хотя это маловероятно, учитывая, что вы работаете в университете, и они, вероятно, в любом случае «владеют» работой. Но я думаю, что даже попытка сделать это, скорее всего, вызовет «напряжение/врагов», как вы выразились.

Почему? Потому что вы буквально ничего не выиграете от того, что сохраните этот код от других в исследовательской группе — все, что вы сделаете, это навредит другим, что создаст впечатление, что это было вашим намерением. И это, скорее всего, будет раздражать людей.

Я получаю дальнейшее образование в этом отделе и хочу улучшить свою репутацию при поступлении в качестве значимого члена исследовательской группы.

Здесь у вас все наоборот: если вы создаете что-то значимое в контексте исследовательской группы, вы хотите, чтобы другие извлекли из этого пользу. Чем больше участников получают от этого пользу, тем больше эффект. Чем большему количеству людей вы пытаетесь скрыть это, тем больше людей будут говорить людям (например, тем, кто участвует в приемных комиссиях), что вы эгоистичный ребенок, который не работает в команде.

Кроме того, если код действительно настолько полезен, подумайте о том, чтобы сделать его общедоступным. Тогда вы рискуете стать известным за это, что ничуть не повредит вам на собеседованиях, как в промышленности, так и в академических кругах...
@FábioDias, хотя я не согласен с тем, что это может быть хорошей рекламой навыков ОП, я был бы удивлен, если бы не было ограничений на то, может ли ОП действительно делать это с кодом, разработанным во время работы.
В промышленности да, в науке не очень. В любом случае, это должно быть одобрено руководителем/консультантом...
@FábioDias да, с руководителем/консультантом, стоящим за идеей, это совсем другая история!
Не забудьте поставить свое имя где-нибудь в выводе, чтобы люди узнали, что вы его написали. Что-то простое, как User107622 Версия 1.01, август 2019 г.
@JanDoggen лучше, сделай это действительно полезным. Если у вас есть git или какой-то другой экземпляр и там есть код, включите ссылку на него, чтобы другие могли внести свой вклад. Если нет, укажите свой адрес электронной почты с примечанием типа «Свяжитесь в случае ошибок или запросов функций». Точно так же, если с программой связана лицензия, включите ее туда.
Я согласен. По всей вероятности, работа, выполняемая в качестве научного сотрудника в университете, принадлежит университету, а не научному сотруднику, как это обычно бывает. Они платят не за то, чтобы студенты могли продвигать свой личный профиль, а за то, чтобы зарабатывать деньги на исследованиях или приносить пользу научным целям (или и то, и другое).
Если это более сложная часть программного обеспечения, а не просто разношерстная куча простых скриптов, которые может собрать каждый, кто склонен к автоматизации, то есть большая вероятность, что вы действительно можете получить цитаты от всех, кто его использует.
В целом я согласен с этим ответом, но я просто хотел бы отметить, что сохранение чего-то полезного для себя не эквивалентно причинению вреда другим.

Поскольку вы впервые «пишете код для чего-то помимо классной работы», я думаю, что важно изучить некоторые из основных принципов того, что значит писать программное обеспечение за деньги, поскольку я думаю, как только вы это поймете, ответ на ваш вопрос вопросы текут довольно естественно.

Первый принцип: когда кто-то платит вам за написание кода, это подразумевает две вещи: во-первых, вы пишете что-то, чтобы решить проблему или удовлетворить потребность, которая у него есть; во-вторых, они владеют им и могут делать с ним все, что захотят. Этот принцип официально известен в Соединенных Штатах как работа по найму .

Второй принцип: код, который вы написали, не является особенным — существуют буквально миллионы других людей, которые могли бы создать такой же или лучший код для решения той же проблемы.

Если вы соберете их вместе, вы поймете, что, во-первых, это не ваш код (он принадлежит вашему научному руководителю, или лаборатории, или университету, или кому-то еще), и что код не представляет особой ценности (все это стоит того, чтобы заплатить кому-то, чтобы переписать его). Поскольку ваш проект был «небольшим проектом по кодированию», написанным научным сотрудником, стоимость замены на самом деле довольно минимальна.

Итак, теперь, когда вы видите, что сам код имеет ограниченную ценность, вам нужно понять, где вы добавляете реальную ценность процессу (чтобы вы могли научиться добавлять больше ценности и получать взамен больше вознаграждения).

Разработчик повышает ценность организации, имея возможность:

  1. Правильно понимать реальную проблему, которую необходимо решить (поскольку часто организация/лицо, запрашивающее программное обеспечение, сами не имеют четкого понимания, и вам нужно работать с ними, чтобы уточнить его);
  2. Внедрите стабильное и масштабируемое решение, чтобы меньше времени тратилось на исправление дефектов и чтобы решение могло работать с большими и большими проблемами;
  3. Реализуйте расширяемое решение, чтобы по мере изменения потребностей владельца или если владелец решил поделиться им с другими, можно было легко добавлять эти новые функции. Это позволяет этому фрагменту кода решать более одной проблемы.

Поскольку ваша цель состоит в том, чтобы «получить признание» и «улучшить [вашу] репутацию», и поскольку это формы вознаграждения, вам нужно сосредоточиться на добавлении фактической ценности.

Чтобы добавить ценность в вашей ситуации, вы должны охватить каждого потенциального пользователя. Поскольку каждый из них будет решать совершенно разные задачи, вы приобретете опыт решения такого рода проблем (№ 1) и создадите часть программного обеспечения, которое может решать множество различных задач (№ 3), в том числе для пользователей, которых вы еще не идентифицировали. Каждый из них также будет использовать ваш код по-разному, что приведет (надеюсь) к программному обеспечению, которое будет более стабильным и масштабируемым, чем если бы оно было разработано только для одного пользователя (№ 2).

Если вы хотите продолжить обучение в этом отделе, представьте, насколько полезным было бы для вашего приложения, если бы 2 или 3 (или более) исследователя рассказали, как вы создали приложение, которое помогло им сэкономить значительное количество времени, как вы смогли быстро понять их проблему и воплотить ее в работающее и производительное программное обеспечение. Это кажется ценным для вас, чтобы получить от этого процесса.

«теперь, когда вы видите, что сам код имеет ограниченную ценность, вам нужно понять, где вы добавляете реальную ценность процессу» — отличный ответ, спасибо!
«Второй принцип: код, который вы написали, не является особенным — существуют буквально миллионы других людей, которые могли бы создать такой же или лучший код для решения той же проблемы». Бууу. Он вложил в это работу и энергию, это не бесполезно. Для написания хорошего кода также требуются практические навыки и знания. Вы, кажется, недооцениваете ценность хорошего кода.
@ Эндрю, может быть, я не ясно выразился. Я не имею в виду, что код не имеет ценности, просто ценность кода равна стоимости его переписывания. Я хочу сказать, что новые разработчики думают, что они производят что-то очень особенное (потому что это их детище), и не понимают, что то, что они производят, на самом деле не такое уж особенное. Если среднестатистическому разработчику требуется 1 месяц для производства, среднему разработчику потребуется 1 месяц для воспроизведения. Я хочу сказать, что это не Пикассо: это работа мастера. И это не нападение. Я сам профессиональный разработчик.
@ Андрей - (продолжение). Как профессиональный разработчик, вам нужно научиться раскрывать ценность, которую вы действительно приносите, и понимать, что она отделена от «машины», которую вы создаете.
Я согласен с вашим мнением, но разве пункты 2 и 3 не доказывают, что сам код имеет ценность? Стабильный, масштабируемый и расширяемый код более ценен, чем код, который не является таковым. "код не представляет особой ценности (все, что он стоит, это затраты на то, чтобы заплатить кому-то, чтобы переписать его)" кажется немного глупым утверждением, вы можете свести любой продукт к этому - "автомобиль не представляет особой ценности" (все, что стоит, это затраты на то, чтобы заплатить кому-то за его производство)».
^ Точно. И я не новичок, может быть, ОП. Мы, разработчики, создаем ценность тем, что мы создаем, даже если это средне, но особенно если это не так. На самом деле вы здесь утверждаете, что мы не обеспечиваем ценность. "Каждый может это сделать" - вы говорите об этом, как о растворимом горячем шоколаде. Нет, большие группы людей не могут этого сделать, поэтому нам платят больше. Может ты и не такой, я не знаю. Но вы, ребята, продолжайте и соберите все голоса, даже если вы ошибаетесь.
@JShorthouse - я пытаюсь подчеркнуть, что часть программного обеспечения - это именно произведенный продукт, а не что-то вроде Пикассо. Новые разработчики склонны думать, что они производят Пикассо, и не понимают, что они просто производят автомобили.
@ Эндрю - я никогда не говорил, что «это может сделать каждый», я говорил, что есть «миллионы» людей, которые могут это сделать, - и это правда: в мире миллионы разработчиков программного обеспечения. Моя точка зрения, которая, как мне кажется, показалась слишком неуклюжей, заключалась в том, что ценность программы не в ее существовании, а в проблемах, которые она решает. Я считаю, что для того, чтобы быть ценным разработчиком программного обеспечения, вы должны быть ценным специалистом по решению проблем.
Я думаю, вы делаете это слишком черно-белым, когда на самом деле это где-то посередине. Да, ваша главная ценность как разработчика — это способность понимать и эффективно решать проблемы, но это не значит, что код, который вы создаете, сам по себе бесполезен.
@JShorthouse Точная формулировка в ответе: «код не представляет особой ценности», а не «код не представляет ценности». Код не имеет особой ценности в силу того, что он создан конкретным разработчиком. Он не имеет внутренней или особой ценности — он имеет ценность только потому, что решает проблему (включая будущую расширяемость, ясность архитектуры и т. д.), и он не более ценен, чем код, написанный другим разработчиком, который одинаково хорошо решает те же проблемы. , достать не сложно. Формулировка ответа точна для каждого значения слова «частный».
В зависимости от того, что сделал OP, крайний конец № 2 - это «почему они просто не искали открытый исходный код, который уже существует, и не настроили его». Хотя пункты верны, я думаю, что это можно было бы лучше отредактировать. Кроме того, хотя код можно оценивать, учитывая стоимость его переписывания, мы также можем оценивать его по-разному: сколько времени/денег сэкономлено на его обслуживании по сравнению с переписыванием с нуля? Можем ли мы найти открытый исходный код и настроить его, что в итоге сэкономит время на переписывание? и сколько времени потребуется для переобучения пользователей (он же: время пользователей, он же: пользователи платят за переобучение)
Конечно, я также скажу, что эти комментарии (включая мой первый) обсуждают, как улучшить небольшую касательную часть действительно надежного ответа.

Я также программист-исследователь, работающий в академических кругах. Нам повезло, что мы работаем в сфере, где обмен данными и методами является нормой. Я, все мои коллеги и, держу пари, и вы тоже извлекли выгоду из десятилетий предыдущих исследований, которые были обнародованы и доступны для нас. Она двигает вперед научный прогресс.

Хотя вполне разумно хотеть признания своей работы. Я бы посоветовал создать учетную запись на Github и размещать там свои работы с небольшим описанием того, как ее использовать. Если ваша работа будет использоваться другими исследователями, это будет гораздо лучше для вашей карьеры, чем просто похлопывание по плечу от вашего PI. Возможность рассказать о влиянии инструмента анализа данных, который вы выпустили в письмах-заявках в аспирантуру, будет выглядеть очень хорошо.

Я бы посоветовал ОП получить одобрение своего профессора, прежде чем публиковать его публично, поскольку это можно считать интеллектуальной собственностью университета. Также может быть ситуация, когда они опубликуют код, но только после того, как исследование будет завершено, поэтому время также может быть проблемой. Особенно, если они конкурируют за грант. Несмотря на то, что в конечном итоге они поделятся кодом, нет причин предоставлять конкурирующим агентствам бесплатный инструмент, который поможет им получить грант вместо вас.

Я не думаю, что вы можете защитить свой код от своих коллег. Университеты обычно имеют довольно строгие положения об интеллектуальной собственности в своих трудовых договорах. Но это также может зависеть от страны, в которой вы находитесь.

Но в итоге я думаю, что вы сотрудник университета и ваш руководитель приказал вам что-то изготовить. Это что-то в конце концов, вероятно, будет принадлежать университету. Вероятно, вам придется столкнуться с тем, что что-то, созданное вами вместо вашей работы для кого-то другого, вам не принадлежит.

Вы можете возразить, что эта задача выходит за рамки вашего контракта, но я не думаю, что это сработает здесь и может серьезно повредить отношениям с вашим руководителем.

Если код уже не существует под какой-либо лицензией, и вы убедите своего руководителя использовать этот код, я не вижу никакого способа защитить ваш код.

Прежде всего, если вы работаете RA только за деньги, вам не о чем беспокоиться, потому что ваш работодатель в любом случае владеет вашим кодом, как подробно описано в приведенных выше ответах.

Но я предполагаю, что вы также инвестируете в исследования и хотите создать себе репутацию исследователя. В этом случае важно понимать, что главная валюта в исследовательском сообществе — это репутация и известность. Соавторство и презентация исследовательских работ — это один отличный способ повысить свою академическую репутацию, но выпуск полезного и широко используемого исходного кода — другой.

Можно выпускать ваш код под лицензией, которая заставляет других признавать вас, если они используют ваш код, но я не рекомендую этот курс, так как он излишне противодействует вашим пользователям и снижает вероятность принятия. Укажите свое имя в комментарии в верхней части основных исходных файлов и включите дружескую заметку в код/README в духе: «Если вы используете этот код, отметьте человека XXX и процитируйте статью YYY!» обычно достаточно.

Поэтому по умолчанию вы должны хотеть, чтобы ваш код распространялся и использовался как можно шире!

Тем не менее, иногда есть веские причины сохранять конфиденциальность кода:

  • ваш руководитель считает, что раскрытие кода может привести к краху ваших исследований или исследований других членов вашей лаборатории;
  • ваш руководитель хочет «вымогать» у других лабораторий соавторство в статьях или гранты в обмен на доступ к коду (я не одобряю такое поведение, но такое случается);
  • исследование спонсируется компанией или государственной организацией, которая требует сохранения кода в секрете;
  • код содержит приватные данные, защищенные HIPPA, FERPA и т. д.;
  • ваш руководитель/университет хочет запатентовать алгоритмы, используемые в коде, что в некоторых юрисдикциях требует ограничения публичного выпуска до момента подачи заявки;
  • и т. д.

Вывод: вы должны хотеть, чтобы ваш код использовало как можно больше людей, но поговорите со своим руководителем о своих опасениях и спросите разрешения, прежде чем публиковать код на общедоступном GitHub или раздавать его другим.

В дополнение к комментариям с просьбой о соавторстве/цитировании/подтверждении в верхней части исходного кода и/или в файле README рассмотрите возможность вывода именно этого сообщения как части вывода. Если текстовый вывод программы предназначен для человеческого восприятия, stdoutэто нормально; если это означает, что нижестоящее программное обеспечение потребляет, напишите об этом вstderr

Вы должны быть довольны тем, что у вас есть возможность указать такой проект в своем резюме (резюме), если вы им воспользуетесь, это определенно станет темой для обсуждения любых ближайших перспектив трудоустройства. По большому счету, через пять лет вы даже не будете думать об этом проекте.

Чтобы ответить на ваш вопрос, поставщики защищают свой код, распространяя двоичный файл кода (например, исполняемый файл), который нельзя интерпретировать в текстовом редакторе.

Чтобы продемонстрировать точку зрения, если программа написана на Go, и вы распространяете myProgram.go, тогда ваш код будет общим, если вы отправляете myProgram в виде исполняемого файла unix или exe-файла, тогда он не может быть интерпретирован.

Для Javascript обфускация может быть выполнена путем минимизации вашего файла. Это представляет все ваши функции и переменные в более сложном для чтения формате. Пример: «myFunctionToSendOutAnEmail()» будет изменено на «a()». Минимизированные файлы JS имеют расширение myProgram.min.js, а не myProgram.js.

Это совершенно противоречит не только всей сфере академических исследований, где потребность в воспроизводимости результатов означает, что код обычно публикуется в поддержку статей, но и самому факту того, что вы являетесь сотрудником и частью совместной команды . Учреждение может принять решение оставить что-то у себя, но скрывать это от коллег нецелесообразно.
Цель моего ответа заключалась не в том, чтобы ответить на этический вопрос, а в другом методе защиты его работы. Я не обязан делать OP этичным, но я могу поделиться знаниями, чтобы сделать что-то неэтичное.
Проблема не в этике, проблема в том, что ваше предложение совершенно неработоспособно в ситуации вопроса или чего-то подобного. Человек не является бизнесом, взаимодействующим с клиентами, он является сотрудником и сотрудником в команде.
Это не означает, что они не могут распространять двоичные файлы, если захотят, пока файлы программы хранятся локально на их машине.
Вы, кажется, понятия не имеете, как работает рабочее место для совместной работы или как работает разработка программного обеспечения не из каменного века. Ни один ответственный руководитель не позволит сотруднику или члену группы хранить критически важный исходный код в секрете от тех, у кого есть реалистичная потребность в его просмотре, поддержке, расширении и сохранении.
У меня сложилось впечатление, что он не работал с другими разработчиками? Но был просто аналитиком, который может захотеть изучить программное обеспечение. Естественно, в любой нормальной команде разработчиков вы бы никогда этого не сделали.