summaryrefslogtreecommitdiff
path: root/tutoriais
diff options
context:
space:
mode:
Diffstat (limited to 'tutoriais')
-rw-r--r--tutoriais/makefiles.md116
-rw-r--r--tutoriais/orientacao-a-objetos.md88
2 files changed, 0 insertions, 204 deletions
diff --git a/tutoriais/makefiles.md b/tutoriais/makefiles.md
deleted file mode 100644
index 35d8921..0000000
--- a/tutoriais/makefiles.md
+++ /dev/null
@@ -1,116 +0,0 @@
-# Como dev, como você dev pensar?
-## _Ou como usar makefiles...?_
-
-Já vou começando dando um spoiler: _foque no que quer chegar,
-não em como chegar_.
-
-Todo objeto que você quer construir tem o seu propósito, seja um HTML,
-um programa nativo ou qualquer coisa. Quando você começa a analisar o
-propósito daquilo que você quer construir, você sempre chega nas melhores
-descrições do que quer fazer. _Descrição_ é uma palavra chave aqui.
-
-Se você quer construir um HTML para um blog ou um site, você faz o mais óbvio
-pra construir o seu HTML: um bloco de notas, e um HTML. Pronto. Se precisar
-fazer outra página, você só dá um ctrl-c/ctrl-v. Até aqui, está tudo certo,
-não tem muito o que pensar. Mas agora vamos dizer que você queira fazer
-uma mudança na estruturação do seu HTML, talvez adicionar uma header, footer,
-um css. Agora essas mudanças precisam ser replicadas manualmente em cada HTML
-que você criou.
-
-Mas temos um computador, podemos automatizar isso, não? Se todas as páginas
-terão a mesma base, porquê não dizemos ao computador: construa esse HTML pra mim
-usando esses pedaços? E não precisa ser algo grande.
-
-<pre style="font-family:monospace;color: rgb(68, 68, 68); background-color: rgb(243, 243, 243); font-weight: 400; "><span style="color: rgb(136, 0, 0); font-weight: 700;">index.html: header.html.part index.html.part footer.html.part</span>
- cat header.html.part index.html.part footer.html.part &gt; index.html</pre>
-
-E salvamos isso em um arquivo chamado `Makefile` pra que o programa `make`
-leia isso pra nós e crie o index.html pra gente. A primeira linha contém o que
-nós queremos (index.html) e o que vamos usar pra construir o que queremos.
-Logo abaixo, e identado **com tabs**, o comando que queremos executar pra cada
-um dos htmls que queremos fazer.
-
-Com isso, chegamos no conceito de "fonte".
-Você pode entender a fonte como fonte de um recurso que um programa precisa pra
-construir algo para nós, nós estamos passando o que queremos e os requisitos
-para a construção do que queremos. Perceba que nós ainda queremos o HTML
-completo, mas agora melhoramos a _descrição_ do nosso HTML para nós focarmos
-apenas naquilo que é necessário: um HTML é construído com header, footer e o
-nosso conteúdo. Agora podemos só editar o conteúdo, ou a header, ou a footer,
-e todo HTML conterá as mudanças que queremos.
-
-Então fazemos isso para cada arquivo que criamos.
-
-<pre style="font-family:monospace;color: rgb(68, 68, 68); background-color: rgb(243, 243, 243); font-weight: 400; "><span style="color: rgb(136, 0, 0); font-weight: 700;">index.html: header.html.part index.html.part footer.html.part</span>
- cat header.html.part index.html.part footer.html.part &gt; index.html
-
-<span style="color: rgb(136, 0, 0); font-weight: 700;">about.html: header.html.part about.html.part footer.html.part</span>
- cat header.html.part about.html.part footer.html.part &gt; about.html</pre>
-
-Mas estamos no tema de automação usando o computador, não? Ok que reduzimos
-bastante a quantidade de mudanças manuais que precisariamos fazer, mas podemos
-ir um pouco além disso.
-
-<pre style="font-family:monospace;color: rgb(68, 68, 68); background-color: rgb(243, 243, 243); font-weight: 400; "><span style="color: rgb(136, 0, 0); font-weight: 700;">%.html: header.phtml %.phtml footer.phtml</span>
- cat <span style="color: rgb(171, 86, 86); font-weight: 400;">$^</span> &gt; <span style="color: rgb(171, 86, 86); font-weight: 400;">&#36;@</span>
-</pre>
-
-Agora os arquivos deverão ter uma extensão diferente porque o Makefile se
-confunde um pouco se usarmos o jeito anterior, porém agora o `make` vai tentar
-a executar essa regra para todo *.html que for requisitado. O `$^` significa
-todos os requisitos, em ordem que foram declarados, e o <span>&#36;@</span>
-significa o nome da output, para fins de tornar essa regra mais genérica.
-
-Com isso, estabelecemos um padrão para o nosso projeto. Todo HTML é construído
-seguindo essa regra: existe um header.phtml, um outro .phtml com a mesmo nome,
-e footer.phtml. E não só isso, como ainda podemos prosseguir adicionando mais
-regras, e ainda regras sobre arquivos que existem.
-
-<pre style="font-family:monospace;color: rgb(68, 68, 68); background-color: rgb(243, 243, 243); font-weight: 400; "><span style="color: rgb(136, 0, 0); font-weight: 700;">%.html: header.phtml %.phtml footer.phtml</span>
- cat <span style="color: rgb(171, 86, 86); font-weight: 400;">$^</span> &gt; <span style="color: rgb(171, 86, 86); font-weight: 400;">&#36;@</span>
-
-<span style="color: rgb(136, 0, 0); font-weight: 700;">%.phtml: %.md</span>
- markdown &lt; <span style="color: rgb(171, 86, 86); font-weight: 400;">$&lt;</span> &gt; <span style="color: rgb(171, 86, 86); font-weight: 400;">&#36;@</span></pre>
-
-Agora toda vez que um phtml não existir, ele vai tentar criar a partir de um
-arquivo markdown.
-
-Note o que estamos fazendo aqui: nós queremos um arquivo html. Não é o phtml,
-não é o markdown, e sim o html final. Os phtmls e os arquivos markdowns são
-apenas formas de se chegar no html. E cada vez que adicionamos mais uma camada
-de dependência e regras de resolução de dependência, estamos aumentando a
-capacidade de descrever o resultado final que queremos.
-
-O mesmo vale para o seu programa e na arquitetura do seu programa. Quanto mais
-você consegue descrever sobre o seu programa, mais você irá notar componentes,
-partes que se mantém estáveis, padrões, testes e outras coisas, e notar que essas
-coisas existem irá tornar o seu programa mais simples de desenvolver, ou
-pelo menos você irá fazer menos cagadas, afinal: você vai estar entendendo o
-seu programa.
-
-Por fim, note que isso resulta em um grafo, mais especificamente uma árvore:
-
- index.html
- |
- +--- header.phtml
- +--- footer.phtml
- +--- index.phtml
-
- about.html
- |
- +--- header.phtml
- +--- footer.phtml
- +--- about.phtml
- |
- + --- about.md
-
-Ao notar essa árvore, perceba que nós não só podemos notar padrões mas agora
-podemos planejar o que devemos fazer para resolver todos os problemas de forma
-geral.
-
-As conexões também são pontos de resolução de problemas. Perceba aqui que o
-`make` é um programa que nós já tinhamos em mãos para resolver as dependências
-mas mesmo esses programas precisam de outros pra transformar "simbolos em
-outros simbolos". Então não tenha medo de fazer _código que escreve código_, o
-seu trabalho sempre foi resolver problemas usando o computador, inclusive os
-seus próprios problemas.
diff --git a/tutoriais/orientacao-a-objetos.md b/tutoriais/orientacao-a-objetos.md
deleted file mode 100644
index b5121c0..0000000
--- a/tutoriais/orientacao-a-objetos.md
+++ /dev/null
@@ -1,88 +0,0 @@
-# Eu tenho certeza que você, um sênior, não sabe o que é orientação à objetos
-
-Sabe esse paradigma que aprendemos na faculdade? Os vários macetes, os
-famigerados "Padrões de Projeto", o `sujeito.verbo(objeto)` e merdas assim?
-Pois é, tá errado. Pelo menos de acordo com Alan Kay, porque Alan Kay não quis
-dizer nada disso.
-
-O negócio é que existem duas "escolas" de orientação à objetos. Uma que veio do
-Alan Kay originalmente, e a outra que veio do Simula e que foi mais ou menos
-raptado pelo Bjarne Strousturp, o criador do C++, e que veio a ser base do Java
-e outras linguagens ditas "orientadas à objetos". Então aqui vou tentar ensinar
-sobre o que o Alan Kay realmente quis dizer com orientação à objetos.
-
-Antes eu quero que você saiba que o _Alan Kay não quis se focar nos objetos._
-Ele até chegou a pedir desculpas por chamar isso de "Orientação a Objetos"
-porque isso confundiu muita gente, porém dá pra explicar a orientação a objetos
-com um padrão que você já deve ter usado a bastante tempo. Na verdade, se você
-quer um TL;DR disso tudo, você pode resumir o que Alan Kay quis dizer à
-"Injeção de Dependência embebido com mijo de Chuck Norris", e até a linguagem
-que é realmente "Orientada à Objetos", o Smalltalk, tem seus pontos parecidos
-com os da programação funcional. Irei usar um pseudo-código parecido com Java
-para demonstrar.
-
-Vejamos esse código aqui:
-
- shape.getDimensions().getX()
-
-Isso seria um código bem comum de ver em orientação a objetos, mas qual é a
-interpretação que o Alan Kay teria sobre esse trecho?
-
-O `shape` é um objeto e, como objeto, ele recebe e responde à mensagens, no
-caso, shape recebeu a mensagem `getDimensions` sem parâmetros. `shape`
-reconhece essa mensagem e dessa mensagem responde com um outro objeto. Então
-enviamos `getX` sem parâmetros, e esse objeto pode ou não responder a essa
-mensagem. O Alan Kay estava se focando nesse modelo de envio de mensagens e não
-no modelo atual de classes. Inclusive quando Alan Kay falou de hierarquias ele
-não tava falando de "extensão" de classes como vemos em Java e sim que uma
-classe `Foo` responde as mesmas mensagens da classe `Base`.
-
-Em outras palavras: **A CLASSE NÃO IMPORTA, O QUE IMPORTA É A INTERFACE!** O
-que importa é se o `shape` reconhece `getDimensions`, inclusive tem um nome pra
-isso, `Duck Typing`: se anda igual pato e quacka igual um pato, é um pato. A
-classe, nessa visão, é só uma forma de construir objetos.
-
-Isso torna umas coisas um pouco mais interessantes. Vejamos esse trecho
-de código.
-
-
- fn foo(thing) {
- thing.isTrue(() -> {
- doThing(thing)
- })
- }
-
-O que `thing` é? Não sei, só sei que `foo` precisa que `thing` reconheça
-`isTrue` com um parâmetro de lambda qualquer coisa que o `doThing` reconheça.
-Isso torna o `foo` extremamente reaproveitável e é com essa parte que o Alan
-Kay quis dizer com "reaproveitamento de código", e agora você entende o porquê
-que muitos javeiros adotaram o padrão de fazer getter e setter pra tudo, porque
-isso faz uma função depender de uma interface ao invés de uma implementação e
-isso faz a função ficar mais reaproveitável (mas vamos ser sinceros, 99% dos
-javeiros nem sabem disso, eles só fazem isso porque disseram que sim pra eles,
-e nem mesmo Alan Kay gosta dos getters and setters porque as mensagens eram pra
-*mandar* no objeto e não *pedir* ao objeto).
-
-E perceba que eu usei lambda ao invés de ser algo mais procedural, como
-`if`/`else`. Isso é porque a orientação a objetos realmente preza em tornar
-todo código o mais reaproveitável possível e, ao usar `if`s, como o Java faria,
-você torna o seu código um pouco mais rígido ao depender de uma implementação
-de uma boolean. OOP do Alan Kay preza tanto por isso que esse mesmo exemplo
-ficaria assim em Smalltalk (pelo menos, "aproximadamente" Smalltalk):
-
- foo: object [
- object ifTrue: [
- self doThing: object
- ]
- ]
-
-Não existe `if`/`else` em Smalltalk. E booleans não são tipos primitivos e sim
-objetos. Integer, Strings, tudo é um objeto legítimo, com a sua lista de
-mensagens que eles devem responder, e é aqui que a "Injeção de Dependência com
-mijo de Chuck Norris" se apresenta. E de certa forma, é como nossos servidores
-HTTP funcionam. Você não precisa saber se o servidor é feito em Java, C#, PHP,
-feito com Spring Boot, Laravel ou algum outro framework. Você só precisa saber
-se o servidor responde por um `POST /foo/bar`.
-
-Isso é orientação à objetos. O resto é só putaria tirada da bunda do
-Strousturp.