Se você pesquisar sobre qual é a melhor linguagem de programação ou quais as principais linguagens de programação, vai encontrar bastante uma resposta: depende.
Um software pode ser escrito em diferentes linguagens. A opção de qual linguagem usar depende diretamente do tipo de software que será desenvolvido e de suas funcionalidades. Ao conhecer mais linguagens e entender a diferença entre elas, a capacidade de decidir qual é a melhor para cada contexto aumenta.
Este post mostrará quais são as principais linguagens de programação e deixará links para aprendê-las.
1. Conhecimentos de linguagens de programação
Para começar, farei uma checagem de conhecimentos prévios que você tem sobre o assunto para que possa entender o raciocínio do post.
1.1 Básico de linguagens
- Você sabe o que é uma linguagem de programação? Não precisa dar uma definição formal, mas tem que saber que se escreve código (ou se codifica) em uma linguagem de programação para gerar um novo software. Caso queira saber mais sobre isso, leia os dois primeiros posts da série Poliglota.
- Conhecer uma linguagem de programação não significa efetivamente saber programar. O segundo item é muito mais difícil. Caso consiga explicar essa afirmação, siga em frente. Caso contrário, a explicação está aqui: Linguagem vs Saber Programar.
- Cite o nome de 10 linguagens de programação. Se não souber 10, ou se não souber que Java é diferente de JavaScript, que C é diferente de C++ que é diferente de C#, tem que ler os dois primeiros posts da série Poliglota também, especialmente a seção 3 do segundo. Caso tenha citado HTML e CSS, tem que ler este aqui.
- Caso tenha citado 10 ou mais linguagens, como por exemplo: Java, C++, C, C#, JavaScript, PHP, Perl, Python, Cobol, Ada, Scheme, Lisp, R, Go, Ruby ou qualquer combinação válida, considere-se familiarizado com o assunto e vamos prosseguir. Para saber se uma que você citou é ou não uma linguagem de programação, consulte esta pequena lista aqui com 256 linguagens de programação: The Big List of 256 Programming Languages.
1.2 Intermediário em linguagens de programação
Agora preciso verificar o que você sabe sobre as características e tipos de linguagens de programação. Sem isso, não dá para justificar porque as que falarei em seguida são as principais linguagens de programação.
Para cumprir essa missão existem dois posts.
O primeiro explica as principais classificações das linguagens de programação. Suas categorias, como por exemplo, linguagens imperativas, funcionais, de script etc. Para classificá-las, é preciso saber alguns conceitos, como as as duas formas de programar (programação orientada a processos ou a objetos). Todas as explicações necessárias estão aqui, mas se se você souber tudo isso é só avançar.
O segundo, mais técnico e formal, é só para os sedentos por conhecimento e explica os critérios de avaliação de linguagens de programação. Fala de legibilidade, facilidade de escrita e ortogonalidade. Neste, é preciso saber algumas linguagens (como Java e C) para acompanhar a leitura.
2. As principais linguagens de programação
Se chegou até aqui lendo ou sabendo tudo, possivelmente você é:
- um programador ou
- um aspirante a programador.
Caso tenha chegado sem ser, considere o presente virtual abaixo e saiba que o mundo precisa de mais pessoas como você.
2.1 Plataforma e desenvolvimento
Ao pensar nas principais linguagens de programação como as mais populares, a lista fica fácil. É só fazer uma intersecção dos principais rankings de linguagens. Falo sobre elas (as mais populares) no post as Melhores Linguagens de Programação, mas, por ora, não saia daqui e voltemos ao raciocínio que guiou a lista das principais.
Ao pensar nas aplicações de um software, é possível identificar várias áreas, como:
- área científica;
- educacional;
- medicina e saúde;
- gestão corporativa (ERPs) e empresarial (relatórios);
- entretenimentos (games);
- marketing e eventos;
- industrial;
- inteligência artificial;
- inovação (AR, VR e Holografia).
Independente da área, um software pode ser classificado analisando a plataforma para qual ele foi desenvolvido. Na maioria dos casos, temos as seguintes possibilidades:
- Desenvolvimento web;
- Desenvolvimento mobile;
- Desenvolvimento PC/desktop;
- Desenvolvimento de sistemas embarcados.
Existem também outras possibilidades de divisão, como a arquitetura de software. Se ele é stand-alone, se é um sistema distribuído de tipologia cliente-servidor, se é um firmware, se é um SaaS (Software as a Service), um app e por aí vai. Para simplificar, vamos nos ater somente às 3 primeiras plataformas listadas acima para podermos falar das principais.
2.2 Saindo do Muro
Analisando o mercado de TI via pesquisas, reportagens, notícias e, ainda, solicitações que recebemos, podemos concluir que:
Desenvolvimento web > Desenvolvimento mobile > Desenvolvimento PC.
Maior no sentido de ter mais demanda, ser mais requisitado, mas não significa, por exemplo, que o desenvolvimento PC/desktop está morrendo. Apenas que a demanda é menor do que mobile e que este, menor que web. Veja o relatório anual do Stack Overflow por exemplo. Não creio que a proporção seja essa aqui no Brasil, mas acredito que a ordem é essa mesmo.
Não é difícil também pensar no motivo. Uma aplicação web, acessível pelo navegador, pode ser acessada de qualquer equipamento que possui acesso à Internet e conta com um navegador. Até uma TV smart conseguirá acessar um site. Portanto o desenvolvimento web é mais universal.
Dispositivos móveis, ou mobile, representam os equipamento do futuro. Quando for plenamente possível (atualmente já é, mas ainda não é muito produtivo) programar usando um smartphone no lugar de um computador, o mercado de PCs cairá mais. Nesse tipo de desenvolvimento existe um duelo entre criar um app nativamente para um sistema operacional vs criar para web para todos os sistemas operacionais.
Desenvolver um app disponível pelo browser tem nome: webapp. Ele também também representa o futuro, por isso não devemos confundir o desenvolvimento web > desenvolvimento mobile com o fato do mobile ser o principal equipamento atualmente. O ponto é que o desenvolvimento web permite o mobile também. O inverso, criar um app mobile, tem um alcance bem menor (só para o sistema operacional feito).
2.3 Mercado de desenvolvimento
Tenho recebido solicitações de agência que confirmam o que falei. Por exemplo: “Quero um sistema web que faça essas funcionalidades. Não quero um app, porque daí a pessoa tem que baixar, acha o app grande, não baixa e, se baixa, depois esquece de entrar nele de novo e a ação se perde”.
O cenário é o seguinte: com um app, você consegue usar todos os recursos de hardware e software do equipamento. É possível, dentro de um app, criar arquivos, salvar, editar. Na instalação ou, durante o uso, o sistema operacional do mobile pede sua permissão para acessar os recursos. Um webapp roda no navegador e, por isso, está limitado a ele. Um navegador ainda não possui todos os recursos de forma nativa quando comparado a um app, mas existem avanços nessa área e há diversos plugins que podem ser instalados em navegadores. À medida que essas limitações são superadas e a distância de recursos que podem ser usados entre um app mobile e um webapp diminui, o desenvolvimento web cresce.
2.4 Desenvolvimento web
O desenvolvimento web é divido em:
- Front-end: foca na experiência do usuário (UX), que engloba desde o layout da interface até sua implementação. É a interface do usuário.
- Back-end: foca em todos os sistemas de armazenamento, comunicação e suporte que o front-end precisa. É o sistema efetivamente.
Um profissional que está na moda é o programador ou desenvolvedor full-stack, capacitado nessas duas áreas de desenvolvimento web. Está na moda porque, diga-se de passagem, com as empresas enxugando custos, é mais cômodo ter um profissional que saiba fazer as duas partes do que uma só. Na prática, é difícil encontrar um profissional efetivamente especialista mesmo nas duas partes. Quem é mais de sistema, normalmente, não gosta de interface e o inverso é verdade também. Quem é fera em HTML e CSS, não se interessa muito por banco de dados e back-end, mas naturalmente existem exceções.
Novas empresas de tecnologia precisam e buscam desenvolvedores mais versáteis, no entanto, à medida em que uma organização cresce e amadurece, passa a precisar de mais habilidades focadas.
2.4.1 Front-end
Para front-end, além de saber HTML e CSS, que são linguagens de marcação (estrutura e estilo) e não de programação, precisa saber JavaScript. Esta linguagem roda em nos principais navegadores web atualmente e existem vários plugins e frameworks baseados nela.
Antigamente existiam outras opções que faziam um front-end dinâmico e animado, como Adobe Flash, Flex, bibliotecas gráficas de Java (AWT, Swing e agora JavaFX), mas atualmente essa combinação de HTML + CSS + JavaScript reina de forma absoluta. JavaScript passou a ser um requisito mandatório.
2.4.2 Back-end
Para back-end existe uma fartura de linguagens e frameworks. Java e PHP seguramente são as mais utilizadas, porém é possível também usar uma linguagem .NET, como C# ou Visual Basic .NET, ou ainda as novas linguagens Python e Ruby. Essas são as principais nessa parte.
2.5 Desenvolvimento mobile
Em mobile, vou separar pelo sistema operacional: Android, iOS e Windows Phone.
2.5.1 Android
Em Android existem várias alternativas de linguagens de programação para desenvolvimento. Tanto linguagens, quanto implementadores.
Pensando no desenvolvimento nativo, aquele feito para rodar diretamente sobre o sistema operacional, o mais comum é o Android Studio, que é o IDE oficial para desenvolvimento Android.
Quanto à linguagem, é possível usar Kotlin, a nova linguagem oficial para desenvolvimento Android. Quando digo oficial é porque a comunicação é feita dessa forma. Se você acessar os links do Android Studio e da linguagem oficial, verá que é assim mesmo que eles definem. Eles quem? O Google, que criou o Android e estabelece qual é o IDE e a linguagem oficial de desenvolvimento, embora existam alternativas. A linguagem Java continua sendo plenamente aceita e usada pelo Android Studio e, há pouco tempo, era a linguagem oficial do Android Studio. Outras linguagens também podem ser usadas nessa IDE, como C++, C# e Lua.
Além do Android Studio, é possível usar também, por exemplo, o IDE Eclipse com a linguagem Java para desenvolvimento nativo.
2.5.2 Multiplataforma
Outra alternativa é usar uma ferramenta de desenvolvimento multiplataforma, que permite a geração do aplicativo, a partir do mesmo projeto e código (com ligeiras diferenças), para Android, iOS e outros sistemas operacionais, como o Windows Phone. As duas principais alternativas atualmente são a Unity 3D, uma game engine (programa que gera games) e a Xamarin. Nelas, a linguagem mais comum de desenvolvimento é a linguagem C#. Outra opção menos conhecida é PhoneGap (que usa HTML5, CSS3 e JavaScript para gerar apps multi-plataforma).
Se o objetivo é fazer um app de Realidade Virtual ou de Realidade Aumentada, uma game engine (ferramenta de desenvolvimento de jogos) é uma ótima pedida. Existem várias, mas as mais famosas são Unity 3D e Unreal. A Unity aceita as linguagens C# e JavaScript (aceita Boo também). Na Unreal se programa com a linguagem C++.
2.5.3 iOS
Para iOS, considero o desenvolvimento um pouco mais engessado que Android, embora também existam vantagens. É preciso gerar o app (ou pelo menos passar) pelo XCode, que usa as linguagens Swift e Objective-C. Portanto, nesse caso, se você quiser ser um desenvolvedor iOS nativo, vale a pena aprender essas duas. Se for para escolher uma, leia esse post que enumera 10 vantagens de Swift sobre Objective-C.
Da mesma forma que ocorre para Android, as ferramentas de desenvolvimento multiplataforma têm ganhado diversos usuários ao longo dos anos. Consequentemente o mercado também se expandiu de forma considerável. As mesmas que citei acima servem para gerar apps para iOS, ou seja, Unity 3D, Xamarin e PhoneGap.
Por muito tempo eu desenvolvi software 3D usando a Unity 3D, que exporta o software para Android e iOS. Desenvolvia tudo em C# ou JavaScript e compilava para as duas plataformas, o que era uma bela de uma vantagem. Porém, para iOS, sempre era necessário alterar alguns itens no projeto em XCode, tornando a geração do aplicativo menos automática quando comparada a versão Android. Com o tempo, aprendi a programar direto no XCode e também enxerguei vantagens, tema para outro post.
Por ora, as vantagens mais conhecidas de se desenvolver um app nativo é o desempenho, obtido pelo uso direto das funções do sistema operacional. É que quando o aplicativo é feito sobre uma plataforma como a Unity 3D ou a Xamarin, existe uma camada extra entre o sistema operacional e o seu aplicativo, que sacrifica parte da performance para gerar maior praticidade e velocidade no desenvolvimento de aplicativos multiplataforma.
2.6 Desenvolvimento PC/desktop
2.6.1 Game
Um game é um forte exemplo de software para PC. Um simulador de Realidade Virtual também.
As principais linguagens de programação usadas para desenvolvimento de games para PC são C, e C++ e C#. Simuladores e aplicações que requerem desempenho em primeiro lugar, usam C ou C++. Game engines que focam na facilidade de codificar por parte do usuário, usam C#.
2.6.2 Formulários
Um software como o da Polícia Federal, que tira fotos de documentos como passaporte e outros, também é um software para PC. Ele é integrado com uma câmera semi-profissional para que a qualidade da foto seja muito boa. O software controla a câmera, o processo de captura e o armazenamento da foto. Atualmente isso ainda não é possível de ser feito no mobile via os SDKs de Canon e Nikkon, por exemplo.
Se o objetivo é programar um software de formulários como esse exemplo e qualquer outro do tipo, as linguagens .NET são as principais. Qualquer uma, pode escolher a que mais lhe agrade (a princípio). JS (versão JavaScript da Microsoft), F# (linguagem funcional da Microsoft), C#, C++/CLI (versão C++ da Microsoft) ou Visual Basic .NET (a mais usada por ser mais fácil). A IDE possui vários recursos e frameworks compartilhados que permitem chegar nos mesmos resultados usando diferentes linguagens.
Além disso, o Visual Studio permite um desenvolvimento muito rápido quando comparado com outras alternativas. Por exemplo, é possível desenvolver um software para PC usando a linguagem Java e a biblioteca gráfica JavaFX para a Interface, mas não será tão rápido.
Durante meu mestrado só era possível usar Linux, por isso desenvolvi o software do projeto usando a linguagem C++ e biblioteca gráfica Qt. Depois, migrei para a IDE QT Creator que me ajudou, mas não foi nada simples. Demorei quase 1 mês para fechar toda a interface de forma funcional. Em seguida, fiz a versão do software para Windows em Borland C++, que hoje virou RAD Embarcadero. Essa IDE é muita parecida com o Visual Studio, mas bem menos popular. Não demorei 2 dias e senti a diferença por ter neste último todos os recursos e componentes que precisava pré-prontos.
2.6.3 Outros tipos de software para PC
Aplicações científicas, com muitos cálculos numéricos, continuam utilizam a linguagem Fortran. Para os software empresariais e de relatórios, COBOL ainda é usado até hoje.
Na área de Inteligência artificial, a principal linguagem sempre foi Lisp, a mais antiga da área. Com o tempo, duas outras chegaram para valer: Scheme e Prolog. Scheme e Lisp são linguagens funcionais, enquanto Prolog é uma linguagem lógica.
3. Próximas leituras
Curtiu? Quer saber agora qual é a melhor linguagem dentre essas que eu citei? Se você já sabe algum e quer aprender outras, este post também serve para você.
Quer saber mais ainda sobre o assunto? Fizemos posts para algumas das principais linguagens de programação que estão abaixo:
- Linguagens .NET (Visual Basic .NET, C#, C++/CLI, JS, F#)
- Linguagem JavaScript
- Linguagem PHP
- Linguagem C#
- Linguagem Java
- Linguagem C++
- Linguagem C
- Linguagem Python
- Linguagem Ruby
- Linguagem Perl
- Linguagem Objective-C
- Linguagem Swift
Obrigado e até o próximo post!