Gabriel

21 September, 2024 Anno Domini - 20:44

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

  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.
  2. Porém, caso você seja um dos últimos dois, pode querer repensar suas Escolhas de Vida.
  3. Geralmente, há Algo errado caso Programação não traga Alegria.
  4. E deve ser notado que Algo pode estar errado fora do Código.
  5. Você deve entender o que certo Pedaço de Código está fazendo, mesmo que ele esteja fazendo errado.
  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.
  7. Logo, entender o que o Código faz é a Coisa mais importante em Programação.
  8. Ao Programar, nenhum Problema é resolvido no Editor de Texto.
  9. Eles são resolvidos no Papel, com uma Caneta ou Lápis.
  10. Logo, é importante saber quando deixar o Computador e pegar o Papel.
  11. Programação de Computadores não é uma Arte manual. É uma Intelectual. Trate-a de acordo.
  12. Programação de Computadores também é parte da Matemática. Ainda que algumas Pessoas possam ter raiva dessa Afirmação.
  13. Você não precisa saber o funcionamento interno de Algo, exceto quando você precisa.
  14. Você nunca é mais esperto que Compiladores, Bibliotecas, Frameworks ou qualquer outro Código escrito antes de você, exceto quando você é.
  15. E você se surpreenderia se soubesse quantas vezes você é mais perspicaz do que pensa.
  16. Inclusive porque Informação específica a um Contexto é muito Poderosa.
  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.
  18. Porém os autores devem ser escolhidos cuidadosamente, e não devem incluir Robert Cecil Martin.
  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

  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.
  2. Ainda que o Compilador possa gerar Algo completamente diferente.
  3. O Compilador não deve ser combatido, já que ele é um Amigo.
  4. $ find . -name "*.[c,h]" -exec clang-format -i {} \;.
  5. C não é uma Linguagem de Programação Fortemente tipada.
  6. Mas é uma Estática, e isso deve ser aproveitado.
  7. -ansi -pedantic cria Caráter.
  8. Memória é a Coisa mais importante sempre. Mais que o seu cônjuge.
  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().
  10. A Pilha é uma Amiga. Use-a sabiamente.
  11. "The C Programming Language" é nossa Bíblia. K&R são nossos Profetas. C não é Ciência, mas Religião.
  12. Logo, entendê-la é um Processo Religioso.
  13. Use o Depurador quando em dúvida e quando não.
  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.
  15. Aprenda antes de digitar e entenda antes de compilar.
  16. Se lidando com Problemas de Memória, goto C;.
  17. Ninguém gosta de Programar em C. Objetivamos matá-la em breve.
  18. Ainda que ainda Programemos em C, e nossos Ambientes ainda dependam dela.
  19. C está morta. Vida longa a C!