Antes que você comece a ler este artigo, eu gostaria de dizer que este é um artigo de perguntas, não de respostas. Que este é um artigo sobre educação, não sobre por que a linguagem X é melhor que a Y. Sei que talvez você queira desistir de ler ele agora, afinal, não estamos acostumados a nos preocupar com educação neste país, e nossa geração não deseja perguntas complicadas, mas sim respostas prontas.
Sem julgamentos. Pode ir.
Não estou escrevendo este artigo para ganhar cliques ou vender meus livros. Estou escrevendo o mesmo por algo muito maior do que interesses financeiros, pelo futuro que estamos construindo hoje. Lendo você vai entender o que quero dizer.
Se preferir, pode assistir a este vídeo, com o mesmo conteúdo.
Eu + Tecnologia + Educação
Trabalho com TI desde 2006, quase sempre como desenvolvedor de software em linguagens de programação bem tradicionais e “corporativas” como Java e C#. Tenho graduação e pós-graduação na área e tive a oportunidade de trabalhar em várias empresas e dezenas de projetos de todos tamanhos e plataformas, sempre com Java e C#.
Em 2010 passei a lecionar cursos livres e mais tarde disciplinas de graduação em faculdades da Grande Porto Alegre. Oficialmente, com carteira assinada, sou professor do ensino superior há quatro anos em uma grande rede de educação do RS, a QI. Como a maioria das faculdades, ensinamos a linguagem Java aos nossos alunos e, ocasionalmente, a linguagem C# a pedido deles.
Posso dizer tranquilamente que estas duas tecnologias, Java e C#, moldaram toda minha carreira até hoje, sendo que durante muito tempo foquei todos os meus esforços em ser o melhor desenvolvedor possível nelas. Não ao mesmo tempo, mas em momentos distintos da minha vida profissional.
Então por que venho falar hoje de JavaScript ao invés de Java? E por que cito Stanford no título deste artigo?
Uma coisa de cada vez. Primeiro vamos começar por Stanford.
Stanford University
Certamente você já deve ter ouvido falar de Stanford, mas vou frisar alguns pontos aqui antes de continuarmos.
Segundo a Wikipedia, Stanford é uma das instituições de ensino mais prestigiadas do mundo, com a maior seletividade de graduação e a posição de primeira colocada em várias pesquisas e medições nos Estados Unidos. Mesmo que você não acredite na veracidade de alguma dessas pesquisas, em TODAS elas Stanford se encontra entre as Top 5 dos EUA.
Ela foi fundada em 1891 e fica em Palo Alto, na Califórnia, na região conhecida como Vale do Silício, um dos maiores pólos de empreendedorismo e inovação tecnológica mundialmente falando. Na verdade sessenta anos antes de surgir o Vale do Silício já existia Stanford então certamente ela teve uma importância muito grande na região, principalmente considerando que grandes nomes como Google, HP, Yahoo!, Sun e Nike nasceram dentro das dependências dessa faculdade. Estima-se que, somando, essas empresas tenham mais de U$2.7 trilhões de faturamento hoje.
Anualmente mais de 19.000 estudantes se inscrevem para o processo seletivo mas apenas 12% conseguem entrar, sendo que destes 12% apenas 5% são estrangeiros, ou 0.6% do total.
Mas por que estou falando de Stanford? E que relação ela tem com JavaScript?
Calma, já vou chegar lá!
Stanford e o JavaScript
O estopim deste artigo foi uma notícia que li em abril desse ano em um site britânico que dizia em seu título (em tradução livre): “A disciplina de Introdução à Ciência da Computação da Universidade Stanford adota JavaScript, ao invés de Java”. O artigo original pode ser lido neste link, para que você tire suas próprias conclusões.
Eu fiz faculdade de Ciência da Computação e em um primeiro momento fiquei ultrajado com a notícia. Fui atrás de mais informações pra confirmar isso. E era verdade, como confirma este artigo do jornal estudantil Stanford Daily e no próprio portal que permite a matrícula nas disciplinas.
Como a “fase de negação” demora a terminar quando somos pegos de surpresa por uma informação que nos tira da zona de conforto, eu queria saber quem que autorizou isso. Eu jurava que era algum professor novato que havia entrado “ontem” em Stanford e estava querendo bagunçar tudo. Mas não era.
O doutor Eric Roberts (que recebeu seu PhD em 1980, quando eu nem era nascido ainda) é um professor emérito de Stanford que atua na universidade desde 1990, foi ele quem tomou esta decisão. E não, ele nunca foi um fã de JavaScript (assim como eu não sou), tendo inclusive publicado livros sobre C, C++ e Java ao longo de suas décadas lecionando, muitos dos quais são usados como referência nas disciplinas de Ciência da Computação de Stanford.
Como que um professor de Ciência da Computação aprovaria a troca de Java como linguagem de introdução por JavaScript? Uma linguagem de altíssimo nível que abstrai boa parte da complexidade inerente de estudar programação? JavaScript nem mesmo é Orientado à Objetos!!! Note que esses foram exatamente os meus pensamentos à ocasião, mas como ser pensante que sou, decidi investigar quais seriam os motivos por trás dessa escolha para entender.
Afinal, universidades centenárias não trocam de currículo da noite para o dia ou por causa de alguma “modinha”.
E, de fato, depois de estudar mas a fundo, não está parecendo que esse boom do JavaScript é uma “modinha”.
O fenômeno JavaScript
Tentando entender a escolha do dr. Roberts, fui refletir sobre o JavaScript na minha carreira e no mercado como um todo.
Eu programo um pouco de JavaScript desde 2007, quando comecei a mexer com tecnologias web. Mas só um pouco. Quase nada, apenas coisas auxiliares no front-end, que era praticamente todo renderizado e manipulado no back-end.
Ali por 2010 eu comecei a mexer mais a fundo quando descobri o poder e a praticidade do JQuery. Comecei a adicionar cada vez mais JavaScript aos meus projetos ao ponto de começar a escrever front-ends completamente em JavaScript, que consumiam micro-serviços escritos em uma linguagem de back-end por volta de 2012.
No entanto, ainda considerava JavaScript uma linguagem de “segunda-classe”, inferior se comparada a Java e C#, minhas favoritas. Mas isso começou a mudar em 2016 para mim.
Segundo o StackOverflow (2017), 62.5% da audiência deles programa em JavaScript, em algum grau. Ou dois a cada 3 programadores, aproximadamente.
Segundo o GitHub (2013), 21% dos repositórios criados na plataforma são de projetos escritos em JavaScript como principal tecnologia. Ou um em cada cinco projetos, a linguagem mais popular dentre todas na plataforma.
Nos últimos cinco anos aproximadamente, a linguagem JavaScript tem se tornado a escolha obrigatória para construção de front-ends fluidos, performáticos, dinâmicos, etc e, em muitas ocasiões graças ao Node.js, a escolha para o back-end também, criando o termo “full-stack JS”.
A programação back-end mundial, até poucos anos dominada pelo Java, aos poucos vem mostrando sinais de cansaço e JavaScript vem ganhando, aos poucos, cada vez mais força, enquanto o Java decai em todas os rankings possíveis (incluindo o Tiobe), como mostra a tendência de buscas por estas tecnologias no Google Trends:
Claro, boa parte da popularidade do JavaScript é como todos sabem: no front-end, como mostra a crescente (e recente) popularidade de frameworks como React e Angular nas pesquisas, mas também com a adoção em larga escala de Node.js (a plataforma de back-end que mais utilizo atualmente):
E se você acha que o volume de pesquisas do Google não nos permite tirar conclusões alguma, dê uma olhada na timeline de linguagens de programação utilizadas por Stanford na cadeira introdutória de Ciência da Computação desde 1990, quando o dr. Roberts entrou na instituição:
Agora compare com o Google Trends de 2004 para cá, buscando pelas mesmas linguagens (infelizmente o Google não disponibiliza dados antes de 2004, o que impossibilita de entender o quão populares eram C e Pascal na década de 90):
Note que Pascal já não é nada popular desde o início dos anos 2000, que C estagnou em popularidade ali por 2009 e que a diferença de popularidade entre Java e JavaScript nunca foi tão pequena quanto nos anos recentes.
As mudanças de linguagens geralmente acompanham tendências de ensino e de mercado/indústria e até mesmo feedbacks dos alunos e professores. E não são feitas da noite para o dia: em 1995 com o boom do Java, já cogitava-se usar a linguagem em Stanford, que começou a preparar terreno para fazer a troca, que só ocorreu em 2002, sete anos depois. No caso de JavaScript, faz cinco anos que estão reescrevendo todos os materiais das disciplinas e estudando a melhor forma de fazer essa transição, embora atualmente os alunos estão podendo optar entre Java e JavaScript (disciplinas CS106A e CS106J, respectivamente).
E quando falo de feedbacks, números como os abaixo preocupam as faculdades de computação no mundo inteiro (dados da faculdade onde trabalho, que pude confirmar com coordenadores de outras instituições gaúchas):
- aproximadamente 40% dos calouros desistem do curso de computação após a primeira disciplina de programação da faculdade (geralmente chamada de Algoritmos e geralmente com essa taxa de reprovação também);
- no semestre seguinte, na próxima cadeira de programação (Algoritmos II, Linguagens e Técnicas de Programação, etc), cerca de 25% desistem;
- somente a partir do semestre seguinte (no segundo ano de faculdade) que as turmas costumam estabilizar e as perdas de alunos são reduzidas a níveis aceitáveis como 10%;
De longe posso perceber enquanto professor que programação é o assunto que mais assusta em cursos de computação e o que mais impede dos estudantes de avançarem no curso, como o feedbacks abaixo (do jornal de Stanford) demonstra (traduzido livremente):
“Essa cadeira destrói a sua vida. Mas você aprende muito com essa destruição.”
Já uma professora de Stanford diz que:
“Os estudantes acreditam que essa cadeira tem o intuito de ‘limpar’ a faculdade, mas isso não é verdade.”
Acredito que estes comentários estão associados à complexidade da disciplina introdutória para quem vem “cru” do ensino médio (ou high school americano) aliado à complexidade das linguagens usadas pelas faculdades para introduzir algoritmos para os alunos, como C e Java sendo as escolhas mais populares aqui no Brasil e no exterior.
Fazendo uma comparação bem boba, mas reveladora, você sabe como é um “olá mundo”, a primeira instrução que se aprende em qualquer linguagem, em Java?
1 2 3 4 5 6 7 |
public class Hello { public static void main(String[] args) { System.out.println("Hello, world!"); } } |
E em C?
1 2 3 4 5 6 7 8 9 |
#include <stdio.h> int main (int argc, char** argv) { printf(“Hello, World!n”); return (0); } |
Agora compare com um Hello World em JavaScript, que faz exatamente a mesma coisa e me diga qual você acha que é mais fácil para um calouro iniciar no mundo da programação?
1 2 3 |
console.log('Hello, World!') |
E não é apenas Stanford, o famoso MIT usa Python nas disciplinas introdutórias, uma linguagem tão simples e tão poderosa quanto JS (ou talvez até mais!).
Mas por que eu deveria me preocupar com isso?
Afinal, azar é de quem não consegue avançar no curso de computação, não é mesmo?
Mais ou menos. E já vou explicar o porquê.
Por que se preocupar?
Você consegue adivinhar o que é a foto abaixo?
Uma fila de pessoas desempregadas. Em tempos de crise não são nenhuma novidade não é?
Mas você sabe em que país foi tirada essa foto?
Não, não foi no Brasil. Foi na Espanha.
Segundo a Wikipedia, o índice de desemprego na Espanha está pior que que aqui no Brasil: 17% dos espanhóis estão sem emprego contra 14% dos brasileiros. Na Grécia o índice é ainda pior: 23%. E esse problema é crônico em quase toda Europa com Itália (12%), França (10%) e Portugal (10%) figurando no topo dessa lista também.
Ou seja: não são apenas países ferrados e subdesenvolvidos da América Latina como nós que estão com grandes problemas nessa área.
Ah, mas isso é culpa da crise global, logo, logo, tudo vai melhorar…
Só que não.
Uma pesquisa da Universidade Oxford em 2013 constatou que até 2038, 47% dos empregos americanos deixarão de existir por causa da “computadorização” ou substituição do trabalhador humano por computadores.
E não precisa ser nenhum gênio para entender que estamos rumo ao mesmo futuro, talvez não na mesma velocidade, mas vai acontecer por aqui também. E em um mundo computadorizado, quem é que vai sempre ter emprego garantido?
Os programadores? (Viva pra nós!)
Quase. Já explico.
Uma outra pesquisa, dessa vez da OCDE em 2016, diz que 65% das crianças de hoje vão trabalhar em carreiras que ainda não existem.
O que isso quer dizer?
Eu não sei. Mas tenho algumas ideias.
Em um mundo “computadorizado”, o artista plástico não vai criar esculturas com a mão, mas programando uma impressora 3D. O motorista (se ele ainda existir) vai programar a sua rota no caminhão e estará na boleia apenas para emergências e situações não previstas, provavelmente analisando relatórios de suas viagens e cargas. O médico vai programar braços robóticos da melhor maneira para aquela cirurgia em questão, sem a necessidade dele ficar 100% do tempo na sala de cirurgia.
Sei lá, estou viajando aqui, é possível que você tenha as suas próprias ideias de profissões do futuro.
Você já ouviu falar na frase “Programe ou seja programado?”. Ela é de 2010, do professor e autor Douglas Rushkoff e dá pra ser entendida pelo vídeo abaixo:
Rushkoff entendeu que quando uma ferramenta é tão poderosa a ponto de mudar o mundo, como os computadores são, ou você aprende a programá-los para participar da criação dessa nova realidade, ou viverá na realidade criada por outras pessoas.
E isso pode ser considerado a marginalização do futuro. Viver sem saber operar um computador (não da forma como conhecemos hoje, mas de maneira ubíqua e onipresente como está se transformando) de maneira eficiente pode não ser apenas uma questão de escolher trabalhar como um programador, mas de escolher trabalhar como qualquer coisa que tenha sido “computadorizada”.
Camila Achutti, uma mestra em computação, defende inclusive que deveríamos ensinar programação nas escolas, como sendo o analfabeto digital aquele que não sabe criar programas de computador, apenas usa, em analogia a quem não sabe ler e compreender um livro, apenas olha as figuras. Você pode entender mais do trabalho de Camila no vídeo abaixo de 2016:
Como era a vida das pessoas antes de saber ler e escrever se tornar algo comum? Quem dominava tais habilidades tinha uma vantagem enorme frente aos iletrados. O mesmo acontece nos dias de hoje e acontecerá ainda mais no futuro.
Camila defende inclusive que, no pior dos casos, entender como os programas funcionam, lhe dará mais domínio de como você os usa. Um exemplo muito simples é entender a diferença entre um site com HTTP e com HTTPS por exemplo. É entender a política de privacidade de uma rede social e o que acontece quando você compartilha uma postagem.
O caso é: quanto mais fechamos a programação em uma caixa-preta blindada e inacessível para os “não iniciados”, mais o mundo inteiro perde. Quanto mais exclusivos os programadores forem, pode-se até pensar em ganho pessoal a curto prazo, mas no longo prazo, só há o caos.
Eu como o pai de um menino de 2 anos, não posso deixar que isso aconteça, ao menos não na vida dele.
O que podemos fazer?
O movimento recente de Stanford é um sinal de que não devemos apenas manter os currículos dos nossos cursos atualizados, mas sim melhores.
Se eu acho que JavaScript melhor que Java? Depende do projeto. Depende do contexto.
Para introduzir a programação para crianças e adolescentes, ou até mesmo para qualquer pessoa que está tendo seu primeiro contato com programação em toda sua vida?
Possivelmente um JavaScript ou um Python podem ser melhores mesmo.
Note que Stanford não abandonou as demais linguagens de programação que são vistas ao longo do curso de Ciência da Computação (ao longo de cinco anos eu devo ter visto mais de cinco linguagens diferentes). Ela apenas trocou Java por JavaScript na cadeira introdutória, para fazer com que mais pessoas consigam pegar o “gosto pela coisa”, que algoritmos seja algo mais “digerível” para pessoas normais.
O objetivo aqui não é formar programadores mais “fracos” e jogá-los no mercado de trabalho, até porque o intuito de nenhum bacharelado é formar programadores, mas sim cientistas.
Outra prestigiada faculdade, que eu já mencionei nesse artigo, o MIT, tem um projeto muito interessante também chamado Scratch, que já possui mais de uma década de vida. É uma ferramenta visual que lhe permite criar algoritmos usando blocos, incluindo jogos completos e interessantes de maneira muito fácil. Esta ferramenta inclusive tem sido usada em escolas ao redor do mundo nos eventos chamados Hora do Código.
Outro projeto, novamente do MIT (eu já mencionei como admiro eles?) é o APP Inventor, uma ferramenta na nuvem para construção de apps de maneira muito simples e visual!
Mas e eu? E você? O que podemos fazer?
Eu só conheço uma forma de realmente mudar a vida das pessoas: ensinando-as.
Só a educação te dá o poder para mudar a tua própria vida.
Eu sei que muitos não querem virar professores para ensinar programação, e que muitos não querem virar programadores também. Minha sugestão não é essa.
A minha sugestão é que você, nós, que somos não apenas adeptos de tecnologia, mas entendedores da mesma, ajudemos o próximo. Ajude aquela sua tia que quer um site, a criar o próprio site dela no Wix. Ajude aquele seu primo que só sabe fazer site no Wix, a criar sites usando WordPress, que é mais poderoso. Explique para sua mãe porque ela não pode publicar dados pessoais em sites sem HTTPS. Mostre para o seu pai o risco de colocar a foto da placa do carro dele na Internet, cruzando essa informação com as do Detran e tendo acesso a todos os dados pessoais dele como CPF e endereço. Mostre pro pessoal do seu escritório como as tarefas repetitivas podem ser eliminadas, e até otimizadas, usando o Zapier.
Ajude as pessoas que você se importa a não serem meros usuários, mas que entendam o que estão fazendo. Caçoe menos das “tosquices” deles e ajude mais.
Agora, se a pessoa tiver um mínimo de inclinação para algoritmos, ajude-a mostrando uma plataforma como Node.js (que usa JavaScript) ou Python e as maravilhas que são possíveis de fazer com elas. Ensine-a como usar o Google para encontrar mais informações das mesmas, como organizar seus projetos usando um Trello, como ganhar dinheiro com isso fazendo freelas.
Não guarde esses conhecimentos só pra si. Não finja que os “outros não saberem não é problema seu”. Lembra o tio Ben do Peter Parker? Ele dizia que com “grandes poderes vem grandes responsabilidades”. Ele foi assassinado por alguém que o homem-aranha não quis deter com seus poderes.
Ok, é uma história em quadrinhos e talvez agora você comece a duvidar da minha sanidade, mas não é difícil traçar um paralelo com a vida real e todas as pessoas marginalizadas que entram para o crime pois não tiveram oportunidades. Não, eu não estou defendendo bandidos aqui, estou querendo evitar que novos surjam, simples assim.
Continuando e encerrando, o dr. Werner Vogels (CTO da Amazon) tem uma célebre frase que diz: “A tecnologia é inútil se não for para o bem maior de servir os clientes.”. Eu vou mais longe e digo que “a inteligência é inútil se não for para o bem maior de ajudar as pessoas.”.
Ou você acha que guardar todo o conhecimento que você tem, apenas para si, vai lhe trazer algum outro benefício exceto ser o cadáver mais inteligente do cemitério?
Olá, tudo bem?
O que você achou deste conteúdo? Conte nos comentários.
Parabéns pelo texto professor, gostei muito. Curiosamente aqui na Faculdade de Tecnologia de Taquaritinga, no curso de Sistemas para Internet, tomei essa mesma decisão sem saber sobre o caso de Stanford, mas considerando dados de mercado (alguns inclusive ilustrados em seu texto). Fiquei muito contente em ver uma análise mais aprofundada desta tendência.
Muito bom saber disso e adoraria poder conversar contigo a respeito do progresso que estão tendo. Me procura nas redes sociais, tem os links na sidebar da esquerda do blog.
Claro, também é de meu interesse conversar mais sobre isto. Enviei mensagem pelo Facebook.
Ótimo texto.
Provavelmente, no meu curso(Analise de sistemas),uma iniciativa parecida será adotada para a próxima turma que entrar (2018.1), devido ao grande índice de reprovação e geração de desinteresse lá no começo do curso, na disciplina de algoritmos
No Java 9 foi introduzido o Java REPL, que nada mais é que um interpretador Java, que faz o hello world, ficar tão simples quanto em JavaScript, justamente para incentivar e facilitar a aprendizagem dos novatos.
Toda linguagem deveria ter um REPL, é muito útil não apenas para novatos mas para testes rápidos, solucionar dúvidas, etc. Node tem, C# tem, etc. É bom saber que o Java 9 vai ter também. O lançamento é agora no final do mês, não é?
Antes de Java 9, me fazia falta um tipo de console em Java para fazer testes rápidos assim como eu fazia em Javascript, foi ai que conheci o conceito do que é um REPL.
Como não tinha nada nativo, encontrei este plugin na época que ajudou bastante:
https://plugins.jetbrains.com/plugin/7215-java-repl
O legal é que a comunidade consegue criar as coisas que sentem falta, e aí é uma questão de aceitação e tempo para virar oficial, mas dificilmente ficamos sem saída.
Agora isso vindo nativo da linguagem é bem legal.
A data de lançamento do Java 9 foi para 21 de setembro se eu não me engano.
Excelente conteúdo!
Artigo muito bom, realista e objetivo. Parabéns!
Parabéns pelo artigo e já compartilhando..
Execelente artigo. Parabéns !!
Que ótimo artigo!
“Programe ou seja programado” já falei isso uma vez antes de ler esse artigo. Mas me referia a falta de criatividade de colegas da CP. Sou formado em Geografia e apaixonado por programação. Estou aprendendo Java, e fiquei horrorizado com o titulo do artigo. Mas logo entendi. Hoje estou estudando programação para desenvolver um app. Porque nenhum amigo de CP ou Engenharia quis continuar com o projeto, e sempre que falava de Java eles tossiam a cara, ai percebia que poucos deles sabiam programar. E percebi que para programar em Java você precisa se debruçar sobre os livros antes de sair programando, entender o paradigma primeiro. E isso requer teoria, coisa que muita gente reclama. Vim parar neste blog pois estou estudando banco de dados melhor para o app, ai encontrei o MongoDB, destruindo meu mundo relacional. Parabéns pelo artigo!
Que legal sua história cara, é bem por aí mesmo. Tecnologia é isso mesmo, o cara tem de estar sempre “destruindo o seu mundo” se quiser continuar avançando como profissional.
Excelente artigo Luiz!
Abraço.
Valeu Gabriel!