Pular para o Conteúdo
Este artigo foi traduzido do japonês usando IA
Ler em japonês
Este artigo está em Domínio Público (CC0). Sinta-se à vontade para usá-lo livremente. CC0 1.0 Universal

O Engenheiro Omnidirecional na Era do Liquidware

É sabido que a IA generativa consegue criar imagens, produzindo fotografias realistas, ilustrações e pinturas apenas seguindo instruções.

Entretanto, no mundo dos negócios, a atenção está focada na capacidade da IA generativa para gerar programas.

A IA baseada em chat é concretizada através de modelos de linguagem grandes e fundamentais, tornando-a altamente proficiente em 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 esta razão, a IA generativa conversacional que utiliza grandes modelos de linguagem é também altamente competente em programação.

Além disso, a programação é um tipo de trabalho intelectual onde a correção do resultado pode frequentemente ser verificada de forma automática e instantânea. Isso ocorre porque a execução do programa criado permite a determinação automática de se os resultados desejados são produzidos.

De facto, os programadores humanos frequentemente criam programas de teste em simultâneo com o programa principal para verificar se o programa principal funciona como pretendido, verificando o seu comportamento à medida que o desenvolvimento progride.

A IA generativa também pode progredir na programação enquanto testa, permitindo um mecanismo em que, se um humano fornecer instruções precisas, a IA pode iterar e completar automaticamente o programa até que este passe nos testes.

Claro, devido às limitações da capacidade de programação da IA generativa e à ambiguidade das instruções humanas, há muitos casos em que os testes não podem ser passados mesmo após múltiplas iterações. Além disso, os testes podem ser insuficientes ou incorretos, levando frequentemente a erros ou problemas no programa completo.

No entanto, à medida que as capacidades da IA generativa melhoram, os engenheiros humanos refinam os seus métodos de instrução, e o conhecimento de programação da IA generativa é aprimorado através de pesquisas na internet, o âmbito para a geração automática de programas apropriados está a aumentar dia após dia.

Além disso, com a atenção do mundo dos negócios, as principais empresas que conduzem pesquisa e desenvolvimento de IA generativa também estão a focar-se na melhoria das capacidades de programação da IA generativa.

Nestas circunstâncias, a expansão das áreas e volumes onde a programação automática pode ser confiada à IA generativa deverá acelerar.

Existem muitos casos em que indivíduos que nunca desenvolveram programas antes configuraram um ambiente de desenvolvimento básico com base em informações da internet, e depois deixaram a IA generativa lidar com a programação, completando programas num esforço colaborativo.

Eu próprio, como programador, uso a IA generativa para programar. Assim que apanho o jeito, consigo completar software sem editar o programa de todo, simplesmente copiando programas para ficheiros ou cortando e colando de acordo com as instruções da IA generativa.

Naturalmente, há muitas situações em que encontro dificuldades. Estas devem-se principalmente ao facto de o meu computador ou as minhas ferramentas de desenvolvimento de programação terem configurações ligeiramente diferentes das configurações típicas, ou de os componentes de software livre serem mais recentes do que aquilo que a IA generativa aprendeu, levando a uma lacuna de conhecimento, ou, por vezes, de o conteúdo que solicitei ser um pouco invulgar.

Na maioria dos casos, se não existirem essas pequenas diferenças ou circunstâncias especiais, e se eu instruir a IA a criar uma funcionalidade de software muito comum, são gerados programas apropriados.

Rumo à Era do Liquidware

Como programador de software, posso lançar o software que desenvolvo. E o software que nós, engenheiros, lançamos é utilizado por vários utilizadores.

O futuro em que qualquer pessoa pode realizar este desenvolvimento de software com IA generativa é uma extensão da discussão até agora.

No entanto, esta não é apenas uma mudança no lado do desenvolvimento de software. Uma mudança significativa ocorrerá também no lado do utilizador.

Instruir a IA generativa verbalmente para adicionar ou alterar automaticamente funcionalidades a um software pode ser feito não só durante a fase de desenvolvimento, antes do lançamento do software, mas também enquanto este está em uso. Além disso, pode ser feito pelos próprios utilizadores do software.

Os programadores de software precisam apenas de definir os limites permitidos e inalteráveis e lançar o software com uma funcionalidade de personalização alimentada por IA generativa.

Isto permitiria aos utilizadores solicitar à IA generativa que alterasse pequenos problemas de usabilidade ou preferências de design de ecrã.

Além disso, seria possível adicionar funcionalidades convenientes encontradas noutras aplicações, realizar uma combinação de múltiplas operações com um único clique, ou visualizar ecrãs frequentemente acedidos num único display.

Da perspetiva do programador de software, permitir tal personalização por parte do utilizador oferece vantagens significativas. Elimina a necessidade de adicionar funcionalidades com base em pedidos dos utilizadores, e, considerando que isso poderia aumentar a popularidade do software ao evitar feedback negativo e insatisfação em relação à usabilidade, é uma grande vitória.

Quando os utilizadores podem mudar livremente ecrãs e funções desta forma, o conceito desvia-se significativamente do que tradicionalmente chamávamos "software".

Seria apropriado chamá-lo "liquidware" para significar que é ainda mais fluido e adaptável do que o software (que é flexível comparado ao hardware), e que se encaixa perfeitamente no utilizador.

No passado, as funções eram realizadas apenas por hardware, mas depois surgiu o software substituível, permitindo que as funções fossem realizadas por uma combinação de hardware + software.

A partir daí, podemos pensar no surgimento do liquidware, que se refere a partes que podem ser modificadas pela IA generativa. Assim, as funções gerais seriam realizadas por hardware + software (fornecido pelos desenvolvedores) + liquidware (modificações do utilizador).

Nesta era do liquidware, as ideias de modificação por parte do utilizador irão explodir.

Uma ideia de modificação inovadora inventada por um utilizador pode tornar-se um tópico quente nas redes sociais, levando outros a imitar e modificar vários liquidware.

Além disso, o liquidware que pode integrar e gerir vários tipos de software está fadado a surgir. Isso permitiria aos utilizadores visualizar cronogramas de múltiplas plataformas de redes sociais diferentes numa única aplicação, ou integrar resultados de pesquisa de inúmeras plataformas.

Desta forma, num mundo onde o liquidware é predominante, vários dispositivos, incluindo PCs e smartphones, fornecerão funções que se encaixam perfeitamente na vida e atividades de cada indivíduo.

Um Fenómeno Atual

O que é importante para engenheiros de software como eu é que o "liquidware" não é um conceito futurista ou algo que está a vários anos de distância.

Isto deve-se ao facto de liquidware muito simples já ser alcançável.

Por exemplo, suponhamos que sou um engenheiro a desenvolver uma aplicação web para o site de e-commerce da minha empresa.

Estas aplicações web tipicamente possuem bases de dados, sistemas de gestão de vendas e sistemas de expedição de produtos em servidores geridos pela empresa ou serviços de cloud contratados. Quando um utilizador faz uma compra, estes sistemas interligam-se para recolher pagamentos e expedir produtos.

Os sistemas centrais e as bases de dados para estas operações não podem ser alterados arbitrariamente.

No entanto, se o design do website de e-commerce que os utilizadores veem for modificado para a conveniência de cada utilizador, geralmente causa poucos problemas. Claro, se as alterações de um utilizador afetarem o ecrã de outro utilizador, isso é um problema, mas as personalizações individuais específicas do utilizador são aceitáveis.

Diversas modificações são concebíveis: aumentar o tamanho do texto, mudar o fundo para um tom escuro, mover botões frequentemente pressionados para posições facilmente acessíveis com a mão esquerda, ordenar itens por preço numa 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.

Em termos de segurança, estes ficheiros originalmente são executados no navegador web, por isso são modificáveis por engenheiros familiarizados com aplicações web. Portanto, eles apenas manipulam funções e dados que são seguros para serem modificados.

Assim, no lado do servidor da aplicação web de e-commerce, seria possível armazenar estes ficheiros separadamente para cada utilizador autenticado, adicionar um ecrã para conversação com uma IA de chat e criar um mecanismo para modificar os ficheiros HTML, CSS e JavaScript desse utilizador no servidor de acordo com os seus pedidos.

Se fornecer este texto, juntamente com as informações de configuração e o código fonte de uma aplicação web de e-commerce existente, à IA generativa, é provável que esta forneça os passos e os programas necessários para adicionar tal funcionalidade.

Desta forma, o "liquidware" já é um tópico atual; não seria surpreendente que fosse um fenómeno em curso.

Engenheiro Omnidirecional

Mesmo que o âmbito da programação automática impulsionada pela IA se expanda e a era do liquidware já tenha começado, o desenvolvimento de software ainda não pode ser realizado unicamente pela IA generativa.

No entanto, é certo que o peso da programação no desenvolvimento de software diminuirá significativamente.

Além disso, para desenvolver software de forma fluida, é necessária uma vasta gama de conhecimentos e competências de engenharia, não apenas programação geral, mas também infraestrutura de cloud, redes, segurança, plataformas, frameworks de desenvolvimento e bases de dados – cobrindo todo o sistema de cima a baixo.

Profissionais com tais conhecimentos e competências são chamados engenheiros full-stack.

Até agora, alguns engenheiros full-stack lidavam com o design geral, enquanto os restantes engenheiros se dedicavam exclusivamente à programação ou se especializavam em áreas não-programáticas específicas dentro da pilha de sistemas, partilhando os papéis desta forma.

No entanto, à medida que a IA generativa assume a parte da programação, os custos de desenvolvimento de software serão significativamente reduzidos, levando ao planeamento de vários novos desenvolvimentos de software.

Consequentemente, cada projeto de desenvolvimento exigirá muito poucos engenheiros que possam simplesmente escrever código; em vez disso, será necessário um grande número de engenheiros full-stack.

Além disso, nesta situação, ter apenas conhecimento e competências full-stack será insuficiente. Isto porque vários projetos de desenvolvimento de software exigirão diversos tipos de software, o que significa que o desenvolvimento nem sempre será solicitado dentro da mesma pilha de sistema. Além disso, a procura por sistemas compósitos que exijam múltiplas pilhas de sistema certamente aumentará.

Por exemplo, a pilha de sistema para uma aplicação web difere da de sistemas de negócio ou centrais. Portanto, um engenheiro full-stack de aplicações web não pode ser encarregado de um projeto de desenvolvimento de sistema central.

Além disso, as aplicações web, as aplicações para smartphone e as aplicações para PC têm diferentes pilhas de sistema. No mundo do software incorporado, como o IoT, a pilha de sistema muda completamente dependendo do dispositivo em que está incorporado.

No entanto, se a ênfase na programação diminuir e o custo total do desenvolvimento de software baixar, o desenvolvimento de sistemas compostos que combinam software com diferentes pilhas de sistema deverá aumentar.

Embora isso exija a reunião de múltiplos engenheiros full-stack separados para o desenvolvimento, os engenheiros que conseguem ter uma visão geral e realizar o design básico ocuparão uma posição crucial.

Isto significa que haverá procura por engenheiros com conhecimentos e competências omnidirecionais em inúmeras pilhas de sistema, transcendendo as fronteiras das pilhas de sistema individuais.

Tais engenheiros serão provavelmente chamados engenheiros omnidirecionais.

E assim como a procura por engenheiros que apenas conseguem programar diminuirá devido à IA generativa, chegará eventualmente 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 a esforçar-se para se tornar um engenheiro omnidirecional imediatamente.

O Papel do Engenheiro Omnidirecional

As linguagens de programação, plataformas e frameworks a serem desenvolvidos são diversos.

No entanto, isso não significa que se deva aprender todos eles. Isto porque o engenheiro omnidirecional também pode receber assistência da IA generativa.

Se confiada à IA generativa, mesmo linguagens de programação, plataformas ou frameworks que nunca foram utilizados pessoalmente podem ser gerados simplesmente fornecendo instruções verbalmente.

Naturalmente, existe o risco de introduzir bugs ou falhas de segurança, ou de acumular dívida técnica que poderá dificultar futuras modificações.

Para identificar e mitigar estes riscos, é necessário o conhecimento da linguagem ou biblioteca específica. No entanto, esse conhecimento também pode ser obtido através da IA generativa. O engenheiro omnidirecional apenas precisa de ser capaz de construir de forma exaustiva os procedimentos e mecanismos para detetar e prevenir estas questões, ou para as gerir a posteriori.

Estes procedimentos e mecanismos não se alteram significativamente com as diferenças na pilha do sistema. Se se conseguir formalizar os procedimentos e mecanismos para suprimir a introdução de bugs e falhas de segurança, e para garantir a extensibilidade futura durante o desenvolvimento, então o resto pode ser confiado à IA generativa ou a engenheiros especializados nessas áreas em particular.

O engenheiro omnidirecional não necessita de possuir conhecimento detalhado ou experiência de longo prazo com cada pilha de sistema individual.

Além disso, um dos principais papéis de um engenheiro omnidirecional é desenhar como as funções são distribuídas e como interagem dentro de software complexo que opera colaborativamente em múltiplas e diferentes pilhas de sistema.

Adicionalmente, considerar como todo o software deve ser desenvolvido e gerido também se torna um papel importante para o engenheiro omnidirecional.

Software Omnidirecional

Consideremos que tipo de desenvolvimento de software exige um engenheiro omnidirecional.

Anteriormente, dei o exemplo de desenvolvimento de uma aplicação web de comércio eletrónico.

Sob a direção de um executivo responsável, que recebeu ordens da alta direção da empresa para reformular esta aplicação web de comércio eletrónico, a equipa de planeamento poderá apresentar os seguintes requisitos:

Conversão para Plataforma de Comunidade de Utilizadores. Isto significa não apenas uma aplicação ou site específico de comércio eletrónico, mas sim o fornecimento de uma plataforma onde os utilizadores de produtos possam interagir entre si sobre os produtos e a sua utilização. O objetivo é a retenção de utilizadores, o efeito boca-a-boca, o enriquecimento de conteúdo através de contribuições dos utilizadores, e a integração do feedback de desenvolvimento de produtos (tanto positivo como negativo) com o planeamento de novos produtos e marketing.

Compatibilidade Omni-dispositivo. Isto permite o acesso à comunidade de utilizadores e informações sobre produtos não só a partir de aplicações web, mas também de aplicações para smartphone, assistentes de voz, dispositivos vestíveis, eletrodomésticos inteligentes e todos os outros dispositivos.

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 gerais, 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 se liguem temporariamente aos sistemas existentes de gestão de vendas e entrega de produtos, estes sistemas também serão atualizados. Após a atualização, prevê-se a agregação de dados de vendas em tempo real, previsão da procura e integração com sistemas de gestão de inventário. Além disso, à medida que a integração gradual com sistemas de inventário distribuído regionalmente e serviços de expedição de produtos fornecidos por empresas de entrega avança, os sistemas de informação também devem integrar-se gradualmente de acordo.

Compatibilidade com Liquidware. Claro, todas as interfaces de utilizador serão compatíveis com liquidware. Além disso, todas as interfaces de utilizador internas, como as para agregação de informações e feedback para desenvolvimento e planeamento de produtos, departamentos de operação de sistemas e relatórios de gestão, também serão convertidas para liquidware.

Se fosse apresentado um plano de desenvolvimento para um software tão complexo, uma equipa tradicional de desenvolvimento de software provavelmente não o aceitaria de imediato. Ou, durante o processo de refinamento das especificações do sistema, demonstraria logicamente a necessidade de custos e tempo de desenvolvimento enormes, e pressionaria para reduções significativas 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 sistema apresentadas fossem familiares a alguém da equipa, e a equipa tivesse experiência anterior em introduzir com sucesso novas pilhas de sistema, plataformas e frameworks do zero com a assistência da IA generativa? E se você, como engenheiro omnidirecional, já tivesse embarcado neste caminho e pretendesse continuar nele?

Dessa perspetiva, deverá parecer um projeto muito atraente. Poderia trabalhar com uma equipa de planeamento que apresenta propostas ambiciosas sob a direção da liderança de planeamento, e uma equipa de desenvolvimento com o potencial de se tornar uma equipa de desenvolvimento de software omnidirecional.

Há também a segurança dos sistemas existentes. É igualmente um projeto que permite processos de desenvolvimento ágeis, onde funcionalidades de alto impacto podem ser construídas rapidamente, e o sistema pode crescer incrementalmente com o feedback dos utilizadores pioneiros.

Considerando isto, o desenvolvimento deste software omnidirecional deverá parecer um projeto atraente.

Conclusão

Graças à programação automática pela IA generativa, o liquidware e o desenvolvimento de software omnidirecional já se estão a tornar realidades atuais.

Nesta situação, os engenheiros de TI precisam cada vez mais de ir além do full-stack e aspirar a tornar-se engenheiros omnidirecionais.

Além disso, o seu âmbito irá expandir-se para a engenharia de negócios omnidirecional, que planeia de forma abrangente as atividades organizacionais, conectando clientes, colaboradores internos e IA para além do âmbito dos sistemas de TI, e para a engenharia de comunidade omnidirecional.

E ainda mais além, acredito que surgirá um campo chamado engenharia social omnidirecional, com o objetivo de melhorar a sociedade de forma abrangente.