Eu sou um iniciante. Posso começar diretamente a aprender C ++ 11? ou eu tenho que aprender C ++ antigo? [fechadas]

36

Sou iniciante e tenho pouco conhecimento em programação.

Seria bom se eu aprendi C ++ diretamente de livros que cobrem o novo C ++ 11 ou devo estudar os melhores livros antigos de C ++?

Devo ter pouco conhecimento sobre C ++ antes de aprender C ++ 11? ou posso começar diretamente de lá?

Causaria problemas se eu iniciar diretamente do C ++ 11? Se não, sugira alguns livros sobre C ++ 11.

Dhananjay
fonte
18
Por que esses pontos negativos? Essas perguntas já foram respondidas? Os novatos não podem questionar? Quem é que reasearch neste assunto? Eu acho que uma das melhores maneiras é perguntar para aqueles com mais experiência. +1, já que os novatos também merecem orientação
adosaiguas
12
@ Simon, isso me parece uma pergunta conceitual sobre desenvolvimento de software: por onde começar? E como você sabe que ele não é um programador profissional? ;)
adosaiguas
4
@MSalters Conversando sobre livros; O C ++ acelerado é um livro incrível, embora um pouco simplificado. Barbara E. Moo é uma escritora incrível e sua influência no livro é facilmente notada. Mas o livro em questão é realmente "velho". No entanto, nem toda a esperança está perdida - há um livro altamente cotado chamado C ++ Primer, de Lippman , Lajoie e Barbara E. Moo , a quinta edição foi publicada este mês (agosto de 2012) e dos primeiros capítulos que li no meu cópia, este é um excelente livro sobre C ++ 11. A influência de Moo está presente, novamente. Ela é uma deusa quando se trata de redação técnica.
zxcdw
2
@ Simon Programmers — Stack Exchange is a site for professional programmers...Nesse caso, você se importaria de me guiar até o site para programadores iniciantes? Eu também sou um novato de codificação e eu vou ter bastante algumas perguntas básicas ...
Jeyekomon
2
Eu acho que essa pergunta está claramente fora de tópico devido às perguntas frequentes (talvez não estivesse no momento em que foi perguntada primeiro). Ele pergunta "qual idioma (versão) devo escolher em seguida", trata-se de conselhos de educação e solicita recursos fora do tamanho - três dos motivos padrão de fechamento.
Doc Brown

Respostas:

38

Existem muitos aprimoramentos de usabilidade que tornam o C ++ 11 mais compreensível para um iniciante, especialmente aquele que possui experiência em outros idiomas com esses recursos. Outras alterações no C ++ 11 são de interesse apenas de usuários avançados, portanto, é provável que você fique impressionado se pegar um livro que foi projetado para ensinar principalmente as diferenças. Verifique se qualquer livro que você recebe foi projetado para iniciantes completos em C ++.

Dito isto, você provavelmente terá que aprender da maneira antiga eventualmente, pois há muito código existente e até mesmo o novo código C ++ 11 conterá a maneira antiga de fazer as coisas, se o programador assim o desejar. Eu escrevo C ++ para ganhar a vida e minha empresa ainda nem chegou a avaliar os compiladores compatíveis com C ++ 11, sem falar em usar um em produção.

Karl Bielefeldt
fonte
estou aprendendo com o c ++ primer 4th edition. bom livro para começar ??
Dhananjay
1
Ele recebe boas críticas e parece estar no nível certo, mas eu não vejo os livros C ++ no nível iniciante há muito tempo, então não sou a melhor pessoa para perguntar. Acho que você precisará da 5ª edição, se quiser que o C ++ 11 seja coberto.
Karl Bielefeldt
ok e sim, eu sei que a 5ª edição cobre c ++ 11.
Dhananjay
10

Você não precisa usar o C ++ antigo para começar a usar o C ++ 11, há novos recursos no C ++ 11, mas o uso é opcional. Saber como usar os recursos do C ++ 11 poderia ser uma vantagem, certamente não seria uma desvantagem ao trabalhar com bases de código legadas (anteriores ao 11), uma vez que você conhecesse as idiossincrasias das versões mais antigas.

Aprender C ++ seria um bom lugar para começar a aprender e o Apêndice B ensinará os recursos do C ++ 11 após você aprender o básico.

Eu posso ver por que algumas pessoas sugeriram Java / CSharp etc. como linguagens alternativas mais fáceis, mas aprendi um pouco de C ++ antes de passar para o CSharp e não sou um programador pior por causa disso, pelo contrário, as habilidades de programação são muito mais profundas que a linguagem sintaxe / funcionalidade e com uma base sólida em C ++, você pode aprender qualquer outra linguagem OOP imperativa facilmente.

Joel
fonte
8

É difícil dizer.

O C ++ antigo é mais um campo minado, e é bom aprender a navegar por um animal desses. Também o fará entender por que as coisas são feitas como são e quais são as implicações de diferentes construções.

Então, novamente, C ++ antigo não é o que você deseja quando escreve código.

Mas, mais uma vez, o antigo C ++ é o que muita indústria estará produzindo por mais 20 anos.

Eu amo C ++ 11, mas só é utilizável em startups por enquanto. Não em grandes bases de códigos herdados. E pular direto para o C ++ 11 pode deixar você com habilidades não desenvolvidas em partes desagradáveis ​​do C ++. O que sairá pela culatra uma vez que algumas construções avançadas do C ++ 11 vazem ou travam porque são usadas de uma maneira sintaticamente correta, mas logicamente incorreta.

Codificador
fonte
Por que grandes partes da indústria não atualizam seus compiladores, além do campo de sistemas embarcados de nicho? Risco (mesmo com testes de unidade)? Conservadorismo?
TheLQ
1
@TheLQ: Eu acho ... Mas quando penso no que faria se fosse um chefe, é muito provável que fizesse a mesma coisa. A menos que haja algumas economias visíveis em relação aos custos de migração.
28/08/2012
1
@ TheLQ: É preciso muito tempo para que as bases de código sejam movidas para uma versão mais recente do compilador. É raro que um projeto adapte uma nova versão do compilador de maneira indesejada. É mais provável que um novo projeto use um novo compilador (desde que não interaja com o código antigo).
Martin York
1
@ Codificador: O que torna o C ++ 11 tão diferente do C ++ 03 que o aprendizado não se traduz diretamente no C ++ 03. Existem alguns recursos novos que facilitam a escrita, mas nada que o impede de entrar nesses campos minados.
Martin York
1
@ TheLQ: sim, esses são basicamente os processos, mas você esqueceu o teste de integração (a parte mais complexa. Nem todas as aplicações são independentes (de fato, eu diria que essa é a minoria)). Você precisa verificar se todo o seu código funciona e interage corretamente (não apenas com o seu código, mas com o código do cliente). Este é um processo de meses, se não um ano de teste e validação. Se alguns de seus clientes não estiverem migrando para o C ++ 11, talvez seja necessário manter ambas as versões em alguns sistemas (felizmente o gcc é muito bom com compatibilidade com versões anteriores, mas nem todos os fornecedores de compiladores do C ++ são).
Martin York
8

Apesar de muitas melhorias C++11, C++ainda não é uma linguagem fácil. Java, embora não seja tão fácil quanto alguns possam pensar, ainda é uma linguagem mais fácil com desempenho muito bom (geralmente quase tão rápido quanto C++) e oferece IDEs melhores (talvez Visual C++seja tão bom quanto os IDEs Java atuais, mas sem sorte aqui no Linux), biblioteca padrão mais abrangente (o JDK), mais bibliotecas (por exemplo , Hibernate , Spring , JEE , Lucene , etc) e sem vazamentos de memória (bem, quase nenhum - você ainda pode criar um vazamento de memória em Java, mas é mais difícil fazê-lo do que em C++). Para ser justo, com o moderno C++11, é muito mais fácil evitar o alho-poró da memória.

O C ++ 11 possui muitos recursos interessantes, como lambdas, palavra-chave automática, semântica de movimentos e muito mais. É definitivamente uma linguagem muito melhor do que C++98era. Veja esta visão geral de Herb Sutter sobre os novos recursos em C++11: Elementos do C++estilo moderno .

Resumindo, acho que todos deveriam aprender pelo menos alguns C++. Se você tiver sido programação em Java, Scala, Rubyou Pythonpara a última década e nunca tocou Cou C++, agora com C++11que eu acho que é hora de aprender C++11e melhorar suas habilidades de programação ao fazê-lo.

Provavelmente, não usarei C++muito trabalho nos próximos anos e, quando precisar de uma linguagem mais poderosa do Javaque provavelmente usarei o Scala, mas examinarei mais de perto C++11e tentarei aprender e entender os novos recursos, particularmente aqueles sobre multithreading e simultaneidade.

Lembre-se: sempre ajuda a aprender uma nova linguagem de programação, mesmo quando você não planeja usá-la na produção.

Jenny Casarino
fonte
1

Respire fundo e leia este artigo de Peter Norvig.

Você leu isso? Ok, se você é iniciante, precisa começar em pequenas etapas. - insira o idioma aqui - pode vir mais tarde, confira o Coursera ou o Udacity para ver alguns cursos de introdução à ciência da computação para iniciantes.

Após concluir isso, eu recomendaria trabalhar lentamente na linguagem de programação The C da K&R, se você estiver definido em uma linguagem 'C'.

Trabalhe no básico, o resto chegará a tempo.

lwm
fonte
10
Não vejo como isso é resposta à pergunta. C nem sequer é a mesma linguagem que C ++.
vartec
1
Mas o C ++ é baseado em C e é amplamente compatível com versões anteriores: a grande maioria da sintaxe C moderna é diretamente aplicável ao C ++. Como o C é mais simples do que qualquer versão do C ++, o aprendizado do C oferece uma boa educação coerente na sintaxe e na semântica básicas do C ++ - e ajuda a explicar algumas das verrugas incompreensíveis na linguagem maior ...
comingstorm
2
@comingstorm A primeira coisa que um programador em C deve fazer é desaprender quase tudo o que sabe sobre C e começar a aprender C ++. Existem diferenças sutis que podem morder você.
BЈовић
1
Além disso, o código C ++ moderno idiomático não empresta muito de C, além da sintaxe. Não é como se ainda estivéssemos usando C-strings e malloc / free. Como um novato completo para o idioma que você é melhor fora de pegar um livro como C ++ Primer 5ª edição, Accelerated C ++, etc, em vez de se concentrar em C.
bstamour
1

Os livros introdutórios recentes sobre C ++ também estão cobrindo cada vez mais o C ++ 11. Li o Teach Yourself C ++ de Sam depois de trabalhar com linguagens de script, mas não o C / C ++ por quase dez anos, e achei realmente útil. Rapidamente fiquei familiarizado com as idéias centrais do C ++ (incluindo muitas STL) e consciente de muitos detalhes diferentes no C ++ 11.

Como alguns outros pôsteres mencionaram, o C ++ 11 é, em muitos aspectos, mais fácil do que os padrões mais antigos, com acréscimos no estilo de script auto, for(int &i : m_vector){}etc. Portanto, se seu "pouco conhecimento" vem de linguagens como Python ou Matlab, você encontrará o C ++ 11 um pouco mais "natural" do que os padrões anteriores.

Gostaria também de salientar que, até agora, a compatibilidade do compilador para C ++ 11 está ( quase ) completa, portanto, ter código "muito atualizado para compilar" não é mais um problema.

Em suma, faça.

mmdanziger
fonte
-1

Quando eu era C, era considerado um pré-requisito do C ++, especialmente para os iniciantes em programação. Porque você precisa descobrir o que faz uma linguagem e por que ela foi projetada dessa maneira. C recebeu muitas idéias grandes e suficientes da linguagem de programação, que nunca estarão desatualizadas. Portanto, acredito que este é o melhor começo.

E depois de ter um ponto de vista básico sobre os materiais de programação, você pode ter que escolher o que deve ser feito na próxima jogada, o que significa escolher uma linguagem para aprender o mais profundamente possível. Não importa a profundidade, você geralmente pode decidir a profundidade de qualquer outro idioma, o que significa que, não importa quantos idiomas você aprendeu, o mais profundo será sempre o primeiro que você desenterrou. Para mim, realizei pesquisas em Java e fiz alguns modelos de Java por conta própria para entender melhor sua funcionalidade do kernel.

Depois disso, você poderá aprender o que quiser, porque possui total entendimento da tecnologia da linguagem de programação. Comecei a aprender C #, Go, Python e até Scala e fiz muitos projetos por diversão / trabalho. O recorde pessoal é de 3 meses, desde o início do aprendizado de um idioma até o ponto 1.0 de um projeto em desenvolvimento.

No meu caso, já faz mais de 15 anos desde o meu primeiro programa e eu nem me lembro o que é. Eu acredito que se você trabalhar duro o suficiente, você definitivamente ficará melhor e mais rápido do que eu.

WinstonWu
fonte
isso não responde à pergunta feita
gnat
Totalmente, desculpe. Só quero dizer, também. Por fim, não importa o que você queira aprender, apenas a base da linguagem de programação pode decidir com que profundidade você pode se aprofundar neste campo. Ao mesmo tempo, você precisa gastar mais tempo com isso do que com um tiro rápido.
WinstonWu
-2

Como iniciante, acho que primeiro você precisa passar pelos conceitos de C ++ porque o C ++ 11 e tudo são como uma nova versão, mas C e C ++ são básicos para qualquer tipo de desenvolvimento. Depois de aprender C ++, a maioria dos conceitos será limpa automaticamente.

Pooja Runija
fonte
1
Bem-vindo aos programadores! Não tenho certeza de que sua resposta acrescente muito a essa pergunta; e gramaticalmente falando um pouco de confusão. Estou tendo problemas para seguir o que você está tentando dizer. Você poderia expandir sua resposta, talvez adicionar exemplos sobre por que o C ++ 11 difere tanto que aprender C e versões anteriores do padrão C ++ é melhor?
Martijn Pieters
-3

C ++ é uma linguagem realmente excelente e poderosa. No entanto, também coloca muita responsabilidade no programador.

Se você é completamente novo em programação, facilite a vida e comece com C #. Sua sintaxe é baseada em C ++, mas o tratamento de erros é muito mais amigável para iniciantes, ajudando-o quando as coisas dão errado.

Se você está familiarizado com métodos, classes, herança e deseja desenvolver em um ambiente em que o gerenciamento de recursos de memória e sistema é mais importante que a produtividade, o C ++ é uma boa opção, e eu começaria aprendendo o padrão atual. Lembre-se de que o C ++ exige que você entenda a memória e gerencie-a ativamente. Cometa erros aqui e tudo o que você recebe é um núcleo despejado ou seus dados contêm bytes que não fazem sentido. E, frequentemente, o ponto em que você encontra o problema não tem relação com o local onde realmente está a causa.

Michael Shaw
fonte
1
Se alguém começar com C #, ele se acostumará a programar em alto nível (OOP, gerenciamento automático de memória) sem realmente saber o que acontece "nos bastidores". Se essa pessoa se mudar para C ++, ela não terá um conhecimento importante sobre C / C ++ (estou pensando principalmente em gerenciamento de memória, mas há mais). Isso pode ser ainda mais enganador devido ao fato de que C ++ e C # compartilham uma sintaxe muito semelhante, mas o que o código realmente compila é totalmente diferente. Lembre-se de que o OP declarou claramente seu interesse em C ++.
Eti 29/01
O OP também afirmou que eles têm pouco conhecimento de programação. aprender o seu primeiro idioma como C ++ é um enorme desafio. Muito melhor escolher suas batalhas e escolher uma série de batalhas menores, pois é bem mais provável que você tenha sucesso.
Michael Shaw
-6

Por que você quer começar com C ++?

Eu, pessoalmente, recomendo o C ++ como primeira língua. É complicado, complexo, difícil ... simplesmente um nível muito mais baixo e mais "inseguro" do que a maioria das outras linguagens de programação.

Aconselho a escolher c #, java, python ou javascript ... e um bom livro ao longo do caminho. Você terá um tempo muito mais agradável com isso.

dagnelies
fonte
3
Eu discordo disso como uma generalização. Passar da vida fácil de java / C # / python etc. para um mundo mais complexo de C e C ++ não é tão fácil. Se você está realmente decidido a aprender uma linguagem de programação, aprender C e C ++ é difícil, mas dará muito em troca. Se você mais tarde quiser programar em java, C #, python etc., essa alteração é muito mais fácil do que passar deles para C ou C ++. Resumo: C / C ++ será mais difícil para começar, mas facilitará a alteração para qualquer outra linguagem OO.
martiert
2
C ++ é a melhor base para começar. A programação é complexa e, no final, você precisa trabalhar com um hardware. C ++ é uma maneira incrível de começar a aprender isso sem uma falsa sensação de segurança.
Coder
A questão da operação depende completamente de seu propósito no desenvolvimento.
Independente
1
Eu discordo disso. O aprendizado de C ++ tem várias vantagens e facilita o aprendizado de outras linguagens como Java e C #, para citar algumas.
Anthony
2
@Danjanjay: C ++ é muitas vezes mais difícil que java ... Java é como uma bicicleta infantil, uma versão extremamente simplificada do C ++. A última seria uma bicicleta sem frescuras, sem freios. Se você já acha java difícil, C ++ será uma dor. Meus 2 centavos.
Dagnelies