TransWikia.com

Quais os cenários em que o C# tem vantagem em relação a outras linguagens?

Stack Overflow em Português Asked on December 11, 2021

Aqui no site tem algumas perguntas semelhantes, por exemplo, Quais os cenários ideais de uso para o Node.js? e Por que escolher C ao invés de C++ ou então C++ no lugar de C?

Gostaria de algo nesse sentido porém em ralação ao C# para desenvolver uma aplicação web, quais suas características principais (desempenho, flexibilidade, organização, …)? Quando seu uso é vantajoso em relação as outras linguagens?

One Answer

O Wictor já comentou algo importante, mas isso também é um erro comum.

Raras as linguagens que funcionam tão bem em pilha de tecnologia Microsoft quanto C#. Não por ela, mas pela infraestrutura em volta dela. E convenhamos que em desktop praticamente só olhamos pra Windows.

O erro é achar que C# não é adequada para todas plataformas e está comprometida com tudo o que surgir que seja relevante. Dei uma palestra sobre isso.

Onde será usada não é critério.

Vamos entender que C# é uma linguagem do tipo enterprise, então ela vem com uma infra muito forte. Ela é de propósito geral, então dá para fazer quase tudo com ela, é melhor perguntar onde ela não se encaixa.

Vou deixar de lado o gosto e a experiência. Isso é importante. Fazer o que gosta ajuda muito. Saber usar bem torna tudo mais produtivo e costuma dar melhor qualidade.

Performance

O desempenho do C# é excelente e pode bater C ou C++ em códigos mais simples. Claro que o máximo da performance com muito esforço será obtido com C ou C++, ou Assembly em alguns casos. Mas realmente dá muito trabalho. Da minha outra palestra:

Batalha de performance C# vs C++

C# hoje dá muito mais importância para performance que há 10, 15 anos atrás.

Se por performance está falando de executar real time, o que é raro precisar, é possível, mas C# exige muito esforço por causa do garbage collector, e em alguns casos hard real time não dá.

.NET Native vai ajudar mais na performance no geral. Mas pode piorar em alguns pontos específicos. Note que isso é uma implementação específica do *runtime, nada a ver com a linguagem em si. Ele não terá continuidade, mas parte dos seus benefícios agora está no .NET 5 para frente.

"Cada dia" tem mais novidades para melhorar a performance, mas sempre foi uma linguagem pragmática quanto a isto, em comparação ao idealismo de algumas linguagens, como Java tem.

Flexibilidade

C# é flexível e versátil, difícil responder algo específico sobre isto, no geral atende quase todas necessidades. É poderosa, consegue resolver razoavelmente bem em quase todas situações, independente de ser só uma forma acadêmica de ver (turing complete), digo, na prática dá bem.

Dá, mas não é adequada para fazer um sistema operacional (COSMOS, SharpOS, Singularity, FlingOS, MOSA e Midori). Muitas restrições para fazer um bom driver. Não se compara com C++ para isto, o que boa parte da pergunta já está respondida ali.

Não é uma linguagem de script, mas pode ser usada (em C# 9 e 10 para frente isso melhorou muito).

Pode usar embarcada dentro de alguns bancos de dados.

E hoje pode em navegadores web para fazer frontend (nem falarei em backend agora, e tem uma das melhores bibliotecas para isto).

Roda em todas plataformas mainstream, incluindo mobile, em todos servidores importantes, incluindo em nuvem (AWS, Google), com otimizações próprias para isto (Azure).

E está cada vez melhor para IoT.

O resto é biblioteca, que tem muito para ela, incluindo Machine Learnig, BigData, jogos, robótica e muito mais.

Organização

Não sei bem o que isso quer dizer e pode ser algo só baseado em opinião. Considero bem organizada por vários critérios. Tem boa arquitetura, sintaxe, semântica, ecossistema geral, incluindo excelentes ferramentas de produtividade e qualidade.

Facilidade

É uma linguagem relativamente fácil para o poder que ela tem, muito mais que C++, e comparando com C, depende. C é mais fácil de aprender e mais difícil de usar, principalmente por ter menos abstrações, menos coisas prontas, e por não ter gerenciamento automático de memória.

É uma linguagem muito bem definida e só não é muito fácil porque envolve muitos conceitos.

Linguagens de script são mais fáceis. Mas são menos robustas e menos escaláveis. C# é feita para projetos grandes, que duram, que são altamente relevantes. Tendem a ser mais produtivas no começo.

Backend web

A pergunta mudou no meio do caminho

Já falei que roda também em frontend (tem palestra minha no TDC 2018), e eu vou com ela firme, ainda que esteja experimental (já está consolidado anos depois). Pro meu gosto acho mais negócio, pelo menos para aplicação, ainda que eu não seja fã de aplicações web, mas tem motivo para usar. Para websites é diferente, eles não podem ser complexos, aí não sei, depende. Acho que Blazor será melhor que Angular, React, todas essas coisas.

A linguagem em si muda pouco ou nada para desenvolvimento web no backend. Faz mais diferença para a tarefa em si.

C# é mais escalável, como eu disse, mas isso não é uma vantagem tão forte. Linguagens menos escaláveis podem ser usadas em projetos grandes com a cultura certa. E falo de escalar o projeto, não estou falando de escala de execução, isso pode ser feito com qualquer linguagem cop ma infra certa e botando mais dinheiro.

Claro que linguagens mais eficientes podem diminuir a necessidade de escala de execução. C# pode ser dezenas de vezes mais rápida que Ruby, por exemplo, e pode ser que precise de um simples servidor no lugar de vários servidores parrudos. Mas a sua decisão em outros pontos fará mais diferença. O SQLite pode escalar melhor que um SQL Server em alguns cenários, desde que a pessoa saiba o que está fazendo.

Tem sites enormes feitos em cada uma das linguagens mainstream, todas beleza. Este aqui é feito em C#, é um dos 30/50 sites mais acessados do mundo, e roda em 11 servidores, mas poderia rodar em apenas 1 com risco de ter gargalos em alguns horários. Tá bom? Não precisa usar linguagens que são potencialmente mais rápidas com esforço para obter bom resultado, e essas linguagens que podem ser mais rápidas correm sério risco de segurança em um ambiente onde isso é absurdamente importante.

Tem sites feitos em linguagens de script que escalam bem em performance, com a arquitetura certa, mas custa muito caro. Um dos motivos que eu me recuso contribuir com a Wikipedia porque ela é ecológica e economicamente incorreta. Alguns sites sucumbiram e trocaram de linguagem para uma que escala melhor, o Twitter é um exemplo e Scala é a dica :)

Uma das vantagens do C# é seu ecossistema, não é o melhor, mas tenta ser. Não tem trocentos frameworks, mas tem um para cada tarefa que aprendeu com os próprios erros e dos outros. E tem como vantagem não ficar preso demais ao legado. Inclusive o .NET Core (agora só chamado de .NET) tem sido otimizado para isso. Tem muita coisa boa. Mas não é a linguagem. Inclusive tudo isso pode ser usado com outras linguagens que rodam em cima do CLR.

Tem detalhes, mas nada de muito importante que faça o C# ser menos adequado que outras linguagens. Mas eu defendo outras linguagens quando o projeto é pequeno, não atenderá tanta demanda assim, não durará por muito tempo.

Extra

Particularmente se mais tempo de mercado for determinante para escolher a linguagem, deveria usar Fortran, ou Lisp, ou COBOL. É comum o que está há mais tempo ser pior porque não pôde aprender com os erros e a linguagem tem um legado ruim muito pesado. Eu usaria PHP para algumas coisas em web, mas de forma geral é uma das linguagens mais erradas já criadas, e a sua evolução costuma ser em cima de novos erros, isso é bem temerário. E não consigo imaginar porque PHP seria melhor no Linux e não no Windows, e porque C# seria bom no Windows e não no Linux.

Tenho críticas ao C#, mas tenho mais às outras linguagens. O que mais gosto de C# e seu ecossistema é que ela está evoluindo muito bem, estão fazendo o que precisa, não na velocidade que eu queria (isso andou melhorando), não tudo o que desejo, e tem motivos para ser assim, mas as outras estão atrás. Tenho gostado também da evolução do C++, mas o legado dela é pesadíssimo. Uma linguagem meio termo entre C++ sem o legado e C# seria sensacional, algo quase unânime e a Microsoft estava desenvolvendo isso, mas acabou (veja Midori acima).

Gosto de algumas iniciativas de linguagens mais recentes, uma linguagem nova ideal olharia para D, Rust, Go, Kotlin, Swift, Nim, Jai, F#, e outras bem menos conhecidas.

Answered by Maniero on December 11, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP