Buscar
  • Filipe Lúcio

JAVASCRIPT: A LINGUAGEM MAIS INCOMPREENDIDA

JavaScript é, por necessidade, uma das linguagens de programação da Web mais amplamente utilizadas. Em contraste, suas bases e princípios mais fundamentais não são compreendidos pela maioria dos desenvolvedores que acreditam conhecer a linguagem bastante bem. Para saber como surgiu essa situação, devemos conhecer sua evolução ao longo da curta história da Web:


Foi em 1995 quando Brendan Eich foi contratado para desenvolver uma linguagem de script para a versão 2.0 do anteriormente famoso "Netscape Navigator". A Netscape recentemente adicionou suporte para a tecnologia Java da Sun, então eles pediram a Brendan para desenvolver uma linguagem que fosse como o irmão pateta do Java e o JavaScript nasceu, como uma linguagem tão simples que até mesmo os hobbistas poderiam usá-la. A propósito, se você não quer soar como um amador, nunca cometa o erro clássico de se referir ao JavaScript como Java.


A Microsoft teve que incorporar essa nova linguagem de script ao Internet Explorer para ser competitiva na corrida da tecnologia da web.


Mas o tempo passou, a Netscape perdeu a guerra dos navegadores com a Microsoft e seus desenvolvedores liderados por Brendan, formaram a fundação Mozilla que atualmente organiza o desenvolvimento das seguintes versões do JavaScript. É por isso que o seu navegador, Firefox, é o que melhor oferece suporte aos novos recursos de idioma.


Programadores e o JavaScript

Muito se fala de JavaScript, mas nem todos possuem conhecimento sobre.

Nesse ponto, surgem muitos programadores que, baseados em bibliotecas desenvolvidas por outros, podem fingir que conhecem JavaScript, até que sejam solicitados a desenvolver algo fora do que a biblioteca ou os plug-ins que podem encontrar permitem. Plugins que muitas vezes são desenvolvidos por pessoas que também não entendem muito bem a linguagem, então podemos encontrar bugs sérios, como vazamentos de memória que fazem o computador travar ao deixar a página aberta por um tempo.


Quando o JavaScript é usado no servidor, com o não tão recente Node.js, a situação é muito pior, em um ambiente onde quase todas as chamadas são assíncronas, onde muito mais código precisa ser implementado e os desenvolvedores não entendem a linguagem, uma quantidade de espaguete, repetição e erros é gerada no código que torna esses tipos de projetos impossíveis de manter.


O problema com esses desenvolvedores é que eles aprenderam a usar a linguagem anos atrás e mesmo com livros e tutoriais desatualizados, saindo com a falsa sensação de que já dominaram a linguagem para sempre, mas essa não é a realidade. JavaScript, como todas as outras tecnologias na Web, é uma linguagem que nunca é totalmente compreendida porque está em constante evolução, e aqueles que não têm a capacidade de ser autodidata não podem segui-la. Muitos dos desenvolvedores que aprenderam com a documentação das primeiras versões do JavaScript, quando o JavaScript era uma linguagem fácil, não perceberam como ele evoluiu para um tipo de linguagem orientada a objetos diferente de qualquer outra.


Conceitos

JavaScript possuem diversas caracterisiticas, e por conta disso, ela é uma das linguagens mais dificeis de se aprender.

Conceitos básicos como encerramentos, herança prototípica, interpretando o contexto disso de acordo com a chamada ou simplesmente entendendo qual é o escopo de uma variável, são conceitos que muitos programadores soam como chineses ou não sabem que devem ser entendidos de uma forma diferente em JavaScript. Essas diferentes características que o JavaScript atual possui em relação a outras linguagens, é o que o torna uma das linguagens mais difíceis de aprender.


function foo1(){ this.var1 = 2; this.var2 = 3; var4 = 10; var var5 = 11; } function foo2(){ this.var1 = 0; this.var4 = 7; } var obja = new foo2(); foo2.prototype.var3 = 5; foo2.prototype = new foo1(); foo2.prototype.var3 = 6; var objb = new foo2(); var objc = new foo2(); objb.var4 = 8; console.log("obja.var3: " + obja.var3); console.log("obja.var2: " + obja.var2); console.log("objb.var3: " + objb.var3); console.log("objb.var1: " + objb.var1); console.log("objb['var4']: " + objb['var4']); console.log("objb.var2: " + objb.var2); obja.var1 = 10; obja.constructor.prototype.var2 = 9; console.log("objc.var1: " + objc.var1); console.log("objc.var2: " + objc.var2); console.log("var4: " + var4); console.log("(typeof var5): " + (typeof var5)); var var6 = '!'; var foo3 = function(var7){ console.log("(typeof var6) +' '+ var4: " + (typeof var6) + ' ' + var4); var var6 = 'hola'; this.var6 = 'adios'; return function(var7){ var var8 = {}; var8.a = 12; var var9 = 14; this.show = function(){ console.log( 'var6 + var7: ' + var6 + var7 ); }; this.getVar8 = function(){ return var8; }; this.getVar9 = function(){ return var9; }; }; }(); foo3.var6 = 'adios'; var objd = new foo3(' mundo'); objd.show(); var aux = objd.getVar8(); aux['a'] = 13 aux = objd.getVar9(); aux = 15; console.log('objd.getVar8().a '+objd.getVar8().a); console.log('objd.getVar9() '+objd.getVar9()); foo4.apply(obja); console.log(var6); function foo4(){ console.log('this.var1: ' + this.var1); }


Todos podem aprender

Quando falamos em código cliente em um navegador, esse desconhecimento vai além da linguagem e dos métodos definidos no ECMAScript, chegando aos objetos DOM e BOM que o navegador fornece à linguagem. Por exemplo, não é incomum encontrar programadores que nunca ouviram falar do bubbling ou captura de evento definido no DOM Nível 2 (a especificação mais recente é 3 e 4 está em desenvolvimento) e não vamos falar sobre novas extensões e APIs definidas. pelo WHATWG na especificação HTML5, como Web workers, Web Sockets ou Web storage.


Se formos aos conceitos avançados da língua, o que acontece com 99% dos desenvolvedores, não é que soe como chinês, mas sim como a língua do céu, que é o que os chineses dizem quando querem dizer que algo lhes soa familiar. para o chinês. Refiro-me a conceitos como padrões de programação (por exemplo currying ou memoização), saber como medir o desempenho e como otimizar o código, saber quais partes não devem ser usadas (que foram mantidas para compatibilidade com versões anteriores), compreender o complexidade ciclomática, sabendo como usar ferramentas para medir a qualidade do código, ferramentas para realizar testes de unidade, etc.




76 visualizações

© 2018-2020 por Filipe Lúcio de Andrade