Por que utilizar C#?
A linguagem C# é uma linguagem tipada, compilada e gerenciada, que está entre as mais populares do mundo e aparece com frequência nos sistemas de grandes empresas. Neste artigo, vamos conhecer a sua origem, os motivos para escolhê-la e o que acontece com o seu código desde a escrita até a execução.
Ao final, você vai entender termos como CLR, IL e JIT sem decorar definições. Além disso, vai saber por que a linguagem C# é uma ótima porta de entrada para quem deseja construir uma carreira sólida em desenvolvimento.
O que é a linguagem C#
O C# (pronuncia-se "C Sharp") é uma linguagem de propósito geral criada por Anders Hejlsberg na Microsoft. A Microsoft anunciou a linguagem no início dos anos 2000, e a primeira versão chegou junto com o .NET Framework.
Hoje, a documentação oficial descreve a linguagem C# como a mais popular da plataforma .NET. Essa plataforma, por sua vez, é gratuita, de código aberto e multiplataforma.
Na prática, isso significa que o mesmo código roda no Windows, no Linux e no macOS. Assim, você pode escrever aplicações web, APIs, serviços em nuvem, aplicativos de desktop, jogos e até soluções para dispositivos móveis.
A sintaxe pertence à família do C. Portanto, quem já viu C, C++, Java, JavaScript ou TypeScript reconhece rapidamente as chaves, o ponto e vírgula e as estruturas como if, for e while.
Três características definem a linguagem C# logo de início. Ela é tipada, ou seja, toda variável tem um tipo conhecido em tempo de compilação.
Ela também é compilada, porque o seu código passa por um compilador antes de rodar. Por fim, ela é gerenciada, já que um runtime controla a execução, como veremos adiante.
Por que escolher a linguagem C#
Escolher uma linguagem envolve mais do que gostar da sintaxe. Na verdade, fatores como estabilidade, mercado, comunidade e recursos pesam bastante na decisão.
A seguir, vamos analisar cada um desses pontos. Dessa forma, você consegue avaliar se a linguagem C# combina com os seus objetivos.
Maturidade
Dada a sua idade, o C# já passou por mais de duas décadas de uso intenso. Em outras palavras, programadores do mundo inteiro já testaram e validaram os seus recursos em cenários reais.
Esse é um fator importante na escolha de uma linguagem, pois traz a garantia de que o ambiente é estável. Além disso, as mudanças acontecem de forma planejada, com versões anuais e documentação extensa.
Por outro lado, tudo que é novo ainda precisa amadurecer. Nesse caso, apostar em uma tecnologia recente pode trazer consequências sérias para produtos e negócios que precisam durar anos.
Mercado de trabalho para a linguagem C#
Graças a essa maturidade, a linguagem C# tem um ótimo mercado de trabalho. Empresas de todos os tamanhos utilizam o C# em sistemas internos, produtos digitais e soluções de missão crítica.
Enquanto empresas menores e mais novas experimentam tecnologias recentes com frequência, as empresas maiores costumam adotar uma postura mais conservadora. Esse mercado corporativo recebe o nome de Enterprise.
Assim como usamos o termo Startup para nos referirmos a empresas mais jovens, usamos o termo Enterprise para definir empresas mais conservadoras ou o mercado corporativo.
Esse conservadorismo aparece na opção por linguagens maduras, como o C#, para produtos que precisam perdurar. Sendo assim, existe demanda tanto para manter sistemas já construídos quanto para criar sistemas novos nessas empresas.
Além disso, a popularidade da linguagem C# segue em alta nos rankings. Por exemplo, o índice TIOBE premiou o C# como linguagem do ano, conquista que detalhamos no artigo sobre o título de linguagem do ano do C#.
Conteúdo e comunidade
Se há algo que não vai acontecer é você se sentir sozinho, porque a comunidade do C# é muito grande e acolhedora. Fóruns, grupos e repositórios reúnem uma quantidade enorme de dúvidas já resolvidas.
Comunidade é o termo que usamos para definir um grupo de usuários de uma tecnologia ou linguagem.
Isso significa que, se você enfrentar um problema, provavelmente alguém já publicou a solução na internet. Por outro lado, um dos principais problemas das tecnologias novas é justamente a falta de material de apoio.
Optar por algo amplamente usado é trilhar um caminho conhecido. Dessa forma, você reduz riscos e também o tempo de desenvolvimento.
Uma linguagem completa
O C# talvez seja uma das linguagens mais completas que existem. A cada versão, a equipe da Microsoft incorpora novos recursos, e a linguagem atua em diversas frentes.
Basicamente, você pode utilizar o C# em todo o ecossistema da Microsoft, e dificilmente faltará um recurso em nível de linguagem. Além da orientação a objetos, ela incorpora recursos funcionais como pattern matching, LINQ e programação assíncrona com async e await.
Um dos usos mais comuns acontece dentro do ASP.NET, a plataforma da Microsoft para criação de aplicações web. Contudo, o uso não se restringe a isso, e o artigo sobre o ecossistema .NET mostra tudo o que dá para construir.
Uma linguagem completa também traz complexidade. Na prática, você pode levar anos para conhecer bem o C#, e dominar absolutamente tudo é quase impossível.
Por isso, uma dica é focar na frente em que você deseja atuar. Por exemplo, se o seu objetivo é criar aplicações web, aprenda primeiro o conteúdo de C# relacionado ao ASP.NET.
Embora a variedade de recursos seja grande, alguns deles atendem frentes específicas, como Machine Learning, e podem ficar para depois.
Por que a linguagem C# é orientada a objetos
A orientação a objetos é um item obrigatório para qualquer desenvolvedor, de qualquer linguagem. Em resumo, ela define a forma como analisamos e projetamos o código com base em elementos do mundo real.
A programação orientada a objetos (POO em português e OOP em inglês) aplica esse conceito ao desenvolvimento. Para isso, a linguagem utilizada precisa oferecer suporte a classes, herança, polimorfismo e encapsulamento, como faz a linguagem C#.
A OOP é um conjunto de fundamentos que independe de linguagem. Portanto, ela permite escrever aplicações melhores e mais organizadas em qualquer cenário.
Sabendo bem OOP com C#, você também consegue aplicar esses conceitos em outras linguagens. Com isso, amplia o seu mercado e as suas possibilidades, e o artigo sobre orientação a objetos aprofunda os quatro pilares.
A linguagem C# como primeira linguagem
Se compararmos o C# com algumas linguagens mais novas, provavelmente chegaremos à conclusão de que ele exige mais esforço no início. Isso acontece porque linguagens novas costumam ter menos recursos e nem sempre exigem OOP.
Embora essa simplicidade traga uma sensação boa no começo, ela pode prejudicar você a longo prazo. Afinal, em algum momento da carreira, você precisará parar e aprender de verdade OOP e outros fundamentos.
Em algumas linguagens, essas etapas acabam ficando para trás. Já a linguagem C#, de certa forma, nos obriga a aprender a base antes de avançar.
Em suma, você pode começar com qualquer linguagem, desde que se policie para estudar o básico primeiro. Ainda assim, quem aprende bem C# e OOP migra para outras linguagens com muito mais facilidade.
Quanto mais tempo você dedicar ao básico, mais fácil será aprender coisas novas no futuro. Se ainda estiver em dúvida sobre por onde começar, o artigo qual linguagem devo aprender ajuda nessa escolha.
No fim, tudo é questão de tempo. Você não será um bom programador com poucos meses de código, assim como não se tornará sênior de uma hora para outra.
No desenvolvimento, é preciso vivenciar as situações, codificar bastante e investir muito tempo em estudo.
Não por acaso, muita gente com anos de experiência ainda pede ajuda para resolver problemas básicos. Ou seja, falta a base, e a linguagem C# ajuda justamente a construí-la desde cedo.
Como a linguagem C# funciona por baixo dos panos
Agora que você já entende os motivos para aprender C#, é hora de ver como ele funciona. Esse conhecimento ajuda a interpretar mensagens de erro, problemas de desempenho e o comportamento das suas aplicações.
O que é código gerenciado
No começo deste artigo, dissemos que a linguagem C# é gerenciada. Em outras palavras, a execução do seu código depende de um gerenciador.
Esse gerenciador também recebe o nome de runtime, e no caso do C# quem faz esse trabalho é o CLR (Common Language Runtime). O CLR recebe o código gerenciado, compila em código de máquina e o executa.
Além disso, o runtime oferece serviços importantes, como gerenciamento automático de memória, segurança de tipos e tratamento de exceções. Com isso, você escreve código mais rápido, já que não precisa cuidar de cada detalhe.
Em um código não gerenciado, como em C ou C++, o programador cuida de praticamente tudo. Nesse caso, até a alocação e a liberação de memória ficam por sua conta.
Ter um runtime permite interagir pouco ou nada com código de máquina. Afinal, toda essa abstração trabalha a nosso favor, conforme explica a documentação oficial sobre código gerenciado.
Compilação e gerenciamento
Além do C#, a Microsoft mantém outras linguagens, como o VB.NET e o F#. Existem ainda compiladores de terceiros que geram código para o mesmo runtime, incluindo versões de COBOL.
Todas essas linguagens precisam de manutenção. Essa manutenção vai desde a correção de uma sintaxe até a forma como o runtime aloca memória para um objeto.
Ou seja, o responsável pela execução das aplicações em C# também evolui, assim como o das outras linguagens que mencionamos. Por isso, a Microsoft desenhou o .NET para suportar diversas linguagens com uma manutenção simples.
A solução foi dividir as responsabilidades em duas partes: cada linguagem tem o seu compilador, e um único runtime cuida do gerenciamento da aplicação.
Isso faz sentido, porque a alocação de memória e os demais recursos de hardware são os mesmos para todas as linguagens. Assim, o compilador do C# transforma o código em uma linguagem única que o runtime entende, chamada Intermediate Language, ou apenas IL.
Intermediate Language (IL)
O C#, assim como o Java e o VB.NET, é uma linguagem de alto nível. Embora a Microsoft mantenha o C# e o VB.NET, as duas linguagens diferem em muitos pontos, incluindo a sintaxe.
Por isso, não existe um compilador único para elas. Em vez disso, cada compilador converte o código para a IL, que funciona como um idioma comum.
IL é a sigla para Intermediate Language, ou linguagem intermediária em português. Você também vai encontrar os nomes CIL (Common Intermediate Language) e MSIL.
Junto com a IL, o compilador gera metadados, que descrevem os tipos, os membros e as referências do seu código. Dessa forma, o arquivo final se descreve sozinho, e o runtime encontra tudo o que precisa durante a execução.
Esse modelo permite, por exemplo, ter projetos em VB.NET e em C# na mesma aplicação. Contudo, cada arquivo continua escrito em uma única linguagem.
Quando o C# surgiu, o VB.NET já tinha grande base de usuários no ecossistema da Microsoft. Assim, esse recurso facilitou a migração gradual de sistemas escritos em VB.NET para C#.
Além disso, a IL garante que o runtime execute tudo da mesma forma. Pode mudar o tradutor, mas a mensagem sempre chega igual ao destino.
Compilação Just In Time (JIT)
A IL ainda não é código de máquina. Antes de rodar, ela passa por uma nova conversão para o código específico do processador.
Esse processo de conversão da IL para código de máquina recebe o nome de Just In Time, ou JIT. Como o nome sugere, o compilador JIT converte cada método no momento em que ele é chamado pela primeira vez.
Depois disso, o runtime guarda o código nativo em memória. Assim, as chamadas seguintes ao mesmo método executam diretamente o código já compilado.
Durante essa etapa, o runtime também verifica se o código respeita a segurança de tipos. Em outras palavras, ele confere se o programa acessa apenas as regiões de memória a que tem direito.
Como o CLR possui um compilador JIT para cada arquitetura suportada, a mesma IL roda em processadores diferentes. Esse é um dos motivos pelos quais a linguagem C# é tão portável.
O papel do .NET
O .NET é o ecossistema de desenvolvimento da Microsoft, que reúne o runtime, as bibliotecas e as ferramentas de linha de comando. O C# é a principal linguagem desse ecossistema.
Inicialmente, o .NET Framework rodava apenas no Windows. Mais tarde, a Microsoft lançou o .NET Core, uma versão de código aberto e multiplataforma, que deu origem ao .NET atual.
Além do runtime, o .NET entrega uma biblioteca de classes extensa, com recursos para arquivos, coleções, rede, criptografia e muito mais. Dessa forma, você começa os seus projetos com muita coisa pronta.
Para instalar o SDK e criar o primeiro projeto, consulte o guia de instalação e primeiros passos com o .NET. Em seguida, aprofunde o assunto no artigo dedicado ao .NET.
O processo completo em resumo
Falamos de muitas coisas até aqui, algumas delas avançadas. No entanto, você não precisa guardar todos os detalhes agora.
Para facilitar, esta lista resume todo o processo que descrevemos:
- Escrevemos o código em C#, uma linguagem de alto nível.
- O compilador do C# gera um código intermediário (IL) e os metadados.
- Em seguida, o CLR recebe a IL e o compilador JIT a transforma em linguagem de máquina.
- Por fim, o código executa sob o gerenciamento do runtime.
Repare que cada etapa tem um responsável claro. Com isso, a linguagem C# e o runtime evoluem em paralelo.
Um primeiro contato com a linguagem C#
Para fechar a parte teórica, vale ver um pouco de código. O clássico "Hello, World" mostra como a sintaxe atual é enxuta:
// Esta linha escreve uma mensagem no console
Console.WriteLine("Hello, World");
Nas versões modernas, os top level statements dispensam a declaração explícita da classe e do método Main. Ainda assim, o formato tradicional continua válido e aparece em muitos exemplos:
namespace HelloWorld;
class Program
{
static void Main()
{
// O método Main é o ponto de entrada da aplicação
Console.WriteLine("Hello, World");
}
}
Os dois formatos geram o mesmo resultado. Em seguida, veja um exemplo um pouco maior, que combina tipos, propriedades e métodos:
public class Product
{
public string Name { get; set; } = string.Empty;
public decimal Price { get; set; }
// Aplica um desconto percentual ao preço
public void ApplyDiscount(decimal percentage)
{
Price -= Price * percentage / 100;
}
}
var product = new Product { Name = "Keyboard", Price = 200m };
product.ApplyDiscount(10);
Console.WriteLine($"{product.Name}: {product.Price}"); // Keyboard: 180
Nesse trecho, a tipagem forte aparece em cada declaração. Por exemplo, se você tentar atribuir um texto a Price, o compilador acusa o erro antes mesmo de a aplicação rodar.
Conclusão
A linguagem C# reúne maturidade, mercado aquecido, comunidade ativa e recursos para praticamente qualquer tipo de aplicação. Além disso, ela incentiva o aprendizado de fundamentos como a orientação a objetos.
Por baixo dos panos, o compilador gera IL, o CLR converte esse código com o JIT e o runtime gerencia memória e segurança. Portanto, você ganha produtividade sem abrir mão de desempenho.
Se você está começando, invista tempo na base. Afinal, quem domina bem a linguagem C# aprende outras tecnologias com muito mais facilidade.
FAQ
C# e .NET são a mesma coisa?
Não, o C# é a linguagem de programação e o .NET é a plataforma que fornece o runtime, as bibliotecas e as ferramentas. Você escreve em C# e executa a aplicação sobre o .NET.
O C# roda apenas no Windows?
Não, desde o .NET Core a plataforma é multiplataforma. Hoje, aplicações em C# rodam no Windows, no Linux e no macOS.
C# é uma boa primeira linguagem?
Sim, porque a linguagem obriga você a aprender tipagem e orientação a objetos desde o início. Essa base facilita o aprendizado de outras linguagens depois.
O que é o CLR?
O CLR (Common Language Runtime) é o runtime do .NET. Ele compila a IL para código de máquina e oferece serviços como coleta de lixo e segurança de tipos.
Qual a diferença entre IL e código de máquina?
A IL é um código intermediário independente de processador, gerado pelo compilador do C#. O código de máquina é específico de cada arquitetura e surge na compilação JIT.