Os novatos devem usar o preenchimento automático do IDE (Intellisense)? [fechadas]

35

Muitas vezes encontro isso quando estou ajudando alguém que é novo em programar e aprender pela primeira vez. Estou falando de novatos realmente novos, ainda aprendendo sobre OOness, construindo objetos, chamadas de método e coisas assim. Normalmente, eles têm o teclado e eu estou apenas oferecendo orientação.

Por um lado, o recurso de preenchimento automático dos IDEs ajuda a fornecer a eles o feedback de que estão fazendo o que é certo e que eles rapidamente gostam e confiam nele.

Por outro lado, temo que a dependência inicial do preenchimento automático do IDE faça com que eles não entendam realmente os conceitos ou sejam capazes de funcionar se um dia se encontrarem apenas com um editor simples.

Alguém com mais experiência a esse respeito pode compartilhar sua opinião? Qual é melhor para um novato, autocomplete ou digitação manual?

Atualizar

Obrigado pela contribuição de todos!

Muitas respostas parecem se concentrar no uso principal do preenchimento automático, como a conclusão de métodos, fornecimento de pesquisa e documentação de métodos etc. Mas os IDEs hoje em dia fazem muito mais como.

  • Ao criar um objeto do tipo List, um IDE é autocompletado automaticamente para o novo ArrayList no lado direito. Pode não ser imediatamente claro para um novato por que não pode ser nova Lista, mas ei funciona, então eles seguem em frente.
  • Preenchendo os parâmetros do método com base em variáveis locais no contexto.
  • Execução de castings de objetos
  • Adicionando automaticamente instruções 'import' ou 'using'

e muito mais. Esses são os tipos de coisas que quero dizer. Lembre-se de que estou falando de pessoas que estão fazendo Programação 101, realmente apenas começando. Eu observei o IDE fazendo essas coisas das quais eles não têm idéia, mas eles apenas continuam.

Alguém poderia argumentar que isso os ajuda a se concentrar no fluxo do programa e a apreender as coisas antes de aprofundar e entender as nuances da linguagem, mas não tenho certeza.

    
por codinguser 26.01.2011 / 15:54
fonte

16 respostas

10

Acho que o uso do IDE ajuda no processo de aprendizado. Métodos, propriedades, parâmetros, sobrecargas e similares são detectáveis. Com as enormes bibliotecas, o Intellisense ajuda a reduzir o conhecimento do JIT. No atual ambiente de codificação, é impossível aprender tudo na frente, e o aprendizado JIT é muitas vezes a única maneira prática de se tornar rapidamente produtivo.

Eu entendo que usar uma IDE pode ser uma muleta se você a usar cegamente, mas acho que os benefícios superam em muito os negativos.

Usar modelos sem entender o que foi pré-criado para você, por outro lado, é mais um problema. Eu acho que eles podem ser usados como uma ferramenta de aprendizado se o desenvolvedor tiver tempo para ler o código modelado. Mas a maioria das pessoas não se incomoda. Pode ser uma ótima ferramenta de aprendizado.

    
por 26.01.2011 / 14:39
fonte
74

Entender os conceitos e memorizar dezenas de centenas de classes e métodos estúpidos de bibliotecas são duas coisas completamente diferentes. O IntelliSense ajuda a eliminar completamente todo esse conhecimento inútil de sua mente, e quanto mais cedo você fizer isso, melhor. Deixe mais espaço para os conceitos úteis, não desperdice seus recursos limitados em APIs.

Para responder a uma parte atualizada de uma pergunta: pequenos detalhes de sintaxe, layout de arquivos, compilador e invocação de linker também não são importantes em comparação com os conceitos de programação genérica. Uma vez que eles entendem que um novato-não-mais pode entrar em um entendimento mais profundo de como o material de baixo nível realmente funciona. É melhor fazê-lo quando você já conhece o básico, caso contrário, você terá uma série de perigosas superstições mágicas.

Por exemplo, o DrScheme IDE tem um grande histórico em programação de ensino, e seu sucesso é principalmente devido à sua capacidade de ajudar a se concentrar no que é realmente importante.

    
por 26.01.2011 / 16:17
fonte
16

Usar o preenchimento automático não é uma coisa ruim.

É simplesmente por velocidade, e para mim seria um sinal de alguém começar a entender o IDE e usá-lo bem.

Eu não entendo como NÃO usá-lo iria ajudá-los a aprender OO, por exemplo.

    
por 26.01.2011 / 13:11
fonte
13

Tendo ensinado e ensinado alunos que são novos em programação, acho que o autocomplete / intellisense às vezes causa mais mal do que bem. Sim, eles podem escrever um programa usando isso. Sim, compila e corre e pode até fazer a coisa que pedimos para eles fazerem. Mas eles não entendem o que estão fazendo.

Quando eles não entendem o que está acontecendo, torna-se menos programação e mais hacking uma solução juntos para obter marcas. Descobri que isso aconteceu muito com os alunos, pois o que pedimos para eles se tornarem mais difíceis, eles apenas invadiram até que algo funcionasse. Isso sempre ficou claro quando o meio do processo chegou e os alunos foram solicitados a escrever métodos simples à mão ... eles não podiam.

Sim autocomplete / intellisense nos ajuda muito (desenvolvedores profissionais) muito b / c isso nos acelera. Nós não temos que memorizar todos os métodos e listas de parâmetros diferentes, mas ao mesmo tempo também podemos arriscar um palpite sobre quais parâmetros um método vai tomar b / c, temos a experiência de programação para saber.

Novatos não. Eles vão esperar que o seu IDE abra uma lista de métodos, eles irão rolar a lista até encontrar um que talvez seja o que eles precisam, eles vão olhar os parâmetros que precisam e ver se eles têm que passar. ..e no final eles terão hackeado algo juntos que eles podem entregar.

E, no final do curso, quando eles conseguiram passar, eles saíram de sua aula de programação com uma vitória superficial, muitos nunca mais voltaram para a aula de EC, porque não entendiam nada do que faziam ou porque eles fizeram isso.

    
por 26.01.2011 / 15:28
fonte
9

O problema com IDEs e ambientes de desenvolvimento em geral não é tanto coisas como preenchimento automático como o uso de soluções modeladas (file | new | project) onde muitas coisas "interessantes" já foram feitas para você e são, para variar graus, oculto.

Para alguém que, em geral, entende o que está acontecendo sob o capô, isso é útil - mas para alguém que está aprendendo, o que eles precisam é muito menos.

Há também a questão do tempo gasto para iniciar um IDE pesado ...

Acho, portanto, que usar algo mais leve e ser capaz de executar aplicativos nos quais você escreveu cada linha de código tem mérito considerável - especialmente quando usar um editor de texto e um compilador demonstra o ponto importante que você não usa. Não preciso de um IDE etc para escrever software mas isso não significa que eu quero usar um editor de texto por muito tempo e que apresenta desafios em termos de depuração - você quer ser capaz de fazer pontos de interrupção e você quer ser capaz de passar pelo código, pois isso tornará mais fácil entender o que está acontecendo.

É claro que podemos confundir ainda mais o problema considerando coisas como Python, onde você tem uma linha de comando "ao vivo" ...

Boa pergunta, nenhuma resposta boa - exceto que você quer tornar o aprendizado uma progressão e começar com um editor de texto e um compilador (ou um interpretador de linha de comando) permitirá que você se concentre nos fundamentos da sintaxe e da lógica antes de você progredir para coisas mais complexas que serão mais fáceis de fazer com um ambiente de desenvolvimento mais poderoso.

    
por 26.01.2011 / 13:58
fonte
4

Aprender da maneira mais difícil geralmente fica com você.

Como novato, NÃO use o IDE. Use a linha de comando, aprenda com seus erros. Isso também ajudará você a entender melhor as opções de compilador e vinculador.

Então, quando você usa o IDE? Quando você está projetando algo enorme ou trabalhando em uma grande base de código com muitas classes, métodos e variáveis.

    
por 26.01.2011 / 14:00
fonte
4

Eu seria o primeiro a dizer que os IDEs são um benefício para a produtividade, mesmo que eu frequentemente se queixe de suas peculiaridades. No entanto, aprendi BASIC, C, C ++, Java, Python, Perl, PHP e várias outras linguagens sem nada além de um editor de realce de texto e o compilador / interpretador para o idioma. Eu realmente aprendi Java no Bloco de Notas!

Aprender um IDE propicia "mágica" - a ideia de que "funciona; não importa como". A abstração é boa; Magia é ruim. Um programador deve saber, ou ser capaz de descobrir, tudo o que está acontecendo em um projeto. Um bom IDE é projetado para cuidar da criação de livros, não controlando o projeto. Usado corretamente, é uma ótima ferramenta. Mas que artesão começa usando um roteador CNC?

Acho que a maneira como aprendi (ter que digitar tudo e conhecer bem o compilador para criar um projeto) me ajudou imensamente quando finalmente comecei a usar IDEs. Por exemplo, um projeto Java não é uma pequena pasta no projeto Eclipse, mas uma coleção de classes em uma estrutura de pacote com alguns arquivos XML para caminhos, configuração e implementação. Eu não gostaria de criar um aplicativo corporativo grande sem um IDE, mas posso construir pequenos. Isso torna mais fácil entender a estrutura dos grandes, e quando eu quero um comportamento específico na construção, por exemplo, eu sei como o javac funciona, para que eu possa ajustar o prompt de compilação em vez de tentar encontrar aquela combinação mágica que não faz t existe na configuração de compilação. Eu também acredito que tenho uma compreensão mais profunda das mensagens de erro e como encontrá-las e corrigi-las. Os IDEs promovem a sensação de que, como não há sublinhados vermelhos, o código está bem certo.

Eu não ensinaria usando um IDE. Eu acho que os projetos iniciais são pequenos o suficiente para que os argumentos para gerenciar a complexidade sejam discutíveis. Se você estiver ensinando Java, por exemplo, poderá colocar todas as suas classes na mesma pasta e javac *.java . Você não precisa de uma IDE para isso! Isso defende a manutenção de projetos pequenos, pouco mais do que prova de conceitos. Minimize a sobrecarga e concentre-se em ensinar o conceito de que os alunos precisam. Projetos maiores nos quais um IDE seria útil pertencem a classes SE mais avançadas ou a projetos dedicados.

Quanto à ajuda para encontrar aulas e pesquisas sobre APIs, novamente, acredito que isso seja discutível se os projetos forem mantidos pequenos. Novamente em Java, o javadoc é muito fácil de ler. Ninguém pode manter a API inteira lá de qualquer maneira, e será um momento em que você precisará pesquisar uma API sem o benefício de um IDE. Como em outros idiomas, ou se estiver remotamente em um servidor onde você não pode abrir o IDE. Ensine como encontrar documentação, não "pressione". e você pode ver quais são os métodos de um objeto. "

Qualquer programador pode aprender um IDE, mas conhecer um IDE não faz de você um bom programador. Humor negro à parte, "mágica" nunca é uma boa palavra para um programador usar.

    
por 26.01.2011 / 15:37
fonte
4

Talvez um novato deva simplesmente trabalhar em problemas mais fáceis primeiro. E não, esses problemas não devem exigir ou incentivar o uso de um IDE para concluir a tarefa. Há mais a ganhar a longo prazo, compreendendo os conceitos básicos. As ferramentas devem vir depois.

Nenhum artesão de carpintaria pularia direto para usar uma plaina de alta potência sem entender as complexidades do tipo de madeira e do plano da mão primeiro.

(Nota: autocomplete e intellisense são duas coisas drasticamente diferentes).

O Intellisense, por si só, não é ruim. É ruim quando é usada uma muleta para adivinhar a funcionalidade sem ler ou entender a documentação ou a implementação subjacente.

Ponto lateral: Se o idioma exigir que um IDE codifique para você, o idioma provavelmente estará no nível errado de abstração para os problemas que você está tentando resolver.

    
por 26.01.2011 / 16:06
fonte
3

Quando crescemos quando criança, não nos dizem que devemos entender as intricadas regras da língua inglesa antes de podermos falar. Não nos é dito que devemos entender completamente o uso adequado de preposições, conjunções e evitar fragmentos de sentenças. Nós aprendemos fazendo. Nós aprendemos através do sucesso e do fracasso.

Uma IDE com autocomplete ajuda o novo programador a ganhar confiança, facilitando a criação de programas, sem ter que se lembrar de todas as inúmeras funções de uma vasta variedade de bibliotecas.

Se alguém realmente extrapolar a visão de que o autocomplete prejudica o novo programador porque torna isso muito fácil para eles, então você poderia argumentar que livros de referência não devem ser usados enquanto programação, porque os conceitos dentro devem ser comprometidos com a memória primeiro, pois não tê-los memorizados os retarda, e não permite que eles entendam completamente os conceitos primeiro.

Autocomplete é uma ferramenta usada para tornar o programador mais produtivo. Assim como aprender uma língua pela primeira vez, depois que ganhamos confiança e um nível de sucesso com o que estamos aprendendo, trabalhamos para melhorar nosso conhecimento.

    
por 26.01.2011 / 17:21
fonte
2

No começo, já é difícil construir algo que funcione, então qualquer coisa que ajude a marca noobie, melhor. Um novo programador vai precisar de alguém mais experiente para fazer com que eles pensem se as listas encadernadas de matriz ou as listas encadeadas serão as melhores para o problema em questão. Cada um deles tem seus pontos strongs e fracos.

Se o novato tem um IDE ou está navegando on-line pelos documentos da API, não haverá nenhuma diferença real entre o código criado por eles. Embora lidar com a dor de escrever erros de sintaxe possa ser uma experiência de aprendizado, há muito o que aprender para se preocupar com isso no início.

Você não aprende a andar na corda bamba indo direto para o alto fio sem uma rede. Você começa andando uma corda que está a centímetros do chão. Eu me atreveria a dizer que a maioria de nós trabalha com um IDE e com algum tipo de script de construção (o script de construção do Visual Studio é criado pelo IDE, mas está lá). A maioria de nós não constrói nossas classes manualmente com um editor de texto e invoca o compilador manualmente. Por que devemos impor isso a um novato que tem muito mais a aprender?

    
por 26.01.2011 / 14:16
fonte
2

Não vejo necessidade de sofrer a dor de ferramentas anteriores, mesmo quando um desenvolvedor está aprendendo. Acredito que o tempo e o esforço extra necessários para escrever o código sem as ferramentas seriam mais bem aproveitados, aprendendo como escrever testes de unidade e depurar. Depois que um usuário souber como testar seu código e analisá-lo enquanto ele é executado, ele aprenderá muito sobre o que realmente está fazendo.

Além disso, não é como usar um IDE significa que o código se escreve. Um desenvolvedor inepto ou iniciante vai escrever um código que não funciona se eles usam um IDE ou não.

Acabei de ver o IDE como outro nível de abstração ao codificar. Se estou escrevendo Java, geralmente não preciso entender como o bytecode gerado funciona. Se um novo programador estiver usando Java libs, ele não precisará saber em que pacote ele está, se o IDE puder adicioná-lo automaticamente para ele. Em ambos os casos, se ocorrer um erro ou problema no nível inferior (por exemplo, conflito de nome de classe) que cause um erro, é hora de o desenvolvedor consultá-lo manualmente.

    
por 26.01.2011 / 16:09
fonte
0

Muitas outras boas respostas, portanto, não considerem isso uma resposta completa, mas é bom que novatos e usuários experientes vejam um quadro completo de quais funções eles têm à sua disposição.

No Delphi eu posso pressionar ctrl-j e eu vou ver uma lista de todas as coisas possíveis que eu poderia sintaticamente esperar trabalhar.

Eu não concordo necessariamente, mas li argumentos no sentido de que os programadores nem deveriam olhar para os membros da classe privada dos objetos que usam e, dessa forma, o preenchimento automático fornece a todos os usuários uma referência instantânea à API.

Os novos IDE permitem que usuários e desenvolvedores de linguagem coloquem meta-dados em seu intellisense, o que aprimora ainda mais a capacidade de ler e entender o que as funções fazem, sem ler a fonte (algo que não deveriam ter que fazer).

Talvez seja melhor que novatos leiam e entendam tudo o que implementam. Mas, talvez seja uma pergunta melhor se os novatos devem ou não incluir ou importar os namespaces ou unidades desejados sem documentar por que estão sendo incluídos.

    
por 26.01.2011 / 15:07
fonte
0

Na minha experiência, usar um IDE para aprender o básico do OO é ótimo porque esconde parte da complexidade de realmente escrever código, enquanto permite que o novo desenvolvedor se concentre na lógica do programa. No entanto, logo depois de aprender a programar e os princípios OO básicos, fui forçado a entender mais precisamente quais partes precisavam interagir uns com os outros nos arquivos de origem (sem esquecer as instruções de importação, instanciando as classes corretas, etc.) por um curso de programação. onde tínhamos que usar máquinas Unix de terminal.

Isso é possível na escola porque alguém tem a 'autoridade' para forçá-lo a usar ferramentas lo-fi. Seria muito mais difícil de conseguir em um ambiente empresarial ou corporativo.

    
por 26.01.2011 / 17:00
fonte
0

Eu tenho dois pensamentos sobre isso. A primeira é que, para realmente aprender algo, acredito que você precisa saber o que realmente está acontecendo. E com a qualidade do IntelliSense, ele pode ocultar um pouco disso para um novo desenvolvedor. Por exemplo, eu tive uma aula de engenharia na web na faculdade, na qual nós construímos nossos próprios frameworks web para construir nossos aplicativos finais. Eu saí dessa classe com essa habilidade de me adaptar a praticamente qualquer framework web porque eu tinha a compreensão do que estava por trás de tudo isso para começar. Usar um IDE não é exatamente a esse nível, mas o ponto ainda está lá, acredito.

No entanto, o uso de um IDE também pode fazer coisas como abrir APIs para novos desenvolvedores. Quando comecei a codificar seriamente, o IDE que usei me ajudou tremendamente porque eu faria coisas como digitar um objeto, usar o preenchimento automático para ver quais métodos ele tinha e pesquisá-los usando os documentos disponíveis. Tudo isso foi feito dentro do IDE e foi uma ótima ferramenta de aprendizado.

Então, sim, eu acredito que não há problema em usar um, desde que você também tenha tempo para entender o que está acontecendo. Apenas usando um objeto de elenco sem entender por que você tinha que é realmente ruim, mas, se um novo desenvolvedor vê que você pode usar um objeto convertido e, em seguida, olha para ver porque não vejo nada de errado.

    
por 26.01.2011 / 17:06
fonte
0

Aprender requer prática. A programação pode ser uma tarefa muito frustrante quando você não tem idéia do que pode fazer nem de como as coisas funcionam.

É impraticável, por exemplo, ler muitos livros sobre princípios de programação sem escrever uma única linha de código; Ninguém aprende nada desse jeito.

O Intellisense é muito útil para dar aos novos programadores a ajuda necessária para manter a programação, continuar praticando e, assim, aprender.

Como já foi dito, aprender APIs específicas não é o mesmo que aprender princípios de programação. O que sem dúvida irá acontecer é que os novos programadores cometerão erros (independentemente do Intellisense), e como eles escolhem corrigir esses erros é o que os levará a se tornarem bons programadores ou pobres.

Se você está tentando ensinar alguém a programar, eu faço com que eles usem o Intellisense e brinquem até ficarem presos. Foi quando tentei criar uma base ensinando-lhes o motivo pelo qual ficaram presos.

    
por 26.01.2011 / 18:22
fonte
0

IMO, os IDEs vão tornar você mais produtivo. Mas, para iniciantes, geralmente não é uma boa idéia começar a programar com o IDE. Editores de texto como o notepad ++, o bloco de notas, etc. seriam suficientes.

Além disso, geralmente não é considerado uma boa ideia começar a aprender a programação com linguagem de alto nível. Eu sugiro que você comece com linguagem assembly. Isso lhe ensinará o básico e também a paciência.

    
por 26.01.2011 / 19:25
fonte