O desenvolvimento em C # é efetivamente inseparável do IDE que você usa?

41

Sou um programador Python aprendendo C # que está tentando parar de se preocupar e apenas ama o C # pelo que é, em vez de constantemente compará-lo com o Python.

Estou atento a um ponto: a falta de clareza sobre onde as coisas estão definidas, conforme detalhado neste Pergunta sobre estouro de pilha . Resumindo: em C #, using foo não informa quais nomes de foo estão sendo disponibilizados, o que é análogo a from foo import * em Python - uma forma que é desencorajada dentro da cultura de codificação Python por ser implícita em vez de a abordagem mais explícita de from foo import bar .

Eu fiquei impressionado com as respostas do Stack Overflow a este ponto dos programadores C #, que na prática essa falta de explicitação realmente não importa porque no seu IDE (presumivelmente Visual Studio) você pode passar o mouse sobre um nome e ser informado pelo sistema de onde o nome está vindo. Por exemplo:

Now, in theory I realise this means when you're looking with a text editor, you can't tell where the types come from in C#... but in practice, I don't find that to be a problem. How often are you actually looking at code and can't use Visual Studio?

Isso é revelador para mim. Muitos programadores de Python preferem uma abordagem de editor de texto para codificação, usando algo como Sublime Text 2 ou vim, onde tudo é sobre o código, além de ferramentas de linha de comando e acesso direto e manipulação de pastas e arquivos. A ideia de depender de um IDE para entender o código em um nível tão básico parece anátema. Parece que a cultura C # é radicalmente diferente neste ponto. E eu me pergunto se eu só preciso aceitar e abraçar isso como parte do meu aprendizado de C #.

O que me leva à minha pergunta aqui: o desenvolvimento em C # é efetivamente inseparável do IDE que você usa?

    
por Ghopper21 15.10.2012 / 12:52
fonte

12 respostas

26

O Visual Studio é tão conveniente que, depois de trabalhar com ele por algum tempo, é difícil usar um IDE diferente. Tem um monte de ferramentas úteis e um monte de plugins disponíveis, então praticamente tem todos os recursos que você precisa.

Por outro lado, qualquer que seja o idioma que você aprenda, recomenda-se usar a linha de comando no começo, para que você possa entender melhor como isso funciona. C # não é uma exceção.

is C# development effectively inseparable from the IDE you use?

Teoricamente não, mas praticamente sim. É possível escrever em C # usando um editor de texto e uma linha de comando, mas se você tiver o Visual Studio, nunca faria isso. Na verdade, muito poucos programadores já executaram o código C # a partir da linha de comando.

BTW Se você se sentir inconveniente com using foo , poderá usar todo o caminho ao usar um tipo.

    
por 15.10.2012 / 13:09
fonte
33

The idea of being dependent on an IDE to understand code at such a basic level seems anathema.

Não é uma questão de entender seu código: dado tempo suficiente, você sempre pode localizar a variável certa com um editor de texto básico ou mesmo em uma impressão. No que diz respeito à compreensão do código, a dependência do IDE não existe absolutamente.

Localizar suas referências com eficiência é um assunto totalmente diferente: Adoro a capacidade de encontrar usos de variáveis Java no Eclipse tanto quanto adoro encontrar pontos de declaração no Visual Studio, tanto para C # quanto para C ++. Eu prefiro gastar meu tempo codificando, em vez de procurar pontos de declaração manualmente. Isso é semelhante a fazer matemática: posso multiplicar números de vários dígitos em um pedaço de papel, mas prefiro usar a calculadora para economizar um minuto ou dois.

A partir de um certo "tamanho crítico" do código, um bom IDE se torna muito útil, independentemente da linguagem de programação. O tamanho pode variar de idioma para idioma, mas depois de cruzar milhares de linhas, ter um IDE ajuda independentemente do seu idioma. Isso tem mais a ver com limitações de uma mente humana do que com uma linguagem de programação específica: em algum momento, sua memória de curto prazo está sujeita a "estouro".

Existem truques que permitem aumentar o tamanho crítico em que o IDE se torna útil. Por exemplo, você poderia seguir uma convenção de nomenclatura (os nomes húngaros eram grandes no mundo C ++ em algum momento, especialmente entre os profissionais do Windows). Outro truque comum é qualificar variáveis de instância com this. mesmo em contextos em que tal qualificação não é necessária.

Esses truques vêm com trade-offs: quase inevitavelmente, eles fazem o seu programa menos legível obscurecendo nomes, ou inserindo as referências explícitas que o encapsulamento pretendia esconder. Diante da escolha, escolho um código limpo e um IDE sobre um código menos limpo, menos um IDE. Reconheço plenamente, no entanto, que as escolhas de outras pessoas podem diferir das minhas.

    
por 15.10.2012 / 13:21
fonte
8

Many Python programmers prefer a text editor approach to coding, using something like Sublime Text 2 or vim, where it's all about the code, plus command line tools and direct access and manipulation of folders and files.

Isso é ótimo, mas falta o ponto do VS IDE. O ponto de uma IDE como o VS é o suporte rápido ao desenvolvimento através de ferramentas de código strongs como refatoração e intellisense. VS é um bom editor para código C #.

Agora, o C # permite que você codifique em um estilo que depende de seu IDE em maior medida (você pode usar muitas palavras-chave var e afins). Algumas pessoas preferem ser mais explícitas, por exemplo, usando aliases de namespace para ficar claro em qual namespace uma classe pertence (como import em Java ou Python). Isso é mais uma escolha de estilo de codificação do que um recurso do idioma.

Como o C # é estaticamente digitado (embora com algumas extensões dinâmicas, a partir da v4) é sempre fácil descobrir a que tipos estão sendo referenciados - se estiverem errados, o código não será compilado, e o VS não é o único IDE com suporte para intellisense C #. É provavelmente o melhor embora.

Desenvolver o C # sem um IDE poderoso (como o VS) é como martelar pregos à mão quando você já tem um prego - pode ser que você precise fazer isso, mas os profissionais usam a ferramenta certa para o trabalho.

Eu diria que o mesmo é provavelmente verdade para o Java também. Se houver um IDE poderoso com ferramentas intellisense e de refatoração de código, provavelmente você deve usá-lo.

No entanto, olhe para o contrário - se você não quiser intellisense, compilar verificação de código de tempo e análise de código / refatoração, então um IDE inchado não é o caminho a percorrer, e também não é uma linguagem estaticamente tipada. Eu acho que é o contrário:

Many programmers that prefer a text editor approach to coding don't gain as much from statically typed languages (like C# and Java) and so could be better off if they stick to dynamic ones like Python and Javascript.

Eu acho:

  • Os idiomas dinâmicos atendem às ferramentas leves (os IDEs pesados conferem menos benefícios aqui)
  • Linguagens estáticas adaptam-se a IDEs poderosos (ferramentas podem ajudar com o código em detrimento da flexibilidade)
por 15.10.2012 / 18:37
fonte
5

Para responder à sua pergunta: embora esteja mudando lentamente, o ambiente de desenvolvimento da Microsoft tem sido amplamente uma monocultura .

Esta abordagem tem muitos aspectos positivos e negativos, que podem ser discutidos em profundidade (por exemplo, considerar os prós e contras de plataformas abertas e fechadas, como PCs e Xbox), mas no final das contas, as ferramentas da Microsoft é o que a maioria das pessoas usa. A empresa também mostrou que a sua tomada de decisão é muitas vezes uma espécie de "dar o maior valor à maioria dos nossos usuários" processo, sempre à procura de compromissos práticos (mais recentemente - considere Datilografado ). Então, basicamente, eu não ficaria surpreso ao descobrir que o desenvolvimento do C # foi feito com o ferramental (VS) em mente.

    
por 15.10.2012 / 13:26
fonte
4

Por um lado, C # não é Python .. Existem diferentes metodologias de design.

Agora, para responder à sua pergunta, é completamente possível usar suas instruções usando o Python.

using FooBar=MyName.Foo.FooBar; 

É só que definitivamente não é a norma porque não é tão fácil. No entanto, acho que você deve se preocupar menos em saber exatamente de onde exatamente vem cada classe. Eu não entendo o ponto inteiro de fazer isto desta maneira em Python.

E também, C # é uma linguagem que se presta muito bem ao uso de IDEs para facilitar as coisas. O Intellisense é incrivelmente simples de implementar, especialmente em comparação com linguagens dinâmicas como Ruby e Python. No entanto, você não precisa ficar preso ao seu IDE. Eu já ouvi falar de pessoas usando o Eclipse. Há também o MonoDevelop (que eu uso bastante), e você pode até trabalhar a partir de uma linha de comando. No meu servidor, às vezes, eu vou editar arquivos C # com vi e, em seguida, usando xbuild para reconstruí-lo ... É só que usar um IDE torna as coisas muito mais fáceis em comparação com a linha de comando para casos típicos.

    
por 15.10.2012 / 17:47
fonte
4

Alguém se preocupou em ler aqui?

Resumindo, afirmo que a funcionalidade IDE massivamente complexa é indispensável e deve (deve) evoluir para o Zen do Sublime VimNess algum dia ...

Nosso software é de 129 projetos de cerca de 2M LOC. Adicione a solidez do framework .NET e, dado isso, tudo o que posso dizer é que o IDE é vital, transcendendo as motivações da questão deste segmento.

Insights sobre a base de código

Período. Você conhece os tipos de recursos dos quais estamos falando; exceto que sua conveniência se torna indispensável e essencial com o tipo de código de base que eu lido.

Eu escrevo melhor código por causa do IDE. Eu sempre adiciono mensagens personalizadas aos meus testes de Nunit porque é fácil, rápido e preciso. Sou a favor de enumerações sobre strings, em grande parte devido ao intellisense. Não hesito em usar nomes descritivos / longos - uma declaração de várias linhas é composta de forma rápida e limpa.

Mas mesmo essa inteligência é demais às vezes. Costumo usar uma boa pesquisa de texto "encontrar em arquivos".

Ajuda de codificação

Aqui é onde eu clamo "o suficiente!" Imagine uma tela cheia com uma dúzia de cores em sua maioria obscureatta, alguma variável particular destacada em todos os lugares, destacando obscurecer o que realmente é a cinta, sublinhando em todos os lugares porque "ela" quer que eu escreva literatura e não código, ícones para menus de contexto Resharper só tem que clicar nele! então ignorá-lo na maioria das vezes), um popup de ajuda de assinatura abrangendo 2/3 da tela horizontalmente, exibindo verticalmente várias sobrecargas, um pop-up por causa de onde você acabou de deixar o cursor do mouse .... Ainda não vi o & ^!% line * s * do código em que estou trabalhando!

Vis.Stud. precisa abraçar o minimalismo para que eu possa focar na codificação e não passar por centenas (milhares se você contar todas as configurações de codificação de cores e todos esses plugins) de configurações em uma batalha perdida recuperar a sanidade. Uma chave " Pareto " seria ótima.

    
por 20.10.2012 / 05:00
fonte
2

is C# development effectively inseparable from the IDE you use?

Claro que não. Por que você não importaria o namespace inteiro? A escolha de usar um IDE integrado ou um editor de texto não tem nada a ver com isso. Importar o namespace inteiro não dificulta a leitura do código ou sua utilização.

Lembre-se de que o C # é uma linguagem tipada. Se você importar vários namespaces que tenham a mesma classe, você receberá um erro de compilação.

Eu pessoalmente não uso declarações de tipo tanto assim. Em vez disso, uso a palavra-chave var pelas razões que descrevo aqui:

    
por 15.10.2012 / 13:52
fonte
2

is C# development effectively inseparable from the IDE you use?

No meu trabalho anterior, eu estava usando principalmente o vim para codificar em linguagens como C #, JavaScript, Powershell, Perl, C ++ e alguns desenvolvedores costumavam fazer algo semelhante. O projeto era muito grande para o Visual Studio.

Dito isso, a maioria dos desenvolvedores de C # lida com projetos muito menores e está muito feliz em usar o VS.

    
por 15.10.2012 / 16:59
fonte
1

Meu entendimento foi que, em Python, "tudo é público" ou algo parecido. Em C #, o designer do módulo decide o que é público e o que não é, portanto, quando você faz um import , você só obtém a API pública de qualquer maneira. Isso pode ser uma razão para a diferença que você está descrevendo.

    
por 15.10.2012 / 13:29
fonte
0

Esta é uma visão interessante sobre o desenvolvimento de C #. O que você está perguntando vai além do C #, se você estiver perguntando sobre o IDE.

Como você diz, no Python, você pode usar vários editores para escrever seu código. Você pode fazer isso com o .NET framework também. Há também outras ferramentas IDE que você pode usar, como o SharpDevelop. O Visual Studio é muito co-desenvolvido com o .NET framework e é relativamente caro. Ferramentas como o SharpDevelop e as versões "Express" do VS existem para atrair mais desenvolvedores a usar o .NET. Essencialmente, tudo que um IDE faz para você é fornecer um ambiente organizado, geralmente com intellisense, complementos de produtividade e um "ajudante" para montar o que pode acabar sendo uma linha de comando muito assustadora para passar para o seu compilador. O mesmo vale para o Java, ferramentas como o Eclipse apenas fornecem melhorias de organização e produtividade para nós. Sob o capô, nada mágico acontece até você construir ou compilar seu projeto e esse respeito, todos os IDEs são apenas rostos bonitos para o compilador hostil.

Quando você fala sobre a instrução "using" em C # e a compara com o Python, não é realmente a mesma coisa acontecendo sob o capô. As instruções de uso são usadas pelo compilador para auxiliar seu esforço na transformação do código C # em MSIL. No MSIL, não há nenhuma diretiva "importar todas essas classes deste namespace". Pelo código de tempo está no nível MSIL, todas as classes foram marcadas com seus nomes totalmente qualificados. Estas instruções "using" e "import" são para ajudar a legibilidade humana. Eles não são comandos de otimização do compilador. Depois que toda essa "marcação de nomes totalmente qualificados" foi iniciada, pode haver uma espécie de "minify" de baixo nível para os FQNs, mas isso é para ajudar o compilador / interpretador a executar mais rapidamente. Esta é a otimização - mas não há controle sobre isso oferecido ao desenvolvedor, a menos que você esteja escrevendo sua própria versão customizada do compilador!

Uma diferença fundamental final entre todas essas linguagens mencionadas aqui é que algumas delas são interpretadas por VMs, algumas são interpretadas como estilo JIT e algumas são totalmente compiladas. Como essas diretivas de uso são implementadas nesses compiladores e intérpretes é muito diferente.

HTH.

    
por 18.10.2012 / 21:34
fonte
0

Eu acho que historicamente a resposta é muito boa, sim - fazer com que o desenvolvimento do C # funcione efetivamente em qualquer coisa fora do Visual Studio, Xamarin ou SharpDevelop foi uma experiência muito desagradável.

Mas recentemente muitos projetos surgiram para facilitar, por exemplo:

O

OmniSharp , fornece uma base para o intellisense e a refatoração, juntamente com os plugins vim, emacs, atom e sublime. Eu não usei realmente, então eu não sei quão bem isso funciona, mas parece promissor.

Geradores Yeoman ASP.NET MVC , ajuda a inicializar um novo projeto MVC (talvez existam outros geradores).

paket , uma alternativa ao NuGet, onde você pode realmente adicionar pacotes NuGet ao seu projeto a partir da linha de comando, e ter o seu Os arquivos .csproj foram atualizados (embora houvesse uma ferramenta de linha de comando NuGet, atualizar os projetos para usar os pacotes era parte da integração do IDE, não das ferramentas de linha de comando).

Paket tem a implicação de que você precisa adaptar seu código-fonte a usá-lo - portanto, se você se sentar como membro único de uma equipe e quiser usar um editor de texto para codificação, e todo mundo usar Visual Studio, convencer todo mundo a adaptar a solução às suas necessidades: (

Portanto, você deve ser capaz de começar a trabalhar, mas há muito mais trabalho a fazer para colocar sua ferramenta em funcionamento de maneira eficiente.

    
por 16.11.2014 / 21:10
fonte
-1

Não mais:

link

OmniSharp is a family of Open Source projects, each with one goal - To enable great .NET development in YOUR editor of choice.

It’s fun to say Cross Platform .NET. But is it reasonable for someone to develop .NET without Visual Studio and Windows?

Is it fun to do .NET on a Mac in Sublime? Ubuntu and Emacs? Windows and Atom? You can use your editor PLUS get to use great features like Intellisense (not just Autocomplete), Add Reference, Format Document, and lots more. Develop anywhere, deploy anywhere (and to Azure!)

Eu testei isso com subime3 e osx

Mais amostras em

link

    
por 16.11.2014 / 20:34
fonte