<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Eduardo Figueiredo Gonçalves</title>
    <description>The latest articles on Forem by Eduardo Figueiredo Gonçalves (@eduardofg87).</description>
    <link>https://forem.com/eduardofg87</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F175641%2Fd7c75452-0bb6-4273-8c99-4d0f12f282c0.png</url>
      <title>Forem: Eduardo Figueiredo Gonçalves</title>
      <link>https://forem.com/eduardofg87</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/eduardofg87"/>
    <language>en</language>
    <item>
      <title>O impacto da IA no profissional de TI</title>
      <dc:creator>Eduardo Figueiredo Gonçalves</dc:creator>
      <pubDate>Tue, 23 Jul 2024 09:47:52 +0000</pubDate>
      <link>https://forem.com/eduardofg87/o-impacto-da-ia-no-profissinal-de-ti-5908</link>
      <guid>https://forem.com/eduardofg87/o-impacto-da-ia-no-profissinal-de-ti-5908</guid>
      <description>&lt;p&gt;No ano de 2024, o papel do profissional de TI está se transformando rapidamente em meio à crescente confusão e entusiasmo em torno da Inteligência Artificial (IA). A tecnologia de IA, com seu vasto potencial para revolucionar setores inteiros, apresenta tanto oportunidades quanto desafios únicos. Em um cenário onde a compreensão exata do que a constitui ainda é nebulosa para muitos, nós, como profissionais de TI, assumimos uma importância crucial na navegação e clarificação deste campo em constante evolução.&lt;/p&gt;

&lt;p&gt;É essencial reconhecer que a inteligência artificial não é um conceito único. Envolve uma gama de tecnologias, desde aprendizado de máquina e processamento de linguagem natural até redes neurais profundas. Muitos ainda associam IA exclusivamente a robôs ou sistemas altamente avançados que imitam a cognição humana, quando, na realidade, aplicações práticas como chatbots, sistemas de recomendação e automação de processos comerciais também são formas de inteligência artificial. Precisamos não só dominar essas tecnologias, mas também educar e orientar stakeholders sobre as capacidades e limitações reais das soluções de IA.&lt;/p&gt;

&lt;p&gt;Além disso, a confusão sobre a inteligência artificial pode gerar expectativas irrealistas. Empresas frequentemente esperam soluções milagrosas que resolvam todos os problemas instantaneamente. Devemos atuar como mediadores, gerenciando essas expectativas através de uma comunicação clara e baseada em dados. Isso inclui explicar que, embora a inteligência artificial possa aumentar significativamente a eficiência e oferecer insights valiosos, ela também requer uma implementação cuidadosa, treinamento contínuo e uma infraestrutura adequada. Sem uma base sólida e um entendimento realista, projetos de IA estão destinados ao fracasso, gerando frustração e desperdício de recursos.&lt;/p&gt;

&lt;p&gt;A ética também se tornou um aspecto central no debate sobre a inteligência artificial. Com preocupações crescentes sobre privacidade, viés algorítmico e impacto social, os profissionais de TI devem assumir um papel de liderança na promoção de práticas éticas e responsáveis. Isso envolve garantir que os sistemas de IA sejam desenvolvidos e utilizados de maneira transparente, justa e responsável. Ao fazer isso, não apenas protegem os usuários e a sociedade em geral, mas também fortalecem a confiança nas tecnologias emergentes.&lt;/p&gt;

&lt;p&gt;O profissional de TI de 2024 precisa ser mais do que um técnico; deve ser um estrategista, um educador e um defensor da ética. A habilidade de desmistificar a inteligência artificial e alinhá-la com os objetivos empresariais e sociais será uma competência altamente valorizada. Aqueles que conseguirem navegar essa complexidade com habilidade e integridade estarão na vanguarda da próxima revolução tecnológica.&lt;/p&gt;

&lt;p&gt;Em meio à confusão sobre o que é IA, o profissional de TI desempenha um papel indispensável. Cabe a esses profissionais a tarefa de clarificar, gerenciar expectativas, garantir a implementação ética e, acima de tudo, educar. Seu papel é central para garantir que a tecnologia de IA realize seu potencial transformador de forma benéfica e sustentável. À medida que avançamos, o sucesso da integração da inteligência artificial dependerá diretamente da competência e da visão dos profissionais de TI.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>TDD: Iniciando com TDD no PHP</title>
      <dc:creator>Eduardo Figueiredo Gonçalves</dc:creator>
      <pubDate>Sat, 23 May 2020 02:53:27 +0000</pubDate>
      <link>https://forem.com/phpbrasil/tdd-iniciando-com-tdd-no-php-47nb</link>
      <guid>https://forem.com/phpbrasil/tdd-iniciando-com-tdd-no-php-47nb</guid>
      <description>&lt;h1&gt;
  
  
  TDD
&lt;/h1&gt;

&lt;p&gt;Estava estudando um pouco sobre TDD e vi o &lt;a href="https://code.tutsplus.com/tutorials/lets-tdd-a-simple-app-in-php--net-26186" rel="noopener noreferrer"&gt;artigo&lt;/a&gt; que me fez pensar em algumas coisas interessantes e resolvi escrever esse post.&lt;/p&gt;

&lt;p&gt;Vou fazer algumas colocações sobre o material e mostrar alguns exemplos dele, recomendo darem uma lida no texto antes que eu curti demais. Durante sprints de desenvolvimento em SCRUM há situações que podem ser resumidas à imagem:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2AM255AzrVeQb3FCJz21eATA.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F800%2F1%2AM255AzrVeQb3FCJz21eATA.jpeg" alt="Persista!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Há momentos do dia em que estamos com muito gás e outros que a nossa produtividade se esgota. Desde sistemas de pequena complexidade até em sistemas mais complexos há alguns CRUDs que se repetem como por exemplo CRUD de Autenticação e CRUD de ACL (Controle de Acesso), será que quando formos unir todas os módulos tudo funcionará conforme esperado? Acredito que a grande maioria saiba que as chances de erros inesperados é enorme e para contornarmos esse problema falaremos sobre a técnica de TDD que é uma grande aliada do programador. As regras de TDD são: escreva testes, escreva código, refatore.&lt;/p&gt;

&lt;p&gt;TDD do inglês Test Driven Development ou em nossa língua nativa Desenvolvimento Guiado por Testes basicamente consiste em seguir um simples algoritmo de 3 passos para o desenvolvimento de software.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Você não tem permissão de escrever um código de produção se não tiver escrito um teste antes.&lt;/li&gt;
&lt;li&gt;Escreva um teste em que o seu código de produção falhe.&lt;/li&gt;
&lt;li&gt;Escreva o código de produção que faça seu teste que falhou no passo anterior passar.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Os passos devem ser repetidos até termos um código que cubra o máximo de possibilidade de falhas possível.&lt;/p&gt;

&lt;p&gt;Basicamente TDD é uma técnica de desenvolvimento e design de software em que devemos escrever testes antes de código de produção. Geralmente times ágeis adotam essa prática e é uma das principais ferramentas no desenvolvimento de software ágil.&lt;/p&gt;

&lt;p&gt;Segundo a Wikipedia:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Test Driven Development (TDD) ou em português Desenvolvimento guiado por testes é uma técnica de desenvolvimento de software que se relaciona com o conceito de verificação e validação e se baseia em um ciclo curto de repetições: Primeiramente o desenvolvedor escreve um caso de teste automatizado que define uma melhoria desejada ou uma nova funcionalidade.&lt;/p&gt;

&lt;p&gt;Desenvolvimento dirigido por testes requer dos desenvolvedores criar testes de unidade automatizados que definam requisitos em código antes de escrever o código da aplicação. Os testes contém asserções que podem ser verdadeiras ou falsas. Após as mesmas serem consideradas verdadeiras após sua execução, os testes confirmam o comportamento correto, permitindo os desenvolvedores evoluir e refatorar o código.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fonte: &lt;a href="https://pt.wikipedia.org/wiki/Test_Driven_Development" rel="noopener noreferrer"&gt;https://pt.wikipedia.org/wiki/Test_Driven_Development&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  PHP Unit
&lt;/h2&gt;

&lt;p&gt;PHP Unit é uma ferramenta que permite desenvolvedores PHP a escreverem testes unitários e praticarem o TDD. PHP Unit é um framework completo criado por &lt;a href="https://github.com/sebastianbergmann" rel="noopener noreferrer"&gt;Sebastian Bergmann&lt;/a&gt; com suporte à tecnica de mocking onde criamos objetos falsos que simulam comportamentos de objetos reais.&lt;/p&gt;

&lt;p&gt;Não entrarei nos detalhes da instalação desta ferramenta pois a própria documentação é bem rica e inclusive traduzida em português, o composer novamente é uma mão na roda para adicionar o PHP Unit ao nosso projeto.&lt;/p&gt;

&lt;p&gt;Fonte: &lt;a href="https://phpunit.de/" rel="noopener noreferrer"&gt;https://phpunit.de/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  O que TDD não é:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Apenas criar testes unitários;&lt;/li&gt;
&lt;li&gt;É ter testes unitários;&lt;/li&gt;
&lt;li&gt;Perda de tempo;&lt;/li&gt;
&lt;li&gt;TDD = software sem bug.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  O que ganho implementando TDD?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Menor custo para manutenção do software;&lt;/li&gt;
&lt;li&gt;Melhorar nas estimativas;&lt;/li&gt;
&lt;li&gt;Legibilidade do código;&lt;/li&gt;
&lt;li&gt;Design guiado por Testes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deixo um &lt;a href="https://github.com/eduardofg87/lets-tdd-a-simple-app" rel="noopener noreferrer"&gt;repositório&lt;/a&gt; para quem está iniciando com TDD no PHP.&lt;/p&gt;

&lt;p&gt;A estrutura do projeto foi criada utilizando o comando &lt;code&gt;composer init&lt;/code&gt; que facilita para seguirmos o PSR-4, já os nomes de variáveis e o estilo de codificação procurei seguei PSR-1 e PSR-2, abaixo temos a estrutura do projeto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- app
  - Wrapper.php
- tests/
  - FirstTest.php
- .gitignore
- LICENSE
- README.MD
- composer.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No arquivo FirstTest.php temos a implementação dos testes, eles foram escritos seguindo os passos de 1 a 3 e assim que foi escrito cada método de teste logo em seguida foi escrito cada método de produção:&lt;/p&gt;

&lt;h3&gt;
  
  
  Classe de Testes: FirstTest.php
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEYq48ywVcAAjjuF%3Fformat%3Djpg%26name%3D4096x4096" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEYq48ywVcAAjjuF%3Fformat%3Djpg%26name%3D4096x4096" alt="Testes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Código de produção: Wrapper.php
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEYq27ThUYAANDO6%3Fformat%3Djpg%26name%3D4096x4096" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FEYq27ThUYAANDO6%3Fformat%3Djpg%26name%3D4096x4096" alt="Wrapper"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Os testes foram criados na classe WrapperTest e possui 8 métodos que são:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;testItShouldWrapAnEmptyString&lt;/li&gt;
&lt;li&gt;testDoesNotWrapAShorterThanMaxCharsWord&lt;/li&gt;
&lt;li&gt;testItWrapsAWordSeveralTimesIfItsTooLong&lt;/li&gt;
&lt;li&gt;testItWrapsTwoWordsWhenSpaceAtTheEndOfLine&lt;/li&gt;
&lt;li&gt;testItWrapsTwoWordsWhenLineEndIsAfterFirstWord&lt;/li&gt;
&lt;li&gt;testItWraps3WordsOn2Lines&lt;/li&gt;
&lt;li&gt;testItWraps2WordsOn3Lines&lt;/li&gt;
&lt;li&gt;testItWraps2WordsAtBoundry&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;O projeto se resume em uma classe de produção chamada Wrapper (Embalagem) e seu único método wrap que significa embrulhar/envolver recebe 2 argumentos &lt;code&gt;$text&lt;/code&gt; e &lt;code&gt;$lineLength&lt;/code&gt;, sendo o primeiro o texto que será envolvido e o segundo o tamanho da linha. O código de produção foi refatorado e a última versão do método wrap é capaz de passar todos os testes. Deixei comentado as versões anteriores do método wrap que passam os testes.&lt;/p&gt;

&lt;p&gt;Chegamos ao fim, espero ter contribuído com o aprendizado sobre TDD!&lt;/p&gt;

&lt;p&gt;p.s.: Agradecimentos especiais ao &lt;a href="https://github.com/wilcorrea" rel="noopener noreferrer"&gt;Wil Correa&lt;/a&gt; pela revisão.&lt;/p&gt;

</description>
      <category>php</category>
      <category>tdd</category>
      <category>phpunit</category>
      <category>psr</category>
    </item>
  </channel>
</rss>
