Por que utilizar C#?
Neste artigo vamos conhecer o C#, uma linguagem tipada, gerenciada e que está entre as mais populares do mundo, sendo vastamente usada principalmente por grandes empresas.
Por que escolher o C#?
O C# é uma linguagem tipada, compilada e gerenciada, criada por Anders Hejlsberg na Microsoft em meados de 2001.
Maturidade
Dada sua idade, o C# é considerado uma linguagem madura, ou seja, que já passou por vários testes e validações de programadores de todo o mundo.
Este é um importante fator na escolha de uma linguagem, pois ela traz garantias que tudo está estável em seu ambiente.
Tudo que é novo precisa ainda ser testado e amadurecido, podendo oferecer sérias consequências ao desenvolvimento de produtos e negócios.
Mercado
Dada sua maturidade, o C# também tem um ótimo mercado de trabalho, sendo vastamente utilizado em empresas.
Enquanto empresas menores e mais novas usam e abusam de novas tecnologias e linguagens, é comum encontrar um lado mais conservador nas empresas maiores (Enterprise).
Assim como usamos o termo Startup para nos referirmos a empresas mais jovens, usamos o termo Enterprise para definir empresas mais conservadoras ou mercado corporativo.
Este conservadorismo pode ser observado na opção por linguagens mais maduras como o C# para produtos que precisam perdurar.
Sendo assim, existem um mercado aquecido tanto para trabalhar com sistemas já construídos quanto novos sistemas nestas empresas.
Conteúdo e Comunidade
Se há algo que não vai acontecer é você se sentir sozinho utilizando C#, pois sua comunidade é muito grande e acolhedora.
Comunidade é o termo que usamos para definir um grupo de usuários de uma tecnologia ou linguagem.
Os fóruns e grupos estão cheios de materiais e dúvidas sobre a linguagem, o que significa que se você passar por um problema, provavelmente haverá uma solução na internet.
Um dos principais problemas de novas tecnologias e linguagens é que muitas vezes você está sozinho com elas, não tem muito material sobre o assunto na internet.
Optar por algo amplamente usado é trilhar um caminho já conhecido, minimizando os riscos e tempo de desenvolvimento.
Linguagem Completa
O C# talvez seja uma das linguagens mais completas existentes. A cada versão seus recursos são incrementados e ela é utilizada em diversas frentes.
Basicamente podemos utilizar o C# em todo ecossistema Micrososft e dificilmente haverá um recurso a nível de linguagem que não esteja presente.
Um dos seus usos mais comum é dentro do ASP.NET, a plataforma da Microsoft para criação de aplicações Web, mas seu uso não se restringe somente a isto.
Uma linguagem completa também traz grandes complexidades e dificuldade no domínio da mesma. Pode-se levar anos para conhecer bem o C# e pode ser quase impossível conhecer todo ele.
Uma dica é focar na frente que você deseja atuar como desenvolvedor. Por exemplo, se deseja trabalhar com ASP.NET e criar aplicações Web, foque em aprender o conteúdo de C# relacionado a ele primeiro.
Embora haja uma grande variedade nos recursos da linguagem, alguns deles além de avançados tem seu uso focado em outras frentes, como Machine Learning por exemplo.
Orientada à Objetos
O orientação à objetos é um dos pilares deste material e um item obrigatório para qualquer desenvolvedor de qualquer linguagem.
Definimos como orientação à objetos a forma como analisamos e projetamos nosso código baseando-se para isto na vida real.
A programação orientada à objetos (POO em português e OOP em inglês) é a aplicação deste conceito dentro do mundo do desenvolvimento.
Para que estes conceitos sejam aplicados, a linguagem utilizada precisa ser orientada à objetos, como no caso, o C#.
A OOP é um conjunto de fundamentos agnóstico de linguagem que vai te permitir escrever aplicações melhores e mais otimizadas em qualquer cenário.
Sabendo bem OOP com C#, você pode aplicar também este conceito em outras linguagens, podendo ampliar seu mercado e possibilidades.
C# como primeira linguagem
Se compararmos o C# com algumas linguagens mais novas, definitivamente chegaremos a conclusão que ele é mais difícil de se aprender.
Isto deve-se ao fato de novas linguagens serem mais simples em seus recursos e não obrigatoriamente exigirem OOP em seu uso.
Embora isto possa causar uma sensação boa no começo, com o rápido desenvolvimento, a longo prazo isto pode te prejudicar.
Em algum momento da sua carreira você precisará parar e aprender de verdade OOP e outros conceitos que veremos com C# aqui, e o que ocorre em algumas novas linguagens é que estas etapas muitas vezes são puladas.
Em suma, você pode começar com qualquer linguagem da forma correta, desde que policie-se para aprender o básico antes, mas o C# de certa forma já nos força a fazer isto.
Se você aprender bem o C#/OOP, poderá migrar para outras linguagens e aprender coisas novas com uma maior facilidade.
Quanto mais tempo você gastar aprendendo o básico, consolidando seu conhecimento, mais fácil será aprender coisas novas futuramente.
No fim, tudo é questão de tempo, você não será um bom programador com alguns meses de código apenas, assim como não será um profissional sênior aos 20 poucos anos de idade.
No mundo do desenvolvimento é preciso vivenciar as coisas, é preciso codificar e desprender muito tempo aprendendo.
Você pode se dedicar e aprender tudo que precisa agora, ou ir aprendendo sob demanda futuramente. O problema do aprendizado parcelado é que seu tempo vai ficando mais escaço a cada dia.
É comum ver muita gente com anos de desenvolvimento ainda perdidas, precisando de ajuda para resolver problemas básicos, ou seja, falta a base.
Como tudo funciona?
Agora que você já se decidiu sobre o uso e aprendizado do C#, é hora de ver como ele funciona antes de dar nossos primeiros passos escrevendo código.
O que é código Gerenciado?
No começo deste capítulo nos referimos ao C# também como uma linguagem gerenciada, o que significa que sua execução depende de um gerenciador.
Este gerenciador também é conhecido como Runtime e no caso do C# quem faz este gerenciamento é o CLR (Common Language Runtime). O CLR recebe o código gerenciado, compila em código que a máquina entenda e o executa.
Este runtime provê serviços importantes como gestão de memória, segurança entre outros, que nos garante também mais velocidade na escrita de código, visto que não precisamos cuidar de tudo.
Em um código não gerenciado, como C/C++, precisaríamos cuidar de cada detalhes, até mesmo a alocação e desalocação de memória.
Possuir este runtime nos permite não precisar interagir (Ou interagir menos) com código de máquina, visto que temos toda esta abstração a nosso favor.
Compilação e gerenciamento
Além do C# a Microsoft possui outras linguagens, como o VB.Net e até o Cobol.NET, e todas estas linguagens precisam ser mantidas.
As manutenções podem ocorrer desde uma correção de uma sintaxe da linguagem até a alocação de memória de um item pelo runtime.
Ou seja, o responsável pela execução das nossas aplicações em C# também precisa de manutenção, assim como o das outras linguagens que mencionamos.
Desta forma, quando o ecossistema da desenvolvimento da Microsoft, o .NET (Explicado mais adiante) foi criado, ele foi pensado em suportar diferentes linguagens mas com uma manutenção que fosse fácil.
Assim como o C#, o VB.NET também é uma linguagem gerenciada e mantida pela Microsoft, o que torna parte do trabalho de ambas linguagens similares.
O que temos então é a divisão das responsabilidades em duas partes, sendo uma a compilação da linguagem e a outra o gerenciamento da aplicação.
Em suma, temos um compilador para cada linguagem, mas um gerenciador único, afinal a alocação de memória dentre outros recursos de hardware são a mesma.
Sendo assim, o CLR recebe o código em C#, utiliza seu compilador específico (Que só compila código em C#), e como resultado final temos um outro código, em uma linguagem única que o runtime entende, chamada de Intermediate Language ou apenas IL.
Microsoft .NET Core
Intermediate Language
Já aprendemos anteriormente que o C# (Assim como o Java e o VB.NET) é considerado uma linguagem de alto nível.
Embora sejam mantidas pela Microsoft, o C# e VB.NET se diferem em muitas coisas, incluindo na sua sintaxe, que afeta a interpretação.
Isto impossibilita que haja um compilador único para estas linguagens, necessitando um processo intermediário de conversão das mesmas para o IL.
IL é a sigla para Intermediate Language ou linguagem intermediária em português.
Somente após esta conversão o código será de fato compilado para a linguagem de máquina, executado e gerenciado.
Este modelo possibilita por exemplo termos arquivos do VB.NET e C# na mesma aplicação (Mas nunca no mesmo arquivo).
Quando o C# foi criado, o VB.NET era a linguagem principal da Microsoft, e este recurso permitiu a facilidade na migração de diversos sistemas escritos em VB.NET para C#.
Imagina que incrível era poder simplesmente deixar para migrar depois um pedaço do seu sistema, escrito em outra linguagem e ainda assim tudo continuar funcionando.
Além disso, o IL garante que o resultado da execução é sempre o mesmo, afinal o runtime sempre executa tudo da mesma forma. Pode mudar o tradutor, mas a mensagem sempre será executada.
Este processo de conversão do código intermediário (IL) para o código que a máquina entenda, também é chamado de Just In Time ou JIT.
Como funciona?
Sei que falamos muitas coisas neste capítulo, talvez coisas avançadas, mas você não precisa se preocupar em guardar todos os detalhes.
É importante saber como as coisas funcionam por baixo dos panos, para garantir um entendimento das execuções que teremos futuramente.
Para facilitar, esta lista resume o processo todo que descrevemos aqui.
- Escrevemos nosso código em C# (Alto nível)
- É gerado um código intermediário (IL)
- O CLR recebe o IL e transforma em linguagem de máquina
- O código então é executado e passa a ser gerenciado