fbpx
Escolha uma Página

Qual linguagem de programação aprender em 2019?

https://octoverse.github.com/projects#languages

Desde os meus tempos de professor universitário, essa era uma das perguntas mais recorrentes. Especialmente nas turmas de algoritmos. A imagem acima é de 2018, do github, listando as top 10 linguagens usadas nos repositórios. Além disso, o StackOverflow tem uma pesquisa super bacana e bem detalhada sobre o assunto aqui.

Confesso que por muitas vezes quando alguém me perguntava “qual linguagem aprender”, meu amor por Java falava mais alto, e de pronto respondia “Java, claro!”

Porém, mais que preferência pessoal por uma linguagem, robustez, atualização e segurança da linguagem, precisamos pensar no momento e na finalidade do seu aprendizado.

Nesse sentido, trago aqui 3 perguntinhas simples para te ajudar a escolher qual linguagem de programação aprender ainda esse ano:

1. É a sua primeira linguagem de programação? está aprendendo a programar agora?

Se esse for seu caso, recomendo começar por uma linguagem fortemente tipada, como JAVA. Ela pode parecer complicada e cheia de palavras de início, mas uma vez que você entenda sua lógica, será fácil de aprender outras linguagens. Alem disso, te ajudará a entender tipos e estruturas de dados, e como e onde cada um deles deve ser usado.

2. Qual seu objetivo profissional? quer ser desenvolvedor web? backend? frontend? full stack? tester? cientista de dados? ainda não sabe?

Linguagens são apenas ferramentas, e como qualquer ferramenta, cada uma é melhor em um determinado momento. Você não vai tentar pregar um prego usando uma chave de fenda ou uma faca de cozinha, mas usando um martelo. Com as linguagens de programação a ideia é a mesma. Identifique seu objetivo, que as linguagens para cumpri-lo virão juntas.

3. Empregabilidade é o foco? Quero arrumar um emprego pra ontem usando essa linguagem.

Faça uma busca dos empregos que você quer e veja quais os requisitos (linguagem que utilizam, frameworks, processos, certificaçōes que pedem). Isso vai te ajudar a decidir pela que melhor se encaixa nos planos de carreira.

E minha recomendação geral?

Após 11 anos de computação, muito aprendizado e experiência, nacional e internacional, de forma geral: recomendo Java!

Se com essas 3 perguntinhas acima, sua decisão for outra, não tem problema. Eis os motivos da minha recomendação:

  • A empregabilidade é ótima, tanto no Brasil tanto quanto aqui na Europa;
  • É uma linguagem robusta, segura, de propósito geral;
  • Fortemente tipada;
  • Orientada a objetos;
  • Sustentada por um grande nome (Oracle atualmente);
  • Muito, mas muito conteúdo na internet grátis e também livros publicados;
  • É uma linguagem aberta (não precisamos pagar pra usá-la, nem precisamos de sistemas caríssimos para executá-la).

Linguagens de programação que estou trabalhando no momento

  • Java – desenvolver os microservices e testes automatizados;
  • Kotlin – desenvolver os microservices e testes automatizados;
  • Javascript – desenvolver frontends e testes automatizados para eles.

Onde aprender?

Um infográfico super legal para te ajudar a decidir

Vídeo comparativo das linguagens mais populares no Stack Overflow 2008 – 2018

Créditos do vídeo: https://www.globalapptesting.com/

Referências

O que é uma framework de teste Automatizado de software

O que é uma framework?

Ainda hoje vejo muita confusão em torno do termo framework  (ou arcabouço em português, mas ninguém usa esse termo em português. Eu sempre lembro de calabouço quando falo arcabouço).

É comum as pessoas confundirem biblioteca com framework, dentre outras confusões e dificuldades de explicar de forma simples o que é um framework.

Vou tentar desmistificar isso de uma vez por todas e de uma forma que espero que sera fácil lembrar:

Uma framework é um conjunto de componentes e regras para se fazer algo.

Não é algo exclusivo de computação nem de testes de software pois existem frameworks de gerência de projetos, processos de software, atendimento de usuário, desenvolvimento de alguma habilidade humana, etc.

No caso de frameworks de programação, elas podem ou não conter bibliotecas (lembrando que bibliotecas são pedaços de código bem desenvolvidos, testados e confiáveis para aproveitarmos nos nossos projetos e não precisar fazer tudo na unha do zero). As frameworks podem ser server side, client side, ambos, e por aí vai.

Exemplos: Rails, que é uma framework de ruby; spring que é uma framework de Java; Zend, Cake, que são frameworks de PHP.

Assim, uma Framework nada mais é do que “um jeito” de se fazer algo usando algumas ferramentas.

O que é uma framework de automação de teste de software?

Se uma framework, de forma geral, é “um jeito de se fazer algo usando alguns componentes”, o que é uma framework de testes automatizados? o que ela precisa conter?

Para montarmos uma framework de testes automatizados devemos pensar em quais componentes (programas que nos ajudarão a realizar os testes) e quais as regras que esses programas definirão sobre a forma com que escreveremos nossos testes.

Assim, nossa framework de teste é o conjunto dos programas necessários (cucumber, selenium, capybara, watyr, phantomjs, Rspec…) para realizar os testes juntamente com as regras de como esses testes serão escritos.

O formato de se escrever os testes depende então das ferramentas que usamos para montar nossa framework de teste.

Por exemplo, se em nossa framework usamos Cucumber, é certo que precisaremos ter uma pasta específica para colocar nossas features e os step definitions dessas features, pois isso é uma regra do Cucumber.

E assim por diante, para cada ferramenta que escolhemos usar na framework.

Exemplo de framework de automação de teste de software usando Ruby

Para exemplificar mais detalhadamente, suponha que estamos definindo uma framework para realizar testes automatizados web, e que queremos usar a linguagem Ruby para escrever os testes automatizados.

Assim, um exemplo de framework de testes automáticos usando ruby como linguagem poderá conter os 4 elementos a seguir:

1. Cucumber: para escrever as features (cenários) dos testes de uma forma mais próxima da linguagem humana, usando BDD e também para coordenar os testes. O cucumber funciona como um maestro, controlando a execução dos testes. Se quiser entender mais sobre essas histórias, basta ler esse texto aqui onde falo sobre isso;

2. Rspec: para dar mais poder às verificações e comparaçõs que realizaremos (Ex: eu espero que o texto do botão curtir do facebook seja “curtir”);

3. Capybara: para facilitar a mudança entre os drivers que de fato executam os testes nos browsers, fazendo com que os testes tenham baixo acoplamento nas camadas mais baixas (não sejam dependentes dos drivers que de fato executam as ações nos browsers);

4. Selenium: driver dos testes;

Além dessas ferramentas que se tornam padrão para todo teste que escrevemos a partir da definição da framework, ainda é possível a inclusão de varias outras bibliotecas (gemas no caso de ruby) para ajudar no teste, quando necessário.

Podemos por exemplo variar os drivers, e ao invés de usar Selenium, usar Rack::Test  no lugar do selenium, ou ainda incluir gemas para lidar com JSON, XML, etc.

O importante na hora de definir uma framework de testes automatizados é que o conjunto das ferramentas escolhidas para compor a framework auxilie na escrita e manutenibilidade desses testes e não seja motivo de confusão para a equipe tornando os mais complicados e ineficientes.

Conclusão

Viu que não tem segredo a definição de framework? espero que a partir de agora você possa não ter mais medo das frameworks, seja lá onde for usá-las.

Além disso, que tal usar os 4 elementos indicados acima para selecionar e montar sua própria framework de testes automatizados de software?

Deixa aí nos comentários quais as ferramentas estão presentes na sua framework de teste =}

Além disso, um bom vídeo para começar com a área de testes é esse aqui:

Grande Abraço, e até a próxima.

Referências

Se quiser saber mais sobre a história do selenium, tem esse ótimo texto aqui em inglês que explica o histórico da criação do selenium;

Esse outro texto compara umas ferramentas de teste;