É sabido que a IA generativa pode produzir imagens fotorrealistas, ilustrações e pinturas simplesmente ao receber instruções.
Entretanto, no mundo dos negócios, a atenção está a focar-se na capacidade da IA generativa de gerar programas.
A IA conversacional é alimentada por grandes modelos de linguagem, uma tecnologia fundamental, e destaca-se na conversação em várias línguas e na tradução entre elas.
As linguagens de programação, usadas para criar programas, são também um tipo de linguagem. Os programadores humanos, em certo sentido, traduzem os requisitos de software recebidos verbalmente para linguagens de programação.
É por isso que a IA generativa conversacional, que utiliza grandes modelos de linguagem, também é muito hábil na programação.
Além disso, a programação é uma tarefa intelectual em que a correção dos resultados pode ser frequentemente verificada de forma automática e imediata. Isto deve-se ao facto de um programa criado poder ser executado e verificado automaticamente para ver se produz o resultado desejado.
De facto, quando os programadores humanos criam um programa, muitas vezes criam simultaneamente programas de teste para verificar os resultados, desenvolvendo o programa principal enquanto verificam se este funciona conforme o pretendido.
A IA generativa também pode progredir na programação enquanto testa da mesma forma. Se um ser humano fornecer instruções precisas, é possível que a IA itere e complete o programa automaticamente até que este passe em todos os testes.
É claro que, devido às limitações das capacidades de programação da IA generativa e à ambiguidade das instruções humanas, existem muitos casos em que os testes não podem ser passados mesmo após inúmeras iterações. Além disso, testes inadequados ou incorretos levam frequentemente a bugs ou problemas no programa concluído.
No entanto, à medida que as capacidades da IA generativa melhoram, e os engenheiros humanos refinam os seus métodos de instrução, juntamente com mecanismos para aprimorar o conhecimento de programação da IA generativa através de pesquisas na internet, o âmbito para gerar automaticamente programas apropriados está a expandir-se dia após dia.
Adicionalmente, com o foco do mundo empresarial, as principais empresas envolvidas na pesquisa e desenvolvimento de IA generativa também estão a investir fortemente na melhoria das capacidades de programação da IA generativa.
Nesta situação, espera-se que a expansão do âmbito e do volume de tarefas de programação automatizada que podem ser confiadas à IA generativa se acelere.
Existem muitos casos de indivíduos que nunca tinham desenvolvido programas antes, que configuraram um ambiente de desenvolvimento básico usando informações da internet e, em seguida, dependeram da IA generativa para a programação, concluindo projetos juntos como uma equipa de dois.
Como programador, utilizo a IA generativa para programar. Assim que apanho o jeito, consigo concluir software sem editar o programa, simplesmente copiando e colando código em ficheiros de acordo com as instruções da IA generativa.
Certamente, há muitas situações em que fico preso. Geralmente, isso deve-se a pequenas diferenças entre as configurações do meu computador ou das ferramentas de desenvolvimento de programação e as configurações comuns, ou porque os componentes de software gratuitos são mais recentes do que aquilo com que a IA generativa foi treinada, causando uma lacuna de conhecimento, ou porque os meus pedidos são ligeiramente incomuns.
Em casos sem tais pequenas discrepâncias ou circunstâncias especiais, e quando instruída a criar funções de software muito comuns, programas apropriados são gerados na maioria das situações.
Rumo à Era do Liquidware
Como programador de software, posso lançar o software que crio, e esse software, lançado por nós engenheiros, é então utilizado por vários utilizadores.
O futuro em que o desenvolvimento de software pode ser feito por qualquer pessoa com IA generativa é uma extensão da discussão até agora.
No entanto, esta não é apenas uma mudança do lado do desenvolvimento de software; mudanças significativas também estão a chegar ao lado do utilizador.
A tarefa de instruir verbalmente a IA generativa para adicionar ou modificar automaticamente funções no software pode ser feita não só durante a fase de desenvolvimento, antes do lançamento do software, mas também durante a sua utilização. Além disso, pode ser realizada pelo próprio utilizador do software.
Os desenvolvedores de software podem definir o âmbito do que pode e não pode ser alterado, e depois lançar o software com recursos de personalização alimentados por IA generativa.
Isso permitiria aos utilizadores pedir à IA generativa para modificar pequenas inconveniências ou preferências de design de ecrã dentro do software.
Além disso, os utilizadores poderiam adicionar funcionalidades úteis encontradas noutras aplicações, combinar várias operações num único clique, ou visualizar ecrãs frequentemente acedidos num único display.
Para os desenvolvedores de software, permitir tal personalização pelo utilizador oferece benefícios significativos: elimina o esforço de implementar os pedidos de funcionalidades, e pode aumentar a popularidade do software, evitando críticas negativas e insatisfação com a usabilidade.
Quando os utilizadores podem mudar livremente ecrãs e funções desta forma, o conceito desvia-se significativamente do que tradicionalmente chamamos de "software".
Seria mais apropriado chamá-lo de "Liquidware", implicando algo ainda mais fluido e adaptável do que o software (que já é mais flexível do que o hardware), e algo que se ajusta perfeitamente ao utilizador.
As funções eram outrora realizadas apenas por hardware. Depois, surgiu o software intermutável, permitindo funções através de uma combinação de hardware e software.
A partir daí, podemos prever o surgimento do Liquidware, significando partes que podem ser modificadas por IA generativa. Consequentemente, as funções serão realizadas por hardware + software (fornecido por desenvolvedores) + Liquidware (modificações do utilizador).
Nesta era do Liquidware, as ideias dos utilizadores para modificações irão explodir.
Uma ideia inovadora de modificação, inventada por um utilizador, poderá tornar-se um tema popular nas redes sociais, levando outros a imitar e a modificar várias aplicações de Liquidware.
Além disso, é provável que surja o Liquidware capaz de lidar com várias aplicações de software de forma integrada. Isso significa que os utilizadores poderão visualizar linhas do tempo de múltiplas plataformas de redes sociais diferentes numa única aplicação, ou os resultados de pesquisa poderão integrar resultados de inúmeras plataformas.
Desta forma, num mundo onde o Liquidware é generalizado, vários dispositivos, incluindo PCs e smartphones, fornecerão funções que se encaixam perfeitamente na vida e atividades de cada um de nós.
Um Fenómeno Atual
Para engenheiros de software como eu, é crucial compreender que o Liquidware não é um conceito futurista ou algo para daqui a vários anos.
Isto porque, mesmo o Liquidware muito simples, já é alcançável.
Por exemplo, suponhamos que sou um engenheiro a desenvolver uma aplicação web para o site de e-commerce da minha empresa.
Uma aplicação web como essa teria bases de dados, sistemas de gestão de vendas e sistemas de envio de produtos em servidores geridos internamente ou contratados através de um serviço de nuvem. Quando um utilizador faz uma compra, estes sistemas interligam-se para lidar com a recolha de pagamentos e o despacho de produtos.
Sistemas de negócio centrais e bases de dados como estes não podem ser arbitrariamente modificados.
No entanto, o design do ecrã web de um site de comércio eletrónico, virado para o utilizador, pode ser modificado para se adequar a utilizadores individuais sem causar problemas significativos. Claro que, se as alterações de um utilizador afetassem os ecrãs de outros utilizadores, isso seria um problema, mas as personalizações específicas de cada utilizador são aceitáveis.
Por exemplo, várias modificações são concebíveis: aumentar o tamanho do texto, mudar o fundo para um tom escuro, reposicionar botões frequentemente pressionados para uma operação mais fácil com a mão esquerda, ordenar itens por preço num ecrã de lista, ou exibir os detalhes de dois produtos lado a lado.
Tecnicamente, estas modificações podem ser alcançadas alterando os ficheiros de configuração e programas como HTML, CSS e JavaScript que exibem o ecrã no navegador.
Do ponto de vista da segurança, estes ficheiros funcionam originalmente no navegador web. Portanto, as partes que podem ser modificadas por um engenheiro com conhecimentos em aplicações web apenas lidam com funções e dados que são seguros para modificar.
Assim, no lado do servidor da aplicação web de e-commerce, pode ser criado um mecanismo para armazenar esses ficheiros separadamente para cada utilizador com sessão iniciada, adicionar um ecrã para conversar com uma IA de chat e, em seguida, modificar os ficheiros HTML, CSS e JavaScript desse utilizador no servidor de acordo com os seus pedidos.
Se este texto, juntamente com as informações de configuração e o código fonte da aplicação web de e-commerce existente, fossem apresentados a uma IA generativa, esta provavelmente forneceria os passos e os programas necessários para adicionar tal funcionalidade.
Desta forma, o Liquidware já é um tópico atual; não seria surpreendente se fosse um fenómeno em curso neste momento.
Engenheiros Omnidirecionais
Mesmo com o âmbito crescente da programação automática impulsionada pela IA e o advento da era do Liquidware, o desenvolvimento de software ainda não pode ser realizado apenas por IA generativa.
No entanto, é certo que a ênfase na programação no desenvolvimento de software diminuirá significativamente.
Além disso, para desenvolver software de forma eficiente, é necessária uma vasta gama de conhecimentos e competências de engenharia, que se estende desde a programação geral até à infraestrutura de cloud, redes, segurança, plataformas, frameworks de desenvolvimento e bases de dados — tudo, desde a camada superior à inferior da pilha de sistemas, para que todo o sistema funcione.
O pessoal com tais conhecimentos e competências é chamado de engenheiros full-stack.
Tradicionalmente, alguns engenheiros full-stack tratariam do design geral, enquanto os restantes engenheiros se especializariam em programação, ou se concentrariam em áreas específicas não relacionadas com a programação dentro da pilha de sistemas, dividindo assim os papéis.
No entanto, à medida que a IA generativa assume o aspeto da programação, os custos de desenvolvimento de software serão significativamente reduzidos, levando ao planeamento de vários novos projetos de desenvolvimento de software.
Consequentemente, em cada projeto de desenvolvimento, os engenheiros que podem meramente escrever programas serão em grande parte desnecessários; em vez disso, um grande número de engenheiros full-stack será procurado.
Além disso, neste cenário, ter apenas conhecimentos e competências full-stack será insuficiente. Isto porque os tipos de software exigidos em vários projetos de desenvolvimento irão diversificar, o que significa que o desenvolvimento nem sempre será solicitado utilizando a mesma pilha de sistemas. Além disso, as exigências por sistemas complexos que requerem múltiplas pilhas de sistemas irão, sem dúvida, aumentar.
Por exemplo, a pilha de sistema para uma aplicação web difere da de sistemas de negócio ou sistemas centrais. Portanto, um engenheiro de aplicações web full-stack não pode ser encarregue de um projeto de desenvolvimento de sistema central.
Da mesma forma, as aplicações web, as aplicações para smartphone e as aplicações para PC têm pilhas de sistema diferentes. No mundo do software incorporado, como o IoT, a pilha de sistema varia completamente para cada dispositivo incorporado.
No entanto, à medida que a ênfase na programação diminui e os custos globais de desenvolvimento de software caem, é provável que aumente o desenvolvimento de sistemas complexos que combinam software com estas pilhas de sistemas diferentes.
Embora tal desenvolvimento exija a reunião de vários engenheiros full-stack distintos, os engenheiros que podem supervisionar todo o sistema e lidar com o design básico desempenharão um papel crucial.
Isto significa que haverá uma procura por engenheiros com conhecimento e competências omnidirecionais em inúmeras pilhas de sistemas, transcendendo as fronteiras das pilhas de sistemas individuais.
Tais engenheiros serão provavelmente chamados de engenheiros omnidirecionais.
E assim como a procura por engenheiros que apenas programam diminuirá devido à IA generativa, chegará uma era em que a procura por engenheiros full-stack confinados a uma única pilha de sistema também diminuirá.
Se deseja permanecer ativo como engenheiro de TI nessa era, deve começar imediatamente o caminho para se tornar um engenheiro omnidirecional.
O Papel dos Engenheiros Omnidirecionais
As linguagens de programação, plataformas e frameworks que serão desenvolvidas são diversas.
No entanto, um engenheiro omnidirecional não precisa de dominar todas elas, pois também pode receber assistência da IA generativa.
Se o deixar para a IA generativa, mesmo linguagens de programação, plataformas ou frameworks que nunca utilizou antes podem ser geradas simplesmente fornecendo instruções verbais.
É claro que existe o risco de introduzir bugs ou vulnerabilidades de segurança, ou de acumular dívidas técnicas que poderiam dificultar futuras modificações.
Para identificar e mitigar estes riscos, é necessário conhecimento da linguagem ou biblioteca específica. No entanto, este conhecimento também pode ser obtido da IA generativa. Um engenheiro omnidirecional apenas precisa de ser capaz de construir solidamente procedimentos e mecanismos para detetar e prevenir estas questões, ou para as gerir após a ocorrência.
Estes procedimentos e mecanismos não mudam drasticamente com diferentes pilhas de sistemas. Se os procedimentos e mecanismos para prevenir bugs e vulnerabilidades de segurança e garantir a extensibilidade futura forem formalizados, então o restante pode ser deixado para a IA generativa ou para engenheiros especializados nessas áreas específicas.
Os engenheiros omnidirecionais não precisam de possuir conhecimento detalhado ou experiência de longo prazo com cada pilha de sistema individual.
Um dos principais papéis de um engenheiro omnidirecional é projetar como as funções são distribuídas e como múltiplos sistemas de software complexos, operando colaborativamente em diferentes pilhas de sistemas, interagem.
Além disso, considerar como desenvolver e gerir todo o software é também um papel crucial para um engenheiro omnidirecional.
Software Omnidirecional
Vamos considerar para que tipo de desenvolvimento de software é necessário um engenheiro omnidirecional.
Anteriormente, dei o exemplo do desenvolvimento de uma aplicação web de comércio eletrónico.
Sob a direção de um executivo encarregado pela alta administração de atualizar esta aplicação web de comércio eletrónico, a equipa de planeamento pode apresentar os seguintes requisitos:
Integração da Plataforma de Comunidade de Utilizadores: Isto significa fornecer uma plataforma não apenas para uma aplicação ou site de comércio eletrónico dedicado, mas onde os utilizadores possam interagir sobre os próprios produtos e como os utilizar. O objetivo é a retenção de utilizadores, o efeito de boca-a-boca, o enriquecimento de conteúdo através das contribuições dos utilizadores, e a integração do feedback (tanto positivo como negativo) no desenvolvimento de produtos, no planeamento de novos produtos e no marketing.
Compatibilidade Omnidispositivo: Isto torna a comunidade de utilizadores e as informações sobre produtos acessíveis a partir de vários dispositivos, incluindo não só aplicações web, mas também aplicações para smartphones, assistentes de voz, dispositivos vestíveis e eletrodomésticos inteligentes.
Compatibilidade Omni-plataforma: Isto inclui não só a plataforma de comunidade de utilizadores da própria empresa, mas também, por exemplo, listagens de produtos e partilha de avaliações em sites de comércio eletrónico abrangentes, integração com redes sociais e ligação funcional e de informação com várias ferramentas de IA.
Atualização do sistema de negócios: Embora ligando temporariamente com os sistemas existentes de gestão de vendas e entrega de produtos, isto também envolve a atualização desses sistemas. Após a atualização, o plano inclui a agregação de dados de vendas em tempo real e a previsão de procura, e a integração com sistemas de gestão de inventário. Além disso, a ligação com sistemas de inventário distribuídos regionalmente fornecidos por empresas de entrega e serviços de entrega do lado da transportadora será implementada em fases, exigindo que o sistema de informação adapte gradualmente as suas integrações.
Compatibilidade Liquidware: Todas as interfaces viradas para o utilizador serão, naturalmente, compatíveis com Liquidware. Adicionalmente, as interfaces de utilizador internas para o desenvolvimento e planeamento de produtos (como agregação de informação e feedback), departamentos de operações de sistema e relatórios para a gestão também serão todas convertidas para Liquidware.
Se um plano de desenvolvimento para um software tão complexo fosse apresentado, uma equipa tradicional de desenvolvimento de software provavelmente não o aceitaria de imediato. Alternativamente, através de discussões sobre as especificações do sistema, eles demonstrariam logicamente a necessidade de custos e tempo de desenvolvimento enormes, pressionando por cortes significativos nas especificações.
No entanto, e se a IA generativa pudesse automatizar a maior parte da programação, e mais de metade das pilhas de sistemas propostas já fossem familiares a alguém na equipa? E se a equipa tivesse um histórico de lançar com sucesso novas pilhas de sistemas, plataformas e frameworks do zero com a assistência da IA generativa? E se você, como um engenheiro omnidirecional, já tivesse começado este caminho e pretendesse continuá-lo?
Dessa perspetiva, deverá parecer um projeto muito atraente. Trabalharia com uma equipa de planeamento que traz propostas ambiciosas da alta administração, e uma equipa de desenvolvimento com o potencial de se transformar numa equipa de desenvolvimento de software omnidirecional.
Há também a tranquilidade dos sistemas existentes. É também um projeto que pode ser desenvolvido incrementalmente através de um processo de desenvolvimento ágil, começando com funcionalidades de rápido impacto e elevada eficácia, e recolhendo feedback dos utilizadores pioneiros para um crescimento gradual.
Considerando tudo isto, o desenvolvimento deste software omnidirecional deve parecer um projeto muito atraente.
Conclusão
Com a programação automática impulsionada pela IA generativa, o Liquidware e o desenvolvimento de software omnidirecional já se estão a tornar realidades atuais.
Neste contexto, os engenheiros de TI precisam, cada vez mais, de ir além do full-stack e aspirar a tornarem-se engenheiros omnidirecionais.
Além disso, o seu âmbito expandir-se-á ainda mais, indo para além do domínio dos sistemas de TI para abranger a engenharia de negócios omnidirecional — engenharia das próprias atividades organizacionais, conectando clientes, colaboradores internos e IA — e a engenharia de comunidade omnidirecional.
E mais além, prevejo o surgimento de um campo chamado engenharia social omnidirecional, visando a melhoria abrangente da sociedade.