Tenho uma pergunta que acho que pode ser melhor respondida aqui.
Eu sou muito bom com C++
, bom como em me sinto confortável com a linguagem, li Accelerated C++
e fiz quase todos os exercícios.
No entanto, tenho um grande problema. Preciso aprender C
? Eu nunca fiz isso C
na minha vida. Comecei C++
quando comecei a programar. Provavelmente porque eu estava sempre interessado em saber por que todo mundo chama a linguagem de tão complexa. Agora, embora eu saiba a resposta para essa pergunta;)
Estou particularmente interessado em saber se posso sobreviver sem saber C
no mundo de hoje. Por exemplo, se eu der uma entrevista em uma empresa, se eu disser a eles que não sei C
- eles aceitarão tudo bem? As duas linguagens com as quais eu sou bom são Python e C ++. Estou perguntando por isso. Ouvi dizer que as empresas pedem estruturas de dados em entrevistas. Então, se eles me pedirem para implementá-lo, e se eu fizer em C ++, é aceitável?
E as pessoas que dizem 'como você pode não conhecer C quando usa C ++', não respondem :) Sem ofensas, mas não entendo por que aprender C é pré-requisito.
Respostas:
Se você conhece C ++, eu não aprenderia C apenas por isso. Você não deve achar muito difícil saber se e quando precisa.
Prefiro conhecer alguém que afirma que conhece C ++, mas não C, do que alguém que afirma conhecer C / C ++.
fonte
Uma resposta de várias partes. Apenas minhas opiniões.
Minha experiência (25 anos depois da faculdade) é que o C ++, embora cada vez mais incomum, continuará sendo vital para sistemas interessantes no futuro próximo. Então, eu estou mantendo isso como minha principal área de especialização. O trabalho é duro, interessante e importante.
Os programadores de C ++ geralmente são valiosos precisamente porque não cresceram em linguagens gerenciadas e, portanto, têm maior probabilidade de entender o que está acontecendo nos bastidores. É mais fácil fazer a transição de C ++ para C # / Java do que vice-versa, porque a barra de entrada é mais alta.
Portanto, enquanto, na minha opinião, não é essencial entender C para programar com competência em C ++, desenvolver um entendimento de por que C ++ existe no contexto de C - suas limitações e pontos fortes e como são abordados ou não em C ++ - seria inestimável para você ao longo do tempo.
Boa sorte.
fonte
Aqui está o que Bjarne tem a dizer:
fonte
Apenas minha opinião pessoal: se você conhece C ++, pode escrever em C. Alguma experiência seria boa, mas isso não é um problema. O oposto não está correto: o conhecimento em C não permite escrever em C ++, sem aprendizado adicional. Eu nunca aprendi C e utilizo-o quando necessário, sem problemas.
fonte
Ok, primeiro as primeiras coisas - não, conhecer C não é um pré-requisito para aprender C ++. De fato, pode ser um obstáculo.
Em segundo lugar, isso é completamente situacional. Se você precisa ou não conhecer C depende inteiramente da necessidade do trabalho. Se você quer ser um especialista em sistemas embarcados, sim, aprender C ajudará. Caso contrário, a maioria dos trabalhos não exige isso. Se um trabalho precisa de C, deve-se dizer isso. Se não diz, provavelmente não precisa. No que diz respeito às estruturas de dados, novamente se resume à empresa. Normalmente, uma empresa dirá "Nós programamos nesses idiomas, escreva-nos essa estrutura de dados. Use o idioma de sua escolha na lista acima". Se eles pedirem para você escrever em C, você simplesmente diz "Eu não sei C - não diz no meu currículo que eu conheço C, esse trabalho não é para mim".
fonte
Pergunte se eles precisam de C (e estejam dispostos a aprender ou não, se precisarem).
Eu esperaria que sim, se eles estão entrevistando / contratando você para trabalhar em C ++.
Se for uma pergunta sobre "estruturas de dados", você pode perguntar se eles querem demonstrar o uso de contêineres STL ou se (por ser uma entrevista) querem que você implemente as estruturas de dados do zero.
fonte
C é quase um subconjunto adequado de C ++. Se você não conhece C, não conhece um subconjunto grande e importante de C ++. Você precisa aprender esse subconjunto? Não. O C ++ é uma linguagem ridiculamente grande e a maioria das pessoas escolhe um subconjunto e programa com isso. Não é necessário que você conheça o subconjunto que é C. Especialmente, não é tão importante conhecer a biblioteca padrão C. No entanto, eu lançaria um olhar muito desconfiado para qualquer um que não entendesse os conceitos básicos de C, como ponteiros, matrizes e pequenos ajustes.
fonte
Não, você não precisa. Período.
Mas aprender qualquer nova linguagem de programação é benéfico a longo prazo. Aprender idiomas com base em diferentes paradigmas de programação é ainda mais benéfico. Seja uma linguagem OOP (Smalltalk ou C ++), uma linguagem dinâmica (Lisp, Clojure, Python), funcional (Lisp, Haskell, Erlang), simultânea (Erlang, Go, Algol 68, Smalltalk) ou qualquer outra coisa (Fortran 03, Perl, Forth) outro novo paradigma fangled impressiona sua imaginação; aprender idiomas diferentes ajuda a expor você a várias linhas de pensamento, cada uma com suas próprias forças e fraquezas para realizar a tarefa em questão.
O Fortran ainda domina a computação numérica, o COBOL ainda é o principal suporte de grandes empresas de seguros, Unix, BSD e Linux ainda são baseados principalmente em C. O código antigo não perde seu valor com a idade sempre porque não necessariamente se desgasta. como dispositivos mecânicos que precisam ser substituídos ao longo do tempo. Portanto, a linguagem mais antiga pode ser valiosa em termos de empregabilidade versus o fator interessante da linguagem mais nova .
Assim como estudar para se tornar multilíngüe em idiomas naturais (humanos) melhora a capacidade de se expressar , o mesmo acarreta o mesmo tipo de bônus para idiomas de computador.
Portanto, embora eu ache importante (com o tempo) aprender a se tornar fluente não apenas em vários idiomas, mas é mais importante ser fluente em vários paradigmas de programação.
Vou voltar e dizer que o C ++ é uma linguagem rica e complexa. Levará anos de exposição e prática constante para se tornar verdadeiramente fluente em todas as suas sutilezas ricas (ou feias).
Não se apresse, e continue aprendendo é o conselho mais importante que posso lhe dar. Para mais alguém, recomendo que você leia a programação de Peter Norvig Teach Yourself Programming em dez anos .
fonte
Uma resposta muito curta para sua pergunta é: depende muito de suas necessidades. Algumas empresas confiam principalmente em C, às vezes como uma relíquia (se C já tiver sido usado há anos lá). Outras empresas não têm nada a ver com C. C é uma linguagem de nível inferior a, digamos, Python ou Java, e muita programação de aplicativos pode não exigir nenhum conhecimento de C. Ao contrário das linguagens OOP, C requer uma estrutura mental diferente, pela qual Quero dizer que os programas são estruturados e organizados de maneira diferente, e alguns aspectos mais sutis devem ser levados em consideração. Geralmente é benéfico aprender esse idioma, mesmo que apenas para expandir sua mente, por assim dizer. Mas, novamente, se as empresas se importam depende de suas necessidades. Alguns podem oferecer uma escolha de linguagem, alguns podem exigir Java, outros C ++, outros ainda C, etc. Você consegue sobreviver? Sim hoje' O mundo de s possui tantas áreas diferentes de programação que você nunca pode passar pelo código C. Você deveria aprender C? Eu diria - sim, independentemente do uso posterior.
fonte
Algumas pessoas podem não se sentir à vontade para programar em C enquanto conhecem o C ++.
Existe uma estrutura "protetora" em torno do C ++ que contribui para direcionar não apenas a estrutura, mas também os algoritmos de um programa. Por exemplo, a ajuda da estrutura e dos algoritmos STL, a óbvia abordagem de programação orientada a objetos, o con / destructor, a camada abstrata adicionada dos modelos ...
Enquanto C é - disse - mais simples, ele força o programador a injetar uma estrutura e algoritmos sozinho na modelagem de problemas. Este é um intenso aumento da liberdade de programação.
Mas tem um custo, pois algumas pessoas precisam de uma estrutura mais imposta e constroem um programa que tende a ser exponencialmente mais difícil de manter à medida que aumenta. Costumo dizer que o problema não é o idioma (C), mas o que se faz com ele.
Dito isto, como recrutador, fico feliz em entrevistar alguém com fortes habilidades em C ++, mas ficaria ainda mais entusiasmado se ela tiver autonomia de linguagem suficiente para desenvolver um projeto C completo.
Além disso, um bom programa C implica em boas habilidades do sistema desenvolvedor, pois a linguagem requer (geralmente) um entendimento justo dos componentes do sistema para criar um executável eficiente.
fonte
Se você está confortável em C ++, não me preocuparia em aprender o C. O C ++ tem muitas melhorias em relação ao C (a capacidade de suportar RAII com construtores / destruidores, contêineres de linha de base, fluxos e cadeias de caracteres é grande).
No entanto, sugiro aprender as séries
printf
escanf
funções para que você possa ler o código que as utiliza. Eles são bastante populares em C ++, portanto, saber como são usados é útil. Não sugiro usá-los em seu próprio código sem uma razão muito específica.fonte
O único momento em que você precisa conhecer C é se se espera que produza código C. Caso contrário, não há problema.
Não escrevi C profissionalmente nos últimos 6 anos; existem muitos domínios de aplicativos melhor atendidos por outras linguagens (pelo menos do ponto de vista da produtividade, se não do desempenho), como Java ou C # ou Python. Você certamente pode sobreviver e até prosperar como desenvolvedor de software sem nunca tocar em C.
Se você quer aprender C por seu próprio abuso, tudo bem. Dependendo de como você aprendeu C ++ e de como você é dependente de recursos específicos de C ++ (modelos, tipos de referência, STL, sobrecarga), você pode se agitar um pouco quando perceber que 90% das ferramentas que tornaram a programação tolerável não estão mais disponíveis. Coisas como gerenciamento de memória em C são muito trabalhosas e tediosas em comparação com C ++ ou Java. Também existem algumas incompatibilidades entre C e C ++ e, a cada nova versão de idioma, essa lacuna aumentará.
Ainda existem domínios de aplicativo em que C é a ferramenta certa para o trabalho: pequeno, rápido, sem muita mágica e não é montagem. Porém, para o desenvolvimento geral de aplicativos (especialmente aplicativos de desktop orientados a GUI), existem ferramentas muito melhores disponíveis.
fonte
Eu acho que se você estiver confortável com C ++, você também estará com C.
A principal diferença entre os dois é que C ++ é limpo - orientado a objetos - C não é :)
fonte
Conhecer C fornecerá mais informações sobre gerenciamento de memória, etc. É tudo sobre o nível mais baixo que você deseja obter e se entender as coisas com uma alavanca mais baixa ajuda ou não. Você poderia dar um passo adiante e aprender a linguagem assembly também, mas tudo depende de quanto vale a pena para você.
Também depende se você deseja programar em C ou não. :)
fonte
Sim, está bem...
IMHO, desde que você é bom
C++
, é o suficiente ...Aposto que existem indústrias que procuram programadores em C ++ ... Mas, uma vez que você se interessa, tudo depende das necessidades do seu projeto. Tudo o que for necessário, você precisará aprender .. Pode ser Java, .Net ou até C .. Se a empresa estiver pronta para pagar você, apenas aprenda ...
Se você está nos estágios iniciais de sua carreira, os entrevistadores do IME tendem a analisar sua atitude e a compreensão do idioma com o qual você se sente confortável.
Em vez de aprender
C
por si só, aprenda um pouco mais sobre C ++ .. Melhore o que você é bom .. Tenho certeza de que você pode aprender muito ... Para mim, sempre há algo em C ++ para aprender ..: )fonte
Eu acho que as coisas mais importantes para você saber sobre C são as diferenças entre C e C ++. Você provavelmente vai ver um código que tem algum estilo C nele em algum momento, e você não deve ser confundido quando você vê coisas como
malloc
,free
,printf
,fopen
, oufclose
. Você também deve saber como elas são semelhantes e como são diferentes de suas contrapartes em C ++.Você também deve saber disso
<<
e>>
são operadores de turno esquerdo e direito, não operadores de inserção. No C ++, onde você pode sobrecarregar os operadores, eles foram sobrecarregados para executar inserção de fluxo e coisas semelhantes, mas ainda são usados para mudar números inteiros.Certifique-se de entender todos os recursos básicos que o C ++ possui e que não estão em C. Se você ler o stackoverflow.com o suficiente, verá muitas perguntas que envolvem as diferenças de idiomas e os mal-entendidos das pessoas.
Você também deve se familiarizar com o pré-processador C, que é quase o mesmo (e geralmente o mesmo programa) do pré-processador C ++. Saber usá-lo o ajudará em C ++, mas depende muito mais em C.
Uma coisa importante que é difícil de lidar em C que o C ++ possui são os destruidores. Essas coisas podem ser chamadas em todo o lugar, cuidando da liberação de recursos, mas em C você precisa fazer tudo isso de forma mais explícita. É fácil para os programadores de C ++ esquecerem de fazer.
No que diz respeito às entrevistas, se alguém lhe pedir para escrever código para algum algoritmo geral em C e você fizer algo como:
Eu não acho que eles vão decidir que você não sabe o que está fazendo porque não fez:
E eles realmente não se importariam se você usasse, a
cout
menos que o que eles estão tentando mostrar seja a sua capacidade de lidar com entrada e saída, o que o C ++ facilita para casos comuns.Se você se encontra na posição de ser entrevistado para um trabalho que requer C, você deve ser sincero quanto à falta de conhecimento de C fora da sobreposição com C ++. Eles provavelmente entenderão que um bom programador deve conseguir fazer a transição para C do C ++ rapidamente.
Tudo isso dito, C não é tão grande assim. A biblioteca padrão é muito menor que a do C ++ e não é grande coisa se familiarizar com as partes mais comuns da mesma, portanto, não custa nada aprendê-la.
fonte