Olá, pessoal. Depois de um tempo sem escrever aqui para o iMasters, resolvi voltar a falar sobre um assunto de que gosto muito: a programação. Quem acompanha o conteúdo que produzo deve lembrar que já abordei várias vezes esse tema, incluindo visualização de algoritmos, aprendizado de programação de forma divertida, manutenção de código legado e até sobre produtividade.
Desta vez, pensei em escrever algo para ajudar a contribuir para o projeto Ano do Código, que incentiva pessoas a aprender a programar. Esse projeto foi baseado na iniciativa americana chamada Hour of Code, e o vídeo abaixo apresenta mais detalhes sobre ele.
Bem, antes de começar a falar um pouco sobre o caminho e as direções que podem ajudar a compreender como possivelmente será a programação no futuro, gostaria de olhar para passado e ver como as pessoas imaginariam que seria a programação nos dias atuais. Um ótimo exercício de como seria isso é apresentado no vídeo abaixo, que contêm uma palestra feita nos dias atuais (2013), mas com um detalhe: o palestrante assumiu o papel de um pesquisador dos anos 1970 que estudava como seria a programação no futuro. Quem realmente estudou a história da programação ou participou de cursos teóricos sobre computação pode compreender melhor como era previsto o futuro da programação (e também os sarcasmos do apresentador). Na minha opinião, o vídeo é imperdível mesmo para aqueles que estão começando agora.
Após essa aula de história e reflexões, pensei em falar um pouco sobre como seria a programação no futuro a partir das novas abordagens, técnicas, recursos e ideias que temos atualmente.
Para começar, acredito que é altamente provável que em um futuro próximo ou distante vamos continuar com o modelo clássico e tradicional: a programação manual através da edição de linhas de código textuais em arquivos. Esse modelo de desenvolvimento pode até ser reduzido e relegado a contextos específicos, mas continuará a ser suportado e usado. Posto isso, gostaria de discutir algumas abordagens que podem influenciar muito como a tarefa de programação será realizada no futuro. Sim, vamos continuar vendo novas abstrações, componentes, interface gráficas, IDEs e outros recursos cada vez melhores para auxiliar a digitação manual das instruções para um computador ou dispositivo computacional na sua forma mais genérica, independentemente de qual representação física ele assuma.
Melhorias em IDEs, intellisence, auto-complete, code snipets, debugs, emuladores para desenvolvimento sem dispositivos e técnicas parar ligar o código diretamente a modelos vão continuar se aprimorando, pois elas auxiliam muito a tarefa de codificar e, de um ponto de vista mais genérico, desenvolver.
Talvez o primeiro exemplo interessante a ser citado seja o uso das abstrações, elementos visuais e modelo de programação utilizado pelo Scratch. Certamente essa ferramenta é muito interessante e vem sendo utilizada por muita gente (inclusive crianças) que estão tendo o primeiro contato com a programação.
Seguindo mais ou menos essa linha e se concentrando no ensino básico de programação em Java, temos o projeto Jeliot. Esse IDE anima a execução de certas tarefas a serem realizadas por um programa em Java e representa um ótimo ponto de partida para ensinar tecnicamente como a programação funciona. O vídeo abaixo mostra um exemplo de como programas simples podem ganhar vida e ajudar a despertar o interesse por programação.
Outro exemplo que também emprega novos conceitos para o IDE é o projeto Light Table, assim como algumas melhorias de edição de texto recentes evidenciadas pelo editor Sublime. Esses novos recursos são muito interessantes para trazer a informação que o programador precisa na hora em que ele está codificando e para facilmente permitir que ele edite o código de forma não convencional, respectivamente.
A combinação de games e programação não é algo exatamente novo, mas diversas abordagens vêm se destacando cada vez mais para quem quer aprender a codificar, apesar de ainda apenas arranharem a superfície do que esse tipo de combinação pode ser capaz. Apenas para citar um exemplo, o projeto Code Hero usa a mecânica de um jogo tipo FPS para ensinar conceitos básicos e fundamentais de programação em JavaScript.
Outra abordagem interessante é aquela que mistura imagens e vídeos junto com o texto do código fonte. Alguns desenvolvedores podem não gostar desse conceito a princípio, mas para casos específicos como a detecção de áreas da tela ou para ensinar para um robô que tipo de ação ele deve fazer, isso pode fazer muito sentido e ser uma ajuda crucial para evitar muitas e muitas linhas de código.
E que tal programar através de dobraduras? Com a perspectiva de dispositivos móveis com telas curvas e maleáveis, já existem diversos gestos de manipulação desses materiais catalogados que podem não apenas ser utilizados para interagir de formas diferentes, mas também ser empregados para a programação.
A programação em si não mais precisa ser feita por apenas uma pessoa. Isso já é realidade através do uso de diversas técnicas, mas já está se explorando como se programa por crowdsourcing. Esse tipo de programação não é simplesmente colocar a tarefa que precisa ser feita em uma plataforma do tipo Mechanical Turk, mas sim contar com a ajuda de outras pessoas enquanto se está programando. Imaginem só: você está escrevendo um IF e antes mesmo de terminar de escrever a linha alguém viu o que você fez e já indicou uma sugestão ou correção. Esse cenário pode levantar várias questões relevantes sobre privacidade, praticidade, autoria e colaboração, mas é uma possível direção de como poderíamos programar no futuro.
E que tal aproveitar a experiência que as pessoas possuem em utilizar interfaces de toque e buscadores como o Google e Bing para programar? Já existem pesquisas explorando o conceito de touch e keyword programming, no qual a programação é feita através da pesquisa por diversos templates de programação, como o vídeo abaixo demonstra.
Focando em um tópico atual e que gera muita discussão, o uso de aprendizado e programação de Drones é mais uma nova maneira de se encarar a tradicional tarefa de programação e também de pensar em novas maneiras na qual ela pode ser representada. Ainda existem muitos desafios para se alcançar nesse contexto, mas algumas iniciativas como a conferência que permitiu a programação de quadcópteros por Javascript representam passos significativos na direção de aspectos de programação antes limitados a muito poucas pessoas. Aqui, o foco não é apenas em testar novos algoritmos em um drone, e sim avaliar novas formas de pensar e estruturar o código para suportar as características únicas da plataforma.
E, para finalizar, uma abordagem que está atualmente atraindo muito a minha atenção: o uso de tecnologias interfaces neurais por dispositivos do tipo BCI (Brain Controlled Interfaces) para programar um computador diretamente através do pensamento. Já conduzi alguns estudos nesta área e, com a recente exposição que essa tecnologia vai ter na abertura da Copa do Mundo de Futebol de 2014, o interesse por esse tipo de abordagem tende a aumentar.
Será que chegaremos em um futuro no qual não apenas teremos uma imersão completa no mundo digital, mas também aproveitaremos as tecnologias para esse fim na área da programação? Ainda não tenho essa resposta, mas toda a vez que uma nova tecnologia digital surge sempre vai haver alguém que se interessa por ela a ponto de pesar em como programá-la ou mesmo utilizá-la para explorar nova maneiras de se programar.