shopkeeper/korean_wiki_content_only_120125 huggingface dataset:
프로그래밍 팀은 여러 방식으로 조직될 수 있지만, 비자아적 프로그래밍 팀과 수석 프로그래머 팀이 일반적으로 사용되는 두 가지 공통 구조이다. 프로그래밍 팀 구조를 선택할 때 주요 결정 요인은 일반적으로 어려움, 규모, 기간, 모듈성, 신뢰성, 시간 및 사회성을 포함한다.
비자아적 프로그래밍.
매릴린 만테이에 따르면, 분산된 프로그래밍 팀에 속한 개인들은 더 높은 직무 만족도를 보고한다. 비자아적 프로그래밍 팀은 10명 이하의 프로그래머로 구성된 그룹을 포함한다. 코드는 그룹 구성원들 사이에서 교환되고 목표가 설정된다. 리더십은 특정 시간 동안 필요한 요구 사항과 능력에 따라 그룹 내에서 순환된다. 비자아적 팀의 구조 부족은 대규모 프로젝트에서 효율성, 효과성 및 오류 감지의 약점으로 이어질 수 있다. 비자아적 프로그래밍 팀은 매우 복잡한 작업에 가장 적합하다.
수석 프로그래머 팀.
수석 프로그래머 팀은 일반적으로 수석 프로그래머, 선임 프로그래머 및 프로그램 사서로 구성된 3인 팀을 포함한다. 필요한 경우 추가 프로그래머와 분석가가 팀에 추가된다. 이 구조의 약점은 팀 구성원 간의 의사소통 부족, 작업 협력 및 복잡한 작업 완료가 포함된다. 수석 프로그래머 팀은 팀 내 정보 흐름이 제한되므로 더 간단하고 명확한 작업에 가장 적합하다. 이 팀 구조에서 일하는 개인들은 일반적으로 낮은 업무 의욕을 보고한다.
공유 워크스테이션 팀.
페어 프로그래밍.
두 명의 프로그래머가 하나의 워크스테이션에서 함께 작업하는 개발 기법이다.
모브 프로그래밍.
팀 전체가 같은 시간, 같은 공간에서 같은 컴퓨터로 같은 작업을 하는 소프트웨어 개발 접근 방식이다.
프로그래밍 모델은 소프트웨어 개발 팀이 이러한 다양한 방법론을 사용하여 프로젝트를 개발, 배포 및 테스트할 수 있도록 한다.
이러한 두 가지 프로그래밍 모델 전체에서 팀 구성원은 일반적으로 매일 5~15분간의 스탠드업 회의에 참여한다. 전통적으로 팀의 각 구성원은 일어서서 이전 스탠드업 회의 이후에 작업한 내용, 다음 스탠드업 회의까지 작업할 내용, 그리고 진행을 방해하는 요소(종종 "블로커"라고 알려짐)가 있는지 여부를 말한다.
폭포수 모델.
더 전통적인 접근 방식으로 알려진 폭포수 모델은 선형적인 생산 모델이다. 이 방법론의 이벤트 순서는 다음과 같다.
각 단계는 소프트웨어 개발 프로세스 동안 명확하게 구분되며, 일반적으로 다음 단계가 시작되기 전에 각 단계가 완료된다.
이 모델을 사용하는 프로그래밍 팀은 개발 프로세스 초기에 프로젝트를 설계할 수 있어, 팀이 지속적으로 설계를 반복하는 대신 작업의 대부분 동안 코딩 및 테스트에 집중할 수 있다. 이는 또한 팀이 모든 소프트웨어 산출물을 완전히 이해할 수 있도록 완전히 그리고 더 신중하게 설계할 수 있게 한다.
애자일 모델.
애자일 개발 모델은 이전 폭포수 모델보다 개발에 대한 더 팀 기반의 접근 방식이다. 팀은 "스프린트"라고 불리는 단계로 작업을 분할하는 빠른 납품/배포 방식으로 작업한다. 스프린트는 일반적으로 각 팀/팀 구성원에게 주어진 2주간의 계획된 소프트웨어 산출물로 정의된다.
각 스프린트 후에 작업의 우선순위가 재조정되고 이전 스프린트에서 얻은 정보는 향후 스프린트 계획에 사용된다. 스프린트 작업이 완료되면 프로그래밍 팀에 의해 검토 및 평가될 수 있으며, 다음 반복(예: 다음 스프린트)을 위해 다시 보내지거나 완료되면 종료된다.
애자일 선언문의 일반적인 원칙은 다음과 같다.
확률 컴퓨팅 또는 확률적 컴퓨팅(stochastic computing)은 연속적인 값을 임의의 비트 스트림으로 표현하는 기술 집합이다. 복잡한 계산은 스트림에 대한 간단한 비트별 연산을 통해 수행될 수 있다. 확률 컴퓨팅은 확률적 알고리즘 연구와는 구별된다.
동기 부여 및 간단한 예시.
formula_1가 주어졌을 때 formula_2를 계산한다고 가정하자. 확률 컴퓨팅은 산술 대신 확률을 사용하여 이 연산을 수행한다.
특히, 확률 수(즉, 베르누이 과정)라고 불리는 두 개의 무작위 독립 비트 스트림이 있다고 가정하자. 여기서 첫 번째 스트림에서 1이 나타날 확률은 formula_3이고, 두 번째 스트림에서 1이 나타날 확률은 formula_4이다. 두 스트림의 논리곱(AND)을 취할 수 있다.
출력 스트림에서 1이 나타날 확률은 formula_5이다. 충분한 출력 비트를 관찰하고 1의 빈도를 측정함으로써 formula_5를 임의의 정확도로 추정할 수 있다.
위의 연산은 상당히 복잡한 계산(formula_3와 formula_4의 곱셈)을 무작위 비트에 대한 매우 간단한 연산(formula_9 평가)의 시리즈로 변환한다.
다른 관점에서 보면, AND 게이트의 진리표를 가정해 보자. 일반적인 해석은 입력 A와 B가 참일 경우에만 출력이 참이라는 것이다. 그러나 표를 수직으로 해석하면 (0011) AND (0101)는 (0001)이 된다. 즉, 1/2 x 1/2 = 1/4이며, 이는 정확히 산술 곱셈이다. 정보가 확률 분포로 제시되기 때문에 확률 곱셈은 문자 그대로 AND 연산이다.
더 일반적으로 말해서, 확률 컴퓨팅은 숫자를 무작위 비트 스트림으로 표현하고 빈도를 계산하여 숫자를 재구성한다. 계산은 스트림에서 수행되며 formula_3와 formula_4에 대한 복잡한 연산을 스트림 표현에 대한 간단한 연산으로 변환한다. (재구성 방식 때문에 이 연산을 수행하는 장치를 확률 평균화 프로세서라고 부르기도 한다.) 현대적인 용어로, 확률 컴퓨팅은 확률적 관점에서 계산을 해석하는 것으로 볼 수 있으며, 이는 기브스 샘플러로 평가된다. 또한 하이브리드 아날로그/디지털 컴퓨터로도 해석될 수 있다.
확률 컴퓨팅은 1953년 존 폰 노이만의 선구적인 논문에서 처음 소개되었다. 그러나 이 이론은 1960년대 컴퓨팅의 발전,
주로 미국과 영국에서 동시에 여러 연구 노력을 통해 발전하기 전까지는 완전히 개발될 수 없었다. 1960년대 후반에 이르러 확률 계산을 수행하기 위한 특수 목적 하드웨어 설계에 관심이 집중되었다. 1969년부터 1974년 사이에 수많은 기계가 제작되었으며, 이 글에는 RASCEL이 그림으로 제시되어 있다.
1960년대와 1970년대의 열띤 관심에도 불구하고, 확률 컴퓨팅은 아래에 설명된 이유로 인해 결국 기존 디지털 논리와 경쟁하는 데 실패했다. 제1회 (이자 마지막) 확률 컴퓨팅 국제 심포지엄은 1978년에 개최되었고, 이후 몇 년 동안 이 분야의 활발한 연구는 감소했다.
확률 컴퓨팅은 일반적인 컴퓨팅 방법으로는 쇠퇴했지만, 여러 응용 분야에서 가능성을 보여주었다. 연구는 전통적으로 기계 학습 및 제어 분야의 특정 작업에 집중되었다.
비교적 최근에는 확률 컴퓨팅을 오류 정정 코드 디코딩에 적용하는 확률 디코딩으로 관심이 옮겨갔다. 더 최근에는 확률 회로가 윤곽선 검출 및 영상 임계 처리와 같은 영상 처리 작업에 성공적으로 사용되었다. 확률 회로의 최근 발전은 에지 컴퓨팅에서 인공지능(AI) 하드웨어 가속에 유망한 속도와 에너지 효율성 이점을 보여주고 있다.
확률 컴퓨팅은 역사적으로 실패했지만, 특정 문제를 해결하는 데 여전히 유용할 수 있다. 언제 유용한지 이해하려면 확률 컴퓨팅을 기존 디지털 컴퓨팅 방법과 비교하는 것이 유용하다.
각각 formula_12 비트 정밀도를 가진 두 숫자를 곱한다고 가정하자. 일반적인 세로 곱셈 방법을 사용하면 formula_13 연산을 수행해야 한다. 확률 컴퓨팅을 사용하면 임의의 수의 비트를 AND 연산할 수 있으며 기대값은 항상 정확하다. (그러나 적은 수의 샘플로는 분산으로 인해 실제 결과가 매우 부정확해진다.)
또한 디지털 곱셈기의 기본 연산은 전가산기인 반면, 확률 컴퓨터는 AND 게이트만 필요하다. 게다가 디지털 곱셈기는 단순히 formula_14개의 입력 와이어가 필요하지만, 확률 곱셈기는 두 개의 입력 와이어만 필요하다. (그러나 디지털 곱셈기가 출력을 직렬화한다면 두 개의 입력 와이어만 필요할 것이다.)
또한 확률 컴퓨팅은 노이즈에 강하다. 스트림의 몇몇 비트가 뒤집혀도 이러한 오류는 해결책에 큰 영향을 미 미치지 않는다.
또한 확률 컴퓨팅 요소는 입력 도착 시간의 왜곡을 허용한다. 입력이 시간적으로 어긋나 있어도 회로는 올바르게 작동한다. 결과적으로 확률 시스템은 전역 클록 및 값비싼 클록 분배 네트워크를 사용하는 대신 저렴한 로컬 생성 클록으로 작동하도록 설계할 수 있다.
마지막으로 확률 컴퓨팅은 비트 스트림을 확장할수록 더욱 정확해지는 해결책 추정치를 제공한다. 특히, 매우 빠르게 대략적인 추정치를 제공한다. 이 속성은 일반적으로 점진적 정밀도라고 불리며, 계산이 진행됨에 따라 확률 수(비트 스트림)의 정밀도가 증가함을 시사한다. 이는 숫자의 최상위 비트가 최하위 비트보다 먼저 도착하는 것과 같다. 기존 산술 회로에서는 최상위 비트가 보통 마지막에 도착하는 것과는 다르다. 일부 반복 시스템에서는 점진적 정밀도를 통해 얻은 부분 해결책이 전통적인 컴퓨팅 방법보다 빠른 피드백을 제공하여 수렴 속도를 높일 수 있다.
확률 컴퓨팅은 본질적으로 무작위적이다. 무작위 비트 스트림을 검사하고 기본 값을 재구성하려고 할 때, 유효 정밀도는 샘플의 분산으로 측정될 수 있다. 위 예시에서 디지털 곱셈기는 formula_14 비트 정확도로 숫자를 계산하므로 정밀도는 formula_16이다. 무작위 비트 스트림을 사용하여 숫자를 추정하고 해결책 추정치의 표준 편차가 최소한 formula_16이 되기를 원한다면, formula_18개의 샘플이 필요할 것이다. 이는 작업량의 기하급수적인 증가를 나타낸다. 그러나 특정 응용 분야에서는 확률 컴퓨팅의 점진적 정밀도 속성을 활용하여 이러한 기하급수적인 손실을 보상할 수 있다.
둘째, 확률 컴퓨팅은 무작위 편향 비트 스트림을 생성하는 방법이 필요하다. 실제로 이러한 스트림은 유사난수 생성기로 생성된다. 불행히도 (유사)무작위 비트를 생성하는 것은 상당히 비용이 많이 든다(예를 들어 전가산기 비용에 비해). 따라서 확률 컴퓨팅의 게이트 수준 이점은 일반적으로 사라진다.
셋째, 확률 컴퓨팅의 분석은 비트 스트림이 독립적(비상관적)이라고 가정한다. 이 가정이 유효하지 않으면 확률 컴퓨팅은 극적으로 실패할 수 있다. 예를 들어, formula_3에 대한 비트 스트림을 자기 자신과 곱하여 formula_20를 계산하려고 하면 프로세스가 실패한다. formula_21이므로 확률 계산은 formula_22를 산출할 것이며, 이는 일반적으로 참이 아니다( formula_230 또는 1이 아닌 한). 피드백이 있는 시스템에서는 비상관 문제 가 더 복잡한 방식으로 나타날 수 있다. 확률 프로세서 시스템은 래칭(latching)에 취약하며, 여기서 다른 구성 요소 간의 피드백이 교착 상태에 도달할 수 있다. 래칭을 해결하기 위해 시스템을 비상관화하는 데 많은 노력을 기울여야 한다.
넷째, 일부 디지털 함수는 매우 간단한 확률적 대응물(곱셈과 AND 게이트 사이의 변환과 같이)을 가지고 있지만, 많은 함수는 그렇지 않다. 이러한 함수를 확률적으로 표현하려고 하면 다양한 문제점이 발생할 수 있다. 예를 들어, 확률 디코딩은 함수 formula_24의 계산을 필요로 한다. 이 함수를 계산할 수 있는 단일 비트 연산은 없으며, 일반적인 해결책은 상관된 출력 비트를 생성하는 것을 포함하는데, 이는 위에서 보았듯이 많은 문제를 일으킬 수 있다.
다른 함수(예: 평균 연산자 formula_25)는 스트림의 간축(decimation) 또는 확장(inflation)을 필요로 한다. 정밀도와 메모리 간의 절충은 어려울 수 있다.
확률 디코딩.
확률 컴퓨팅은 일반적인 계산 방법으로 고려될 때 여러 가지 결함이 있지만, 그 강점을 강조하는 특정 응용 분야가 있다. 주목할 만한 한 가지 경우는 특정 오류 정정 코드의 디코딩에서 발생한다.
확률 컴퓨팅과 관련 없는 개발에서 신뢰전파 알고리즘을 사용하는 LDPC 코드의 매우 효과적인 디코딩 방법이 개발되었다. 이 맥락에서 신뢰 전파는 두 가지 기본 연산(본질적으로 확률적 XOR 연산과 평균 연산)을 사용하여 특정 매개변수를 반복적으로 재추정하는 것을 포함한다.
2003년, 연구원들은 이 두 연산이 확률 컴퓨팅으로 매우 간단하게 모델링될 수 있음을 깨달았다. 게다가 신뢰 전파 알고리즘이 반복적이기 때문에 확률 컴퓨팅은 더 빠른 수렴으로 이어질 수 있는 부분 해결책을 제공한다. 확률 디코더의 하드웨어 구현은 FPGAs에 구축되었다.
이러한 방법의 지지자들은 확률 디코딩의 성능이 디지털 대안과 경쟁할 만하다고 주장한다.
확률 컴퓨팅에 대한 결정론적 방법.
SC 회로로 완전히 정확한 계산을 수행하기 위한 SC의 결정론적 방법이 개발되었다. 이 방법들의 본질적인 원리는 한 비트 스트림의 모든 비트가 다른 비트 스트림의 모든 비트와 정확히 한 번 상호작용한다는 것이다. 이 방법들로 완전히 정확한 결과를 얻으려면 연산은 입력 비트 스트림 길이의 곱만큼 실행되어야 한다. 결정론적 방법은 단항 비트 스트림, 유사난수 비트 스트림, 및 저불일치 비트 스트림을 기반으로 개발되었다.
확률 컴퓨팅의 변형.
기본 확률 컴퓨팅 패러다임에는 여러 가지 변형이 있다. 더 자세한 정보는 Mars와 Poppelbaum의 참고 서적에서 찾을 수 있다.
번들 처리(Bundle Processing)는 스트림 대신 고정된 수의 비트를 전송하는 것을 포함한다. 이 접근 방식의 장점 중 하나는 정밀도가 향상된다는 것이다. 그 이유를 이해하기 위해 formula_26개의 비트를 전송한다고 가정하자. 일반적인 확률 컴퓨팅에서는 추정치의 분산 때문에 대략 formula_27개의 다른 값을 표현할 수 있다. 번들 처리에서는 formula_28의 정밀도를 표현할 수 있다. 그러나 번들 처리는 일반 확률 처리와 동일한 오류 강건성을 유지한다.
에르고딕 처리(Ergodic Processing)는 번들 스트림을 전송하는 것을 포함하며, 이는 일반 확률 처리와 번들 처리의 이점을 모두 포착한다.
버스트 처리(Burst Processing)는 증가하는 스트림을 통해 숫자를 더 높은 기저로 인코딩한다. 예를 들어, 우리는 4.3을 10진수로 다음과 같이 인코딩할 것이다.
이전 스트림의 평균값이 4.3이기 때문이다. 이 표현은 여러 가지 장점을 제공한다. 숫자가 증가하는 순서로 나타나기 때문에 무작위화가 없어 PRNG 문제가 방지되지만, 확률 컴퓨팅의 많은 장점(예: 해결책의 부분적 추정)은 유지된다. 또한 번들 및 에르고딕 처리의 선형 정밀도를 유지한다.
컴퓨터 과학 내 논리 또는 논리학(logic)은 논리학 분야와 컴퓨터 과학 분야의 중첩되는 부분을 다룬다. 이 주제는 크게 세 가지 주요 영역으로 나눌 수 있다.
이론적 기초 및 분석.
논리학은 컴퓨터 과학에서 근본적인 역할을 한다. 특히 중요한 논리학의 주요 분야로는 계산 가능성 이론 (이전에는 재귀 이론이라고 불림), 양상 논리 및 범주론이 있다. 계산 이론은 알론조 처치와 앨런 튜링과 같은 논리학자와 수학자가 정의한 개념을 기반으로 한다. 처치는 람다 정의 가능성 개념을 사용하여 알고리즘적으로 해결 불가능한 문제의 존재를 처음으로 보여주었다. 튜링은 기계적 절차라고 불릴 수 있는 것에 대한 첫 번째 설득력 있는 분석을 제시했으며, 쿠르트 괴델은 튜링의 분석이 "완벽하다"고 단언했다. 또한 논리학과 컴퓨터 과학 사이의 이론적 중복의 다른 주요 영역은 다음과 같다.
논리학자를 돕기 위한 컴퓨터.
인공지능이라는 용어를 사용한 최초의 응용 프로그램 중 하나는 1956년 앨런 뉴얼, 클리프 쇼, 허버트 사이먼이 개발한 논리 이론가 시스템이었다. 논리학자가 하는 일 중 하나는 논리학에서 일련의 명제를 취하고 논리학의 법칙에 따라 참이어야 하는 결론(추가 명제)을 추론하는 것이다. 예를 들어, "모든 인간은 죽는다"와 "소크라테스는 인간이다"라는 명제가 주어지면 유효한 결론은 "소크라테스는 죽는다"이다. 물론 이것은 사소한 예시이다. 실제 논리 시스템에서는 명제가 수없이 많고 복잡할 수 있다. 이러한 종류의 분석이 컴퓨터 사용에 의해 크게 도움이 될 수 있다는 점은 일찍이 인식되었다. 논리 이론가는 버트런드 러셀과 앨프리드 노스 화이트헤드가 그들의 영향력 있는 수리논리학 저서인 수학 원리에서 수행한 이론적 작업을 검증했다. 또한, 후속 시스템은 논리학자들이 새로운 수학 정리와 증명을 검증하고 발견하는 데 활용되었다.
컴퓨터를 위한 논리 응용.
수리논리학은 인공지능 (AI) 분야에 항상 강력한 영향을 미쳤다. 이 분야의 초기부터 논리적 추론을 자동화하는 기술이 문제를 해결하고 사실로부터 결론을 도출하는 데 큰 잠재력을 가질 수 있다는 것을 인식했다. 론 브래치맨은 1차 논리 (FOL)를 모든 AI 지식 표현 형식주의가 평가되어야 하는 척도로 설명했다. 1차 논리는 정보를 기술하고 분석하는 일반적이고 강력한 방법이다. FOL 자체가 컴퓨터 언어로 단순히 사용되지 않는 이유는 실제로 너무 표현력이 풍부하기 때문이다. 즉, FOL은 아무리 강력한 컴퓨터라도 해결할 수 없는 명제를 쉽게 표현할 수 있다. 이러한 이유로 모든 형태의 지식 표현은 어떤 의미에서 표현력과 계산 가능성 사이의 절충안이다. 언어가 표현력이 풍부할수록 (즉, FOL에 가까울수록) 느리고 무한 루프에 빠질 가능성이 높다는 널리 퍼진 믿음이 있다. 그러나 헹 장(Heng Zhang) 외 연구진의 최근 연구에서 이 믿음은 엄격하게 도전받았다. 그들의 연구 결과는 모든 보편적 지식 표현 형식주의가 재귀적으로 동형이라는 것을 확립한다. 더욱이, 그들의 증명은 FOL이 계산적으로 실현 가능한 오버헤드, 특히 결정론적 다항 시간 또는 더 낮은 복잡도 내에서 튜링 기계로 정의된 순수 절차적 지식 표현 형식주의로 번역될 수 있음을 보여준다.
예를 들어, 전문가 시스템에서 사용되는 IF–THEN 규칙은 FOL의 매우 제한된 부분 집합에 근접한다. 전체 범위의 논리 연산자를 가진 임의의 공식 대신, 시작점은 논리학자들이 전건 긍정이라고 부르는 것이다. 결과적으로, 규칙 기반 시스템은 특히 최적화 알고리즘과 컴파일을 활용하는 경우 고성능 계산을 지원할 수 있다.
한편, 1차 논리의 혼 절 부분 집합과 비단조 형태의 부정을 결합한 논리형 프로그래밍은 높은 표현력과 효율적인 구현을 모두 가지고 있다. 특히, 논리형 프로그래밍 언어인 프롤로그는 튜링 완전 프로그래밍 언어이다. 데이터로그는 관계형 데이터베이스 모델을 재귀적 관계로 확장하며, 응답 집합 프로그래밍은 어려운 (주로 NP-완전) 탐색 문제에 중점을 둔 논리형 프로그래밍의 한 형태이다.
논리 이론의 또 다른 주요 연구 분야는 소프트웨어 공학이다. 지식 기반 소프트웨어 보조 장치 및 프로그래머 도제 프로그램과 같은 연구 프로젝트는 소프트웨어 사양의 정확성을 검증하기 위해 논리 이론을 적용했다. 또한 논리 도구를 사용하여 사양을 다양한 플랫폼에서 효율적인 코드로 변환하고 구현과 사양 간의 동등성을 증명했다. 이러한 형식 변환 기반 접근 방식은 전통적인 소프트웨어 개발보다 훨씬 더 많은 노력이 필요하다. 그러나 적절한 형식주의와 재사용 가능한 템플릿이 있는 특정 도메인에서는 이 접근 방식이 상업용 제품에 대해 실행 가능하다는 것이 입증되었다. 적절한 도메인은 일반적으로 시스템 오류가 인간 또는 재정적 비용이 과도하게 높은 무기 시스템, 보안 시스템 및 실시간 금융 시스템과 같은 도메인이다. 이러한 도메인의 예로는 초고집적 (VLSI) 설계 – CPU 및 디지털 장치의 기타 중요 구성 요소에 사용되는 칩을 설계하는 프로세스가 있다. 칩의 오류는 치명적일 수 있다. 소프트웨어와 달리 칩은 패치하거나 업데이트할 수 없다. 결과적으로 정형 기법을 사용하여 구현이 사양과 일치함을 증명하는 상업적 정당성이 있다.
컴퓨터 기술에 대한 논리학의 또 다른 중요한 응용 분야는 프레임 언어 및 자동 분류기 영역이다. KL-ONE과 같은 프레임 언어는 집합론 및 1차 논리로 직접 매핑될 수 있다. 이를 통해 분류기라고 불리는 전문화된 정리 증명기가 주어진 모델에서 집합, 부분집합 및 관계 간의 다양한 선언을 분석할 수 있다. 이러한 방식으로 모델의 유효성을 검사하고 일치하지 않는 정의를 플래그 지정할 수 있다. 분류기는 또한 새로운 정보를 추론할 수 있다. 예를 들어, 기존 정보를 기반으로 새로운 집합을 정의하고 새로운 데이터를 기반으로 기존 집합의 정의를 변경할 수 있다. 이러한 유연성 수준은 끊임없이 변화하는 인터넷 세상을 처리하는 데 이상적이다. 분류기 기술은 웹 온톨로지 언어와 같은 언어 위에 구축되어 기존 인터넷 위에 논리적 의미 수준을 허용한다. 이 계층을 시맨틱 웹이라고 한다.
시간 논리는 동시 시스템에서 추론하는 데 사용된다.
컴퓨터 과학에서 알고리즘 효율성(algorithmic efficiency)은 알고리즘이 사용하는 연산 자원의 양과 관련된 속성이다. 알고리즘 효율성은 반복적이거나 지속적인 프로세스에 대한 엔지니어링 생산성에 비유될 수 있다.
최대 효율성을 위해서는 자원 사용량을 최소화하는 것이 바람직하다. 그러나 시간 및 공간 복잡성과 같은 다른 자원은 직접 비교할 수 없으므로, 두 알고리즘 중 어느 것이 더 효율적인지로 간주될지는 종종 어떤 효율성 척도가 가장 중요한지에 따라 달라진다.
예를 들어, 사이클 정렬과 팀소트는 모두 항목 목록을 가장 작은 것부터 가장 큰 것까지 정렬하는 알고리즘이다. 사이클 정렬은 항목 수의 제곱에 비례하는 시간(formula_1, 점근 표기법 참조)으로 목록을 정리하지만, 원본 배열에 대한 쓰기 횟수를 최소화하고 목록 길이에 대해 상수인(formula_2) 적은 양의 추가 주기억장치만 필요로 한다. 팀소트는 목록 길이의 선형로그 시간(수량에 로그를 곱한 값에 비례)으로 목록을 정렬하지만(formula_3), 목록 길이의 선형적인 공간 요구 사항을 가진다(formula_4). 특정 응용 프로그램에서 대용량 목록을 고속으로 정렬해야 하는 경우 팀소트가 더 나은 선택이다. 그러나 정렬의 프로그램/삭제 주기와 메모리 풋프린트를 최소화하는 것이 더 중요하다면 사이클 정렬이 더 나은 선택이다.
시간에 대한 효율성의 중요성은 에이다 러브레이스가 1843년에 찰스 배비지의 기계식 해석 기관에 적용하면서 강조했다.
"거의 모든 계산에서 프로세스 연속을 위한 다양한 배열이 가능하며, 계산 엔진의 목적에 따라 그 중에서 선택에 영향을 미치는 다양한 고려 사항이 있어야 한다. 필수적인 목표 중 하나는 계산 완료에 필요한 시간을 최소화하는 경향이 있는 배열을 선택하는 것이다."
초기 전자 컴퓨터는 속도와 랜덤 액세스 메모리가 모두 제한적이었다. 따라서 시공간 트레이드오프가 발생했다. 태스크는 많은 메모리를 사용하는 빠른 알고리즘을 사용하거나, 적은 메모리를 사용하는 느린 알고리즘을 사용할 수 있었다. 따라서 엔지니어링 트레이드오프는 사용 가능한 메모리에 맞는 가장 빠른 알고리즘을 사용하는 것이었다.
현대 컴퓨터는 초기 컴퓨터보다 훨씬 빠르고 훨씬 더 많은 메모리를 사용할 수 있다(킬로바이트 대신 기가바이트). 그럼에도 불구하고 도널드 커누스는 효율성이 여전히 중요한 고려 사항임을 강조했다.
"기존의 공학 분야에서는 쉽게 얻을 수 있는 12%의 개선조차 결코 한계로 간주되지 않으며, 소프트웨어 공학에서도 동일한 관점이 적용되어야 한다고 생각한다."AI 시대에는 LLM이 작동하는 코드를 생성할 수 있지만, 이러한 코드는 자원 제약적이거나 시간에 민감한 애플리케이션에서 요구되는 성능 표준에 미치지 못하는 경우가 많아 실제 배포를 위한 코드 효율성이 중요한 병목 현상이 된다.
알고리즘은 자원 소비(연산 비용이라고도 함)가 허용 가능한 수준이거나 그 이하일 때 효율적이라고 간주된다. 대략적으로 말해 '허용 가능'하다는 것은 일반적으로 입력 크기의 함수로서 사용 가능한 컴퓨터에서 합리적인 시간이나 공간 내에 실행될 것임을 의미한다. 1950년대 이후 컴퓨터는 사용 가능한 연산 능력과 메모리 양 모두에서 극적인 증가를 보였으므로, 현재 허용 가능한 수준은 불과 10년 전에는 허용되지 않았을 것이다. 사실, 컴퓨터 성능이 약 2년마다 두 배로 증가한 덕분에, 현대 스마트폰과 임베디드 시스템에서 허용 가능한 수준의 효율성을 보이는 작업도 10년 전에는 산업용 서버에서 허용할 수 없을 정도로 비효율적이었을 수 있다.
컴퓨터 제조업체는 종종 더 높은 성능을 가진 새로운 모델을 출시한다. 소프트웨어 비용은 상당히 높을 수 있으므로, 어떤 경우에는 더 높은 성능을 얻는 가장 간단하고 저렴한 방법은 기존 컴퓨터와 호환되는 한 더 빠른 컴퓨터를 구매하는 것일 수 있다.
알고리즘이 사용하는 자원을 측정하는 방법은 여러 가지가 있다. 가장 일반적인 두 가지 측정값은 속도와 메모리 사용량이다. 다른 측정값으로는 전송 속도, 임시 디스크 사용량, 장기 디스크 사용량, 전력 소비량, 총소유비용, 외부 자극에 대한 응답 시간, 등이 있을 수 있다. 이러한 측정값 중 다수는 알고리즘 입력의 크기, 즉 처리할 데이터의 양에 따라 달라진다. 또한 데이터가 배열되는 방식에 따라 달라질 수도 있다. 예를 들어, 일부 정렬 알고리즘은 이미 정렬되어 있거나 역순으로 정렬된 데이터에서 성능이 좋지 않다.
실제로 정확도와 정밀도 및 신뢰성에 대한 요구 사항과 같이 알고리즘의 효율성에 영향을 미칠 수 있는 다른 요소가 있다. 아래에서 자세히 설명하겠지만, 알고리즘이 구현되는 방식도 실제 효율성에 상당한 영향을 미칠 수 있지만, 이 중 많은 측면은 최적화 문제와 관련이 있다.
이론적 분석.
이론적인 알고리즘 분석에서는 일반적으로 점근적 의미에서 복잡도를 추정한다. 자원 소비 또는 "복잡도"를 설명하는 데 가장 일반적으로 사용되는 표기법은 도널드 커누스의 점근 표기법으로, 입력 크기 formula_5의 함수로 알고리즘의 복잡도를 나타낸다. 점근 표기법은 함수의 복잡도에 대한 점근적 측정치이며, formula_6는 대략적으로 알고리즘의 시간 요구 사항이 formula_7에 비례하며, formula_5이 무한히 커질 때 함수의 증가에 formula_7보다 적게 기여하는 하위 차수 항을 생략한다는 의미이다. 이 추정치는 formula_5이 작을 때 오해의 소지가 있을 수 있지만, 표기법이 점근적이므로 formula_5이 클 때는 일반적으로 충분히 정확하다. 예를 들어, 버블 정렬은 몇 개의 항목만 정렬할 때는 합병 정렬보다 빠를 수 있다. 그러나 두 구현 모두 작은 목록에 대한 성능 요구 사항을 충족할 가능성이 있다. 일반적으로 프로그래머는 대규모 입력 크기에 효율적으로 확장되는 알고리즘에 관심이 있으며, 대부분의 데이터 집약적인 프로그램에서 접하는 길이의 목록에는 버블 정렬보다 합병 정렬이 선호된다.
알고리즘의 점근적 시간 복잡도에 적용되는 점근 표기법의 몇 가지 예는 다음과 같다.
새로운 버전의 소프트웨어 또는 경쟁 시스템과의 비교를 위해 때때로 벤치마크가 사용되며, 이는 알고리즘의 상대적 성능을 측정하는 데 도움이 된다. 예를 들어, 새로운 정렬 알고리즘이 생성되면 기존 데이터에서 이전과 같이 효율적인지 확인하기 위해 이전 버전과 비교할 수 있으며, 기능 개선 사항을 고려한다. 벤치마크는 고객이 기능 및 성능 측면에서 특정 요구 사항에 가장 적합한 제품을 추정하기 위해 대체 공급업체의 다양한 제품을 비교할 때 사용할 수 있다. 예를 들어, 메인프레임 세계에서 Syncsort와 같은 독립 소프트웨어 회사의 특정 독점 정렬 제품은 IBM과 같은 주요 공급업체의 제품과 속도 면에서 경쟁한다.
일부 벤치마크는 예를 들어 다양한 컴파일 언어와 해석 언어의 상대적 속도를 비교하는 분석을 생성할 기회를 제공한다
그리고 컴퓨터 언어 벤치마크 게임은 여러 프로그래밍 언어에서 일반적인 프로그래밍 문제 구현의 성능을 비교한다.
심지어 "DIY" 벤치마크를 만드는 것도 다양한 사용자 지정 기준을 사용하여 다른 프로그래밍 언어의 상대적 성능을 보여줄 수 있다. 이는 크리스토퍼 W. 카우웰-샤(Christopher W. Cowell-Shah)의 "9개 언어 성능 라운드업"이 예시로 보여주듯이 매우 간단하다.
구현 관련 고려 사항.
구현 문제 또한 효율성에 영향을 미칠 수 있는데, 예를 들어 프로그래밍 언어의 선택, 알고리즘이 실제로 코드화되는 방식, 특정 언어를 위한 컴파일러의 선택, 사용된 컴파일러 옵션, 심지어 사용 중인 운영체제 등이다. 많은 경우 인터프리터로 구현된 언어는 컴파일러로 구현된 언어보다 훨씬 느릴 수 있다. JIT 컴파일과 인터프리트 언어에 대한 문서를 참조하라.
시간 또는 공간 문제에 영향을 미칠 수 있지만 프로그래머의 통제 범위를 벗어날 수 있는 다른 요인들도 있다. 여기에는 데이터 정렬, 데이터 세분성, 캐시 국부성, 캐시 일관성, 쓰레기 수집, 명령어 수준 병렬성, 멀티스레딩 (하드웨어 또는 소프트웨어 수준에서), 동시 멀티스레딩, 서브루틴 호출 등이 포함된다.
일부 프로세서에는 벡터 처리 기능이 있어 단일 명령어로 여러 피연산자를 처리할 수 있다. 프로그래머나 컴파일러가 이러한 기능을 사용하기 쉬울 수도 있고 그렇지 않을 수도 있다. 순차 처리를 위해 설계된 알고리즘은 병렬 처리를 사용하기 위해 완전히 재설계해야 할 수도 있고, 쉽게 재구성할 수도 있다. 2010년대 후반에 병렬 및 분산 컴퓨팅의 중요성이 커짐에 따라, CUDA, 텐서플로, 아파치 하둡, OpenMP, MPI와 같은 병렬 및 분산 컴퓨팅 시스템을 위한 효율적인 고급 API에 대한 투자가 증가하고 있다.
프로그래밍에서 발생할 수 있는 또 다른 문제는 동일한 명령어 집합(예: X86-64 또는 ARM)과 호환되는 프로세서가 명령어를 다른 방식으로 구현할 수 있으므로, 일부 모델에서는 상대적으로 빠른 명령어가 다른 모델에서는 상대적으로 느릴 수 있다는 것이다. 이는 종종 최적화 컴파일러에게 어려움을 준다. 최적화 컴파일러는 성능을 위해 프로그램을 최적으로 최적화하려면 컴파일 대상의 특정 CPU 및 기타 하드웨어에 대한 광범위한 지식을 가지고 있어야 한다. 극단적인 경우, 컴파일러는 컴파일 대상 플랫폼에서 지원되지 않는 명령어를 에뮬레이션해야 할 수 있으며, 그 플랫폼에서는 계산할 수 없는 결과를 생성하기 위해 코드를 생성하거나 외부 라이브러리 호출을 링크해야 할 수 있다. 이는 다른 플랫폼에서는 기본적으로 지원되고 하드웨어에서 더 효율적일지라도 마찬가지이다. 이는 임베디드 시스템에서 부동소수점과 관련하여 자주 발생하는데, 작고 저전력 마이크로컨트롤러는 종종 부동소수점 연산에 대한 하드웨어 지원이 부족하여 부동소수점 계산을 생성하기 위해 계산 비용이 많이 드는 소프트웨어 루틴이 필요하기 때문이다.
자원 사용 측정.
측정값은 일반적으로 입력 크기 formula_12의 함수로 표현된다.
가장 일반적인 두 가지 측정값은 다음과 같다.
배터리 전원으로 작동하는 컴퓨터(예: 랩톱 및 스마트폰) 또는 매우 길거나 큰 계산(예: 슈퍼컴퓨터)의 경우 관심 있는 다른 측정값은 다음과 같다.
, 전력 소비는 임베디드 사물인터넷 장치에서 시스템 온 칩 장치, 서버 팜에 이르기까지 모든 유형과 규모의 계산 작업에 대한 중요한 측정 지표로 성장하고 있다. 이러한 추세는 종종 그린 컴퓨팅으로 언급된다.
덜 일반적인 계산 효율성 측정값도 일부 경우에 관련될 수 있다.
일반적으로 시간 복잡도와 같은 개념을 사용하는 알고리즘 분석을 사용하여 입력 데이터 크기의 함수로 실행 시간을 추정할 수 있다. 결과는 일반적으로 점근 표기법을 사용하여 표현된다. 이는 알고리즘을 비교하는 데 유용하며, 특히 많은 양의 데이터를 처리해야 할 때 유용하다. 데이터 양이 적을 때는 알고리즘 성능을 비교하기 위해 더 자세한 추정치가 필요하지만, 이는 중요성이 떨어질 가능성이 높다. 병렬 알고리즘은 분석하기가 더 어려울 수 있다.
벤치마크는 실제로 알고리즘의 성능을 평가하는 데 사용될 수 있다. 많은 프로그래밍 언어에는 CPU 타임 사용량을 제공하는 함수가 있다. 오래 실행되는 알고리즘의 경우 경과 시간도 중요할 수 있다. 결과는 일반적으로 여러 테스트를 통해 평균화되어야 한다.
실행 기반 프로파일링은 하드웨어 구성과 다중 처리 및 다중 프로그래밍 환경에서 동시에 실행되는 다른 프로그램 또는 작업의 가능성에 매우 민감할 수 있다.
이러한 종류의 테스트는 특정 프로그래밍 언어, 컴파일러 및 컴파일러 옵션의 선택에도 크게 의존하므로, 비교되는 알고리즘은 모두 동일한 조건에서 구현되어야 한다.
이 섹션은 알고리즘이 실행되는 동안 메모리 리소스(레지스터, 캐시, RAM, 가상 메모리, 보조 메모리) 사용에 관한 것이다. 위에서 언급한 시간 분석과 마찬가지로, 알고리즘 분석을 수행하고 일반적으로 공간 복잡도 분석을 사용하여 입력 데이터 크기의 함수로 필요한 실행 시간 메모리를 추정한다. 결과는 일반적으로 점근 표기법을 사용하여 표현된다.
고려해야 할 메모리 사용량 측면은 최대 4가지가 있다.
초기 전자 컴퓨터와 초기 가정용 컴퓨터는 작업 메모리 양이 상대적으로 적었다. 예를 들어, 1949년 EDSAC은 최대 1024개의 17비트 워드 작업 메모리를 가졌고, 1980년 신클레어 ZX80은 초기에는 1024개의 8비트 바이트 작업 메모리를 가졌다. 2010년대 후반에는 개인용 컴퓨터가 일반적으로 4에서 32 GB의 RAM을 가지며, 이는 3억 배 이상 증가한 메모리 양이다.
캐싱과 메모리 계층.
현대 컴퓨터는 상대적으로 많은 양의 메모리(기가바이트 단위)를 가질 수 있으므로, 알고리즘을 제한된 양의 메모리에 맞춰야 하는 문제는 예전과 같지 않다. 그러나 다양한 유형의 메모리와 상대적인 접근 속도는 중요하다.
메모리 요구 사항이 캐시 메모리에 맞는 알고리즘은 주 메모리에 맞는 알고리즘보다 훨씬 빠르며, 이는 페이징에 의존해야 하는 알고리즘보다 훨씬 더 빠르다. 이 때문에 캐시 교체 정책은 고성능 컴퓨팅에 매우 중요하며, 캐시 인식 프로그래밍과 데이터 정렬도 마찬가지이다. 문제를 더욱 복잡하게 만드는 것은 일부 시스템에는 다양한 실제 속도를 가진 최대 3단계의 캐시 메모리가 있다는 것이다. 시스템마다 이러한 다양한 유형의 메모리 양이 다르므로 알고리즘 메모리 요구 사항의 효과는 시스템마다 크게 다를 수 있다.
초기 전자 컴퓨팅 시대에는 알고리즘과 데이터가 주 메모리에 맞지 않으면 알고리즘을 사용할 수 없었다. 오늘날 가상 메모리의 사용은 훨씬 더 많은 메모리를 제공하는 것처럼 보이지만, 성능 저하가 따른다. 알고리즘과 데이터가 캐시 메모리에 맞는다면 훨씬 더 빠른 속도를 얻을 수 있으며, 이 경우 공간을 최소화하는 것이 시간 최소화에도 도움이 된다. 이를 국소성의 원리라고 하며, 참조 국부성, 공간적 국부성, 시간적 국부성으로 세분화할 수 있다. 캐시 메모리에 완전히 맞지 않더라도 참조 국부성을 보이는 알고리즘은 합리적으로 잘 수행될 수 있다.
프로그래밍 언어 이론(Programming language theory, PLT)은 프로그래밍 언어로 알려진 형식 언어의 설계, 구현, 분석, 특성화 및 분류를 다루는 컴퓨터 과학의 한 분야이다. 프로그래밍 언어 이론은 언어학, 수학, 소프트웨어 공학을 포함한 다른 분야와 밀접한 관련이 있다.
어떤 면에서 프로그래밍 언어 이론의 역사는 프로그래밍 언어 개발보다 앞선다. 1930년대 알론조 처치와 스티븐 클레이니가 개발한 람다 대수는 프로그래머가 컴퓨터 시스템에 알고리즘을 설명하는 수단이라기보다는 계산을 모델링하기 위한 것이었지만, 일부에서는 이를 세계 최초의 프로그래밍 언어로 간주한다. 많은 현대 함수형 프로그래밍 언어는 람다 대수 위에 "얇은 베니어판"을 제공하는 것으로 묘사되었으며, 많은 언어가 람다 대수 관점에서 쉽게 설명된다.
최초로 발명된 프로그래밍 언어는 1940년대 콘라트 추제가 설계한 플랑칼퀼이지만, 1972년까지 대중에게 알려지지 않았고 1998년까지 구현되지 않았다. 최초로 널리 알려지고 성공한 고급 프로그래밍 언어는 1954년부터 1957년까지 존 배커스가 이끄는 IBM 연구팀이 개발한 FORTRAN (Formula Translation)이었다. FORTRAN의 성공으로 과학자 위원회가 "보편적인" 컴퓨터 언어를 개발하기 위해 구성되었으며, 그 노력의 결과가 ALGOL 58이었다. 별도로 매사추세츠 공과대학교(MIT)의 존 매카시는 학계에서 성공을 거둔 최초의 언어인 리습을 개발했다. 이러한 초기 노력의 성공으로 프로그래밍 언어는 1960년대 이후 활발한 연구 주제가 되었다.
그 이후 프로그래밍 언어 이론 역사에서 몇 가지 주요 사건들:
하위 분야 및 관련 분야.
프로그래밍 언어 이론 내에 있거나 이에 깊은 영향을 미치는 여러 연구 분야가 있으며, 이들 중 상당수는 상당한 중첩을 이룬다. 또한 PLT는 계산 가능성 이론, 범주론, 집합론을 포함한 많은 다른 수학 분야를 활용한다.
형식 의미론.
형식 의미론은 컴퓨터 프로그램과 프로그래밍 언어의 동작에 대한 형식적인 명세이다. 컴퓨터 프로그램의 의미 또는 "의미"를 설명하는 세 가지 일반적인 접근 방식은 표시적 의미론, 동작적 의미론 및 공리적 의미론이다.
유형 이론은 자료형 체계에 대한 연구이며, 이는 "계산하는 값의 종류에 따라 구문을 분류하여 특정 프로그램 동작이 없음을 증명하는 다루기 쉬운 구문 방법"이다. 많은 프로그래밍 언어는 자료형 체계의 특성으로 구별된다.
프로그램 분석 및 변환.
프로그램 분석은 프로그램을 검사하고 주요 특성(예: 특정 종류의 프로그램 오류 부재)을 결정하는 일반적인 문제이다. 프로그램 변환은 한 형식(언어)의 프로그램을 다른 형식으로 변환하는 과정이다.
비교 프로그래밍 언어 분석.
비교 프로그래밍 언어 분석은 언어의 특성에 따라 언어를 다른 유형으로 분류하려고 한다. 넓은 범주의 언어는 종종 프로그래밍 패러다임으로 알려져 있다.
제네릭 및 메타프로그래밍.
메타프로그래밍은 실행될 때 프로그램(다른 언어로 또는 원본 언어의 하위 집합으로)을 결과로 생성하는 고차원 프로그램의 생성이다.
도메인 특화 언어.
도메인 특화 언어는 주어진 도메인 또는 해당 부분의 문제를 효율적으로 해결하기 위해 구성된 언어이다.
컴파일러 구성.
컴파일러 이론은 컴파일러(또는 더 일반적으로 번역기)를 작성하는 이론이다. 즉, 한 언어로 작성된 프로그램을 다른 형식으로 번역하는 프로그램이다. 컴파일러의 동작은 전통적으로 구문 분석(스캔 및 구문 분석), 의미 분석(프로그램이 무엇을 해야 하는지 결정), 최적화(일부 측정 기준에 따라 프로그램의 성능 향상; 일반적으로 실행 속도) 및 코드 생성(일부 대상 언어로 동등한 프로그램 생성 및 출력; 종종 중앙 처리 장치(CPU)의 명령어 집합)으로 나뉜다.
런타임 시스템.
런타임 시스템은 가상 머신, 쓰레기 수집 및 외부 함수 인터페이스를 포함한 프로그래밍 언어 런타임 환경과 그 구성 요소의 개발을 의미한다.
학술지, 출판물 및 학회.
학회는 프로그래밍 언어 연구를 발표하는 주요 장소이다. 가장 잘 알려진 학회로는 프로그래밍 언어 원리 심포지엄(POPL), 프로그래밍 언어 설계 및 구현(PLDI), 국제 함수형 프로그래밍 학회(ICFP), 객체 지향 프로그래밍, 시스템, 언어 및 응용에 대한 국제 학회(OOPSLA) 및 ASPLOS가 있다.
PLT 연구를 게재하는 주목할 만한 학술지로는 ACM Transactions on Programming Languages and Systems(TOPLAS), Journal of Functional Programming(JFP), Journal of Functional and Logic Programming 및 Higher-Order and Symbolic Computation이 있다.
기업 정보 시스템, 전사적 정보 시스템(Enterprise information system, EIS)은 통합을 통해 기업 비즈니스 프로세스의 기능을 향상시키는 모든 종류의 정보 시스템이다. 이는 일반적으로 고품질 서비스를 제공하고, 대량의 자료를 처리하며, 크고 복잡할 수 있는 조직이나 기업을 지원할 수 있음을 의미한다. EIS는 기업의 모든 부서와 모든 계층에서 사용될 수 있어야 한다.
'기업(enterprise)'이라는 단어는 다양한 의미를 가질 수 있다. 종종 이 용어는 다국적 기업이나 공공 부문 조직과 같은 매우 큰 조직을 지칭할 때만 사용된다. 그러나 이 용어는 기업의 버즈워드가 됨으로써 사실상 어떤 것을 의미하는 데 사용될 수도 있다.
기업 정보 시스템은 조직이 강력한 기반 위에서 비즈니스 프로세스를 통합하고 조정할 수 있도록 하는 기술 플랫폼을 제공한다. EIS는 현재 고객 관계 관리 및 공급망 관리와 함께 비즈니스 프로세스를 자동화하는 데 사용된다. 기업 정보 시스템은 조직의 중심이 되는 단일 시스템을 제공하여 모든 기능 수준과 관리 계층 구조에 걸쳐 정보가 공유되도록 보장한다.
EIS는 비즈니스 생산성을 높이고 서비스 주기, 제품 개발 주기 및 마케팅 수명 주기를 단축하는 데 사용될 수 있다. 기존 애플리케이션을 통합하는 데 사용될 수 있다. 다른 결과로는 더 높은 운영 효율성과 비용 절감이 포함된다.
재정적 가치는 일반적으로 기업 정보 시스템 구현의 직접적인 결과는 아니다.
설계 단계에서 EIS 효율성 평가의 주요 특징은 명령, 서비스 등과 같은 다양한 메시지가 적시에 전달될 확률이다.
전사적 시스템은 표준 자료 구조를 생성하며 조직 내 여러 정보 시스템으로 인해 발생하는 정보 단편화 문제를 제거하는 데 매우 중요하다. EIS는 레거시 시스템과 달리 자체 거래, 자체 도움 및 일반 및 전문 조건에 적응할 수 있다는 점에서 차별화된다. 기업 정보 시스템과 달리 레거시 시스템은 부서 전체 통신으로 제한된다.
일반적인 기업 정보 시스템은 하나 이상의 데이터 센터에 위치하며, 전사적 소프트웨어를 실행하고, 콘텐츠 관리 시스템과 같이 일반적으로 조직 경계를 넘나드는 애플리케이션을 포함할 수 있다.
인간 중심 컴퓨팅(human-centered computing, HCC)은 혼합 주도형 인간-컴퓨터 시스템의 설계, 개발 및 배포를 연구한다. 이는 인간을 이해하는 것과 계산 인공물을 설계하는 것 모두와 관련된 여러 분야의 융합에서 나타났다. 인간 중심 컴퓨팅은 인간-컴퓨터 상호 작용 및 정보과학과 밀접하게 관련되어 있다. 인간 중심 컴퓨팅은 일반적으로 기술 사용 시스템 및 관행과 관련되어 있는 반면, 인간-컴퓨터 상호 작용은 컴퓨팅 인공물의 인간공학 및 사용성에 더 중점을 둔다. 그리고 정보과학은 정보의 수집, 조작 및 사용을 둘러싼 관행에 중점을 둔다.
인간 중심 컴퓨팅 연구자와 실무자는 일반적으로 컴퓨터 과학, 인간공학, 사회학, 심리학, 인지 과학, 인류학, 언론정보학, 그래픽 디자인, 산업 디자인과 같은 하나 이상의 분야 출신이다. 일부 연구자는 인간이 계산 기술을 중심으로 삶을 채택하고 조직하는 방식에 중점을 두어 개인으로서 그리고 사회 집단으로서 인간을 이해하는 데 중점을 둔다. 다른 연구자는 새로운 계산 인공물을 설계하고 개발하는 데 중점을 둔다.
HCC는 인간의 활동을 지원하는 컴퓨팅 시스템의 설계 및 구현과 관련된 다양한 분야 간의 기존 격차를 해소하는 것을 목표로 한다. 한편, 이는 사람들이 컴퓨터 기술을 사용하는 장치 또는 시스템과 직접 상호 작용하는 응용 프로그램에서 컴퓨터를 사용하는 모든 분야에 적용되는 일련의 방법론이다.
HCC는 개인, 사회 및 문화적 측면을 고려하고 정보 설계, 인간 정보 상호 작용, 인간-컴퓨터 상호 작용, 인간-인간 상호 작용, 컴퓨팅 기술과 예술, 사회 및 문화적 문제 간의 관계와 같은 문제를 다루는 효과적인 컴퓨터 시스템 설계를 촉진한다.
HCC 주제.
미국 국립과학재단(NSF)은 "인간, 컴퓨터 및 환경으로 구성된 3차원 공간"으로 3차원 연구를 정의한다. NSF에 따르면, 인간 차원은 개인의 요구를 지원하는 연구에서부터 목표 지향적 집단으로서의 팀, 그리고 연결된 사람들의 비정형적 집합으로서의 사회에 이른다. 컴퓨터 차원은 고정된 컴퓨팅 장치에서부터 모바일 장치, 그리고 주변 물리적 환경에 내장된 시각/오디오 장치의 컴퓨팅 시스템에 이른다. 환경 차원은 이산 물리적 컴퓨팅 장치에서부터 혼합 현실 시스템, 몰입형 가상 환경에 이른다. 해당 분야의 주제 예시는 아래에 나열되어 있다.
인간 중심 시스템.
인간 중심 시스템(HCS)은 인간 중심 컴퓨팅을 위해 설계된 시스템이다. 이 접근 방식은 마이크 쿨리가 그의 저서 Architect or Bee?에서 루카스 플랜과의 작업 경험을 바탕으로 개발했다. HCS는 인간 활동과 관련된 대화형 시스템의 설계에 중점을 둔다. 클링(Kling) 외 연구진에 따르면, 미국 과학기술위원회의 컴퓨팅, 정보 및 통신 위원회는 인간 중심 시스템, 즉 HCS를 고성능 컴퓨팅 프로그램의 다섯 가지 구성 요소 중 하나로 식별했다. 인간 중심 시스템은 인간 중심 자동화라는 용어로 지칭될 수 있다. 클링 외 연구진에 따르면 HCS는 "다음과 같은 시스템"을 의미한다.
또한 클링 외 연구진은 시스템을 분류할 때 고려해야 할 인간 중심성의 네 가지 차원을 정의한다. 인간 중심 시스템은 대상 사회 조직의 복잡성과 작업 및 정보를 구조화하는 다양한 사회 단위들을 분석해야 한다. 인간 중심성은 시스템의 속성이 아니라 특정 시스템의 이해 관계자 그룹이 시스템의 이점을 평가하는 과정이다. 시스템의 기본 아키텍처는 인간과 기계 간의 현실적인 관계를 반영해야 한다. 시스템이 설계된 목적과 대상은 시스템의 설계, 평가 및 사용의 명시적인 부분이 되어야 한다.
인간-컴퓨터 상호 작용.
인간-컴퓨터 상호 작용 (HCI) 분야에서 "사용자 중심"이라는 용어는 일반적으로 사용된다. 이 접근 방식의 주요 초점은 사용자 요구를 철저히 이해하고 해결하여 설계 프로세스를 이끄는 것이다. 그러나 인간 중심 컴퓨팅(HCC)은 주로 사용자 인터페이스 및 상호 작용을 다루는 사용성공학, 인간-컴퓨터 상호 작용, 인간 요인과 같은 기존 영역을 넘어선다. 전문가들은 HCC를 전통적인 HCI 관행에 비해 학습 과학, 사회과학, 인지 과학, 지능형 시스템과 같은 분야를 더 광범위하게 통합하는 학문으로 정의한다.
인간 중심 컴퓨팅(HCC)의 개념은 컴퓨터 과학의 하위 학문 분야를 넘어 컴퓨터 관련 연구 영역에서 필수적인 측면으로 간주된다. HCC 관점은 "컴퓨팅"이 다양한 작업을 가능하게 하는 유형의 테크놀로지를 포괄하는 동시에 중요한 사회적, 경제적 영향력을 행사한다는 점을 인정한다.
또한 데르토우조스는 HCC가 사용자가 쉽게 탐색할 수 있는 인터페이스라는 개념을 넘어 자연스러운 상호 작용, 자동화, 개인화된 정보 검색, 협업 기능 및 사용자 지정이라는 다섯 가지 기술을 전략적으로 통합하여 어떻게 확장되는지 설명한다.
HCC의 범위가 광범위하지만, HCC 시스템 및 알고리즘 설계 프로세스의 핵심을 구성하는 세 가지 기본 요소가 제안된다.
HCC 응용 프로그램을 위한 시스템 및 알고리즘 설계에서 이러한 요소들을 준수하면 다음과 같은 특성이 나타날 것으로 예상된다.
멀티미디어에서의 인간 중심 활동.
멀티미디어에서의 인간 중심 활동(HCM')은 다음에 따라 미디어 생산, 주석 달기, 구성, 보관, 검색, 공유, 분석 및 통신으로 간주될 수 있으며, 이는 생산, 분석 및 상호 작용의 세 가지 영역으로 분류될 수 있다.
멀티미디어 생산.
멀티미디어 생산은 미디어를 만드는 인간의 작업이다. 예를 들어, 사진 촬영, 오디오 녹음, 리믹스 등. HCM에서 관련된 미디어 생산의 모든 측면은 인간을 직접적으로 포함해야 한다. 멀티미디어 생산에는 두 가지 주요 특징이 있다. 첫 번째는 문화적 및 사회적 요인이다. HCM 생산 시스템은 문화적 차이를 고려해야 하며, 배치될 문화에 따라 설계되어야 한다. 두 번째는 인간의 능력을 고려하는 것이다. HCM 생산에 참여하는 사람들은 생산 과정 중 활동을 완료할 수 있어야 한다. 인간 중심 멀티미디어(HCM) 분야의 멀티미디어는 사진, 오디오 녹음, 리믹스를 포함한 다양한 형태의 미디어 제작 및 개발에 전념한다. HCM을 차별화하는 것은 생산 과정 전반에 걸쳐 인간의 적극적인 참여를 강조한다는 점이다. 이는 HCM 시스템을 특정 문화적 맥락에 맞게 조정하기 위해 문화적 차이를 고려해야 함을 의미한다. 또한 HCM 생산 성공의 핵심 요소는 인간의 능력을 효과적으로 인식하고 활용하는 데 있다. 이는 적극적인 참여를 가능하게 하고 모든 생산 활동의 효율적인 완료를 보장한다.
멀티미디어 분석.
멀티미디어 분석은 인간 활동과 사회적 행동 전반에 대한 자동 분석인 HCM 애플리케이션의 한 유형으로 간주될 수 있다. 인간 커뮤니케이션을 촉진하고 향상시키는 것부터 전문, 엔터테인먼트 및 개인 영역에서 정보 접근 및 검색을 개선하는 것까지 잠재적인 관련 사용 영역이 광범위하다. 인간 중심 멀티미디어(HCM)의 멀티미디어 분석 분야는 인간 활동 및 사회적 행동을 자동으로 분석하는 것을 포함한다. 이 응용 분야는 개인 간의 의사소통을 개선하고 전문, 엔터테인먼트 및 개인 환경에서 정보 접근성을 향상시키는 것을 포함하여 광범위한 영역을 포괄한다. 멀티미디어 분석 활용 가능성은 광범위하며, 단순한 분류를 넘어 인간 행동에 대한 미묘한 이해를 달성한다. 이를 통해 시스템 기능을 향상시키고 사용자에게 개선된 경험을 제공할 수 있다.
멀티미디어 상호 작용.
멀티미디어 상호 작용은 HCM의 상호 작용 활동 영역으로 간주될 수 있다. 사람들이 서로 어떻게, 왜 상호 작용하는지 이해하는 것이 매우 중요하다. 그래야 그러한 커뮤니케이션을 촉진하고 사람들이 자연스러운 방식으로 컴퓨터와 상호 작용할 수 있는 시스템을 구축할 수 있다. 자연스러운 상호 작용을 달성하려면 잠재적인 문화적 배경 차이 때문에 문화적 차이와 사회적 맥락이 고려해야 할 주요 요인이다. 예를 들어, 상호 작용이 물리적으로 위치하고 실시간으로 이루어지는 대면 커뮤니케이션; 상호 작용이 물리적으로 원격이지만 실시간으로 유지되는 라이브-컴퓨터 매개 커뮤니케이션; 인스턴트 SMS, 이메일 등과 같은 비실시간 컴퓨터 매개 커뮤니케이션이 있다.
인간 중심 설계 프로세스.