.NET 개발자 *는 실제로 * 낮은 수준의 노출에 대해 C를 배우는 데 시간을 소비해야합니까?

StackOverflow https://stackoverflow.com/questions/125791

  •  02-07-2019
  •  | 
  •  

문제

Joel Spolsky와 Jeff Atwood는 프로그래머가 업계와 배송 플랫폼에 관계없이 프로그래머가 C를 배워야하는지 여부에 대한 팟 캐스트에서 의견 불일치를 시작했을 때, 오늘날 특정 그룹 사이에서 여전히 분노 할 수있는 개발자 커뮤니티 내에서 폭발적인 토론을 시작했습니다. 나는 그 문제에 대한 많은 프로그래머 블로거들로부터 많은 구절을 읽고 있습니다. 양쪽의 논쟁은 확실히 무게를 지니고 있습니다. 내가 찾지 못한 것은 두 가지의 관점에서 독특하게 각진하는 관점입니다. 개발자는 .NET 프레임 워크에만 집중했습니다. 실제로 그들 모두는 일반 프로그래머 관점에 대해 언급하고있었습니다.

내가 무엇을하려고합니까? 그러한 높은 수준의 개발자가 대부분의 시간을 지출 할 것이라는 Jeff Atwood의 의견을 상기 비즈니스/도메인, 이러한 도메인 요구 사항을 달성하기 위해 기술을 배우는 데 필요한 모든 것 외에. 내 작업 경험에서 그것은 많은 사람들의 직장 생활에 대한 매우 정확한 설명입니다. 이제 .NET 개발자가 "추가 커리큘럼"학습 시간을 포크 할 수 있다고 가정합니다. 저것 c?

기록을 위해, 나는 학교에서 직접 C를 배웠으며, 지지자들이 추론하는 것을 절대적으로 이해하고 이해할 수 있습니다. 그러나, 사물을 생각할 때, 나는 개인적으로 .NET 개발자가 C에 곧바로 뛰어 들어서는 안된다고 생각합니다. 왜냐하면 더 많은 개발자가 원하는 것은 배우는 데 시간이 걸릴 것입니다. MSIL 그리고 CLR.

어쩌면 나는 비정상적인 동료들에 갇혀 있을지 모르겠지만, 많은 사람들이 나를 지키지 않는 것 같습니다. 의식적인 인식 C# 또는 VB 코드가 JIT가 들어 오기 전에 먼저 IL에서 컴파일된다. 대부분은 IL을 알지 못하고 방법에 관심이 없습니다. 바로 그거죠 CLR은 그들이 쓴 코드를 처리합니다. Jeffrey Richter의 독서 C#을 통해 CLR 많은 지역에서 나를 위해 상당히 충격적이었습니다. 동료들이 그것을 "너무 낮은 수준"으로 기각 했음에도 불구하고 그것을 읽은 것이 기쁩니다. 나는 IL의 전문가는 아니지만 기본 사항에 대한 지식을 가지고 IL의 스택 동작에 이미 익숙했기 때문에 그의 텍스트를 더 쉽게 따르는 것을 발견했습니다. 나는 특정 코드를 작성할 때 IL이 어떻게 나오는지 살펴보기 위해 어셈블리를 분해하는 것을 발견했습니다.

직접 레이어라는 것을 알고 있기 때문에 CLR과 MSIL을 배웁니다. 나보다 아래의. 내 자신의 작업 층을 수행 할 수있는 레이어. C는 실제로 더 아래로 내려갑니다. 우리의 "현실"에 더 가까운 것은 CLR과 MSIL입니다. 그렇기 때문에 나는 다른 사람들이 그 계층을 탐구하는 충분한 사람들을 보지 못하기 때문에 다른 사람들에게 그 사람을 가라고 추천 할 것입니다. 아니면 팀이 이미 MSIL과 대화하고 있습니까?

도움이 되었습니까?

해결책

나는 이미 C를 알고 있으며, 그로 인해 .NET 기지 라이브러리에 아직없는 많은 것들이있는 1.1 일 동안 저를 도와 주었고 플랫폼 SDK에서 무언가를 호출해야합니다.

내 생각은 항상 우리가 아직 모르는 것을 배우기위한 시간을 할당해야한다는 것입니다. 귀하의 질문에 답하기 위해, 나는 당신이 C를 배우는 것이 필수적이라고 생각하지 않지만, 여분의 시간이 있다면 C는 배우기에 좋은 언어이며 다른 언어만큼 유효합니다.

다른 팁

물론 당신은해야합니다. 지나치게 전문적이고 한마음이되는 가장 큰 방법은 (그리고 이에 따라 마케팅 가능한 기술이 제한되어 있음) 단일 유형의 언어로만 일하고 "현재의 과제와 관련이 없다"고 다른 모든 것을 피하는 것입니다.

모든 프로그래머는 현대식 Jit'd Oo 언어 (C#/Java), 하위 수준의 단순한 언어 (C, Fortran 등), 매우 높은 수준의 해석 언어 (Python, Ruby 등) 및 A에 대한 경험이 있어야합니다. 기능 언어 (체계, LISP, Haskell 등). 매일 모든 것을 사용하지 않더라도 그러한 지식 보조금이 매우 유용하다는 사고 과정의 확대가 넓어집니다.

사실, C는 체인 아래입니다. MSIL을 아는 것은 개발자가 앱을 더 잘 최적화하는 방법을 이해하는 데 도움이 될 수 있습니다. C 또는 MSIL 학습에 관해서는 왜 둘 다하지 않습니까? :)

.NET 개발자는 CLR에 대해 알아야합니다. 그러나 그들은 또한 C를 배워야한다.

더 높은 수준의 개념에 대해 배우는 데 시간을 보내는 데 시간이 지남에 따라 유익하지만 저수준을 희생하여 높은 수준에 집중하면 화이트 보드에 상자와 선을 그릴 수있는 "건축가"중 하나가 될 위험이 있습니다. 그러나 실제 코드를 쓸 수없는 사람.

C를 배우면 배우는 것은 나머지 경력에 유용 할 것입니다. CLR에 대해 배운 것은 Microsoft가 플랫폼을 변경함에 따라 쓸모 없게됩니다.

나는 편집 된 언어와 어셈블리를 배우는 것이 ~ 해야 하다. 그 없이는 언어와 스택 사이를 전환하는 데 필요한 다양성을 얻지 못할 것입니다.

보다 구체적으로 - 좋은/위대한 프로그래머가 직접적인 경험으로 이러한 것들을 알아야한다고 생각합니다.

  • 레지스터와 변수의 차이점은 무엇입니까?
  • DMA는 무엇입니까?
  • 화면에 픽셀이 어떻게 낮은 수준으로 표시됩니까?
  • 인터럽트는 무엇입니까?
  • ...

이런 것들을 아는 것은 시스템 작업의 차이입니다. 이해하다 그리고 당신이 아는 모든 사람들에게 마법으로 작동하는 시스템. :)

의견을 다루기 위해

결국 두 종류의 개발자가 있습니다.

  • 하나 또는 두 언어로 10 가지 방법으로 한 가지 일을 할 수있는 사람들
  • 10 개 언어로 한두 가지 방법으로 한 가지 일을 할 수있는 사람들

두 번째 그룹은 전반적으로 더 나은 개발자라고 생각합니다.

나는 이것을 다음과 같이 생각한다 :

  1. 프로그래머는 실제로해야합니다 일하고 있는 최고 수준의 언어로 적절합니다. 적절한 것은 시나리오에 따라 다릅니다. 장치 드라이버 또는 임베디드 시스템은 CRUD 데스크탑 앱 또는 웹 페이지와 다른 클래스에 있습니다.
  2. 당신은 당신의 프로그래머들이 그들이 일하는 언어로 가능한 많은 연습을하기를 원합니다.
  3. 대부분의 프로그래머는 일반적인 데스크탑 및 웹 앱에서 작업하게되므로 학생들이 학교에서 가능한 한 빨리 고급 언어로 전환 할 수 있도록 프로그래밍을 원합니다.
  4. 그러나 고급 언어는 포인터와 같은 몇 가지 기본 프로그래밍 문제를 난독 화합니다. 우리가 학생들에게 적합한 것을 사용하는 원칙을 적용한다면, 이러한 고급 언어는 첫해 학생들에게 적합하지 않을 수 있습니다. 그것은 Java, .net, Python 및 많은 다른 사람들을 버립니다.
  5. 따라서 학생들은 기본 개념을 다루기 위해 학교의 첫해 또는 2 년 또는 2 년 동안 C를 사용해야합니다. 일찍 더 어려운 프로그램을 활성화합니다.

C#을 서면으로 충분히 발전하려면 언어를 적절하게 배우지 않더라도 C의 개념을 이해해야합니다.

더 일반적으로, 당신이 진지하다면 어느 기술, 당신은 1 차 작업 수준 아래에서 적어도 하나의 추상화 수준이 어떻게 진행되는지 알아야합니다.

  • jQuery의 코딩은 JavaScript의 이해와 짝을 이루어야합니다.
  • 회로를 설계하려면 물리학을 아는 것이 필요합니다
  • 좋은 농구 선수는 근육, 뼈 및 영양에 대해 배울 것입니다.
  • 바이올리니스트는 로진, 마찰, 활 머리카락, 끈 및 목재 건조의 상호 작용에 대해 배울 것입니다.

나는 매년 새로운 언어를 배우고 싶습니다. 반드시 그것을 마스터해야 할 필요는 없지만 내 뇌가 다른 방식으로 생각하도록 강요합니다.

나는 C를 배우는 것이 조립에서 코딩의 고통없이 낮은 수준의 개념에 대해 배우는 좋은 언어라고 생각합니다.

그러나 나는 Haskell, Python, 심지어 논란의 여지가있는 언어 (정확히 언어가 아니지만 내 표류를 잡는가?)와 같은 언어로부터의 학습 수업은 C에서 수집하는 교훈만큼 중요하다고 생각합니다.

그래서 나는 당신의 지역이 당신의 지역이라면 직장에서 CLR과 MSIL에 대해 배우고 여가 시간에 매번 다른 언어를 집어 들으십시오. 그것이 올해 C 인 경우, 당신에게 좋고 포인터와 놀이를 즐기십시오;)

나는 그들이 왜 그런지에 대한 이유가 없다. Java 및 C#과 같은 언어는 낮은 수준의 세부 사항에 대해 걱정할 필요가 없도록 설계되었습니다. Winforms 개발자가 Win32 API를 배우는 데 시간을 소비 해야하는지 묻는 것과 동일합니다.

배우는 것은 아프지 않지만, 낮은 수준의 기술 세부 사항을 배울 필요가 없다면, 당신은 당신이 익숙한 언어와 플랫폼을 배우는 데 더 많은 시간을 할애함으로써 더 많은 것을 얻을 것입니다.

MSIL을 배우는 것은 나쁜 생각은 아니지만, 다른 .NET 언어이지만 불쾌한 구문이 있습니다. 그러나 그것은 또 다른 레이어 다운이며, 사람들은 모든 레이어에 대해 적어도 모호한 이해를 가져야한다고 생각합니다.

C는 더 좋은 구문을 가진 어셈블리 언어를 좋아하는 C는 상당히 낮은 수준에서 무슨 일이 일어나고 있는지에 대한 아이디어를 얻는 좋은 방법입니다 (일부는 여전히 당신에게 숨겨져 있지만).

다른 한편으로, 나는 모든 사람들이 Haskell이나 LISP와 같은 약간의 것을 알아야한다고 생각합니다.

당신이 자신을 프로그래머라고 생각한다면, 나는 예를 말할 것입니다.

코드를 작성하는 많은 사람들은 스스로 프로그래머를 고려하지 않습니다. 나는 직장에서 하루에 3 시간 동안 .net 앱을 작성하지만 "프로그래머"라는 라벨을 붙이지 않습니다. 나는 프로그래밍과 관련이없는 많은 일을한다.

하루 종일 프로그래밍이나 프로그래밍에 대해 생각하고 전체 경력이 Arround 프로그래밍을 회전하게한다면, 당신은 당신의 물건을 알고 있는지 확인하는 것이 좋습니다. C 학습은 아마도 프로그래밍 기술에 매우 깊이 들어가려면 도움이 될 지식의 기반을 구축하는 데 도움이 될 것입니다.

모든 것을 사용하면 트레이드 오프가 있습니다. 더 많은 언어를 배우고 기술에 전념하는 데 더 많은 시간을 소비할수록 다른 기술을 배우는 데 시간이 줄어 듭니다. 예를 들어 C를 배우거나 프로젝트 관리에 관한 책을 읽는 것이 더 낫습니까? 그것은 당신의 목표에 달려 있습니다. 당신은 최고의 프로그래머 Evar가되고 싶습니까? C. 코드를 작성하고 공예에 헌신하는 데 몇 시간과 시간을 보내십시오. 하루 종일 코딩하는 대신 다른 사람을 관리하고 싶습니까? 프로그래밍에 참여한 시간을 사용하고 소프트 기술을 향상시키는 방법을 찾으십시오.

.NET 개발자가 C를 학습해야합니까? 나는 "반드시 필요하지 않다"고 말하지만 우리는 모든 언어가 문제에 대한 새로운 사고 방식을 가져 오기 때문에 항상 전문적인 Bailiwick 이외의 언어로 뒤섞여 있어야합니다. .NET (그리고 그 이전에는 VB 2-6) 개발자로서의 전문적인 경력 동안 Pascal, LISP, C, C ++, PHP, JavaScript, Ruby 및 Python에서 소규모 프로젝트를 작성했으며 현재 LUA 및 및 현재 LUA 및 펄.

C ++ 이외의 경우, 나는 그들 중 누구에게도 전문가가되지 않기 때문에 이력서에 그 중 어느 것도 나열하지 않습니다. 대신, 나는 .NET 기반 작업에 사용할 수있는 흥미로운 아이디어를 가져옵니다.

C는 실제로 OS에 가까워 질 수 있다는 점에서 흥미 롭습니다. 그러나 이것이 좋은 프로그래머가되기 위해 알아야 할 유일한 수준은 아닙니다.

그만큼 CLR a 가상 기계를 배우는 전부라면 가상 수준에서 무슨 일이 일어나고 있는지 알 수 있습니다.

학습 더 많은 것을 가르쳐 줄 것입니다 물리적 인 메모리 사용이 진행되는 한 머신은 CLR이 아래에 사용하는 것입니다. CLR이 어떻게 작동하는지 배우는 것은 당신에게 가비지 컬렉션에 대한 많은 통찰력을 제공하지 않습니다. 진짜 메모리 관리에 관련된 내용에 감사드립니다.

학습 반면에, 학습보다 .NET의 실행에 대해 조금 더 알려줍니다. . 그래도 어떻게 머신 언어에 대한지도는 여전히 여전히 미스터리가 될 것이므로 캐스팅 유형을위한 것과 같은 일부 고급 옵코드를 아는 것은 그들이 불투명 한 일이 실제로 무슨 일이 일어나고 있는지 이해하는 데 도움이되지 않습니다. 대부분. 학습 그러나 포인터는 그러한 측면 중 일부에서 당신을 깨달을 것입니다.

문제가 C 또는 MSIL을 학습합니까, 아니면 더 근본적인가요? 일반적으로 더 많은 개발자가 어떻게 더 많은 것을 배울 수 있다고 말하고 싶습니다. 컴퓨터, 물리적 또는 가상, 작업. 사람은 상자에 언어와 API를 이해함으로써 상당히 유능한 프로그래머가 될 수 있습니다. 직업을 다음 단계로 끌어 올리려면 개발자가 실제로 전체 스택을 이해해야한다고 생각합니다. 반드시 상세하게는 아니지만 문제를 해결하기에 충분한 일반성.

이러한 기술 중 많은 사람들이 컴파일러와 언어 디자인에 대해 더 많이 배우면서 얻을 수 있습니다. 이 작업을 수행하려면 C (Whoops, Snecty)을 배워야 할 것입니다. 그러나 컴파일러 작문은 C를 배우는 좋은 맥락입니다. Steve Yegge 이것에 대해 이야기합니다 그의 블로그에서, 나는이 시점에서 그와 크게 동의합니다. 대학의 컴파일러 작문 코스는 내가 본 것 중 가장 눈을 뜨는 코스 중 하나였으며 400 레벨 1 대신 200 레벨 코스가 되었으면 좋겠습니다.

이것을 다른 스레드에 게시했지만 여기에 적용됩니다.

나는 당신이 좋은 기초가 필요하다고 생각하지만, 당신이 사용할 것을 배우는 데 대부분의 시간을 바칩니다.

  • 두 개의 숫자를 함께 추가하고 콘솔에 결과를 표시하기에 충분한 어셈블러를 배우십시오. 실제로 컴퓨터에서 일어나는 일에 대해 훨씬 더 잘 이해할 수 있으며 이진/16 진수를 사용하는 이유에 대해 합리적입니다. (이것은 하루에 할 수 있으며 cmd.exe의 디버그).
  • 메모리를 할당하고 포인터를 사용하기에 충분한 C를 배우십시오. 간단한 링크 된 목록 충분하다. (이것은 하루나 이틀 안에 할 수 있습니다).
  • 사용할 언어를 배우는 데 더 많은 시간을 보내십시오. 나는 당신의 관심사가 어떤 언어 (C#, Java, Ruby, Python 등)를 당신에게 조종하게 할 것입니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top