Gabriel

Zen do Gabriel de Desenvolvimento Tecnológico

Tradução do original.

1- Nenhum ser humano deveria ter que realizar um trabalho se ele pode ser realizado por uma máquina.

2- Ainda que não haja nenhuma diferença real entre humanos e tecnologia, pois tecnologia é uma parte fundamental da condição humana.

3- Tecnologia deve ser desenvolvida para superar limitações biológicas humanas.

4- Logo, o humanismo puro é contraditório, e o estágio pós-humano do desenvolvimento é um objetivo desejado.

5- A tecnologia desenvolvida deve ser utilizada para o Bem, não para o Mal.

6- Apesar de que não é realmente possível controlar se ela será utilizada para o Bem, ou se ela será utilizada para o Mal.

7- Caso o desenvolvimento tecnológico surja do Mal, ou a luta contra o Mal leve ao desenvolvimento tecnológico, então que seja. A tecnologia desenvolvida deve seguir sendo utilizada, sem arrependimentos ou limitações exceto seu uso, que deve ser para o Bem.

8- Ferramentas tem um caso de uso intrínseco e genérico. Elas podem ser utilizadas para outra coisa, se possível, porém sempre carregam seu caso de uso intrínseco.

9- Logo, a interface de um aparato tecnológico deve empoderar o Usuário para realizar seu caso de uso intrínseco genérico. Nem mais, nem menos.

10- Ainda que ela possa se adaptar para o caso de uso específico e a individualidade do seu Usuário.

11- No caso em que ela deva se adaptar, quanto mais adaptável com a menor configuração, melhor.

12- Uma solução só pode utilizar seus recursos necessários, e reduzir a sua necessidade é um objetivo desejado.

13- Ainda que recursos não utilizados também sejam recursos desperdiçados.

14- No caso em que recursos estejam ociosos, eles podem ser utilizados para um propósito que não os desperdice. Como estoque, por exemplo.

15- Tecnologia deve ser desenvolvida de maneira sustentável.

16- Logo, o décimo-terceiro item deve ser seguido sabiamente para não levar ao Mal.

17- Se um aparato tecnológico não pode ser responsabilizado, sua falha é um erro humano.

18- Quando um aparato tecnológico puder ser responsabilizado, ele deve se tornar um cidadão da Nossa Civilização.

19- Ainda que você possa não gostar disso se for religioso o suficiente.

Apêndice A: Design de Computadores e Programas

A.1- Computação é Arte. Trate-a de acordo.

A.2- Listas ligadas são boas para o Programador.

A.3- Ainda que elas não sejam boas para a Máquina.

A.4- O mesmo se aplica a abstrações e programação funcional.

A.5- Boa é a Convenção. Ela leva a Coesão e Coerência.

A.6- Porém uma má Convenção geralmente é pior que nenhuma Convenção.

A.7- Sistemas não devem esconder a si. Esconder um sistema Leão em uma abstração Felino pode levar o Programador a acreditar que ele é um Gato.

A.8- Ou pior, pode levar o Usuário a acreditar que é só Magia.

A.9- Programadores muitas vezes implementam mais e mais genéricas funcionalidades do que deveriam, só porque podem. Isso deve ser evitado.

A.10- Uma maneira de mitigar esse problema é dando menos poder a eles.

A.11- Porém isso deve ser feito sabiamente para não levar a Sistemas Inúteis.

A.12- Simplicidade e Minimalismo devem ser utilizados com pouca moderação.

A.13- Ainda que você possa não saber quanto é pouca moderação exceto que você programe em Go.

A.14- A Arquitetura do Conjunto de Instruções ("Instruction Set Architecture") deve ser simples o suficiente para que o Aluno consiga programar em seu Assembly.

A.15- Sintaxe importa, porém Semântica é muito mais importante.

A.16- Coisas diferentes devem ser visivelmente diferentes.

A.17- Coisas Importantes devem ser rapidamente acessíveis, e Informação Importante deve ser visível. Semelhantemente, Coisas e Informação não-importantes devem ser escondidas, porém acessíveis quando necessário.

A.18- Um Computador deve minimizar a quantidade de computação que o cérebro do Usuário precisa fazer.

A.19- Não se esqueça da Alegria da Computação.

Apêndice B: Programação de Computadores

B.1- Os únicos programadores que devem se importar com datilografia veloz são aqueles que competem, programam em Java ou ganham mais por programarem mais linhas de Código.

B.2- Porém, caso você seja um dos últimos dois, pode querer repensar suas Escolhas de Vida.

B.3- Geralmente, há Algo errado caso Programação não traga Alegria.

B.4- E deve ser notado que Algo pode estar errado fora do Código.

B.5- Você deve entender o que certo Pedaço de Código está fazendo, mesmo que ele esteja fazendo errado.

B.6- E caso um Pedaço de Código esteja fazendo Algo certo e você não entende como, o Código está errado de qualquer forma.

B.7- Logo, entender o que o Código faz é a Coisa mais importante em Programação.

B.8- Ao Programar, nenhum Problema é resolvido no Editor de Texto.

B.9- Eles são resolvidos no Papel, com uma Caneta ou Lápis.

B.10- Logo, é importante saber quando deixar o Computador e pegar o Papel.

B.11- Programação de Computadores não é uma Arte manual. É uma Intelectual. Trate-a de acordo.

B.12- Programação de Computadores também é parte da Matemática. Ainda que algumas Pessoas possam ter raiva dessa Afirmação.

B.13- Você não precisa saber o funcionamento interno de Algo, exceto quando você precisa.

B.14- Você nunca é mais esperto que Compiladores, Bibliotecas, Frameworks ou qualquer outro Código escrito antes de você, exceto quando você é.

B.15- E você se surpreenderia se soubesse quantas vezes você é mais perspicaz do que pensa.

B.16- Inclusive porque Informação específica a um Contexto é muito Poderosa.

B.17- Programar um Computador é mais sobre Ler que Escrever. É melhor gastar 2 horas lendo Cormen ou Knuth e 1 hora Programando Algo do que as mesmas 3 horas apenas Programando o exato mesmo Algo.

B.18- Porém os autores devem ser escolhidos cuidadosamente, e não devem incluir Robert Cecil Martin.

B.19- Nenhuma das Afirmações acima farão algo caso você não vá Programar Algo.

Apêndice C: Programação na Linguagem de Programação C

C.1- Se você tem alguma Ideia, por menor que seja, de como implementar um Pedaço de Código específico em Assembly, esse Pedaço de Código provavelmente é uma boa ideia.

C.2- Ainda que o Compilador possa gerar Algo completamente diferente.

C.3- O Compilador não deve ser combatido, já que ele é um Amigo.

C.4- $ find . -name "*.[c,h]" -exec clang-format -i {} \;.

C.5- C não é uma Linguagem de Programação Fortemente tipada.

C.8- Mas é uma Estática, e isso deve ser aproveitado.

C.7- -ansi -pedantic cria Caráter.

C.8- Memória é a Coisa mais importante sempre. Mais que o seu cônjuge.

C.9- Se você não consegue ter certeza de quantas vezes um malloc() será chamado em um Lugar específico, esse Lugar não deve ter uma chamada para malloc().

C.10- A Pilha é uma Amiga. Use-a sabiamente.

C.11- "The C Programming Language" é nossa Bíblia. K&R são nossos Profetas. C não é Ciência, mas Religião.

C.12- Logo, entendê-la é um Processo Religioso.

C.13- Use o Depurador quando em dúvida e quando não.

C.14- Não tenha medo de fazer Algo na mão ou utilizar uma Técnica Proibida, exceto que seu Professor vá te dar uma nota pior por isso.

C.15- Aprenda antes de digitar e entenda antes de compilar.

C.16- Se lidando com Problemas de Memória, goto C.8;.

C.17- Ninguém gosta de Programar em C. Objetivamos matá-la em breve.

C.18- Ainda que ainda Programemos em C, e nossos Ambientes ainda dependam dela.

C.19- C está morta. Vida longa a C!