sábado, 15 de julho de 2017

Nove linguagens de programação que vale a pena manter no radar

As linguagens de programação são populares por um motivo, em especial: oferecem uma base enorme de código aberto, bibliotecas e frameworks que facilitam o trabalho dos programadores. Mas, às vezes, os vastos recursos das linguagens de programação populares e convencionais não são suficientes para resolver um problema particular. Às vezes você tem que olhar para além do óbvio para encontrar o idioma certo, onde a estrutura certa faz a diferença ao oferecer recursos extras que ajudem seu código a ser executado significativamente mais rápido, sem ajustes e otimização infinitas. Produzir um código muito mais estável e preciso, evitando que você recorra a código desleixado ou incorreto.

O mundo é preenchido com milhares de idiomas inteligentes que não são C#, Java ou JavaScript. Alguns são estimados por apenas alguns, mas muitos têm comunidades florescentes conectadas por um amor comum pelas facilidades que proporcionam na solução de certos problemas.

Pode não haver dezenas de milhões de programadores que conheçam a sintaxe, mas às vezes há valor em fazer as coisas um pouco diferentes. Experimentar com qualquer nova linguagem pode pagar dividendos significativos em projetos futuros.

As nove linguagens a seguir devem estar no radar de cada programador. Elas podem não ser o melhor para cada trabalho - muitas são direcionadas a tarefas especializadas. Mas todas  oferecem upsides que valem a pena investigar e investir.

Pode chegar o dia em que cada uma dessas linguagens acabará se revelando exatamente o que seu projeto precisa.

1 - Kotkin - reconsiderando o javanês

O Java é um excelente idioma que suporta algumas das plataformas mais populares de todos os tempos, mas está ficando um pouco velho e os pontos de dor tornam-se um pouco mais conhecidos. o idioma Kotlin é filho do cérebro da equipe JetBrains na Rússia, que nos trouxe IDEs maravilhosos como o IntelliJ.

O Kotlin deve compilar rapidamente, coexistir com o Java e corrigir alguns dos piores problemas que ocupam o tempo dos desenvolvedores Java. Foi projetado para trabalhar com o código Java existente, tornando-se uma boa opção para equipes que desejam melhorar gradualmente uma base de código.

A melhor parte pode ser a atenção dada aos valores anuláveis, a falha de todos os programadores orientados a objetos. Se você achar que metade do seu código está procurando por valores nulos, os desenvolvedores da Kotlin ouviram seus apelos. Kotlin é uma ótima pedida para resolver esse problema, se não de uma vez por todas, pelo menos na maior parte do tempo, forçando os desenvolvedores a chamar explicitamente as variáveis ​​que podem ser nulas. Então, verifica automaticamente alguns dos piores erros que podemos fazer com eles. 

Esta estratégia cautelosa provou ser popular porque permite que a equipe adote a linguagem lentamente. O grupo Kotlin ganhou muitos fãs em grandes equipes de desenvolvimento de  grandes bancos, grupos de consultoria e empresas de aplicativos.  O Google reconheceu o valor do idioma e agora os desenvolvedores do Android que desejam usar o Kotlin são bem suportados.

2 - Erlang - programação funcional para sistemas em tempo real

A Erlang começou dentro dos domínios assustadores de telefones na Ericsson, a empresa de telecomunicações sueca. Quando os programadores da Ericsson começaram a se gabar de sua performance de "9 noves", oferecendo 99,9999999 por cento dos dados com Erlang, os desenvolvedores fora da Ericsson começaram prestar mais atenção na linguagem.

O segredo da Erlang é o paradigma funcional. A maior parte do código é forçada a operar em seu próprio mundo, onde não pode corromper o resto do sistema através de efeitos colaterais. As funções fazem todo o seu trabalho internamente, executando em pequenos "processos" que funcionam como sandboxes e conversam somente entre si através de mensagens de correio. Você não pode simplesmente pegar um ponteiro e fazer uma mudança rápida no estado em qualquer lugar na pilha. Mas precisa ficar dentro da hierarquia de chamadas. Pode exigir um pouco mais de raciocínio, mas os erros são menos propensos a se propagar.

O modelo também simplifica determinar o que no código pode ser executado ao mesmo tempo. Fãs de Erlang gostam de se gabar de executar 20 milhões de "processos" ao mesmo tempo em um servidor Web.

Se você está construindo um sistema em tempo real sem espaço para dados descartados, como um sistema de cobrança para uma chave de telefones celulares, então vale investir algum tempo conhecendo a linguagem Erlang.

3 - Go - Simplicidade e dinamismo 

Em 2009, o Google  lançou um idioma que se parece com o C, mas inclui inteligência em segundo plano para salvar os programadores de ter que especificar tipos e fazer malabarismos com chamadas de malloc. Com o Go, os programadores podem ter a textura e a estrutura do C compilado, juntamente com a facilidade de usar um idioma de script dinâmico.

A Sun e a Apple seguiram um caminho semelhante na criação do Java e do Swift, respectivamente, enquanto o Google tomou uma decisão significativamente diferente com Go: os criadores do idioma queriam manter Go "simples o suficiente para segurar a cabeça de um programador". Rob Pike, um dos criadores de Go , disse à Ars Technica que "às vezes você pode ganhar mais a longo prazo, abrindo mão de algumas coisas". Por isso, foram removidos recursos de linguagens de alto nível, como Classes, Heranças, Overloads de Métodos, Try/Catchs, Ternários etc.

O resultado? Uma linguagem open source multiplataforma, facilmente escalável, com uma gestão de memória própria e threads transparentes ao programador, simplista ao extremo.

O idioma está supostamente bem estabelecido dentro do vasto império do Google e está ganhando aceitação em outros lugares onde os amantes de linguagem dinâmica como Python e Ruby podem ser persuadidos a aceitar algum rigor que venha de uma linguagem compilada.

Se você é uma startup tentando usar as plataformas Google e precisa construir alguma lógica de negócios do lado do servidor,  Go é uma ótima opção para começar, já que endereça três necessidades básicas do Google: desempenho, escalabilidade e facilidade de manutenção.

codificacao

4 - OCaml - para complexas hierarquias de dados

Alguns programadores não querem especificar os tipos de suas variáveis, e para elas construímos os idiomas dinâmicos. Outros preferem especificar se uma variável contém um número inteiro, uma string ou talvez um objeto. Para eles, muitas das linguagens compiladas oferecem todo o suporte desejado.

Depois, há aqueles que sonham em hierarquias elaboradas. Eles imaginam listas e tabelas de tipos heterogêneos, polimorfismo, primitivas de correspondência de padrões e encapsulamento de dados.  Para eles, há OCaml, um esforço sério da comunidade de linguagem de programação para popularizar muitas dessas ideias.

OCaml é um idioma poderoso, permitindo expressar ideias e restrições complexas com tipos, mas, ao mesmo tempo, não obriga o programador a declarar os tipos das variáveis. Também inclui tipos de dados algébricos e pattern matching, duas características que, quem se acostuma a usar, passa a achar indispensáveis em qualquer linguagem. E possibilita o uso de características imperativas, facilitando a transição para quem não tem experiência prévia com programação funcional, reduzindo o tempo necessário para se tornar produtivo na linguagem.

Já que a programação funcional é um assunto cada vez mais frequente entre os desenvolvedores, OCaml é uma ótima opção para começar no paradigma. Programas escritos no idioma são compilados para código rápido (próximo do desempenho de C e C++), mas a linguagem é expressiva e de alto nível, similar a idiomas como Python e Ruby.

Há suporte a objetos, gerenciamento automático de memória e portabilidade de dispositivos, e vários aplicativos OCaml disponíveis na App Store da Apple .

5 - TypeScript - o JavaScript que você gostaria

Todos podem usar JavaScript, mas ninguém parece gostar de programar nela. Ou então, parece que todo mundo hoje tem seu pré-processador favorito ou superprocessador que  estende e melhora o idioma. TypeScript é o favorito da vez, pois adiciona tipos a todas as variáveis, algo que faz os programadores Java se sentirem um pouco mais seguros.

A grande razão pela qual mais desenvolvedores estão interessados ​​em TypeScript é a Angular , uma ótima estrutura para a construção de aplicativos Web escrita em TypeScript. Ok, você não precisa dominar TypeScript para usar Angular. Mas pode aproveitar a qualidade do seu código e mesclar com o seu legado JavaScript.

TypeScript é um superconjunto de JavaScript que se relaciona bem com o códigos JavaScript antigos, algo que pode ser bastante útil se houver pessoas no escritório que tenham opiniões dogmáticas sobre como os tipos estão diminuindo seu estilo. Os tipos são efetivamente opcionais e as pessoas que gastam tempo para especificar tipos podem colher as recompensas. 

A tipagem forte tem muitas vantagens, como pegar alguns erros anteriores e melhorar a qualidade geral das ferramentas. A adição de tipos permite que os editores inteligentes o ajudem com sugestões inteligentes enquanto você desenvolve sua obra-prima. A conclusão do código é muito mais rápida e precisa quando as rotinas de conclusão do código sabem algo sobre as funções e os argumentos. Isso significa menos movimento dos dedos no teclado.

Os amantes de TypeScript têm certeza de que vantagens como essas atrairão alguém que  esteja em dúvida a respeito do poder de uma linguagem fortemente determinada. 

6 - Rust - linguagem de sistema segura e funcional

Os programadores front-end não são os únicos que se divertem. Rust é como uma versão remodelada de C com muita tipografia polimórfica misturada sob o capô. Nos últimos dois anos, figura na lista de  "linguagem de programação mais amada", elaborada pela comunidade Stack Overflow, uma honra que também se reflete no índice de popularidade da linguagem Stack Overflow. A apenas alguns anos atrás, Rust aparecia na posição 50 da lista, e este ano saltou para 18. 

Por quê? Talvez por seus princípios: segurança sem "coletor de lixo", concorrência sem corrida de dados e abstração sem overhead. Eles fazem com que Rust seja rápida para ser usada em aplicações de baixo e prática para projetos de alto nível.  Você obtém toda a diversão hard-core, de alto desempenho, semelhante a escrever C, com um compilador que capturará muitos dos piores erros antes que o código seja executado.

Quando implementado, o compilador personaliza a estrutura para cada tipo, algo que os desenvolvedores gostam de chamar de "monomorfismo". O idioma adiciona alguns outros limites para evitar que os desenvolvedores saiam dos trilhos. Cada valor, por exemplo, é "de propriedade", o que realmente significa que só pode ser consumido uma vez, impedindo uma rede emaranhada de referências de outras partes do programa que atuam como se tivessem controle total sobre um valor.  

codecio

7 - Scala - programação funcional na JVM

Se você precisar da simplicidade, mas ama o paradigma funcional, você tem várias opções. E se Java for seu domínio, Scala é a escolha certa para você.

Scala é uma linguagem de programação de propósito geral baseado em dois paradigmas: o orientado a objetos e funcional. Executada na JVM, traz todas as restrições de design limpo da programação funcional para o mundo Java, fornecendo um código que se encaixa com as especificações da classe Java e links com outros arquivos JAR.

O mecanismo de tipo é fortemente estático e o compilador faz todo o trabalho para inferir tipos. Não há distinção entre tipos primitivos e tipos de objetos. A sintaxe é muito mais simples e limpa do que o Java.  

Aliás, uma das maiores diferenças do Scala em relação ao Java, é na forma em que funções podem ser usadas, pois em Scala funções são objetos e, por isso, elas podem ser utilizadas de muitas formas, como por exemplo, serem passadas como parâmetros em outras funções, permitindo uma grande flexibilidade no código.

Além diso, Scala também é uma linguagem orientada a objetos, permitindo a criação de classes com todos os conceitos de orientação a objetos, como herança, polimorfismo e associação entre classes. A definição da classe não é muito diferente da forma que é feita em Java, pois a principal diferença é que a classe aceita parâmetros, como é possível verificar logo na linha da declaração. Esses parâmetros devem ser passados no momento da criação das instâncias da classe, substituindo o construtor.

Você tem um projeto de Big Data, compreende o domínio do problema, sabe qual infraestrutura utilizar e talvez tenha até decidido sobre qual framework utilizará para processar todos esses dados. Porém, uma pergunta decisiva ainda paira no ar: Qual linguagem utilizar? Scala pode ser uma boa opção.

Ela é o casamento mais bem-sucedido dos paradigmas funcionais e orientados a objeto, e está avançando a largos passos no mundo financeiro e em empresas que precisam operar grandes volumes de dados, muitas vezes de modo massivo (como o Twitter e a LinkedIn). Também é a linguagem por detrás do Spark e do Kafka.

Se você precisa manipular os dados em um cluster de mil processadores e tem uma pilha de código Java legado, Scala é uma ótima solução.

Um ponto ruim? O compilador de Scala é um pouco lento, ao ponto de que ele nos leva de volta aos dias da “compilação” clássica com XKCD. Ainda assim, ele possui REPL, suporte a big data e notebooks baseados em web no formato de Jupyter e Zeppelin.

scala

8 - Haskell: programação funcional, pura e simples

Por mais de 20 anos, os acadêmicos que trabalham na programação funcional têm desenvolvido ativamente o idioma Haskell, destinado a encapsular efeitos colaterais. É uma das expressões mais puras do ideal de programação funcional, nomeada em homenagem ao lógico Haskell Curry.  Aliás, a maioria dos nomes relacionados ao idioma faz referências à Escócia, um viveiro da pesquisa Haskell, ou a filósofos e lógicos por trás de muitas das ideias expressas na concepção do idioma. Entre eles, a ênfase no que deve ser feito (what), em detrimento de como deve ser feito (how).

Possui mecanismos para lidar com canais de I/O e outros efeitos colaterais inevitávei, suporte a funções recursivas e tipos de dados, casamento de padrões, list comprehensions, guard statements e avaliação preguiçosa. E a combinação destas características faz com que a construção de funções que seriam complexas em uma linguagem procedimental de programação tornem-se uma tarefa quase trivial em Haskell.

A comunidade é muito ativa, com mais de uma dúzia de variantes de Haskell disponíveis para você explorar. Algumas são autônomas, e outros são integradas ao Java (Jaskell, Frege) ou Python (Scotch).

Se você acredita que suas estruturas de dados serão complexas e cheias de muitos tipos, Haskell irá ajudá-lo a mantê-los na linha.

9 - Julia: trazendo velocidade para o mundo Python

O mundo da programação científica é preenchido com amantes de Python que desfrutam da sintaxe simples e a liberdade de evitar pensar em detalhes desagradáveis como ponteiros e bytes. Por todos os seus pontos fortes, no entanto, Python é muitas vezes lento, o que pode ser um problema se você estiver trabalhando com grandes conjuntos de dados como é comum no mundo da computação científica. Para acelerar as questões, muitos cientistas se voltam para escrever as rotinas mais importantes em C, o que é muito mais rápido. Mas isso os impele ao uso de software escrito a partir de dois idiomas e, portanto, muito mais difícil de revisar, corrigir ou estender.

Julia é uma  solução para essa complexidade . Seus criadores tomaram a sintaxe limpa adorada pelos programadores Python e a ajustaram para que o código possa ser compilado em segundo plano. Dessa forma, você pode configurar um caderno ou uma sessão interativa como Python, mas qualquer código que você crie será compilado imediatamente.

A coragem de Julia é fascinante. Fornece um mecanismo de inferência de tipo poderoso que pode ajudar a garantir um código mais rápido. Se você gosta de metaprogramação, o idioma é flexível o suficiente para ser estendido. As adições mais valiosas, no entanto, podem ser os mecanismos simples de Julia para distribuir algoritmos paralelos em um cluster. Uma série de bibliotecas sérias já abordam muitos dos algoritmos numéricos mais comuns para a análise de dados.

Muitos benchmarks básicos são executados 30 vezes mais rápido do que o Python e geralmente são executados um pouco mais rápido que o código C. Se você tem muitos dados, mas desfruta da sintaxe de Python, Julia é o próximo idioma a aprender.

Fonte: Cio

Nenhum comentário:

Postar um comentário