Poucos programadores se aprofundam em conceitos filosóficos (especialmente a metafísica aristotélica). Mas eu estou mais do que convencido que vocês precisam.
Um dos conceitos fundamentais pra se entender o mundo é saber a diferença entre Forma e Matéria.
Matéria é aquilo que compõe algo, e Forma é o conjunto de características do algo (unitário e apreensível conceitualmente).
Uma estátua de mármore tem por matéria o mármore (que é cheio de potências para se tornar algo), já a Estátua, como tal, é a atualidade (conceito oposto à potencialidade) da coisa. É a unidade Formal.
são conceitos complexos mas poderosos e pode ser o diferencial para seu progresso na carreira.
Se te pergunto "o que é um pacote node (npm)?", qual resposta espero? Depende. depende se quero a resposta conceitual (formal) ou material.
Conceitualmente falando, posso dizer que é um código para ser compartilhado e usado em outros projetos Javascript para resolver problemas recorrentes.
Mas materialmente, é qualquer pasta que tem um package.json
.
Sim, DE FATO, qualquer pasta com um package.json
formatado corretamente é considerado (pelo cli do NPM), um pacote npm passível de ser instalado e interpretado pelo Node.
Eu sei que muitos de vocês não têm o costume de ler documentação, mas saiba que o próprio NPM explica isso:
Um pacote é [materialmente]:
a) uma pasta contendo (...) um arquivo package.json
b) um tarball (...) contendo (a)
c) um URL que resolve para (b)
d) um <nome>@<versão> que é publicado no registro com (c)
(...)
g) um <git remote url> que resolve para (a)
Referência: https://docs.npmjs.com/cli/v8/commands/npm-install#:~:text=A%20package%20is,resolves%20to%20(a)
DO MESMO JEITO que um projeto git
é qualquer pasta que tenha uma pasta .git/
dentro dela, formatada corretamente.
Perceba que intuitivamente até usamos a palavra "formatado", pois indica a Forma, que está intrinsicamente ligada com a matéria da coisa.
Continuando o exemplo:
De fato o git é um "controlador de versão". De tal forma que quando você roda "git status" ou "git log" ele vai mostrar a diferença dos arquivos atuais com aqueles já versionados ou vai mostrar o histórico de commits, respectivamente.
mas como essas coisas aparecem no terminal? concretamente falando, onde essas informações ficam salvas? e como?
se eu precisasse refazer meu próprio git, que imitasse seu comportamento (forma), como eu faria? quais informações preciso salvar, e onde?
são perguntas que todo programador tem que se fazer o tempo todo.
Do jeito que to falando, parece que "matéria" é só uma outra forma de falar "mais baixo nível" ou "mais concreto". Mas não é bem isso.
Na minha opinião, são conceitos filosoficamente diferentes. O que você acha?
Por enquanto, esse post é apenas uma introdução. Elaborarei
melhor num próximo post.
Top comments (2)
Obrigado @pedrosalomaodw!