프로그래밍 심리학
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
프로그래밍 심리학은 프로그래밍 도구와 기술의 사용자 편의성을 연구하는 학문이다. 1970년대 후반과 1980년대 초반에 시작되어, 프로그래밍 성과 향상과 프로그래머의 오류 감소를 목표로 한다. 경험주의, 행동주의, 인본주의, 분석심리학, 인지주의, 구성주의, 정신역동적 접근 등 다양한 심리학적 접근 방식을 활용하며, 프로그래밍과 관련된 인지 편향을 연구하여 소프트웨어 개발 과정의 개선을 모색한다.
더 읽어볼만한 페이지
- 응용심리학 - 기능적 행동 평가
기능적 행동 평가는 응용 행동 분석에서 문제 행동을 유지하는 변인을 식별하는 방법으로, 문제 행동의 기능적인 선행 자극과 결과를 파악하여 문제 행동의 원인이 되는 교육 환경 내 요인을 분석하고 적절한 치료법과 긍정적인 지원 계획을 수립하는 데 기여한다. - 응용심리학 - 교통심리학
교통심리학은 운전 및 교통 환경에서 개인의 인지적, 비인지적, 감각-운동적 측면을 연구하여 운전 행동에 영향을 미치는 다양한 요인을 분석하고 도로 이용 행동을 이해하며 교통 참여의 부정적 영향을 줄이는 방안을 모색하는 학문이다. - 컴퓨터 프로그래밍 - 순서도
순서도는 컴퓨터 알고리즘이나 프로세스를 시각적으로 표현하는 도구로, 흐름 공정 차트에서 기원하여 컴퓨터 프로그래밍 분야에서 알고리즘을 설명하는 데 사용되며, 다양한 종류와 소프트웨어 도구가 존재한다. - 컴퓨터 프로그래밍 - 의사코드
의사코드는 컴퓨터 과학 및 수치 계산 분야에서 알고리즘을 설명하기 위해 사용되는 비표준적인 언어로, 자연어와 프로그래밍 언어의 요소를 혼합하여 알고리즘의 논리적 흐름을 이해하기 쉽게 하고 프로그래머가 실제 코드로 구현하기 전에 알고리즘을 설계하고 검토하는 데 유용하다. - 인지 - 이해
이해는 지식에 기반하여 대상이나 현상의 의미와 관계를 파악하는 능력으로, 비유나 분석을 통해 이루어지며 인지심리학과 인공지능 분야에서 연구되는 개념이다. - 인지 - 불확실성
불확실성이란 현재나 미래를 정확히 예측할 수 없는 상태를 말하며, 확률을 알 수 없는 근본적인 불확실성도 존재하고, 바람직하지 않은 결과를 초래할 수 있는 위험과는 구별되며, 과학, 경제, 철학 등 다양한 분야에서 다뤄지는 중요한 개념이다.
프로그래밍 심리학 | |
---|---|
개요 | |
![]() | |
분야 | 인지 심리학, 인간-컴퓨터 상호 작용, 소프트웨어 공학 |
하위 분야 | 프로그래밍 언어 디자인 통합 개발 환경 디자인 프로그램 디버깅 프로그래밍 교육 팀 협업 프로그래머의 전문성 |
역사 | |
초기 연구 | 1970년대 |
주요 연구 주제 | 프로그램 이해 디버깅 프로그래밍 언어 습득 |
주요 연구 분야 | |
프로그램 이해 | 프로그래머가 코드를 읽고 이해하는 방식 연구 |
디버깅 | 프로그래머가 오류를 찾고 수정하는 과정 연구 |
프로그래밍 언어 습득 | 사람들이 프로그래밍 언어를 배우는 방법 연구 |
프로그래밍 도구 | 프로그래밍 효율성을 향상시키는 도구 개발 및 평가 |
프로그래밍 패러다임 | 다양한 프로그래밍 패러다임이 프로그래머의 사고방식에 미치는 영향 연구 |
프로그래머의 인지 능력 | 프로그래밍 능력과 관련된 인지 능력 (예: 추상적 사고, 문제 해결 능력) 연구 |
관련 연구 분야 | |
소프트웨어 공학 | 소프트웨어 개발 프로세스 개선 |
인간-컴퓨터 상호 작용 | 프로그래밍 도구 및 인터페이스 디자인 |
인지 심리학 | 프로그래밍과 관련된 인지 과정 연구 |
컴퓨터 과학 교육 | 효과적인 프로그래밍 교육 방법 개발 |
영향력 | |
프로그래밍 언어 디자인 | 더 배우기 쉽고 사용하기 쉬운 언어 디자인에 기여 |
프로그래밍 도구 개발 | 프로그래머의 생산성을 향상시키는 도구 개발에 기여 |
프로그래밍 교육 방법 | 더 효과적인 교육 방법 개발에 기여 |
2. 역사
프로그래밍 심리학의 역사는 1970년대 후반과 1980년대 초반으로 거슬러 올라가는데, 이때 연구자들은 프로그래밍 도구와 기술을 평가할 때 연산 능력뿐만 아니라 사용자 편의성도 고려해야 한다는 것을 깨달았다.[1] 제1회 프로그래머에 대한 경험적 연구 워크숍에서 벤 슈나이더만은 연구자들을 위한 몇 가지 중요한 목표를 제시했다. 이러한 목표에는 현재 언어의 사용 개선, 현재 및 미래 언어 개선, 특수 목적 언어 개발, 도구 및 방법 개선 등이 포함된다. 지난 20년 동안 프로그래밍 심리학에 전념한 두 개의 중요한 워크숍 시리즈가 있었다. 주로 미국에서 개최된 프로그래머에 대한 경험적 연구 워크숍(ESP)과 유럽적 성격을 띤 프로그래밍 심리학 관심 그룹 워크숍(PPIG)이 그것이다. ESP는 프로그래밍의 순수 심리학보다 더 넓은 범위를 가지고 있으며, 반면에 PPIG는 프로그래밍 심리학(PoP) 분야에 더 집중한다. 그러나 PPIG 워크숍과 PPIG 자체는 비공식적인 성격을 띤다. 이는 PoP에 관심 있는 사람들이 모여 토론 내용을 발표하는 그룹이다.
프로그래밍의 목표는 프로그램을 만들 때, 명세서를 충족하고, 일정에 맞추며, 미래에 적응 가능하고, 효율적으로 실행되도록 하는 것이다.[2] 이러한 모든 목표를 낮은 비용으로 달성하는 것은 소프트웨어 공학 및 프로젝트 관리에서 어렵고 흔한 문제이다. 컴퓨터 프로그래밍의 심리학적 측면을 이해함으로써, 우리는 더 높은 프로그래밍 성과를 달성하고, 프로그래머가 더 적은 오류로 더 나은 소프트웨어를 생산하도록 돕는 방법을 더 잘 이해할 수 있다.
컴퓨터 프로그래밍의 심리적 측면을 연구하는 데 사용하는 방법으로는 내성, 관찰, 실험, 질적 연구가 있다.[2]
프로그래밍 심리학의 접근 방법은 크게 경험주의, 행동주의, 인본주의, 분석심리학, 인지주의, 구성주의, 정신역동적 접근 등으로 나눌 수 있다. 각 접근 방법은 심리학의 특정 이론을 바탕으로 프로그래밍 학습, 개발, 협업 등을 설명한다.
3. 연구 목표 및 목적
4. 연구 방법
5. 접근 방법
이 외에도 원형, 심성 모델, 은유, 성찰 지능(메타 프로그래밍) 등 다양한 심리학 개념들이 프로그래밍에 영향을 미치고 있다.
5. 1. 경험주의 접근
제럴드 와인버그가 시도한 접근 방법으로 컴퓨터 프로그래밍 과정을 경험주의로 해석하는 방법이다. 즉, 관념의 형성과정에서 생득적이거나 관습보다는 경험과 증거, 특히 감각에 의한 지각을 강조하는 방법론이다. 실험을 토대로 두고 있는 관점을 강조하였으며 애자일 소프트웨어 개발 (간반, 익스트림 프로그래밍, 페어 프로그래밍) 등으로 발전하였다.
경험주의 접근 방법은 프로그래밍 심리학에 대한 최초의 방법론으로써 크게 기여했음에도 불구하고 개인의 내부에서 내밀하게 벌어지는 점을 경험적으로 해석한 나머지 널리 알려지고 적용하는데 어려움이 있다.
5. 2. 행동주의 접근
행동주의 심리학이 프로그래밍에 영향을 준 내용을 중심으로, 프로그래밍 학습 방법론과 프로그래머 집단 내의 상호작용에 초점을 두는 방법론이다. 크게 세 가지로 나누어 볼 수 있다. 첫째, 프로그래밍 표현 시스템으로 구조적 프로그래밍, 제어 구조의 효과성, 자료 구조 연구 등을 포함한다. 둘째, 코딩 기술에 관한 것으로 순서도, 들여쓰기(Indent), 쉽게 기억할 수 있는 변수명 사용법(Case Style), 주석문 등이 있다. 셋째, 과제 해결 과정에서 벌어지는 것들이다. 즉, 문제 해결(Problem Task)에는 생성(Creating), 주의(Comprehending), 수정(Modifying), 디버깅, 테스트(Testing), 객체 지향 프로그래밍에서의 유지보수(Maintenance)와 프로그래밍 학습에서의 개요 파악, Glass Box/Blank Box, 지식 구조의 동화(Easily assimilate into existing knowledge structures), 내적 처리의 가시성(Visibility into internal processing) 문제들이 있다.
5. 3. 인본주의 접근
에이브러햄 매슬로가 제안한 욕구단계설을 활용하여 프로그래머의 발달을 설명하는 방법은 두 가지로 나누어 볼 수 있다. 첫째, 프로젝트에 참여하는 프로그래머의 욕구는 욕구단계설이 제시하는 욕구의 진행 과정과 같다는 것이다. 이를 통하여 프로그래머가 겪는 심리적 발달 단계와 어려움을 이해하고 해결하도록 도울 수 있다. 둘째, 인터넷 서비스의 발전을 욕구단계설로 설명하는 것으로, 이를 통하여 소셜 미디어와 네트워킹 서비스들의 발전 과정에 지대한 영향을 미쳤다.
5. 4. 분석심리학 접근
MBTI 심리검사 도구는 카를 구스타프 융의 분석심리학을 기초로 하여 마이어스와 브릭스 모녀가 개발하였다. 이 도구를 활용하여 개인의 작업 수준에 대한 행위를 분석하거나, 팀 협업을 사회적 활동으로 보고 적용하는 분석심리학적 접근 방법이 있다.
이 접근 방법의 연구 방향은 다음과 같다.
연구 방향 | 내용 |
---|---|
첫 번째 | 컴퓨터 프로그래밍 직에 근무하는 사람들의 성격 유형 분포 연구 |
두 번째 | 성격 유형별로 프로그래밍 작업 중 적절한 공정이나 역할 선호도 연구 |
세 번째 | 효율적인 협업 방식 연구 |
이 연구 방법론은 표준화된 MBTI 검사를 활용할 수 있으므로, 표준화된 방법으로 알리거나 활용하는 것이 가능한 장점이 있다.
5. 5. 인지주의 접근
인지주의 심리학이 컴퓨터 프로그래밍에 영향을 준 내용을 중심으로 프로그래밍 학습과 프로그래밍 절차를 연구하는 방법이다. 프로그래밍 지식을 통사적 지식, 의미적 지식, 도식적 지식, 전략적 지식으로 나누고, 학습과 소통 및 자기 인식의 도구로 사용한다.- 통사적 지식(Syntactic Knowledge)은 `INPUT`, `PRINT`, `CLS`와 같은 명령 개개 요소의 규칙과 관련성에 관한 지식이다.
- 의미적 지식(Semantic Knowledge)은 스택, 메모리 공간, 프로그램 리스트와 같은 위치(location), 객체(object) 및 메모리에 대해 수행할 수 있는 작업에 대한 지식이다.
- 도식적 지식(Schematic Knowledge)은 정렬, 반복 및 `for` 문장과 같은 루틴(routine)의 지식이다.
- 전략적 지식(Strategic Knowledge)은 사고구술(Thinking Aloud) 기술과 같이 계획(plan)하고 모니터(monitor)하는 기술이다.
5. 6. 구성주의 접근
피아제의 인지발달이론에 근거하여 컴퓨터 프로그래밍 능력을 설명하는 이론이다. 피아제가 주장한 발달이론의 감각운동기, 전조작기, 구체적 조작기, 형식적 조작기의 발전 과정이 컴퓨터 프로그래밍 과정에 그대로 적용된다. 초보 프로그래머는 신뢰할 수 있는 코드를 수동으로 실행할 수 없으며 변수의 최종 값을 결정할 수 없다. 이러한 단계를 감각운동기(Sensorimotor)에 있다고 정의한다. 초보 프로그래머로서 코드의 추적(Trace)를 안정적으로 할 수 있지만 전체적인 구성을 보지 못하는 단계가 전조작기(Preoperational)이다. 이 단계에서 프로그래머는 귀납적 접근을 하므로 프로젝트를 설계할 수 없는 단계이다. 연역 추론이 가능한 프로그래머라면 구체적 조작기(concrete operational)에 이르렀다고 말할 수 있다. 이 단계에서는 코드 읽기와 변수들의 값을 추론할 수 있으나 비교적 짧은 프로그램에서 가능한 상태이다. 형식적 조작기(Formal operational)에 이른 프로그래머는 설명문으로 문제를 추상화하고 하위 문제를 생성하고 그 하위 문제를 결과로 만들어 내고, 재구성하고 평가하는 것을 반복적으로 수행할 수 있다.5. 7. 정신역동적 접근
인공지능의 역전파는 프로이트가 히스테리 환자의 심리치료 과정에서 사용한 방법에서 따왔다. 이런 면에서 프로이트는 현대 인공지능에 큰 도움을 주었다고 할 수 있다. 현재도 신경망 프로그래밍이 어떻게 알파고와 같은 결과를 만들어내는지 증명하지 못하고 있는데, 아마 영원히 증명하지 못할지도 모른다.5. 8. 기타 접근
분석심리학에서 주요 용어인 원형은 함수 설계에 커다란 영향을 미쳤으며, 심성 모델(Mental Model)을 이용한 프로그래밍 학습, 은유와 프로그래밍 지도, 심층 구조와 표층 구조, 성찰 지능(메타 프로그래밍) 등은 모두 심리학의 각 분야에서 프로그래밍 과정, 내용, 방법에 영향을 미친 요소들이다.6. 인지 편향
인지 편향은 어떤 것에 대해 최적의 추론 방식에서 벗어나는 체계적인 차이점이다. 연구에 따르면 프로그래밍과 관련된 많은 편향이 있다고 한다.[3] 앵커링 편향은 추정 및 아이디어의 재사용에 대해 확인되었다.[3] 수행되는 작업에 낙관주의 편향이 적용된다.[3] 가용성 편향으로 인해 프로그래머는 설명서를 검색할 때 잘못된 키워드를 사용하여 관련 정보를 찾지 못하고, 조직 내에서 이전 프로젝트에서 얻은 교훈을 적용하지 못할 수 있다.[3]
확증 편향은 테스팅에 적용되어 개발자가 실패할 가능성이 높은 테스트 케이스가 아닌 코드에 적합한 테스트 케이스를 작성하게 된다. 또한 프로그래머의 현재 가설에 대해서만 설명서를 검색하는 데에도 적용될 수 있다. 논리적 추론 및 가설 검증 훈련을 통해 이러한 확증 편향을 줄일 수 있다.[4]
참조
[1]
간행물
Psychology of Programming: Looking into Programmers’ Heads
http://www.humantech[...]
2008-05-04
[2]
서적
The Psychology of Computer Programming
https://leanpub.com/[...]
Dorset House
[3]
논문
Cognitive Biases in Software Engineering: A Systematic Mapping Study
https://ieeexplore.i[...]
2020-12-01
[4]
논문
Cognitive Biases in Software Engineering: A Systematic Mapping Study
https://ieeexplore.i[...]
2020-12-01
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com