Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"I do not write code for computers" #22

Open
pachunka opened this issue Feb 27, 2018 · 4 comments
Open

"I do not write code for computers" #22

pachunka opened this issue Feb 27, 2018 · 4 comments

Comments

@pachunka
Copy link

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.

@Widdershin
Copy link
Owner

Thanks for your feedback.

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

To me, this tenet means remembering that we don't write code for code's sake. We write code for people, to solve problems, to bring joy and to share experiences. We need to remember that, because it guides our priorities.

I'm not saying that writing code for code's sake is bad, if you enjoy it or you want to practice. But even then, you're writing code for yourself, not for the computer.

When we optimize our code, we're doing it to improve people's lives and make our work accessible across a wider range of devices, so that more people can use it.

When we make our code more readable, we're doing it to improve our future life and the lives of our coworkers.

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)

I am not sure this is possible, because we write code for ourselves, our users, our stakeholders and our collaborators. All of the meaningful decisions we make in our code are about what impact we will have on the lives of others.

Perhaps there is a wording that can make the underlying sentiment I'm going for more explicit, what do you think?

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.

This is an interesting point, are there any other tenets you think carry this ambiguity?

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

😸 thanks for getting involved.

@pachunka
Copy link
Author

pachunka commented Mar 1, 2018

Sorry I'm late!

I've read over your reply today and yesterday, and I'm trying to settle my understanding of what the tenet means.

I think what's going on is that I mostly do understand the sentiment behind it - but it kinda seems like it's just common sense - so maybe I'm not sure why it's necessary to point out (albeit harmless). Maybe I'm out of touch - do people tend to "forget" that there are other people involved, like users, or their future selves? I could understand it in the context of, say, programming weapons guidance - pretty important to keep in mind that people are involved at the other end. Is that the kind of situation you had in mind?

I do have one question left, which is about a phrase you repeated - "code for code's sake" -- what does that actually mean? It sounds like it might be central to the point of the tenet, or at least was a motivator for writing it to begin with. I I can get a handle on what it means, I think I can help with some alternate wording, and/or settle on the current one being fine. ;)

One last thing, you asked:

This is an interesting point, are there any other tenets you think carry this ambiguity?

Actually, I don't - I think the others fall squarely in the realm of one group or the other. In fact, no. 7 does a great job at highlighting the difficulty of the 'pull' between technical and user requirements - so I actually think it's nicely covered; I should have noticed that earlier.

@pachunka
Copy link
Author

I've given this a lot of thought. @Widdershin I know you mentioned elsewhere that you're swamped, but I'll keep the discussion going over stretched out time if you're happy to - to me, it's worth ironing out every bump detected in the oath, so I'll keep at this one until somebody tells me to back off. ;)

I've noticed I'm having an irrational reaction to "I do not write code for computers", as an oxymoronic statement - so I'll try to address it as your paraphase, so that I don't sidetrack: "I do not write code for code's sake"

My best guess is that the intention behind this is to serve as a light in the dark to people who get lost in frustration working on long projects - forgetting their aim. You might start setting out to write software to improve something in your house - something for your family - but the code works out more entangled than you thought and you're awake for 48hours and get grumpy with said family. Irony! And so the guilty coder should remember the "code is for people" - and - take what course of action? Unclear.

I realise professional-environments are more common for examples, but I think the same basics apply.

The above is my best guess as to the kind of interaction driving this tenet.

Clearly my 'lots of thought' hasn't given me much progress. ;)

I'm not trying to be difficult, and I don't think I'm missing something fundamental - I love the oath, but I think this tenet is without meaning, stemming from the fear of loss of humanity for spending too much time in the 'world of code' - which is a genuine problem one should watch out for in their fellow coders - and again, I'm extrapolating - it may not even be what you were talking about - but compared to something like "I will not harm people" from tenet no.1, I find it hard to see this as belonging in the oath.

I'd love to hear from somebody else, like @vassudanagunta - you popped a thumbs-down sticker on my post, so you see me as having this wrong. I'm happy to turn out to be wrong, but I don't see it yet - I need help understanding this one. I appreciate both your patience so far with me on this one.

@Widdershin
Copy link
Owner

@Widdershin I know you mentioned elsewhere that you're swamped, but I'll keep the discussion going over stretched out time if you're happy to - to me, it's worth ironing out every bump detected in the oath, so I'll keep at this one until somebody tells me to back off. ;)

How dare you volunteer your time and effort to trying to improve this oath! You must be stopped at all costs!!! 😜

Seriously though, I can see that your intention is to try and make this oath better, and I will do my best to never discourage anyone from pursuing that goal, as long as they are kind, respectful and compassionate in the process, which you have been 😄

My best guess is that the intention behind this is to serve as a light in the dark to people who get lost in frustration working on long projects - forgetting their aim. You might start setting out to write software to improve something in your house - something for your family - but the code works out more entangled than you thought and you're awake for 48hours and get grumpy with said family. Irony! And so the guilty coder should remember the "code is for people" - and - take what course of action? Unclear.

This is definitely part of it, but not the exact line of thought that I had.

What I was trying to get at is why we write code, namely to improve people's lives, and that should guide our decisions.

For example, this tenet would discourage optimizing code merely for the sake of having the code run faster. It would encourage optimizing code that would have a positive impact on the lives of people, but not at the expense of people.

Another example is the pursuit of 100% test coverage. Sometimes this is not done because of the benefit it would bring to people, but instead for the sake of having 100% test coverage. If it makes people's lives better, do it! But if the only reason is for the ideal of having 100% test coverage, then that is questionable.

Although it sounds like you understand that, so I won't persist in reiterating my understanding of the tenet.

but compared to something like "I will not harm people" from tenet no.1, I find it hard to see this as belonging in the oath.

This is perhaps the real issue we're discussing. Re-reading the oath with this in mind, I think you're right in that this is perhaps the least crucial tenet. If I had to remove one, that would probably be it.

Also, one could argue that working for people rather than for technical ideals is a form of dilligence, so perhaps tenet no 9 covers these ideas sufficiently.

I like the idea that a work of art is perfect when there is nothing left to remove, so perhaps we should consider the removal of this tenet.

I would also like to hear from other perspectives beyond my own and @pachunka's. What does everyone else think? Are you strongly in favour of keeping this tenet, removing it or rephrasing it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants