<?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>DEV Community: Victor Nassif</title>
    <description>The latest articles on DEV Community by Victor Nassif (@victornassif).</description>
    <link>https://dev.to/victornassif</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%2F263054%2F892bb838-7b5b-4ce6-a2fd-df9e8d8e0d5e.jpeg</url>
      <title>DEV Community: Victor Nassif</title>
      <link>https://dev.to/victornassif</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/victornassif"/>
    <language>en</language>
    <item>
      <title>Como um desenvolvedor generalista pode fazer o uso de IAs na resolução de problemas?</title>
      <dc:creator>Victor Nassif</dc:creator>
      <pubDate>Wed, 27 Mar 2024 19:30:48 +0000</pubDate>
      <link>https://dev.to/victornassif/como-um-desenvolvedor-generalista-pode-fazer-o-uso-de-ias-na-resolucao-de-problemas-19ga</link>
      <guid>https://dev.to/victornassif/como-um-desenvolvedor-generalista-pode-fazer-o-uso-de-ias-na-resolucao-de-problemas-19ga</guid>
      <description>&lt;p&gt;&lt;em&gt;This article was written in portuguese. The english version will become soon and it will be linked here.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sempre fui um entusiasta a respeito de novas tecnologias voltadas para desenvolvimento de software e nos últimos anos com a demanda de IA crescendo cada vez mais, me sinto muitas vezes atrás do mercado.&lt;/p&gt;

&lt;p&gt;Como um bom brasileiro, iniciei a carreira profissional muito cedo, e foquei em desenvolver habilidades que pudessem me manter empregado, ou que ajudassem no meu crescimento em determinadas empresas.&lt;/p&gt;

&lt;p&gt;Quando fazemos isso, nos desviamos do caminho acadêmico. Infelizmente, de forma muito triste, atualmente considero a academia um espaço privilegiado, ao menos no cenário brasileiro. Mas isso é uma discussão para outro momento.&lt;/p&gt;

&lt;p&gt;Nos últimos anos comecei a acompanhar um pouco mais as inovações científicas (🎈), pois, afinal, a ciência é o &lt;strong&gt;cerne&lt;/strong&gt; de tudo que é novo. Dificilmente o novo vem a partir de demandas das empresas. As descobertas são feitas na academia, e levadas para o campo profissional posteriormente.&lt;/p&gt;

&lt;p&gt;Praticamente toda inovação que via no campo de TI, estava relacionada a IAs e novos algoritmos. Acompanhando esse universo,  sentia uma estranha angustia, daquelas sem nome, mas que estava sempre comigo. Creio que hoje consigo entendê-la um pouco melhor.&lt;/p&gt;

&lt;p&gt;A sensação é de que estava atrás dos demais. Não entendia profundamente algoritmos, não entendia os detalhes das IAs. Não entendia como eu poderia incluir aquilo no meu dia-a-dia de uma forma produtiva - além das ferramentas.&lt;/p&gt;

&lt;p&gt;Mesmo com essa sensação, sempre me considerei um entusiasta de inovação, então aí estava a contradição que gerava, posteriormente, frustração.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Como alguém pode se considerar entusiasta de algo que não entende?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No livro “&lt;em&gt;Por que generalistas vencem num mundo de especialistas&lt;/em&gt;” por David Epstein, o autor defende dentre diversos assuntos, que os profissionais ditos “generalistas” tem o seu valor, e que várias pessoas que são consideradas “especialistas de sucesso”, tiveram, na verdade, muitas falhas em áreas diferentes até conseguir encontrar algo que realmente triunfassem. Esportistas, empresários, intelectuais, e diversas outras áreas são mencionadas.&lt;br&gt;
&lt;em&gt;-&lt;em&gt;Obrigado ao meu camarada Prof. André Câmara pela indicação. Não tenho palavras pra descrever o quanto foi assertivo quando disse que eu me identificaria com o livro.&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Ao mesmo tempo que em que não entendia as tecnologias do "hype", sempre me considerei um ótimo solucionador de problemas. Mas me via limitado a utilizar apenas as tecnologias em que tinha proeficiencia, ou que estava seguro o suficiente para usar a este favor. Lendo o livro, então, finalmente entendi uma questão chave a respeito de onde me encaixo como profissional. Tive pela primeira vez contato com o termo “generalista” e me identifiquei como nunca antes.&lt;br&gt;&lt;br&gt;
Durante a leitura entendi que não preciso ser um especialista de IA e de algoritmos para poder resolver problemas utilizando estas ferramentas. &lt;/p&gt;

&lt;p&gt;Inclusive, é até melhor que eu não seja um especialista. Em geral, somos recompensados por resolver problemas. Mas quando nossa carreira se afunila como um especialista, estamos limitados a resolver problemas do nosso nicho específico. &lt;strong&gt;Obviamente&lt;/strong&gt; que isso tem o seu valor, e sempre haverá demanda para tal. Mas aqui estou falando sobre a sensação do nosso escopo estar limitada, e não necessariamente fazendo juízo de valor se algo é melhor ou pior &lt;del&gt;(ok, haters?)&lt;/del&gt;. &lt;/p&gt;

&lt;p&gt;Em cenários ditos exploratórios, não temos problemas bem definidos (que para estes, sim, precisamos de especialistas). Em geral, temos diversos problemas “desconhecidos conhecidos” - desconhecidos para mim, conhecidos para alguém que entende daquele determinado contexto - E que segundo a &lt;em&gt;Matriz de decisão Cynefin&lt;/em&gt;, a melhor forma de trata-los, é buscando soluções já existentes no mercado. Seja &lt;strong&gt;com&lt;/strong&gt; um especialista ou seja utilizando alguma ferramenta criada &lt;strong&gt;por&lt;/strong&gt; especialistas, vide LLMs, serviços gerenciados, etc. Portanto, profissionais que conseguem ter visões mais abrangentes do todo, podem ter mais sucesso do que profissionais nichados, neste tipo de cenário. &lt;/p&gt;

&lt;p&gt;Ao mesmo tempo que, &lt;em&gt;ao menos na minha bolha&lt;/em&gt;, devido ao aumento da utilização de modelos LLMs, está se popularizando a ideia de utilizar “caixas pretas” de processamento sem necessariamente saber como aqueles algoritmos atuam. Afinal, você sabe como, em detalhes, o GPT, ou o Copilot está tratando seu input? Pois bem, eu também não. - E o meu ponto é: e nem precisamos. Vamos deixar isso para os especialistas.&lt;/p&gt;

&lt;p&gt;Para deixar claro, meu ponto não é que devemos nos abster de analisar o que estamos utilizando e colocando em produção. Precisamos estar ciente dos riscos e eles &lt;strong&gt;precisam&lt;/strong&gt; ser gerenciados. Meu ponto é que, como um generalista, você pode aplicar ferramentas e algoritmos para resolver problemas do dia-a-dia, sem que necessariamente saiba &lt;strong&gt;com profundidade&lt;/strong&gt; como algo está operando por baixo dos panos. Você só precisa se preocupar em como aplicar aquele determinado processamento, e, confie em mim, temos algoritmos o suficiente provenientes de iniciativas Open Source prontos para serem utilizados. &lt;/p&gt;

&lt;p&gt;Imagine o cenário que temos alguma demanda para previsão (forecasting) de algum determinado dado. Você precisa &lt;strong&gt;criar&lt;/strong&gt; um algoritmo de forecasting? - Não. Provavelmente, já existe um algoritmo para isso. Você provavelmente não precisa saber como fazê-lo. Você precisa, sim, entender como aplicá-lo, e isso também tem sua curva, que não deverá ser menosprezada. Mas será menor do que a especialização para criação dessa tecnologia.&lt;/p&gt;

&lt;p&gt;Atualmente estou buscando novos problemas que podem ser resolvidos e realizando testes com algoritmos. Sinceramente, está me dando bastante gás para continuar. Esse é o meu objetivo neste singelo texto: Te incentivar a pesquisar, a ficar atento a novas publicações, a ler newsletters, e a não se limitar a testar com tecnologias de ponta. &lt;/p&gt;

&lt;p&gt;Espero que isso também te ajude na busca de novos problemas para resolver.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Por que seu time de desenvolvimento não é produtivo?</title>
      <dc:creator>Victor Nassif</dc:creator>
      <pubDate>Sun, 06 Aug 2023 16:37:22 +0000</pubDate>
      <link>https://dev.to/victornassif/por-que-seu-time-de-desenvolvimento-nao-e-produtivo-3m18</link>
      <guid>https://dev.to/victornassif/por-que-seu-time-de-desenvolvimento-nao-e-produtivo-3m18</guid>
      <description>&lt;p&gt;Este artigo é destinado as pessoas que são responsáveis por times de desenvolvimento, que podem ser compostos por uma ou mais pessoas. Seja você líder de si mesmo &lt;em&gt;(eu-quipe)&lt;/em&gt;, ou de um grupo.&lt;/p&gt;

&lt;p&gt;Nele, vou apresentar minhas perspectivas e referências. As quais busco perseguir sempre como fundamentos. &lt;br&gt;
Boa leitura!&lt;/p&gt;

&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;O que é produtividade? Segundo o dicionário, se define como: “&lt;em&gt;eficiência na produção de algo&lt;/em&gt;”. &lt;/p&gt;

&lt;p&gt;No contexto de engenharia de software, estamos falando (quase sempre) sobre a criação e manutenção de um produto ou serviço. &lt;br&gt;
Podemos pensar no processo de desenvolvimento de software como uma esteira de produção para estes resultados. &lt;/p&gt;

&lt;p&gt;Estamos acostumados a considerar apenas trabalhos físicos como linha de produção, geralmente associamos apenas fábricas ou grandes montadoras a este processo. Mas a verdade é que podemos (e devemos) entender o ciclo de desenvolvimento de software da mesma forma. &lt;/p&gt;

&lt;p&gt;Nos outros processos mencionados, a eficiência é um valor enraizado. Agora, será que no desenvolvimento de software, analisamos a eficiência da nossa esteira de produção da melhor forma? &lt;/p&gt;

&lt;p&gt;Com isso em mente, trago alguns pontos que, de forma comprovada, aumentam a eficiência de um time de desenvolvimento.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9vr74m1kbsyacgwgy0bh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9vr74m1kbsyacgwgy0bh.jpg" alt="Michael Scott segurando uma caneca que diz " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementar um padrão de tecnologias a nível organizacional
&lt;/h2&gt;

&lt;p&gt;Isto é, igualar o máximo possível nos diferentes produtos e serviços as linguagens utilizadas, os ambientes de clouds (deploys, pipelines, bancos de dados), arquiteturas e design patterns. &lt;br&gt;
&lt;em&gt;De acordo com a unidade de negócio, podemos (e vamos!) precisar de tecnologias específicas, e não teremos como fugir de processos únicos, mas estes devem ser tratados como exceções.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Vantagens de utilizar os mesmos padrões de tecnologia:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Reuso de códigos&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Uma boa prática comumente utilizada em C#, é a criação de pacotes NuGet. São “pacotes” úteis que podem ser utilizados publicamente ou privados. De forma análoga, temos os pacotes NPM em NodeJS, que também podem ser distribuídos de forma privada para uma organização.&lt;/p&gt;

&lt;p&gt;Indo além, podemos pensar em módulos que podem ser compartilhados entre aplicações, por exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API Gateway de pagamentos&lt;/li&gt;
&lt;li&gt;Módulo de cadastros&lt;/li&gt;
&lt;li&gt;Configuração de embed de dashboards PowerBI&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Manobras de alocação de pessoas&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;De acordo com o objetivo estratégico da empresa, é comum termos que alocar as pessoas em diferentes squads por períodos limitados. A tecnologia, caso destoe demais entre squads, pode ser um limitador para este processo.&lt;br&gt;
Este limite pode ser total ou parcial - no caso parcial, seria a dificuldade de &lt;em&gt;onboarding&lt;/em&gt; da pessoa no squad. Desde a configuração inicial do ambiente, do próprio processo de desenvolvimento até o entendimento das regras de negócio. No limite total, impossibilitaria a alocação temporária.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implementar boas práticas de desenvolvimento
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Guia de boas práticas de desenvolvimento organizacional&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Além dos padrões de tecnologia, podemos pensar em padrões de boas práticas de construção de código a nível organizacional. Algumas delas:&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Proibir mais que 3 níveis de código aninhados&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Veja este vídeo BRILHANTE do canal CodeAesthetics no youtube (em inglês): &lt;a href="https://www.youtube.com/watch?v=CFRhGnuXG-4" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=CFRhGnuXG-4&lt;/a&gt; &lt;br&gt;
O vídeo entrega exemplos de códigos mal escritos e o processo de &lt;em&gt;refactoring&lt;/em&gt; deles. Melhorando sua leitura e manutenibilidade. &lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Nomes claros em variáveis e funções&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Pode parecer irrelevante, mas dar nomes compridos e óbvios as variáveis pode facilitar o processo de entendimento do código.&lt;br&gt;
Este comportamento vem desde quando a programação servia apenas para fórmulas matemáticas, que buscavam reduzir o máximo possível as variáveis até que chegassem em apenas uma letra ou símbolo. &lt;br&gt;
&lt;em&gt;Afinal, x e y não significam nada além de eixos rs.&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Incentivo de pair programming
&lt;/h4&gt;

&lt;p&gt;A prática de pair programming, além de contribuir para que os desenvolvedores discutam e cheguem a conclusões juntos, aumentando a estima do time, &lt;strong&gt;comprovadamente&lt;/strong&gt;² também aumenta a eficiência em até 15% do processo de desenvolvimento. Na prática, não temos um volume maior de entregas relevante, mas temos uma diminuição de bugs. Visto que os desenvolvedores vão passar menos tempo construindo código e mais tempo discutindo previamente sobre a determinada tarefa. &lt;/p&gt;

&lt;h2&gt;
  
  
  Entender quais são seus agressores de produtividade
&lt;/h2&gt;

&lt;p&gt;Entender o cenário que estamos introduzidos pode ser um desafio, principalmente em organizações onde as responsabilidades não estão muito bem definidas. É nosso papel blindar o time de desenvolvimento deste tipo de desalinhamento, e atuar com visão estratégica analisando o contexto.&lt;/p&gt;

&lt;p&gt;Existe um princípio que diz que 80% dos problemas vem de 20% das causas, o &lt;strong&gt;princípio de Pareto&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffkrbcyq51rom2amamgdy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffkrbcyq51rom2amamgdy.png" alt="Princípio de Pareto" width="800" height="825"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nos outros contextos de processos de produção, a análise através deste princípio é muito comum. Basicamente, devemos focar o esforço nos 20% de causas, e ignorar os 80% restantes.&lt;/p&gt;

&lt;p&gt;Parte do nosso papel como gestores, é o &lt;strong&gt;entendimento dos nossos agressores de produtividade&lt;/strong&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Quais são os processos mais onerosos ao seu processo?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A partir dessa análise de onde o time perde mais tempo, podemos utilizar o princípio para mitigar riscos.&lt;/p&gt;

&lt;p&gt;Alguns agressores muito comuns, podem ser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Processo de Debug&lt;/li&gt;
&lt;li&gt;Configuração de ambiente de testes &lt;/li&gt;
&lt;li&gt;Conflitos de Merges&lt;/li&gt;
&lt;li&gt;Má especificação de requisitos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para cada agressor, podemos ter diferentes abordagens pensando na sua mitigação.&lt;/p&gt;

&lt;p&gt;Por exemplo, para o processo de merge, você sabia que existem abordagens de desenvolvimento que buscam diminuir o máximo possível a quantidade de merges? O &lt;strong&gt;trunk based development&lt;/strong&gt; ou &lt;strong&gt;TBD&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Empatia como ferramenta
&lt;/h4&gt;

&lt;p&gt;É importante ressaltar que faz parte do seu papel como líder construir um ambiente de contribuição entre o time.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;empatia é uma ferramenta&lt;/strong&gt; muito importante, e deve ser ativamente estimulada no time. &lt;br&gt;
Entrevistas, feedbacks 360° e exercitar a escuta ativa, são práticas que podem auxiliar no entendimento das pessoas que compõem o time, e consequentemente, os principais agressores de produtividade que eles sentem.&lt;/p&gt;

&lt;h2&gt;
  
  
  O problema é eficiência ou visibilidade?
&lt;/h2&gt;

&lt;p&gt;Você está acompanhando o time diariamente, todos entregando. Mesmo assim, seus gestores e diretores continuam com a impressão que seu time é ineficiente e não traz resultados. Os esforços nunca são o suficiente e a conta no fim do mês não fecha. &lt;strong&gt;E agora?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Existe um ditado, que infelizmente não consegui encontrar o autor, mas que nos dá uma luz para este cenário:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“- Mais importante que fazer certo o projeto, é fazer o projeto certo” &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Entender quais são as entregas estratégicas para a organização é seu papel.    A identificação de stakeholders e a gestão das prioridades precisa ser um esforço ativo. Portanto, não basta o time entregar, o time precisa &lt;strong&gt;entregar valor&lt;/strong&gt;. Se o time fizer 10 entregas não prioritárias com qualidade, mas errar na entrega mais importante, qual você acha que será o resultado disso? A percepção de ineficácia, mesmo que pela média o time seja eficiente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Caro colega gestor, não existe bala de prata. Ferramentas de produtividade ou IAs podem ajudar, mas nos lembremos do princípio de Pareto. O que funciona mesmo é: &lt;strong&gt;entender as pessoas e suas necessidades&lt;/strong&gt;.&lt;br&gt;
Nosso papel é ser o filtro e a direção do time. Nosso resultado não depende apenas de nós, e este é o nosso desafio. Não podemos nos colocar em papel de herói, não vamos conseguir entregar tudo sozinhos. É importante ressaltar que caso você precise ser um, isto não é - &lt;em&gt;e não será&lt;/em&gt; - sustentável por muito tempo.&lt;/p&gt;

&lt;p&gt;Referências:&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Robert C. Martin. 2008. Clean Code: A Handbook of Agile Software Craftsmanship (1st. ed.). Prentice Hall PTR, USA.&lt;/li&gt;
&lt;li&gt;Cockburn, A., &amp;amp; Williams, L. (2000). The costs and benefits of pair programming. Extreme programming examined, 8, 223-247.&lt;/li&gt;
&lt;li&gt;CodeAesthetics - Why You Shouldn't Nest Your Code&lt;/li&gt;
&lt;li&gt;Sommerville, Ian. Engenharia de Software, ED. Pearson, 9a. ed, São Paulo, 2011&lt;/li&gt;
&lt;li&gt;&lt;a href="https://caetreinamentos.com.br/blog/ferramentas/diagrama-de-pareto-acao-com-maior-beneficio/" rel="noopener noreferrer"&gt;https://caetreinamentos.com.br/blog/ferramentas/diagrama-de-pareto-acao-com-maior-beneficio/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://trunkbaseddevelopment.com/" rel="noopener noreferrer"&gt;https://trunkbaseddevelopment.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

</description>
      <category>productivity</category>
      <category>leadership</category>
      <category>programming</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
