고급 개발자가 어셈블리를 공부하는 데 시간을 보내는 것이 현명합니까? [닫은]


33

저수준 물건에 대한 지식이 우리의 작업에서 매우 중요하다는 것은 분명합니다.

그러나 상용 소프트웨어를 이미 높은 수준으로 개발 하고 있고 이미 선택한 방향을 가지고 있지만 조립 기술이없는 경우에는 방향과 관련된 것을 연구하는 데 집중하는 것이 더 합리적이지 않습니까? 아니면 저급 기초를 배우기 위해 시간을 보내야하는 이유가 있습니까?

너무 늦었을 때는 언제입니까? 이 경우, 그리고 하지 너무 늦게, 그럼 어떻게 하나 (일부 깊이를 얻기 위해 과도한 시간을 소비하고 이해하지 않는 의미에서) 최적의 학습에 대한 갈 것이라고?


한 게시물에 많은 질문 :)
Shamim Hafiz

나는 어셈블리 언어를 단계별로 즐겼습니다. 처음에는 많은 프로그래밍 noobie-ish 것들이지만 저자는 매우 재미 있습니다. 나는 일반적인 아이디어를 갖는 것이 도움이되고 주로 JavaScript를 작성한다는 것을 알았습니다.
Erik Reppen

저의 첫 번째 언어는 어셈블리 방언이었습니다. 나는 그것이 다른 사람들이 지적한 많은 방법으로 유용하게 사용될 수있는 방법을 알 수 있으며 팀의 나머지 부분에 다른 입력을 제공하는 데 도움이됩니다.
Jamie Taylor

답변:


43

아무도 디버깅에 대해 언급하지 않았다는 것을 믿을 수 없습니다 ...

나는 몇 년 동안 한 줄의 어셈블리 코드를 작성 하지 않았습니다 . 그러나 나는 그것을 합리적으로 자주 습니다. 높은 수준의 디버깅은 소스 및 기호 정보가있을 때 유용하지만 멋진 라이브러리가 고객 컴퓨터에서 처리되지 않은 예외를 처리 할 때 라이센스에 포함하기가 너무 늦습니다.

그러나 나는 여전히 디스어셈블러을 열고 높은 수준의 논리는 결국 결국 무엇을 볼 수있는 일을 , 그 기원에 대한 잘못된 데이터를 다시 추적의 FPU 제어 레지스터를 변경 누가 알아 ...

이것은 내가 생각하는 것보다 베이컨을 더 자주 절약했습니다. 그리고 ' 배우기에 너무 늦지 않았습니다 .'Net에는 많은 훌륭한 참고 자료와 자습서 가 있으며 컴퓨터에서 실행되는 모든 프로그램이 실습 환경을 제공 할 수 있습니다.


10
+1, 가능하다면 더 많이 찬성했습니다. 다른 심각한 이유가 없다면 모든 심각한 개발자는 ASM을 읽을 수 있어야합니다.
메이슨 휠러

3
이에 대한 결론은 최적화입니다. 컴파일러가 코드를 어셈블리로 변환하는 방법을 알고 있으면 코드를 훨씬 빠르게 만들 수 있습니다!
lambacck

3
+1 어셈블리는 프로세서의 실제 작동 방식을 이해하도록하는 유일한 언어 중 하나입니다. 고급 언어로 개발하는 데 도움이됩니다. 읽어야합니다 : blogs.msdn.com/b/ericlippert/archive/2010/09/30/…

기본 컴퓨터를 아는 것은 굉장히 여부, 디버깅 최적화, 또는 단순한 호기심에 대한 도움. 진지하게, 적어도 하나 또는 두 개의 어셈블리 언어를 읽는 법을 배우십시오. 읽은 후에 읽거나 쓰지 않더라도 앞으로 이해하는 방식에 영향을 줄 것입니다. 이제 다른 언어로
쓰지 않으려

1
@Mason : "모든 심각한 개발자"가 ASM을 읽을 수 있어야하는지 모르겠습니다. JavaScript를 작성하거나 두꺼운 프레임 워크 (예 : .NET 또는 Java) 위에 구축 된 프로그래밍 언어를 사용하는 경우 심각한 개발자가되기 위해 ASM을 반드시 읽을 수 있다고 생각하지 않습니다. 즉, 컴퓨터가 매우 낮은 수준에서 명령어를 실행하는 방법을 이해하면 높은 수준의 프로그래밍 언어 및 환경에서도 도움이 될 수 있습니다.
Scott Mitchell

15

어셈블리 언어를 배울 필요가 없으며 작동 방식을 이해하면됩니다. XOR이 무엇인지 알고 수면 등에서 이진법으로 계산해야합니다. 그러나 필자의 작업에는 어셈블리 코드가 필요하지 않았습니다.

당신이 말했듯이, 저수준 물건에 대한 지식은 중요하지만 실제 조립 지식은 중요하지 않습니다.


1
두 번째입니다. 당신은 좋은 생활 프로그래밍을 얻을 수 있으며 ASM을 읽고 쓸 필요 가 없습니다 . 그것을 요구하는 몇 가지 입장이 있습니다. 코드에서 경쟁 조건 후 덤프를 읽으면 프로세스가 중단되었습니다. 또는 GPU 병렬화 / OpenCL과 같이 성능이 매우 많은 프로그램을 작성하는 경우. 이러한 작업을 수행해야하는 개발 작업의 비율은 매우 작습니다.
yzorg

11

저급 프로그래밍 기술이 없다면 여가 시간에 학습 하는 것이 좋습니다. 전문가가 될 필요는 없습니다. 어느 정도의 숙련도에 도달하십시오. 컴파일러 나 라이브러리에 의존하지 않고 많은 수학 작업을 직접 수행해야합니다. 대부분의 어셈블리 명령어는 하나의 프로세서 명령어에 해당하므로 프로그래밍의 가독성을 이해하는 데 도움이됩니다. 와 같은 것의 이점없이 약간 더 큰 프로그램의 복잡성을 직접 관리해야합니다 if...else. 어셈블리 경험을 통해 읽기가 훨씬 쉬워지기 때문에 더 간단한 고급 프로그램을 작성하는 데 도움이됩니다.

또한 어셈블리는 언어가 아니라는 것을 기억하십시오! 일반적인 용어로, 기본적으로 기호 언어로 추상화 된 프로세서의 명령어 세트를 의미합니다. 프로세서마다 명령어 세트가 다르므로 어셈블리 언어가 다릅니다. '조립'을 배우면 언어가 아닌 프로세스를 배우게됩니다.


8

당신은 항상 표지 아래에서 정점에 도달하고 당신이 위에 서있는 추상화 아래에 무엇이 있는지에 대해 조금 더 이해함으로써 이점을 얻을 것입니다. 내 대학 교수가 한 번 언급했듯이 "모든 훌륭한 프로그래머는 하드웨어를 이해한다"-회로를 생성하고 조작 할 필요는 없지만 아래에서 진행되는 작업을 파악해야합니다. 당신이 더 나은.

컴퓨터 구성 및 디자인 시도


1

-지속적인 평생 학습은 소프트웨어 개발 경력의 필수 구성 요소입니다. 프로그래밍에 대해 계속 배우고 기술을 향상시키는 방법에 계속 관심이 있다면, 완전히 새로운 언어와 코드 작성 방법에 노출 될 수 있으므로 어셈블리를 배워야합니다. 같은 이유로 Ruby / Python (동적 언어), Haskell / F # (순수 기능 언어), Lisp / Scheme (기능 언어) 등 다양한 언어 / 프로그래밍 스타일을 실험 해 보는 것이 좋습니다.

프로그래밍 기술에 대해 더 이상 배우고 싶지 않다면 너무 늦었다 고 말할 수 있습니다. 예를 들어, 경력에서 프로그래밍, 관리, 시스템 엔지니어링, 영업 / 마케팅 등의 다른 영역으로 넘어갈 수있는 시점에 도달 한 경우. 다음 몇 년 동안 저는 프로그래밍 기술 대신 해당 분야에서 개발하는 데 필요한 기술에 더 집중할 것입니다.


1

그것이 무엇이며 컴퓨터가 무엇을하고 있는지 알아야합니다. Knuth의 MIX 와 같은 것을 배우면 도움이 될 것입니다. 대부분 코드의 효율성을 판단 할 수 있습니다. 컴퓨터 프로그래밍 기술을 구해서 읽어보십시오. 더 똑똑한 프로그래머가 될 것입니다.


1

당신의 지시와 관련된 것을 연구하는데 집중하는 것이 더 합리적이지 않습니까? 아니면 저급 기초를 배우기 위해 시간을 보내야하는 이유가 있습니까?

대답:

  1. 프로그램 임베디드 시스템으로 방향을 바꿀 계획이 없다면 어셈블을 배울 이유가 없습니다. 어셈블리가 CPU에 의존한다고 생각하더라도 몇 가지 기본 사항을 배울 수 있지만 지식은 해당 CPU에 대한 CPU 아키텍처 및 명령어 세트를 기반으로합니다.
  2. Windows 용 코드를 작성한다고 가정하겠습니다. 현재의 방향에 도움이 될 수있는 고급 언어보다 낮은 수준의 언어를 배우려면 Windows I 심층, Windows API, Windows 메모리 관리 등을 배우는 것이 좋습니다. 코딩하는 OS / 플랫폼을 간단히 배우십시오.
  3. 메모리 관리, 가비지 수집 등과 같은 현재의 고급 언어 기술을 향상시킵니다. 낮은 수준으로 가고 싶다면.

0

커리어가 발전함에 따라 수익이 줄어드는 시점에 도달했다고 생각합니다. 즉, 어셈블리 언어를 조기에 배워야합니다. 어셈블리 언어는 이후에 나오는 모든 것을 더 잘 이해하는 데 도움이됩니다. 그러나 이미 인력을 보유하고 있고 수년간의 경험을 보유한 경우에는 이미 작동 방식에 대한 느낌이 있으므로 실제 너트-볼트 세부 사항을 학습하면 많은 통찰력을 제공하지 못할 수 있습니다. .


0

공부하는 어셈블리가 얼마나 사용되는지 모르겠습니다. 그러나 최소한 C와 같은 언어로 프로그래밍하는 것이 유리할 것입니다. 나는 최근에 C로 프로그래밍을해야했고 오히려 깨달음을 발견했다. C는 고급 언어로 존재하는 추상화를 대부분 제거합니다. 이러한 추상화는 비용이 들지 않습니다. C에서는 하위 레벨 세부 사항을 더 많이 관리해야합니다. 고급 언어에서는 세부 사항이 관리됩니다. C에서 일부 프로그래밍을 수행하면 이러한 세부 사항을 알아야합니다. 그래서 당신이 일상 언어로 돌아 왔을 때, 당신은 여전히 ​​그 인식을 가질 것이며 실제로 일어나고있는 일을 더 잘 이해할 것입니다. 그래야 더 나은 프로그래머가 될 수 있습니다.


0

적어도 영국의 교육 직업에서 교사는 자신이 가르치는 것 이상으로 자격을 갖추어야합니다. 중고등 학교 교사는 자신이 가르친 과목에서 학위를 소지해야하며, 초등 (초등학교) 교사도 학위를 소지해야하며 모든 주요 과목에서 우수한 GCSE 수준 (고등학교)까지 능숙해야합니다. 시험을 종료 하시겠습니까?, 실제 미국 전역에 해당하는 것은 아님).

왜? 무언가를 잘 가르치거나 실제로 잘 사용하기 위해서는 그것을 이해해야하기 때문입니다. 이를 위해서는 기본 구조, 결정을 내리기 전의 결정 체인에 대한 이해가 필요합니다. 높은 수준의 코드를 제대로 이해하려면 코드가 작성되는 계층, 작동 방식, 강점과 약점이있는 위치를 이해해야합니다. 이것은 재귀 적입니다. 아래의 계층을 이해하려면 그 아래의 계층도 이해해야합니다.

결국, 이것이 컴퓨팅의 괜찮은 대학 / 대학 과정이 다른 모든 것보다 우수한 수학 능력을 요구하는 이유입니다.

Maths -> Physics                ->
      -> Chemistry -> Materials -> Hardware Design -> Microcode      -> Assembler
                                                   -> Bus Interfaces -> Peripherals

... Assembler    -> Low Level      -> High Level   ->
... OS / Drivers -> API Level      -> Applications -> User

이 분야에 대한 지식이 부족하면 이해가 부족합니다. 다른 레이어를 조작하는 수준에 가까울수록 접지를하는 것이 더 중요합니다.

따라서 : 고급 코더로 어셈블러를 알아야합니까?  도움이 될거야.


0

그것은 초창기 전문가로서 나의 이전 생애에서 매우 중요했습니다. 당시에는 수백 줄의 어셈블러를 작성하고 성능을 짜려고 시도 할 때까지 기계를 이해하지 못했다고 생각했습니다. 아주 적은 프로그래머가 그렇게 깊이 가고 싶었 기 때문에 필연적으로 필연적이었습니다. HW 디자이너 유형과 대화 할 때 여전히 공통 언어가 있습니다.

그러나 실제로 이것의 필요성 / 혜택은 대부분 수십 년이 지난 것입니다. 컴파일러 발전과 비 순차적 실행 HW 사이에는 더 이상 어셈블러를 작성하여 영웅을 플레이 할 수있는 범위가 거의 없습니다. 일이 어떻게 작동하는지 이해하는 것이 유용하다고 생각합니다. 나는 아이들 (신입생 CS 전공)에게 간단한 가상 머신에서 매우 단순화 된 어셈블러로 프로그래밍하도록 가르치려고 계획하고 있습니다. 우리는 언 롤링, 소프트웨어 파이프 라이닝, 캐시, 프리 페치, 바텀 로딩 등과 같은 것들을 가지고 놀 수 있기를 바랍니다. 따라서 적어도 어떤 수준에서는이 일이 진행되고 있음을 알 것입니다.

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