@ Anna Lear: É claro que qualquer idioma pode ser o primeiro idioma, mas isso não qualifica o C ++ como um bom primeiro idioma. Se a sua resposta fosse uma resposta real, eu a votaria como inútil.
11116 Ed James
6
@ Doug: estou programando C ++ para viver ... qual é o seu ponto?
Matthieu M.
9
@Dough - 70% dos projetos de computação atualmente envolvem software de escrita para sistemas embarcados e micro dispositivos. Adivinha quais idiomas são usados para esses projetos? Adivinha quem está melhor equipado para posições de nível de entrada? Certamente não são pôneis de truque Java ou .NET. Parece duro, mas as escolas fizeram um grande desserviço a toda uma geração de graduados em CS, treinando-os apenas para 30% do mercado de trabalho de programação. Temos uma superabundância de programadores para o setor de aplicativos (30%) e uma escassez no setor de sistemas (70%). Esses números não vão a lugar nenhum. Futuras oportunidades de carreira? Okay, certo.
Luis.espinal
Respostas:
61
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 deletee, 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<<, protectede newnã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.
Ótima resposta! De fato, muitos recursos do C ++ não estão relacionados à programação de baixo nível.
Marco Mustapic
7
+1, excelente resposta. É verdade que às vezes os caprichos do C ++ são equivocadamente equivocados com "baixo nível". Você ligada à ++ FAQ C, mas eu recomendaria também as pessoas tomam um olhar para o ++ FQA C (ou "Respostas Questionado frequentes": P)
Totalmente de acordo. Até Malbolge seria melhor que C ++ para iniciantes.
rightfold
2
Minha única reserva - você pode ensinar muito sem entrar em detalhes que são relevantes apenas para as pessoas que desenvolvem bibliotecas. Contanto que você deixe claro que está fazendo C ++ básico ... mas, novamente, o que você ensinou a alguém?
Steve314
54
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:
O que é esse #includecomando? O que é std::cout. Por que o ::? O que é <<? Ohhh, é um operador sobrecarregado! O que é um operador sobrecarregado? Então, intsisso muda bastante, mas, seja o que std::coutfor, ele gera coisas para o console. Ohhh, std::couté um fluxo e fluxos têm o seu <<e >>operador sobrecarregado.
Python será adequado para um aluno da sétima série. Um estudante universitário pode entender muito mais.
Gulshan
13
Claro, mas estamos falando de uma primeira língua. O C ++ é conhecido por ser difícil de aprender e dominar, em comparação com outros idiomas. Por que usá-lo para ensinar programação? Um aluno pode aprender C ++ mais tarde, quando conhecer alguns conceitos básicos de programação.
Marco Mustapic
8
Você nem sequer mencionar a pesquisa dependentes do argumento de << :)
MetricSystem
6
Você não precisa saber absolutamente tudo para começar um idioma. cout << seja qual for; "apenas funciona", você não precisa entrar nos detalhes detalhados até cobrir a sobrecarga do operador, etc. mais tarde.
Colen
6
Eu consideraria o Python sobre C ++ qualquer dia da semana como uma linguagem introdutória.
jprete
21
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.
Haskell como primeira língua seria um experimento interessante.
Larry Coleman
@Larry, o curso de CS da Universidade de Cambridge ensina SML como o primeiro idioma.
Peter Taylor
1
A programação funcional torce o seu cérebro - eu sei que o MIT começa com o Scheme bem cedo, mas estou feliz por não ter começado a programação funcional até depois de dois anos de processo híbrido / estilo OO na escola.
justkt
11
@justkt: Todos os idiomas distorcem seu cérebro. É apenas uma questão de como você deseja que seja distorcido.
David Thornley
+1, mas eu não classificaria categoricamente outros idiomas além de C ++ como necessariamente "melhores".
Greyfade
18
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 ();
Looping e classificação, sim. Você pode fazer isso com qualquer idioma. Mas por que começar a trabalhar com ponteiros e sintaxe estranha quando você pode evitá-lo? Você pode aprender todas essas coisas mais tarde, quando tiver mais experiência em programação.
Marco Mustapic
4
@Marco: O livro de introdução da Stroustrup, "Programação: Princípios e Práticas usando C ++", apresenta indicadores no meio do livro. Você pode fazer muitas coisas em C ++ sem introduzir o ponteiro.
David Thornley
4
"Nunca é uma má idéia aprender o básico ... antes ..." você tem alguma pesquisa para apoiar essa afirmação? Eu sei que muitas pessoas inteligentes consideram como conhecimento comum que “de baixo para cima” é a única maneira verdadeira de ensinar, mas esse é um ponto muito controverso e a única pesquisa didática (reconhecidamente muito limitada) que eu sei aponta para a conclusão oposta.
Konrad Rudolph
1
@ David: O problema é que "fazer muita coisa em C ++" sem ponteiros é ainda pior. Sem ponteiros, todos os seus objetos são declarados na pilha, o que é uma das piores idéias de programação de SEMPRE. Tipos de valor e herança / polimorfismo simplesmente não se misturam, e tentar misturá-los leva a categorias inteiras de erros que não existem em linguagens melhor projetadas.
Mason Wheeler
9
Oh Deus não! Por que queimar suprimento limitado de ciclos cerebrais em idiossincrasias desnecessárias de C ++? Por que focar em coisas irrelevantes de baixo nível, como gerenciamento de memória, quando o objetivo é aprender conceitos básicos de programação? Por que pular no fundo do poço ?!
Maglob
14
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.
Com todo o crédito devido a Dijkstra, é praticamente impossível ensinar boa programação a estudantes que tiveram uma exposição prévia ao C ++; como programadores em potencial, eles são mentalmente mutilados além da esperança de regeneração. ;)
Mason Wheeler
3
Eles teriam que desaprender muitos maus hábitos do C ++. Para usar outro exemplo, conhecer o assembler faz de você um programador Java melhor? Eu diria que NÃO.
Andres F.
16
@ Andrés F .: Tenho que discordar disso. Conhecer o montador faz de você um programador melhor, não importa o que você está escrevendo, porque então você pode entender o que realmente está acontecendo.
Mason Wheeler
2
@ Andres: Eu já vi muitos programadores de Java / C # chegando a outras linguagens e amontoando tudo em objetos ... eles não têm muita experiência.
Matthieu M.
3
@ André F. - Nos meus 12 anos em Java, encontrei minha parte de programadores em Java que realmente é péssima por não ter nenhum tipo de exposição a assuntos como alocação de recursos, RAII, sem saber como programar aplicativos compatíveis com o GC, etc. Conhecer assembly e conhecer linguagens compiladas sem suporte automático ao lixo e com suporte a paradigmas diferentes de OO (C, C ++, Ada ou qualquer outra linguagem compilada na família Algol) ensina a escrever sistemas grandes e eficientes em Java, C #, Python, você escolhe. Além disso, o modelo de objeto em C ++ não é tão semelhante ao Java.
Luis.espinal
10
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.
@ Ed: Na verdade não. Eu tinha dominado o If e o Goto no QBASIC, e foi isso. Ponteiros, matrizes, funções, classes, etc. estavam todos no meu futuro em C ++. A recursão também era incompreensível.
Paul Nathan
5
Espere, ninguém espera que alguém trabalhe em um projeto usando C ++ sem primeiro entender C ++! Isso realmente levaria a um código digno de TheDailyWTF. Mas ao contrário do seu pedido, é não trivial para aprender C ++ (e não é "C com aulas", qualquer um). O C ++ possui uma sintaxe e gramática imensas, complicadas e, às vezes, não sensoriais, além de uma infinidade de palavras-chave e regras. É uma linguagem horrível para começar. Como uma linguagem de ensino, é terrível porque condiciona os alunos a pensar que as deficiências do C ++ são naturais e inevitáveis no mundo da programação.
7117 Andres F.
1
Andr: Você está insistindo em uma falsa dicotomia: "~ C ++ ou All C ++". Isso é falacioso.
Paul Nathan
1
@ Paul: justo o suficiente. Mas considere o seguinte: mesmo a sintaxe e a gramática de um C ++ simplificado são complicadas porque devem suportar todos os recursos do idioma completo. Então você já se comprometeu em usar uma linguagem feia, mesmo que você a ensine de forma mais simples. Eu suponho que você não esteja apenas codificando C com um pouco de açúcar sintático (também conhecido como "C com classes"), porque, nesse caso, você estará mais bem servido com C simples!
Andres F.
2
@ Andr: Na verdade não. O C ++ oferece uma simplificação sintática considerável sobre o C89. Além disso, para efeitos de nível de entrada, as coisas são muito simples para toda a dos casos que posso pensar ...
Paul Nathan
8
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.
Qualquer idioma é uma primeira língua ruim se ensinado mal.
David Thornley
3
@ David Thornley: no entanto, mesmo quando ensinado corretamente, alguns idiomas são uma má escolha como primeiro idioma. Por exemplo, Cobol.
7607 Andres F.
Concordo, sinto que, com um professor melhor, alguém que se interessou em envolver os outros e não apenas ler o material do curso na velocidade da luz, o resultado pode ter sido diferente. Apenas rolou rápido demais para mim.
21711 Kevin
@ Andrés F .: Não estou discordando disso. No entanto, o relato de Kevin era sobre um professor ruim, e um professor ruim pode estragar o Python ou o Scheme como primeira língua (meus dois candidatos à boa primeira língua).
David Thornley
2
@ Chris: Eu programei em Cobol e tenho pena de você :)
Andres F.
8
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.
C é uma linguagem difícil para o ensino, mas certamente está entre as piores. COBOL e Java consideram o bolo como um dos piores, muito piores que C. O bom de C é que você precisa lidar com o metal interno na frente (sem precisar se aprofundar no assembler). As pessoas têm sido ensinadas com sucesso com C como idioma principal. Existem outras opções mais elegantes, é claro, como Python ou Ruby (ou qualquer linguagem com vários paradigmas e que não inclua desnecessariamente o OO na frente para as tarefas mais simples). C não é um dos piores ensinamentos. escolhas, não por um longo tiro.
Luis.espinal
1
Marginalmente melhor? Como você imagina? O C ++ pega tudo de ruim do C e se baseia nele !
Mason Wheeler
1
@MasonWheeler: Principalmente porque C ++ fornece um-para-honesto Deus stringtipo 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.
John Bode
7
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.
Certo. Existem outros idiomas que podem ser mais fáceis de entender para os alunos do primeiro ano. No entanto, existem maneiras pelas quais um professor pode lentamente introduzir conceitos em 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.
Mas por que não começar em um nível mais alto de programação? É o nível em que resolvemos a maioria dos problemas (exceto certos problemas específicos do domínio, é claro). Então, se eles precisam para chegar mais perto do metal, eles podem aprender C ++, assembler, etc.
Andres F.
Eu concordo, é sobre o quão bem é ensinado!
Gary Willoughby
2
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.
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.
Por que Java ou C # quando Python é ainda mais simples?
David Thornley
-3
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.
As linguagens humanas podem se dar ao luxo de ter uma sintaxe complicada, porque se você entender a gramática ou a ortografia, as pessoas ainda poderão entender você. Não é assim com linguagens de computador.
dan04
-3
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.
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á-losdelete
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 usarconst
,std::ostream::operator<<
,protected
enew
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.
fonte
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:
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 questd::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:
É isso aí, vamos codificar alguns algoritmos.
fonte
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.
fonte
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 ();
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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:
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.
fonte
Certo. Existem outros idiomas que podem ser mais fáceis de entender para os alunos do primeiro ano. No entanto, existem maneiras pelas quais um professor pode lentamente introduzir conceitos em C ++.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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;)
fonte
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 ;-)
fonte
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.
fonte
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.
fonte
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 ...
fonte
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.
fonte
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.
fonte
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.
fonte