태그 보관물: abstraction

abstraction

더 높은 프로그래밍 언어의 사용이 증가하면 컴퓨터 아키텍처 지식이있는 프로그래머가 부족해질 수 있습니까? 컴퓨터의 세부 사항을

“고급 프로그래밍 언어”기사의 Wikipedia에서 인용 한 내용 :

고급 프로그래밍 언어는 컴퓨터의 세부 사항을 강력하게 추상화 한 프로그래밍 언어입니다. 저수준 프로그래밍 언어와 비교하여 자연 언어 요소를 사용하거나, 사용하기 쉬우거나, 플랫폼간에 이식성이 더 뛰어납니다. 이러한 언어는 메모리 액세스 모델 및 범위 관리와 같은 CPU 작업의 세부 정보를 숨 깁니다.

즉, 프로그래밍 언어의 수준이 높아질수록 프로그래머는 프로그램이 실행되는 하드웨어에서 멀어집니다.

이제는 여러 수준의 언어 사용 통계를 알지 못하지만 더 높은 수준의 언어가 더 낮은 수준의 언어를 대체하고 있다고 생각합니다. 그렇다면 컴퓨터 아키텍처 지식이있는 프로그래머가 부족할 수 있습니까? 이것이 업계에 문제가 될까요?



답변

가능 하지만 문제가되지는 않습니다.

경제학 일뿐입니다. 대다수의 사람들이 기본 아키텍처를 이해하는 능력을 상실하고 기본 아키텍처를 이해해야 할 필요가 여전히 크다면, 일자리를 갖고 더 많은 돈을받는 사람은 있지만, 그렇지 않은 사람들은 그것이 필요하지 않은 일자리 (그리고 여전히 더 많은 임금을받을 수있는 사람 … 누가 아는가?).

알아두면 도움이 되나요? 물론. 아마도 더 나을 것입니다. 대부분의 경우 필요합니까? 그렇기 때문에 추상화가 그렇게 큰 이유입니다. 우리는 거인이 될 필요없이 거인의 어깨에 서 있습니다 (그러나 항상 거인이있을 것입니다).


답변

나도 그렇게 생각해. 걱정되는 추세입니다. 완벽한 추상화는 없습니다 . 복잡한 문제를 단순화 할 수있는 완벽한 방법이 있다면 원본을 매우 빠르게 대체 할 수 있습니다. (이것은 과거에는 때때로 컴퓨터에서 발생했으며 물리학과 같이 이전 버전과의 호환성에 대해 걱정하지 않는 다른 분야에서는 훨씬 더 자주 발생했습니다.)

이것이 의미하는 것은 추상화를 사용할 때마다 숨겨져있는 중요한 복잡한 부분이 있다는 것입니다. 그것이 무엇인지, 왜 거기에 있고 무엇을하는지 모르는 경우 실수로 큰 열차 사고를 일으키고 실제로 무슨 일이 일어나고 있는지 알지 못하므로 문제를 해결하는 방법을 모릅니다.

달리 말하려고하는 사람은 뱀 오일을 판매하거나 단순히 심각한 소프트웨어에 대한 경험이 많지 않습니다. 직장에서 저는 미국의 모든 TV 및 라디오 방송국에서 상당한 비율을 운영하는 프로그램을 만들고 있습니다. 스테이션과 네트워크가 점점 커지고 복잡 해짐에 따라 하나의 작은 스테이션 용 제품을 설계하는 데 효과가있는 빠르고 더러운 기술이 50 개의 스테이션과 200 개의 채널이있는 네트워크에 구현 될 때 큰 기술적 장벽에 부딪치게됩니다! 언어가 어떻게 작동하는지 (그리고 처음에는 효율적인 언어)에 대한 깊은 이해와 데이터베이스가 어떻게 작동하는지에 대한 깊은 이해가 없다면 코더는 결코 제품 규모를 성공적으로 확장 할 수 없었을 것입니다.

이것은 고립 된 이야기가 아닙니다. 소프트웨어는 점점 더 복잡해지고 단순 해지지 않고 계속 발전하고 있으며,이 수준의 기술 전문 지식이 잃어버린 예술의 대상이 될 것이며, 내일의 프로그램은 오늘날보다 나빠질 것입니다.


답변

예, 언어가 발전함에 따라 사람들이 하드웨어를 훨씬 덜 이해할 것이라고 생각합니다. 그러나 다른 많은 곳에서 언급했듯이 오늘날 대부분의 프로그램에 대한 주요 제약 조건은 CPU 시간이나 효율성이 아니라 프로그래머 시간입니다. 만약 디자인 언어는 추상화가 효율적으로 자신의 일을 유지하고, 사람들이 있다면 사람들이 제대로 이러한 추상화를 계속 사용 후 컴퓨터 아키텍처에 대한 이해가 전혀 필요하지 않다; 적어도 완전한 지식은 요즘 좋은 프로그래머가되기위한 기본 이 아닙니다 .


답변

아니요, 컴퓨터 아키텍처 지식을 갖춘 프로그래머가 부족 하지는 않습니다 . 언어는 특정 도메인의 문제를 해결하는 데 사용됩니다. 특정 문제를 해결하려면 적절한 언어를 사용하거나 리소스를 충분히 사용하십시오.

실제로 어떤 도메인에 실제로 컴퓨터 아키텍처에 대한 지식이 필요합니까? 특정 하드웨어 아키텍처에 묶여 있어야합니까? 운영체제? 장치 드라이버? 물론 이러한 코드의 일부에만 특정 아키텍처 지식이 필요합니다.

성능 개선? 예. 컴퓨터 아키텍처에 대한 지식을 적용하여 알고리즘의 성능을 향상시킬 수 있습니다. 그러나 다른 두 가지 요소가 성능에 더 큰 영향을 미칩니다. 더 나은 알고리즘 사용과 언어 런타임 환경에 대한 지식.

본질적으로,보다 추상적 인 프로그래밍 언어는 컴퓨터 아키텍처의 세부 사항이 필요하지 않은 문제를 해결합니다. 더 많은 문제를 해결할 수 있습니다. 그것들을 사용하는 사람들은 그것들을 기계 의존적 문제를 해결하기 위해 사용하지 않습니다. 기계 종속 문제를 해결해야하는 사람들은 기계 가능 언어를 계속 사용합니다. 이것은 제로섬 문제가 아닙니다.


답변