[DUVIDA] Aos devs C# vale a pena usar linux para desenvolver?

Contexto

Sou dev web (NodeJS, React, TypeScript etc) e esse ano decidi aprender outras linguagens fora do ecossistema JavaScript. A primeira que eu escolhi foi Go. Como segunda, estou considerando Java, pela grande bagagem que a linguagem tem e boa quantidade de vagas, mas consideraria C# também, embora tenha um preconceito por ser da microsoft. Como gosto de desenvolver no linux, queria saber se é viável desenvolver nele.

Além disso, você que já trabalhou tanto com Java quanto com C#, qual você prefere e porquê?


edit: Quando eu disse "preconceito", é mais com o windows mesmo, eu apenas não gosto do sistema...

Eu sou dev C#, trabalho com Windows, mas vou dar meu relato.

Com o .Net Core, agora é possível instalar ele no Linux sim, e para IDE você pode usar o Visual Studio Code com extensões para C#. Tem um guia do próprio VsCode de como fazer o setup (https://code.visualstudio.com/docs/languages/csharp).

A questão de .Net Core no Linux funciona muito bem, os comandos podem ser todos executados pelo terminal, com a CLI do dotnet. Funciona similar a um NodeJs. A questão de usar o VsCode para C#, eu não tenho muita experiência, pois como estou no Windows faz mais sentido utilizar o Visual Studio que é muito mais completo, mas no que eu testei funciona super bem no VsCode também. É questão de costume mesmo.

Então respondendo, viável é sim. Antigamente, com .Net Framework, não era possível utilizar c# no Linux (até tinha uns esquema com o Mono, que é uma versão pra linux, mas dava muito trampo). Hoje em dia com .Net Core, ele foi pensado para ser multiplataforma. Só vai.

Entre Java e C#, não posso opinar. Usei muito pouco Java, e tenho muito mais experiência com C#, então com base na minha opnião, é C#, mas é uma opnião totalmente influenciada pelo fato de eu usar C# todo dia.

Fiz uma pergunta parecida há algum tempo atrás que o @maniero respondeu, vale a pena dar uma olhada link.

Uma dica relevante para todos, se você vai programar apenas para desenvolvimento web, não importa qual seja o sistema operacional que você utiliza, independente da linguagem. Sistema operacional realmente importará se você for programar para o ecossistema da Apple ou precisar utilizar alguma toolchain especifica de algum OS exemplo: MSVC.

Consideraria C# também, embora tenha um preconceito por ser da microsoft.

VS Code e Typescript também são da Microsoft 🙃, Golang é da Google e assim por diante, ter uma Bog Tech por trás não deixa a linguagem ruim, é até mais fácil pois tem um suporte do caramba. O que acho que o C#/.NET tem é um forte acoplamento aos produtos da Microsoft, Visual Studio, Azure, o próprio Windows, mas atualmente a plataforma está bem mais "solta" em relação a isso.

Sobre rodar no Linux, sei que tem o SDK e o Runtime pra Linux (uso nos containers), o problema seria a IDE já que só o VS Code ou Rider estão disponíveis.

Na escolha da linguagem, apesar de gostar de C#, acho que iria de Golang, não acho mais "fácil" que o C# mas a parte de Deploy e suporte para ferramentas é um pouco melhor na minha visão.

Minha dica: faça um projetinho de API em cada uma delas.

Eu utilizo C# no Linux diariamente. Existem apenas alguns projetos que você não tem acesso como o Maui (é possível utilizar o Avalonia para apps desktop, que é bem melhor na minha opinião). Mas em geral a experiência é bem equivalente ao windows com a exceção é claro da disponibilidade do visual studio. Porém no Linux o C# devkit do vscode quebra um galho, e se procura uma ide completa como o vs, basta utilizar o Rider.

No caso específico em que vai desenvolver apenas web, o Linux deveria ser a primeira opção. Uma vez que provavelmente seu deploy será lá.

Sobre preferências. Eu considero C# uma linguagem mais prática do que Java. Por consumir menos recursos, ser ligeiramente mais performática, ter uma sintaxe mais flexível e um ambiente incrível para server side. Geralmente sempre que começo um projeto em outra linguagem como Go tendo a recriar a experiência do ASPNET. Não por que sou acomodado com o framework, mas sim por que foi a melhor experiência que já tive com web em geral, tanto server side quanto frontend com o Blazor.

mas consideraria C# também, embora tenha um preconceito por ser da microsoft

O problema não é ser de uma big tech, mas o que essa big tech faz com a ferramenta. Programo muito pouco com C#, mas a microsoft investe na linguagem e todo o ecosistema de maneira consistente há algumas décadas.

A Oracle demorou um pouco para dar a atenção que o Java precisava, mas nos últimos anos Java tem evoluído de maneira interessante.

Go que é mantido pelo Google e é bem consistente, o propósito por trás faz sentido.

Além disso, é bem provável que você use ferramentas da Microsoft todos os dias direta ou indiretamente como Windows, VSCode, GitHub, Office, LinkedIn, SQL Server... São ferramentas consistentes e confiáveis o suficiente, seu preconceito não faz sentido.

Mas há pontos de atenção, por exemplo

Depois que a Borland foi adquirida pela Embarcadero, o Delphi parou no tempo, as atualizações na IDE não são significativas para a tecnologia continuar relevante e hoje basicamente Delphi é usado apenas para manter legados.

A Meta (Facebook) não faz/fez um bom trabalho com o React, a Vercel está assumindo as rédeas e tá levando a tecnologia do jeito que ela precisa para forçar um vendor lock-in.

O Google costuma matar os projetos sem mais nem menos (mas isso não deve acontecer com Go)

O meu "preconceito" é mais com o windows mesmo, eu apenas não gosto do sistema

Claro que vale!

Já programo em C# ativamente no Linux faz 4 anos sem nunca mais ter tocado em Windows, sem nenhum problema. Graças ao .Net Core tivemos essa possibilidade de se tornar multiplataforma. Uso basicamente VSCode, um terminal e mais nada, mas te digo que com o plugin certo dá até pra codar no Vim pois já testei uma vez.

Único problema é se você trabalha com WinForms. Nesse caso é só Windows e Visual Studio mesmo, pelo que eu sei...

Sim, é possível. As extensões não são lá essas coisas, mas quebra o galho

Eu vou compartilhar minha experiência. Sou desenvolvedor PHP com React (também conhecido como fullstack) e recentemente comecei a trabalhar em uma empresa que requer o uso do Linux como nossa principal ferramenta.

A justificativa da empresa é que o Linux oferece melhor desempenho do que o Windows e também porque precisamos desenvolver uma aplicação que será hospedada em um servidor Linux. Em meus trabalhos anteriores, os computadores sempre foram Windows e nunca tive dificuldades significativas para desenvolver, especialmente após a chegada do WSL, que facilitou muitas coisas.

Então, decidi instalar o Ubuntu. Já o tinha instalado em computadores antigos por curiosidade e propósito de aprendizado. Naquela época, o Ubuntu não chegava nem perto do Windows em termos de usabilidade. Porém, hoje em dia, com a predominância das aplicações web, mal sinto falta do Windows. Estou realmente gostando de trabalhar no Ubuntu para desenvolvimento e percebo que meu notebook está mais ágil. Os problemas que encontro consigo resolver facilmente, seja encontrando uma alternativa no Linux ou recebendo correções de usuários mais experientes para meus problemas.

De maneira geral, tem sido muito mais fácil lidar com os pacotes, pois parece que tudo foi projetado pensando no Linux.

Não cheguei a trabalhar com java. Porém da minha experiência com c# se tu não for trabalhar com dotnet antes da versão 6 é bem tranquilo de desenvolver no linux. A versão 8 tem alguns recursos novos que deixa o codigo bem menos verboso, principalmente na injeção de dependências. Recomendo o Rider, vscode tem algumas limitações com relação a inclusão de arquivos que precisa em alguns projetos.

A cli do dotnet não é muito intuitiva igual do node.

Fazendo um adendo sei que o kotlin é menos verboso que o java com sintaxe bem parecida e um pouco de retrocompatibilidade, caso opte talvez seja mais tranquilo de aprender.

Trabalho com desenvolvimento usando .net fazem alguns anos, bom afim de aprendizado acho que você não deverá encontrar muitos problemas, afinal você estará criando um sistema novo e irá utilizar .net core que roda no linux sem mais problemas. Bom porém quando você chega ao mercado, encontramos alguns dinossauros construídos, temos aplicações que rodam com windows service por exemplo, sistemas bancários que rodam em .net framework 4.5 (que roda só no windows), mas pode ser que você só tenha contato com soluções novas que já utilizam .net core, então poderia estar mais familiarizado.

Acho que pra fins de estudo não há problemas, porém te adianto que talvez no mundo das empresas pode ser que você tenha que ter um dual boot para essas aplicações que necessitam do windows :)

Eu recomendaria talvez você considerar o Rider (Produto da Jetbrains) que roda tanto no windows quanto no linux, então você estaria familiarizado nos dois SO com sua principal ferramenta de trabalho ;)

Valeu!

Sou desenvolvedor c# backend e, por gosto pessoal, utilizo Mac. Respondendo sua pergunta, C# funciona sim muito bem fora do sistema Windows. A única limitação que tive até hoje foi com projetos Windows Forms mas, até aí, é meio óbvio... É uma linguagem robusta, um framework muito completo e tem ganhado cada vez mais recursos. Além disso, trabalha muito bem com qualquer Banco de Dados e Cloud (não apenas SQL Server e Azure).

Preconceito?

Linguagem é só uma ferramenta. Se a empresa que me emprega usa C#, Java ou VB, da na mesma. Programador entrega solução.

Vc pode ate dizer que prefere linguagem X pq tem mais mercado, totalmente logico e aceitavel. Vc pode dizer que pra um projeto pessoal, prefere linguagem Y , pq tem features que outra não tem. Mas preconceito nao faz sentido, gente.

Me **expressei mal**, eu apenas não sou muito fã do windows, gosto de desenvolver no linux e fiquei curioso se funcionaria bem no caso do C#. Se windows é melhor nesse cenário, então Ok, eu uso windows.

não recomendo, a maioria dos projetos não usam dotnet core. Então uma hora tu vai ter que usar o windows por que no linux não vai da para você coda, mesmo que seja para web.

Vamos entender o que é "desenvolver". Alguém precisa de algo, um software, um site, app mobile etc. talvez ela tenha algumas premissas, tem que funcionar na plataforma X, o prazo é Y, pelo preço Z, etc. Você entrega esse algo no prazo e valor combinado. Perceba que não importa se você usa Linux, Windows, macOS, etc. Qualquer coisa vai valer a pena se você consegue suprir a necessidade do cliente simples assim, ou seja, entregar no prazo o que foi pedido e no valor combinado.