저수준 프로그래밍-그 안에 무엇이 있습니까? [닫은]


32

몇 년 동안 나는 "낮은 수준의"언어로 간주되는 것을 파는 것을 고려해 왔습니다. 나에게 이것은 C와 어셈블리를 의미합니다. 그러나 나는 아직 이것을 할 시간이 없었으며, 그 어느 때도 필요하지 않았습니다.

이제는 필연적 인 필요성이 보이지 않기 때문에 주제를 연구하거나 계획을 영원히 중단 할 특정 시점을 예약해야 할 것 같습니다.

내 위치

지난 4 년 동안 나는 변화 할 수있는 "웹 기술"에 중점을 두 었으며, 변화가 거의없는 응용 프로그램 개발자입니다.

응용 프로그램 개발에서 유용성이 가장 중요하다고 생각합니다. 사용자가 "소비"할 애플리케이션을 작성합니다. 이러한 응용 프로그램이 유용할수록 더 많은 가치를 창출 할 수 있습니다.

유용성을 높이기 위해 다음과 같은 것이 가능하다고 생각합니다.

  • 우수한 디자인 : 신중한 사용자 인터페이스를 통해 액세스 할 수있는 신중한 기능.
  • 정확성 : 최상의 디자인은 올바르게 구현되지 않으면 아무 가치가 없습니다.
  • 유연성 : 애플리케이션 A는 지속적으로 발전해야하므로 사용자는 A가 구현할 수있는 새로운 기능이있는 다른 애플리케이션 B로 전환 할 필요가 없습니다. 동일한 문제를 해결하는 응용 프로그램은 기능이 아니라 철학적으로 달라야합니다.
  • 성능 : 성능은 좋은 사용자 경험에 기여합니다. 응용 프로그램은 이상적으로 항상 응답 성이 뛰어나고 빈도에 따라 작업을 상당히 빠르게 수행합니다. 사용자가 눈에 띄는 지점을 넘어서는 성능 최적화의 가치는 의심의 여지가 있습니다.

저수준 프로그래밍은 성능을 제외하고는 저에게 도움이되지 않을 것이라고 생각합니다. 그러나 성능을 위해 저수준 언어로 전체 앱을 작성하는 것은 나에게 조기 최적화입니다.

내 질문

저수준 프로그래밍은 무엇을 가르쳐 줄 수 있습니까, 다른 언어는 저를 가르쳐주지 않습니까? 응용 프로그램 개발에 거의 사용되지 않는 무언가가 없거나 기술입니까? C와 어셈블리의 가치에 대해서는 의문의 여지가 없습니다. 나는 일상 생활에서 그 세계의 모든 복잡한 부분이 추상화되어 저를 위해 관리되고 있다는 점이 매우 기쁩니다 (주로 C / C ++로 작성된 레이어와 어셈블리 자체). 나는 단지 어떤 개념도 보지 못했고, 그것은 나에게 새로운 것일 수도 있고, 내 머리를 채우는 데 필요한 세부 사항 만. 그게 뭐에요?

내 결론

답변을 주신 모든 분들께 감사드립니다. 나는 아무도 나를 놀라게하지 말라고 말해야하지만, 적어도 지금은 내가 관심을 가질 때까지이 관심 영역을 떨어 뜨릴 것이라고 확신한다.
이해하기 위해 요즘 프로세서에서 오늘날의 CPU에 사용되는 어셈블리를 작성하는 것은 필연적으로 복잡 할뿐만 아니라 C 대응보다 런타임 성능이 저하 될 위험이 있습니다. OOE로 인해 수작업으로 최적화하는 것은 거의 불가능하지만 컴파일러가 자동으로 수행 할 수있는 모든 종류의 최적화를 얻지는 못합니다. 또한 코드는 사용 가능한 명령의 작은 하위 집합을 사용하기 때문에 이식 가능하거나 최적화되었지만 하나의 아키텍처에서만 작동합니다.
C를 작성하는 것은 과거처럼 더 이상 필요하지 않습니다. C로 응용 프로그램을 작성하려면 테스트되고 확립 된 라이브러리와 프레임 워크를 많이 사용하면 문자열 복사 루틴, 정렬 알고리즘 및 대학에서 운동으로 사용되는 다른 종류의 물건을 구현할 필요가 없습니다. 내 코드는 형식 안전 비용으로 더 빠르게 실행됩니다. 나는 정상적인 앱 개발 과정에서 바퀴를 재발견하거나 코어 덤프를보고 디버그하려고하지 않습니다 .D
현재 현재 언어와 통역사를 실험하고 있으므로 게시하고 싶은 것이 있다면, C ++이 트릭을 수행 할 수도 있지만 작업 개념을 C로 포팅했습니다.
다시 한 번, 답변과 통찰력을 주신 모든 분들께 감사드립니다.


6
@ TheLQ : 내 질문은 그것을 사용하는 것이 아니라 내가 배울 수있는 것 입니다.
back2dos


답변:


9

저수준 프로그래밍은 일반 데스크탑 컴퓨터에 즉시 요구되는 사항이없는 경우를위한 것입니다. 속도 병목 현상, 메모리 병목 현상 또는 완전히 다른 것일 수 있으며, 이러한 요구 사항에 따라 수행 할 수있는 작업을 보는 것은 매우 흥미로운 일입니다.

제한이 흥미를 끄는 Haikus 또는 Limericks로 생각하십시오.

오늘날 불가능 해 보이는 것에서 무엇이 가능한지에 대한 아이디어를 제공하기 위해 여기에 가장 큰 해킹 중 하나가 있습니다. 1Kb RAM의 체스! http://users.ox.ac.uk/~uzdm0006/scans/1kchess/


1
난 정말 "제한이 재미있어"가려고 생각합니다. 여기에 언급 된 모든 것 중에서 아마도 이것이 최고 일 것입니다. 학교로 돌아가서 32kB 메모리와 8Mhz CPU로 계산기로 게임을 프로그래밍했습니다. 재밌었지만 지금부터 많은 혜택을 누리지 못했습니다.
back2dos

Downvoter, 왜 언급해야합니까?

29

나는 최근에 이것을 생각하고 있었다. 나는 현재 C # 개발자로 자신을 고려하고 있습니다. 내 경력에 완벽하게 적합합니다.

그러나, 나는 종종 매우 낮은 수준의 것들을 놓치게됩니다 (C에서 어셈블러 또는 장치 드라이버를 수행하여 본질적으로 '손이 더러워집니다'). 나는 단지 프로그래밍을 그리워한다. 나는 내 경력에 큰 도움이 될 것으로 기대하지 않습니다. 장치 드라이버 나 임베디드 시스템이 마음에 들면 도움이 될 수 있습니다.

추상화 된 언어로 더 많은 프로그램을 작성할수록 컴퓨터를 파고 들고 삐걱 거리는 것을 보는 것이 처음으로 컴퓨터에 들어가는 것이 더 그리워집니다. 어셈블러와 C는 파킹에 매우 적합합니다. :)

더 오래된 언어를 사용함으로써, 당신은 거의 모든 것을 스스로해야한다고 생각합니다. C #에서는 다음과 같은 작업을 수행 할 수 있습니다 myArray.SortBy(x=>x.Name). 나는 C에서 그렇게 할 수 없었습니다. 나는 언어가 나를 위해 가장 잘 정렬된다는 것을 인정합니다. C로 작성한다면 대학 모듈 시절로 돌아가서 다른 정렬 및 검색 알고리즘을 수정할 수 있습니다.

따라서 저급 언어는 모두 추상화 된 긴 잊혀진 비트를 수정하는 데 도움이 될 것이라고 생각합니다. 경력을 쌓는 것보다 개인적인 도전이 많습니다.


15
진정한 괴짜 - +1 하드웨어에 대한 파고의 사랑을 표명하고 경련 무엇을보고에 대한
게리 로우

2
원하는 경우 정렬 함수를 C #으로 직접 작성할 수 있습니다. 원하는 경우 라이브러리 함수를 사용하여 C로 정렬 할 수도 있습니다 : gnu.org/s/libc/manual/html_node/Array-Sort-Function.html. 나는 심지어 더 오래된 언어를 사용하여 말할 것입니다. 대부분의 문제는 이미 해결 되었기 때문입니다. 그것은 사람들이 어쨌든 바퀴를 재발견하는 것을 방해하지 않습니다 :
back2dos

15

제 제안은 지적 호기심으로 C를 다루는 것입니다. 가치가 없기 때문에 많은 시간을 투자하지 마십시오.

제안 된 목표 :

  • 기본 데이터 구조 및 알고리즘 에 대한 기억을 상쾌하게하십시오 .
    • 대수와 기하학과 같이 알아두면 좋은 것입니다.
    • C에서 대학 교과서 연습이나 프로그램 퍼즐을 해보십시오.
  • CPU 캐시에서 대양 횡단 네트워크 지연에 이르기까지 메모리 (대역폭) 계층 구조 에 대한 이해도 향상 이것은 모든 수준의 응용 프로그램 개발 기술에 도움이됩니다.
    • 가장 중요하게는, 고수준 코드의 작은 눈에 띄지 않은 재 배열이 극적인 속도 향상을 가져올 수 있는 시나리오에 대해 배우는 것이 좋습니다 .
      • 때로는 메모리 계층 구조와 관련된 저수준 구현에서만 그 이유를 이해할 수 있습니다.
      • 이러한 가능성의 자연적 원인을 이해하지 못하는 것은 고급 개발자가 이러한 종류의 최적화를 이용하는 것이 잘못되었다고 생각 하여 무지 , 두려움 및 결국 거부 로 이어집니다. 실제로는 아무 문제가 없습니다.
  • C / C ++ / Assembly에서 개발 된 저수준 구성 요소를 높은 수준의 시스템 에서 사용할 수 있도록하는 구성 요소 기반 소프트웨어 시스템미학을 평가하십시오 .
    • 미학은 소프트웨어 사용 성과 정확히 동일합니다.
      • 우수한 디자인 (강력하고 사용하기 쉬우 며 신중하게 생각)
      • 단정
      • 유연성 (각각 명확하게 정의 된 목적을 가진 기존 부품의 구성을 통한 확장 및 새로운 동작)
      • 성능 (사용성을 복잡하게하지 않음)
    • 저수준 구성 요소를 직접 디자인하지는 않을 수도 있지만, 이해하면 고급 프로젝트에 사용할 좋은 구성 요소를 평가하고 선택하는 데 도움이됩니다.
  • 마지막으로, 저수준 컴포넌트는 인터페이스를 살펴 보는 것만으로도 무시할 수없는 수준 에서 구현 이 거의 항상 복잡 하다는 점을 이해 하십시오.
    • 낮은 수준은 항상 복잡합니다. 좋은 라이브러리는 그 힘을 줄이지 않고 복잡성을 숨 깁니다.
    • 컴포넌트 개발자가 작성한 "기술 노트"를 읽는 방법을 배우십시오. 이는 컴포넌트를 가장 잘 사용하는 방법에 대한 상위 레벨 컴포넌트 사용자에게 제안합니다.

8

고급 언어가 의존하는 가상 머신뿐만 아니라 머신의 작동 방식을 이해하려면 Assembly가이를 알려줍니다.

신경 쓸 이유가없고 대부분의 프로그래머가 요즘하지 않는다면 걱정하지 마십시오.

그것은 기초를 향상시킬 것이지만 아마도 웹 앱을 향상 시키지는 않을 것입니다


6
C도 거의 작동합니다. 대부분의 C 개념은 기계 언어로 쉽게 번역 할 수 있습니다. C를 배우고 어셈블러를 간단히 살펴보면 몸매가 좋아집니다.
David Thornley

비슷한 답변을 게시하려고했습니다. C는 특히 메모리 관리와 관련하여 기계가 작동하는 방식에 대한 감사를 제공한다고 주장합니다. 또한, 추상 기계의 복잡성이 C. 적어도에 기록 된 많은 언어는 사람이 : 그들이 애지중지하는 방법 단지의 진정한 이해를 얻을 것
팀 포스트

1
@ 조그 : 흥미 롭군. 인텔 x86 또는 6502와 비교하여 상업적으로 사용되는 CPU 수는 몇 개입니까?
Steven A. Lowe

1
@ Jörg,이 CPU는 어디에 있습니까?

1
@Thor : 속도는 문제가 아니라 교육입니다.
Steven A. Lowe

8

모든 프로그래밍 언어는 일반적으로 프로그래밍에 대해 어떻게 생각하는지에 따라 약간 변경됩니다. 내가 당신에게 줄 수있는 구체적인 예는 내가 haskell을 배우기 시작했을 때 갑자기 자바 스크립트, 루비 및 파이썬의 기능적 비트가 훨씬 더 의미가 있음을 나타냅니다. 나는 전에 내 코드 중 하나에서 foldl을 사용한 적이 없었지만 haskell 후에는 배열을 보는 곳마다 거의 그것을 보았습니다. 따라서 C를 배우면 좋아하는 언어로 된 다양한 구성의 상대적 성능 특성을 훨씬 더 잘 알게 될 가능성이 높습니다. 몇 분 전에 저는 빠르고 최적화 된 자바 스크립트를 작성하는 것에 대한 이야기를 듣고 있었고, 화자는 "C에서하기 어려운 경우에는 자바 스크립트에서 속도가 느려질 것"이라고 말했습니다. 그의 의도는 자바 스크립트가 통역 된 언어이고 통역사가 C 또는 C ++로 작성되었다는 것입니다.


2
모든 언어가 당신의 생각을 어떻게 바꾸는 지에 대한 개념으로 +1.
Sean

7

괴짜들이 하드웨어를 완전히 제어하는 ​​것을 좋아하기 때문에 재미로하지 않으면 적어도 Java 대신 C로 작성된 프로그램의 속도가 더 빨라질 수 있습니다. 가비지 수집과 같은 고급 언어의 기능을 실제로 높이 평가하는 방법도 배울 수 있습니다.


1
괴짜 재미를 위해 +1. 말해야하지만, 나는 괴짜가 아닙니다. 그리고 나는 하드웨어를 싫어한다 :)
back2dos

1
속도 차이는 일반적으로 관련이 없습니다. 서버 측 처리가 일반적으로 병목 현상이없는 웹 앱의 경우 특히 그렇습니다.
David Thornley

David : 나는 일반적인 빵과 버터 웹 앱에 전적으로 동의합니다. 다른 영역에서는 그 차이가 매우 관련 될 수 있습니다.
user281377

1
@ back2dos, 하드웨어에 가까운 프로그래밍 아이디어가 당신에게 호소력이 없다면, 그것을 귀찮게하지 말라고 말할 것입니다. 라틴어는 나중에 많은 로맨스 언어의 기초이기 때문에 라틴어를 배우도록 강요하는 것과 같습니다.
tcrosley

2
메모리가 충분한 경우 Java는 C보다 빠르거나 빠릅니다.

5

호기심을위한 만세!

일상적인 업무를 논리적으로 알 필요가없는 경우에도 복잡한 시스템의 가장 낮은 수준에서 실제로 무슨 일이 일어나고 있는지에 대한 개념을 갖는 것이 매우 좋습니다. 비트 수준에서 일을 처리하는 가장 좋은 방법은 자신의 CPU를 구축하는 것입니다. 기계 언어 수준의 opcode에 대해 생각하고, 직교 명령어 세트가 왜 좋은지, 인터럽트 처리의 합병증, 복잡한 회로와 마이크로 코드 간의 트레이드 오프 (예 : 곱셈 단위) 및 기타 많은 재미를 이해해야합니다!

그러나 그것은 분명히 전자 기술 노하우를 필요로하고 시간이 걸리므로, 다음으로 가장 좋은 것은 앤티크 스타일의 8 비트 CPU로 장난감을 만드는 것입니다. 8051과 같은 마이크로 컨트롤러는 여전히 널리 사용되고 있으며 애호가들이 사용할 수 있습니다. 그래도 전자 제품을 집어 들고 담배를 피우지 않고 LED를 빛나게하는 데는 약간의 노하우가 필요하며 전자 제품을 아직 갖추지 않았다면 $$가 든다.

그 다음으로 가장 좋은 점 : CPU 시뮬레이터 (에뮬레이터? 나는 그 용어를 섞어 놓았습니다)-Z80, 6502, 8086 ... 모든 오래된 8-bitter에 존재합니다. 이것은 납땜 인두의 어느 쪽을 붙잡을 지 모르는 응용 프로그램 프로그래머에게는 가장 교육적이고 재미있을 수 있습니다. ..이 레벨에서 탐험 할 재미있는 것들이 많이 있습니다.

CPU 내부 작업에 대한 초기 이해없이 C를 다른 언어로 배우는 것에 대해 확신이 없습니다. CPU 레지스터간에 비트가 전송되는 방식과 메모리에 액세스하는 방법을 알면 실제로 포인터 및 기타 C 언어 개념을 얻는 데 큰 도움이됩니다.


이것이 포인터를 언급 한 유일한 대답 이었기 때문에 +1입니다. 나는 그것이 # 1이 될 것이라고 생각하고 대답을 받아 들였다.
Erik

4

한마디로 재미있다. VB에서 C ++, C 등으로 작업 한 어셈블러로 놀았을 때 프로세서의 한 부분에서 다른 부분으로 데이터를 옮기는 것이 정말 좋았습니다. CPU 내부에서 무슨 일이 있었는지 정확히 아는 것은 큰 느낌 이었습니다. 또한 자유의 여지가 더해집니다. 고급 언어에는 제한이 없기 때문에 무엇이든 할 수 있습니다.

또한, 다른 언어로 프로그래밍 한 사람에게 다가 가서 '하드 코어가 충분하지 않다면 잘 지내십시오 ...'는 유치하고 유치한 재미였습니다.


4
실제로 CPU 내부에는 어셈블러에서 볼 수없는 것이 많이 있습니다. 비 순차적 실행, 하이퍼 스레딩 및 메모리 캐싱과 같은 작업은 CPU에서 자동으로 수행됩니다. 물질의 기본 입자에 도달 할 때까지 항상 한 단계 낮출 수 있습니다. 아니면 문제는 단지 에너지인가?
Kevin Panko

트랜지스터와 논리 칩으로 자체 CPU를 구축하여 그러한 미스터리를 피할 수 있습니다 .D (내가 가장 좋아하는 기술 환상 중 하나입니다!) 어쨌든 +1로 큰 대답을하십시오.
DarenW

페어 포인트! 내가 실제로 실제로 어셈블러를 사용했을 때 하이퍼 스레딩은 아마도 CPU가 아니라 빠른 재봉을 말하는 것으로 여겨졌을 것입니다.
Dan O

2

저수준 프로그래밍을 배우고 연습해야 할 이유가 있습니까? 상황에 따라 다양한 답변이 있습니다.

먼저, 저는 C 프로그래밍 (그리고 OCaml과 Java)을 가르치고 있습니다. 학생들이 어려운면에서 프로그래밍을 배우도록 동기를 부여하는 것은 아마도 가장 어려운 부분 일 것입니다. 내가 지금까지 찾은 가장 좋은 주장은 "이해"입니다. 높은 수준의 언어는 많은 기본 메커니즘을 숨기고 때로는 좋지 않은 경우도 있지만, 일부 낮은 수준의 트릭이 실제로 유용 할 수있는 경우에도 높은 수준을 유지하도록합니다 ( 사용하는 것을 이해하면 실제로 더 잘 사용하는 데 도움이 될 수 있습니다. 저의 교육 경험은 저수준 프로그래밍 (및 사용자 중심이 아닌 다른 컴파일러)을 배우는 학생들이 더 적응력이 뛰어나고 새로운 고수준 개념이나 도구를 더 빨리 배울 수 있음을 증명합니다.

둘째, 성능 상태는 사용자 경험의 일부입니다. 대부분의 경우 성능은 복잡하고 머신 코드 근처에서 작성하는 문제로 간주됩니다. 항상 그런 것은 아니며, 성능은 알고리즘과 데이터 구조의 문제 일뿐 아니라 알고리즘과 데이터 간의 상호 작용이기도합니다. 주제에 대한 특수 프로젝트를 사용합니다. 기본적으로 간단한 경로 찾기이지만 실제 문제는 데이터의 크기입니다. 그래프는 무한합니다. 하강 성능을 달성하고 메모리에 맞추는 유일한 방법은 전용 메모리 할당 자 (실제로는 풀 할당 자 및 재활용 할당 자)를 작성하는 것입니다. 이것은 대부분의 고급 언어에서는 할 수없는 것입니다. 실제로 대부분의 가비지 수집 언어에는 성능 및 메모리 문제가 있습니다.

"하이퍼"언어에 대한 저수준 언어의 안정성 (역사와 수명의 관점에서)과 같은 더 많은 논증이있을 수 있습니다 (향후 프로그래밍에 대한 참조로 간주되는 언어가 몇 년 안에 사라질 수 있다는 사실은 이야기, 새로운 것들의 수명을 예측할 수는 없지만,이 주장은 오래된 언어의 경우에도 마찬가지입니다 ...) 물론 맛의 문제가 있거나 대부분의 고급 언어로 수행 할 수있는 사실은 낮은 수준의 언어로 이루어 지지만 다른 방법으로 진행되지는 않습니다 (그러나 모든 코드는 어셈블리에서만 ...)

나는 나 자신을 두 세계에 갇히고있다. 나는 몇 년 동안 이론적 프로그래밍 개념, 타입 시스템 설계 및 증명 작업을하며 그렇게하면서 매우 높은 수준의 언어 (주로 기능적인 언어이지만 순수한 언어 만 사용하고 연구했다) 객체 지향.) 최근에 나는 다른 쪽 (주로 시스템과 커널 프로그래밍)으로 돌아가서이 분야에서 아주 편하게 지냈다. 나는 많은 재미를 느낀다! 저에게있어 다음 단계는 공동 점을 찾는 것입니다. 저수준 프로그래밍을위한 고급 언어 기능! 그래서 지금까지는 언어가 없습니다 (아마도 구글은 유저 랜드 시스템 프로그래밍을 갈 것입니다). 그리고 나는 자신의 언어를 구축 할 생각을 고려하고 있지만 이것은 또 다른 이야기입니다.


1

도메인에 많은 이유가 없다고 말하지만, 고성능 컴퓨팅 (예 : 게임, 과학 등)을하는 경우에는 정당화됩니다.


1
고성능 영역이 많이 남아 있는지 잘 모르겠습니다. 게임에는 확실히 낮은 수준의 언어가 필요하지 않습니다. 게임의 경우 일반적으로 엔진을 사용하거나 최소한 OpenGL 또는 다른 것으로 시작합니다. 그리고 과학 병렬화는 매우 중요하고 정확합니다. 나는 당신이 OCaml이나 다른 것에 더 좋을 것이라고 생각합니다. 성능 결정적인 영역은 더 이상 많은 숫자를 사용하지 않지만 커널, 드라이버, 스토리지 엔진 등과 같이 매우 자주 사용되는 영역입니다. 모든 개발자의 1 % 미만이 실제로 이들을 만지는 것 같습니다.
back2dos

4
@ back2dos, 게임 엔진은 아무데도 나타나지 않습니다. 누군가가 작성해야합니다. OpenGL이 작성된 것으로 생각하십니까? C #이 아닙니다. 요즘 대부분의 응용 프로그램에 저수준 언어를 사용할 필요는 없지만 많은 사람들이 다른 언어를 필요로합니다.
GrandmasterB

1

요즘에는 저수준 및 고수준 프로그래밍이 상당히 분리 될 수 있다고 생각합니다. 기본적으로 이것은 아무런 문제없이 C와 어셈블러를 알지 않고도 모든 직업 생활을 할 수 있음을 의미합니다. C 프로그래밍 언어는 프로그래밍 및 디자인 관점에서 많은 것을 가르쳐 줄 수는 없습니다.

호기심으로 사물이 어떻게 더 낮은 수준에서 작동하는지 배울 수 있습니다. 예를 들어 대학에있을 때는 gcc를 사용하여 C ++에서 어셈블러 코드를 생성하는 것을 즐겼습니다. 다원주의와 예외가 어떻게 이행되는지 이해하는 것이 유용했습니다. 그러나 그 외에도 현재 C에서 배울 수있는 것은 다음과 같습니다.

1) 더티 메모리 트릭. C는 프로그래머의 광기에서 아래쪽이 없다는 것을 이해하는 가장 좋은 방법입니다. :)

2) GOTO는 실제로 오류를 롤백하는 데 사용되며 유용합니다.

3) 메모리 할당이 어떻게 작동하는지 더 잘 배우십시오 (힙과 스택의 차이점은 무엇입니까?).

그래서 기본적으로 내 논문은 : 만약 당신이 이미 대학을 마치고 배우지 않는 것보다 여전히 C가 필요하지 않다면 :)


2
C가 저수준에서 어떻게 작동하는지 아는 것은 누출 추상화가있을 때 왜 문제가 발생했는지 이해하는 데 도움이 될 수 있습니다.
Michael Shaw

1

저급 언어를 이해할 필요는 없지만 선택한 고급 언어의 표지 아래에서 진행되는 작업을 이해해야합니다. 저수준 언어를 사용하면이 방법을 배울 수 있지만 이것이 유일한 방법은 아닙니다.

다음은 고급 언어에 영향을 줄 수있는 저급 개념의 예입니다.

포인터 :

List<object> listOne = new List<object>();
List<object> listTwo = listOne;

listTwo.Add(new object());

Debug.WriteLine(listOne.Count); //do you know what this will be?

문자열 :

string initial = "initial";
string another = initial;

another = "changed!";
Debug.WriteLine(initial); //what about this?

기울기:

목록과 연결 목록은 언제 사용합니까? (리스트가 작동하는 방식에 대해 매우 낮은 수준에서 이해하지 않고 이것을 알기 거의 불가능합니다)

-

이 모든 것을 알아야합니까? 아니요, 그러나 영향을 줄 수 있으며 고급 언어의 마스터가 되려면 내부 작업에 대해 잘 알고 있어야합니다.


1

저수준 프로그래밍은 무엇을 가르쳐 줄 수 있습니까, 다른 언어는 저를 가르쳐주지 않습니까?

특히 컴퓨터가 실제로 작동하는 방식을 알려줍니다. 저수준 프로그래밍을 통한 것 외에는 이것을 배울 수있는 다른 방법이 없습니다. 어떤 종류의 응용 프로그램을 프로그래밍하든 항상 도움이됩니다. 실제로 모든 웹 컨텐츠 아래에서 진행되는 작업을 이해할 것입니다. Windows로 작업하는 경우 전체 API는 C로 작성되므로 언어를 알면 현재 언어 및 라이브러리에없는 기능을 사용해야 할 때마다 해당 언어로 OS와 직접 통신 할 수 있습니다.

물론 저수준 프로그래밍을 통해 asm / C / C ++가 필요한 임베디드 프로그래밍 및 실시간 프로그래밍과 같이 완전히 다른 작업을 수행 할 수 있습니다. 이러한 종류의 응용 프로그램에 관심이 없다면 실제로 asm / C / C ++를 배울 필요가 없습니다.

또한 비트와 바이트를 배우게됩니다. 비트 조작, 16 진수 등. 웹 / 데스크톱 프로그래밍을 수행 할 때도 발생할 수 있습니다. 암호화 알고리즘이 사용되는 예입니다.

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