<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt">
  <title>João Gilberto Saraiva (PT)</title>
  <link href="https://0jonjo.github.io/pt/feed.xml" rel="self" type="application/atom+xml" />
  <link href="https://0jonjo.github.io/pt/" rel="alternate" type="text/html" />
  <updated>2026-09-06T16:14:30+00:00</updated>
  <id>https://0jonjo.github.io/pt/feed.xml</id>
  <author><name>João Gilberto Saraiva</name></author>
  
  
  <entry>
    <title>The Due Diligence Checklist: a compass for engineering autonomy</title>
    <link href="https://0jonjo.github.io/blog/2026/duo-diligence-checklist/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2026/duo-diligence-checklist/</id>
    <published>2026-01-31T00:00:00+00:00</published>
    <updated>2026-01-31T00:00:00+00:00</updated>
    <summary>A practical framework to move from &apos;task-completer&apos; to intentional engineer. A personal checklist for coding with context and asking better questions in the AI era</summary>
    <content type="html">&lt;p&gt;Over the last few years, I have been synthesizing a personal checklist for software development. It is a fusion of direct feedback from Tech Leads, observations of teams, and operational playbooks — especially from &lt;a href=&quot;https://www.linkedin.com/company/jetrockets/&quot;&gt;JetRockets&lt;/a&gt; — combined with my own background as a professor and academic researcher. This combination of experiences allowed me to solidify a mini framework&lt;/p&gt;

&lt;p&gt;Originating in law and business, “Due Diligence” refers to the comprehensive appraisal of a business or situation prior to signing a contract. It is the rigorous investigation required to ensure that all parties know exactly what they are getting into, minimizing risks and surprises. In an era where AI can plan, code, and review faster than ever, our responsibility to verify increases. We must be prepared to take full ownership of the results and evaluate precisely what we are delivering.&lt;/p&gt;

&lt;p&gt;In Software Engineering, we can apply this concept to the daily “contracts” we make: the code we ship to production and the questions we ask our colleagues. It is about applying rigor, context, and documentation to the acts of coding and asking.&lt;/p&gt;

&lt;p&gt;To ensure that we are not just “task-completers,” but intentional engineers, I propose applying this personal audit before every task.&lt;/p&gt;

&lt;h2 id=&quot;phase-1-the-build-checklist-coding-with-context&quot;&gt;Phase 1: The Build Checklist (Coding with Context)&lt;/h2&gt;

&lt;p&gt;Before writing a single line of code, understand exactly what you are getting into.&lt;/p&gt;

&lt;h4 id=&quot;the-why&quot;&gt;The “Why”&lt;/h4&gt;

&lt;p&gt;[ ] Business Goal: Do I truly understand the user problem or business value this task resolves? If I can’t explain why a feature exists, I am not ready to code it.&lt;/p&gt;

&lt;h4 id=&quot;software-archaeology&quot;&gt;Software Archaeology&lt;/h4&gt;

&lt;p&gt;[ ] Pattern Matching: Have I searched for similar features already implemented in the project? Reusing existing patterns ensures consistency.&lt;/p&gt;

&lt;p&gt;[ ] External References: If no internal pattern exists, did I research reliable external sources and adapt them to our specific context?&lt;/p&gt;

&lt;p&gt;[ ] Architectural Decisions: Have I studied why the current code is written this way? I need to understand the legacy choices before I can introduce new ones.&lt;/p&gt;

&lt;h4 id=&quot;the-blueprint&quot;&gt;The Blueprint&lt;/h4&gt;

&lt;p&gt;[ ] Integration: How will the solution plug into the existing project?&lt;/p&gt;

&lt;p&gt;[ ] Harmony: Will the approach clash with the codebase’s style? Most of the time goal is for the code to look like it has always belonged there.&lt;/p&gt;

&lt;p&gt;💡 The Innovation Caveat: Sometimes, the goal is to break the pattern. Companies hire engineers to think and act, not merely to reproduce—that is how technical diversity and evolution happen. However, swimming against the current requires stronger muscles. If you deviate from the established architecture, your “Due Diligence” must be doubled. Be prepared to defend why the new approach is necessary and superior.&lt;/p&gt;

&lt;h4 id=&quot;the-self-audit&quot;&gt;The Self-Audit&lt;/h4&gt;

&lt;p&gt;[ ] Goal Check: Does the solution actually solve the initial problem?&lt;/p&gt;

&lt;p&gt;[ ] Quality Control: Is the code clean, documented, and compliant with project standards?&lt;/p&gt;

&lt;p&gt;[ ] Monitoring &amp;amp; Safety: How will I detect possible problems in production? Do I have a plan to revert changes if necessary?&lt;/p&gt;

&lt;h2 id=&quot;phase-2-the-unstuck-checklist-asking-with-purpose&quot;&gt;Phase 2: The “Unstuck” Checklist (Asking with Purpose)&lt;/h2&gt;

&lt;p&gt;Sometimes, despite our best efforts, we hit a wall. Let’s reflect a little before reaching out for help.&lt;/p&gt;

&lt;h4 id=&quot;the-solo-mission-before-asking&quot;&gt;The Solo Mission (Before Asking)&lt;/h4&gt;

&lt;p&gt;[ ] Consult the Documentation: Have I actually read the manual and READMEs?&lt;/p&gt;

&lt;p&gt;[ ] The External Search: Have I checked Stack Overflow or forums for similar errors?&lt;/p&gt;

&lt;p&gt;[ ] The Git History: Have I run a git blame to see if a recent change caused the issue?&lt;/p&gt;

&lt;h4 id=&quot;the-evidence-package-formulating-the-question&quot;&gt;The Evidence Package (Formulating the Question)&lt;/h4&gt;

&lt;p&gt;When reaching out to a peer, you shouldn’t just ask for the solution; you must present your findings.&lt;/p&gt;

&lt;p&gt;Contextualize: “It’s not working” is not a question. I must explain the specific gap between expectation and reality. Document the Journey:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;“I tried X, hoping for Y, but got Z.”&lt;/li&gt;
  &lt;li&gt;“I looked at the docs for library A, but they seem outdated.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By documenting the effort, we prove respect for the team’s time. You are not asking them to do the work; you are asking them to unblock the specific obstacle you couldn’t clear yourself.&lt;/p&gt;

&lt;h2 id=&quot;the-result-a-compass-not-a-cage&quot;&gt;The Result: A Compass, Not a Cage&lt;/h2&gt;

&lt;p&gt;In the reality of our daily work—filled with calls, tight deadlines, and urgent bug fixes—I don’t religiously check every box for every single commit. That would be paralyzing.&lt;/p&gt;

&lt;p&gt;Instead, I keep this checklist within eyesight. It serves as my anchor.&lt;/p&gt;

&lt;p&gt;When everything is flowing, I might skip a step. But when I feel stuck, when the solution isn’t clear, or when I simply run out of ideas, I return to these lists. They force me to pause, breathe, and realign with the process. The idea follows a simple principle: autonomy isn’t about being perfect all the time; it’s about knowing where to look when you get lost.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1024&quot; height=&quot;683&quot; alt=&quot;image&quot; src=&quot;https://github.com/user-attachments/assets/3d0f48df-5cea-4130-8dcc-81d4cf234e89&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Image: “Compass” by Johannes Ko. &lt;a href=&quot;https://openverse.org/image/6dbecb6a-a18a-4f0e-ad33-b8d13da98753&quot;&gt;Open Verse, Creative Commons 2.0&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Códigos e Aforismos: lições da programação para a escrita nas Ciências Humanas</title>
    <link href="https://0jonjo.github.io/blog/2025/codigos-aforismos/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2025/codigos-aforismos/</id>
    <published>2025-10-17T00:00:00+00:00</published>
    <updated>2025-10-17T00:00:00+00:00</updated>
    <summary>Como a clareza e a simplicidade da programação podem transformar a escrita acadêmica nas Ciências Humanas</summary>
    <content type="html">&lt;p&gt;Quem nunca se exasperou diante de um texto, livro ou tese escrito de forma truncada e incompreensível? Ou, o que é pior, se perdeu entre repetições, citações intermináveis e floreios literários que mais obscurece do que facilitam a compreensão efetiva do argumento?
Como um professor e desenvolvedor apaixonado por literatura, considero isso um sério incômodo. Em um contexto onde a demanda por conhecimento explorando novos formatos — do YouTube ao Chatgpt, passando por podcasts e games — cresce exponencialmente, a clareza da escrita torna-se uma questão urgente para as ciências no geral e crucial para o ensino.&lt;/p&gt;

&lt;p&gt;Um dos aprendizados que o universo da programação oferece para as Ciências Humanas é a prioridade inegociável dada à clareza, concisão e simplicidade. Isso não implica uma linguagem opaca e desprovida de estilo, que imite a frieza de um gerador de texto automático, mas sim uma escrita que se subordina a padrões mínimos de inteligibilidade.
Em um contexto em que cada vez mais nos dedicamos a construir ferramentas, bases de dados e narrativas interativas, esse princípio da clareza se torna o elo vital entre a tecnologia e a interpretação humana. Os códigos de programação produzidos em qualquer linguagem, precisam ser suficientemente claros para a compreensão da máquina e de humanos. Devem ser o mais concisos possível para garantir que resolvam problemas de forma eficiente. Uma boa prática de programação, ao se deparar com desafios complexos, é desmembrá-los em partes menores para facilitar tanto o entendimento quanto a manutenção do sistema.
Uma das linguagens de programação mais populares, o Python, possui até mesmo uma série de aforismos sobre esse tema, cunhados por um de seus desenvolvedores, Tim Peters. “The Zen of Python” afirma que:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Bonito é melhor que feio. Explícito é melhor que implícito. Simples é melhor que complexo. Complexo é melhor que complicado.
…
A legibilidade é fundamental.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ao ler esses aforismos, o amigo historiador Gustavo Mor lembrou das litografias de “Touros” (1945) de Pablo Picasso. Nesse estudo, o artista espanhol produziu a imagem de um touro e a decompôs gradativamente, traço a traço, até encontrar a essência mínima e mais poderosa da figura. Em uma perspectiva visual, Picasso decantou a complexidade até a simplicidade, sem jamais perder a beleza ou a originalidade.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://arteref.com/wp-content/uploads/2017/03/capa-copy-2.jpg&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Imagem: “Touros de Pablo Picasso”. Fonte: &lt;a href=&quot;https://arteref.com/arte/as-etapas-de-el-toro-de-picasso-do-academico-ao-abstrato/&quot;&gt;Art Ref&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;O paradigma é análogo: o objetivo é manter a linguagem legível e com argumentos às claras, sem abandonar o estilo próprio. O simples é a meta. É evidente que há questões inerentemente complexas que não podem — e nem devem — ser simplificadas sob o risco de tornar uma explicação anacrônica, rasa ou mesmo falsa. No entanto, a complexidade inerente ao tema é sempre preferível à complicação desnecessária e retórica.
Paradoxalmente, hoje, nos deparamos em toda parte com textos produzidos por modelos de Inteligência Artificial (IA) que não seguem essa lógica.  Muitos deles, mesmo claros, trazem embutidos um entusiasmo excessivo, uma superficialidade mercadológica ou, pior, informações incorretas (as chamadas “alucinações”). Além disso, frequentemente, falta-lhes o essencial que as Ciências Humanas buscam: a nuance, a profundidade contextual e a voz autoral que confere sentido à condição humana  — a decomposição do touro de Picasso — é o que nos diferencia.&lt;/p&gt;

&lt;p&gt;Esse paradigma ecoa perfeitamente os mandamentos da escrita listados por Robert Darnton — um historiador notório por sua experiência em produzir para os mais diversos formatos:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Não sucumbirás ao monografismo. Escreve monografias, se for o caso, mas escreve para o cidadão comum, de maneira que possam ser compreendidas.&lt;/p&gt;

  &lt;p&gt;Não esquecerás tua missão. Trata-se de dar sentido à condição humana, explicando as experiências vividas pelos seres humanos – e não marcar pontos entre os colegas acadêmicos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Certamente Robert Darnton, Pablo Picasso e Tim Peters teriam muito o que conversar!&lt;/p&gt;

&lt;p&gt;De todo modo, a questão permanece: vale a pena usar as lições da programação para pensar em uma escrita Zen — clara e concisa — para as Ciências Humanas?&lt;/p&gt;

&lt;p&gt;Aposto que sim! A busca pela clareza é a busca pela eficácia na comunicação, e a clareza deve ser um pilar para as Ciências Humanas e especialmente o ensino.&lt;/p&gt;

&lt;p&gt;Para saber mais:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://www1.folha.uol.com.br/fsp/mais/fs2612199905.htm&quot;&gt;Os dez mandamentos de Robert Darnton&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://arteref.com/arte/as-etapas-de-el-toro-de-picasso-do-academico-ao-abstrato/&quot;&gt;O touro de Pablo Picasso&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://pt.wikipedia.org/wiki/Zen_de_Python&quot;&gt;O Zen do Python&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</content>
  </entry>
  
  <entry>
    <title>Imergindo na IA: notas de um desenvolvedor estudando Aprendizado de Máquina e Ética e Dados</title>
    <link href="https://0jonjo.github.io/blog/2025/imergir-IA/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2025/imergir-IA/</id>
    <published>2025-09-22T00:00:00+00:00</published>
    <updated>2025-09-22T00:00:00+00:00</updated>
    <summary>Aproximações entre o curso de Inteligência Artificial e o trabalho como desenvolvedor de projetos com IA</summary>
    <content type="html">&lt;p&gt;Escolhi neste semestre as disciplinas de Aprendizado de Máquina Supervisionado e Ética e Dados como minhas primeiras do curso de &lt;a href=&quot;https://pes.imd.ufrn.br/pes/index&quot;&gt;Inteligência Artificial (UFRN)&lt;/a&gt;. A primeira trata de algoritmos que aprendem a partir de exemplos, desde a coleta, sistematização e ajustes de dados até a construção de árvores de decisão e redes neurais artificiais. A proposta é que, ao final do semestre, sejamos capazes de construir modelos preditivos a partir de conjuntos de dados reais. Por exemplo, a máquina receber os dados de exame de um paciente e prever se ele tem ou não predisposição a uma certa doença. Já a segunda trata de dimensões históricas, filosóficas e legais do uso de dados e algoritmos, como vieses, privacidade, transparência e responsabilidade.&lt;/p&gt;

&lt;p&gt;Nesses primeiros meses de curso fiz diversas pontes com o trabalho de backend que venho desenvolvendo nos últimos anos, especialmente com projetos de IA que estou trabalhando na &lt;a href=&quot;https://www.linkedin.com/company/jetrockets/&quot;&gt;JetRockets&lt;/a&gt;. Parte dessas pontes diz respeito a questões matemáticas; outras, a modos de ajustar dados enviados e recebidos por modelos de IA; e algumas tratam diretamente de ética e privacidade.&lt;/p&gt;

&lt;p&gt;Seguem as principais conexões que tenho observado:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Comunicação com sistemas e modelos externos&lt;/strong&gt;: um aspecto comum em grandes projetos backend é a integração com diversos sistemas terceiros via filas, APIs e webhooks. Além dos detalhes puramente técnicos, realizar essa comunicação requer desenvolver abstrações que consigam produzir e consumir informações pensadas para outras regras de negócio — por exemplo, meios de pagamento, sistemas de ERP e CRMs. A combinação, suavização e transformação de dados vindos de diferentes fontes é um desafio constante.&lt;/p&gt;

&lt;p&gt;No Aprendizado de Máquina, durante o treinamento que dá origem aos modelos, estudamos e praticamos como interpretar e preparar dados vindos de fontes variadas para utilizá-los nos treinamentos e testes. É necessário entender o formato, a estrutura e o significado dos dados, além de identificar e tratar possíveis problemas como valores ausentes, inconsistências e ruídos.&lt;/p&gt;

&lt;p&gt;Algo semelhante ocorre na comunicação com modelos de IA via API (como Claude, OpenAI e Gemini): é preciso interpretar e preparar os dados de entrada e saída para garantir que estejam no formato correto e atendam aos requisitos do modelo. Em ambos os casos, é fundamental compreender bem os dados e as necessidades do sistema para garantir uma comunicação eficaz.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Entendendo a vetorização&lt;/strong&gt;: em projetos de IA, a vetorização é o processo de transformar dados em vetores numéricos para que possam ser processados por algoritmos de aprendizado de máquina. Isso é especialmente importante quando se trabalha com dados não estruturados, como texto e imagens. A vetorização permite que os algoritmos extraiam características relevantes e facilitem a análise e a tomada de decisões.&lt;/p&gt;

&lt;p&gt;Em projetos backend, a vetorização também pode otimizar armazenamento e consulta de dados, especialmente quando se trabalha com grandes volumes de informações. Entender seus conceitos e técnicas tem sido fundamental nos projetos em que atuo; estudá-los e praticá-los faz parte importante do meu aprendizado em IA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Normalizando dados&lt;/strong&gt;: diversos processos de fusão, comparação e transformação de dados envolvem a normalização — ajustar os valores para uma escala comum sem distorcer diferenças nas faixas de valores. Isso garante que os dados sejam tratados de forma consistente, especialmente em algoritmos sensíveis à escala.&lt;/p&gt;

&lt;p&gt;No Aprendizado de Máquina, a normalização é etapa crucial de pré-processamento: melhora performance e convergência dos algoritmos. Em projetos de IA, etapas como a preparação de dados para RAG (Retrieval-Augmented Generation) também envolvem normalização para atender requisitos do modelo. Por isso, tem sido útil revisitar conceitos como média, mediana, moda, variância e desvio padrão, aplicando-os nos projetos da disciplina e nos projetos de IA que venho desenvolvendo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Entendendo e controlando vieses em dados e algoritmos&lt;/strong&gt;: os vieses são inclinações políticas, sociais ou de gênero presentes nas fontes de dados. Podem ter raízes históricas e culturais ou ser produto de decisões humanas conscientes ou inconscientes. Eles influenciam desde a seleção inadequada de dados até a representação desigual de diferentes grupos.&lt;/p&gt;

&lt;p&gt;No Aprendizado de Máquina, o controle de vieses é preocupação constante, pois podem levar a resultados injustos ou imprecisos, especialmente quando se trabalha com dados sensíveis. O controle de vieses também aparece na preparação de prompts para modelos de IA, onde é preciso garantir que o retorno do modelo seja adequado àquela chamada, muitas vezes mitigando vieses indesejados. Tenho estudado técnicas e estratégias para identificar, mitigar e controlar vieses, garantindo modelos mais justos, transparentes e responsáveis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gerindo dados privados&lt;/strong&gt;: ao lidar com informações pessoais e sensíveis, garantir a privacidade e a segurança dos dados é essencial. Isso envolve adotar práticas e tecnologias para proteger contra acessos não autorizados, vazamentos e usos indevidos.&lt;/p&gt;

&lt;p&gt;Na relação com modelos de IA, o gerenciamento de dados privados é uma preocupação constante. Também é fundamental garantir conformidade com leis e regulamentos de privacidade, como a LGPD no Brasil. Tenho estudado legislação e práticas, adotando técnicas e estratégias para proteger a privacidade dos dados com abordagens seguras e responsáveis.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;551&quot; height=&quot;1023&quot; alt=&quot;image&quot; src=&quot;https://github.com/user-attachments/assets/3ea8d360-e1a1-4bf3-8f14-1adc3bc68134&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Imagem: “Mergulho” de Anderson Freire. &lt;a href=&quot;https://openverse.org/image/b952887f-8c48-4bb7-a5b6-e9ea9f97a00d&quot;&gt;Open Verse, Creative Commons 2.0&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Os olhos das pequenas coisas</title>
    <link href="https://0jonjo.github.io/blog/2025/pequenas-coisas/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2025/pequenas-coisas/</id>
    <published>2025-06-29T00:00:00+00:00</published>
    <updated>2025-06-29T00:00:00+00:00</updated>
    <summary>Um crônica que pedala ao amanhacer</summary>
    <content type="html">&lt;p&gt;Distraídos sob o amanhecer, alguns acenos e sorrisos desabrocham quando eles passam. Uma bicicleta, uma cadeirinha, um par de luvas e dois capacetes descendo a ladeira às sete horas da manhã. Pai e filha seguem seu caminho matinal de casa até a escola. - Bom dia! Diz a criança com tranças. - Bom dia! Responde o jardineiro com um ciscador em mãos. - Bom dia! Responde a senhora catando recicláveis em frente a um condomínio. A menina de capacete rosa já faz parte do cotidiano dos aposentados na banca do jogo do bicho, dos policiais na padaria em frente e das pessoas que esperam o ônibus para ir trabalhar, mas sua passagem sempre os anima.&lt;/p&gt;

&lt;p&gt;Canta Gilberto Gil, com razão, o eterno deus mudança. No momento em que eu mudei de profissão, em que Ada alcançou a idade escolar, a primeira vez que estava livre para trabalhar só depois das oito horas. Foi quando me veio a ideia: pedalar todos os dias juntos. De lá para cá, dois mil e quinhentos quilômetros e três pares de pastilhas de freios. Estimativas apontam 425 quilos de gás carbônico a menos no mundo, mas o peso maior é o da transformação interna, radical e sutil como o olhar de criança.&lt;/p&gt;

&lt;p&gt;Pedalando entre Pirangi e Capim Macio, Ada guia nossa atenção para as chananas e outras rosas rebeldes - brancas, roxas e cor de laranja - que nascem no meio-fio. Ela coleta algumas para a professora ou simplesmente para brincar de cozinha mais tarde em casa. Subindo um morro íngreme, ela pergunta como seria uma cidade sem casas, ou se os carros voarem pelo céu ao invés de ocupar as ruas. Ada questiona o que fazem os tratores e outras máquinas que encobrem o som dos pássaros numa determinada rua. Gosta de ver com calma as iguanas saindo da mata, os cachorros e gatos, com e sem dono, que passeiam logo cedo. Seu bom dia surpreende os invisibilizados, os catadores dentro de uma caçamba, os bêbados amanhecidos nas calçadas, um homem sem camisa que por algum motivo faz um buquê improvisado com flores do mato.&lt;/p&gt;

&lt;p&gt;Dez anos antes eu estava caminhando pelo centro histórico de uma pequena cidade no norte de Portugal. Naquela manhã cinzenta de inverno, eu parei sozinho em frente a uma fonte seca com uma mureta de pedra, aparentemente abandonada. Passei rapidamente os olhos na mensagem em latim acima dela, pois o que me chamou a atenção foi a combinação de pedra e musgo. Tirei a mão de dentro do casaco para sentir o seu frio refletindo sobre quantas cenas da vida cotidiana aquelas pedras já tinham visto ao longo dos séculos. Por outro lado, me perguntando se as pessoas ainda paravam para ver as pequenas coisas esquecidas nos seus detalhes. Os passos de alguém vindo me tiraram dos meus pensamentos, guardei minha mão no calor do bolso e segui andando sem olhar para trás.&lt;/p&gt;

&lt;p&gt;Uma década depois, já sob calor matinal da minha cidade natal, Ada me ensinou que sim. Ainda há quem veja com atenção, que atente para as pessoas e as coisas como quem encontra novidade, mesmo que ela seja banal. Do alto da sua infância, ela incentiva a pintar a realidade com as cores da imaginação, a ver o mundo com os olhos das pequenas coisas.&lt;/p&gt;

&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;
  &lt;img src=&quot;https://github.com/user-attachments/assets/23959c59-053d-4b54-a086-8e1941fde5aa&quot; width=&quot;450&quot; alt=&quot;João e Ada a caminho da escola de bicicleta&quot; /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;p&gt;Imagem: João e Ada a caminho da escola.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>Get Certified 2025 - Google Cloud Provider</title>
    <link href="https://0jonjo.github.io/blog/2025/get-certified/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2025/get-certified/</id>
    <published>2025-03-22T00:00:00+00:00</published>
    <updated>2025-03-22T00:00:00+00:00</updated>
    <summary>Aulas, exercícios e laboratórios práticos para a certificação de Associate Cloud Engineer</summary>
    <content type="html">&lt;p&gt;Meses atrás me inscrevi na lista de espera do programa &lt;a href=&quot;https://cloud.google.com/innovators/getcertified?hl=pt_br&quot;&gt;Get Certified 2025 da Google Cloud&lt;/a&gt;. O objetivo dele é disponibilizar aulas síncronas, cursos exercícios práticos etc. para se preparar para a prova de certificação de &lt;a href=&quot;https://cloud.google.com/learn/certification/cloud-engineer&quot;&gt;Associate Cloud Engineer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Já tinha até me esquecido disso quando recebi um e-mail marcando a primeira aula e liberando os primeiros cursos e exercícios. Para avançar de fase é necessário concluir 4 laboratórios práticos sobre VMs, redes, pods e serviços variados da Google Cloud Platform.&lt;/p&gt;

&lt;p&gt;Depois de uma semana mergulhado nisso concluí a primeira fase do programa e achei bem legal a combinação de teoria e prática nas aulas e exercícios dos treinamentos da GCP. Todos utilizando as ferramentas reais em uma conta com os custos cobertos pela própria Google.&lt;/p&gt;

&lt;p&gt;Devidamente aprovado, fui chamado agora para as 8 semanas de aula síncrona, exercícios, cursos etc. da segunda fase do programa rumo a prova de certificação de Associate Cloud Engineer.&lt;/p&gt;

&lt;p&gt;Mais dois meses de leitura e prática pela frente, hora de estudar mais para fazer a prova de certificação. Como se diz no norte da Alemanha:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Moin! Los geht’s!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://live.staticflickr.com/7374/11406977156_a70fe38d07_b.jpg&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Imagem: &lt;a href=&quot;https://openverse.org/image/424b89af-7295-4e20-896b-fb8c30563c04&quot;&gt;Cloud Computing - Abstract&lt;/a&gt;. Source: OpenVerse - license Creative Commons 2.0&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>Extraindo palavras com Python</title>
    <link href="https://0jonjo.github.io/blog/2025/extrair-palavras-python/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2025/extrair-palavras-python/</id>
    <published>2025-01-25T00:00:00+00:00</published>
    <updated>2025-01-25T00:00:00+00:00</updated>
    <summary>Tutorial do Programming Historian para extrair palavras de um texto usando Python</summary>
    <content type="html">&lt;p&gt;Acaba de ser publicado em português pelo &lt;a href=&quot;https://programminghistorian.org&quot;&gt;Programming Historian&lt;/a&gt; um tutorial de extração de palavras-chave de documentos utilizando Python. Muito útil para o trabalho de quem extrai dados de documentações como desenvolvedor, cientista social, historiador, etc.&lt;/p&gt;

&lt;p&gt;Nele &lt;a href=&quot;https://adamcrymble.org/&quot;&gt;Adam Crymble&lt;/a&gt; ensina desde o passo inicial de criação do script até o tratamento do dataset, um excelente conteúdo. Ele foi traduzido do original em inglês por Daniela Gomes e revisado por mim.&lt;/p&gt;

&lt;p&gt;Sou grato por poder continuar contribuindo com o compartilhamento e produção de conhecimento livre a partir do elo entre Programação e Ciências Humanas em um projeto tão legal.&lt;/p&gt;

&lt;p&gt;O Programming Historian tem lições gratuitas sobre as mais diversas tecnologias e fins em inglês, espanhol, francês, português. Vale muito a pena conhecer, aprender e &lt;a href=&quot;https://programminghistorian.org/pt/directrizes-autor.html&quot;&gt;contribuir com o projeto!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Link para o tutorial: &lt;a href=&quot;https://programminghistorian.org/pt/licoes/extrair-palavras-chave&quot;&gt;Utilizar Gazetteers para Extrair Conjuntos de Palavras-chave de Textos Corridos&lt;/a&gt;&lt;/p&gt;

&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;
  &lt;img src=&quot;https://programminghistorian.org/images/website/index/woman-using-tabulator.png&quot; width=&quot;450&quot; alt=&quot;Ilustração antiga de uma mulher usando uma máquina tabuladora, cercada por pilhas de cartões perfurados&quot; /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;p&gt;Image: &lt;a href=&quot;https://programminghistorian.org/images/website/index/woman-using-tabulator.png&quot;&gt;Mulher usando máquina de cálculo&lt;/a&gt;. Fonte: Programming Historian.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>19 Meetup do GruPy-RN na Activesoft</title>
    <link href="https://0jonjo.github.io/blog/2024/grupy-19/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2024/grupy-19/</id>
    <published>2024-12-19T00:00:00+00:00</published>
    <updated>2024-12-19T00:00:00+00:00</updated>
    <summary>Palestra, aprendizado e troca de experiências</summary>
    <content type="html">&lt;p&gt;O último sábado foi um dia de aprendizado, troca de experiências e rever amigos no 19º Meetup do &lt;a href=&quot;https://blog.grupyrn.org/&quot;&gt;GruPy-RN&lt;/a&gt; na &lt;a href=&quot;https://www.linkedin.com/company/activesoft-br/&quot;&gt;Activesoft&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ao longo da manhã aprender mais sobre Raycasting com &lt;a href=&quot;https://www.linkedin.com/in/andersonptsn/&quot;&gt;Anderson Pereira Torres de Sá Neto&lt;/a&gt;. Debater decorators e closures com &lt;a href=&quot;https://www.linkedin.com/in/pablo-gustavo/&quot;&gt;Pablo Gustavo Fernandes Maia&lt;/a&gt; e mergulhar em suítes de testes com o botafoguense &lt;a href=&quot;https://www.linkedin.com/in/viniciusmendes/&quot;&gt;Vinicius Mendes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Na última apresentação do dia, falei sobre estratégias para remoção de código legado a partir da experiência do meu time na &lt;a href=&quot;https://www.linkedin.com/company/performait/&quot;&gt;Performa_IT&lt;/a&gt;. Foi bem legal conversar sobre estrutura de squads, como lidar com implementações antigas, e evoluir fluxos das aplicações. O link para os slides estão logo abaixo&lt;/p&gt;

&lt;p&gt;Obrigado a todos pelo acolhimento - incluindo um cafezinho maravilhoso - e por instigar boas discussões e risadas sobre tecnologias, processos e relações de amor e ódio com o código legado.&lt;/p&gt;

&lt;p&gt;Vida longa ao GruPy e obrigado a Activesoft por nos receber tão bem em sua casa. Até a próxima!&lt;/p&gt;

&lt;p&gt;Slides da apresentação: &lt;a href=&quot;https://docs.google.com/presentation/d/13OqTz1hSSxCMlK4N3GdNAX42PmWJHRCkVyDcsLblhWo/edit?usp=drive_link&quot;&gt;Removendo código legado: algumas dicas práticas&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://media.licdn.com/dms/image/v2/D4D22AQGPvHOXoWVsqQ/feedshare-shrink_800/B4DZPM1aIyG0Ag-/0/1734308375984?e=1737590400&amp;amp;v=beta&amp;amp;t=X7LaJCgSNojYV2LvOosPqBlIhEs054VpIFP21QuWeA8&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Imagem: Falando sobre produtos legados, fotografia produzida pelos organizadores do Meetup.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>Removendo código legado: algumas dicas práticas</title>
    <link href="https://0jonjo.github.io/blog/2024/remocao-codigo/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2024/remocao-codigo/</id>
    <published>2024-10-15T00:00:00+00:00</published>
    <updated>2024-10-15T00:00:00+00:00</updated>
    <summary>Notas para remoções e refatorações em grandes projetos</summary>
    <content type="html">&lt;p&gt;Você já deve ter visto por ai a frase: “um homem sem barriga é um homem sem história”. Para além do teor cômico sobre a vida, ela nos lembra uma verdade inegável: as pessoas se transformam ao longo do tempo. Os calendários parecem avançar cada vez mais rápido enquanto mudamos de altura, peso, cabelo, roupas, etc. Transformações que não são apenas externas, envolvem humor, paciência, amor, estado mental e muitos outros aspectos. Nesse sentido, os softwares são parecidos conosco porque não são imutáveis. Um par de anos - as vezes, meses ou semanas - e uma função X ou módulo Y não faz mais tanto sentido. Se o contexto mudou, seja por conta dos usuários, regras de negócio ou desenvolvedores, é fatal que aquela aplicação passará por mudanças. Um processo que se desenrola no cotidiano e resultam na acumulação diária aqui e ali de pequenos pedaços de código que estão sem uso ou subutilizados. Como no dia em que decidimos desbravar o cantinho das coisas esquecidas do guarda-roupa ou quintal, chega o momento de remover isso que não nos serve mais. É certo que quanto maior a casa e a família, maior será o volume de objetos sem uso e o trabalho para removê-los dali. A seguir alguns passos  práticos para remover essa “tralha” acumulada ao longo do tempo em grandes projetos.&lt;/p&gt;

&lt;p&gt;No último ano atuei em atividades diversas de remoção e refatoração de &lt;a href=&quot;https://pt.stackoverflow.com/questions/107722/o-que-%C3%A9-um-c%C3%B3digo-legado&quot;&gt;código legado&lt;/a&gt; junto do desenvolvimento de novas funcionalidades. A seguir vão cinco dicas práticas obtidas a partir da minha experiência pessoal junto a um time da &lt;a href=&quot;https://www.linkedin.com/company/performait/&quot;&gt;Performa IT&lt;/a&gt; atuando em grande projeto com dez anos de vida, o equivalente a um senhor octogenário em termos de software.&lt;/p&gt;

&lt;h3 id=&quot;não-dirija-o-carro-de-olhos-vendados&quot;&gt;Não dirija o carro de olhos vendados&lt;/h3&gt;

&lt;p&gt;Um dos desafios para remoção e refatoração de código em grandes projetos é que não é fácil vislumbrar se um código está afetando ou não o fluxo de ações. Afinal, ele é um emaranhado de dependências e relações que não são facilmente visíveis. Por isso, é importante ter uma visão clara do que está além do para-brisas e certeza se toda a mecânica do carro funciona perfeitamente. Uma forma de fazer isso é através de testes automatizados. Eles são uma ferramenta poderosa para garantir que as mudanças que você está fazendo não estão quebrando nada. Testes em quantidade e qualidade são como pneus e pastilhas de freio novas, que garantem que o carro vai andar e parar quando você precisar. Um projeto bem provido de testes para os seus principais casos de uso é bem útil, mesmo que parte deles esteja desatualiza ou quebrada. Eles são importantes indicativos para garantir que as mudanças que se deseja fazer não esta quebrando nada. Na ausência de testes automatizados, é relevante ter um ambiente de homologação onde você possa testar as mudanças que você está fazendo antes de colocá-las em produção. Preferencialmente, um ambiente que seja o mais próximo possível do ambiente de produção e também um profissional &lt;a href=&quot;https://pt.wikipedia.org/wiki/Garantia_da_qualidade&quot;&gt;QA&lt;/a&gt; para validar as mudanças que você está fazendo. De todo modo, mas é pertinente que o desenvolvedor também faça testes manuais e automatizados para ir norteando o que está sendo feito.&lt;/p&gt;

&lt;h3 id=&quot;se-uma-arma-aparece-na-história-ela-precisa-ser-disparada&quot;&gt;Se uma arma aparece na história, ela precisa ser disparada&lt;/h3&gt;

&lt;p&gt;Este é um princípio de &lt;a href=&quot;https://pt.wikipedia.org/wiki/Arma_de_Chekhov&quot;&gt;Anton Tchekhov&lt;/a&gt;, um escritor russo do século XIX, que diz que elementos presentes em um enredo precisam ser utilizados. Caso contrário, ele não deveria estar lá. É uma ideia de como contar histórias muito utilizada na literatura, cinema, games e, útil também na programação. Um projeto sem código morto é um projeto mais fácil de entender e de manter. Um dos desafios em grandes projetos é que, muitas vezes, o código que você quer remover está sendo usado de modo explicito ou não por outras partes do sistema. Por isso, é importante ter uma visão clara de como o código está sendo usado e por quem para conseguir extrair o máximo de código sem uso. Uma forma de fazer isso é através de ferramentas de análise estática de código, como o &lt;a href=&quot;https://rubocop.org/&quot;&gt;Rubocop&lt;/a&gt;, que podem ajudar a identificar onde o código está sendo chamado e se ele está sendo usado ou não. Outra forma de fazer isso é através de logs em ambiente de homologação e produção, que podem ajudar a identificar se o código que você quer remover está sendo chamado ou não. É importante também ter um bom entendimento do negócio e do contexto do projeto, vai facilitar a sua vida. Por fim, na dúvida se o código que você quer remover está sendo usado ou não, é melhor deixar como está. Afinal, é melhor ter um código morto do que uma funcionalidade quebrada.&lt;/p&gt;

&lt;h3 id=&quot;brincar-de-apagar-e-acender-as-luzes&quot;&gt;Brincar de apagar e acender as luzes&lt;/h3&gt;

&lt;p&gt;Uma estratégia para identificar código não utilizado é comentar o código e ver se o sistema ainda funciona. Se o os testes automatizados e/ou os fluxos em homologação continuarem funcionando, é um bom indicativo de que ele não está em uso e pode ser removido. A seguir, “descomentar” o código e testar se os erros se repetem ou não, e se novas partes param de funcionar. A estratégia de “apagar as luzes” comentando código ajuda a identificar também se outras partes da aplicação sem aparente relação com o que está sendo feito. Por exemplo, um método que subterraneamente depende de outro método que foi removido ou que não faz mais sentido. Ainda que o código esteja funcionando e em uso, ele pode estar escondendo problemas que só serão percebidos no momento da remoção. É uma oportunidade para refletir sobre a estrutura do código, verificar se ele está organizado de forma clara e coesa e refatorar o que for necessário removendo interdependências e melhorando a legibilidade.&lt;/p&gt;

&lt;h3 id=&quot;de-fora-para-dentro&quot;&gt;De fora para dentro&lt;/h3&gt;

&lt;p&gt;Uma vez identificado um código que não condiz mais com as regras de negócio ou contexto do projeto e pode ser removido, uma boa estratégia é corta-lo de fora para dentro. Ou seja, começar removendo o código que está mais distante do núcleo do sistema e que tem menos dependências, como interfaces que lidam com o usuário final. A seguir, partir para estruturas intermediárias, como controladores e serviços que guiam o que acontece no sistema. Por fim, ir para o núcleo, como modelos e repositórios, que concentram funcionalidades e por vezes regras da aplicação. Se ela possuir testes para cada uma dessas camadas, eles podem ser retirados junto da respectiva fatia, fazendo pequenos desvios ou incisões para que outras partes não sejam atingidas indevidamente. A ideia é que, ao remover o código de fora para dentro, você gradualmente perceba e controle as partes afetadas na remoção, garantindo que o sistema continue funcionando conforme o esperado.&lt;/p&gt;

&lt;h3 id=&quot;a-luneta-e-o-microscópio&quot;&gt;A luneta e o microscópio&lt;/h3&gt;

&lt;p&gt;Uma dica final é atentar para dois pontos de vista ao mesmo tempo: o da luneta e o do microscópio. A luneta representa o ponto de vista macro, que permite ver o sistema como uma galáxia, identificar os movimentos sistemas solares de modelos, os cometas das APIs e as crateras repletas de código parcialmente funcional nos planetas de módulos. Em um plano ainda mais amplo, estar atento as regras de negócio, integrações com outros sistemas e a arquitetura do sistema facilita muito o trabalho de se mover pela “tralha” de projetos legados, excluindo partes e dando novos sentidos a outras. Já o microscópio é o símbolo para o ponto de vista micro, que permite enxergar detalhes e identificar problemas específicos, como bugs e outro microorganismos escondidos entre as células das classes e dos métodos. Uma variável esquecida pode ser o início de um problema maior, que se diagnosticado cedo, pode ser resolvido com mais facilidade. Combinar esses dois pontos de vista permite encontrar mais facilmente padrões e tendências do código no geral e daquilo que pode ser removido em particular. Além disso, facilita pequenas e grandes refatorações, que podem ser feitas de forma mais segura e eficiente no decorrer do tempo.&lt;/p&gt;

&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;
  &lt;img src=&quot;https://live.staticflickr.com/6179/6173981823_438e8634f6_b.jpg&quot; width=&quot;450&quot; alt=&quot;Trabalhadores de obra assentando paralelepípedos em uma rua&quot; /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;p&gt;Imagem: &lt;a href=&quot;https://openverse.org/image/9c169d4c-0c6c-4ddf-bec1-8fdff3c4ad57&quot;&gt;“Bricklayers, Santos Gonçalves”&lt;/a&gt;. &lt;a href=&quot;https://openverse.org/&quot;&gt;Open Verse, Creative Commons 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>A beleza do erro: primeiros passos em um app Spring Boot</title>
    <link href="https://0jonjo.github.io/blog/2024/alljobs-meetings/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2024/alljobs-meetings/</id>
    <published>2024-08-25T00:00:00+00:00</published>
    <updated>2024-08-25T00:00:00+00:00</updated>
    <summary>Aprendizados projetando e implementando um sistema de reuniões para um balcão de empregos</summary>
    <content type="html">&lt;p&gt;Nas últimas semanas venho me dedicando a um projeto de estudo em Spring Boot, um app de gestão de reuniões online para um sistema de balcão de empregos que vem sendo desenvolvido nos últimos 3 anos, o &lt;a href=&quot;https://github.com/0jonjo/alljobs&quot;&gt;Alljobs&lt;/a&gt;. Como um desenvolvedor do universo Ruby e Python, aprender e escrever em Spring Boot tem sido uma boa oportunidade de errar, ou seja, aprender novas formas de pensar e implementar sistemas.&lt;/p&gt;

&lt;p&gt;A ideia é dessa aplicação é poder marcar reuniões entre recrutador e candidato a partir de uma chamada de API. Para isso, o &lt;a href=&quot;https://github.com/0jonjo/alljobs-meetings&quot;&gt;Alljobs Meetings&lt;/a&gt; deve realizar uma série de operações:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Verificar se o usuário (user) e recrutador (headhunter) existem no banco de dados;&lt;/li&gt;
  &lt;li&gt;Verificar a disponibilidade de horários registrada pelo recrutador e candidato;&lt;/li&gt;
  &lt;li&gt;Encontrar o primeiro dia e horário disponível para a reunião na agenda de ambos;&lt;/li&gt;
  &lt;li&gt;Criar um link para o encontro online.&lt;/li&gt;
  &lt;li&gt;Enviar um e-mail de confirmação para o recrutador e candidato.&lt;/li&gt;
  &lt;li&gt;Salvar a reunião no banco de dados.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Essas ações expressam regras de negócio que complementam o sistema original da Alljobs. Ele tem foco no cadastro, currículo e interações entre recrutador e candidato a partir de aplicações em vagas. Já o Meetings é para o momento em que o recrutador já triou candidatos e deseja falar com algum deles numa chamada. As seis ações do app visam que a reunião seja marcada o mais breve possível, dentro das preferências de cada usuário, sem conflitos de horários com outras reuniões e que eles sejam notificados antecipadamente delas.&lt;/p&gt;

&lt;p&gt;Para dar conta desses processos, foram rascunhados diversas formas de organização das tabelas no bancos de dados. Depois de algumas conversas com colegas e pesquisas - viva as comunidades! - foram definidas duas tabelas, uma para as próprias reuniões (meetings) e outra para preferências de horários dos usuários (available_times). A tabela de reuniões armazena os dados da reunião, como data, horário, link da chamada e status. A tabela de preferências armazena os horários disponíveis de cada usuário, com o dia da semana, início e fim de uma janela. Desse modo, um mesmo usuário pode ter várias janelas de horários disponíveis ao longo da semana, e um horário pode ser ou não disponível para dois usuários estarem em uma reunião.&lt;/p&gt;

&lt;p&gt;Antes da etapa 1, foi necessário revisar o básico de Java e aprender como criar um projeto em Spring Boot. No primeiro passo utilizei o curso &lt;a href=&quot;https://www.linuxtips.io/course/java-essentials&quot;&gt;Java Essentials&lt;/a&gt; da Linuxtips ministrado pela instrutora &lt;a href=&quot;https://www.linkedin.com/in/kamila-santos-oliveira/&quot;&gt;Kamila Santos&lt;/a&gt;. A partir daí, comecei a desenvolver o projeto, seguindo os passos do ebook e curso base de &lt;a href=&quot;https://www.youtube.com/watch?v=wlYvA2b1BWI&quot;&gt;Spring Boot da Michelli Brito&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;O objetivo não foi seguir um livro de receitas, mas sim começar a pensar e escrever com a cabeça de um desenvolvedor dessas tecnologias. Entender como são pensados os objetos, as classes e interfaces, e como eles se comunicam entre si. No processo, tive que me questionar diversas vezes: - Como as pessoas fazem isso no Spring Boot? Onde colocam essa checagem? Qual a melhor forma de persistir esses dados no banco? Algo que seria trivial em Ruby ou Python se torna um pequeno desafio na nova linguagem e framework. Ai está a beleza da coisa: a repetição de erros que leva a aprender.&lt;/p&gt;

&lt;p&gt;Entre a etapa 1 e 2, chega o momento dos jardins que se bifurcam - como bem previu &lt;a href=&quot;https://brasil.elpais.com/brasil/2018/09/11/cultura/1536655170_142491.html&quot;&gt;Borges&lt;/a&gt;. Não existe um único modo de implementar checagens de existência de usuários no banco de dados, e não há um modo estritamente melhor ou pior, mas sim o que é mais adequado para o contexto do projeto. É uma oportunidade para &lt;a href=&quot;/blog/2023/aprendiz/&quot;&gt;“gastar tempo” estudando&lt;/a&gt; e implementando diferentes abordagens Clicar para o projeto realizar o build e ver ele quebrar de novo e de novo, cada vez com um erro diferente. Ou então funcionar e nos testes manuais descobrir que o resultado não é o esperado. Foi o momento de explorar as possibilidades do Spring Boot, as anotações, os métodos, os testes, etc.&lt;/p&gt;

&lt;p&gt;Para salvar as preferências de horários dos usuários foi necessário de um lado estudar os modos pelos quais é possível gerir datas e horários nos bancos de dados  - utilizado no ecossistema Alljobs - e de outro, como é possível manipular esses dados no Spring Boot.&lt;/p&gt;

&lt;p&gt;A primeira descoberta interessante foi que o &lt;a href=&quot;https://www.postgresql.org/&quot;&gt;Postgres&lt;/a&gt; - utilizado nos demais projetos Alljobs - tem tipos de colunas específicos para salvar intervalos de datas, horários e números, o que permite trabalhar mais facilmente com eles. Utilizar esses “ranges”, nativos do banco de dados a partir da versão 12, foi uma indicação de colega quando expliquei sobre como pretendia salvar os horários disponibilizados pelos usuários. Mais uma vez, viva as comunidades e seu compartilhamento de conhecimento!&lt;/p&gt;

&lt;p&gt;Depois disso, foi necessário destrinchar como o Java e o Spring Boot trabalham com datas e horários. Sem surpresa vi que os modos de fazer isso foram evoluindo ao longo do tempo. Aprendi que o Java 8 introduziu uma nova API para manipulação de datas e horários, a &lt;a href=&quot;https://www.baeldung.com/java-8-date-time-intro&quot;&gt;java.time&lt;/a&gt;, que é mais robusta e segura que a antiga &lt;a href=&quot;https://www.baeldung.com/java-date-time&quot;&gt;java.util.Date&lt;/a&gt;. No Spring Boot, a manipulação de datas e horários é feita através das anotações &lt;a href=&quot;https://www.baeldung.com/spring-boot-date-fields&quot;&gt;@LocalDate&lt;/a&gt; e &lt;a href=&quot;https://www.baeldung.com/spring-boot-date-fields&quot;&gt;@LocalTime&lt;/a&gt; que facilitam a conversão de dados entre o banco de dados e a aplicação.&lt;/p&gt;

&lt;p&gt;No fim, não consegui ainda conciliar as ranges do Postgres com os horários do Spring e Java no momento de salvar as preferências dos usuários. Tive que dividir inicialmente as colunas de início e fim de uma janela de horários disponíveis em duas colunas timestamp (data e hora). Dias de estudo que resultaram em fracasso? Só se eu não soubesse que a beleza do erro é a felicidade do aprendiz, a junção de saberes e experiências que não seriam possíveis se eu não estivesse errando e aprendendo continuamente. Que venham os próximos erros nas demais etapas do projeto!&lt;/p&gt;

&lt;p&gt;Para conhecer o Alljobs Meetings, acesse o repositório no Github:
&lt;a href=&quot;https://www.github.com/0jonjo/alljobs-meetings&quot;&gt;www.github.com/0jonjo/alljobs-meetings&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para saber mais sobre ranges no Postgres e manipulação de datas e horários no Java e Spring Boot:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Ranges no Postgres: &lt;a href=&quot;https://www.postgresql.org/docs/12/rangetypes.html&quot;&gt;https://www.postgresql.org/docs/12/rangetypes.html&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;LocalTime e LocalDate no Spring Boot: &lt;a href=&quot;https://www.baeldung.com/spring-boot-date-fields&quot;&gt;https://www.baeldung.com/spring-boot-date-fields&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Manipulando datas e horários no Java: &lt;a href=&quot;https://www.baeldung.com/java-date-time&quot;&gt;https://www.baeldung.com/java-date-time&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;
&lt;blockquote&gt;
  &lt;p&gt;Image: &lt;a href=&quot;https://openverse.org/image/9e127bcc-ccf4-406f-b02f-2e26e816c8c9?&quot;&gt;“Spring Flowers &amp;amp; Rain Boots, David Kesler”&lt;/a&gt;. &lt;a href=&quot;https://openverse.org/&quot;&gt;Open Verse, Creative Commons 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>O que fazer? Como evoluir em cada estágio da carreira?</title>
    <link href="https://0jonjo.github.io/blog/2024/estagios-carreira/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2024/estagios-carreira/</id>
    <published>2024-06-19T00:00:00+00:00</published>
    <updated>2024-06-19T00:00:00+00:00</updated>
    <summary>Dica de palestra com dicas para cada estágio da carreira</summary>
    <content type="html">&lt;p&gt;O que fazer? Que decisão tomar? Por que estagnei neste estágio? São perguntas que todo desenvolvedor se faz em diversos momentos sobre sua carreira.&lt;/p&gt;

&lt;p&gt;Recentemente, alguém do grupo &lt;a href=&quot;https://chat.whatsapp.com/DYjjpU8LCqi6AHYNlNQ3Gz&quot;&gt;Ruby Brasil&lt;/a&gt; indicou o vídeo da &lt;a href=&quot;https://www.linkedin.com/in/debborafernandess/&quot;&gt;Débora Fernandes&lt;/a&gt; sobre carreiras na área de tecnologia. Eu salvei para assistir mais tarde e quando finalmente assisti, entendi o motivo da indicação - o vídeo está logo abaixo. Nesta palestra, ela aborda sistematicamente o que esperar, motivos de estagnação e estratégias para evoluir em cada estágio da carreira, desde júnior até engineering manager. É uma fala valiosa, pois aborda desde expectativas até dicas práticas para diversos momentos da carreira. Independente da tecnologia com a qual você trabalhe, é o tipo de material - os slides também estão disponíveis no link do vídeo - que vale a pena revisitar e obter novas ideias a partir das reflexões da Débora.&lt;/p&gt;

&lt;p&gt;Ela parte da perspectiva de que a pessoa deve gerir ativamente suas expectativas e abordar lacunas de conhecimento e atitudes que impedem a evolução. Essa abordagem é semelhante à que eu mencionei na seção &lt;a href=&quot;../arte-onboarding/&quot;&gt;“Para quem não sabe onde ir, todos os caminhos levam a lugar nenhum”&lt;/a&gt;, em um texto sobre onboardings.&lt;/p&gt;

&lt;p&gt;Para cada estágio de carreira, há um tópico de oportunidades. Nessa palestra, ela apresenta dicas valiosas, incluindo como e onde encontrar questões pertinentes para evoluir tecnicamente. É uma excelente oportunidade para refletir sobre o que você tem feito e o que pode fazer para evoluir. São reflexões relevantes para desenvolvedores, QAs, líderes técnicos e todos que trabalham no mundo da tecnologia!&lt;/p&gt;

&lt;p&gt;PS: Também está disponível no Youtube um material em que a Débora Fernandes conversa com o Roberson Miguel sobre o mesmo tema, você pode conferir &lt;a href=&quot;https://www.youtube.com/watch?v=rsKm3Cb0IpY&quot;&gt;aqui&lt;/a&gt;.&lt;/p&gt;

&lt;!-- Feel free to change the width and height to your desired video size. --&gt;

&lt;div class=&quot;embed-container&quot;&gt;
  &lt;iframe src=&quot;https://www.youtube.com/embed/8iFvJE41eGs&quot; width=&quot;700&quot; height=&quot;480&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;
  &lt;/iframe&gt;
&lt;/div&gt;

&lt;blockquote&gt;
  &lt;p&gt;Imagem: &lt;a href=&quot;https://openverse.org/image/ec8caffb-4424-4a32-b8c5-987a42ea7961&quot;&gt;“Coding?” de Rasagy Sharma&lt;/a&gt;. Fonte: &lt;a href=&quot;https://openverse.org/&quot;&gt;Open Verse, Creative Commons 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>Woche: da necessidade à aplicação</title>
    <link href="https://0jonjo.github.io/blog/2024/woche/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2024/woche/</id>
    <published>2024-04-27T00:00:00+00:00</published>
    <updated>2024-04-27T00:00:00+00:00</updated>
    <summary>A jornada de uma ferramenta minimalista de organização semanal</summary>
    <content type="html">&lt;p&gt;Woche em alemão significa “semana”, se trata de um aplicativo minimalista para organização semanal. Ele nasceu da minha busca por uma ferramenta prática e acessível para gerenciar tarefas, compromissos e notas. Por que fazer mais uma agenda ou “to-do list” em um mundo com Evernote, Notion, Google Keep, etc.? A resposta passa pelo propósito da aplicação e pela expriência de usuário. Como estudante da língua, me inspirei na cultura alemã de simplicidade, organização e praticidade. Ao mesmo tempo, adicionei adaptabilidade e portabilidade ao Woche para atender às minhas necessidades como pesquisador, professor e programador.&lt;/p&gt;

&lt;h2 id=&quot;concebendo-a-ideia&quot;&gt;Concebendo a ideia&lt;/h2&gt;

&lt;p&gt;Nos últimos dez anos cultivei o hábito de ter agendas, bloquinhos de anotações e afins. Descobri que é mais fácil lembrar, entender e conectar assuntos quando produzo &lt;a href=&quot;https://tecnoblog.net/especiais/escrever-mao-aprendizado/&quot;&gt;notas e tópicos em papel&lt;/a&gt;. Percebi que ter à mão uma agenda de atividades - seja do trabalho ou vida pessoal -facilita meu planejamento e me ajuda ter em mente o que foi feito, o que preciso fazer.&lt;/p&gt;

&lt;p&gt;Empiricamente, descobri que ciclos semanais começando nas segundas-feiras me permitem me organizar melhor entre trabalho, atividades físicas, contas a pagar, compromissos etc. Quando o volume de anotações por semana cresceu, passou a não ser tão rápido achar um registro pessoal ou profissional. Neste momento eu já estava usando menos o papel e mais o celular ou computador para as anotações, então decidi separar as agendas. Ao nomear a aplicação, lembrei das conversas com diversos brasileiros na Alemanha sublinhando como seus colegas de trabalho europeus tem um separação firme entre vida profissional e pessoal. Algo não tão comum no Brasil, mas &lt;a href=&quot;https://economia.uol.com.br/noticias/redacao/2022/06/07/equilibrio-entre-vida-pessoal-e-profissional-todo-mundo-sai-ganhando.htm&quot;&gt;bem importante para a saúde&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;usabilidade-e-gestão-dos-dados&quot;&gt;Usabilidade e gestão dos dados&lt;/h2&gt;

&lt;p&gt;Utilizando diariamente apps de agenda e notas, percebi alguns aspectos que me incomodavam. Anotar um comentário sobre uma reunião é algo trivial, mas nem sempre é simples e rápido. Abrir a página ou app, logar, encontrar o lugar de comentar e finalmente por a informação desejada. Há uma quebra no fluxo de trabalho e, se você estiver compartilhando a tela, pode estar exibindo sem querer suas anotações. O ideal seria fazer isso em um comando simples, que retornasse apenas o que foi anotado e onde.&lt;/p&gt;

&lt;p&gt;Muitos aplicativos são fechados dentro de um ecossistema, como Google e Microsoft. Quando meu empregador troca de serviço ou eu mudo de trabalho, não é tão simples exportar e consumir minhas anotações por questões técnicas e legais. Há também &lt;a href=&quot;https://alternativeto.net/software/notion/?feature=note-taking&amp;amp;license=opensource&quot;&gt;aplicações open-source&lt;/a&gt; em que é possível ter controle sobre onde suas anotações e agenda são salvas. Tomei-as como base para pensar em um app que salva as anotações localmente e, se o usuário quiser, integra a pasta delas em alguma nuvem.&lt;/p&gt;

&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;
  &lt;img src=&quot;https://github.com/0jonjo/0jonjo.github.io/assets/64807181/2dbdeae4-267f-42db-947f-3de50d6d411d&quot; width=&quot;600&quot; alt=&quot;Captura de tela do terminal executando o comando woche.sh para adicionar uma tarefa ao domingo&quot; /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;p&gt;Optei por um tipo de extensão de arquivo leve e fácil de ler/editar em qualquer tipo de dispositivo, o &lt;a href=&quot;https://pt.wikipedia.org/wiki/Markdown&quot;&gt;Markdown&lt;/a&gt;. Ele é comum da documentação de projetos e produção blogs, como este que você está lendo, e é &lt;a href=&quot;https://programminghistorian.org/pt/licoes/introducao-ao-markdown&quot;&gt;fácil de usar&lt;/a&gt;. Assim fica simples ler, copiar, editar e compartilhar as informações para e-mails, chats, editores de texto, etc.&lt;/p&gt;

&lt;h2 id=&quot;as-escolhas-técnicas&quot;&gt;As escolhas técnicas&lt;/h2&gt;

&lt;p&gt;No meu dia-a-dia como programador, o terminal está sempre aberto, então optei por disparar dele os comandos de criar arquivo, adicionar atividade, mostrar conteúdo, etc. Diversas linguagens manipulam textos e arquivos, como Python e Ruby, mas optei por utilizar algo nativo do Linux, os &lt;a href=&quot;https://pt.wikipedia.org/wiki/Shell_script&quot;&gt;shell script&lt;/a&gt;. A ideia foi alinhar a simplicidade com meu propósito de fazer uma aplicação ao mesmo tempo em que aprendo novas técnicas e tecnologias.&lt;/p&gt;

&lt;p&gt;A produção de Woche é um exercício de &lt;a href=&quot;https://www.redhat.com/pt-br/topics/devops/what-is-ci-cd&quot;&gt;desenvolvimento com CI/CD&lt;/a&gt;. Desde os primeiros commits o projeto possui &lt;a href=&quot;https://github.com/0jonjo/woche/blob/main/tests.sh&quot;&gt;testes automatizados&lt;/a&gt; das ações disponíveis ao usuário. Esses testes estão &lt;a href=&quot;https://github.com/0jonjo/woche/actions&quot;&gt;integrados em uma pipeline&lt;/a&gt; que roda automaticamente a cada pull request ou commit na para a branch de produção.&lt;/p&gt;

&lt;p&gt;A aplicação utiliza tags de versão e tem &lt;a href=&quot;https://github.com/0jonjo/woche/tags&quot;&gt;releases&lt;/a&gt;. Além disso, possui um &lt;a href=&quot;https://github.com/0jonjo/woche&quot;&gt;README&lt;/a&gt; com funções disponíveis e como fazer customizações - trocar a língua, como e onde salvar as anotações, etc. É um projeto de caráter aberto e experimental que se vale amplamente de experiências e ideias da comunidade do software livre, está sob &lt;a href=&quot;https://github.com/0jonjo/woche/blob/main/LICENSE&quot;&gt;licença GNU 3&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;LINK DO PROJETO NO GITHUB: &lt;a href=&quot;https://github.com/0jonjo/woche&quot;&gt;https://github.com/0jonjo/woche&lt;/a&gt;&lt;/p&gt;

&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;
  &lt;img src=&quot;https://github.com/0jonjo/0jonjo.github.io/assets/64807181/69b082fa-c0c0-442f-913b-6853a06675bc&quot; width=&quot;600&quot; alt=&quot;Captura de tela do terminal mostrando a agenda da semana exibida pelo comando woche.sh show&quot; /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;p&gt;Imagens: Prints de tela utilizando a aplicação para mostrar agenda da semana e adicionar uma task.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>A mágica</title>
    <link href="https://0jonjo.github.io/blog/2024/a-magica/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2024/a-magica/</id>
    <published>2024-03-01T00:00:00+00:00</published>
    <updated>2024-03-01T00:00:00+00:00</updated>
    <summary>Pequena crônica sobre a vida cotidiana</summary>
    <content type="html">&lt;p&gt;De certa feita, um coelho branco, de olhos vermelhos e orelhas pontudas adornadas com conchas rosas, contou-me que certa vez perguntou a um mágico como ele o retirava da cartola. O homem de fraque titubeou, sem resposta na ponta da língua. Esboçou com as mãos o movimento de quem tira compras de uma sacola, coçou a cabeça e, sem jeito, mostrou as palmas das mãos para confessar que não sabia.&lt;/p&gt;

&lt;p&gt;Ora, ora, você deve estar pensando que não existe coelho branco que fale, nem mágico que não saiba como as coisas aparecem em sua cartola antes de virem a público, em um encontro marcado com os aplausos. No entanto, creia, foi mesmo um coelho branco que me contou que o mágico o retira de sua cartola preta, em um misto de fé e surpresa cotidiana, sem saber como. Não há mistério, apenas a mágica de que existir é mesmo o exercício de uma impossibilidade.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Berlim, inverno de 2024.&lt;/em&gt;&lt;/p&gt;

&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;
  &lt;img src=&quot;https://live.staticflickr.com/8594/15735492707_9610f068ea_b.jpg&quot; width=&quot;450&quot; alt=&quot;Ilustração de um mágico puxando um coelho pela orelha diante de outro coelho&quot; /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;p&gt;Imagem: &lt;a href=&quot;https://openverse.org/image/263d94ce-2ac3-45f8-8d3e-a44c85bc1926&quot;&gt;Magic Rabbit de Gwydion M. Williams&lt;/a&gt;. Fonte: &lt;a href=&quot;https://openverse.org/&quot;&gt;Open Verse, Creative Commons 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>A arte do onboarding</title>
    <link href="https://0jonjo.github.io/blog/2024/arte-onboarding/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2024/arte-onboarding/</id>
    <published>2024-01-17T00:00:00+00:00</published>
    <updated>2024-01-17T00:00:00+00:00</updated>
    <summary>Cinco pontos para acelerar e qualificar seu onboarding</summary>
    <content type="html">&lt;p&gt;Abrir uma porta e sentir que todas as pessoas daquela sala estão te olhando. Há uma sensação estranha quando somos recém-chegamos em um novo lugar, ela só vai sumir inteiramente quando nos sentirmos integrados. Ao entrar em uma empresa ou projeto, há um período de adaptação e absorção de conhecimento mínimo sobre pessoas, processos e produtos. Esse período, comumente chamado de &lt;a href=&quot;https://www.gupy.io/blog/onboarding&quot;&gt;onboarding&lt;/a&gt;, é fundamental para que o novo membro da equipe possa se situar e começar a contribuir de forma mais rápida e efetiva&lt;/p&gt;

&lt;p&gt;Cada empresa e time tem processos mais ou menos estruturados de onboarding, que variam em período de tempo total e horas semanais dedicadas a isso. Geralmente, é um período de ansiedade do novo membro da equipe e de descobertas mútuas. Um amigo que passou diversas vezes por esse processo nos dois lados da mesa diz que não há como esperar uma atuação a 100% da capacidade de alguém antes de três meses.&lt;/p&gt;

&lt;p&gt;Eu particularmente sou bem atuante em onboardings. Aprendi com meu ex-líder técnico, &lt;a href=&quot;https://www.linkedin.com/in/nsmj/&quot;&gt;Nilson Júnior&lt;/a&gt;, que é essencial dar todo suporte possível aos recém-chegados. Atentar aos acessos, cerimônias, questões técnicas, etc. e também aos aspectos humanos do processo. Além disso, tendo entrado no mercado de tecnologia depois dos 30 anos com ampla experiência em outras áreas, eu trouxe na bagagem algumas estratégias para acelerar meu onboarding e o de outras pessoas.&lt;/p&gt;

&lt;p&gt;O objetivo do onboarding é se situar e começar a contribuir mais rápido e melhor com o time. Aqui vão cinco pontos-chave para isso:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As perguntas do detetive&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ao chegar em um novo ambiente com pessoas que também não conhecemos, geralmente há uma série de dúvidas. Historiadores, médicos, investigadores criminais e pesquisadores das mais diversas áreas compartilham uma estratégia relacionada ao método científico, um conjunto base de perguntas que cabem nos dedos de uma mão. São elas: O quê? Quando? Onde? Como? Por quê?. Elas são um norte para abordar o que vamos conhecendo e também facilitam a reflexão sobre as lacunas de conhecimento que precisamos sobre o novo trabalho. A estratégia é ir anotando, seja no computador ou mesmo em um caderninho, as informações mais relevantes do que vai sendo obtido em chamadas, chats, boards, documentação, etc. e também as novas dúvidas. Por que anotar? Por em palavras ajuda a definir melhor nossas respostas e perguntas, delimitando o escopo e fazendo conexões com outros saberes que já dominamos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As regras do jogo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As cinco perguntas do detetive são um excelente ponto de partida para a integração de um novo membro em um time. Elas ajudam a entender a empresa, a estrutura e os processos. Mas, para atuar de forma eficaz, é preciso também entender o negócio. Todo software está inserido numa conjuntura própria atendendo demandas específicas. Vale se perguntar: quem é o cliente final da aplicação? Qual o valor que ela entrega para a o cliente? Quais as iniciativas em desenvolvimento e seus principais desafios? Por que elas foram escolhidas? Como esse app se diferencia dos seus concorrentes? Como está o mercado global e nacional desse negócio? Quais os &lt;a href=&quot;https://dicionario.priberam.org/jarg%C3%A3o&quot;&gt;jargões da área&lt;/a&gt;? Em uma outra direção você pode lançar perguntas semelhantes sobre tecnologias e ferramentas. Quais você tem domínio? Quais não? Estão atualizadas? Questões como essas nos contextualizam melhor para atuar e nos colocam mais rápido no mesmo nível de conhecimento dos colegas e dos clientes.&lt;/p&gt;

&lt;p&gt;É provável que você descubra que parte do time técnico conheça pouco do negócio, pois cada um se foca na sua tecnologia e papel específico. No entanto, isso pode facilitar também a sua atuação técnica, o entendimento das demandas que chegam para o seu time e a qualificação do que você desenvolve no dia a dia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;As expectativas e as pessoas&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A entrada de um novo membro em um time é acompanhada de uma série de expectativas. Além da ansiedade e das primeiras impressões do recém-chegado, existem as projeções de lideranças, colegas e clientes sobre ele. É fato, a relação primordial do ambiente de trabalho, antes de qualquer tecnologia, ferramenta ou regra de negócio, é com as pessoas. Uma empresa é um microcosmo da sociedade, com pessoas mais e menos falantes, abertas a ajudar, proativas, introspectivas, etc. É com elas que você lidará 40 horas por semana via chamada de vídeo, chat, e-mail, etc. Entender qual a responsabilidade de cada pessoa é relevante, mas mais ainda o que cada uma faz e como elas são no dia a dia, para além do cargo que ocupam.&lt;/p&gt;

&lt;p&gt;Em outra direção, vale entender o que esperam de você. Você veio para substituir alguém que tinha um papel relevante A? Para suprir a falta de pessoal na tecnologia B? Para ajudar a gerir o time? Para ser a liderança técnica? Ter isso claro ajuda a gerir mais rapidamente o que se espera de você e evita embarcar em projeções irreais sobre si mesmo. Tendo ideia do que se espera, é mais fácil abrir sua caixa de ferramentas técnica e pessoal e contrastar suas habilidades com as projeções.&lt;/p&gt;

&lt;p&gt;Em um bom processo seletivo, os profissionais já fizeram entrevistas e outras etapas que mapeiam minimamente sua “caixinha de ferramentas” e comparam com as necessidades da vaga. É claro que os recrutadores reúnem indícios, mas é possível haver surpresas positivas e negativas.Para quem mudou de área, trazer habilidades úteis de outras profissões e contextos é muito produtivo. Independente da empresa e do cargo, a habilidade de lidar com pessoas será essencial. No entanto, você pode estar coçando a cabeça e pensando: “Mas eu não sei lidar bem com pessoas”. Bem, é hora de começar a aprender.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Para quem não sabe onde ir, todos os caminhos levam a lugar nenhum&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uma vez que você tem um entendimento mínimo das regras de negócio e tecnologias, das pessoas e expectativas é hora de traçar caminhos. Digamos que você constatou que conhece pouco do negócio W ou da forma como a tecnologia X é utilizada no projeto, ou então que há uma necessidade Y para a qual você pode contribuir usando sua “caixinha de ferramentas” e novas habilidades. Este é o momento de procurar um modo de suprir as lacunas e oportunidades, seja a partir de um livro, curso, projeto de estudo, entre outras opções. Pode ser algo atingível em uma semana ou em meses, o importante aqui é identificar um norte, uma direção a seguir. Não precisa ser um grande plano, delineado nos mínimos detalhes, mas sim ter em mente linhas gerais do que é necessário melhorar e do que você pode contribuir.&lt;/p&gt;

&lt;p&gt;É comum empresas terem avaliações semestrais de desempenho e planos de desenvolvimento individual acompanhados pelos gestores. Colocar os pontos que você deseja evoluir dentro desse planejamento é uma boa estratégia. Isso ajuda a estruturar objetivos e as formas pelas quais você pretende alcançá-los. O diálogo com chefia e colegas ajuda a produzir planos realistas, considerando o tempo e recursos disponíveis, bem como seu nível de conhecimento sobre a questão escolhida.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ação individual, processo coletivo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A figura central do onboarding é quem está chegando. Os holofotes estão sobre ele, o que pode gerar uma ansiedade e medo consideráveis. Se bater um desconforto maior, vale procurar o apoio daquelas pessoas mais receptivas no novo trabalho, dos amigos e das comunidades de que você participa. Você não está só! Eu recomendei ao longo desse texto um papel ativo e interesse genuíno em aprender os processos e se aproximar das pessoas. Essa é a chave para torná-lo mais rápido e efetivo. Só que, é claro, o onboarding é um processo coletivo, envolve gerência, liderança técnica e o time como um todo. Quanto mais as pessoas forem receptivas e existirem ações estruturadas para a chegada de novos membros, mais rápido e menos “sofrido” será o processo.&lt;/p&gt;

&lt;p&gt;Se você já esteve em outro time ou empresa, avalie sua própria experiência de como foi sua chegada. O que foi bom? O que faltou? O que você poderia ter feito para torná-lo mais fácil? Essa reflexão vai ajudá-lo em um novo onboarding. Mesmo que você não tenha uma experiência anterior, vale conversar com outras pessoas sobre seus onboardings. Elas trarão perspectivas de outras empresas/times e avaliarão o que deu certo ou não dos dois lados da mesa.&lt;/p&gt;

&lt;p&gt;Em resumo, o onboarding é um processo de descoberta que pode gerar ansiedade, estresse, reflexão e até diversão. É uma oportunidade de conhecer uma nova área e modos de fazer distintos do que você está acostumado. É também um momento de apreciar novos caminhos, pois geralmente há menos carga de responsabilidades, uma vez que ainda estão sendo criados os acessos e outras formalidades. Aproveite!&lt;/p&gt;

&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;
  &lt;img src=&quot;https://live.staticflickr.com/1784/42898374451_c6cb68dd17_b.jpg&quot; width=&quot;450&quot; alt=&quot;Porta pintada com um coelho branco em um tronco de árvore, remetendo a um novo começo&quot; /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;p&gt;Imagem: &lt;a href=&quot;https://openverse.org/image/a76c2702-2311-45b1-8052-515abe9d0855&quot;&gt;Apollo 11 momentos antes de pousar na Lua&lt;/a&gt;. Fonte: OpenVerse - licença Creative Commons 2.0.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>Encontrar, conhecer e celebrar: dois dedos de café e prosa</title>
    <link href="https://0jonjo.github.io/blog/2023/encontrar-conhecer-celebrar/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2023/encontrar-conhecer-celebrar/</id>
    <published>2023-12-18T00:00:00+00:00</published>
    <updated>2023-12-18T00:00:00+00:00</updated>
    <summary>A oportunidade de conhecer e brindar com as pessoas</summary>
    <content type="html">&lt;p&gt;Transformar café em código é um mote estampado em canecas e camisetas que vemos por aí sobre a vida de quem trabalha com TI. Eu faço parte desse grande grupo de programadores amantes da cafeína, mas a frase também remete à rotina. Quando perguntamos a um programador como é seu dia a dia, geralmente escutamos sobre muitas horas de reuniões, leitura e revisão de código, pesquisa por respostas nem sempre claras e úteis. Há relatos sobre estresse, dor nas costas, noites mal dormidas, insônia, síndrome de impostor - por vezes, depressão e burnout também - além de xícaras e mais xícaras de café. É claro que isso é apenas uma parte do todo, que também envolve aspectos positivos, como salários mais altos que a média, possibilidade de trabalho remoto e benefícios variados. Seja como for, a rotina é uma repetição de ações na frente de telas, com uma xícara na mão. No caso do trabalho remoto, esse é praticamente o único meio de interação com os colegas.&lt;/p&gt;

&lt;p&gt;Na prática, a relação laboral também se torna pessoal. De colega de trabalho a amigo? Nem sempre, mas são oito horas por dia de contato. Você conhece o outro e demonstra - mesmo que inconscientemente - seu jeito de falar e pensar, gostos, humor, qualidades e defeitos, alegrias e tristezas de esferas para além daquela pela qual te pagam um salário. Nesse sentido, eu nunca tive a oportunidade de agradecer pessoalmente a diversas pessoas que me ensinaram muito e me apoiaram, nem reconfortar - para além do contato via apps - os infortúnios da vida profissional e pessoal de outras. Há também quem diga que não é possível conhecer de verdade alguém por meio de uma máquina conectada a Internet. Eu particularmente sou desses, gosto de olhar com atenção, em algum lugar atrás das retinas onde mora o pequeno universo de cada um. Dizer que os olhos são janelas para a alma é uma expressão já antiga e bem gasta, mas verdadeira.&lt;/p&gt;

&lt;p&gt;É curioso o encontro entre a imagem que fazemos de alguém que conhecemos apenas online e a realidade. Pode haver um instante de dúvida entre um aperto de mão ou abraço, se a conversa será levada com mais ou menos intimidade, se a pessoa é mais tagarela ou tímida do que imaginávamos.  Há um encontro entre a imagem que fazemos da pessoa - altura, peso, roupas, jeito de ser e sotaque - e a que está ali, provavelmente também processando esse desencontro entre algum nível de idealização e a realidade.&lt;/p&gt;

&lt;p&gt;Semana passada tive a rara oportunidade de conhecer pessoalmente a sede e o time da &lt;a href=&quot;https://www.linkedin.com/company/performait/&quot;&gt;Performa IT&lt;/a&gt;, dos colegas mais próximos até as lideranças. Achei bem legal, claro, a viagem, trabalhar nas bancadas coletivas, o cantinho do café e a gaveta de guloseimas, tratar pessoalmente algo que seriam mensagens no chat, etc. O que achei incrível mesmo foi poder de conhecer as pessoas, apertar a mão, jogar conversa fora, almoçar e pegar um transporte falando da vida e do trabalho. É muito bom ter a chance de contrastar as imagens que tinha na cabeça com as pessoas de carne e osso, com suas características e manias. No mesmo passo, sair das questões cotidianas e celebrar nossas conquistas do ano. Se reunir e poder brindar o que fizemos é dar mais sentido às quarenta horas semanais de código e reuniões regadas às incontáveis xícaras de café na frente do computador. É a oportunidade de conversar, rir, escutar música, dançar, enfim, vivenciar algo juntos. Nem todos são tocados por essas experiências da mesma forma, mas é certo que as percepções de si e dos outros se alteram, pelo menos um pouco, depois delas. Sou grato pela experiência e que tenhamos muitas oportunidades de nos encontrar, conhecer e celebrar!&lt;/p&gt;

&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;
  &lt;img src=&quot;https://live.staticflickr.com/7308/16195370169_0ab5cb9808_b.jpg&quot; width=&quot;450&quot; alt=&quot;Máscaras de argila com rostos variados conectadas por fios coloridos em uma instalação de arte&quot; /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;p&gt;Imagem: &lt;a href=&quot;https://openverse.org/image/29dd4eda-3f9f-4ff2-b2aa-90234440e157&quot;&gt;Working hard for a cup of coffee de R. Halfpaap&lt;/a&gt;. Fonte: OpenVerse - licença Creative Commons 2.0.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>Diplomado 3 anos depois do primeiro if-else</title>
    <link href="https://0jonjo.github.io/blog/2023/engenharia-de-software/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2023/engenharia-de-software/</id>
    <published>2023-11-20T00:00:00+00:00</published>
    <updated>2023-11-20T00:00:00+00:00</updated>
    <summary>Agradecimentos da conclusão da Especialização em Engenharia de Software</summary>
    <content type="html">&lt;p&gt;Três anos depois do meu primeiro certificado como desenvolvedor, o de Programador Web pelo &lt;a href=&quot;https://portal.imd.ufrn.br/portal/&quot;&gt;Metrópole Digital - IMD/UFRN&lt;/a&gt;, recebo minha certificação como Especialista em Engenharia de Software na &lt;a href=&quot;https://www.anhanguera.com/&quot;&gt;Anhanguera Educacional&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Uma jornada de 10 meses pela arquitetura, metodologias ágeis, modelagem de sistemas, banco de dados e testes.&lt;/p&gt;

&lt;p&gt;Obrigado a todos familiares, professores, amigos, colegas de trabalho e membros de comunidades diversas pelo apoio e aprendizados impagáveis ao longo da especialização e nos últimos três anos e meio. Vocês fizeram toda a diferença!&lt;/p&gt;

&lt;p&gt;Aprendi a programar com minha filha crescendo na barriga da mãe. Não por acaso ela recebeu o nome de &lt;a href=&quot;https://pt.wikipedia.org/wiki/Ada_Lovelace&quot;&gt;Ada&lt;/a&gt;, a primeira programadora da História. Do computador do quarto, acompanhei minha primeira linha de código entrar em produção ao mesmo tempo em que ela se preparava para começar a andar. Recebo este diploma enquanto ela vai terminando seu primeiro ano escolar.&lt;/p&gt;

&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;
  &lt;img src=&quot;https://upload.wikimedia.org/wikipedia/commons/0/0f/Ada_lovelace.jpg&quot; width=&quot;350&quot; alt=&quot;Retrato de Ada Lovelace&quot; /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;blockquote&gt;
  &lt;p&gt;Imagem: &lt;a href=&quot;https://commons.wikimedia.org/wiki/File:Ada_lovelace.jpg?uselang=pt#Licenciamento&quot;&gt;Ada Lovelace, 1838, aquarela de Edward Chalon&lt;/a&gt;. Fonte: Wikipédia - domínio público.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>Crescimento e diversidade nas comunidades de tecnologia</title>
    <link href="https://0jonjo.github.io/blog/2023/comunidades/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2023/comunidades/</id>
    <published>2023-11-11T00:00:00+00:00</published>
    <updated>2023-11-11T00:00:00+00:00</updated>
    <summary>Para uma expansão acolhedora das comunidades</summary>
    <content type="html">&lt;p&gt;Seja nos pequenos ou grandes eventos, é muito bom ver as comunidades de tecnologia a todo vapor. Encontrar  pessoas que conheço palestrando, assistindo e debatendo é bem legal, mas é melhor ainda ver novas pessoas - estudantes, profissionais migrando de área, ativistas e curiosos - participando. É certo que sem o fator N, uma quantidade mínima de pessoas interessadas em um tema específico, os grupos desaparecem. Só que o ponto aqui é outro, com novos atores as comunidades crescem não apenas em número, como também em vivacidade.&lt;/p&gt;

&lt;p&gt;Nos eventos é perceptível que cada vez menos as comunidades de tecnologia como pequenos mundos à parte, e mais organismos dentro de um ecossistema. Um exemplo é a simbiose, cada vez mais comum, com empresas e instituições de ensino na realização de encontros, meetups, &lt;a href=&quot;https://www.devmedia.com.br/o-que-e-o-coding-dojo/30517&quot;&gt;coding dojos&lt;/a&gt;, etc. Gurus do mundo digital já afirmaram que, em um futuro próximo, todas as empresas, independentemente do setor, serão empresas de tecnologia. Não sei se é para tanto, mas é certo que eventos como a pandemia de coronavírus aceleraram a &lt;a href=&quot;https://www.gov.br/mcti/pt-br/acompanhe-o-mcti/transformacaodigital&quot;&gt;transformação digital das sociedades&lt;/a&gt; e que a participação &lt;a href=&quot;https://news.un.org/pt/story/2021/02/1742692&quot;&gt;da área no PIB global é cada vez maior&lt;/a&gt;. Há um fluxo considerável de trabalhadores - a &lt;a href=&quot;/blog/2022/sete-anos/&quot;&gt;minha história pessoal&lt;/a&gt; é um exemplo - que estão migrando para o campo da tecnologia.&lt;/p&gt;

&lt;p&gt;Essa injeção de dinheiro e exposição na mídia foi acompanhada também - nem sempre no mesmo passo - pelo interesse dos governos. A expansão do número de vagas e da interiorização de cursos técnicos e superiores na área é um exemplo de política pública que se reflete no crescimento das comunidades de tecnologia. E quando digo expansão, não estou falando apenas do aumento do número de pessoas que participam das comunidades. São novos temas e nichos, como games, participação feminina, tecnologias de assistência e outros. O caldeirão das ideias é enriquecido com a diversidade de pontos de vista e experiências. Essa diversidade proporciona novas aplicações, novos olhares para velhos paradigmas e conexões surpreendentes entre saberes e campos distintos.&lt;/p&gt;

&lt;p&gt;Já tive a oportunidade de participar de comitês e grupos de institutos e órgãos públicos que trabalham com temas relacionados a tecnologia e inclusão. Um diagnóstico claro nesses espaços é visível a olhos nu em eventos: as comunidades de tecnologia são bem mais brancas, masculinas e elitizadas que a sociedade como um todo. E quando você observa o quadro funcional das empresas - em que o corte social e de idade se eleva - a discrepância é ainda mais aguda. As razões dessa desigualdade são complexas e há iniciativas variadas para mudar essa situação, como a criação de vagas afirmativas e o surgimento de comunidades voltadas para grupos específicos, abaixo listo algumas delas. É certo que, à medida que as comunidades de tecnologia se expandem, elas também se tornam mais diversas. Uma transformação que deve ser celebrada, incentivada e defendida por todos que acreditam em um mundo mais inclusivo e não segregado por barreiras como raça, etnia, deficiência e gênero.&lt;/p&gt;

&lt;p&gt;Para que a inclusão não seja apenas um discurso vazio, precisamos agir para melhorar a qualidade das comunidades de tecnologia que participamos. Não basta as pessoas serem bem-vindas, precisamos construir um ambiente acolhedor para todos, inclusive iniciantes. Um espaço acolhedor e aberto ao debate e aprendizado é essencial para a saúde da comunidade. Tomo como exemplo, o incentivo a participação e a atenção dada a quem está começando no chat e eventos do &lt;a href=&quot;https://blog.grupyrn.org/&quot;&gt;GRUPY-RN&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;No livro &lt;a href=&quot;https://www.casadocodigo.com.br/products/livro-universo-programming&quot;&gt;“O universo da programação”&lt;/a&gt;, o William Oliveira dedica um capítulo específico às comunidades de programação, explicando o que são, como aproveitá-las e como construir um ambiente acolhedor e respeitoso. Destaco dois textos pequenos do William sobre o tema, que dão o tom do que ele aborda no livro: &lt;a href=&quot;https://woliveiras.com.br/posts/nao-desanime-comunidades-programming/&quot;&gt;“Não desanime das comunidades de programação”&lt;/a&gt; e &lt;a href=&quot;https://woliveiras.com.br/posts/n%C3%A3o-seja-um-a-babaca-de-comunidade/&quot;&gt;Não seja um(a) babaca de comunidade&lt;/a&gt;. Além dos fatores comportamentais, como a construção de um diálogo aberto e receptivo, é importante também tomar ações práticas para promover a inclusão nas comunidades de tecnologia. Por exemplo, nos eventos do próprio GRUPY-RN, há atenção para o cardápio e o barulho das palmas para atender participantes com necessidades específicas.&lt;/p&gt;

&lt;p&gt;Algumas iniciativas legais relacionadas a diversidade no mundo da tecnologia:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://afropython.org/&quot;&gt;AfroPython&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://perifacode.com/&quot;&gt;PerifaCode&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://womakerscode.org/&quot;&gt;WomakersCode&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://gxgbrasil.github.io/wtmbr/&quot;&gt;Woman Techmakers Brasil&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://live.staticflickr.com/4103/5027240951_2f16abde86_b.jpg&quot; width=&quot;350&quot; alt=&quot;Trabalhadores instalando um piso de paralelepípedos em uma calçada urbana&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Imagem: &lt;a href=&quot;https://openverse.org/image/02315cdd-988a-4086-aae5-73708fee70fe&quot;&gt;Communication - ArtPrize 2010&lt;/a&gt;. Fonte: &lt;a href=&quot;https://openverse.org/&quot;&gt;Open Verse, Creative Commons 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>Associações polimórficas no Ruby on Rails</title>
    <link href="https://0jonjo.github.io/blog/2023/associacoes-polimorficas/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2023/associacoes-polimorficas/</id>
    <published>2023-10-29T00:00:00+00:00</published>
    <updated>2023-10-29T00:00:00+00:00</updated>
    <summary>Uma introdução ao tema</summary>
    <content type="html">&lt;p&gt;Você já ouviu falar de polimorfia? Segundo o &lt;a href=&quot;https://dicionario.priberam.org/polimorfismo&quot;&gt;dicionário&lt;/a&gt;, é “a particularidade daquilo que pode tomar formas muito diversas”. Em poucas palavras, o poder de se transformar e assumir outra figura. Das &lt;a href=&quot;https://pt.wikipedia.org/wiki/Transmorfo#Mitlogia_Greco-romana&quot;&gt;histórias da mitologia grega até a Bela e Fera&lt;/a&gt;, por exemplo, há inúmeros casos de deuses, titãs e animais polimorfos. Tá, mas o que isso tem haver com programação?&lt;/p&gt;

&lt;p&gt;O &lt;a href=&quot;https://pt.wikipedia.org/wiki/Polimorfismo_(ci%C3%AAncia_da_computa%C3%A7%C3%A3o)&quot;&gt;polimorfismo&lt;/a&gt; é um dos pilares da &lt;a href=&quot;https://www.devmedia.com.br/os-4-pilares-da-programming-orientada-a-objetos/9264&quot;&gt;programação orientada à objetos&lt;/a&gt;. É algo basilar para quem programa, mas eu nunca tinha acompanhado a implementação de associações polimórficas para resolver algo em um grande projeto Ruby on Rails. Fui pesquisar mais a fundo quando um colega de trabalho propôs utilizar isso numa feature nova de um produto com milhares de usuários. Entre os materiais encontrados, me deparei com um excelente texto introdutório da &lt;a href=&quot;https://www.linkedin.com/school/campus-code/&quot;&gt;Campus Code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Além de explicar em português a base do tema, lista uma série de links em inglês que aprofundam os conceitos, incluindo um ótimo post &lt;a href=&quot;https://thoughtbot.com/blog/back-to-basics-polymorphism-and-ruby&quot;&gt;na página da Thoughtbot sobre polimorfismo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Com essa bagagem na bolsa, ficou mais fácil realizar testes práticos em um projeto pessoal de estudo - o &lt;a href=&quot;https://github.com/0jonjo/alljobs/&quot;&gt;Alljobs&lt;/a&gt; - e utilizar no trabalho.&lt;/p&gt;

&lt;p&gt;Para quem quiser saber mais sobre associações polimórficas no Ruby on Rails, esse é o link do texto.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://www.campuscode.com.br/conteudos/associacao-polimorfica&quot;&gt;Campus Code - Associação Polimórfica&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://live.staticflickr.com/8241/8544735354_452da43f4e_b.jpg&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Imagens: &lt;a href=&quot;https://openverse.org/image/fb1a28cd-8662-41bd-9650-45a5f0326076&quot;&gt;“Vladimir Kush - Metamorphosis”&lt;/a&gt;. Fonte: &lt;a href=&quot;https://openverse.org/&quot;&gt;Open Verse, Creative Commons 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>Da Alice ao Lego: aprendendo para além da superfície</title>
    <link href="https://0jonjo.github.io/blog/2023/alice-lego/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2023/alice-lego/</id>
    <published>2023-10-01T00:00:00+00:00</published>
    <updated>2023-10-01T00:00:00+00:00</updated>
    <summary>Um convite à curiosidade e experimentação</summary>
    <content type="html">&lt;p&gt;Ao longo das primeiras semanas do curso &lt;a href=&quot;https://www.youtube.com/user/cs50tv&quot;&gt;CS50&lt;/a&gt;, uma expressão repetida diversas vezes pelo professor &lt;a href=&quot;https://www.instagram.com/davidjmalan/&quot;&gt;David Malan&lt;/a&gt; chamou minha atenção: “see under the hood”. A tradução literal - “ver debaixo do capô” - não nos dá pistas seguras sobre o que Malan quer dizer. Ele está falando em aprender investigando como as coisas funcionam. Parece um conselho óbvio, ir além da superfície para compreender melhor algo. No entanto, é quase um crime - em um mundo cada vez mais acelerado - aconselhar alguém a imitar &lt;a href=&quot;https://pt.wikipedia.org/wiki/Alice_no_Pa%C3%ADs_das_Maravilhas&quot;&gt;Alice&lt;/a&gt; e descer em um buraco perseguindo o Coelho Branco.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/0jonjo/0jonjo.github.io/assets/64807181/54a4517d-e65d-4d5b-ba07-2909b169565a&quot; width=&quot;50%&quot; alt=&quot;Módulo lunar da Apollo fotografado no espaço, com uma faixa vermelha, branca e azul ao fundo&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A proposta é justamente essa, levantar as cortinas e entender o que está por trás dos panos. Não se contentar com a informação pronta - x é x, y é y - e fazer a pergunta mais desafiadora das crianças: por quê? A natureza investigadora dos pequenos pode nos servir de inspiração. Por vezes, os adultos se chateiam quando encontram um brinquedo novo sem uma ou duas peças. Mas a criança tem uma dúvida urgente a ser respondida: como é que aquilo funciona? A ideia do professor Malan é responder isso partindo para os conceitos fundamentais do que ele está ensinando e ir combinando-os de modos variados. É claro que este caminho não é útil somente para a Ciência da Computação, mas em qualquer situação que envolva aprendizado.&lt;/p&gt;

&lt;p&gt;A curiosidade move o mundo e Alice surpreende-se a cada página de sua jornada. Ela reflete se deve tomar o líquido da garrafa com rótulo “beba-me” e do bolo no qual está escrito “coma-me”. Sua perspectiva é a da dúvida e da experimentação, algo que lhe rende muitas aventuras e saberes. Esse ponto de partida é profícuo para quem quer aprender, pois permite produzir um alicerce firme para o conhecimento.&lt;/p&gt;

&lt;p&gt;No início do ano passado, comecei a aprender uma língua nova. Minha irmã, que já domina o idioma, comentou algo que seus professores lhe disseram: o alemão é como Lego, as palavras são formadas pelo encaixe de outras. O que é mágico nesse e em outros brinquedos do gênero é justamente essa capacidade de combinação quase infinita de possibilidades, que permite que cada um possa criar suas próprias formas e sentidos. Meses depois, eu estava vendo algo no mapa da Europa no celular quando fui atingido como um raio pela compreensão de porque a Áustria se denomina “Österreich”. “Ost” significa Leste e “Reich” é Reino. Ou seja, a terra dos austríacos é o reino a leste da Alemanha.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/0jonjo/0jonjo.github.io/assets/64807181/2cc9ba4b-6a9b-4477-a359-004b983aeef4&quot; width=&quot;70%&quot; alt=&quot;Grupo de coelhos comendo grama&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Felizmente, não apenas as palavras e as peças de Lego - que nasceram ali perto, &lt;a href=&quot;https://pt.wikipedia.org/wiki/Hist%C3%B3ria_do_Lego&quot;&gt;numa carpintaria na Dinamarca&lt;/a&gt; - têm a característica de produzir novas formas a partir da junção de outras. O modo como entendemos o que nos rodeia é pessoal e apenas parcialmente transferível para outras pessoas. Não é um método eficiente de aprendizado simplesmente copiar o modo como outra pessoa aprende. É interessante, justamente, formar seus próprios blocos de conhecimento com peças que recolhemos em lugares e tempos diferentes. Encaixá-las de vários modos até chegar numa estrutura firme, mas ao mesmo tempo capaz de ser reformulada com novos saberes que vamos adquirindo ao longo do caminho ou reaproveitadas em situações diversas. Quanto mais fizermos isso, melhores seremos nessa reconfiguração de saberes. Quanto mais olharmos por trás dos panos, mais capazes seremos de entender os conceitos-chave e modelá-los de modo criativo. Não sei se David Malan já brincou um dia com peças de Lego ou leu Alice no País das Maravilhas, mas ele tem toda razão em insistir no “see under the hood”.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Imagens: &lt;a href=&quot;https://openverse.org/image/3c272792-878b-48a8-ac85-54a7fe9e0c69&quot;&gt;Alice in Wonderland&lt;/a&gt; e &lt;a href=&quot;https://openverse.org/image/c1321369-9be1-4fc1-862a-e6fc0486a0fc&quot;&gt;Unemployment was high in lego land&lt;/a&gt;. Fonte: &lt;a href=&quot;https://openverse.org/&quot;&gt;Open Verse, Creative Commons 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>Cinco atitudes para o aprendiz</title>
    <link href="https://0jonjo.github.io/blog/2023/aprendiz/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2023/aprendiz/</id>
    <published>2023-08-13T00:00:00+00:00</published>
    <updated>2023-08-13T00:00:00+00:00</updated>
    <summary>O que se precisa para iniciar uma jornada de conhecimento</summary>
    <content type="html">&lt;p&gt;Não é incomum que certo dia, admirando distraidamente o nada com uma xícara de café na mão, nos encontremos refletindo sobre uma ideia, atitude ou informação que teria feito toda a diferença se soubéssemos daquilo antes. Como seria bom entender disso naquela época… Se eu fosse assim há dez anos… Os infinitos “se” que nos assombram de vez em quando ou sempre. Examinar isso através do microscópio da razão evidencia que o que somos e sabemos hoje é resultado justamente dos percalços que passamos, não havia como ter esses saberes e perspetivas sem as vivências que os proporcionaram. É até reconfortante pensar assim, mas não há colete a prova de balas para a vontade repentina de voltar no tempo com aquela atitude ou resposta na ponta da língua. O passado é coisa viva, não dá para simplesmente arquivá-lo numa pasta esquecida do disco de memória. Nenhuma inteligência artificial ou orgânica existe sem processar continuamente seu próprio repositório de informações.&lt;/p&gt;

&lt;p&gt;Eu me peguei pensando nisso quando, numa mesma semana, dois jovens me perguntaram sobre habilidades e saberes necessários para começar uma jornada de conhecimento e trabalho. O primeiro, ex-aluno meu do Ensino Fundamental, vai iniciar o curso de História, o segundo é um estudante de programação querendo dar o primeiros passos no mercado de trabalho. Eu me perguntei o que poderia dizer de útil ao adolescente João Gilberto aprendendo a tocar instrumentos musicais e ao mesmo indivíduo quando ele estava prestes a entrar na universidade e primeiro emprego. Também ao professor pós-graduado fazendo suas primeiras linhas de código. Juntei isso a experiência de ter aprendido e ensinado sobre os mais variados temas e sintetizei alguns pontos:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Ter curiosidade genuína&lt;/strong&gt;: aprender é um verdadeiro martírio se não nos interessamos pelo tema ou não vemos sequer sentido em estar estudando aquilo. É claro que nem todo assunto é a grande paixão que nos entusiasma profundamente, mas os tijolos do desinteresse e o cimento da preguiça formam, na maior parte das vezes, um muro intransponível.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Ser mentorável&lt;/strong&gt;: estar aberto a aprender com diversas pessoas e em diversos contextos. Muito além da situação formal de sala de aula, a existência é rica em situações em que podemos aprender algo. Estar aberto a isso, ouvidos e ego preparados, é um pequeno preço para o ganho que se pode obter assim.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Saber perguntar&lt;/strong&gt;: as perguntas movem a humanidade. É uma frase gasta e verdadeira, como mostra o sucesso dos buscadores da internet - o maior deles processa cerca de &lt;a href=&quot;https://www.websiterating.com/pt/research/google-search-engine-statistics/&quot;&gt;3.5 bilhões de perguntas diariamente&lt;/a&gt;. Saber perguntar é contextualizar a questão, delimitar o escopo do que se quer saber e considerar efetivamente as respostas obtidas antes de lançar uma nova pergunta. Algo que serve para questionar um colega de turma, um fórum ou mesmo uma &lt;a href=&quot;https://canaltech.com.br/inteligencia-artificial/o-que-e-ia-generativa/&quot;&gt;inteligência artificial gerativa&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Aprender a aprender&lt;/strong&gt;: não há uma fórmula pronta através da qual todas as pessoas aprendem efetivamente um determinado assunto. O que existem são estratégias diversas para o aprendizado, mais ou menos efetivas para determinado contexto. Em outro post &lt;a href=&quot;/blog/2023/400-dias/&quot;&gt;explorei justamente esse aspecto&lt;/a&gt;, desde a escolha do material mais adequado a entender o melhor modo como aprendemos. Vale pensar nas experiências anteriores, quando foi que você conseguiu aprender com sucesso e quando deu errado? E o mais importante, por quê?&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Praticar&lt;/strong&gt;: esses dias conversando sobre a importância da prática para se aprender, eu lembrei uma frase que acredito ser de origem holandesa: “nunca existiu, nem nunca existirá um bom livro sobre como aprender a andar de bicicleta”. A perspectiva não é desmerecer os livros - quem me conhece sabe do meu amor por eles -, e sim sublinhar a importância de se praticar constantemente. A teoria é letra morta se não fundamenta a ação, e bons músicos me fizeram perceber que para se aprender, o melhor modo é começar calmamente com exercícios simples e &lt;a href=&quot;https://www.youtube.com/watch?v=uNuXYT5xPbo&quot;&gt;ir aumentando a velocidade e complexidade gradualmente&lt;/a&gt;. Há um ciclo virtuoso entre se deparar com um conhecimento (seja lendo, assistindo, ouvindo, etc.), tentar fazer (exercício, projeto pessoal, conversa e afins) e repetir esse processo mudando as estratégias de cada passo. Já escrevi um pouco mais sobre esse elo entre aprendizado e prática no texto &lt;a href=&quot;/blog/2023/oleiros/&quot;&gt;Oleiros do deconhecido&lt;/a&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/0jonjo/0jonjo.github.io/assets/64807181/f45b9ebc-0936-4796-9e23-a3ea2af5c97f&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Imagem: “High five” de Martin Fisch. Fonte: &lt;a href=&quot;https://openverse.org/image/0d46348d-efb5-43ae-9f0d-5206a8741299&quot;&gt;Open Verse, Creative Commons 2.0&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
  </entry>
  
  <entry>
    <title>Concluindo a jornada do CS50</title>
    <link href="https://0jonjo.github.io/blog/2023/concluindo-cs50/" rel="alternate" type="text/html" />
    <id>https://0jonjo.github.io/blog/2023/concluindo-cs50/</id>
    <published>2023-07-29T00:00:00+00:00</published>
    <updated>2023-07-29T00:00:00+00:00</updated>
    <summary>Último exercício da famosa disciplina de Harvard</summary>
    <content type="html">&lt;p&gt;Dando forma ao último exercício da disciplina &lt;a href=&quot;https://cs50.harvard.edu/college/2023/spring/&quot;&gt;CS50&lt;/a&gt;, a famosa disciplina Ciência da Computação da universidade de Harvard. Ele é disponibilizado gratuitamente pela instituição com todos os vídeos, exercícios, etc. a partir de uma didática primorosa e conteúdos excelentes.&lt;/p&gt;

&lt;p&gt;Na imagem uma o print da tela aplicação web em Flask (nada como o bom e velho Python) de compra e venda de ações nas bolsas de valores dos Estados Unidos como cotações, carteira de ações, histórico de transações e outras funcionalidades. Dinheiro fictício, claro, mas dados reais.&lt;/p&gt;

&lt;p&gt;Mais para frente quero escrever uma resenha aqui no blog sobre ele, vale muito a pena fazer o curso!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/0jonjo/0jonjo.github.io/assets/64807181/35ae6c38-2855-44c4-9c40-bdc888178909&quot; alt=&quot;image&quot; /&gt;&lt;/p&gt;
</content>
  </entry>
  
</feed>

