Билль об ответственности программистов [закрыт]

40

Итак, мы все слышали о Билле о правах программистов, и у XP схожая концепция.

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

Меня в первую очередь интересуют неприятные и те, которые не случаются. Это то, что программисты склонны избегать и избегать, а не те, которые на самом деле хотят сделать 90% программистов (такие как всегда рефакторинг и использование контроля версий).

Итак, что должно быть в Билле об ответственности программистов?

Джон Хопкинс
источник
4
Более того, я думаю, что это соответствует указаниям 1, 2, 4 и 6.
Стивен Фурлани,
2
Я думаю, что это важный вопрос.
HLGEM
1
Важным продолжением может быть «как вы обучаете себя ответственному программисту?»
Стивен Фурлани
2
Этот вопрос, кажется, только генерирует список предметов. Хотя ответы довольно впечатляющие (и я благодарен ответчикам, которые вкладывают время и усилия в свои посты), они сосредоточены на мнениях, и формулировка вопроса кажется мне опросом.
Томас Оуэнс
5
@ThomasOwens категорически не согласен с тем, что «этот вопрос не очень подходит для нашего формата вопросов и ответов». Это уже привело к ответу относительно тестирования разработчиков, методологий разработки, фрилансинга и бизнес-проблем, обеспечения качества и разработки программного обеспечения, и на самом деле начинаю сомневаться, почему у нас даже есть этот сайт, если такие вопросы, как выше, закрываются.
Джошуа Дрейк

Ответы:

41
  • Программист обязан отбросить плохие требования, а не слепо их реализовывать. Это включает в себя информирование клиентов о том, что то, что они хотят, дороже, чем другие варианты, или имеет определенный набор рисков. Это также включает в себя передачу плохих новостей на профессиональном уровне - не кричать, не называть людей глупыми, подразумевая, что они глупы или ведут себя по-детски. Если он отодвигается назад, у него должен быть ряд причин (более чем «я не люблю SQL Server и не буду его использовать») и альтернативный план для представления.

  • Тем не менее, программист также несет ответственность за принятие решений и использование инструментов или конструкций, которые им могут не понравиться, если их откат не был принят. Если отчет был запрошен в SSRS, его доставка в Crystal Reports (который может отсутствовать у клиента) недопустима. Если требуется решение .net, доставка его на Haskell недопустима. Если никто в команде не использует инструмент или язык, который вы хотите использовать, использовать его непрофессионально, если руководство не согласится с тем, что это лучший инструмент для конкретной работы.

  • Программист обязан проверить свою работу. (Это не должно быть единственным тестом, но ни один профессиональный программист не должен отправлять код, который он не тестировал.) Это включает в себя тестирование даже тех ветвей кода, которые вы не ожидаете получить очень часто. Если у вас есть набор вложенных IF, протестируйте все возможные маршруты.

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

  • Программист несет ответственность за защиту личных данных, защиту проприетарного кода, который он пишет для компании, и за защиту пользователей от катастрофы (даже самопроизвольной катастрофы) от использования ими приложения.

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

  • Программист обязан координировать свои действия с другими, чтобы убедиться, что его изменения не влияют отрицательно на то, что они делают.

  • Программист обязан рекомендовать клиенту лучший выбор инструментов или языков на этапе проектирования, а не инструмент / язык, с которым он хочет играть и изучать.

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

  • Программист несет ответственность за создание продукта, который выполняет то, что было указано в разумные сроки. Если сроки не будут соблюдены, он или она обязаны информировать руководство об этом, как только это станет известно.

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

  • Программист несет ответственность за выполнение всей задачи, а не только забавных, интересных частей. У каждой работы есть свои скучные части, их еще нужно сделать. Это включает в себя такие вещи, как расписания и добавление элементов обсуждения в программное обеспечение для управления проектами. Он включает в себя такие вещи, как документация, проверка кода и т. Д.

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

  • Программист обязан поддерживать свои навыки в актуальном состоянии.

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

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

HLGEM
источник
7
Я люблю шутить сообщения об ошибках. Ситуация уже достаточно плохая, нет необходимости делать ее более серьезной - по крайней мере, попытайтесь заставить меня смеяться, хлопая меня ошибкой!
Доктор Ганнибал Лектер
2
Я подвергаю сомнению ответственность разработчика за то, чтобы он лично тестировал свой код во всех ситуациях ... Я бы перефразировал это, чтобы убедиться, что его код тестируется ... Если в организации есть профессиональные тестировщики (как автоматизированные, так и человеческие) и твердый процесс на месте чтобы убедиться, что код протестирован, я не понимаю, почему разработчик должен делать это лично. Если я разрабатываю новую функцию или исправляю ошибку, обязательно протестирую ее сам, иначе я не узнаю, справился ли я со своей работой. Однако, если я делаю большой рефакторинг, для меня не имеет смысла исчерпывающее регрессионное тестирование всего продукта.
JoelFan
Я не сказал регрессионный тест, но вы должны провести модульное тестирование своих изменений, чтобы убедиться, что они делают то, что вы хотели.
HLGEM
2
Как насчет восклицательных знаков в сообщениях об ошибках ... т.е. "Дата недействительна!"
JoelFan
1
Они должны быть гендерно-нейтральными. Делать их императивами было бы легче, например, вместо «Программист несет ответственность за проверку своей работы» должно быть «Проверь свою работу».
сигил,
42

Каждый программист должен сделать свой код читаемым для других.

dan_waterworth
источник
@Kevin D: То есть ответственность. Вы несете ответственность за создание удобочитаемого кода.
doppelgreener
1
@Axidos, это потому, что я изменил свой ответ, как только понял, что я сделал.
dan_waterworth
Я удалю свой оригинальный комментарий, так как он больше не актуален.
Кевин Д
1
«Читаемый» кем? Мои "сверстники" (т.е. кто-то с образованием и опытом похож на мой)? Кто-то, кто действительно хорошо образован в искусстве и науке? Или Обезьяна Flying Code, которая НЕ имеет никакого дела с чем-то более продвинутым, чем Dartmouth BASIC?
Джон Р. Штром
7
@ Джон, другие в этом контексте подразумевают других программистов. В предложении: «Жираф был больше остальных», мы не понимаем, что другие означают летающих обезьян. «Другие» означает «больше того же типа, кто еще не был упомянут».
dan_waterworth
22

Программист несет ответственность за конфиденциальность и безопасность всех предоставленных пользователем данных. Особенно пароли, номера кредитных карт, адреса электронной почты и физическое местоположение.

Malfist
источник
Это действительно подпадает под область системного архитектора. Во многих корпоративных сценариях программисты не имеют права голоса или контроля над хранилищами данных. Как я могу нести ответственность за адрес электронной почты в базе данных, когда все, что я делаю, - это доступ, а не создание этой базы данных?
Нил Тибревала
2
Я думаю, что люди из Facebook не должны подавать заявки, поскольку большинство из вышеперечисленных обязанностей идут. :)
MetalMikester
4
-1 это слишком большая ответственность.
Питер Тернер
6
Возможно, для крупномасштабных систем это может быть слишком сложно для одного программиста. Но для подавляющего большинства сайтов, где работает один или несколько программистов, абсолютно необходимо правильно хранить данные. Нет необходимости в шифровании, когда требуется хеширование, нет пользовательских алгоритмов или защита от неясности. Настоящая, проверенная безопасность.
Malfist
@Neal: системный архитектор просто еще один программист. Конечно, для больших проектов он, вероятно, не будет заниматься программированием, но это не значит, что он не программист. И это относится только к крупным проектам; в проектах из 2 или 3 человек программист обычно отвечает за некоторую часть базы данных или за ее целостность; он несет ответственность за надежное сохранение данных.
конфигуратор
20

Не заставляйте пользователя терять свою работу.

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

Например, если пользователь заполнил вашу форму из 30 полей с 29 действительными элементами и 1 недействительным, не удаляйте все свои действительные данные, чтобы жаловаться на 1 недействительный (черт, даже не удаляйте недопустимый). . возможно, это долго и просто требует незначительной коррекции, или пользователь не вспомнит, что было раньше, если вы очистите его)

Неочевидным, но важным примером является то, что Windows и практически все остальные программы «файлового менеджера» ошибаются .... если я потратил полчаса, тщательно Ctrl-Click'ing, чтобы выбрать набор файлов, и я случайно нажал вместо Ctrl-Click, он не должен очистить все мои ранее выбранные файлы, заставляя меня начать все сначала.

Еще одно, что они ошиблись ... если я случайно нажму Ctrl-A (вместо Ctrl-S по соседству), он не должен потерять свое место в файле и поставить курсор в начало .... Я вызываю поиск нужное место в файле «работа», который программа «потеряла».

Еще одно: диалог "фиксации" TortoiseSVN содержит длинный список файлов. Прежде чем нажать «Подтвердить», вы можете просмотреть список файлов, дважды щелкнув по каждому из них, чтобы увидеть его изменения во втором диалоге. Чтобы сделать это быстро, я иногда использую только клавиатуру, нажимая, <Esc>чтобы закрыть второе диалоговое окно и вернуться к первому. Если я случайно нажму <Esc> два раза, он также закроет 1-й диалог, в результате чего я забуду, какой файл у меня был.

оборота JoelFan
источник
5
Старайтесь не создавать сочетания клавиш, которые выполняют противоположные действия, назначенные клавишам рядом друг с другом (например, CTRL-C и CTRL-V не могут подсказать, сколько раз их скопировать, когда я собирался их вставить, и наоборот)
HLGEM
5
@HLGEM, как это ни парадоксально, тот, кто придумал это, вероятно, думал, что делает нам одолжение, ставя их рядом друг с другом
JoelFan
4
А он не был? Я имею в виду, что вы не обладаете всей мощью Emacs или чего-то еще, но вы можете копировать и вставлять, не перемещая руку.
compman
1
Используйте Total Commander. Щелкните правой кнопкой мыши, чтобы выбрать, и щелкните правой кнопкой мыши, чтобы отменить выбор. Если вы не перемещаетесь куда-то еще или не теряете фокус в течение длительного времени, пока текущая папка, которую вы просматриваете, изменяется, вы не потеряете свой выбор.
конфигуратор
1
В последнем примере (Ctrl-A теряет свое место в файле) я недавно нашел частичный обходной путь, который работает во многих программах ... Ctrl-Z, Ctrl-Y ...., который отменит мое последнее изменение в содержимое файла, затем «переделать» его, в результате чего содержимое будет таким же, как и раньше, и я нахожусь в месте редактирования. Это не обязательно то же самое, что место, где мой курсор находился прямо перед моим ошибочным сочетанием клавиш Ctrl-A, но оно часто достаточно близко ... это, конечно, не оправдывает плохое поведение программы на Ctrl-A ... это лишь частичный обходной путь и мне потребовалось время, чтобы напасть
JoelFan
15

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

Например, его программа не должна:

Мейсон Уилер
источник
1
Мне очень нравятся как пользователи, так и программисты. Прыгающие значки в моем доке - причина моей ярости по отношению к людям, которых я никогда не встречал.
Agos
7
Мне нравятся все они, за исключением «обновлять себя без согласия пользователя». Я нахожу способ обновления Chrome само по себе освежающим - мне нравится просто находить новые функции. Однако то, как это делают другие программы, отвратительно. Я смотрю на тебя, Java, и на тебя, Acrobat Anything. Вы не спрашивайте меня , если я хочу , чтобы обновить вас каждый день. Я сказал не один раз, возьми намек!
конфигуратор
2
Если программа должна автоматически обновляться, по крайней мере, она должна запросить согласие пользователя в первый раз.
Габлин
Еще одно нарушение со стороны TortoiseSVN ... выполнение с ним почти всего заставляет систему
зависать
@ SpashHit: Хм? Я использую TortoiseSVN ежедневно, и я никогда не замечал этого ...
Мейсон Уилер
8

Из Манифеста для Software Craftsman :

Как начинающие разработчики программного обеспечения, мы поднимаем планку профессиональной разработки программного обеспечения, практикуя ее и помогая другим научиться ремеслу. Благодаря этой работе мы пришли к оценке:

  • Не только работающее программное обеспечение, но и хорошо продуманное программное обеспечение

  • Не только реагировать на изменения, но и постоянно добавлять ценность

  • Не только отдельные лица и взаимодействия, но и сообщество профессионалов

  • Не только сотрудничество с клиентами, но и продуктивное партнерство

То есть при поиске предметов слева мы нашли предметы справа незаменимыми.

Spong
источник
8

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

  1. Ничего нового не узнаю
  2. Не стремясь расширить свои навыки
  3. Не быть открытым для новых, придерживаясь старых привычек
  4. Не заботясь о качестве вашей работы
  5. Не стремясь улучшить качество вашей работы
  6. Работать с 9 до 5 без страсти
  7. Не имея собственного мнения о вещах
  8. Принятие мнения других без вопросов
  9. Полагая, что вы все узнали
  10. Не терпит никакой критики
  11. Не слушает внешний вход
  12. Быть эгоцентричным, всезнающим человеком
  13. Наличие отрицательной личности и критика других людей
оборота user8685
источник
+1, но формулировка этого пути делает его довольно отрицательным.
dan_waterworth
1
Я нахожу # 13 весьма ироничным, так как это, по сути, то, что вы делаете здесь, хотя и в общем смысле.
Дастин Расен
6
  • Ответственность программиста заключается в создании программного обеспечения, которое удовлетворяет требованиям требований, анализа, проектирования и спецификаций, установленных в любых контрактах между программистом и клиентом.
  • Ответственность программиста заключается в создании программного обеспечения, которое будет экономичным, надежным и эффективно работает на реальных машинах.
  • Ответственность программиста заключается в том, чтобы работать максимально эффективно, этично и с максимально возможной честностью и вести себя с максимальным профессионализмом.

Часть из этого относится к обязанностям "Программной компании ".

Стивен Фурлани
источник
4
  • Программист должен знать и использовать основные библиотеки и используемую платформу.

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

  • Программист должен создать самодокументируемый код

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

Например, сравните:

// validates if is leap year
if(  year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) ) { 
     doSomethingWithFebruary();
}

в

if( isLeapYear( year ) ) { 
    doSomethingWithFebruary();
}
оборота ОскарРыз
источник
4

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

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

Нил Тибревала
источник
2

1) Четко объясните, что решение любой проблемы будет иметь компромисс между производительностью, стоимостью, временем и качеством.

2) Заполните соответствующую документацию, будь то заметки или планы испытаний. (документация зависит от типа и размера компании)

3) Запросить правильные инструменты для своей работы (многие просто стонут об этом, но никогда не обращаются к своему боссу с разумным аргументом для получения того, что им нужно)

... Другие без сомнения, чтобы следовать.

Кевин Д
источник
2

Вопрос к чему-либо. Программист должен нести ответственность за то, чтобы узнать, что может потребовать или сделать система. Это может включать вопрос о том, что пользователи могут посчитать глупыми вопросами, поскольку существуют различные сайты, посвященные тому, чтобы показать, на что способны пользователи. Ежедневные WTF и SharkTank - пара примеров, хотя я уверен, что есть и другие.

JB King
источник
1

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

Вот почему менеджеры должны убедиться, что у них есть все для их цели.

оборота user2567
источник
1

Вот мое предложение.

  1. Программист должен требовать условий труда, указанных в Билле о правах программиста, чтобы не понижать стандарты для этой должности.

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

cbrandolino
источник
-1. Я не думаю, что ответственность может быть той, которая "требует" права.
Крейг,
1

5 заповедей гильдии программистов

1.) Проверяйте свой код еженедельно и в праздничные дни.

2.) Обеспечить потребности сообщества программистов.

3.) читать хотя бы одну книгу по программированию в год.

4.) посещать как минимум одну конференцию по программированию в год.

5.) Признайте свои ошибки.

Питер Тернер
источник
"проверять его / ее код еженедельно и в праздничные дни"? Вы имеете в виду ежечасно, верно?
конфигуратор
@configurator Я имею в виду как минимум, чтобы назвать себя программистом. Но чем больше проверяет, тем лучше
Питер Тернер
1

Я добавлю «всегда документировать любые сделанные предположения» в список. :-)

Джон Паркер
источник
Или ... никогда не делать предположений?
Стивен Фурлани
2
@Stephen Furlani - это, к сожалению, практически невозможно для проекта любого размера.
Джон Паркер
0

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

gablin
источник