Uma faculdade local está ensinando C ++ a estudantes do primeiro ano (16 anos) sem experiência anterior em programação.
Como primeira linguagem de programação, o C ++ é adequado?
Uma faculdade local está ensinando C ++ a estudantes do primeiro ano (16 anos) sem experiência anterior em programação.
Como primeira linguagem de programação, o C ++ é adequado?
Respostas:
Enfaticamente não .
Para qualquer objetivo que você tenha em mente para os alunos, outro idioma ou sequência de idiomas seria mais rápido e melhor. Exemplos.
"Os alunos precisam entender conceitos de baixo nível".
A codificação "de baixo nível" não consiste em obter objetos new
, alimentá-los delete
e, ocasionalmente, ter um ponteiro apontando para algum lugar que não deveria. Funções, classes e modelos não são de baixo nível. RAII, 12 maneiras de usar const
, std::ostream::operator<<
, protected
e new
não são conceitos de baixo nível. Essas coisas têm implicações de baixo nível e você as pula por meses ou até uma aula futura e ensina montanhas de semântica em C ++.
Sugiro montador com um bom ambiente e material didático como MIPS ou MMIX. Se você estiver com pressa, ensine C com desvios para pelo menos observar a saída do montador. Isso lhe dará todo o entendimento de baixo nível que o C ++ faz e, em seguida, um pouco mais rápido.
"Os alunos precisam entender a orientação a objetos."
A orientação a objetos incorporada ao C ++ é muito complicada para ensinar conceitos de OO, ou quase qualquer outro conceito de alto nível. Consulte as Perguntas frequentes sobre C ++ para obter uma lista longa e agradável de possíveis razões. Você precisa acertar todas essas coisas, o que levará muito, muito tempo, com os novos programadores; ou então você precisa pular muito, deixando os novos programadores no escuro - efetivamente, sem conhecer C ++!
Sugiro aprender uma linguagem mais simples e de alto nível com os objetos primeiro (Python, Ruby, Squeak, Common Lisp, Racket), se você precisar ensinar C ++. Além disso, aprenda o polimorfismo como um conceito separado do OO visitando uma linguagem funcional.
"Os alunos precisam entender modelos e metaprogramação de modelos".
Ninguém realmente pergunta isso, mas eu gostaria que eles perguntassem. O C ++ possui bons modelos e o STL é legal, mas eles não devem ser uma prioridade suficientemente alta para ensinar C ++ primeiro. Ensinar o sistema do tipo OCaml ou Haskell e adaptar esses conceitos pode ser mais rápido de qualquer maneira.
"Os alunos precisam aprender a resolver problemas".
Sim, você obtém isso em qualquer idioma e obtém mais, em quase qualquer idioma que não seja o C ++, porque há muito menos bagagem. Mais uma vez, consulte as Perguntas frequentes sobre C ++ para obter uma lista de tudo o que os alunos aprenderão em vez de habilidades para resolver problemas.
"Todas as opções acima, e precisamos usar apenas um idioma." ou "Os empregadores querem". ou "Precisamos de uma linguagem no estilo C." ou...
Ensine mais de um idioma.
A idéia de que você economiza tempo ou energia ensinando ou aprendendo apenas um idioma é totalmente ridícula. É baseado na idéia de que o aprendizado de um determinado idioma leva exatamente X meses por mês ( HINT! HINT! ), Em que X é um número único ou um número por idioma. Isso é quase idêntico à idéia de que você pode economizar tempo e dinheiro ignorando todos esses 'requisitos' e 'testando' o lixo.
Quanto a várias sintaxes, você prejudica perigosamente os alunos se ensiná-los a esperar a sintaxe C em todos os idiomas, tornando-os descontrolados contra outros idiomas.
Quase todo caminho é mais rápido e melhor do que iniciar com C ++. Aprender uma linguagem simples de alto nível e, em seguida, C ++ seria mais rápido. Aprender assembler e C ++ seria mais rápido. Qualquer coisa diferente de C ++ levará os alunos para lá mais rapidamente e eles saberão muito mais sobre o que fazer. Apenas não ensine C ++ primeiro.
Não, o C ++ é uma linguagem difícil, mesmo para desenvolvedores experientes em C ++. Mesmo para os algoritmos mais simples, você precisa explicar muitas das sutilezas da linguagem. Considere um exemplo do Hello World:
#include <iostream>
int main()
{
std::cout << "Hello World!" << std::endl;
}
O que é esse #include
comando? O que é std::cout
. Por que o ::
? O que é <<
? Ohhh, é um operador sobrecarregado! O que é um operador sobrecarregado? Então, ints
isso muda bastante, mas, seja o que std::cout
for, ele gera coisas para o console. Ohhh, std::cout
é um fluxo e fluxos têm o seu <<
e >>
operador sobrecarregado.
Vamos ver o mesmo exemplo em Python:
print("Hello World!")
É isso aí, vamos codificar alguns algoritmos.
Provavelmente não é uma boa primeira linguagem: sintaxe complexa, muitas regras, linguagem antiga, gerenciamento de memória propenso a erros. Melhor ensinar aos alunos algo mais OO como o Smalltalk, ou algo mais agradável para programar com o Python, ou algo funcional como o Haskell.
Eles podem aprender C ++ mais tarde na vida (se não puderem evitar), depois de aprenderem idiomas melhores.
Resposta curta: Sim!
Eu diria que qualquer idioma é um começo adequado, mas especialmente C ++ (ou equivalente). Hoje em dia, C # e Java são as principais linguagens em uso e programação, e você aprende rapidamente a usar API e IDE, mas com C ++ você tem a chance de aprender programação desde o início, incluindo otimização de desempenho, etc.
Nunca é uma má idéia aprender o básico de programação, loop e classificação antes de confiar cegamente em uma linguagem incorporada .Sort ();
Na verdade, acredito que provavelmente seja uma boa escolha como primeira língua por um motivo muito prático: depois de aprender C ++, qualquer outra língua que você encontrar parecerá muito fácil de aprender.
Eu me ensinei C ++ quando tinha 15-16 anos.
É melhor deixar a magia para os outros e aprender o funcionamento interno das coisas.
Para ser franco, se você não consegue descobrir a sintaxe e a semântica C ++ de nível de entrada, não é tão bom em computadores. Não é tão difícil. Não há uma boa razão para evitar "C com Classes".
Se você espera que os alunos comecem a trabalhar na metaprogramação de modelos, deduzindo chamadas polimórficas e desmembrando várias hierarquias de herança - isso é ridículo para uma classe de nível básico para qualquer tipo de idioma usado.
Há uma tendência muito ruim a querer esconder os meandros da programação para os alunos. Isso não acaba bem (cf. ensaio das Escolas Java de Spolsky). Essas pessoas acabam no DailyWTF se não acertarem a cabeça. As abstrações vazam, e quando (e não se) a abstração vaza, isso é pior do que ter que lidar com isso. Eu tenho trabalhado como um TA para estudantes de nível de entrada C ++. Ou as coisas têm que estar escondidas o tempo todo, ou têm que ser trazidas à luz para serem examinadas. A magia é inimiga do aprendiz.
Se eu precisasse recomendar uma linguagem inicial compilada no código de máquina, uma variante de Pascal provavelmente seria a melhor abordagem. Ele tem uma abordagem mais regular e estruturada do que a família C, pelo que me lembro.
Eu diria 'não' - eu estava ansioso e desejava aprender programação, e entrei no meu ano de introdução na faculdade com C ++ logo de cara. Juntamente com um professor que estava ensinando C ++ como se fosse outra linguagem (conceitos que faziam sentido para eles, não necessariamente conceitos da linguagem ou aplicativo do mundo real) e projetos lançados para nós imediatamente toda semana, eu bati e queimei junto com metade da turma. Quando consegui digerir, experimentar e aplicar o que estava sendo ensinado, lutei com o dever de casa do projeto, que também funcionava como testes. Eu diria que era mais um curso de 200 níveis do que 100.
Eu realmente tentei o meu melhor. Não pedi simpatia, sabia que seria um desafio, mas a professora nem me ajudou. Apenas me disse para ir ler o livro, como eu estava fazendo.
Eu argumentaria (e alguns discordariam) que Ruby ou Python é uma linguagem muito melhor para introduzir alguém no mundo da programação. Sintaxe limpa, concisa, legível e mais clara.
Não.
Como linguagem de ensino, o C ++ é apenas marginalmente melhor que o C, que é uma das piores linguagens de ensino existentes. Ele apresenta muita complexidade desde o início, algumas partes da linguagem são profundamente não intuitivas e, na maioria das vezes, você aprende mais sobre C ++ do que sobre programação em geral.
Isso não quer dizer que C ++ (ou C) sejam linguagens ruins ou que não valem a pena aprender; apenas que existem melhores linguagens de ensino disponíveis, como Python.
string
tipo de dados que os operadores sobrecargas gosto +
, =
e ==
fazer as coisas que os estudantes mais ou menos esperar, em comparação com o necessidades de processamento de string a ser feito em C. Assim "marginalmente" . Eu também não recomendaria como idioma de ensino.
Existem dois tipos essenciais de ensino pós-secundário: a universidade e a escola de comércio. A diferença está no que você deseja estar preparado para fazer após a formatura. No setor automotivo, é se você será mecânico ou engenheiro mecânico.
Dito isto, o C ++ é uma ótima primeira linguagem, se você quer ser um engenheiro, e péssima, se você quer ser o equivalente de programação de um mecânico.
Uma classe de introdução ao C ++ passará muito tempo conversando sobre tipos de dados, definições, declarações, ponteiros, alocação de memória e assim por diante. Essa é uma excelente base se você pretende gastar vários semestres acumulados para poder fazer algo útil, mas quer saber que, uma vez que você chegar lá, terá a base para lidar com qualquer grau de complexidade.
Por outro lado, se você quiser fazer algo útil mais rapidamente, mas não se importa se o domínio e a complexidade são limitados, gastar todo esse tempo com esses conceitos de nível inferior logo será um desperdício. Existem muitos programadores que podem escrever um ótimo validador de formulário html, mas não têm idéia de como abordar o design de um driver de dispositivo.
Certo. Minha primeira linguagem era C, mas isso era realmente apenas para facilitar nossa classe em C ++. Tornou o Java muito mais fácil de lidar quando cheguei à Universidade. O C ++ pode ter uma curva de aprendizado um pouco mais íngreme, mas se for ensinado adequadamente, deve ser bom.
Não, o C ++ não é adequado como primeiro idioma. Como mostrado aqui, muitos programadores profissionais compartilham essa opinião, mas essa também é uma opinião que os professores profissionais têm.
Aqui está o que um relatório do reitor da Universidade Carnegie Mellon tem a dizer sobre o uso do C ++ em um curso introdutório de programação para calouros:
Linguagens padrão como C ou C ++ não são adequadas para este curso porque sua complexidade e deficiências impedem as técnicas de raciocínio informal e mecanizado.
A CMU oferece dois cursos introdutórios, um imperativo e um funcional. O SML foi escolhido para a programação funcional. Não sei o que foi escolhido para o curso imperativo, mas o relatório menciona o uso de um subconjunto de C.
Definitivamente, C ++ pode ser a primeira linguagem. Mas é sobre o quão bem é ensinado.
Todo mundo diz que o primeiro idioma deve ser muito fácil de entender. Mas o que quero dizer é que a maioria das pessoas começa a programar no nível de graduação. Então, você pode ensinar algo que eles são capazes de entender. E com o C ++, você pode passar de um nível mais baixo para um nível mais alto de programação.
Não. Absolutamente não.
Se eu tivesse o que queria, desaprovaria seu uso em um ambiente acadêmico quase inteiramente. Não por razões contrárias às que já foram feitas, mas porque muitos pensam que C ++ (ou variações) é a resposta para quase todos os problemas, porque você pode usá-lo em praticamente qualquer situação. É a chave de fenda da programação.
Algumas pessoas o usam para apertar parafusos, uma ferramenta perfeitamente razoável para o trabalho. Outros o usam como um prybar, embora geralmente sejam eficazes, não ideais porque uma chave de fenda, não importa o que seu pai possa dizer, não é um prybar e pode falhar catastroficamente devido ao uso indevido porque a composição da haste não é intencionalmente construída para o tipo de força que um prybar encontraria. Outros ainda podem tentar usá-lo como um furador ou um cinzel, e quase sempre encontrarão problemas porque o cabo da chave de fenda não foi construído para o tipo de abuso flagrante que um furador ou um cinzel foi projetado para suportar.
Na minha opinião, o trabalho de um programador é geralmente traduzir problemas reais em automação que fornece algum grau de eficiência aprimorada (diminuir o comprometimento de recursos em uma tarefa), velocidade (diminuir o tempo para executar uma tarefa), previsibilidade (aumentar a repetibilidade de uma tarefa) ou organização (aumentar a conscientização sobre o relacionamento entre tarefas).
Embora seja compreensível que todos os que programam tenham algum conhecimento comum sobre operações de baixo nível de computadores e, especificamente, E / S de dispositivos e alocação de memória, é definitivamente incomum realmente precisar utilizar esse conhecimento em qualquer grau significativo, e muito menos aproveitá-lo para o grande maioria das tarefas. Tentar fazer isso sem entender o contexto mais amplo do problema insere um risco desnecessário em um esforço.
É absurdo que uma primeira linguagem de programação seja C / C ++ ou variantes aproximadas, pois a classe de problemas que C e seus derivados resolvem certamente não é apropriada para uma porcentagem arbitrariamente grande dos problemas atuais e futuros (exceto onde é preciso resgatar um programa previamente com chave de fenda) e, de fato, é mais um conjunto minúsculo de problemas futuros. A maioria dos programadores nunca chega perto de desenvolver os principais recursos do sistema operacional ou interfaces diretas de dispositivos, apesar da crescente prevalência de pequenos dispositivos móveis e interconectados. A maioria vai trabalhar e viver como nós. Corrigindo e eliminando o código com mais de duas gerações, implementando a tecnologia que já mostra idade ou trabalhando à margem da tecnologia no aplicativo matador (x + 1).
Para um primeiro idioma, eu consideraria o Lego NXT, uma variante leve do LabView. Embora o Lego NXT não seja amplamente utilizado em empreendimentos comerciais, ele apresentará a natureza fundamental do que é programar de uma maneira "rica em sensores". Eu poderia emparelhá-lo com uma linguagem de script um pouco neutra em plataforma, como Javascript ou TCL / TK. Ambos teriam um impacto relativamente baixo em termos do que você precisa descobrir para executar tarefas muito básicas, mas eficazes, com alto retorno em termos do ciclo de feedback e flexibilidade para introduzir e resolver graus variados de complexidade do problema. Além disso, oferece uma boa oportunidade para os alunos, à medida que avançam para explorar o potencial de exceder o que é fornecido no ambiente enlatado: uma chance de tentar trabalhar no escuro, na umidade,
Depois que eles aprenderem a dirigir os quatro cilindros automaticamente, suba para o grande hotrod manual v8, se eles estiverem realmente interessados e motivados. Se Joel não consegue encontrar os programadores de estrelas do rock embaixo de qualquer pedra debaixo de seus pés, ele pode simplesmente continuar procurando em outro lugar ou repensar por que ele pode precisar de mais do que um punhado de chaves de fenda em sua caixa de ferramentas.
Alguns dos pontos em que os iniciantes cometem erros facilmente no C ++ são:
fazendo tarefas onde você queria testar = vs ==
Ausência de ;
Legibilidade de colchetes versus, por exemplo, pascal begin-end
E existem todos os arquivos de inclusão, macros, gerenciamento de memória etc. para confundir.
Então, eu diria que C ++ não é a melhor linguagem para começar - no entanto, não há dúvida de que pode ser muito útil quando você a aprender.
Eu - como outros também sugeriram - usaria C #, Java ou talvez até VB - e um bom IDE com destaque de sintaxe, depurador etc. para ajudar a facilitar a recuperação de erros.
Quando eu estava na faculdade, C ++ era a linguagem básica ensinada durante o primeiro ano de faculdade. A teoria era que continha alguns conceitos complexos de programação; portanto, se você pudesse dominá-lo, poderia pegar outras linguagens. Isso me serviu bem como uma boa base.
Dito isto, durante o último ano do ensino médio, participei de um comitê para determinar se deveria ou não mudar a linguagem principal para Java. Depois de conversar com vários empregadores de destaque e alguns ex-alunos do departamento, foi determinado que a mudança para Java era o melhor interesse dos alunos. Os empregadores com quem conversamos queriam que as pessoas tivessem experiência em um idioma que estavam usando para contratá-los. Acredito que agora, 10 anos depois, eles ainda estão usando Java como linguagem principal.
Em uma nota similar, procuramos contratar alguns recém-formados com habilidades C ++ realmente boas. Não conseguimos encontrar nenhum.
Eu diria que sim. Mas qualquer idioma pode realmente ser o primeiro idioma. Eu acho que o C ++ é bom porque, embora seja complexo e às vezes difícil, mostra o que você realmente pode fazer (menos limitações). Além disso, ele possui um design orientado a objetos que pode ajudá-lo a se preparar para enfrentar outros idiomas.
C ++ foi minha primeira língua e estou feliz que tenha sido. Isso me fez pensar na mentalidade de OOP desde o início e sou grato por isso. Mas no final, tudo se resume ao que você quer fazer. O idioma não importa tanto, porque se você conseguir se aprimorar com um idioma, é provável que não tenha problemas para escolher outro. O que você quer fazer? Fazer jogos? Programa para celulares? Cada um terá ferramentas e idiomas mais adequados para isso.
C ++ é uma linguagem especializada, não para iniciantes ... diria C primeiro, não Java ou C # ou Python ... por quê? porque C ensina você a cuidar de sua memória e de alguns conceitos complicados, como ponteiros que estão "ocultos" por todos os idiomas e ainda estão presentes em todos os lugares. Eu já vi tantos jovens desenvolvedores que nem sequer entendem por que a memória deve ser lançada algumas vezes e acreditam que o coletor de lixo não é um anão que limpa todos os dados de codificação: eles instanciam, instanciam e explodem, mesmo que possuam XXXXGb RAM ... Mas eles não entendem por que o coletor de lixo não está simplesmente limpando magicamente tudo! E eu já vi esse tipo de desenvolvedor codificando em C ++ (e ainda mais louco, em Corba) e foi um massacre !!!!!!!!!! Então, eu aconselho a aprender a codificar em C e, em seguida, vá para Python / Java / C # para obter os conceitos de objeto e todo o açúcar existente. Então, quando você entende tudo isso, você acessa o C ++ e sente o poder do C ++, mas também descobre todos os seus perigos e por que não deve ser usado por ninguém;)
NÃO. Há tantas coisas que o C ++ possui que dificulta o entendimento de um novato. Não entre nas falácias "todas as linguagens de programação são iguais".
Comece com Basic ou Pascal (ignore o material "eles estão obsoletos") e, mais tarde, com C / C ++ / Java / C # / Perl. Ou, se você tiver uma chance, primeiro com o Logo & Karel e, em seguida, Básico ou Pascal.
PD Algumas universidades e colegas têm uma aula de comparação e uso da linguagem de programação, e acontece que eu lecionei essa aula ;-)
Você pode escolher qualquer idioma para aprender os fundamentos da programação. Aprendi coisas em C / C ++. mas sete anos depois, as ferramentas / idiomas são alterados na minha escola e eles preferem java / C #. os idiomas são meras ferramentas. O que você precisa para melhorar são os fundamentos. Por exemplo, no MIT, as pessoas aprendem os fundamentos do algoritmo usando python. por exemplo, Java pode ser bom para programação na web. mas o C / C ++ é bom para serviços e aplicativos de alto desempenho. Então, isso depende das suas situações.
Se "adequado" significa "possível", sim. Se for "bom", definitivamente não.
É possível gostar e até amar o C ++, mas para isso é melhor você aprender várias línguas e trabalhar uma década com bases de código podres do Teal Life, obter experiência em "criar software não trivial que realmente funciona" - então o C ++ terá charme.
Não no início, quando você é virgem, mexa em pequenos, simples (mas supostamente interessantes e divertidos) problemas.
Eu começaria com python, seguido por SICP (esquema), ou algo semelhante. Talvez invertida ou intercalada. Com aqueles que você pode simplesmente ir e lidar com o problema. Em vez de combater o sistema, ande na lama profunda e aprenda todos os tipos de peculiaridades ilógicas e suas razões históricas.
Mais tarde, quando você já puder programar a saída de um saco de papel, mude para o bare metal: aprenda maneiras de montagem e várias arquiteturas, além de talvez o Knuth's Mix. Não quero memorizar opcodes ou fazer muitas coisas reais, apenas para entender a memória, os registros, a ALU, caches, interrupções e obter o nível de leitura.
Então, com essa base, você pode ser exposto a outras linguagens, incluindo C ++. Talvez seja uma boa idéia adicionar alguma "história e evolução de idiomas" no meio.
Comecei com C ++ no ensino médio. Peguei uma cópia deste livro: C ++ Como programar por Deitel e Deitel . Este livro é muito bom.
Francamente, não há resposta certa ou errada aqui, eu pessoalmente achei que o C ++ era compreensível. Eu aprendi todo o caminho até a OOP (eu me deparei com "isso", que agora não entendo como não consegui, mas tanto faz). Experimente, não desanime. Se você ficar preso, verifique outros idiomas e continue aprendendo novos. A idéia é que, ao ver o mesmo conceito em 2 a 3 formas diferentes, você os entenderá melhor. Como eu disse, o conceito do ponteiro "this" me confundiu, mas quando vi a mesma coisa no Python (chamada self), isso fez sentido para mim imediatamente porque eu o havia entendido em C ++. Aprenda Java se você puder ensiná-lo por muitas faculdades. Aprenda python ou rubi, pois é a linguagem do dia e, se você puder explorar mais nichos / coisas novas, como Clojure (e todos os outros lisps), Haskell, Scala ...
Não. Eu começaria com Java ou C #. Se você quiser aprender C ++, provavelmente será mais fácil depois de aprender o básico, como o que é uma classe, como fazer loops e garfos (se, então instruções) etc. É muito mais importante aprender a olhar para um problema ou uma equação matemática e programe-o para descobrir se você liberou toda a sua memória ou o que quer.
Parece que a suposição por trás dessa pergunta é "C ++ parece tão complexo, um adolescente de 16 anos será capaz de identificá-lo como a primeira linguagem (programação de computador)?"
Quando temos 4 ou 5 anos, captamos a maioria das construções na língua materna, apenas com tanta exposição a ela através da escuta que outras pessoas falam. A formação de grandes frases leva um tempo de vida, sem dúvida.
C ++ é certamente muito menos complexo / complicado do que, digamos, a maioria das linguagens humanas. Os jovens de 16 anos devem poder buscá-lo. Eles escreverão um ótimo código com ele? Tenho que esperar e assistir.
Iniciantes precisam apreciar a 'programação' primeiro. Na minha experiência em treinar uma classe de iniciantes, eles apreciaram primeiro o que mais entendiam. Como Python vs. C #, eles apreciam o Python porque seu nível é muito alto e não usa símbolos como o C #, o que significa muito próximo à linguagem humana, é muito inglês. Então, eu recomendaria aprender a programação de alto a baixo nível.