프로그래밍 심리학
프로그래밍 심리학()은 컴퓨터 프로그래밍의 과정에서 인간이 경험하는 심리적 문제들을 다루는 학문이다. 심리학적으로 컴퓨터 프로그래밍은 컴퓨터 언어를 읽고 쓰는(reading and writing) 것, 학습(learning)하는 것, 문제해결(problem solving)과 추론(reasoning)하는 것들과 같은 인지(cognitive) 행위일 뿐만아니라 IT 프로젝트 진행과정에서 개인과 집단의 성격에 따라 다양한 문제에 직면하고 해결하는 과정에서 역동적 상호작용이 벌어진다. 또 팀의 리더들도 다양한 심리적 어려움을 겪는다.
프로그래밍 심리학에 대한 연구는 프로그래머들에게 심리학적 접근의 필요성을 알리는 계기가 되었으며, 미국을 중심으로 경험적 연구(Empirical Studies of Programming :ESP)를 통해 진행되었다. 유럽에서는 PPIG PPIG(Psychology of Programming Interest Group)를 중심으로 발전하였다. 미국을 중심으로한 ESP 연구는 1986~1999년까지 이루어졌으며 그후에는 VL/HCC (Visual Language/Human Centered Computing)로 통합되었다. 유럽을 중심으로한 PPIG 워크샵은 현재도 1년에 한번씩 영국, 독일, 포르투칼, 스페인을 순회하여 열리고 있다.
프로그래밍 심리학 연구는 컴퓨터 프로그래머의 인지, 프로그래밍과 관련된 행위의 도구와 방법, 프로그래밍 교육을 연구한다.
프로그래밍 심리학이라는 용어는 1971년 제럴드 마빈 와인버그(Gerald Marvin Weinberg)의 책 《프로그래밍 심리학》으로 처음 알려졌다.
제럴드 와인버그는 이 도서에서 컴퓨터 프로그래밍 과정을 인간의 행위에 초점을 맞추어 사회적 활동, 개인적 특성으로 파악하고 프로그래머를 프로그래밍을 하는 과정의 도구의 관점에서도 기술하였다.
제럴드 와인버그가 접근한 접근 방법으로 컴퓨터 프로그래밍을 과정을 경험주의로 해석하였다. 즉, 관념의 형성과정에서 생득적이거나 관습보다는 경험과 증거, 특히 감각에 의한 지각을 강조하였다. 실험을 토대를 두고 있는 관점을 강조하였으며 애자일 소프트웨어 개발(간반, 익스트림 프로그래밍, 페어 프로그래밍) 등으로 발전하였다.
경험주의는 프로그래밍 심리학에 대한 최초의 방법론으로써 기여를 했음에도 불구하고 개인의 내부에서 내밀하게 벌어지는 내용에 촛점을 두어 널리 알려지고 적용하는데 어려움이 있다.
행동주의 심리학이 프로그래밍에 영향을 준 내용을 중심으로 프로그래밍을 학습하는 방법론과 집단내의 상호작용에서 활용되는 방법론이다. 크게 3가지로 나누어 볼수 있다. 첫번째 프로그래밍 표현 시스템으로 구조적 프로그래밍, 제어구조의 효과성, 자료구조 연구등을 포함 한다. 두번째는 코딩 기술로 순서도(flowchart), 들여쓰기(Indent), 쉽게 기억할 수 있는 변수명 작성법, 주석문등이다. 세번째는 문제의 과제(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)에 이른 프로그래머는 설명문으로 문제를 추상화하고 하위 문제를 생성하고 그 하위 문제를 결과로 만들어 내고, 재구성하고 평가하는 것을 반복적으로 수행할 수 있습니다.
원형(Archetype)을 이용한 함수설계, 심성모델의 활용, 은유의 활용, 심층구조와 표층구조, 성찰 지능(메타 프로그래밍)
컴퓨터 프로그래밍의 심리적 측면을 연구하는 데 사용할 수있는 일부 방법으로는 내성, 관찰, 실험 및 질적 연구가 있다.