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


15

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

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

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

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

답변:


16

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

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

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


4
그러나 모든 추상화는 누출됩니다. 유출 된 추상화 문제를 해결하기 위해 필요한 사람이 되려면 기본 아키텍처를 알아야합니다.
dsimcha

5
@dsimcha, 동의하지만,가는 사람이 되려면 "다른 사람들"이 필요합니다. ;-) 모두가 모든 것을 알아야 할 경우 추상화는 비참하게 실패했습니다.
Preets

1
@Preets, 그래서 많은 추상화 비참하게 실패한 이유 입니다. 방문 할 사람이 존재할 여지가 있다는 것은 추상화가 이미 실패했다는 증거입니다.
Pacerier

@Ryan, 그것은 실제로 미래에 누출 추상화 계층에 계층으로 인해 미묘한 버그로 가득 찬 앱으로 세계가 범람하는 문제로 이어질 것입니다. 무한한 자원을 가진 Google과 같은 회사 가 핵심 앱에 버그를 가질 수 있다는 것은 이제 놀랍습니다 .
Pacerier

3
@Pacerier google은 무한한 자원과는 거리가 멀며, 수십 배 더 복잡한 애플리케이션을 대부분의 다른 애플리케이션보다 몇 줄 더 많은 코드 라인으로 구성합니다. 모든 추상화가 유출 될 수 있기 때문에 모두가 저수준의 컴퓨터를 알아야한다고 주장하는 것은 폭풍이 와서 집을 무너 뜨릴 수 있기 때문에 도구를 사용하지 않고 처음부터 집을 짓는 방법을 모두 알아야한다는 것과 같습니다. 그런 자원을 소비하는 것은 실현 가능하지 않습니다.
사라

9

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

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

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

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


5
나는 그것이 "당신이 일하는 곳에서 추상화를 한 층 아래로 알아야한다는 것"으로 표현되었다고 들었습니다. 글쎄요. 내 기억에 결함이 있습니다. 따라서 C 또는 Delphi에서 작업하는 경우 어셈블리 작동 방식을 알아야합니다. Smalltalk 또는 Java에서 작업중인 경우 VM 작동 방식을 알아야합니다. (어쩌면 항상 어셈블리에 대해 알아야 할 것이 있습니다 !) TCP로 작업하는 경우 IP 작동 방식을 알아야합니다. 등등.
Frank Shearar

1
내 말은, 당신은 그것을 더 취할 수 있습니다 : 왜 어셈블리를 아는 것만으로 충분합니까? 이것은 이진 CPU 명령어에 대한 손으로 들고있는 높은 수준의 추상화입니다. 하지만 기다려! 기계 코드? 그것은 단지 추상화입니다! 로직 게이트를 구축하기 위해 트랜지스터를 사용하여 CPU를 구성하는 방법을 배워야합니다! 그리고 버스와 레지스터. 하지만 기다려! 트랜지스터? 그것은 특정 원자 구성에 대한 추상화 일뿐입니다. 원자는 양자 장의 변동에 대한 추상화 일뿐입니다. 결국, 이것은 단지 javascript:alert("Hello world")이론에서 박사 학위를 요구합니다.
사라

1
@kai 당신은 약간 말도 안되는 군요 . 그렇지 않은 것을 나는 당신과 동의하는 경향이 일반적으로 당신이 아래로 여러 층을 이해할 필요가있는 경우 대부분의 응용 프로그램을. 그러나 우리는 일상적인 것이 아니라 가장 중요한 경우에 대해 이야기하고 있습니다. 물론, 배관이 설거지를하는 방법을 알 필요는 없습니다. 그러나 더러운 물이 싱크대를 채우기 시작하면 문제를 해결하기 전에 싱크대에 대해 조금 배워야 할 것입니다. 또는 다시 작동 할 때까지 배수구 아래로 철근 조각을 램핑하고 누가 물이 가는지를 걱정할 수 있습니다. (계속 ...)
DrewJordan 2016 년

1
내 포인트 @DrewJordan 단지이다 : 당신이 누구 전문하지 않는 한 필요 에 대해 알고 문제의 특정 클래스를 해결하기 위해 (또는 예리한 개인 관심을 가지고), 그때는 솔직히 터무니없는 주장과는 것을의 필요한 내부 동작을 알고 사용중인 모든 도구의 이상한 미묘함. 나는 단지 그것이 논리적 결론이라는 견해를 이끌어 냈습니다. 확실히, 이더넷 케이블이 어떻게 구축되는지 알면 인터넷 연결이 실패 할 때 올바른 도구를 고려할 때 새로운 케이블을 만들 수 있지만 20 층 이상을 작업 할 때 지식을 얻는 데 시간과 돈을 소비하는 것은 낭비입니다.
사라

1
@DrewJordan 물론 누군가는 추상화가 깨질 때 누군가가 그것을 고칠 수 있도록이 모든 것들을 알아야하지만 추상화의 요점은 세부 사항을 알아야하는 사람들의 수를 최소화하여 대다수가 집중할 수 있도록하는 것입니다. 작업 완료 당신은 임의로 당신이 개인적으로 일이 일어날에 따라 달라집니다에 그림과 같이 일을, "너무 낮은 수준"을 얻을 어디에 선을 그어야 어디 내 argumentum 광고 absurdium (잘못된 생각하지 않은, 당신이 알고있을 것이다!)
sara

5

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


2
이론적으로는 그렇습니다 . 그러나 이들은 꽤 큰 ifs 입니다.
메이슨 휠러

1

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

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

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

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

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