The Zen of Gabriel for Technology Development

1- No human being should have to perform a work if it can be done by a machine.

2- Although there is really no difference between humans and technology, as technology is a fundamental part of the human condition.

3- Technology should be developed to overcome biological limitations of humans.

4- Thus, the pure humanism is contradictory, and the post-human stage of development is a desired goal.

5- The developed technology should be used for Good, not for Evil.

6- Although is really not possible to control whether it will be used for the Good, or whether it will be used for the Evil.

7- If technology development arises from Evil, or the fight against Evil leads to technology development, so be it. The technology should still be used, with no regrets nor limitations except it’s use, that should be for Good.

8- Tools have an intrinsic, generic use case. They may be used for something else, if possible, but they always carry their intrinsic use case.

9- Thus, the interface of a piece of technology should empower the User to perfom it’s intrinsic, generic use case. No more, no less.

10- Although it may adapt for the specific use case and individuality of it’s User.

11- In the case it has to adapt, the more adaptative with the less configuration, the better.

12- A solution may only use it’s required resources, and reduce it’s requirements is a desired goal.

13- Although unused resources are also wasted.

14- In the case resources are idling, they may be used to a purpouse that does not waste them. As stocks, for example.

15- Technology should be developed in a sustainable fashion.

16- Thus, the thirteenth guideline should be wisely followed to not lead to the Evil.

17- If a piece of technology can not be held accountable, it’s failure is a human error.

18- When a piece of technology may be held accountable, it should become a citizen of Our Civilization.

19- Although you may not like that if you’re religious enough.

Appendix A: Computer and Program Design

A.1- Computing is Art. Treat it accordingly.

A.2- Linked-lists are great for the Programmer.

A.3- Although they’re not great for the Machine.

A.4- The same applies for abstractions and functional programming.

A.5- Convention is great. It leads to Cohesion and Coherence.

A.6- Although a bad Convention is often worse than no Convention at all.

A.7- Systems should not hide themselves. Hiding a Lion System in a Feline abstraction may lead the Programmer to think it’s actually a Cat.

A.8- Or worse, it may lead the User to think it’s just Magic.

A.9- Programmers often implement more and more generic features than they should, just because they can. This should be avoided.

A.10- One way to address this issue is giving less power to them.

A.11- Although this should be done wisely to not lead to featureless Systems.

A.12- Simplicity and Minimalism should be used with little moderation.

A.13- Although you may not know how much is little moderation unless you program in Go.

A.14- The Instruction Set Architeture should be simple enough so the Student can program in it’s Assembly.

A.15- Syntax does matter, but Semantics are much more important.

A.16- Different Things should be visibly different.

A.17- Important Things should be quickly accessible, and important Information should be visible. Similarly, non-important Things and Information should be hidden, but accessible when needed.

A.18- A Computer should minimize the amount of computing the brain of the User must do.

A.19- Don’t forget the Joy of Computing.