{{위키데이터 속성 추적}}
{{다른 뜻|프로그래밍 심리학 (책)||책}}

'''프로그래밍 심리학'''({{llang|en|PoP : The Psychology of Programming}})은 [[인간과 컴퓨터 상호 작용|HCI]](Human Computer Interaction)의 한 분야로 [[컴퓨터 프로그래밍]]의 과정에서 인간이 경험하는 심리적 문제들을 다루는 학문이다. 심리학적으로 컴퓨터 프로그래밍은 컴퓨터 언어를 읽고 쓰는(reading and writing) 것, 학습(learning)하는 것, [[문제 해결|문제해결]](problem solving)과 [[추론]](reasoning)하는 것들과 같은 인지(cognitive) 행위일 뿐만아니라 IT 프로젝트 진행과정에서 개인과 집단의 성격에 따라 다양한 문제에 직면하고 해결하는 과정에서 벌어지는 역동적 상호작용문제를 다룬다. 또 팀의 리더들도 다양한 심리적 어려움을 겪게 되는데 이에 대처하는 방법을 다루는 분야이다.

프로그래밍 심리학에 대한 연구는 프로그래머들에게 심리학적 접근의 필요성을 알리는 계기가 되었으며, 미국을 중심으로 경험적 연구(Empirical Studies of Programming :ESP)를 통해 진행되었다. 유럽에서는 PPIG [http://www.ppig.org/ PPIG(Psychology of Programming Interest Group)]를 중심으로 발전하였다. 미국을 중심으로한 ESP 연구는 1986~1999년까지 이루어졌으며 그후에는 [https://conferences.computer.org/VLHCC/ VL/HCC (Visual Language/Human Centered Computing)]로 통합되었다. 유럽을 중심으로한 PPIG 워크샵은 현재도 1년에 한번씩 영국, 독일, 포르투칼, 스페인을 순회하여 열리고 있다.

프로그래밍 심리학 연구는 컴퓨터 프로그래머의 인지, 프로그래밍과 관련된 행위의 도구와 방법, 프로그래밍 교육을 연구한다.

프로그래밍 심리학이라는 용어는 1971년 [[제럴드 마빈 와인버그]](Gerald Marvin Weinberg)의 책 《[[프로그래밍 심리학 (책)|프로그래밍 심리학]]》으로 처음 알려졌다.

[[제럴드 마빈 와인버그|제럴드 와인버그]]는 이 도서에서 컴퓨터 프로그래밍 과정을 인간의 행위에 초점을 맞추어 사회적 활동, 개인적 특성으로 파악하고 프로그래머를 프로그래밍을 하는 과정의 도구의 관점에서도 기술하였다.

국내에서는 한서대학교 이재용 교수가 "[[프로그래머는 왜 심리문제에 골몰하는가|프로그래머는 왜 심리문제에 골몰하는가 - 메타인지를 위한 프로그래밍 심리학]]"을 출판하여 프로그래밍 심리학을 적극 소개하고 있다.

==경험주의 접근 ==
제럴드 와인버그가 시도한 접근 방법으로 컴퓨터 프로그래밍을 과정을 경험주의로 해석하는 방법이다. 즉, 관념의 형성과정에서 생득적이거나 관습보다는 경험과 증거, 특히 감각에 의한 지각을 강조하는 방법론이다. 실험을 토대를 두고 있는 관점을 강조하였으며 [[애자일 소프트웨어 개발]]([[간반 (소프트웨어 개발)|간반]], [[익스트림 프로그래밍]], [[페어 프로그래밍|페어 프로그래밍)]] 등으로 발전하였다.
경험주의 접근 방법은 프로그래밍 심리학에 대한 최초의 방법론으로써 크게 기여를 했음에도 불구하고 개인의 내부에서 내밀하게 벌어지는 점을 경험적으로 해석한 나머지 널리 알려지고 적용하는데 어려움이 있다.

==행동주의 접근==
행동주의 심리학이 프로그래밍에 영향을 준 내용을 중심으로 프로그래밍을 학습하는 방법론과 프로그래머 집단내의 상호작용에 초점을 두는 방법론이다. 크게 3가지로 나누어 볼 수 있다. 첫번째 프로그래밍 표현 시스템으로 구조적 프로그래밍, 제어구조의 효과성, 자료구조 연구등을 포함 한다. 두번째는 [[코딩]] 기술에 관한 것으로 [[순서도|순서도(]]<nowiki/>flowchart), 들여쓰기(Indent), 쉽게 기억할 수 있는 변수명 사용법(Case Style) , 주석문등이다. 세번째는 과제의 해결과정에서 벌어지는 것들이다. 즉, 문제 해결(Problem Task)로 생성(Creating), 주의(Comprehending), 수정(Modifying), [[디버깅]](debugging), 테스트(Testing), [[객체 지향 프로그래밍|객체지향형 프로그래밍]]에서의 유지보수(Maintenance)와 프로그래밍의 학습에서의 개요의 파악, Glass Box/Blank Box, 지식구조의 동화(Easily assimilate into existing knowledge structures), 내적처리의 가시성(Visibility into internal processing)의 문제들이다.

==인본주의 접근==
[[에이브러햄 매슬로]]가 제안한 [[매슬로의 욕구단계설|욕구단계설]]을 활용하여 프로그래머의 발달을 설명하는 방법으로 두가지로 나누어 볼 수 있는다. 첫째 프로젝트에 참여하는 프로그래머의 욕구는 요구단계설이 제시하는 욕구의 진행 과정의 욕구와 같다는 것이다. 이를 통하여 프로그래머가 겪는 심리적 발달단계와 어려움을 이해하고 어려움을 해결하도록 도울 수 있다. 둘째 인터넷 서비스의 발전을 욕구단계설로 설명하는 것으로 이를 통하여 소셜미디어와 네트워킹 서비스들의 발전 과정에 지대한 영향을 미쳤다.

==분석심리학 접근==
마이어스와 브릭스 모녀가 [[카를 구스타프 융]]의 [[분석심리학]]을 기초로 하여 개발된 [[마이어스-브릭스 유형 지표|MBTI]] 심리검사 도구를 활용하는 접근 방법이다. 이 방법은 개인의 작업 수준에 대한 행위를 분석하는 도구로 활용하거나 사회적 활동으로 보는 팀 협업에 적용되고 있다.
연구방향은 다음과 같다.
첫번째, 컴퓨터 프로그래밍 직에 근무하는 사람들이 어떤 분포를 이루는지에 대한 연구들,
두번째, 성격유형별로 프로그래밍 작업중 적절한 공정이나 역할의 선호도에 대한연구,
세번째는 어떤 방식으로 협업을 하면 효율적인지에 대한 연구이다.
이연구 방법론은 표준화된 MBTI 검사를 활용할 수 있으므로 표준화된 방법으로 알리거나 활용하는 것이 가능한 장점이 있다.

==인지주의 접근==
인지주의 심리학이 컴퓨터 프로그래밍에 영향을 준 내용을 중심으로 프로그래밍 학습과 프로그래밍 절차를 연구하는 방법이다. 프로그래밍 지식을 통사적지식, 의미적 지식, 도식적 지식, 전략적 지식으로 나누고, 학습과 소통및 자기 인식의 도구로 사용하는 방법론이다. 통사적 지식(Syntactic Knowledge)는 INPUT, PRINT, CLS와 같은 명령 개개 요소의 규칙과 관련성에 관한 지식을 말한다. 의미적 지식(Semantic Knowledge)란 [[스택]](stack), 메모리 공간, 프로그램 리스트와 같은 위치(location), 객체(object) 및 메모리에 대해 수행할 수 있는 작업에 대한 지식을 말한다. 도식적 지식(Schematic Knowledge)이란 정렬, 반복및 for 문장과 같은 루틴(routine)의 지식을 말한다. 전략적 지식(Strategic Knowledge)란 사고구술(Thinking Aloud) 기술과 같이 계획(plan)하고 모니터(monitor)하는 기술을 말한다.

==구성주의 접근==
후기 [[장 피아제|피아제]]의 인지발달이론에 근거하여 [[컴퓨터 프로그래밍]] 능력을 설명하는 이론이다. 피아제가 주장한 발달이론의 감각운동기, 전조작기, 구체적조작기, 형식적 조작기의 발전과정이 컴퓨터 프로그래밍 과정에 그대로 적용된다. 초보 프로그래머는 신뢰할 수 있는 코드를 수동으로 실행할 수 없으며 변수의 최종 값을 결정할 수 없다. 이러한 단계를 감각운동기(Sensorimotor)에 있다고 정의한다. 초보 프로그래머로써 코드의 추적(Trace)를 안정적으로 할 수 있지만 전체적인 구성을 보지 못하는 단계가 전조작기(Preoperational)이다. 이 단계에서 프로그래머는 귀납적 접근을 하므로 프로젝트를 설계할 수 없는 단계이다. 연역 추론이 가능한 프로그래머라면 구체적 조작기(concrete operational)에 이르렀다고 말 할 수 있습니다. 이 단계에서는 코드 읽기와 변수들의 값을 추론 할 수 있으나 비교적 짧은 프로그램에서 가능한 상태입니다. 형식적 조작기(Formal operational)에 이른 프로그래머는 설명문으로 문제를 추상화하고 하위 문제를 생성하고 그 하위 문제를 결과로 만들어 내고, 재구성하고 평가하는 것을 반복적으로 수행할 수 있다.

==정신역동적 접근==
인공지능의 [[백프로퍼게이션|백프로파게이션]](backpropagation)은 [[지그문트 프로이트|프로이트]]가 히스테리 환자의 심리치료과정에서 사용한 방법에서 따왔다. 이런면에서 프로이트는 현대 인공지능에 큰 도움을 주었다고 할 수 있다. 현재도 신경망 프로그래밍이 어떻게 알파고와 결과를 만들어내는지 증명하지 못하고 있는데 아마 영원히 증명하지 못할지도 모른다.

==그밖의 (단편적인) 접근들==
분석심리학에서 주요 용어인 [[융의 원형|원형]](Archetype)은 이용한 함수설계에 커다란 영향을 미쳤으며, 심성모델(Mental Model)을 이용한 프로그래밍 학습, [[은유]]와 프로그래밍 지도, 심층구조와 표층구조, 성찰 지능([[메타프로그래밍|메타 프로그래밍]])등 모두 심리학의 각 분야에서 프로그래밍 과정, 내용, 방법에 영향을 미친 요소들이다.

==연구 방법==
컴퓨터 프로그래밍의 심리적 측면을 연구하는 데 사용하는 방법으로는 [[내성법|내성]], [[관찰]], [[실험]] 및 [[질적 연구]]가 있다.

== 같이 보기 ==
* [[인지심리학]]
* [[인간-컴퓨터 상호작용]]
* [[학습]]
* [[문제해결]]
* [[사용성]]
* [[사용성공학]]

== 외부 링크 ==
* [http://www.ppig.org PPIG web site]

[[분류:응용심리학]]
[[분류:인지]]
[[분류:컴퓨터 프로그래밍]]