Introdução aos conceitos básicos da Computação Quântica

Vamos desmistificar os conceitos básicos e estruturas de dados da computação quântica, de forma bem didática e acessível para iniciantes.

Conceitos básicos

  • Bit vs. Qubit:
    • Bit (Computação Clássica): A menor unidade de informação. Pode ser 0 ou 1. Pense em uma chave de luz: ligada (1) ou desligada (0).
    • Qubit (Computação Quântica): A menor unidade de informação quântica. Pode ser 0, 1, ou uma combinação de ambos simultaneamente. Isso é chamado de superposição.
      • Imagine uma moeda girando no ar. Ela não é cara nem coroa até que você a pegue e veja o resultado. O qubit é como essa moeda girando, existindo em uma mistura de estados.
  • Quantum Superposition (Superposição Quântica):
    • Um qubit em superposição é descrito como uma combinação linear de |0⟩ e |1⟩: |ψ⟩ = α|0⟩ + β|1⟩
      • |0⟩ e |1⟩ são os estados básicos (como cara e coroa).
      • α e β são números complexos (chamados de amplitudes) que determinam a probabilidade de encontrar o qubit no estado |0⟩ ou |1⟩ quando medido.
      • |α|² é a probabilidade de medir o qubit como |0⟩.
      • |β|² é a probabilidade de medir o qubit como |1⟩.
      • A soma das probabilidades deve ser igual a 1: |α|² + |β|² = 1
  • Quantum Entanglement (Entrelaçamento Quântico):
    • É uma correlação forte entre dois ou mais qubits. Se dois qubits estão entrelaçados, o estado de um está ligado ao estado do outro, não importa a distância entre eles.
    • Se você medir o estado de um qubit entrelaçado, você instantaneamente sabe o estado do outro, mesmo que eles estejam a anos-luz de distância (isso não permite comunicação mais rápida que a luz, pois a medição é aleatória).
    • O entrelaçamento é crucial para muitos algoritmos quânticos.
  • Medição:
    • Quando você mede um qubit, você “colapsa” sua superposição em um estado clássico, ou seja, 0 ou 1.
    • A probabilidade de obter 0 ou 1 é determinada pelas amplitudes α e β.
    • Após a medição, o qubit perde sua superposição.
  • Portas quânticas:
    • São operações que manipulam o estado de um ou mais qubits.
    • Analogia com portas lógicas na computação clássica (AND, OR, NOT), mas as portas quânticas operam em superposições e entrelaçamentos.
    • Exemplos:
      • Hadamard (H): Coloca um qubit em superposição igual (50% |0⟩, 50% |1⟩).
      • Pauli-X (X): Equivalente ao NOT clássico (inverte o estado: |0⟩ → |1⟩, |1⟩ → |0⟩).
      • CNOT (CX): Opera em dois qubits. Se o primeiro qubit (controle) for |1⟩, ele inverte o segundo qubit (alvo).

Estruturas de dados

Na computação quântica, as estruturas de dados são diferentes das da computação clássica. Aqui estão algumas das principais:

  • Qubit: Já explicado acima, é a unidade básica.
  • Quantum Register (Registro Quântico):
    • É um conjunto de qubits.
    • Pense nele como um array de qubits.
    • A maioria dos algoritmos quânticos opera em registros quânticos.
    • Um registro de n qubits pode representar 2n estados simultaneamente (devido à superposição). Isso é o que dá à computação quântica seu potencial de poder computacional.
  • Classical Register (Registro Clássico):
    • É um conjunto de bits clássicos.
    • Usado para armazenar os resultados das medições dos qubits.
    • A comunicação entre a parte quântica e a parte clássica de um algoritmo é feita através de registradores clássicos.
  • Quantum Circuit (Circuito Quântico):
    • É uma sequência de operações (portas quânticas) aplicadas a um ou mais qubits.
    • É como um programa em computação quântica.
    • Você define um circuito quântico especificando quais portas aplicar a quais qubits em que ordem.
    • As bibliotecas como Qiskit fornecem ferramentas para criar e manipular circuitos quânticos.
  • Statevector (Vetor de Estado):
    • É uma representação matemática do estado de um sistema quântico (um ou mais qubits).
    • É um vetor que contém as amplitudes de todos os possíveis estados do sistema.
    • Para um sistema de n qubits, o vetor de estado tem 2n elementos (números complexos).
    • Os simuladores de computação quântica frequentemente usam vetores de estado para simular o comportamento dos qubits.
  • Density Matrix (Matriz Densidade):
    • Uma representação mais geral do estado de um sistema quântico do que o vetor de estado.
    • Útil para descrever sistemas quânticos que estão em um estado misto (uma combinação estatística de estados puros).
    • Necessária para modelar o ruído e a decoerência em computadores quânticos reais.

Analogias para ajudar a entender

  • Superposição:
    • Um dimmer de luz: pode estar em qualquer posição entre totalmente ligado e totalmente desligado, não apenas em um ou outro.
    • Uma música que é uma mistura de vários instrumentos tocando ao mesmo tempo.
  • Entrelaçamento:
    • Duas luvas (uma esquerda e uma direita) colocadas em caixas separadas e enviadas para lugares diferentes. Se você abrir uma caixa e vir uma luva esquerda, você sabe instantaneamente que a outra caixa contém uma luva direita, mesmo sem abri-la.
  • Medição:
    • Tirar uma foto de um objeto em movimento rápido. A foto “congela” o objeto em uma posição específica, mas você perde informações sobre seu movimento anterior.

Dicas

Comece pequeno e avance gradualmente. Não tente entender tudo de uma vez. Não tenha medo de experimentar e quebrar as coisas. Procure comunidades online para fazer perguntas e obter ajuda.

  • Bibliotecas: Qiskit (IBM), Cirq (Google) ou PennyLane (Xanadu). Qiskit é um bom ponto de partida.
  • Tutoriais: Faça os tutoriais básicos da biblioteca que vc escolher. Eles geralmente cobrem a criação de circuitos quânticos simples, aplicação de portas e medição de qubits.
  • Matemática: Estude álgebra linear (vetores, matrizes) para entender melhor a matemática por trás da computação quântica.
  • Experimente: Modifique os exemplos, crie seus próprios circuitos e veja o que acontece.

Agora que você já entendeu os conceitos básicos da computação quântica, vá para um outro post onde eu explico como instalar o QisKit e rodar o seu primeiro circuito quântico em Phyton: Inicie sua jornada em computação quântica com Qiskit

Aprender computação quântica leva tempo e esforço, mas é uma área fascinante e promissora.

Inicie sua jornada em computação quântica com Qiskit

Como começar a programar com Qiskit e simuladores locais

A computação quântica está transformando o cenário da tecnologia, abrindo portas para soluções inovadoras em áreas como medicina, otimização e criptografia. Se você é como eu e está ansioso para mergulhar nesse universo fascinante, mas se sente um pouco intimidado, este post é para você!

Uma das maiores barreiras de entrada para a computação quântica é a crença de que você precisa de acesso imediato a um computador quântico real. A boa notícia é: você não precisa! Com o Qiskit, a biblioteca de código aberto da IBM, e um simulador local, você pode começar a programar circuitos quânticos hoje mesmo, sem sair do seu computador.

Por que começar com um simulador local?

Antes de falarmos sobre como configurar seu ambiente, vamos entender por que um simulador local é o ponto de partida ideal para sua jornada quântica:

  • Velocidade: Simuladores locais são incrivelmente rápidos em comparação com a execução em hardware quântico real. Isso permite que você itere rapidamente, experimente diferentes ideias e depure seu código de forma eficiente.
  • Acessibilidade: Você não precisa de uma conta na IBM Quantum Experience nem se preocupar com filas de espera para acessar um computador quântico. Tudo o que você precisa está ao seu alcance, no seu próprio computador.
  • Depuração Simplificada: Encontrar e corrigir erros em seus programas quânticos é muito mais fácil em um ambiente local, onde você tem controle total sobre o processo de execução.
  • Custo Zero: O Qiskit e os simuladores são totalmente gratuitos, permitindo que você explore a computação quântica sem gastar um centavo.

Mão na massa!

Instalando e configurando o Qiskit com um simulador local:

Agora que você está convencido, vamos ao passo a passo para configurar seu ambiente de desenvolvimento:

Pré-requisitos:

Certifique-se de ter o Python instalado (versão 3.7 ou superior é recomendada). Se você ainda não tem, baixe a versão mais recente em https://www.python.org/downloads/.

Instalação do Qiskit:

Abra seu terminal (ou prompt de comando) e use o pip (o gerenciador de pacotes do Python) para instalar o Qiskit:

pip install qiskit

Essa instalação básica do Qiskit já inclui a capacidade de usar simuladores locais!

Instalação do Qiskit Aer (Opcional, mas recomendado):

Para um simulador de alto desempenho, instale o Qiskit Aer:

pip install qiskit-aer

Testando sua instalação:

Para ter certeza de que tudo está funcionando corretamente, execute o seguinte código em um arquivo Python (por exemplo, teste_qiskit.py):

from qiskit import QuantumCircuit, transpile 
from qiskit_aer import AerSimulator 
from qiskit.visualization import plot_histogram
import matplotlib.pyplot as plt
# Crie um circuito quântico simples 
circuito = QuantumCircuit(2, 2) 
circuito.h(0) 
circuito.cx(0, 1) 
circuito.measure([0, 1], [0, 1]) 
# Escolha o simulador Aer 
simulador = AerSimulator() 
# Transpile o circuito para o simulador 
circuito_compilado = transpile(circuito, simulador) 
# Execute o circuito
jobs = simulador.run(circuito_compilado, shots=1024) 
# Obtenha os resultados 
resultados = jobs.result() 
contagens = resultados.get_counts(circuito) 
# Imprima os resultados 
print("\nResultados do teste:") 
print(contagens) 
# Visualize os resultados (opcional) 
plot_histogram(contagens)
plt.show()

Execute o arquivo no seu terminal:

python teste_qiskit.py

Se tudo estiver configurado corretamente, você verá os resultados da simulação impressos no terminal e, opcionalmente, um histograma mostrando a distribuição dos resultados.

Desvendando o código

Uma explicação passo a passo

Vamos analisar o código de teste para entender o que está acontecendo:

  • QuantumCircuit(2, 2): Cria um circuito quântico com 2 qubits e 2 bits clássicos para armazenar os resultados das medições.
  • circuito.h(0): Aplica uma porta Hadamard (H) no qubit 0, colocando-o em um estado de superposição.
  • circuito.cx(0, 1): Aplica uma porta CNOT (CX) entre o qubit 0 (controle) e o qubit 1 (alvo), criando um estado de entrelaçamento entre os qubits.
  • circuito.measure([0, 1], [0, 1]): Mede os qubits 0 e 1 e armazena os resultados nos bits clássicos correspondentes.
  • AerSimulator(): Cria uma instância do simulador Aer, que será usado para executar o circuito.
  • transpile(circuito, simulador): O Qiskit transpila o circuito para otimizar sua execução no simulador escolhido. Essa etapa é crucial para garantir que o circuito seja executado de forma eficiente no hardware (ou simulador) de destino.
  • simulador.run(circuito_compilado, shots=1024): Executa o circuito 1024 vezes (o número de “shots” determina quantas vezes o circuito é executado para obter resultados estatisticamente significativos).
  • resultados.get_counts(circuito): Obtém as contagens de cada resultado possível (00, 01, 10, 11) após as medições.
  • plot_histogram(contagens): Plota um histograma dos resultados, facilitando a visualização da distribuição das probabilidades.

Próximos passos

Explorando o universo Qiskit

Agora que você tem o Qiskit instalado e funcionando com um simulador local, o céu é o limite! Aqui estão algumas sugestões para continuar sua jornada:

  • Qiskit textbook: Comece pelo Qiskit Textbook, um recurso online gratuito e interativo que cobre os fundamentos da computação quântica e do Qiskit.
  • Tutoriais e exemplos: Explore os tutoriais e exemplos disponíveis na documentação do Qiskit (https://qiskit.org/documentation/).
  • Hands-on: Tente implementar algoritmos quânticos simples, como o algoritmo de Deutsch-Jozsa ou o algoritmo de Grover.
  • Comunidade Qiskit: Junte-se à comunidade Qiskit no Slack (https://qiskit.slack.com/) para fazer perguntas, compartilhar seus projetos e aprender com outros entusiastas.
  • IBM Quantum Experience: Quando estiver pronto, explore a IBM Quantum Experience para executar seus programas em hardware quântico real e experimentar diferentes arquiteturas.

A computação quântica está ao seu alcance!

A computação quântica pode parecer um campo complexo e distante, mas com as ferramentas e recursos certos, como o Qiskit e os simuladores locais, ela se torna acessível a todos.

Para aprender mais sobre os conceitos básicos e estruturas de dados da computação quântica, de forma bem didática e acessível, clica nesse outro post que tem um resumo para iniciantes: Introdução aos conceitos básicos da Computação Quântica

Não importa seu nível de experiência em programação ou física, você pode começar a aprender e experimentar hoje mesmo.

PoC de Pair Programming com Github Copilot: remoção de fundo de imagens em Python

Fala Devs! Estou empolgado com o Github Copilot, sabe. kkk Compartilho aqui um repositório no Github que criei, após as dicas matadoras do Rafael Bonaldi .

Fiz uma PoC em Python bem simples no VS Code com apoio do copilot, para remover o fundo de imagens via linha de comando (CLI). Foi uma oportunidade para avaliar a pair programming com o copilot em ação.

Como o copilot ajudou?

Pedi via chat para ele fazer a geração do código do arquivo script.py para remover o fundo de imagens, recebendo o nome do arquivo de entrada como parametro.

Daí eu pedi para ele explicar o código e as bibliotecas utilizadas. Depois pedi para ele comentar o código, fazer um code review e uma avaliação do ambiente com @workspace.

Na hora de rodar deu erro e eu pedi para explicar porque estava dando erro e ele sugeriu criar um ambiente virtual do python e explicou que precisava da chave de acesso à API da lib removebg. Entrei no site, baixei a chave e fiz as correções de acordo com as instruções dele e rodou. Gostei bastande e acho que é um apoio que melhora muito a produtividade.

Considero que o conceito foi provado. kkk O mais importante pra mim foi definir o objetivo e conseguir alcançar, com um código simples, útil, que eu consigo entender e que funciona. kkk

O código ficou assim:

import argparse
from removebg import RemoveBg

def remove_background(input_file):
    """
    Remove the background from an image file using the RemoveBg library.

    Parameters:
    input_file (str): The path to the input image file.
    
    Returns:
    None
    """
    try:
        rmbg = RemoveBg("< API KEY >", "error.log")
        rmbg.remove_background_from_img_file(input_file)
    except FileNotFoundError:
        print("The file is not found")
    except Exception as e:
        print("An error occured", e)

def main():
    """
    Parse command-line arguments and call the remove_background function.
    """
    parser = argparse.ArgumentParser(description='Remove background from image.')
    parser.add_argument('input_file', type=str, help='The image file to remove the background from.')
    args = parser.parse_args()
    remove_background(args.input_file)

if __name__ == "__main__":
    main()

Segue o link do repositório: https://github.com/adrianotavares/copilot

Quem quiser colaborar e criar outras funções para tratamento de imagens, manda bala e depois comenta aqui como o assistente ajudou!

Mas tem de usar o copilot ou outra ferramenta, porque o objetivo da PoC é testar a pair programming com assistentes de IA, blz?

Let’s code!

16 Axiomas da Arquitetura Ágil

Você já ouviu falar dos 16 axiomas para a prática da arquitetura ágil? Eles são fundamentais para guiar os times na construção de produtos e plataformas digitais robustas e flexíveis. Vamos ver cada um deles e entender como podem transformar a forma como trabalhamos a arquitetura de sistemas.

  1. Foco na experiência do cliente: Priorizar a criação de valor e satisfação para o cliente.
  2. Pensamento de fora para dentro: Entender o ambiente externo para informar decisões internas.
  3. Ciclos rápidos de feedback: Implementar loops de feedback frequentes para ajustar a arquitetura rapidamente.
  4. Orquestração de pontos de contato: Coordenar todos os pontos de interação com o cliente.
  5. Alinhamento do fluxo de valor: Garantir que todos os esforços estejam direcionados para criar valor ao longo de todo o fluxo de valor (Value Stream).
  6. Equipes autônomas e multifuncionais: Promover equipes independentes com habilidades diversas para maior eficácia.
  7. Distribuição de autoridade, responsabilidade e prestação de contas: Distribuir claramente essas funções para evitar gargalos.
  8. Sistemas fracamente acoplados: Construir sistemas modulares que possam ser facilmente modificados.
  9. Plataforma de dados modular: Utilizar uma plataforma de dados que permita fácil integração e expansão.
  10. Princípios de operação comuns e simples: Manter princípios operacionais claros e simples para todos.
  11. Particionamento sobre camadas: Preferir arquiteturas particionadas com componentes desacoplados, ao invés de arquitetura em camadas.
  12. Arquitetura de espelhamento organizacional: Estruturar a arquitetura para refletir a empresa. A Arquitetura Ágil deve estruturar times ágeis de forma a mapear a arquitetura intencional dos sistemas.
  13. Nivelamento organizacional: Alinhar a arquitetura com os níveis de hierarquia organizacional. Por exemplo: Grupo, Entidade, Time de times, Times ágeis.
  14. Viés para a mudança: Buscar um equilíbrio entre arquitetura intencional e emergente. Estar preparado e disposto a mudar conforme necessário.
  15. Mudança de projeto para produto: Focar em entregas contínuas de valor em vez de projetos isolados.
  16. Segurança by Design: Incorporar segurança desde o início do processo de design: Upstream e Downstream.

Para mais detalhes, confira no standard O-AA – Open Agile Architecture.

E você?

Quais axiomas você já aplica na sua prática diária? Compartilhe suas experiências e desafios nos comentários!

Prompting: Uma competência digital essencial

De acordo com o relatório Future of Work Report: AI at Work do LinkedIn, há um aumento significativo nas buscas por termos como “ChatGPT”, “engenharia de prompt”, “elaboração de prompt”, “Microsoft Copilot” e “inteligência artificial generativa” nos perfis dos membros globalmente. Esses dados destacam a crescente importância da IA generativa no ambiente de trabalho.

“74% dos executivos acreditam que a IA generativa beneficiará os funcionários.”
— Linkedin

Uma outra pesquisa da BCG, How People Can Create—and Destroy—Value with Generative AI, revela que quase todos os participantes (cerca de 90%), independentemente de sua proficiência inicial, obtiveram resultados de maior qualidade ao usar o GPT-4 para realizar tarefas. Além disso, a variação no desempenho foi drasticamente reduzida, com uma parcela muito maior dos participantes apresentando resultados próximos à média, aumentando substancialmente os níveis de desempenho do grupo como um todo.

“Para maximizar os benefícios da IA generativa, é essencial aprender a criar prompts eficazes.”
–BCG

De acordo com o MIT Sloan, Effective Prompts for AI: The Essentials, a elaboração de prompts eficazes é uma habilidade fundamental para trabalhar bem com a IA. Isso envolve entender como comunicar claramente suas intenções à IA para obter os melhores resultados.

“Essa arte de refinar prompts é denominada engenharia de prompts, que envolve selecionar as palavras, frases, símbolos e formatos certos, para obter o melhor resultado possível dos modelos de IA.”
— Johnmaeda, 2023

Outro artigo da Harvard Business Review, To Work Well with GenAI, You Need to Learn How to Talk to It , enfatiza a importância de saber como falar com a IA generativa para utilizá-la de maneira eficaz. Aprender a elaborar prompts não é apenas uma habilidade técnica, mas também uma competência essencial para aumentar a eficiência e a produtividade no trabalho.

“Nos 17 anos que passei na Microsoft, nunca estive tão otimista quanto à oportunidade da computação de mudar o trabalho para melhor.”
— Jaime Teevan, cientista-chefe da Microsoft

Esses artigos reforçam a importância de dominar a elaboração de prompts e a utilização de ferramentas de IA generativa. Ao desenvolver essas habilidades, você não só melhora sua própria performance, mas também contribui para elevar a média de desempenho da sua equipe.

O que você acha dessa tendência? Já começou a explorar o poder dos prompts em sua rotina de trabalho? Compartilhe suas experiências nos comentários!

IA: O epicentro da revolução tecnológica dos próximos 10 anos

“A IA está e vai ficar no epicentro dos eventos tecnológicos pelos próximos dez anos. É a tecnologia que carrega as promessas mais desejadas pelos gestores atuais: otimizar tempo, aumentar a produtividade e diminuir custos. Não por acaso, todos são desejos diretos ou indiretos de hackear o tempo.”
– Lisa Su, CEO da empresa de microprocessadores AMD.

Prepare-se para um futuro em que a inteligência artificial vai transformar a forma como trabalhamos e gerenciamos tudo!

Os gestores estão adorando isso, afinal, quem não quer ter em um futuro breve um “colaborador” que nunca dorme e sempre tem respostas?

Bom, vamos refletir sobre a frase da Lisa Su. Temos muita expectativa sobre os pontos positivos como a automatização de tarefas repetitivas, para que os funcionários se concentrem em atividades mais estratégicas, ferramentas que analisam grande volume de dados, para obter insights e melhorar a tomada de decisão e a automatização de processos para melhorar a eficiência operacional. Aqui a IA pode ajudar as empresas a reduzir custos e ganhar produtividade.

Mas, a implementação da IA levanta algumas questões jurídicas, sociais e éticas importantes, como a privacidade dos dados e o viés dos algorítmicos, que precisam ser abordadas de maneira transparente, a hiper-automação que pode levar à substituição de empregos, criando a necessidade de uma requalificação geral e no pior caso desemprego mesmo.

Outra questão é a dependência tecnológica, onde a confiança excessiva em sistemas de IA extremamente complexos, como os carros autônomos por exemplo, pode resultar em falta de habilidades humanas em casos de falha e questões de responsabilidade legal. De quem é a culpa no caso de um acidente com um carro autônomo? Do dono? Dos engenheiros que desenharam? Dos programadores? Da empresa que fabricou? Do governo?

Bem, por mais que as vantagens sejam evidentes em termos de eficiência e economia, é crucial que os líderes equilibrem esses benefícios com considerações éticas e sociais, garantindo que a IA seja usada de maneira responsável e inclusiva.

O software devorou o mundo e a IA está digerindo

Em um famoso artigo do Wall Street Journal de 2011, Marc Andreessen explicou por que naquela época o software estava devorando o mundo. A evolução acelerada da tecnologia de software impulsionava o crescimento dos negócios digitais. Seguindo os exemplos dos gigantes da Internet, algumas empresas da velha economia estavam se moldando como empresas de tecnologia.

Vamos voltar um pouco mais… Em 2002, a Amazon enfrentou uma barreira de complexidade. O tamanho de sua página inicial atingiu 800MB e levava de 8 a 12 horas para compilar. Jeff Bezos emitiu um mandato relativo a APIs, que mudou profundamente a forma como o software era criado e como a empresa era organizada.

  1. Todas as equipes deverão expor seus dados e funcionalidades por meio de interfaces de serviços.
  2. As equipes devem se comunicar entre si através dessas interfaces.
  3. Não será permitida qualquer outra forma de comunicação entre processos: sem links diretos, leitura direta do armazenamento de dados de outra equipe, sem modelo de memória compartilhada, nenhum tipo de backdoor. A única comunicação permitida é por meio de chamadas de interface de serviço pela rede.
  4. Não importa qual tecnologia seja utilizada. HTTP, Corba, Pubsub, protocolos personalizados – não importa.
  5. Todas as interfaces de serviço, sem exceção, devem ser projetadas desde o início para serem externamente acessíveis. Ou seja, a equipe deve planejar e projetar de forma a poder expor a interface para os desenvolvedores do mundo externo. Sem exceções.
  6. Aqueles que não seguirem esta regra serão demitidos.
  7. Obrigado; tenha um bom dia!

Ao mudar para a modularidade com APIs, a Amazon se posicionou bem para abrir suas capacidades de distribuição e logística para fornecedores terceirizados. A natureza de autoatendimento da plataforma facilitou para os fornecedores venderem e distribuírem seus produtos eliminando atritos. Isso ajudou a Amazon a competir contra o eBay, alavancando um modelo de negócio diferente.

Desde aquela época o software e o hardware representam uma parte crescente dos produtos e de suas operações de suporte. A arquitetura de software, a arquitetura de produto e a arquitetura de operações devem ser estruturadas de maneira simultânea.

Neste cenário em constante mudança, é essencial que as empresas se adaptem e inovem, reconhecendo o papel cada vez mais importante que o software desempenha em todos os aspectos de suas operações. Afinal, como Andreessen apontou, o software estava realmente devorando o mundo e a Inteligência Artificial (IA) nesse momento está fazendo a digestão. kkk

A IA é a força motriz por trás da transformação digital, permitindo que as empresas processem grandes volumes de dados e obtenham insights valiosos. Ela está automatizando tarefas, otimizando processos e possibilitando novos modelos de negócios. A IA está mudando a maneira como interagimos com o software, tornando-o mais intuitivo, personalizado e eficiente. Assim, a IA não apenas ajuda o software a ‘devorar’ o mundo, mas também a ‘digeri-lo’, transformando dados brutos em informações úteis e acionáveis que impulsionam o progresso e a inovação.

Avançando ainda mais nessa discussão, a IA generativa ocupa um lugar de destaque nesse processo de “digestão”. Esse ramo da IA, que inclui modelos de linguagem como ChatGPT, tem a capacidade de gerar novos conteúdos a partir de dados existentes. Isso significa que a IA generativa pode criar desde artigos e relatórios até designs de produtos e códigos de software, ampliando ainda mais o alcance e a eficiência do software. Além disso, a IA generativa pode aprender e se adaptar a estilos específicos, permitindo uma personalização sem precedentes.

Nesse sentido, a IA generativa não só contribui para a “digestão” do mundo pelo software, mas também para a sua “metabolização”, transformando dados em novas formas de criação e inovação.

A liberdade na agilidade

Vamos mergulhar no mundo do Disciplined Agile (DA), uma abordagem híbrida e agnóstica que combina centenas de estratégias e práticas do Agile, Lean e tradicionais para orientar você a encontrar o seu WoW (Way of Working) a melhor maneira para seu time ou organização trabalhar. Esse post está recheado de links que direcionam para assuntos específicos no site do Disciplined Agile. Tem muito conteúdo bacana e útil lá. Aproveite!

DA é sobre ser pragmático e reconhecer que existem ótimas ideias tanto na comunidade Agile quanto na comunidade tradicional. Devemos mostrar um pouco de humildade e respeitar pelo fato de que a comunidade tradicional construiu muita coisa boa e tinha algumas ideias ótimas.

A verdadeira agilidade vem da liberdade, não de um único framework

O DA é um Toolkit e não um framework! É uma caixa de ferramentas que permite a você escolher e evoluir uma forma de trabalhar adequada ao seu propósito, que seja a melhor para você, dada a situação que está enfrentando. Em vez de prescrever um conjunto de “melhores práticas”, o DA ensina como escolher e evoluir um WoW baseado em praticamente todos os frameworks mais populares, incluindo XP, Scrum, Kanban e SAFe.

Scott Ambler, um dos criadores do DA, enfatiza que é preciso permitir que os times evoluam seu ciclo de vida ao longo do tempo. Por exemplo, um time que começa com o ciclo de vida ágil (Agile Lifecycle) baseado em Scrum pode começar a adotar maneiras mais enxutas (Lean Lifecycle) de trabalhar, com práticas do Kanban e práticas de integração contínua e implantação contínua (Disciplined DevOps), e eventualmente evoluir para um ciclo de vida de entrega contínua ágil ou lean (Continuous Delivery Agile Lifecycle / Continuous Delivery Lean Lifecycle).

Ele reforça que, DA é sobre fazer escolhas inteligentes e experimentar práticas para ver o que funciona melhor para o time e que eles experimentem uma prática por algum tempo para ver se ela realmente funciona bem para eles.

Por que ágil disciplinado?

Sobre isso, Scott Ambler, destaca que o ágil disciplinado é necessário porque cada time é único e enfrenta uma situação única, portanto, precisa ter sua própria maneira de trabalhar e as organizações precisam permitir e habilitar os times, para obter a verdadeira agilidade.

  • O DA começa onde você está. Sua organização fez um grande investimento em sua maneira atual de trabalhar (WoW), e com o DA você pode evoluir sobre esse investimento.
  • O DA permite que você melhore cada vez mais. O DA está focado em ajudá-lo a aprender e transformar sua organização em uma organização que aprende, através da melhoria contínua guiada. Ao invés de simplesmente fornecer uma coleção de “melhores práticas” que podem não ser aplicáveis ao contexto da sua organização.
  • O DA fornece uma base sólida para a agilidade organizacional. Pessoas e times em toda a sua organização, independentemente da função de negócios, podem se beneficiar de orientações diretas para otimizar seus processos. O DA aborda toda a empresa, não apenas o desenvolvimento de software.
  • A maneira de pensar ágil disciplinada do DA, é capturada na forma de princípios, promessas e diretrizes. Os agilistas disciplinados acreditam nesses princípios, por isso adotam esses comportamentos e seguem essas diretrizes de maneira sensível ao contexto.

Verdadeira agilidade em escala

Os frameworks ágeis em escala tendem a ter uma visão bastante estreita do que significa agilidade em escala, escolhendo focar na agilidade de um programa para o desenvolvimento de um produto baseado em software ou na aplicação da agilidade em todos (ou pelo menos na maioria) dos times de software de sua organização. Embora esse seja um bom ponto de partida, ele claramente não é suficiente. O que dizer dos times que não estão focados no desenvolvimento de software? E os times que estão em situações mais simples?

O contexto importa

O Disciplined Agile (DA) fornece orientações diretas para ajudar as organizações a otimizar seus processos de maneira sensível ao contexto, fornecendo uma base sólida para a agilidade dos negócios, fornecendo maneiras de avaliar os fatores que impactam a escalada da agilidade no contexto da sua organização.

Fonte: A Solid Foundation for Business Agility with Disciplined Agile https://www.pmi.org/disciplined-agile/

Para saber mais: Faça os cursos oficiais de Disciplined Agile com a JUMP http://jump.bhz.br

Arquitetura Ágil na Era Digital: Desafios e Vantagens

Na era digital em constante evolução, a arquitetura ágil emerge como uma abordagem revolucionária para impulsionar a inovação e a entrega contínua. Com a comunicação assíncrona e o uso de microserviços, essa abordagem desafia as limitações impostas pelas antigas práticas de compartilhamento de bancos de dados e bibliotecas. Neste post, vou explorar os desafios e vantagens da arquitetura ágil e como ela está moldando o cenário atual. Vamos juntos!

A arquitetura ágil na era digital se baseia na comunicação assíncrona, em que mensagens ou eventos conectam serviços por meio de protocolos eficientes, como o de publicação e assinatura. Essa abordagem rompe com as práticas antigas de compartilhamento de bancos de dados e bibliotecas, permitindo maior flexibilidade e independência entre os serviço

Uma das principais vantagens da arquitetura ágil é a liberdade na escolha das ferramentas e da stack de desenvolvimento. Sem restrições impostas por padrões tecnológicos obsoletos, a inovação ganha espaço para florescer. As equipes têm a autonomia de decidir quais ferramentas utilizar, resultando em uma entrega contínua mais eficiente e alinhada com as necessidades do negócio.

Além disso, os serviços podem ser testados e implantados de forma isolada, facilitando uma implementação rápida e contínua. A capacidade de containerizar facilmente esses serviços contribui para agilizar ainda mais o processo de implantação e permite uma escalabilidade mais eficiente.

No entanto, a decomposição de um domínio em serviços requer um profundo conhecimento dos fluxos de valor, para delimitar os domínios de negócio. A exposição de APIs eficientes e escaláveis é um desafio crucial nesse processo. Aqui é onde entra o “Domain-Driven Design” (DDD) de Eric Evans, uma abordagem amplamente adotada que oferece um conjunto de processos e práticas para modularização eficaz de sistemas complexos.

A arquitetura ágil está transformando a maneira como as empresas desenvolvem e entregam software na era digital. Ao romper com as práticas tradicionais, ela proporciona maior flexibilidade, autonomia e eficiência no processo de desenvolvimento. No entanto, é importante lembrar que não existe uma abordagem única para todos os casos. O conhecimento do contexto e a compreensão das necessidades do negócio são, mais do que nunca, os fatores críticos para o sucesso.

Para saber mais:
The Open Agile Architecture™ Standard https://publications.opengroup.org/c208
DDD Crew https://github.com/ddd-crew

Os 7 princípios do Lean para desenvolvimento de software e os mitos que você deve evitar com todas as forças

O Lean tem se tornado cada vez mais popular no desenvolvimento de software entre as empresas que buscam entregar produtos com alta qualidade e valor aos clientes.

No entanto, ainda existem muitos mitos e equívocos que podem prejudicar o sucesso dos times ágeis. Nesse post, vamos desmistificar os mitos relacionados aos 7 princípios do Lean para desenvolvimento de software, que você deve evitar com todas as forças.

Vou citar cada um dos princípios do Lean e um mito relacionado a ele. Ao seguir os princípios do Lean, as equipes de desenvolvimento podem alcançar resultados significativos em termos de eficiência e satisfação do cliente.

Então, vamos lá!

Princípio 1: Eliminate Waste (Eliminar Desperdício)

Mito: Mais especificações no início do projeto reduzem o desperdício.

Alguns times acreditam que ter muitas especificações no início do projeto pode ajudar a eliminar o desperdício, pois todas as necessidades e requisitos já estarão documentados. No entanto, isso pode levar a uma abordagem de “big design upfront”, que pode levar a muitas especificações desnecessárias ou imprecisas, desperdiçando tempo e recursos.

Princípio 2: Build Quality In (Construir a Qualidade):

Mito: Testadores são responsáveis por encontrar defeitos.

Muitos times acreditam que é responsabilidade dos testadores encontrar e corrigir defeitos. No entanto, o objetivo do Lean é construir a qualidade desde o início, o que significa que todos os membros da equipe devem se esforçar para prevenir defeitos e encontrar soluções antes que eles aconteçam. Ressalto que bug, ou seja defeito, o que foi reportado depois de estar em produção. Os chamados “bugs internos” são acertos e parte do desenvolvimento.

Princípio 3: Create Knowledge (Criar Conhecimento):

Mito: Conhecimento é criado somente através de documentação.

Alguns times acreditam que criar documentação é a única forma de criar conhecimento, mas o Lean enfatiza a importância de aprendizado contínuo e comunicação efetiva. O conhecimento é criado através de experimentação, feedback e conversas entre membros da equipe.

Princípio 4: Defer Commitment (Adiar Compromisso):

Mito: Planejar é comprometer-se.

Alguns times acreditam que fazer um plano detalhado é se comprometer a seguir esse plano. No entanto, o Lean enfatiza a flexibilidade e a adaptação às mudanças. Em vez de se comprometer com um plano detalhado, a equipe deve se comprometer com os objetivos do cliente e trabalhar para entregá-los da melhor maneira possível.

Princípio 5: Deliver Fast (Entregar Rápido):

Mito: Pressa gera desperdício.

Alguns times acreditam que ter pressa para entregar o software pode gerar desperdício, pois não há tempo suficiente para fazer as coisas corretamente. No entanto, o objetivo do Lean é entregar valor ao cliente o mais rápido possível, sem sacrificar a qualidade. Isso significa que a equipe deve trabalhar de forma eficiente para entregar valor em ciclos curtos e frequentes.

Princípio 6: Respect People (Respeitar as Pessoas):

Mito: Trabalhar mais horas é a melhor forma de aumentar a produtividade.

Alguns times acreditam que trabalhar mais horas é a melhor forma de aumentar a produtividade. No entanto, o Lean enfatiza a importância de respeitar as pessoas e seus limites. Trabalhar excessivamente pode levar a problemas de saúde e estresse, o que pode diminuir a produtividade e a qualidade do trabalho.

Princípio 7: Optimize the Whole (Otimizar o Todo):

Mito: Otimizar partes individuais leva à otimização do todo.

Otimizar partes individuais do sistema não é suficiente para tornar todo o sistema eficiente, pelo fato das partes individuais estarem interligadas e afetarem umas às outras. Se apenas uma parte do sistema for otimizada, outras partes podem ser até prejudicadas, o que pode levar a problemas no sistema como um todo.

Bom, pra finalizar, é fundamental estar ciente desses mitos e trabalhar para superá-los, a fim de obter o máximo benefício do Lean no desenvolvimento de software.

Para saber mais…

Os mitos e princípios Lean foram extraídos do livro Implementing Lean Software Development, Mary and Tom Poppendieck, o meu livro preferido sobre Lean aplicado ao desenvolvimento de software em times ágeis.

Esses princípios fazem parte do treinamento DASM – Disciplined Agile Scrum Master da jornada ágil do PMI. Eu sou o instrutor desse treinamento pela JUMP TREINAMENTO PROFISSIONAL.

Mais informações sobre o Preparatório DASM da JUMP: https://www.jump.bhz.br/dasm