Tudo bem se eu não conheço C, mas sou bom com C ++? [fechadas]

23

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 Cna 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 Cno 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.

SS
fonte
1
embeddedgurus.com/barr-code/2009/08/real-men-program-in-c Atenda sua ligação.
precisa saber é o seguinte
1
O artigo citado por DumbCoder é sobre a popularidade do C na programação incorporada.
ChrisW
2
@ ChrisW - Sim, mas ainda mostra que C não é fácil de dominar, não que C ++ seja fácil de dominar.
precisa saber é o seguinte
@DumbCoder: Oh não, programação incorporada. Quantos trabalhos estão incorporados em comparação com o desktop?
DeadMG
@DeadMG - O domínio de um idioma não tem nada a ver com o número de trabalhos disponíveis para esse idioma. E de onde você tirou a ideia de que C é usado apenas na programação incorporada?
precisa saber é o seguinte

Respostas:

36

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 ++.

CB Bailey
fonte
Ai sim. É a lista de itens de primeira na questão SO sobre mitos urbanos C ++: stackoverflow.com/questions/2245196/c-urban-myths
4
+1. Se você conhece C ++, para começar, é muito difícil aprender C e, em segundo lugar, é realmente sem importância.
DeadMG
6
@DeadMG Pode ser fácil aprender a sintaxe, já que isso é apenas saber quais partes do C ++ deixar de fora, mas aprender as expressões comuns é mais difícil e, sem dúvida, a parte mais importante. Mas eu não aprenderia C a menos que fosse necessário.
precisa saber é o seguinte
6
@chubsdad você quer dizer que eu não deveria colocar "Eu sei Java / Javascript" no meu currículo?
Incognito
@ user257493: Não existe Java / Javascript
John Dibling
23

Uma resposta de várias partes. Apenas minhas opiniões.

  1. 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.

  2. 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.

  3. 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.

Steve Townsend
fonte
O que faz você dizer que C ++ é cada vez mais incomum? Na sua experiência, o que a está deslocando?
Praxeolitic
13

Aqui está o que Bjarne tem a dizer:

Conhecer C é um pré-requisito para aprender C ++, certo?

Errado. O subconjunto comum de C e C ++ é mais fácil de aprender do que C. Haverá menos erros de tipo a serem capturados manualmente (o sistema de tipo C ++ é mais rigoroso e mais expressivo), menos truques para aprender (o C ++ permite que você expresse mais coisas sem a circuncisão) e melhores bibliotecas disponíveis. O melhor subconjunto inicial de C ++ para aprender não é "all of C".

Chubsdad
fonte
4

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.

Alex F
fonte
3
@ Alex Farber - "Se você conhece C ++, pode escrever em C". Eu duvido que :)
DumbCoder
4
Discordo. IME, programadores que aprendem C ++ primeiro tendem a não perceber quais recursos C ++ não possuem. Os programadores que aprendem C primeiro podem escrever facilmente em C ++, mas iniciam sem idioma.
precisa saber é
1
Isso é baseado na minha experiência pessoal. Eu aprendi C ++ e faço a maior parte do meu trabalho em C ++. Mas eu uso C quando necessário, sem problemas.
Especialmente considerando que todas as bibliotecas de classe fofas não estão disponíveis no C. Imo, a vitória de linguagens como C ++ e Java são as bibliotecas, não os recursos inerentes da linguagem em si.
8
Os programadores de C ++ que tentam invadir C escrevem códigos ruins pelas mesmas razões pelas quais os programadores de C que tentam invadir C ++ escrevem códigos ruins. Os caras C usam C ++ como "C com classes", enquanto os caras C ++ usam C como "C ++ sem classes".
precisa saber é o seguinte
4

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".

Stephen
fonte
Por que conhecer C seria um obstáculo para o aprendizado de C ++? Não estou dizendo que discordo necessariamente, mas essa é uma afirmação ousada.
Casey Patton
3

Por exemplo, se eu der uma entrevista em uma empresa, se eu disser a eles que não conheço C - eles aceitarão tudo bem?

Pergunte se eles precisam de C (e estejam dispostos a aprender ou não, se precisarem).

Então, se eles me pedirem para implementá-lo, e se eu fizer em C ++, é aceitável?

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.

ChrisW
fonte
2

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.

frankc
fonte
2

Preciso aprender C?

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.

Eu sou muito bom com C ++, bom como estou confortável com a linguagem, li C ++ acelerado e fiz quase todos os exercícios

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 .

mctylr
fonte
1

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.

user400348
fonte
1

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.

Anel Ø
fonte
Eu não diria que isso aumenta a liberdade do programador - você sempre pode escrever sua própria estrutura e algoritmos em C ++.
DeadMG
0

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 printfe scanffunçõ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.

Mark B
fonte
0

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.

John Bode
fonte
-1

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 é :)

Nuno
fonte
1
Sou um grande fã de C ++, mas não diria que é limpo. E C ++ é multi-paradigma, o que significa que um bom código C ++ não é necessariamente orientado a objetos.
precisa saber é o seguinte
-1

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. :)

Alexander Liberson
fonte
-1

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 Cpor 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 ..: )

liaK
fonte
-1

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, ou fclose. 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:

struct foo {
       int a;
       void * b;
};
foo x;  // in C++ this would work, but in C it would fail because struct names aren't in the
        // type name table unless you put them there with typedef

Eu não acho que eles vão decidir que você não sabe o que está fazendo porque não fez:

struct foo x;

E eles realmente não se importariam se você usasse, a coutmenos 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.

nategoose
fonte