우수한 (우수한) 프로그래머가 되려면 C (또는 C ++)를 사용하는 방법을 배우는 것이 필요합니까? [닫은]


25

프로그래밍 하는 법을 처음 배우기 시작했을 때, 실제 프로그래머는 수면 중에 어셈블리를 작성할 수있었습니다. 컴퓨터 과학 분야의 심각한 학교 교육에는 어셈블리를 사용한 프로그래밍에 대한 훈련과 실습이 포함됩니다. 그 이후로, 어셈블리가 포함 된 컴퓨터 과학 학위가 포함되어 있다면, 4 년제 학교에서 총 2 주 동안 총 2 주 동안 한 과제와 한 장으로 강등되었습니다.

C / C ++ 프로그래밍도 비슷한 경로를 따른 것 같습니다. 더 이상 C ++로 프로그래밍하는 데 2 ​​주 이상을 보냈지 않고 어딘가의 책에서 C 만 읽은 대학 졸업자를 인터뷰하는 것에 놀라지 않습니다. 가장 심각한 CS 학위는 여전히 상당한 시간의 학습과 언어 중 하나 또는 둘 다를 사용하는 것으로 보이지만 학교에서 덜 강제적 인 C / C ++로 향하는 추세입니다.

단 한 줄의 C 또는 C ++ 코드를 읽거나 쓰지 않고도 좋은 일을하는 경력을 쌓을 수 있습니다.

그 모든 것을 감안할 때 노력의 가치가있는 두 언어를 배우고 있습니까? 그들은 탁월해야합니까? "통합 교육을 위해서는 우수한 언어 선택이 중요 할 것"과 같은 명백한 비언어적 조언 외에, "프로그래머의 경력 전반에 걸쳐 새로운 언어를 계속 시도하고 배우는 것이 좋습니다. 회색 셀을 늘리려면 ")


8
C는 오늘날의 소프트웨어 인프라에서 어디에나 있습니다. 그것을 배우는 것은 당신이 작성하는 소프트웨어에서 실제로 무슨 일이 일어나고 있는지에 대한 더 깊은 이해를 줄 것입니다. ( programmers.stackexchange.com/questions/14744/… 참조 ).
찰스

: 나는 또한 여기에 대한 답변 관련 발견 programmers.stackexchange.com/questions/29109/...
blueberryfields을

접선 : 훌륭한 프로그래머는 다양한 프로그래밍 패러다임에 익숙합니다. 이는 여러 언어를 배우고 사용했음을 의미합니다.
Matthieu M.

더 많은 언어를 배우는 것은 아프지 않습니다.
Maxpm

4
C / C ++는 없습니다. C와 C ++ 만 있습니다. 언어가 매우 다르며, 당신이 말하는 것에 따라 대답이 상당히 다를 수 있습니다.
Caleb

답변:


63

Spolsky 조엘 (예, 것을 조엘) 한참을 주장 진짜 힘든 프로그래머가와 (포인터와 기능 기능 같은) 자신의 구조 (C, C ++ 및 리스프 같은) 더 열심히 언어를 사용하는 방법을 알고 높은 수준의 언어는 일반적으로되지 않았 음 당신의 역량을 보여줄만큼 '열심히'.

나는 C와 C ++를 아는 사람들이 실제로 그것에 능숙한 사람들이 루비에서 (그리고 루비 에서만) 프로그래밍하는 사람들보다 후드에서 일어나는 일에 대해 더 많이 알고 있다는 그의 요점을 이해할 수 있습니다 . "어려운"언어를 알고 있다면 심각한 제약을 존중하면서 프로그래밍 할 수 있거나 복잡한 사고 방식을 습득 할 수 있다는 좋은 증거 일 것입니다. 고급 언어에 능숙하다면 엄격한 제약 조건을 준수하면서 프로그래밍 할 수도 있지만 그에 대한 증거는 없습니다.

나는 C 또는 C ++를 배우면 뇌가 손상 될 것이라고 생각하지 않습니다 (일부 사람들은 이것을 믿는 것 같습니다). 사실, 더 높은 수준의 언어를 이해하기 위해 그것을 배우는 것이 좋습니다.


34

예, 훌륭한 프로그래머가 되려면 (현재의) C (또는 C ++)를 알아야합니다.

언어 자체가 아니라 환경입니다.

프로그램은 진공 상태에서 실행되지 않습니다. 훌륭한 프로그래머는 자신의 자료를 알고있는 것처럼 훌륭한 프로그래머가 자신의 환경을 알고 있습니다. 현재 프로그래밍 환경 (운영 체제, 컴파일러, 네트워킹 등)은 C / C ++를 기반으로합니다.

우수한 프로그래머는 효율적인 프로그램을 작성하고 실제 상황에서 디버깅합니다. 그는 환경을 알아야하고 현재는 C / C ++를 알아야합니다.

편집 : 매트릭스 참조 추가에 저항 할 수 없습니다. Morpheus는 다음과 같이 질문 할 수 있습니다. Java 약을 복용하고 가상 머신이 제공하는 편안한 세상에서 계속 생활하고 싶습니까? 아니면 C 알약을 복용하고 토끼 구멍이 얼마나 깊은 지 보십니까?


9
Matrix 참조의 경우 +1, 향후 사용을 위해 보관하겠습니다 :-)
Konamiman

20

다른 Joel 기사를 참조해야합니다. 에서 새는 추상화의 법칙 , C, 리스프, C ++ 등의 언어 및 메모리 관리를 포함하는 언어 학습도 생각하는 방법을 학습 관련 우리의 경력의 나머지 부분에 대한 정의 우리를.

윌리엄스 스피어스 (William Spears) 내 데이터 구조 및 알고리즘 수업 교수는 회의적인 컴퓨터 과학 학생들에게 최신 도구를 배우지 못한 이유를 설명했습니다. 학생들은 우리가 자바를 배우지 않았기 때문에 "실제 세계"에 대한 준비가되어 있지 않다고 느꼈습니다. 우리는 JavaScript를 배우지 않았습니다. HTML에는 수업이 없었습니다. 우리는 [[INSERT TECHNOLOGY HERE]]를 배우지 않았습니다.

최신 도구를 배우지 못한 이유는 무엇입니까? 교수에 따르면, 기술이 너무 빨리 바뀌어 4 년 안에 우리가 배우는 도구는 쓸모가 없을 수 있습니다. 업계에서 몇 년 후, 나는 그의 평가에 동의한다고 말해야 할 것입니다.

컴퓨터 과학 교육의 목적은 학습 방법을 배우는 것입니다. 개발 과정에서 많은 문제에 대한 해결책을 구하려면 종종 기본, 기본, 기본 학습, C, C ++ 및 Lisp와의 작업에서 비롯된 원시 컴퓨터 과학을 통해서만 얻을 수있는 상자 밖에서 생각할 수있는 능력이 필요합니다.

실제 세계에서 이러한 추상화가 유출 될 때 기본 원리에 대한 이해는 평균과 최고를 분리하는 것입니다.


3
뭔가 빠졌을 것입니다. Lisp는 학습 기본과 어떤 관련이 있습니까? 그것은 지금까지 발명 된 가장 큰 추상화 역전입니다. 원래의 기본 설계 목표 중 하나는 "Touring 머신을 사용하지 않는 척하고 그렇게함으로써 얼마나 단순화 할 수 있는지 살펴 보자"였습니다.
메이슨 휠러

6
@Mason : Learning Lisp은 실제 컴퓨터에 대해 거의 아무것도 가르쳐주지 않습니다. 그것은 계산 이론에 대해 많은 것을 가르쳐 줄 것입니다. 원시 컴퓨터 과학은 원시 컴퓨터 이상의 것입니다.
David Thornley

2
@Mason 휠러 학습 혀짤배기 소개하고 여러 가지 고급 포함한 개념 : 데이터 / 코드를 상호 교환, 반사 / 자기 수정 코드, 그리고 고려의 중요성 컴파일러 / VM 최종 제품의 일부
blueberryfields

@blueberryfields : ... 모두 숙련 된 코더가 해롭거나 보안 취약점으로 간주합니다. 초보자에게 가르치는 것은 매우 나쁜 일입니다.
메이슨 휠러

2
@Mason 나는 당신의 의견의 맥락을 이해하지 못합니다-우리는 초보자가 아닌 훌륭한 프로그래머에 대해 이야기하고 있습니다. 나는 이러한 개념을 완전히 이해하지 못하는 프로그래머를 고려하지 않고 그의 작업에 적절하게 (그리고 정기적으로) 전문가로 적용합니다.
blueberryfields

18

이렇게하겠습니다. C ++ 작업을 수행하기 위해 누군가를 고용해야한다고 말하고 누군가 대학에서 C ++ 프로젝트를 한 번 수행했지만 졸업 이후 Java로만 프로그래밍 한 사람을 적용한다고 가정 해 봅시다. 반대로, Java 작업을 위해 누군가를 고용해야한다고 말하고 누군가가 대학에서 Java 프로젝트를 수행했지만 졸업 이후 C ++로만 프로그래밍 한 사람을 지원한다고 가정하십시오.

누가 더 편안한 채용을 하시겠습니까? 가비지 수집 언어를 사용하는 것이 다른 언어로 옮기는 것보다 훨씬 쉽기 때문에 C ++ 사람을 논쟁 할 것입니다. 다른 개념과 다른 언어들도 마찬가지로 컴파일에서 해석으로 또는 정적에서 동적으로 타이핑하는 것과 같습니다. 언어간에 비교할 수있는 기능 비교에 의한 거의 모든 기능에서 C ++은 어려운 끝에서 나오기 때문에 프로그래밍하기가 어렵지만 프로그래머를 판단하기위한 훌륭한 기준이됩니다.

C 또는 C ++ 코드를 건드리지 않고 경력을 쌓을 수 있습니까? 물론입니다. 그러나 여전히 그렇게 할 수 없거나 두려워하는 사람을 고용하고 싶지는 않습니다.


3
엄청나게 논쟁. Java 작업이 필요한 경우 Java 경험이있는 사람을 고용합니다. C ++ 작업이 필요한 경우 C ++ 경험이있는 사람을 고용합니다. C ++ 직책을 위해 Java 직원을 고용 해야 한다면 포인터와 메모리 관리 및 RAII에 대한 퀴즈에 약간의 추가 인터뷰 시간을 소비 할 수 있습니다. 마찬가지로, Java 직책을 위해 C ++ 직원을 고용 해야 한다면 인터뷰에서 지터, 디자인 패턴, 리플렉션 등을 묻는 데 더 많은 시간을 할애해야합니다. 어느 기술 세트에도 더 많은 지능이 필요하고 경험이 필요하지 않은 것 같습니다. 학습 곡선의 대부분은 어쨌든 라이브러리에 있습니다.
Aaronaught

13

아니요, C 또는 C ++을 훌륭한 프로그래머로 배우는 것은 아니지만 메모리 관리와 같은 기본 개념을 명확하게 이해하는 데 도움이됩니다.


7

노력할 가치가있는 두 언어를 배우고 있습니까?

단 한 줄의 C 또는 C ++ 코드를 읽거나 쓰지 않고도 좋은 일을하는 경력을 쌓을 수 있습니다.


6

요컨대, 그들은 아닙니다. 배우는 데 유용한 언어이지만 C 또는 C ++ 줄을 건드리지 않고도 쉽게 훌륭한 프로그래머가 될 수 있습니다. 대부분의 우수한 프로그래머는 아마도 그것들을 만졌을 것입니다.하지만 요점은 아닙니다. 요즘 많은 응용 프로그램에서 .NET 및 Java만큼 많이 사용되지 않아서 필요성이 다소 떨어졌습니다.

나는 그들이 배울 가치가 없다고 말하는 것이 아니라, 특히 프로그래밍에서 경력을 쌓을 계획이라면 둘 다 배우는 데 중요한 언어라고 생각합니다. 그러나 어느 쪽도 손대지 않고 괜찮은 프로그래머가 될 수 있습니까? 확실한.


5

그것은 당신의 관심사에 달려 있습니다.
시스템 프로그래밍에 참여하려면 C의 기본 언어 인 C / C ++를 배워야 합니다. OS 개념, 컴파일러, 데이터 구조, 메모리 관리 등에 익숙해 지려면 C / C ++를 알아야합니다. 또한 C / C ++에는 프로그래밍 기술을 최적화 할 수있는 수많은 훌륭한 텍스트, 서적 및 기사가 있습니다. 며칠 전에서 / * 프로그래머 * / 내가위한 훌륭한 답변을 읽고 왜 C를 - 금속과의 닫기 때문에 .
다른 방법으로 응용 프로그램 프로그래밍으로 자신을 제한하려면 C / C ++로 갈 필요가 없으며 C # (.Net) / Java로 직접 시작하면 좋은 개발자의 직업을 얻게됩니다. 그러나 하드 코어 프로그래밍을 정말로 좋아한다면 언젠가 C / C ++를 배우기 시작할 것입니다.


금속에 가깝다! 그 의견을 사랑하십시오.
Wajih

3

어떤 애플리케이션 도메인에서 작업하고 싶은가에 따라 달라집니다. 임베디드 환경에서 플레이하려면 C 또는 C ++를 알아야합니다. C ++은 아마도 게임 개발에서 가장 일반적으로 사용되는 언어 일 것입니다. 웹 응용 프로그램에서 작업하려면 C 또는 C ++만큼 중요하지 않을 수 있습니다. 훌륭한 소프트웨어 엔지니어를 정의하기위한 우선 순위로 알고 있어야하는 명성을 가지고있는 언어는 없습니다.


3

C는 "포터블 어셈블리"로 명명되었으며 이는 매우 사실입니다. 프로세서 전체에서 Unix를 이식 가능하게 만들고 기본 프로세서의 명령어 세트에 매우 가까운 코드를 설명하도록 설계되었습니다.

경우에 당신은 당신이 임베디드 소프트웨어 또는 장치 드라이버 등에있는, 실제 하드웨어에 대한 작업 가까이에하고 싶은 것을 발견 당신은 주류에서 작업 할 경우, C. 주위에 방법이 없습니다, 높은 수준의 언어는 더 나은 아이디어 이후입니다 C를 강력하게 만드는 많은 기능들도 C를 위험에 빠뜨려서 줄이거 나 간단히 제거했습니다.

개인적으로 나는 많은 디자인 결정이 이것에 의존하기 때문에 결국 프로그램을 실행하는 데 필요한 것이 무엇인지 이해하는 것이 매우 중요하다고 생각하므로 최소한 코드를 어셈블리 명령어 세트에 매핑하는 방법과 실제 작동 방식에 익숙해야합니다. 하드웨어. 당신이 당연한 것으로 여기는 것은 실제로 시간걸리고 왜 그런지.

따라서 최소한 C와 고급 포인터 산술 코드를 살펴 보라고 제안하므로 매일 처리 하지 않아도되는 것을 알 수 있습니다 .


1

C는 실리콘에 가깝기 때문에 배우는 데 유용합니다. C 또는 어셈블리 언어는 컴퓨터가 무엇을 할 수 있고 어떻게 수행하는지에 대한 좋은 느낌을 줄 것입니다. 이것은 가능한 것과 실용적인 것을 이해하는 데 유용 할 것입니다. 더욱이 여러분이 관심을 가질만한 많은 C 코드가 있으며, 훨씬 더 현대적인 언어는 많은 구문과 의미를 사용합니다.

C ++는 매우 흥미로운 기능을 가진 고급 언어입니다. 그것은 많은 좋은 사용법을 가지고 있으며 강력한 언어입니다. 반면에, 강력하고 유용한 다른 언어가 많이 있습니다.

따라서 저수준에서 일어나는 일에 대해 배우는 것이 좋으며 C는이를 배우는 훌륭한 방법이므로 C를 배우는 것이 좋습니다. C ++는 선택 사항입니다. 그것을 배우는 것은 당신에게 물건을 가르쳐 줄 것이지만, 그것들을 배우는 다른 방법이 있습니다. 그리고 이미 주류 언어로 일하고 있다면 새로운 개념을 배우는 데 더 나은 언어가 있습니다.


0

그것은 당신이 만들고 있다고 생각하는 소프트웨어의 유형에 달려 있습니다. 게임은 실행 코드와 관련하여 일반적으로 더 최적화 가능한 언어이므로 종종 C / C ++로 작성됩니다. 당신이 코딩하는 것은 당신이 얻는 방식에 관한 것입니다.

C #은 게임을 프로그래밍하는 데에도 사용되었습니다. C #은 아마 중 하나입니다 Windows 플랫폼에서 적어도 데스크톱 응용 프로그램 개발을위한 최적의 언어.

Visual Studio와 함께 C #은 모든 의도와 목적을 위해 사용하는 거의 유일한 소프트웨어 개발 언어 (SQL 및 PHP 등의 언어를 배제)로 제 생각 에는 피의 환상이 되었습니다.

Windows에서 개발하는 경우 다른 것과 함께 C # .NET을 배우는 것이 좋습니다.

C ++ 자체가 요구 사항이라고는 생각하지 않지만 포인터, 메모리 관리 및 기타 개념에 대한 저수준 지식을 갖는 것이 좋습니다.


1
@ Nick : 컴퓨터 세계는 창과 C #을 초월합니다.
레인저

2
나는 말했다 그래서 왜 "Windows에서 개발하는 경우" .
Nick Bedford

0

@Nick Bedford는 여러분이 일하고있는 도메인에 관한 것입니다. 내 소프트웨어는 장치 드라이버와 내장 소프트웨어를 작성합니다. C가가는 길입니다. 그리고 C ++을 다른 언어로 생각하지 마십시오.


3
C ++을 C와 다른 언어로 생각하지 않는다면 C ++을 잘 모르는 것입니다. 오버랩에서만 작업하는 것이 가능하지만 권장되지는 않습니다.
David Thornley

아마도 나는 비슷한 점을 과장하여 언급했을 것이다. 그러나 C와 Perl과 동일합니다.
Brian Carlton

0

많은 사람들이 C가 메모리 관리를 배우기에 좋다고 말했으며 동의합니다. C를 배우는 것에 대한 나의 의견은 프로그램을 디버깅하는 방법을 배우기 위해 배우는 것이 매우 좋다는 것입니다. C를 작성하는 데 많은 문제가 생길 수 있으며 프로그램 디버깅 방법을 생각해야합니다. C가 내장 디버깅 유틸리티를 프로그램에 추가하는 방법을 가르쳐 주었기 때문에 프로그래밍 (C 또는 다른 언어)에서 디버깅 도구를 거의 사용하지 않습니다.

경력에 C / C ++ 학습이 필요합니까? 아니,하지만 나는 또한 본 적이 많은 그들은 단지 자바를 배운 때문에 기본 프로그래밍을 많이 모르는 자바 개발자를. Perl 프로그래머와 동일합니다. C / C ++가 해당 언어 중 하나인지 여부에 상관없이 경력을 쌓기 위해서는 여러 언어를 배우는 것이 필요합니다.


+1-다른 언어로 다른 방식으로 유사한 개념을 제시하면 이러한 개념을 더 잘 이해하고 완전히 새로운 시각으로 볼 수있었습니다.
jmort253

0

처음에 나는 대학이 Java, Visual Basic 등과 같은 비교적 새로운 언어가 많을 때 2 학기 동안 C를 포함하여 Dennis M. Ritchie 세대에 있다고 생각했습니다 . 그러나 사실, 적어도 지금은 C가 프로그래밍의 기본 개념을 이해하도록 도와주는 최고의 언어 중 하나라고 생각합니다.

그리고 C (또는 C ++)를 배우지 않고 경력에 대해-가능합니다. 그러나 C를 배우면 프로그래밍에 대한 지식을 보여줄 것입니다.


0

나를위한 대답은 '예'였습니다. C와 C ++는 모두 CS 학위 프로그램의 필수 과정이며, CS 또는 관련 학위를 소지하는 것이 "좋은 프로그래머"가되기위한 최소한의 요구 사항이라고 생각합니다. 또한 "좋은 프로그래머"라는 것은 발생하는 문제를 합리화하고 예상대로 작동하지 않는 이유를 이해하는 것을 의미합니다. 내 경력에서 너무 많은 시간을 나는 개인이 문제에 시달리는 것을 목격했으며 초자연적 힘이 그들에 대항하여 작용하고 있다고 생각했습니다.

C를 아는 IMO는 인류가 발명 한 가장 강력한 도구 중 하나를 사용하여 명령형 언어를 이해하고 문제를 해결하는 능력을 보여줍니다.


0

잘 다듬어 진 프로그래머는 다음과 같은 몇 가지 트릭 가방을 가지고 있습니다.

1) 저수준 프로그래밍 ... C 최소. 일부 회의는 아프지 않을 것입니다.

2) 기능적 프로그래밍 ... 하이브리드가 아닌 순수한 기능적 언어-체계가 여기에서 작동합니다.

3) OOP ... 일반적으로 스몰 토크라고 말하지만 지금은 Java로 갈 수있을 것 같습니다.


0

C는 모든 프로그래밍 언어의 어머니입니다 .... C의 전문가 지식은 짧은 기간 동안 Java와 같은 다른 언어를 아는 데 큰 도움이됩니다.

C ++는 완전히 다른 볼 게임이며 가장 복잡한 게임입니다.


0

훌륭한 (우수한) 프로그래머가되기 위해 C 또는 C ++를 배울 필요는 없지만 훌륭한 (우수한) 프로그래머가 되려면 어셈블리를 배워야합니다. 탁월한 프로그래밍은 메모리, Mhz, 대역폭, 전력 제약 조건을 최적화 한 다음 당면한 작업을 수행하기위한 최상의 설계 및 / 또는 구현을 선택하는 것을 의미합니다. 컴퓨터 과학자들 사이에서 1 차적인 약점은 수십 년간 진화 한 기술 이후에도 데이터를 최적으로 관리하는 것입니다. 이것은 어셈블리 (어셈블리; ARM, MIPS, x86, 마이크로 컨트롤러, DSP 또는 verilog / VHDL을 통해 그보다 낮을 수 있음)를 작성하여 학습하는 기술 세트입니다.


0

c, c ++, assembly 및 Lisp를 능숙하게 사용하면 좋은 프로그래머가되기 위해 특정 언어를 전혀 배우지 않는 것이 합리적이라고 말하고 싶습니다. 좋은 프로그래머를 만드는 것에 대한 나의 경험은 문제를 해결하는 방식으로 생각할 수있게되었습니다. 언어를 사용하면 문제 해결 능력을 표현할 수 있습니다. 예를 들어 C의 단순성으로 알고리즘을 쉽게 표현할 수 있으며 Lisp에서는 문제를 재귀 적으로 해결할 수 있습니다. 언어는 프로그래머를 만들지 않습니다. 좋은 프로그래머가 되려면 먼저 문제 해결사가되어야합니다. 언어는 문제를 해결하는 데 사용하는 도구 일뿐입니다.


-1

메모리 관리에 대한 확실한 이해를 얻으려면 C를 잘 배우는 것이 좋습니다. 데이터 구조를 학습한다는 목표를 제외하고 C ++ 용 Ditto


데이터 구조를 배우기 위해 사용하는 언어는 중요하지 않습니다.
kirk.burleson 17

많은 다른 언어에서 데이터 구조가 메모리에서 처리되는 방식을 모른 채 사용하기 때문에 그렇게한다고 생각합니다. C ++ (STL을 사용하지 않음)은 프로그래머가 데이터 구조가 낮은 수준에서 처리되는 방식을 배우도록합니다.
아쿠아

-1

아닙니다. C / C ++ 코드를 작성하는 많은 프로그래머가 있습니다. C / C ++로 무언가를 작성해야하는시기와 이유를 이해하는 것이 프로그래머에게 도움이되는 것은

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