C를 모르더라도 괜찮습니까? C ++에 능숙합니까? [닫은]


23

여기에 가장 잘 답변 될 수 있다고 생각되는 질문이 있습니다.

나는 C++언어에 익숙한 것처럼 꽤 잘하고 Accelerated C++거의 모든 연습을 읽고 수행했습니다.

그러나 큰 문제가 있습니다. 배워야 C합니까? 나는 C내 인생에서 결코 해본 적이 없다 . 방금 C++프로그래밍을 시작할 때 시작했습니다. 아마 모든 사람들이 왜 그렇게 언어를 그렇게 복잡한 언어로 부르는지 알고 싶어했을 것입니다. 이제 나는 그 질문에 대한 답을 알고 있지만;)

특히 C오늘날의 세계를 알지 못하고 생존 할 수 있는지 알고 싶습니다 . 내가 회사에서 인터뷰를하는 것처럼, 내가 모르는 것을 말하면, C그들은 그것을 괜찮게 받아 들일 것인가? 내가 좋아하는 두 가지 언어는 Python과 C ++입니다. 회사가 인터뷰에서 데이터 구조를 요구한다고 들었습니다. 그래서 그들이 구현하도록 요청하고 C ++로 수행하면 허용됩니까?

그리고 '당신이 C ++을 어떻게 C를 알 수 없습니까?'라고 말하는 사람들은 답장을 보내지 마십시오.



1
DumbCoder가 인용 한 기사는 임베디드 프로그래밍에서 C의 인기에 관한 것입니다.
ChrisW

2
@ChrisW-그렇습니다.하지만 여전히 C가 마스터하기 쉽지 않다는 것을 보여줍니다.
DumbCoder

@DumbCoder : 오, 아니오, 임베디드 프로그래밍. 데스크탑과 비교하여 몇 개의 작업이 포함되어 있습니까?
DeadMG

@DeadMG-언어를 마스터하는 것은 해당 언어에 사용할 수있는 작업 수와 관련이 없습니다. 그리고 C가 임베디드 프로그래밍에만 사용된다는 아이디어를 어디서 얻었습니까?
DumbCoder

답변:


36

C ++을 알고 있다면 C를 배우기 위해 C를 배우지 않을 것입니다. 필요할 때 언제 배우는 것이 어렵지 않아야합니다.

C / C ++을 알고 있다고 주장하는 사람보다 C ++를 알고 있다고 주장하는 사람을 만나기를 원합니다.


아, 네. 그것은 C ++ 도시의 신화에 SO 질문에 첫번째 항목의 목록입니다 : stackoverflow.com/questions/2245196/c-urban-myths

4
+1. C ++을 알고 있다면 시작을 위해 C를 배우는 데 열중하고 두 번째로 실제로 중요하지 않습니다.
DeadMG

6
@DeadMG 구문을 배우는 것은 쉬울 수 있습니다. 왜냐하면 C ++에서 어떤 부분을 제거해야하는지 알기 때문이지만 일반적인 관용구를 배우는 것이 더 어렵고 틀림없이 가장 중요한 부분입니다. 하지만 필요하지 않으면 C를 배우지 않을 것입니다.
KeithB

6
@chubsdad CV에 "Java / Javascript를 알고 있습니다"를 표시해서는 안된다는 의미입니까?
시크릿

@ user257493 : Java / Javascript와 같은 것은 없습니다
John

23

여러 부분으로 구성된 답변. 내 의견 만.

  1. 저의 경험 (대학을 졸업한지 25 년)은 점점 흔하지는 않지만 C ++이 가까운 장래에 흥미로운 시스템에 계속 중요 할 것입니다. 그래서 저는 저의 주요 전문 분야로이를 고수하고 있습니다. 작업은 어렵고 흥미롭고 중요합니다.

  2. C ++ 프로그래머는 일반적으로 관리되는 언어에서 자라지 않았기 때문에 일반적으로 정확하게 가치가 있으므로 덮개 아래에서 무슨 일이 일어나고 있는지 이해할 가능성이 높습니다. 입력 막대가 높기 때문에 C ++에서 C # / Java로 전환하는 것이 더 쉽습니다.

  3. 따라서 내 견해로는 C ++에서 유능하게 프로그래밍하기 위해 C를 이해하는 것이 필수적이지는 않지만 C ++가 C의 맥락에 존재하는 이유-그 한계와 강점 및 C ++에서 어떻게 해결되는지에 대한 이해를 발전시킵니다. 시간이 지남에 따라 당신에게 귀중한.

행운을 빌어 요.


C ++가 점점 흔치 않다고 말하는 이유는 무엇입니까? 당신의 경험에서 그것을 대체하는 것은 무엇입니까?
Praxeolitic


13

Bjarne은 다음과 같이 말합니다.

C를 아는 것은 C ++을 배우기위한 전제 조건입니다.

잘못된. C와 C ++의 공통 부분 집합은 C보다 배우기가 더 쉽습니다. 수동으로 잡는 유형 오류가 적고 (C ++ 유형 시스템이 더 엄격하고 표현력이 뛰어남), 배우는 비법이 적습니다. (C ++를 사용하면 할례없이 더 많은 것을 표현할 수 있습니다) 더 나은 라이브러리를 사용할 수 있습니다. 배우기위한 C ++의 초기 부분은 "모두 C"가 아닙니다.


4

내 개인적인 의견 : C ++을 알고 있다면 C로 작성할 수 있습니다. 일부 경험은 좋을 것이지만 문제는 아닙니다. 반대의 경우는 정확하지 않습니다. C 지식은 추가 학습없이 C ++로 작성할 수 없습니다. 나는 C를 배우지 않았으며 필요할 때 아무 문제없이 사용합니다.


3
@Alex Farber- "C ++을 알고 있다면 C로 작성할 수 있습니다." 나는 :)
DumbCoder

4
동의하지 않는다. C ++을 먼저 배우는 프로그래머 인 IME는 C가 가지고 있지 않은 C ++ 기능을 깨닫지 못하는 경향이 있습니다. C를 먼저 배우는 프로그래머는 C ++로 쉽게 작성할 수 있지만 비 관용적으로 시작합니다.
dan04

1
이것은 내 개인적인 경험을 바탕으로합니다. 저는 C ++을 배웠고 대부분의 작업을 C ++로 만들었습니다. 그러나 필요한 경우 문제없이 C를 사용합니다.

특히 모든 귀여운 클래스 라이브러리를 C에서 사용할 수 없다는 점을 감안할 때 C ++ 및 Java와 같은 언어의 승리는 고유 한 언어 기능 자체가 아닌 라이브러리입니다.

8
C ++을 통해 해킹을 시도하는 C ++ 프로그래머는 C ++을 통해 해킹을 시도하는 C 프로그래머가 나쁜 코드를 작성하는 것과 같은 이유로 잘못된 코드를 작성합니다. C 사람들은 C ++를 "클래스가있는 C"로 사용하고 C ++ 사람들은 C를 "클래스가없는 C ++"로 사용합니다.
John Dibling

4

우선, 먼저 C를 아는 것은 C ++을 배우기위한 전제 조건이 아닙니다. 실제로, 그것은 방해가 될 수 있습니다.

둘째, 이것은 완전히 상황입니다. C를 알아야하는지 여부는 전적으로 C가 필요한지 여부에 달려 있습니다. 임베디드 시스템 전문가가 되려면 C를 배우면 도움이 될 것입니다. 그렇지 않으면 대부분의 작업에 필요하지 않습니다. 작업에 C가 필요한 경우 그렇게해야합니다. 그렇게 말하지 않으면 아마 필요하지 않을 것입니다. 데이터 구조와 관련하여 다시 회사에 귀속됩니다. 일반적으로 회사는 "이러한 언어로 프로그램하고이 데이터 구조를 작성합니다. 위 목록에서 원하는 언어를 사용하십시오"라고 말합니다. 그들이 C로 작성해달라고 요청하면, "나는 C를 모른다-이력서에서 C를 알고 있다고 말하지 않는다.이 일은 나를위한 것이 아니다."


C를 아는 것이 C ++을 배우는데 방해가되는 이유는 무엇입니까? 나는 반드시 동의하지 않는다고 말하는 것은 아니지만 이것은 대담한 진술입니다.
Casey Patton

3

회사에서 인터뷰를하는 것처럼 C를 모른다고 말하면 괜찮습니다.

그들이 C를 필요로하는지 물어보십시오 (그리고 배우기를 원한다면 배우십시오).

그래서 그들이 구현하도록 요청하고 C ++로 수행하면 허용됩니까?

그들이 당신이 C ++에서 일하기 위해 인터뷰 / 고용하고 있다면 그렇게 기대할 것입니다.

"데이터 구조"질문 인 경우 STL 컨테이너를 사용하여 시연하기를 원하는지 또는 인터뷰로 인해 데이터 구조를 처음부터 구현하기를 원하는지 물어볼 수 있습니다.


2

C는 거의 C ++의 적절한 하위 집합입니다. C를 모른다면 C ++의 크고 중요한 부분 집합을 모른다. 당신이 할 이 부분 집합을 배울? 아닙니다. C ++는 엄청나게 큰 언어이며 대부분의 사람들은이를 사용하여 하위 집합과 프로그램을 선택합니다. C 인 서브 세트를 알 필요는 없습니다. 특히 C 표준 라이브러리를 아는 것은 중요하지 않습니다. 그러나 포인터, 배열 및 비트 왜곡과 같은 핵심 C 개념을 이해하지 못하는 사람에게는 매우 의심의 여지가 있습니다.


2

C를 배워야합니까?

아니요, 필요하지 않습니다. 기간.

그러나 새로운 프로그래밍 언어를 배우는 것은 장기적으로 유리합니다. 다른 프로그래밍 패러다임을 기반으로 한 언어를 배우는 것이 훨씬 유리합니다. OOP 언어 (Smalltalk 또는 C ++), 동적 언어 (Lisp, Clojure, Python), 기능적 (Lisp, Haskell, Erlang), 동시 (Erlang, Go, Algol 68, Smalltalk) 또는 기타 (Fortran 03, Perl, Forth)의 또 다른 신기한 패러다임이 당신의 공상을 칩니다 . 다른 언어를 배우면 각자의 과제를 다루기위한 각각의 강점과 약점을 가진 여러 줄의 사고에 노출되는 데 도움이됩니다.

Fortran은 여전히 ​​숫자 컴퓨팅에서 지배적이며 COBOL은 여전히 ​​대형 보험 회사의 주류이며 Unix, BSD 및 Linux는 여전히 주로 C를 기반으로합니다. 오래된 코드는 반드시 마모되지 않기 때문에 나이가 들어도 가치를 잃지 않습니다. 시간이 지남에 따라 교체해야하는 기계 장치와 같은 따라서 오래된 언어는 새로운 언어의 멋진 요소에 비해 고용 가능성 측면에서 가치가 있습니다 .

자연 (인간) 언어로 다국어를 배우는 것이 자신을 표현하는 능력을 향상시키는 것처럼 컴퓨터 언어에 대해서도 같은 종류의 보너스가 적용됩니다.

여러 언어에 능통 할뿐만 아니라 여러 프로그래밍 패러다임에 능숙 해지는 것이 더 중요하다고 생각합니다.

저는 C ++에 능숙합니다. 언어에 익숙해서 Accelerated C ++를 읽었고 거의 모든 연습을했습니다.

백업을하고 C ++은 풍부하고 복잡한 언어라고 말하면서, 모든 부자유 한 미묘함에 진정으로 유창하게 되려면 수년간의 노출과 지속적인 연습이 필요합니다.

시간을내어 계속 배우는 것이 내가 줄 수있는 가장 중요한 조언입니다. 다른 사람이 이해하기 위해서는 Peter Norvig의 Teach Yourself Programming을 10 년 안에 읽어 보시기 바랍니다 .


1

귀하의 질문에 대한 매우 짧은 대답은 귀하의 요구에 따라 크게 다릅니다. 일부 회사는 주로 C에 의존하며 때로는 유물로 사용되기도합니다 (C가 이미 몇 년 동안 사용 된 경우). 다른 회사는 C와 관련이 없습니다. C는 Python 또는 Java보다 낮은 수준의 언어이므로 많은 응용 프로그램 프로그래밍에는 C에 대한 지식이 필요하지 않을 수 있습니다. OOP 언어와 달리 C에는 다른 마인드 프레임이 필요합니다. 나는 프로그램이 다르게 구성되고 조직되어 있다는 것을 의미하며, 더 미묘한 측면을 고려해야합니다. 일반적으로 그 관용구를 배우는 것, 단순히 마음을 넓히는 것까지 말하면 유익합니다. 그러나 기업이 관심을 가질 지 여부는 그들의 요구에 달려 있습니다. 어떤 언어는 당신에게 언어의 선택을 줄 수도 있고, 어떤 언어는 Java, 다른 C ++, 다른 스틸 C 등을 필요로 할 수도 있습니다. 살아남을 수 있습니까? 예-오늘 세계에는 프로그래밍 영역이 너무 많아서 C 코드를 결코 지나치지 않을 수도 있습니다. C를 배워야합니까? 나는 말할 것입니다-나중에 사용하지 않고 예.


1

어떤 사람들은 C ++을 알고있는 동안 C 프로그래밍이 편안하지 않을 수 있습니다.

C ++에는 "보호 적"구조가있어 구조뿐만 아니라 프로그램 알고리즘도 구동합니다. 예를 들어 STL 구조와 알고리즘의 도움, 명백한 객체 지향 프로그래밍 접근법, 생성자 / 소멸자, 템플릿에서 나온 추가 된 추상 레이어 ...

C는 더 간단하지만 프로그래머가 스스로 구조와 알고리즘을 문제 모델링에 삽입하도록 강요합니다. 이것은 프로그래밍 자유도가 크게 증가한 것입니다.
그러나 일부 사람들은 더 많은 부과 구조를 필요로하기 때문에 비용이 많이 들고, 규모가 커질수록 기하 급수적으로 유지하기 어려운 프로그램을 구축합니다. 나는 종종 문제가 언어 (C)가 아니라 문제와 관련이 있다고 말합니다.

이는 채용 담당자로서 강력한 C ++ 기술을 가진 사람을 인터뷰하게되어 기쁘지만 전체 C 프로젝트를 개발할 수있는 충분한 언어 자율성을 갖추면 더욱 열성적 일 것입니다.

또한, 우수한 C 프로그램은 효율적인 실행 가능을 구축하기 위해 시스템 구성 요소에 대한 공정한 이해가 필요하기 때문에 우수한 개발자 시스템 기술을 의미합니다.


나는 그것이 프로그래머의 자유를 증가 시킨다고 말하지 않을 것입니다-당신은 항상 C ++로 자신 만의 구조와 알고리즘을 작성할 수 있습니다.
DeadMG

0

C ++에 익숙하다면 C 학습에 대해 걱정할 필요가 없습니다. C ++은 C보다 많은 개선 사항을 가지고 있습니다 (생성자 / 소멸자, 기본 컨테이너, 스트림 및 문자열로 RAII를 지원하는 기능이 큼).

나는 그러나 학습을 제안 printf하고 scanf당신이 사용하는 그 코드를 읽을 수 있도록 기능의 시리즈. 그들은 C ++에서 꽤 인기가 있으므로 사용법을 아는 것이 도움이됩니다. 특별한 이유없이 자신의 코드에서 사용하는 것이 좋습니다.


0

C를 알아야 할 유일한 시점 은 C 코드를 생성 해야하는 경우입니다. 그렇지 않다면 아무런 문제가 없습니다.

나는 지난 6 년 동안 C를 전문적으로 쓰지 않았습니다. Java, C # 또는 Python과 같은 다른 언어 (적어도 성능이 아닌 경우 생산성 측면에서)에 의해 더 잘 제공되는 많은 응용 프로그램 도메인이 있습니다. C를 건드리지 않고도 소프트웨어 개발자로 살아남거나 번성 할 수 있습니다.

자신의 학대에 대해 C를 배우고 싶다면 괜찮습니다. C ++을 배운 방법과 C ++ 관련 기능 (템플릿, 참조 유형, STL, 오버로드)에 얼마나 의존하고 있는지에 따라 프로그래밍을 허용하는 도구의 90 %를 더 이상 사용할 수 없다는 사실을 깨달았을 때 약간의 결함이있을 수 있습니다. C의 메모리 관리와 같은 것은 C ++ 또는 Java에 비해 매우 노동 집약적이며 지루합니다. C와 C ++ 사이에는 약간의 비 호환성도 있으며, 각각의 새로운 언어 버전에서는 그 격차가 커질 것입니다.

C가 작업에 적합한 도구 인 응용 도메인이 여전히 있습니다. 작고 빠르며, 마법이 많지 않으며 어셈블리가 아닙니다. 그러나 일반적인 응용 프로그램 개발 (특히 GUI 기반 데스크톱 응용 프로그램)의 경우 더 나은 도구를 사용할 수 있습니다.


-1

C ++에 익숙하다면 C에도 익숙 할 것이라고 생각합니다.

둘 다의 주요 차이점은 C ++이 깨끗하다는 것입니다-객체 지향-C는 그렇지 않습니다 :)


1
나는 C ++의 열렬한 팬이지만 깨끗하지는 않습니다. 그리고 C ++은 다중 패러다임입니다. 즉, 좋은 C ++ 코드가 반드시 객체 지향적 인 것은 아닙니다.
KeithB

-1

C를 아는 것은 메모리 관리 등에 대한 더 많은 통찰력을 제공 할 것입니다. 그것은 당신이 얻고 자하는 저수준과 낮은 레버에서 물건을 이해하는 것이 당신에게 도움이되는지 아닌지에 관한 것입니다. 한 걸음 더 나아가서 어셈블리 언어도 배울 수 있지만 그 가치는 어느 정도인지에 달려 있습니다.

또한 C로 프로그래밍할지 여부에 따라 다릅니다. :)


-1

그래 괜찮아 ...

IMHO, 당신이 잘하기 때문에 C++실제로 충분합니다 ...

C ++ 프로그래머를 찾고있는 산업이있을 것입니다 ...하지만 일단 들어가면 프로젝트 요구에 따라 달라집니다. 무엇을 배워야하더라도 Java, .Net 또는 C 일 수 있습니다. .. 회사가 귀하에게 지불 할 준비가 되었으면 배우십시오 ...

당신이 경력의 초기 단계에 있다면, IME 면접관은 당신의 태도와 당신이 편한 언어에 대한 이해를 조사하는 경향이 있습니다.

C사케 를 배우는 대신에 , C ++를 조금씩 배우십시오. 당신이 잘하는 것을 향상 시키십시오. 당신이 배워야 할 것이 많을 것입니다 ... 저에게는 C ++에는 항상 배울 것이 있습니다. : : )


-1

C와 관련하여 알아야 할 가장 중요한 것은 C와 C ++의 차이점이라고 생각합니다. 어떤 시점에서 C 스타일이있는 코드가 보일 것이므로 다음과 같은 것을 볼 때 혼동해서는 안됩니다malloc , free, printf, fopen, 또는 fclose. 또한 이들이 어떻게 C ++와 다른지뿐만 아니라 어떻게 비슷한 지 알아야합니다.

당신은 또한 알아야 <<하고 >>왼쪽과 오른쪽 시프트 연산자,하지 삽입 운영자입니다. 연산자를 오버로드 할 수있는 C ++에서 이들은 스트림 삽입 및 이와 유사한 작업을 수행하기 위해 오버로드되었지만 여전히 정수를 이동하는 데 사용됩니다.

C ++에없는 C의 모든 기본 기능을 이해해야합니다. stackoverflow.com을 충분히 읽으면 언어와 사람들의 오해에 대한 차이점과 관련된 많은 질문을 보게 될 것입니다.

또한 C ++ 전처리 기와 거의 같은 (그리고 종종 동일한 프로그램) C 전처리기에 익숙해 져야합니다. 사용 방법을 알면 C ++에서 도움이되지만 C에서는 훨씬 더 많이 의존합니다.

C ++에서 다루기 어려운 C에서 다루기 어려운 한 가지는 소멸자입니다. 이러한 것들은 자원 확보를 돌보는 모든 곳에서 불릴 수 있지만, C에서는 그 모든 것을보다 명확하게해야합니다. 이것은 C ++ 프로그래머가 잊어 버리기 쉽습니다.

인터뷰 할 때 누군가 누군가 C의 일반적인 알고리즘에 대한 코드를 작성하도록 요청하고 다음과 같은 작업을 수행하는 경우 :

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

나는 그들이하지 않았기 때문에 당신이하고있는 일을 모른다고 결정할 것이라고 생각하지 않습니다.

struct foo x;

그리고 그들은 당신이 사용하면 정말 상관 없어 cout 당신을 보여 주려고하지 않는 한 입력과 출력을 처리하는 능력이 아니라면 C ++이 일반적인 경우에 더 쉬워지는 것이 아니라면 하지 .

C를 필요로하는 직무에 대해 면담을 할 수있는 위치에 있다면 C ++과의 중복을 벗어난 C에 대한 지식이 부족하다는 사실을 미리 알아야합니다. 그들은 좋은 프로그래머가 C ++에서 C 로의 전환을 상당히 빨리 할 수 ​​있어야한다는 것을 이해할 것입니다.

C는 그렇게 큰 언어가 아닙니다. 표준 라이브러리는 C ++보다 훨씬 작으며 가장 일반적인 부분을 익히는 데 큰 도움이되지 않으므로 실제로 배우는 데 어려움이 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.