Giter Site home page Giter Site logo

programmers-oath's Introduction

Programmer's Oath

As a programmer, I swear to fulfill these tenets:

  1. I will only undertake honest and moral work. I will stand firm against any requirement that harms people unnecessarily.

  2. I will respect the lessons learned by those who came before me, and will share what I learn with those to come.

  3. I will remember that programming is art as well as science, and that warmth, empathy and understanding may outweigh a clever algorithm or technical argument.

  4. I will not be ashamed to say "I don't know", and I will ask for help when I am stuck.

  5. I will respect the privacy of my users, and use their data only to the end that it was entrusted to me for.

  6. I will be humble and recognize that I will make mistakes.

  7. I will tread most carefully in matters of life or death.

  8. I will remember that I do not write code for computers, but for people.

  9. I will consider the possible consequences of my code and actions. I will respect the difficulties of both social and technical problems.

  10. I will be diligent and take pride in my work.

  11. I will recognize that I can and will be wrong. I will keep an open mind, and listen to others carefully and with respect.

  12. I will be kind to my fellow programmers and offer help to the best of my ability. I will not feign surprise when they don't know something, or disparage their code.


Something missing? Disagree with a tenet? Think the wording should be changed? Please open an issue and we can figure it out. I highly welcome collaboration, and I will do my best to facilitate an oath that reflects a diverse range of views. Please read the code of conduct and abide by it. If you have a negative experience collaborating on this project, reach out to me and I will do my utmost to help.

Inspired by the Modern Hippocratic Oath and the Obligation of the Engineer.

Signing

We have a list of public signatures in the SIGNATURES file.

If you wish to sign, please add your username and the current commit hash to the end of the SIGNATURES file (leaving a newline after your addition), and submit a pull request.

If you do sign, please also consider sharing this repository in your communities and encouraging others to take a look.

Re-signing

The oath is a living document, changing based on the feedback and agreement of those who wish to contribute. When you sign, the commit hash serves as the 'version' of the oath to which you have agreed. This means you are beholden to only what you have signed, and not the versions of the oath that have come later.

Signatories are welcome to upgrade or downgrade to older or newer versions of the oath whenever they choose.

To do this, open another Pull Request. On your signature line, replace the old commit hash with the hash of the version you choose. A contributor will check and merge your alteration in the same way as they would a new signature. We recommend that signatories follow the repository through GitHub so that they can see updates as they are made, and decide whether or not to re-sign.

Humane technology

Awesome Humane Tech

The Center for Humane Technology (CHT) community - who strive to align technology to humanity's best interests - endorses this repository with the Humane Tech badge. Raising employee awareness within IT companies is one of the CHT's core pillars, and adhering to the Progammer's Oath is an excellent start to work towards this goal.

Related work

License

CC0

To the extent possible under law, Widdershin (the maintainer) and other contributors have waived all copyright and related or neighboring rights to this work.

programmers-oath's People

Contributors

aschrijver avatar brylie avatar eentzel avatar emptymalei avatar jacob-willden avatar kartiksoneji avatar manuel-uberti avatar mavericklez-zz avatar mo-g avatar neitomic avatar nick-bennett avatar niekesselink avatar ofalk avatar paulonteri avatar petk avatar philipbroadway avatar pimmen avatar quad avatar raghav-kukreti avatar richin avatar sai-manoj-kumar avatar saikumarganji avatar samshal avatar samuelholland avatar shawntax avatar shivagoud avatar shreyasbharath avatar tilda avatar vassudanagunta avatar widdershin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

programmers-oath's Issues

Learnings is not a real word

Please replace the word "learnings" with "lessons", unless you are talking about Cultural Learnings of America for Make Benefit Glorious Nation of Kazakhstan, which I don't think applies in this case :)

We should semver this, so it is clear, what one is signing

There is currently a open debate about the contents of this oath. I like the idea of this oath and would like to sign it, but I would want to be safe that it is clear what I signed, just in case, iff the contents change to include something I don't agree.

Simplicity matters

Could we add something about the fact that a programmer should thrive towards simplicity?

It is implied when we say that we code for people, not machine.
It would be nice to make it explicit.

To emphasizes simplicity’s virtues over easiness’, showing that while many choose easiness they may end up with complexity, and the better way is to choose easiness along the simplicity path.

Source:
youtube 30 min: https://www.youtube.com/watch?v=rI8tNMsozo0
InfoQ 1h: https://www.infoq.com/presentations/Simple-Made-Easy
Slides (PDF): https://github.com/richhickey/slides/blob/master/simplicitymatters.pdf

I don't want to build a statue of Rich Hickey but what he says rings so true!

What do you think?

Intellectual property?

Would it be appropriate for there to be something in here about ownership of code when writing professionally? I don't know that it needs to be super-specific. It could be as simple as "I understand that the correct time to negotiate ownership of the code I produce is prior to engaging in a professional relationship, and that, if left unnegotiated, ownership of my code should be, as with any other work-product, owned by the (purchaser|payer|employer, not sure of the best term here)"

Is pride and diligence really required?

I don't see it in the Hippocratic and I have the same problem with its mention in the Engineer's oath. Pride is the first Deadly Sin, it can inspire some positive things but also some negative things. Seems to me that its function is to foster a guild mentality more than anything. Pride is at odds with humility. Diligence by itself without clarification could merely be interpreted as "working long hours" which is not positive thing about our industry. Being programmers, perhaps a definition of terms like "X at least Y but not to exceed Z" would be a more effective behavioral guide to the sorts of people who need an oath to follow.

Seems to me that the existing oath covers:

  1. Ethics/integrity
  2. Respectfulness
  3. Empathy
  4. Humility
  5. Privacy/trustworthy
  6. More humility for severe situations
  7. Humanity
  8. Unforseen consequences
  9. Careful/vigilance/devotion/dependability/discipline/fortitude/loyalty/perseverance/responsibility
  10. More humility

So as implied, I would suggest replacing number 8 with some of the words I used (taken from a generic list of virtues, where pride is notably absent.) Diligence is defined by that list as "Conscientiousness in paying proper attention to a task; giving the degree of care required in a given situation. Persevering determination to perform a task." maybe including it with some of that elaboration would be more useful. (America has a Puritanical "hard joyless work is a virtue" history, whereas other countries prioritize other things over work; making this strike a balance and be universally applicable to all programmers would be valuable. I find the definition of "diligent" to be okay, it's just a word that apparently gets misused often.)

Suggestion for 10. Be kind to beginners

  1. I will be kind to beginning programmers and offer help to the best of my ability. I will not feign surprise when they don't know something, or disparage their code, and will try to point them in the direction of learning to solve their own problems.

Use of less humane code

Something that should be added is a refusal to use the work of other, less ethical coders in your own code - much like how research carried out inhumanly on animals/humans is treated in medicine...

-- (wishes to stay anonymous and I have posted this on his/her behalf)

"I do not write code for computers"

I'd like to briefly say I think this project is a great idea - a field as open and potent as programming deserves a common ground its participants can believe in.

As invited by your readme, I'm taking issue with tenet no. 6, and the phrase "I do not write code for computers" - as a plain English statement, it's obviously false. Right now, in another window on my screen, I'm writing experimental code for my computer to run, and for me (admittedly human) to observe the effects of. The phrase obviously isn't meant to be taken so literally, but to me it's, as a result, actually unclear what the tenet means...

I think the tenet is trying to imply that I, while programming, mustn't forget that, ultimately, this code will run on machines used by people, but the tenet might instead (or also) be talking about other programmers who may need to run or inspect the code - and I don't know which it's talking about.

If it's the former, I agree with the tenet - whereas if it's the latter, I actually think it's at odds with the oath as a whole, because sometimes code that is friendlier to an end-user's computer must be less friendly to a fellow programmer. e.g. Crafting code that takes less processing time/power for a user's computer, but that takes more time/commentary to explain to a fellow programmer.

At minimum, I think the tenet needs to clarify which set of "people" the it's referring to; the users, or fellow programmers. (other tenets vary as to which group they affect, but they tend to specify; e.g. no. 0 vs. no. 4)

At maximum, the tenet may even need to be split into two tenets, because I think the 'pull' between whether to serve the end-user or serve the programmer is at the heart of this oath, and any ambiguity that can be removed on this aspect will strengthen the whole project.

Once again, thank you for pursuing this; I think it has amazing potential.

Even arts have technical rules

"warmth, empathy and understanding may outweigh a clever algorithm or technical argument" That's quite dangerous. Yes, programming is also an art and cannot be completely analyzed. But technical arguments cannot be defeated by warm and fuzzy feelings. Unlike a pure work of art, which cannot be judged in an objective way, a program works or doesn't.

I suggest to keep only "I will remember that programming is art as well as science and that some issues are hard to address purely by technical arguments."

My opinion on point number 7

It states:

I will remember that I do not write code for computers, but for people.

As I understand it, this point calls for readable code over code that performs a bit better but looks way worse. I mostly agree with that, but sometimes when working with extremely limited platforms like microcontrollers it can be hard to follow this rule while keeping reasonable performance.

  1. Is my interpretation of the rule correct?
  2. If so, can it be okay to break it in certain cases?
  3. If so, is it worth it to reflect this possibility in the rule?

Mentions of not discriminating and the environment

I recently looked at the Archimedean Oath and I think we miss tenets about not disenfranchising people because of their religion, ethnicity, gender or such and respecting the environment.

Examples of the first one is the field I work in, machine learning. As decisions are made more and more often by ML models I think engineers have a moral responsibility to make sure the decisions don't make an impact for one group at the expense of another through bias. At least, I think they should be mindful of the bias in their data when they make models.

An example of the second would be the defeat device of Volkswagen, I think a moral programmer should turn down building software who's sole purpose is to trick environmental regulators and keep hurting the planet.

I suggest changing tenet 8 to address the issue of discrimination.

I will consider the possible consequences of my code and actions. I will not write software that hurts people based on religion, nationality, race, sex, wealth and politics.

And creating a new tenet for the environment.

I will practise respect for the environment.

You are entitled to wear the Humane Tech badge

Hi @Widdershin ,

I am community moderator and forum admin of The Center for Humane Technology, and - as I mentioned in another issue - I have added this repository to the curated awesome humane tech list.

This means that you are entitled to display the Humane Tech badge on your README.

If you would like that, of course, otherwise.. no offence taken 🙂

You can add it after or directly below the title, or alternatively in a section at the bottom of the page (maybe with some more text to it), by adding:

[![Humane Tech](https://raw.githubusercontent.com/engagingspaces/awesome-humane-tech/master/humane-tech-badge.svg?sanitize=true)](https://github.com/engagingspaces/awesome-humane-tech)

I can PR if you prefer that.

Pragmatism over idealism?

I think there's a case for paid work to be pragmatic but this is more appropriate for a professional code of conduct than an oath.

Since programming is also an art I'm not going to swear an oath to pragmatism!

ACM ethics code is updated and includes stuff we should have

The Association for Computing Machinery's Committee on Professional Ethics recently updated their guidelines for being an ethical programmer, after more than 25 years. They described their reasoning in this Scientific American article. It mentions stuff I've already raised, like not writing software that disenfranchises people through discrimination, but also other stuff like such as being honest about whether or not you believe you can actually accomplish the task with your skills and competence when you take on new work and that we should foster an environment where technical skills are shared amongst us.

There's lots of good stuff in the ethics code in my opinion, what do you guys think?

Moral vagueness

I will only undertake honest and moral work. I will stand firm against any requirement that exploits or harms people.

Almost everyone believes they have good morals, and the right amount of honesty for the limits imposed on them. The biggest exploiters spin their work as benefitting the receiver.

Is suspect almost everyone would agree they adhere to this regardless of what they do. Therefore this seems a null point.

Could this be more objective?

not sure I like the "my users" phrasing

Really enjoy the oath, but I think saying "my users" sends the wrong message. "people who use the software to which I contribute" is not as pretty, but I think rephrasing is worth a discussion.

Is an Order of Precedence Implied?

I'm not in favor of prefacing 'In No Particular Order' or somesuch if this is not the case, but I'm curious if @Widdershin, you intended to imply a specific order of precedence?

If so, 1. is a great thou shalt not kill, but I wonder if 4. 5. and 7. should be 3. 2. and 1. instead?

I will only undertake honest and moral work. I will stand firm against any requirement that exploits or harms people.

I will consider the possible consequences of my code and actions. I will respect the difficulties of both social and technical problems.

I will tread most carefully in matters of life or death. I will be humble and recognize that I will make mistakes.

I will respect the privacy of my users, for their information is not disclosed to me that the world may know.

Do no harm

@chbarts make a good point over on Lobste.rs: https://lobste.rs/s/yojsj3/programmer_s_oath

Point zero is arguable. Is it never permissible to write code that hurts others? Well, that’s the same question as whether self-defense is ever justified, or whether the existence of weapons is ever justified, or whether the existence of a military is ever justified. Not being a pacifist, I cannot agree to it as it stands, and being a pragmatist, I suggest you punt the issue as being outside of what this oath should try to make all programmers everywhere agree on.

Potential rephrase of #4

This is a super small thing, but it kinda bugged me a little the first time I read the oath. Tenet number four currently says:

I will respect the privacy of my users, for their information is not disclosed to me that the world may know.

but I feel like this doesn't actually speak to the majority of privacy violations. A lot of the time, a privacy violation doesn't come from a user's information being disclosed to the world at large, but from developers collecting more data than they need in order to meet the user's goals, in an effort to complete some goal of their own.

For example, GameCo might need a user's birthday to comply with the the local law, but also decides to collect the user's contacts, which doesn't meet any real wants of the users', but is used to help advertise the game, at the cost of the privacy of the user, and the user's friends.

Another example that might be a bit more relevant to ethics minded devs: Say Devan designs a chat bot and introduces it to *the world*. Because of it's nature, the bot can read a lot of different chatrooms, and has access to lots of user data. It would be unethical for Devan to take advantage of this to read their user's chat messages, although this doesn't clearly violate the 4th tenet, since the user's data isn't exposed to the world.

One last example, some company, lets say Shmoogle, has been trusted with a lot of user data. It would be unethical to feed that data into an advertising algorithm for profit. Not a single human more is aware of the user's data, since it's all handled by the ✨ ~algorithm~ ✨, but it's still clearly unethical, not because of who the data is being exposed to, but because the data is being used to an end that the users did not disclose it for.

Tenet 4 could be interpreted to cover these cases, but I feel like it's pretty subjective, and someone tempted into doing this could easily dismiss it. I'm proposing the following change to Tenet 4 to hopefully make this a little more clear:

I will respect the privacy of my users, and use their data only to the end that it was entrusted to me for.

It's a small change, but I think it speaks to the above dilemas well, while still keeping the emphasis of the original:

  • User data is granted with trust, and that is a privilege
  • Users have their own goals when disclosing information, that may differ from what I would like to use it for
  • User privacy must be respected, and abusing their data is a violation of that.

That said, I'm completely open to feedback. I've opened this as an issue instead of as a PR because I'd rather frame it as a potential area for change with a WIP idea than me presenting a finished solution, so please let me know if there are things you think this phrasing fails to cover, misrepresents, or is confusingly worded on, or if there are other ideas you think it should cover.

Looking forward to hearing back,

Emi <3

Number 9 is redundant

I think number 9 is a bit redundant considering numbers 3 and 5 express the same idea, even, maybe also number 1:

1. I will respect the learnings of those programmers who came before me, and share my learnings with those to come.

3. I will not be ashamed to say "I don't know", and I will ask for help when I am stuck.

5. I will tread most carefully in matters of life or death. I will be humble and recognize that I will make mistakes.

9. I will recognize that I can and will be wrong. I will keep an open mind, and listen to others carefully and with respect.

I suggest drop that number or maybe clarify the difference with the mentioned ones

Signing a changing oath.. versioning required?

When you sign the oath, you sign the current version of it.. but the oath can be changed at any time by a PR. What if someone that signed does not agree to a future revision of the oath?
Shouldn't there be some kind of versioning scheme?

Use of 'Code' licence for text-only project.

MIT licence explicitly states 'Software', and is not suitable for a project that doesn't contain such.

An appropriate licence for this kind of project would be Creative Commons CC-0, or CC-By if attribution and copyright retention are desired.

'moral work' is ambiguous term

I will only undertake honest and moral work.
This is ambiguous. How you judge work in terms of morals as they are different for everyone ?

The Hippocratic Oath for Technologists

Hi @Widdershin ,

Making you aware of another Hippocratic Oath of ethics for Technologists (by @MKDale) that I just added to awesome-humane-tech:

And which was is also described in this article: https://builttoadapt.io/technologists-hippocratic-oath-94b88d3fe480

PS. I'll soon be moving awesome-humane-tech to a new location. That of our Humane Tech Community under this Github organization: https://github.com/humanetech-community

Security and quality?

Looking at this through the lens of computer security, and having worked with quality assurance folks long enough, I feel as if both security and quality ought to be explicitly called out. Quality is implied by a few tenets (2, 3, 5, and 8 stand out for me in this respect), and Security in 0, 4, and 5.

Perhaps two new tenets: I will write code to the best of my ability, keeping in mind that the quality of my code is how both it and I will be remembered; I will remember that security vulnerabilities are quality defects, and that they should be treated with equal care and respect.

License extension: For ethical use only

Thanks for this great initiative. I signed up :)

I would like to point to a discussion I started on the Discourse forum of the recently founded Center for Humane Technology on the possibility to create a For Ethical Use Only OSS license type, or extension. Very much related IMO to this oath, but more formal (but maybe hard to realize).

See the discussion: Idea - Extending OSS licenses: For Ethical Use Only

Would like to hear your opinions on the feasibility of this idea..

PS I'll cross-post a link to this repo on the same thread and add you to the Awesome Humane Tech list

Remove reference to God

I will tread most carefully in matters of life or death. Above all, I must not play at God.

That phrase was adapted originally from the Hippocratic Oath, but is a bit out of place here.

Thanks to @mermop for this feedback.

Addition to programmer's oath.

I shall not leave a known issue unaddressed.
I shall test the code I write to the best of my ability and knowledge of usage patterns.

You were added to awesome-humane-tech

This is just a FYI issue to notify that you were added to the curated awesome-humane-tech in the 'Ethics' category, and - if you like that - are now entitled to wear our badge:

Awesome Humane Tech

By adding this to the README:

[![Awesome Humane Tech](https://raw.githubusercontent.com/humanetech-community/awesome-humane-tech/main/humane-tech-badge.svg?sanitize=true)](https://github.com/humanetech-community/awesome-humane-tech)

https://github.com/humanetech-community/awesome-humane-tech

Privacy is not just about the world, it is about you, too.

I will respect the privacy of my users, for their information is not disclosed to me that the world may know.

Their information is not disclosed to you. You may have access to it, but it was most likely disclosed to a system you wrote for the purpose of fulfilling the features they understood the system to offer them. They probably have relatively reasonable expectations that their data is being handled by a system, not by humans, and violating that expectation is wrong.

Protesting Facebook dishonesty, Google military projects, or Microsoft ICE projects

These have all been in the news. Google employees have resigned over a Pentagon artificial intelligence contract, and Google has at least backed out a little. Microsoft employees have protested MS's relationship with ICE, yet Microsoft is making excuses because profits come first. Some high level ex-Facebook employees and execs have railed out against Facebook.

What does this oath have to say about all this? Not the actions of Google, Microsoft or Facebook, but their employees action or lack of action. How many employees kept quiet because the weren't willing to risk being labeled a trouble maker, risk promotions, or quit and give up their high compensation packages?

What about Microsoft's acquisition of GitHub, the de facto home of the open source community. How should users react to GitHub's bait and switch, attracting so many of us on the implied promise of independence and neutrality, but then selling us out for $7.8 billion? Do we allow such actions to go without consequence? Do we ourselves sell out the FOSS movement because GitHub is so comfy for us?

What do signers of this oath think of these principles, which would require conscientious programmers to vote with their feet?

Many of us lament that Facebook will never be held accountable because at the end of the day, its users don't live their convictions. Aren't we the same, unable to leave this programmer's Facebook?

Use Github Pages and a commit hook to extract user info with the Github API

An interesting extension to this repository would be to have a published webpage (using Github Pages) and a commit hook, which kicks in when a new entry to SIGNATURES is added, and then uses the Github API to extract the display name of the user and maybe her/his avatar picture. After which it then automatically republishes the updated webpage.

Item 5 could be two items

The text in item 5 seems like two separate items. Both items are important, but they seem somewhat distinct.

  1. I will tread most carefully in matters of life or death. I will be humble and recognize that I will make mistakes.

The 'I will be humble and recognize that I will make mistakes.' seems more directly related to item 3 'I will not be ashamed to say "I don't know", and I will ask for help when I am stuck.'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.