<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Dayman Novaes</title>
    <description>The latest articles on Forem by Dayman Novaes (@daymannovaes).</description>
    <link>https://forem.com/daymannovaes</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1456517%2F143c4278-c0bf-4e53-bea2-50f3b5328a4f.jpeg</url>
      <title>Forem: Dayman Novaes</title>
      <link>https://forem.com/daymannovaes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/daymannovaes"/>
    <language>en</language>
    <item>
      <title>O que define um "módulo"?</title>
      <dc:creator>Dayman Novaes</dc:creator>
      <pubDate>Tue, 07 May 2024 14:04:19 +0000</pubDate>
      <link>https://forem.com/daymannovaes/o-que-define-um-modulo-1gm2</link>
      <guid>https://forem.com/daymannovaes/o-que-define-um-modulo-1gm2</guid>
      <description>&lt;p&gt;Eu chamo de módulo, lato senso, qualquer "pedaço de código" minimamente coerente e organizado no mesmo espaço.&lt;br&gt;
&lt;em&gt;(seja no mesmo arquivo, ou na mesma função, ou na mesma pasta, ou num pacote de um package manager qualquer, etc).&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;E um módulo qualquer tem &lt;strong&gt;SEMPRE&lt;/strong&gt; 3 características:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;um funcionamento interno (que é o grande propósito de sua existência);&lt;/li&gt;
&lt;li&gt;dependências (usa coisas de fora, de outros módulos);&lt;/li&gt;
&lt;li&gt;um entry-point;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Entender isso é essencial pra navegar no mar infinito das tecnologias web atuais. &lt;br&gt;
Uma pasta com vários arquivos pode ser ou não um módulo, dependendo dessa definição. Veja o exemplo abaixo:&lt;/p&gt;

&lt;p&gt;Claramente essa pasta é um módulo. Porém, a pasta &lt;code&gt;templates&lt;/code&gt; dentro dela não é um módulo por si só, pois não há entry-point, apesar de ter uma coerência.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsa2gn1y63cxt7ldet73l.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsa2gn1y63cxt7ldet73l.jpg" alt="Image description" width="576" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Perceba que quando a pasta é um módulo ela tende a estar no singular. Quando é apenas um "organizador de arquivos" ela tende a estar no plural (templates/, Documents/, Downloads/, etc).&lt;/p&gt;

&lt;p&gt;Observe no seu projeto atual e veja se ele segue essa regra. &lt;br&gt;
Outra questão importante a se observar são as dependências. No exemplo anterior, há um arquivo que não tá muito coerente com os outros, que é o &lt;code&gt;pdf-generator.js&lt;/code&gt;. Apesar disso ser um problema, não é um GRANDE problema, pois um módulo precisa de coerência &lt;strong&gt;MÍNIMA&lt;/strong&gt;, não de &lt;strong&gt;PERFEITA&lt;/strong&gt;. &lt;br&gt;
Facilmente, o pdf-generator poderia ser movido para outro módulo, ou importado de um pacote externo ao projeto (usando npm por exemplo).&lt;/p&gt;

&lt;p&gt;O que quero chamar a atenção, é que ao ler um código, você tem que ter &lt;strong&gt;MUITO CLARO&lt;/strong&gt; quando que um fluxo &lt;strong&gt;COMEÇA&lt;/strong&gt; e quando que ele &lt;strong&gt;SAI&lt;/strong&gt; do módulo. &lt;br&gt;
Isso pode parecer óbvio, mas não é. Lembre-se, um módulo recebe um input (através do entry-point) e através de seu "funcionamento interno" gera um output. Esse output nem sempre vai para quem chamou o módulo, e nem sempre será na última linha de código.&lt;/p&gt;

&lt;p&gt;Como aqui, por exemplo:&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Froqow2owrc9c1oyg0pan.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Froqow2owrc9c1oyg0pan.jpg" alt="Image description" width="800" height="492"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Essas tripartição pode inclusive te ajudar a entender a diferença entre teste unitário e teste de integração.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Teste unitário:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;testo APENAS o funcionamento interno. E faço isso simulando todas as dependências.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Teste de integração:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;testo o módulo sem simular as dependências. 
Alguns frameworks, principalmente com pegada mais funcional, forçam o desenvolvedor a descrever explicitamente quais os inputs necessários e os outputs de cada componente (módulo).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Isso ajuda, até certo ponto. Mas é essencial que você incorpore esses conceitos na sua prática. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>dominando a essência do programação: uma introdução filosófica</title>
      <dc:creator>Dayman Novaes</dc:creator>
      <pubDate>Mon, 29 Apr 2024 12:02:51 +0000</pubDate>
      <link>https://forem.com/daymannovaes/dominando-a-essencia-do-programacao-uma-introducao-filosofica-2l11</link>
      <guid>https://forem.com/daymannovaes/dominando-a-essencia-do-programacao-uma-introducao-filosofica-2l11</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Um dos conceitos fundamentais pra se entender o mundo é saber a diferença entre Forma e Matéria.&lt;/p&gt;

&lt;p&gt;Matéria é aquilo que compõe algo, e Forma é o conjunto de características do algo (unitário e apreensível conceitualmente).&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;são conceitos complexos mas poderosos e pode ser o diferencial para seu progresso na carreira.&lt;/p&gt;

&lt;p&gt;Se te pergunto "o que é um pacote node (npm)?", qual resposta espero? Depende. depende se quero a resposta conceitual (formal) ou material.&lt;/p&gt;

&lt;p&gt;Conceitualmente falando, posso dizer que é um código para ser compartilhado e usado em outros projetos Javascript para resolver problemas recorrentes.&lt;/p&gt;

&lt;p&gt;Mas materialmente, é qualquer pasta que tem um &lt;code&gt;package.json&lt;/code&gt;. &lt;br&gt;
Sim, DE FATO, qualquer pasta com um &lt;code&gt;package.json&lt;/code&gt; formatado corretamente é considerado (pelo cli do NPM), um pacote npm passível de ser instalado e interpretado pelo Node.&lt;/p&gt;

&lt;p&gt;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:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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 &amp;lt;nome&amp;gt;@&amp;lt;versão&amp;gt; que é publicado no registro com (c)
(...)
g) um &amp;lt;git remote url&amp;gt; que resolve para (a)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Referência: &lt;a href="https://docs.npmjs.com/cli/v8/commands/npm-install#:~:text=A%20package%20is,resolves%20to%20(a)"&gt;https://docs.npmjs.com/cli/v8/commands/npm-install#:~:text=A%20package%20is,resolves%20to%20(a)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DO MESMO JEITO que um projeto &lt;code&gt;git&lt;/code&gt; é qualquer pasta que tenha uma pasta &lt;code&gt;.git/&lt;/code&gt; dentro dela, formatada corretamente.&lt;/p&gt;

&lt;p&gt;Perceba que intuitivamente até usamos a palavra "formatado", pois indica a Forma, que está intrinsicamente ligada com a matéria da coisa.&lt;/p&gt;

&lt;p&gt;Continuando o exemplo: &lt;br&gt;
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.&lt;/p&gt;

&lt;p&gt;mas como essas coisas aparecem no terminal? concretamente falando, onde essas informações ficam salvas? e como?&lt;/p&gt;

&lt;p&gt;se eu precisasse refazer meu próprio git, que imitasse seu comportamento (forma), como eu faria? quais informações preciso salvar, e onde?&lt;/p&gt;

&lt;p&gt;são perguntas que todo programador tem que se fazer o tempo todo.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Na minha opinião, são conceitos filosoficamente diferentes. O que você acha?&lt;/p&gt;

&lt;p&gt;Por enquanto, esse post é apenas uma introdução. Elaborarei&lt;br&gt;
 melhor num próximo post.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>philosophy</category>
      <category>computerscience</category>
      <category>career</category>
    </item>
  </channel>
</rss>
