나는 C를 모른다. 왜 그것을 배워야 하는가? [닫은]


58

내 첫 프로그래밍 언어는 PHP ( gasp )였습니다. 그 후 JavaScript로 작업하기 시작했습니다. 최근에 C #에서 작업을 수행했습니다.

나는 C와 같은 저급 또는 중급 언어를 한번도 본 적이 없다.

프로그래밍 커뮤니티의 일반적인 합의는 "C와 같은 것을 배우지 않은 프로그래머는 솔직히 포인터, 데이터 타입, 참조에 의한 값 전달 등과 같은 프로그래밍 개념을 처리 할 수 ​​없다"는 것이다.

난 동의하지 않는다. 나는 그것을 주장한다 :

  1. 고급 언어는 쉽게 액세스 할 수 있으므로 더 많은 "비 프로그래머"가 뛰어 들어 혼란에 빠집니다.
  2. 실제로 고수준의 언어로 무엇이든하기 위해서는 대부분의 "최하위 학습"을지지하는 사람들과 동일한 개념을 이해해야합니다.

어떤 사람들은 C를 알아야합니다. 저 사람들에게는 저수준에서 중간 수준의 코드를 작성해야하는 직업이 있습니다. 나는 C가 대단하다고 확신하고 C를 아는 나쁜 프로그래머가 몇 명 있다고 확신한다.

왜 편견? 훌륭하고 정직하며 배고픈 프로그래머로서, C를 배워야한다면 (예상치 못한 이유로) C를 배우게 될 것입니다. 많은 언어를 고려할 때 좋은 프로그래머가 우리를 발전시키는 것을 배우는 데 집중해서는 안됩니까? 우리가 관심을 갖는 것을 배우면 안됩니까? 유한 한 시간을 앞당겨 활용해서는 안 됩니까? 일부 프로그래머가 왜 이것에 동의하지 않습니까?

나는 당신이하는 일에서 우수성을 추구하는 것이 좋은 프로그래머와 나쁜 프로그래머 사이의 근본적인 결정 론적 특성이라고 믿습니다.

Java, Pascal, PHP 또는 JavaScript와 같은 고급 언어로 작성된 내용이 C에 대한 사전 지식을 통해 실제로 어떤 이점을 얻었는지에 대한 실제 사례가 있습니까? 예가 가장 높이 평가 될 것이다.


@ 스티븐 오, 죄송합니다 ... 오해. (하지만 당신은 왜 c / c ++을 배워야하는지 알 수 있습니까?)
ApprenticeHacker

1
@burningprodigy 예, C / C ++가 필요한 곳에서해야 할 일이 있거나 가장 이해가되는 경우 C를 배우는 것이 좋습니다. 내 소고기는 C를 효과적으로 배우려면 C를 배우라고 말하는 사람들과 함께합니다. 고급 언어로 개발하십시오. 그리고 그것은 터무니없는입니다.
Stephen


"포인터와 같은 프로그래밍 개념을 처리 할 수 ​​없습니다 ..."가 나오는 문맥 (url)을 알려주시겠습니까?
k3b

내가 배울 수있는 언어가 하나 있다면 C가 아닌 Common Lisp가 될 것입니다. 주로 C # 개발자로서, 나는 그것으로부터 더 많은 혜택을 얻을 것이라고 확신합니다. 이미 C #에 포인터가 있습니다. 대부분의 경우 동일한 솔루션을 더 어려운 방식으로 구현하려고 시도하는 것보다 문제에 접근하는 더 많은 방법을 배우고 싶습니다. (참고로, 나는 반쯤 거짓말을하고 있습니다. 저는 C를 해봤는데 그 장점이 있다는 것을 알고 있습니다. C를 10 년 앞선 믿을 수 없을만큼 강력하고 표현력있는 언어에 신용을주고 싶었습니다.
Magus

답변:


113

C를 아는 것의 장점은 컴퓨터가 어떻게 작동하는지 잘 알고 있다는 것입니다. 프로그래밍 모델의 작동 방식뿐만 아니라 메모리 배치 방법 등.

C 아래의 유일한 수준은 특정 CPU가 사용하는 어셈블리입니다.

(나는 C를 아는 것이 또한 당신이 더 높은 수준의 언어로 할 필요가 얼마나 적은 작업에 감사 할 수 있음을 추가합니다. 그리고 줄 희망의 감사 비용 이 높은 수준의 언어로 작업에 참여.)


12
프랭크 : 머리에 못을 박았다. 컴퓨터가 어떻게 작동하는지, 메모리 관리 및 할당을 이해하고 더 높은 수준의 언어를 더 잘 이해할 수 있다는 생각은 C를 배우는 이유입니다. UDP를 통한 기본 TCP 계층 구현과 같은 클래스 프로젝트를 구현하기 위해 C를 배워야했습니다. .
Chris

12
나는 이것에 동의하지만 : C는 당신에게 잔디 뿌리에 조금만 더 가까이 다가 가지만 땅에 닿지 않습니다. 좋아, 메모리 레이아웃이라는 것이 있습니다. 그러나 그것은 물리적으로 무엇을 의미합니까? 전자 장치를 이해하지 못하면 컴퓨터의 작동 방식을 알고 있습니까? 양자 역학? 등등. 전 세계에 C를 통한 고급 언어부터 양자 역학에 이르기까지 전체 먹이 사슬을 깊이 이해하는 단일 한 마음이 있는지 확실하지 않습니다.
Joonas Pulakka

14
내 질문은 컴퓨터가 내부에서 어떻게 작동하는지 알면 어떻게 혜택을 얻을 수 있습니까? 무엇을 얻고 있습니까? 당신이 지금 가지고있는 것에 대한 감사는 C와 같은 매우 낮은 수준의 언어를 배우는 좋은 이유가 아닙니다. 내가 지금 가지고있는 것에 대해 감사하기 위해 포트란을 배워야한다는 말과 같습니다
TheLQ

18
@TheLQ 저는 말문이 없습니다. 컴퓨터가 내부적으로 어떻게 작동하는지 알면 어떤 이점이 있습니까? 당신은 당신이 무엇을하고 있는지, 당신이 얻고있는 것에 대해 더 명확하게 이해하고 있습니다. 오히려, 당신은 실제로 기계에서 무엇을하고 있는지 배우고 있습니다.
Frank Shearar

15
나는 이것이 가장 좋아하는 대답 인 것처럼 이것을 이것을 올바른 것으로 표시 할 것입니다. 즉, "응용 프로그램의 다음 멋진 기능을 개발하는 데 실제로 도움이되지 않기 때문에 기본 수준에서"컴퓨터 작동 방식 "을 실제로 신경 쓰지 않습니다. 차를 운전하는 것과 같습니다. 나는 매우 능숙하지만 브레이크 유체 압력이 어떻게 작동하는지 덜 신경 쓸 수 있습니다. 브레이크를 밟으면 멈 춥니 다. 또한, 5 년 동안 처음으로 말을 타고 가야한다면 차를 더 많이 운전 해 주셔서 감사합니다. 그렇다고해서 버기보다는 차가 얼마나 좋은지 가정 할 수 없다는 의미는 아닙니다.
Stephen

72

나는 여기에 어떤 대답도 실제로 OP가 찾고있는 것이라고 생각하지 않으므로 내 의견을 던질 것입니다.

봐봐, 난 비공식적 인 C snob입니다. 내 태도는 C를 모른다면 어느 정도 프로그래머로서 무엇을하고 있는지 전혀 모른다는 것입니다. 그래서 저는 여러분이 여기서 말하는 일종의 "편견"사람이라고 생각합니다.

그러나 실제로 프로그래머로서하고있는 일 을 실제로 알고 있는지의 여부 가 반드시 고급 도구를 사용하여 정말 훌륭하고 유용한 소프트웨어를 개발하지 못하게하는 것은 아닙니다. 내 말은, 스택 오버 플로우의 제작자 인 Jeff Atwood는 분명히 C조차 모르지만 스택 오버 플로우는 꽤 좋은 웹 애플리케이션이라고 말할 것입니다.

C (또는 C ++ 또는 어셈블리)를 배우기로 결정했는지 여부는 원하는 프로그래머 유형에 따라 다릅니다. 멋진 웹 앱이나 비즈니스 앱을 개발하고 싶다면 C를 배울 필요가 없습니다.하지만 실제로 수행해야 할 일을 뛰어 넘고 싶다면- 멋진 상태의 프로젝트를 진행 하려는 경우 그렇다면 컴퓨터가 어떻게 작동하는지 실제로 이해 하려면 프로그래머로서 자신을 진지하게 받아 들여야 합니다. C는 본질적으로 OS 링구아 프랜차이자 Linux Linux에서 대부분의 Java VM, Python 및 Ruby 인터프리터, SQL 데이터베이스, 웹 서버 및 거의 모든 장치 드라이버에 이르기까지 거의 모든 기능을 제공하는 언어이므로 언어에 대한 이해는 먼 길을 간다.

C (또는 C ++)를 아는 것은 수백만 (또는 수억)의 사람들에게 영향을 미치는 대규모 오픈 소스 프로젝트에 기여할 수있는 큰 기회를 열어줍니다. Python 인터프리터 또는 Chromium 웹 브라우저를 개선하기 위해 노력하고 싶습니까? 글쎄, 첫 번째 C와 후자 C ++을 알아야합니다.

그렇기 때문에 C를 라틴과 같은 죽은 자연 언어 나 말과 마차와 같은 구식 기술과 비교하는 것은 완전히 잘못된 이유입니다. 21 세기 소프트웨어 인프라의 대부분은 C 코드로 구동되므로 C는 오늘날에도 그와 관련이 있습니다.

따라서 C를 배워야하는지 여부는 실제로 프로그래머로서의 경력에서 원하는 것에 달려 있습니다.


5
당신은 멍청한 소리 하지 않습니다 . 아마 조금 :)
Stephen

7
훌륭한 답변입니다. 나는 C와 C ++를 배우지 않고 10 년 동안 성공적으로 프로그래밍했으며, 배우지 않고 나머지 경력을 쌓을 수있었습니다. 그러나 작년에 배운 이래로 C ++뿐만 아니라 다른 언어로도 더 나은 소프트웨어를 작성했습니다 .
John M Gant


3
C를 라틴어와 비교하는 것이 왜 "완전히 잘못"입니까? 나는 그것이 훌륭한 비유라고 생각합니다. 라틴어는 우리 주변 어디에나 있습니다. 영어 어휘의 58 %가 라틴어의 영향을받습니다 (직접 또는 다른 로맨스 언어를 통해). 라틴어는 또한 우리 문화를 이해하는 열쇠를 가지고 있습니다. 법, 민주주의, 종교, 인프라, 도시 계획 및 기타 여러 영역은 로마 제국으로 거슬러 올라갑니다. 라틴어를 무시할 수있는 것과 같은 방식으로 C를 무시하도록 선택할 수 있지만 피할 수는 없습니다. "라틴어와 그리스어는 죽은 언어가 아닙니다. (JW McKail)
Anders Sjöqvist

2
@ AndersSjöqvist, 그것은 현대 언어의 발달에 큰 영향을 미쳤음에도 불구하고 더 이상 라틴어를 말하는 사람이 없기 때문에 잘못되었을 것입니다. C 적극적 반면 사용 및 사용중인 모든 곳에서 거의 모든 OS, VM, 데이터베이스 또는 인터프리터 -. 라틴어는 더 비슷합니다. 시뮬 라 -살아있는 언어에 크게 영향을 미쳤지 만 학계 밖에서는 사용되지 않는 대부분 죽은 언어입니다.
Charles Salvia

12

실용적인 경험 규칙은 일반적으로 작업하는 것보다 최소한 하나의 추상화 수준을 이해해야한다는 것입니다. PHP 또는 JavaScript 인터프리터는 실제로 C 또는 C ++로 구현 될 수 있습니다. 결국 인터프리터의 버그 나 C 런타임 오류가 발생합니다. C를 이해하지 못한다면 버그 보고서를 관리자에게 보내서 버그를 재현하고 관리하고 엄지 손가락을 돌리는 것으로 제한해야합니다. C를 알고 있다면 문제의 위치와 문제를 정확하게 알려줄 수 있습니다.

이것은 또한 C / C ++에서 작업하는 경우 최소한 플랫폼에서 어셈블리를 읽을 수 있어야 함을 의미합니다.

필요할 때 C를 배우는 것에 관해서 : 내 관찰에 따르면 대부분의 프로그래머는 필요에 따라 Perl / Python / Javascript를 배울 수 있지만 어셈블러 / C / Lisp는 더 많은 시간이 필요한 것으로 보이므로 적어도 일부 기본 사항을 배우는 것이 좋습니다 발생합니다.


9
좋아, "C / C ++"와 함께 살 수 있습니다 (언어 변호사가 저주받습니다). 그리고 "Perl / Python / Javascript"는 완벽하게 합리적입니다. 그러나 하나님의 사랑을 위해 왜 "어셈블러 / C / 리스프"인가? "애플 / 오렌지 / 바락 오바마"라고 말하는 것과 같습니다. 이 세 언어는 서로 관련이 없습니다.
Jason Baker

@Jason, 내가 제안한 유일한 공통점은 대부분의 사람들이 삼중 언어의 언어가 즉석에서 찾기가 더 어렵다는 것을 알게 되었기 때문에 즉시 사용하기 전에 언어와 함께 시간을 보내는 것이 가치가있을 수 있다는 것입니다. 포인터 산술 및 함수형 프로그래밍은 사람들이 이해하기 전에 더 오래 응시해야하는 것 외에는 공통점이 많지 않습니다.
Charles E. Grant

더 동의 할 수 없었습니다. 다른 방법으로, 더 높은 수준의 추상화로, 최소한 일부 프로그래밍을 수행 할 수있는 "사무실 IT 담당자 / gal"은 일반적으로 할 수없는 것보다 낫습니다.
Emmet

7

난 당신이 C를 배울 필요가 동의하지 않는 첫 번째 ,하지만 난 할 당신이 C를 배워야한다고 생각 결국 . 모든 추상화는 누출되어 있으며 C를 이해하면 멋진 고급 추상화를 사용할 때 실제로 일어나는 일을 더 쉽게 이해할 수 있습니다. 즉, 나는 모든 심각한 프로그래머가 결국 같은 이유로 적어도 어셈블러를 읽는 법을 배워야한다고 생각합니다.

이러한 저수준 개념을 배우면 고수준의 물건에 대해 추론 할 수있는 놀라운 능력을 얻게됩니다. 예를 들어, C ++ 및 D에서 가상 함수에 대한 기본 인수는 동적 (런타임) 유형이 아니라 객체의 정적 (컴파일 시간) 유형에 의해 결정됩니다. vtable과 호출 규칙이 작동하는 방식과 가상 함수를 반대 방식으로 구현하는 것이 매우 어려운 이유를 이해하지 않으면 의미가 없습니다.


2
아마도 어셈블리 언어를 읽는 법을 배우십시오. 문제는 내가 사용하는 프로세서 제품군이 10 개 이상이며 매우 다양한 변형을 모두 배우는 것이 혼란과 혼돈의 레시피라는 것입니다. AMD SHARC를 Atmel AVR32 및 TI MSP430과 비교해보십시오.
uɐɪ

@Ian : 그렇습니다. 가장 많이 개발 한 아치의 어셈블리 언어를 배우는 것이 이상적입니다. 대부분의 사람들은 이것이 x86 또는 ARM 일 것이라고 생각합니다.
dsimcha

3
"모든 진지한 프로그래머는 결국 어셈블러를 읽는 법을 배워야합니다"이 질문으로 시작한 것은 이와 같은 의견입니다. 당신은 단순히 편견이 있다고 생각합니다. 그래도 유출 추상화에 대해 말한 것이 좋습니다. 말이 되네요 다른 한편으로, 이러한 것들이 나의 경기장에서 "실제로"큰 차이를 만들지 않습니다. 나는 여전히 높은 수준의 추상화를 사용하고 있습니다.
Stephen

1
@Stephen, 당신은 어셈블러 언어를 작성해야합니다 .8 비트 CPU는 어렵지 않으며 6502 (C64와 같은)와 Z80 (CP / M 비즈니스 머신과 같은) 모두에서 동일한 작은 것을 구현하려고 시도하는 것은 실제로 매우 교육적입니다. 매우 기본적인 디자인 차이 (인덱스 페이지와 레지스터)로 인한 경험.

명백하게 허위 All abstractions are leaky진술 에도 불구하고 +1 .
Thomas Eding

7

편견은 현상 유지 중 하나입니다. 옛날 (1980 년대 및 그 이전) C / C ++는 성능 응용 프로그램의 요구 사항이었습니다. 그것은 바뀌었지만 선임 개발자는 일반적으로 그 오래된 배경에서 왔으며 그 맥락에서 사물을 봅니다.

실제 개발에는 다른 언어 사용됩니다. C #은 Java와 마찬가지로 널리 사용되는 반면, PHP와 Python은 내부 프로젝트에서 인기가 있으며 오픈을 선택할 경우 해당 분야에서 최소한 기본 지식을 가진 사람을 보유하는 것이 항상 유용합니다 예를 들어, 버그 추적 시스템을위한 소스 PHP 프로젝트. 그러나 작업 사양은 여전히 ​​25 년 전에 작성된 표준 템플릿에서 나온 것으로 보입니다.


6
"직무 사양은 여전히 ​​25 년 전에 작성된 표준 템플릿에서 나온 것 같습니다." 당신은 더 정확할 수 없습니다.
Stephen

축하합니다, 존!
Mark C

6

필수 Joel 블로그 게시물을 게시하는 것이 싫지만 여기에 동의합니다 . C는 프로그래밍의 언어입니다. 어떻게 든 인터페이스 할 수없는 고급 언어는 생각할 수 없습니다. 이 때문에 C는 여전히 시스템 프로그래밍 유형에 널리 사용됩니다. C가 없으면 OS 수준의 일부와 인터페이스 할 수 없습니다.

게다가, 당신의 고급 언어가 충분히 빠르지 않을 때 무엇을 하시겠습니까? Ruby, Python 또는 PHP와 같이 동적으로 유형이 높은 고급 언어를 사용하는 경우 C 작성 방법을 아는 것이 특히 중요합니다. 그러나 Java 및 C # 프로그래머도 때때로 C로 드롭 다운해야합니다.


lol. 링크 된 칼럼에서 Joels의 조언 : "여러분은 내가 여기서 말하는 것을 무시하고 다른 학생들이 데이트를 할 수있는 온라인 소프트웨어를 만드는 것이 좋습니다."
Stephen

3
@Stephen : 사람들이 당신을 정말로 알아 차리게하려면, 배치하거나 지불하도록하십시오.
Fred Nurk

@Fred 위대한 조언, lol.
Stephen

6

대단한 슬러그 페스트! (그들이 말한 것처럼 : 이것은 개인 싸움입니까, 아니면 누구나 참여할 수 있습니까?)

나는 교수였으며, (심지어 시행 착오를 거친 후) 발견 한 것은 기본 수준에서 컴퓨터가하는 일을 이해했다면 복잡한 프로그래밍 개념을 통해 학생들을 이끌어가는 것이 훨씬 쉽다는 것입니다. 모든 세부 사항이 아니라 메모리, 명령 등의 기본 원칙이 있습니다. C에 대해 내가 좋아하는 것은 기계에 가깝다는 것입니다.

그것은 다른 교사들이 같은 장소에 왔다는 것은 아닙니다. 그들은 고급 언어 (BASIC :-)로 시작하여 명백한 악영향없이 거기에서 나갔습니다.

결론은, 스티븐. 나는 그렇게 생각하지 않을 것이지만, 나는 전에 틀렸다.


4

나는 이것이 진보라고 생각한다.

20 년 전, 기존의 지혜는 당신이 내가 VAX 매크로 사용하여 대학에서 어셈블러 수업을했던 이유입니다 (C와 같은 높은 수준의 언어에서 얻고 있었는지 이해하기 위해 어셈블러를 배울 수 있다고이었다 생각 이 얼마나 유용 졸업식으로 밝혀졌습니다).

C는 배우기가 다소 어렵고 추상화가 거의 제공 되지 않으므로 (포인터 및 바이트 스트림이 거의 없음 ) 배우면 어떻게 든 더 나은 프로그래머가되거나 하드웨어에서 어떻게 작동하는지에 대한 통찰력을 얻을 수 있다는 미신이 있습니다. 수평.

이것은 (필수) 사실이 아닙니다. 표준 C는 다른 3GL (Pascal, Fortran 등)보다 금속에 더 가까이 가지 않습니다. 일부 C 구현 은 일부 영역에 더 많이 액세스 할 수있는 후크를 제공 할 수 있지만 일반적으로 알몸 포인터는 거의 가깝습니다. 예를 들어 레지스터 나 상태 어에 직접 액세스 할 수 없습니다.

결국, 그것은 모두 opcode 및 주소 지정 모드로 귀결 됩니다. 따라서 하위 수준에서 작동하는 방식에 실제로 관심 이 있다면 C보다 어셈블러를 배우는 것이 더 좋습니다.

C를 배우는 것만으로는 (필요하게) 더 나은 프로그래머가 될 수 없습니다. 그러나 실제 문자열 유형과 표준화 된 컨테이너 라이브러리에 대한 감사를 확실히 줄 것입니다.


"감사"는 그것을 넣는 방법 중 하나 인 것 같습니다. 고등학교 프로그램 수업에서 주로 "이 기능을 사용해야합니다. LOLOMGCHAR *를 WTFBBQCHAR *로 어떻게 변환합니까?"
Katana314

나는 C가 배우기 쉽다고 생각한다. 적어도 Kernighan & Ritchie를 읽는 것이 나에게 적합했습니다.
robert bristow-johnson

2

언어는 도구입니다. 웹 페이지 등을 작성 해야하는 경우 플라스틱 모델 키트 만 만들면 날카로운 칼과 접착제 만 필요하다는 것과 같은 방식으로 C를 배우지 않고도 벗어날 수 있다고 확신합니다. 스패너는 일반적으로 필요하지 않습니다.

메모리 리소스가 매우 제한된 임베디드 시스템 용 코드를 작성합니다 (최근에 한 가장 큰 용량은 16kbyte이며 거대했습니다).이 시장에서 C 또는 어셈블러는 유일한 옵션이며 솜털 같은 고급 언어는 작동하지 않습니다.


1
훌륭합니다 ... 그러나 모든 사람이 그렇게하는 것은 아닙니다. 임베디드 시스템을 위해 글을 쓰지 않는 사람들 은 최소한 임베디드 시스템 포인트의 맥락에서 모델 비유를 취하는 것만으로 진지한 개발을하고 있지 않은 것 같습니다. 이는 사실이 아니며 C를 건드리지 않고 대규모 생산 응용 프로그램을 작성할 수 있습니다.
JohnL

물론 C 근처에 가지 않고도 대규모 프로덕션 응용 프로그램을 작성할 수 있습니다. C를 사용하기 전에 10 년 동안 코드를 작성했습니다. PL / M, Pascal, ADA 및 어셈블러를 사용했습니다. 이것들은 기계의 기본 역학을 배우는 데 C만큼이나 좋았으며 종종 오류없는 코드를 생성하는 데 더 좋습니다.
uɐɪ

위-당신의 대답은 당신이 그렇게 생각했다는 인상을주지 않았지만, 그래서 내 대답은 ...
JohnL

임베디드 사용을 대상으로하는 Java 엔진에 대한 경험이 있습니까?

2

내 경험상 C / C ++는 좋은 프로그래머를 VB6 코더에서 분리하는 좋은 버퍼였습니다. 5 년의 이상한 C / C ++ 작업을 수행 한 후 VB6에서 작업을 수행했습니다. 나는 코더의 품질 (또는 그 부족)에 놀랐습니다. 그들은 언어의 장, 디자인 또는 성능에 거의 관심이 없었습니다. 불행히도 회사가 .Net으로 옮길 때 C / C ++ 코더와 .Net 코더는 동일한 도구를 사용했습니다. VB 코더는 더 나쁜 VB.Net 코더였습니다. 모든 개발이 ASP.NET으로 진행되면 상황이 악화되었습니다. 갑자기 컨트롤을 끌어다 놓을 수있는 사람은 누구나 프로그래머였습니다.

그러나 취업 시장에서는 하드 코어 코더 (예 : C / C ++)와 관광객을 구분할 것이 많지 않았습니다.

따라서 이력서에 C 또는 C ++를 사용하면 riff-raff와 다른 점이 있습니다.


2

제안 적으로 질문 : C를 배울 필요가 없다는 확인을 요청하고 있습니까? 순수한 C 를 배우면 (필수 C ++은 아님) 컴퓨터의 실행 모델을 완전히 이해하게됩니다. 특히 메모리와 할당에 대해. 이 내용은 또한 고급 언어로 프로그래밍하는 사람들에게 중요합니다.

PHP 프로그래머에게는 주어진 머신에서 코드가 실행되는 방식이 덜 투명합니다. 네트워크 전송은 응용 프로그램의 병목 현상이기 때문에 PHP 프로그래머에게는 중요하지 않을 수 있습니다.

일반 PHP / Python / C #에는 언어와 CPU 사이에 많은 추상화 계층이 있습니다. 이 레이어는 너무 두껍기 때문에 훑어 볼 수 없습니다. C를 배우면 CPU와 운영 체제 사이에 얇은 시트가 있습니다. 그래도 프로그래밍이 쉬워지지는 않으며 더 나아지지 않을 수도 있습니다. 그러나 실제로 CPU 작동 방식을 배울 수 있습니다. "중간"C를 알게되면 실제로 그 지식을 상위 수준의 언어에 연결하기 시작할 수 있습니다. 이것이 바로 얻을 수있는 즉각적인 혜택입니다.

제 생각에는 프로그래머는 항상 다른 프로그래밍 개념을 배우는 데 시간을 보내야합니다. C 는 물론 Clojure, Haskell, Prolog와 같은 더 높은 수준의 프로그래밍 언어도 살펴보아야합니다.

이것에서 마스터가 될 필요는 없습니다. 그들은 단지 프로그래밍 언어의 "레벨"이 이진이 아니라 많은 레벨이 있다는 교훈을 가르쳐 줄 것입니다. 위에서 아래로 (어셈블러) 알아보십시오. 더 나은 프로그래머가 될 것입니다.


2

언어로 작성된 매우 중요한 코드가 많기 때문에 C로 작성된 코드를 읽을 수있는 충분한 C를 알아야합니다. 그것은 어쨌든 언어로 실제로 코딩하지 않고도 주제에 대한 철저한 매뉴얼 (Kochan의 "프로그래밍 프로그래밍"을 사용했습니다)을 잘 수행하지 못하도록하는 모든 것입니다. 언어를 광범위하게 사용해야하는 상황에 처하게된다면, 기초를 세우는 데 도움이 될 것입니다. 기계가 당신에게 불완전한 블랙 박스라면 Duntemanns Assembly book과 같은 것을 공부하고 싶을 것입니다. Petzold의 "Code"도 추천합니다.

C의 기본 능력과 기본 기계에 대한 기본 지식을 제외하고는 SICP, TCP / IP Illustrated 또는 콘크리트 수학, 알고리즘 또는 데이터 구조 관련 서적과 같은 실제 학습에 시간을 투자하는 것이 가장 좋습니다. . 진짜 물건.

PHP로 코딩하는 동안 C를 공부하는 데 많은 시간을 소비하는 것은 단순히 기회 비용의 가치가 없습니다. 더 도움이되는 것들이 있습니다. C는 공부와 사용을 통해서만 잘 배울 수있는 언어 일 뿐이지 만 필요할 때 선택할 수 있습니다.

힘들게 땀을 흘리십시오.


1

C는 다른 언어를 쓰는 데 사용되는 언어입니다. 그것은 당신이 원하는대로 CPU 및 다른 하드웨어와 친밀한 얻을 수 있습니다.

C를 모른다면 다른 언어가 어떻게 결과를 달성하는지 알 수 없습니다.

물론 추상화는 중요한 개념이며, 모든 사람이 자신의 선택 프레임 워크가 약속 한 결과를 달성하는 방법을 알아야 할 필요는 없습니다. 좋은 코드를 작성하기 위해 C를 작성하거나 실제로 여러 상속을 사용할 때 vtables에 어떤 일이 발생하는지 생각할 필요가 없습니다.

이제, 4 단 엔진이 어떻게 작동하는지 또는 실제로 스틱 시프트 (수동 기어 박스)를 사용하지 않고도 자동차를 운전할 수 있습니다.

그러나, 후드 아래에서 무슨 일이 일어나고 있는지 이해한다면, 때때로 그 지식이없는 누군가가 복제하기 위해 고군분투하는 뛰어난 결과를 얻을 수있을 것입니다.


1

C (및 C ++)는 수영하는 바다입니다. 코드를 실행할 OS는 C (및 C ++)로 코딩되어있을 것입니다. 따라서 OS 서비스에 액세스하는 기본 API는 C입니다.

아래에 무엇이 있는지 모르고 할 수 있다면 C를 알 필요는 없습니다. 그러나 대부분의 프로그래머는 자신의 삶에서 언젠가는 더 낮은 레벨로 뛰어들 필요가 있습니다.

또한 개발 영역의 전문화를 기반으로합니다. 예를 들어 HTML, Javascript 및 일부 서버 측 스크립팅을 작성하는 웹 개발자는 C에 대해 전혀 알 필요가 없지만 분산 시스템 또는 게임 개발자는 그렇지 않습니다.

당신의 직업에 매우 기본적인 것을 배우는 데 몇 주를 소비하는 것이 결코 아프지 않습니다.


1

C에는 많은 장점이 있습니다.

  1. C는 저수준 언어이므로 c를 사용하여 커널 및 드라이버를 개발할 수 있습니다.
  2. C는 가장 빠른 언어입니다 .c에 의해 많은 전원 소프트웨어가 개발되었습니다. 예 : memcached, redis, nginx, apache, mysql 등
  3. C는 크로스 플랫폼 언어입니다. c가 개발 한 프로그램은 모든 플랫폼에서 실행될 수 있습니다. 다른 크로스 플랫폼 언어는이를 수행 할 수 없습니다. Java, Python, PHP 등은 iOS 플랫폼에서 실행할 수 없습니다.
  4. C ++는 많은 임베디드 시스템에서 실행할 수 없습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.