widdershin / programmers-oath Goto Github PK
View Code? Open in Web Editor NEWAn oath for programmers, comparable to the Hippocratic Oath
License: Creative Commons Zero v1.0 Universal
An oath for programmers, comparable to the Hippocratic Oath
License: Creative Commons Zero v1.0 Universal
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 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.
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!
I came upon The Post-Meritocracy Manifesto which I have added to awesome-humane-tech.
It has some interesting points that are relevant to the Programmer's Oath. Though also some points for improvement.
I think it could be added to Related work section, and am happy to PR, if you want.
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.
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?
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:
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
The text in item 5 seems like two separate items. Both items are important, but they seem somewhat distinct.
- 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.'
Consider referencing or including texts from similar documents, such as https://www.acm.org/about-acm/acm-code-of-ethics-and-professional-conduct
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.
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)"
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?
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)
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?
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.
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.
@mermop suggested that we make a website to list signatories, like the Agile Manifesto.
I like this idea. Are there any considerations? Is there anything lacking about the current approach we could improve on?
"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."
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.
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.
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 :)
Hi @Widdershin 🙂
I would like to make you aware of a somewhat different, but very related effort to the Programmer's Oath:
https://github.com/neveragaindottech/neveragaindottech.github.io and on https://neveragain.tech
Maybe there is some interesting content for this repo there, or you can make reference to it in the README (I would be willing to PR if you'd like).
This programmer's oath predates this one by more than four years.
Here's the Hacker News discussion of it.
It is worth comparing, as well as reaching out to its author for input, collaboration or a possible merging.
@Widdershin, there is so much overlap. Is the oath you wrote derivative, or is the similarity just a reflection of shared values/truths?
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
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.
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?
As the Oath is the 'Code' of the project, I feel it would be appropriate to separate it into a different file, such as 'tenets.md' or somesuch. Github and Markdown support relative links in .md files which could be used to access the tenets proper 'clickably' from the README.
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
Like the 20 Precepts of Shotokan and the five tenets of the Dark Brotherhood, all lists of tenets should be numbered for ease of reference.
Of course, for a programmers tenets, the numbers should be contextually appropriate.
for human beings .. I will strive to promote it as a machine with infinite application by human beings.
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.
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:
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.)
Just wanted to make a list of all the places I've seen interesting discussion around the oath, just to work through it all later.
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.
I will strive to ensure this remains always so.
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.
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?
See gambling, social media engagement hooks, porn etc and the general process of addiction.
I've seen lives destroyed by these exploits in our human nature by profit seeking individuals and institutions. Obviously it's not only the technology's fault, but it sure as hell doesn't help.
For more details see Paul Graham's essay on the acceleration of addiction. http://paulgraham.com/addiction.html
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.
@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.
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 ?
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.
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:
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)
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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.