Futuro do desenvolvimento de software: Futuro dos computadores P2

CRÉDITO DE IMAGEM: corrida quântica

Futuro do desenvolvimento de software: Futuro dos computadores P2

    Em 1969, Neil Armstrong e Buzz Aldrin se tornaram heróis internacionais depois de serem os primeiros humanos a pisar na Lua. Mas enquanto esses astronautas eram os heróis na câmera, existem milhares de heróis desconhecidos que, sem o envolvimento deles, o primeiro pouso tripulado na Lua não teria sido impossível. Alguns desses heróis foram os desenvolvedores de software que codificaram o voo. Por quê?

    Bem, os computadores que existiam naquela época eram muito mais simples do que são hoje. Na verdade, o smartphone desgastado de uma pessoa comum é várias ordens de magnitude mais poderoso do que qualquer coisa a bordo da espaçonave Apollo 11 (e toda a NASA dos anos 1960). Além disso, os computadores naquela época eram codificados por desenvolvedores de software especializados que programavam software na mais básica das linguagens de máquina: AGC Assembly Code ou simplesmente 1s e 0s.

    Para contextualizar, um desses heróis desconhecidos, o Diretor da Divisão de Engenharia de Software do programa espacial Apollo, Margaret Hamilton, e sua equipe teve que escrever uma montanha de código (foto abaixo) que usando as linguagens de programação atuais poderia ter sido escrita usando uma fração do esforço.

    (Na foto acima, Margaret Hamilton está ao lado de uma pilha de papel contendo o software Apollo 11.)

    E, diferentemente de hoje em dia, onde os desenvolvedores de software codificam cerca de 80 a 90% dos cenários possíveis, para as missões Apollo, seu código tinha que levar em conta tudo. Para colocar isso em perspectiva, a própria Margaret disse:

    "Devido a um erro no manual da lista de verificação, o interruptor do radar rendezvous foi colocado na posição errada. Isso fez com que ele enviasse sinais errôneos para o computador. O resultado foi que o computador estava sendo solicitado a executar todas as suas funções normais para o pouso. enquanto recebia uma carga extra de dados espúrios que consumiam 15% do seu tempo. O computador (ou melhor, o software nele) era inteligente o suficiente para reconhecer que estava sendo solicitado a executar mais tarefas do que deveria. um alarme, o que significava para o astronauta, estou sobrecarregado com mais tarefas do que deveria estar fazendo neste momento, e vou manter apenas as tarefas mais importantes, ou seja, as necessárias para o pouso ... Na verdade , o computador foi programado para fazer mais do que reconhecer condições de erro. Um conjunto completo de programas de recuperação foi incorporado ao software. A ação do software, neste caso, foi eliminar as tarefas de menor prioridade e restabelecer as mais importantes ... Se o computador não tivessereconheceu esse problema e tomou medidas de recuperação, duvido que a Apollo 11 teria sido o pouso bem-sucedido na lua que foi."

    — Margaret Hamilton, Diretora do Apollo Flight Computer Programming MIT Draper Laboratory, Cambridge, Massachusetts, "Computer Got Loaded", Carta para Dados, March 1, 1971

    Como sugerido anteriormente, o desenvolvimento de software evoluiu desde os primeiros dias da Apollo. Novas linguagens de programação de alto nível substituíram o tedioso processo de codificação com 1s e 0s para codificação com palavras e símbolos. Funções como gerar um número aleatório que costumava exigir dias de codificação agora são substituídas pela escrita de uma única linha de comando.

    Em outras palavras, a codificação de software tornou-se cada vez mais automatizada, intuitiva e humana a cada década que passa. Essas qualidades só continuarão no futuro, orientando a evolução do desenvolvimento de software de maneiras que terão um impacto profundo em nosso dia-a-dia. É o que este capítulo do Futuro dos computadores série irá explorar.

    Desenvolvimento de software para as massas

    O processo de substituir a necessidade de codificar 1s e 0s (linguagem de máquina) por palavras e símbolos (linguagem humana) é chamado de processo de adição de camadas de abstrações. Essas abstrações vieram na forma de novas linguagens de programação que automatizam funções complexas ou comuns para o campo para o qual foram projetadas. Mas durante o início dos anos 2000, surgiram novas empresas (como Caspio, QuickBase e Mendi) que começaram a oferecer o que é chamado de plataformas sem código ou low-code.

    Esses são painéis on-line fáceis de usar que permitem que profissionais não técnicos criem aplicativos personalizados adaptados às necessidades de seus negócios por meio da junção de blocos visuais de código (símbolos/gráficos). Em outras palavras, em vez de cortar uma árvore e transformá-la em um armário, você a constrói usando peças pré-moldadas da Ikea.

    Embora o uso deste serviço ainda exija um certo nível de conhecimento em informática, você não precisa mais de um diploma de ciência da computação para usá-lo. Como resultado, essa forma de abstração está permitindo o surgimento de milhões de novos "desenvolvedores de software" no mundo corporativo e está permitindo que muitas crianças aprendam a codificar mais cedo.

    Redefinindo o que significa ser um desenvolvedor de software

    Houve um tempo em que uma paisagem ou o rosto de uma pessoa só podiam ser capturados em uma tela. Um pintor teria que estudar e praticar por anos como aprendiz, aprendendo o ofício da pintura – como misturar cores, quais ferramentas são melhores, as técnicas corretas para executar um visual específico. O custo do ofício e os muitos anos de experiência necessários para realizá-lo bem também significavam que os pintores eram poucos e distantes entre si.

    Então a câmera foi inventada. E com o clique de um botão, paisagens e retratos foram capturados em um segundo que, de outra forma, levaria dias ou semanas para serem pintados. E à medida que as câmeras melhoraram, ficaram mais baratas e se tornaram abundantes a ponto de agora serem incluídas até mesmo no smartphone mais básico, capturar o mundo ao nosso redor se tornou uma atividade comum e casual da qual todos agora participam.

    À medida que as abstrações avançam e as novas linguagens de software automatizam cada vez mais o trabalho rotineiro de desenvolvimento de software, o que significará ser um desenvolvedor de software daqui a 10 a 20 anos? Para responder a essa pergunta, vamos ver como os futuros desenvolvedores de software provavelmente irão construir os aplicativos de amanhã:

    *Primeiro, todo o trabalho de codificação repetitivo e padronizado desaparecerá. Em seu lugar, haverá uma vasta biblioteca de comportamentos de componentes predefinidos, interfaces de usuário e manipulações de fluxo de dados (partes Ikea).

    *Como hoje, empregadores ou empreendedores definirão metas e resultados específicos para desenvolvedores de software executarem por meio de aplicativos ou plataformas de software especializados.

    *Esses desenvolvedores irão então mapear sua estratégia de execução e começar a prototipar os primeiros rascunhos de seu software acessando sua biblioteca de componentes e usando interfaces visuais para vinculá-los – interfaces visuais acessadas por meio de realidade aumentada (AR) ou realidade virtual (VR).

    *Sistemas especializados de inteligência artificial (IA) projetados para entender as metas e resultados implícitos nos rascunhos iniciais de seus desenvolvedores refinarão o projeto de software elaborado e automatizarão todos os testes de garantia de qualidade.

    *Com base nos resultados, a IA fará uma infinidade de perguntas ao desenvolvedor (provavelmente por meio de comunicação verbal semelhante ao Alexa), buscando entender e definir melhor os objetivos e entregas do projeto e discutir como o software deve agir em vários cenários e ambientes.

    *Com base no feedback do desenvolvedor, a IA aprenderá gradualmente sua intenção e gerará o código para refletir os objetivos do projeto.

    *Esta colaboração homem-máquina irá iterar versão após versão do software até que uma versão finalizada e comercializável esteja pronta para implementação interna ou para venda ao público.

    *Na verdade, essa colaboração continuará depois que o software for exposto ao uso no mundo real. À medida que bugs simples são relatados, a IA os corrigirá automaticamente de uma maneira que reflita os objetivos originais e desejados descritos durante o processo de desenvolvimento de software. Enquanto isso, bugs mais sérios exigirão uma colaboração entre humanos e IA para resolver o problema.

    No geral, os futuros desenvolvedores de software se concentrarão menos no 'como' e mais no 'o quê' e no 'porquê'. Serão menos artesãos e mais arquitetos. A programação será um exercício intelectual que exigirá pessoas que possam comunicar metodicamente a intenção e os resultados de uma maneira que uma IA possa entender e, em seguida, codificar automaticamente um aplicativo ou plataforma digital finalizada.

    Desenvolvimento de software baseado em inteligência artificial

    Dada a seção acima, está claro que sentimos que a IA desempenhará um papel cada vez mais central no campo de desenvolvimento de software, mas sua adoção não é puramente com o objetivo de tornar os desenvolvedores de software mais eficazes, também existem forças de negócios por trás dessa tendência.

    A competição entre as empresas de desenvolvimento de software está ficando mais acirrada a cada ano que passa. Algumas empresas competem comprando seus concorrentes. Outros competem na diferenciação de software. O desafio com a última estratégia é que ela não é facilmente defensável. Qualquer recurso de software ou melhoria que uma empresa oferece a seus clientes, seus concorrentes podem copiar com relativa facilidade.

    Por esse motivo, já se foram os dias em que as empresas lançavam novos softwares a cada um ou três anos. Hoje em dia, as empresas que se concentram na diferenciação têm um incentivo financeiro para lançar novos softwares, correções de software e recursos de software cada vez mais regularmente. Quanto mais rápido as empresas inovam, mais fidelizam os clientes e aumentam o custo de mudança para concorrentes. Essa mudança para a entrega regular de atualizações incrementais de software é uma tendência chamada “entrega contínua”.

    Infelizmente, a entrega contínua não é fácil. Apenas um quarto das empresas de software de hoje pode executar o cronograma de lançamento exigido por esta tendência. E é por isso que há tanto interesse em usar a IA para acelerar as coisas.

    Conforme descrito anteriormente, a IA acabará desempenhando um papel cada vez mais colaborativo na elaboração e desenvolvimento de software. Mas, no curto prazo, as empresas o estão usando para automatizar cada vez mais os processos de garantia de qualidade (teste) de software. E outras empresas estão experimentando o uso de IA para automatizar a documentação de software – o processo de rastreamento do lançamento de novos recursos e componentes e como eles foram produzidos até o nível do código.

    No geral, a IA desempenhará cada vez mais um papel central no desenvolvimento de software. As empresas de software que dominam seu uso precocemente terão um crescimento exponencial em relação a seus concorrentes. Mas, para obter esses ganhos de IA, o setor também precisará ver avanços no lado do hardware – a próxima seção elaborará esse ponto.

    Software como serviço

    Todo tipo de profissional criativo usa o software Adobe ao criar arte digital ou trabalho de design. Por quase três décadas, você comprou o software da Adobe como um CD e manteve seu uso perpétuo, comprando futuras versões atualizadas conforme necessário. Mas em meados da década de 2010, a Adobe mudou sua estratégia.

    Em vez de comprar CDs de software com chaves de propriedade irritantemente elaboradas, os clientes da Adobe agora teriam que pagar uma assinatura mensal pelo direito de baixar o software da Adobe em seus dispositivos de computação, software que funcionaria apenas com uma conexão de Internet regular a constante para servidores da Adobe .

    Com essa mudança, os clientes não possuem mais software da Adobe; eles alugaram conforme necessário. Em troca, os clientes não precisam mais comprar constantemente versões atualizadas do software Adobe; desde que assinassem o serviço da Adobe, eles sempre teriam as atualizações mais recentes carregadas em seu dispositivo imediatamente após o lançamento (geralmente várias vezes por ano).

    Este é apenas um exemplo de uma das maiores tendências de software que vimos nos últimos anos: como o software está fazendo a transição para o serviço em vez de um produto autônomo. E não apenas softwares menores e especializados, mas sistemas operacionais inteiros, como vimos com o lançamento da atualização do Windows 10 da Microsoft. Em outras palavras, software como serviço (SaaS).

    Software de autoaprendizagem (SLS)

    Com base na mudança do setor para SaaS, está surgindo uma nova tendência no espaço de software que combina SaaS e IA. Empresas líderes da Amazon, Google, Microsoft e IBM começaram a oferecer sua infraestrutura de IA como um serviço para seus clientes.

    Em outras palavras, a IA e o aprendizado de máquina não são mais acessíveis apenas aos gigantes do software, agora qualquer empresa e desenvolvedor pode acessar recursos de IA on-line para criar software de autoaprendizagem (SLS).

    Discutiremos o potencial da IA ​​em detalhes em nossa série O Futuro da Inteligência Artificial, mas para o contexto deste capítulo, diremos que os desenvolvedores de software atuais e futuros criarão SLS para criar novos sistemas que antecipem tarefas que precisam ser feitas e basta completá-los automaticamente para você.

    Isso significa que um futuro assistente de IA aprenderá seu estilo de trabalho no escritório e começará a concluir tarefas básicas para você, como formatar documentos como você gosta, redigir seus e-mails no seu tom de voz, gerenciar seu calendário de trabalho e muito mais.

    Em casa, isso pode significar ter um sistema SLS para gerenciar sua futura casa inteligente, incluindo tarefas como pré-aquecer sua casa antes de chegar ou acompanhar os mantimentos que você precisa comprar.

    Até a década de 2020 e até a década de 2030, esses sistemas SLS desempenharão um papel vital nos mercados corporativo, governamental, militar e de consumo, ajudando gradualmente cada um a melhorar sua produtividade e reduzir o desperdício de todos os tipos. Abordaremos a tecnologia SLS com mais detalhes posteriormente nesta série.

    No entanto, há uma captura para tudo isso.

    A única maneira de os modelos SaaS e SLS funcionarem é se a Internet (ou a infraestrutura por trás dela) continuar a crescer e melhorar, juntamente com o hardware de computação e armazenamento que executa a 'nuvem' em que esses sistemas SaaS/SLS operam. Felizmente, as tendências que estamos acompanhando parecem promissoras.

    Para saber como a Internet crescerá e evoluirá, leia nosso Futuro da Internet Series. Para saber mais sobre como o hardware do computador avançará, continue lendo usando os links abaixo!

    Série Futuro dos Computadores

    Interfaces de usuário emergentes para redefinir a humanidade: Futuro dos computadores P1

    A revolução do armazenamento digital: o futuro dos computadores P3

    Uma Lei de Moore em desvanecimento para desencadear uma repensação fundamental dos microchips: Futuro dos Computadores P4

    A computação em nuvem torna-se descentralizada: Futuro dos Computadores P5

    Por que os países estão competindo para construir os maiores supercomputadores? Futuro dos Computadores P6

    Como os computadores quânticos mudarão o mundo: Futuro dos Computadores P7    

    Próxima atualização programada para esta previsão

    2023-02-08

    Referências de previsão

    Os seguintes links populares e institucionais foram referenciados para esta previsão:

    Os seguintes links do Quantumrun foram referenciados para esta previsão: