SlideShare uma empresa Scribd logo
1 de 58
Baixar para ler offline
허규영 iOS Developer
🧠 코딩할 때 프로그래머의 뇌에서 생기는 일
https://twitter.com/bbvch13531
뇌의 인지과정과 프로그래밍에 대한 얘기입니다.
􀺣􀇳
프로그래밍은 가장 까다로운 인지활동 중 하나이다.
인지 과정을 이해하면 작업을 처리하는데 도움이 된다.
뇌의 인지 과정을 이해하고 나면 프로그래밍을 더 잘 하는데 도움이 된다.
프로그래밍은 정말 복잡한 활동입니다.
코드를 읽고 이해한다.
프로그래밍 언어로 문법에 맞게
기대하는대로 동작하도록
코드를 작성한다.
어떤 상황에서 어떤 종류의 인지 부하가 발생하는지 설명하고,
인지 부하를 낮추는데 도움이 되는 도구를 소개한다.
아, 이 문제는 너무 어려워, 복잡해
아 내가 똑똑하지 않구나
발표의 목적
프로그래머의 뇌
이 문제는 이런 구조이고, 이런 종류의 인지부하를 요구하고 있구나
내 뇌가 지금 너무 많은 인지 부하를 겪고 있구나!
• 아 내가 똑똑하지 않구나 (X)
• 아 내 뇌가 지금 너무 많은 인지부하를 겪고 있구나 (O)
• 그럼 어떻게 인지부하를 줄일 수 있을까?
세자리 숫자의 덧셈을 암산으로 계산할 수 있다 / 없다
프로그래머의 뇌
기억나시나요?
123 + 456 + 789 = ?
LTM, STM, 작업기억공간
세 가지 종류의 인지부하, 세 가지 종류의 기억 공간
LTM의 부하를 낮추는 방법
STM의 부하를 낮추는 방법
작업기억공간의 부하를 낮추는 방법
추상화
네이밍이 중요한 이유
프로그래머의 뇌
LTM
STM
작업기억공간
필터
정보
세 가지 종류의 인지부하, 세 가지 종류의 기억 공간
프로그래머의 뇌
LTM(Long Term Memory): 장기기억
STM(Short Term Memory): 단기기억
작업기억공간
CPU
Hard Disk Drive
RAM
지식
정보
처리능력
세 가지 종류의 혼란스러운 코드
어떻게 동작할까요?
2 2 2 2 2 T n
c = 0;
while(n2 != 0) {
n2 = n1 / 2;
b[c++] = n1 - n2 * 2;
n1 = n2;
}
printf("%s", b);
public class DecimalToBinary {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
System.out.println(Integer.toBinaryString(n));
}
}
APL
clang
Java
프로그래머의 뇌
APL - 지식의 부족
Java - 정보의 부족
C - 처리 능력의 부족
세 가지 종류의 인지부하, 세 가지 종류의 기억 공간
2 2 2 2 2 T n
Integer.toBinaryString(n)
while { }
프로그래머의 뇌
LTM
STM
작업 기억 공간
세 가지 종류의 인지부하, 세 가지 종류의 기억 공간
APL - 지식의 부족
Java - 정보의 부족
C - 처리 능력의 부족
• LTM의 문제를 개선하는 방법
• STM의 문제를 개선하는 방법
• 작업기억공간의 문제를 개선하는 방법
기억공간의 부하를 낮추는 방법
프로그래머의 뇌
• 망각 곡선
• 기억이 저장되는 방식
• 저장강도와 인출강도
LTM의 문제를 개선하는 방법
프로그래머의 뇌
프로그래머의 뇌
에빙하우스의 망각 곡선
LTM의 문제를 개선하는 방법
프로그래머의 뇌
망각 곡선에 대한 올바른 이해
프랑스 단어를 학습하는 실험
1그룹: 2주에 한 번, 26회 반복 -> 총 소요기간 52주
2그룹: 8주에 한 번, 13회 반복 -> 총 소요기간 104주
학습이 끝난 1년 뒤 기억한 단어의 비율
1그룹: 56%
2그룹: 76%
LTM의 문제를 개선하는 방법
1그룹 학습 끝 2그룹 학습 끝
학습 시작
1그룹 1년 뒤 2그룹 1년 뒤
56% 76%
잘 기억하기 위해서는 더 오랜 기간동안 학습해야 한다.
1그룹이 2그룹에 비해 2배 더 많은 반복학습을 했지만
더 오래 학습한 2그룹이 더 잘 기억했다.
프로그래머의 뇌
LTM(뉴런)은 네트워크 구조로 이루어져 있음
LTM의 문제를 개선하는 방법
프로그래머의 뇌
기존에 아는 것과 연결지어서 기억하려고 노력해야 한다.
LTM의 문제를 개선하는 방법
프로그래머의 뇌
LTM에 저장된 기억의 두 가지 특성
저장강도
인출강도
LTM의 문제를 개선하는 방법
프로그래머의 뇌
저장강도
정보를 얼마나 잘 저장하고 있는가
어떤 정보를 반복해서 학습할 때 강화된다. (Input)
인출강도
정보를 얼마나 쉽게 인출할 수 있는가
자기가 알고있는 정보를 인출하려고 노력할 때 강화된다. (Output)
LTM의 문제를 개선하는 방법
프로그래머의 뇌
저장강도와 인출강도가 다르다!
LTM의 문제를 개선하는 방법
프로그래머의 뇌
모르는 정보를 검색해서 찾아본다.
검색해서 찾으면 되니 기억할 필요가 없다고 느낀다.
기억을 못하니까 검색해서 찾아본다.
LTM의 문제를 개선하는 방법
• 코드는 왜 읽기 어려울까요?
• 어떻게 하면 코드를 더 잘 읽을 수 있을까요?
• 아키텍처, 디자인패턴이 코드를 읽을 때 미치는 영향
STM의 문제를 개선하는 방법
프로그래머의 뇌
프로그래머의 뇌
코드를 읽기 어려운 이유
STM에 2~6개의 정보만 기억할 수 있음
기억이 몇 분 정도로 짧게 지속됨
STM의 문제를 개선하는 방법
switch, true, throw, else, if, case, catch, false
true, false, if, else, switch, case, throw, catch
true, false, if, else, switch, case, throw, catch
true, if, switch, throw
프로그래머의 뇌
의미있는 단위 (Chunk) 로 묶으면 더 잘 기억할 수 있다.
STM의 문제를 개선하는 방법
더 잘 기억하면 더 잘 처리할 수 있다.
프로그래머의 뇌
코드를 의미있는 단위 (Chunk) 로 묶으면 더 잘 기억할 수 있다.
더 잘 기억하면 더 잘 처리할 수 있다.
아키텍처
디자인 패턴
STM의 문제를 개선하는 방법
프로그래머의 뇌
디자인 패턴 교육을 듣고나서
해당 디자인 패턴이 사용된 코드를 수정하는 시간이 단축되는 연구결과
Lutz Prechelt: Two controlled experiments assessing
the usefulness of design pattern documentation
in program maintenance(1998)
Marek Vokac: A Controlled Experiment Comparing
the Maintainability of Programs
Designed With And Without Design Patterns
- A Replication In A Real Programming Environment (2004)
STM의 문제를 개선하는 방법
디자인 패턴 교육 전
패턴이 사용되지 않은 코드를 수정하는데 걸린 시간
패턴이 사용된 코드를 수정하는데 걸린 시간
디자인 패턴 교육 후
패턴이 사용되지 않은 코드를 수정하는데 걸린 시간
패턴이 사용된 코드를 수정하는데 걸린 시간
사분위수와 최소, 최대값을 보여주는 상자 수염 그림
프로그래머의 뇌
표식(Mark) 남기기
STM의 문제를 개선하는 방법
프로그래머의 뇌
visit(node->left)
print(node->data)
visit(node->right)
print(node->data)
visit(node->left)
visit(node->right)
visit(node->left)
visit(node->right)
print(node->data)
struct Node {
int data;
struct Node* left;
struct Node* right;
}
STM의 문제를 개선하는 방법
PreOrder InOrder PostOrder
• 리팩토링
• 의존그래프
• 상태표
작업 기억 공간의 문제를 개선하는 방법
프로그래머의 뇌
프로그래머의 뇌
리팩토링
복잡한 코드를 깔끔하게 정리한다.
혼란스러운 코드에 규칙을 부여한다.
작업기억공간의 문제를 개선하는 방법
의존 그래프
프로그래머의 뇌
c = 0;
while(n2 != 0) {
n2 = n1 / 2;
b[c++] = n1 - n2 * 2;
n1 = n2;
}
printf("%s", b);
n1 n2 b c
29 14 1 0
14 7 0 1
7 3 1 2
3 1 1 3
1 0 1 4
상태표 만들기
작업기억공간의 문제를 개선하는 방법
clang
• 정신 모델(Mental Model)
• 정신 모델의 충돌(Collision)
추상화
프로그래머의 뇌
프로그래머의 뇌
정신 모델
문제를 풀기 위해 두뇌가 사용하는 심적 표상, 추상화된 개념
추상화
프로그래머의 뇌
1 2 3 4 5
이진트리에 대한 정신모델
Edge and Node Array
추상화
프로그래머의 뇌
Directory structure Filesystem Inode structure
디렉토리 구조에 대한 정신모델
추상화
프로그래머의 뇌
더 추상적인 정신모델이 좋다 ( X )
더 구체적인 정신모델이 좋다 ( X )
LTM에 있는 여러 층위의 정신모델 중 현재 상황에 적합한 모델을 불러오는 것이 좋다 ( O )
추상화
프로그래머의 뇌
정신 모델의 충돌
새로운 정신모델이 기존에 알던 정신모델과 충돌하는 경우가 있다.
이때 혼란이 발생한다.
발생하는 모순을 인지하고 정신모델을 수정해야함
추상화
프로그래머의 뇌
객체와 클래스에 대한 여러가지 정신모델
"객체는 붕어빵이고 클래스는 붕어빵 틀이다"
함수는 일급객체이다.
그렇다면 함수는 붕어빵인가?
왜 붕어빵이지? 그럼 어떤 붕어빵 틀이 함수를 만들어내지?
객체는 붕어빵이 아니며 클래스는 붕어빵 틀이 아니다.
추상화
• 인지적 측면
• 일관성
• 도메인 정보
• LTM
네이밍이 중요한 이유
프로그래머의 뇌
프로그래머의 뇌
이름은 코드베이스 내에서 일관성이 있어야 한다.
뇌가 LTM에 저장된 관련 정보를 더 쉽게 인출할 수 있다.
네이밍이 중요한 이유
프로그래머의 뇌
코드의 도메인에 대한 정보를 잘 나타내야 한다.
LTM에서 연관된 추가정보를 제공한다.
PersonList보다 VisitedCustomerList
네이밍이 중요한 이유
프로그래머의 뇌
LTM에 저장된 규약에 대한 정보
이미 알고있는 내용과 관련지어 생각한다.
Loop Counter i, j, k
3차원 좌표 (x, y, z)
네이밍이 중요한 이유
아, 이 문제는 너무 어려워, 복잡해
아 내가 똑똑하지 않구나
발표의 목적
프로그래머의 뇌
이 문제는 이런 구조이고, 이런 종류의 인지부하를 요구하고 있구나
내 뇌가 지금 너무 많은 인지 부하를 겪고 있구나!
발표의 목적
프로그래머의 뇌
인지 과부화 상황을 인지하고
문제가 요구하는 인지부하의 종류를 판별한다.
해당 인지부하를 낮추는 전략을 사용한다.
오늘 설명하지 않은 다른 내용들이 궁금하다면
"프로그래머의 뇌" 책을 추천합니다.
Thanks! 👋
허규영 iOS Developer
https://twitter.com/bbvch13531

Mais conteúdo relacionado

Semelhante a 프로그래머의 뇌

클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)Sang-Kyu Park
 
생각하는 프로그래밍 1부
생각하는 프로그래밍 1부생각하는 프로그래밍 1부
생각하는 프로그래밍 1부sj k
 
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템Hoyeon Kim
 
Escamp Seminar @KAIST
Escamp Seminar @KAISTEscamp Seminar @KAIST
Escamp Seminar @KAISTDaegeun Lee
 
읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.TonyCms
 
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기SeokhwanMoon
 
Coding interview
Coding interviewCoding interview
Coding interviewSoohan Ahn
 
프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법Lee Sangkyoon (Kay)
 
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)CONNECT FOUNDATION
 
Spark machine learning & deep learning
Spark machine learning & deep learningSpark machine learning & deep learning
Spark machine learning & deep learninghoondong kim
 
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)Haezoom Inc.
 
도서 '퍼스널 애자일 퍼스널 칸반', 200% 활용하기
도서 '퍼스널 애자일 퍼스널 칸반', 200% 활용하기도서 '퍼스널 애자일 퍼스널 칸반', 200% 활용하기
도서 '퍼스널 애자일 퍼스널 칸반', 200% 활용하기대박성진 DaeBak.Sungjin
 
2021-11-16 모두콘 딥러닝 경량화 발표
2021-11-16 모두콘 딥러닝 경량화 발표2021-11-16 모두콘 딥러닝 경량화 발표
2021-11-16 모두콘 딥러닝 경량화 발표JongkukLim
 
Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료seungdols
 
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략Startlink
 
Machine Learning with Apache Spark and Zeppelin
Machine Learning with Apache Spark and ZeppelinMachine Learning with Apache Spark and Zeppelin
Machine Learning with Apache Spark and ZeppelinDataya Nolja
 
회사에서 기술서적을 읽는다는것
회사에서 기술서적을 읽는다는것회사에서 기술서적을 읽는다는것
회사에서 기술서적을 읽는다는것성환 조
 

Semelhante a 프로그래머의 뇌 (20)

7 8 1
7 8 17 8 1
7 8 1
 
클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)클로져 소개 강의 (한국정보통신산업노동조합)
클로져 소개 강의 (한국정보통신산업노동조합)
 
생각하는 프로그래밍 1부
생각하는 프로그래밍 1부생각하는 프로그래밍 1부
생각하는 프로그래밍 1부
 
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
[NDC2014]쉽게 따라 할 수있는 "꽤" 훌륭한 유저 동향 분석 시스템
 
Escamp Seminar @KAIST
Escamp Seminar @KAISTEscamp Seminar @KAIST
Escamp Seminar @KAIST
 
읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.읽기 좋은 코드가 좋은 코드다.
읽기 좋은 코드가 좋은 코드다.
 
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
Pycon Korea 2018 - 비개발자에게 파이썬 가르치기
 
Coding interview
Coding interviewCoding interview
Coding interview
 
프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법프로그래머에게 사랑받는 게임 기획서 작성법
프로그래머에게 사랑받는 게임 기획서 작성법
 
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
[특강] 개발자의 학습과 성장 / 이선협 (Cobalt, Inc.)
 
Spark machine learning & deep learning
Spark machine learning & deep learningSpark machine learning & deep learning
Spark machine learning & deep learning
 
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)
PYCON KR 2017 - 구름이 하늘의 일이라면 (윤상웅)
 
도서 '퍼스널 애자일 퍼스널 칸반', 200% 활용하기
도서 '퍼스널 애자일 퍼스널 칸반', 200% 활용하기도서 '퍼스널 애자일 퍼스널 칸반', 200% 활용하기
도서 '퍼스널 애자일 퍼스널 칸반', 200% 활용하기
 
엑셀왕국
엑셀왕국엑셀왕국
엑셀왕국
 
2021-11-16 모두콘 딥러닝 경량화 발표
2021-11-16 모두콘 딥러닝 경량화 발표2021-11-16 모두콘 딥러닝 경량화 발표
2021-11-16 모두콘 딥러닝 경량화 발표
 
애자일의 모든것
애자일의 모든것애자일의 모든것
애자일의 모든것
 
Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료Django Girls 12월 Meetup 발표 자료
Django Girls 12월 Meetup 발표 자료
 
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
두 번째 startlink.live: 김재홍 (xhark) - 알고리즘 문제 출제 전략
 
Machine Learning with Apache Spark and Zeppelin
Machine Learning with Apache Spark and ZeppelinMachine Learning with Apache Spark and Zeppelin
Machine Learning with Apache Spark and Zeppelin
 
회사에서 기술서적을 읽는다는것
회사에서 기술서적을 읽는다는것회사에서 기술서적을 읽는다는것
회사에서 기술서적을 읽는다는것
 

Mais de 규영 허

スケーラブル SwiftUI プロジェクトにおける実用的な TCA モジュラー化
スケーラブル SwiftUI プロジェクトにおける実用的な TCA モジュラー化スケーラブル SwiftUI プロジェクトにおける実用的な TCA モジュラー化
スケーラブル SwiftUI プロジェクトにおける実用的な TCA モジュラー化규영 허
 
LLVM UB Optimization
LLVM UB OptimizationLLVM UB Optimization
LLVM UB Optimization규영 허
 
SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기규영 허
 
Swift for tensorflow
Swift for tensorflowSwift for tensorflow
Swift for tensorflow규영 허
 
Chromium에 contribution하기
Chromium에 contribution하기Chromium에 contribution하기
Chromium에 contribution하기규영 허
 

Mais de 규영 허 (6)

スケーラブル SwiftUI プロジェクトにおける実用的な TCA モジュラー化
スケーラブル SwiftUI プロジェクトにおける実用的な TCA モジュラー化スケーラブル SwiftUI プロジェクトにおける実用的な TCA モジュラー化
スケーラブル SwiftUI プロジェクトにおける実用的な TCA モジュラー化
 
LLVM UB Optimization
LLVM UB OptimizationLLVM UB Optimization
LLVM UB Optimization
 
SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기SwiftUI와 TCA로 GitHub Search앱 만들기
SwiftUI와 TCA로 GitHub Search앱 만들기
 
Swift for tensorflow
Swift for tensorflowSwift for tensorflow
Swift for tensorflow
 
Influencer
InfluencerInfluencer
Influencer
 
Chromium에 contribution하기
Chromium에 contribution하기Chromium에 contribution하기
Chromium에 contribution하기
 

Último

(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?Jay Park
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석JMP Korea
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화JMP Korea
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP Korea
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP Korea
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법JMP Korea
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP Korea
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP Korea
 

Último (8)

(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 

프로그래머의 뇌

  • 1. 허규영 iOS Developer 🧠 코딩할 때 프로그래머의 뇌에서 생기는 일 https://twitter.com/bbvch13531
  • 2. 뇌의 인지과정과 프로그래밍에 대한 얘기입니다. 􀺣􀇳
  • 3. 프로그래밍은 가장 까다로운 인지활동 중 하나이다. 인지 과정을 이해하면 작업을 처리하는데 도움이 된다. 뇌의 인지 과정을 이해하고 나면 프로그래밍을 더 잘 하는데 도움이 된다.
  • 4. 프로그래밍은 정말 복잡한 활동입니다. 코드를 읽고 이해한다. 프로그래밍 언어로 문법에 맞게 기대하는대로 동작하도록 코드를 작성한다.
  • 5. 어떤 상황에서 어떤 종류의 인지 부하가 발생하는지 설명하고, 인지 부하를 낮추는데 도움이 되는 도구를 소개한다.
  • 6. 아, 이 문제는 너무 어려워, 복잡해 아 내가 똑똑하지 않구나 발표의 목적 프로그래머의 뇌 이 문제는 이런 구조이고, 이런 종류의 인지부하를 요구하고 있구나 내 뇌가 지금 너무 많은 인지 부하를 겪고 있구나!
  • 7. • 아 내가 똑똑하지 않구나 (X) • 아 내 뇌가 지금 너무 많은 인지부하를 겪고 있구나 (O) • 그럼 어떻게 인지부하를 줄일 수 있을까? 세자리 숫자의 덧셈을 암산으로 계산할 수 있다 / 없다 프로그래머의 뇌 기억나시나요? 123 + 456 + 789 = ?
  • 8. LTM, STM, 작업기억공간 세 가지 종류의 인지부하, 세 가지 종류의 기억 공간 LTM의 부하를 낮추는 방법 STM의 부하를 낮추는 방법 작업기억공간의 부하를 낮추는 방법 추상화 네이밍이 중요한 이유 프로그래머의 뇌
  • 10. 세 가지 종류의 인지부하, 세 가지 종류의 기억 공간 프로그래머의 뇌
  • 11. LTM(Long Term Memory): 장기기억 STM(Short Term Memory): 단기기억 작업기억공간 CPU Hard Disk Drive RAM 지식 정보 처리능력
  • 12. 세 가지 종류의 혼란스러운 코드 어떻게 동작할까요?
  • 13. 2 2 2 2 2 T n c = 0; while(n2 != 0) { n2 = n1 / 2; b[c++] = n1 - n2 * 2; n1 = n2; } printf("%s", b); public class DecimalToBinary { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); System.out.println(Integer.toBinaryString(n)); } } APL clang Java
  • 14. 프로그래머의 뇌 APL - 지식의 부족 Java - 정보의 부족 C - 처리 능력의 부족 세 가지 종류의 인지부하, 세 가지 종류의 기억 공간 2 2 2 2 2 T n Integer.toBinaryString(n) while { }
  • 15. 프로그래머의 뇌 LTM STM 작업 기억 공간 세 가지 종류의 인지부하, 세 가지 종류의 기억 공간 APL - 지식의 부족 Java - 정보의 부족 C - 처리 능력의 부족
  • 16. • LTM의 문제를 개선하는 방법 • STM의 문제를 개선하는 방법 • 작업기억공간의 문제를 개선하는 방법 기억공간의 부하를 낮추는 방법 프로그래머의 뇌
  • 17. • 망각 곡선 • 기억이 저장되는 방식 • 저장강도와 인출강도 LTM의 문제를 개선하는 방법 프로그래머의 뇌
  • 18. 프로그래머의 뇌 에빙하우스의 망각 곡선 LTM의 문제를 개선하는 방법
  • 19. 프로그래머의 뇌 망각 곡선에 대한 올바른 이해 프랑스 단어를 학습하는 실험 1그룹: 2주에 한 번, 26회 반복 -> 총 소요기간 52주 2그룹: 8주에 한 번, 13회 반복 -> 총 소요기간 104주 학습이 끝난 1년 뒤 기억한 단어의 비율 1그룹: 56% 2그룹: 76% LTM의 문제를 개선하는 방법
  • 20. 1그룹 학습 끝 2그룹 학습 끝 학습 시작 1그룹 1년 뒤 2그룹 1년 뒤 56% 76% 잘 기억하기 위해서는 더 오랜 기간동안 학습해야 한다. 1그룹이 2그룹에 비해 2배 더 많은 반복학습을 했지만 더 오래 학습한 2그룹이 더 잘 기억했다.
  • 21. 프로그래머의 뇌 LTM(뉴런)은 네트워크 구조로 이루어져 있음 LTM의 문제를 개선하는 방법
  • 22. 프로그래머의 뇌 기존에 아는 것과 연결지어서 기억하려고 노력해야 한다. LTM의 문제를 개선하는 방법
  • 23. 프로그래머의 뇌 LTM에 저장된 기억의 두 가지 특성 저장강도 인출강도 LTM의 문제를 개선하는 방법
  • 24. 프로그래머의 뇌 저장강도 정보를 얼마나 잘 저장하고 있는가 어떤 정보를 반복해서 학습할 때 강화된다. (Input) 인출강도 정보를 얼마나 쉽게 인출할 수 있는가 자기가 알고있는 정보를 인출하려고 노력할 때 강화된다. (Output) LTM의 문제를 개선하는 방법
  • 25. 프로그래머의 뇌 저장강도와 인출강도가 다르다! LTM의 문제를 개선하는 방법
  • 26. 프로그래머의 뇌 모르는 정보를 검색해서 찾아본다. 검색해서 찾으면 되니 기억할 필요가 없다고 느낀다. 기억을 못하니까 검색해서 찾아본다. LTM의 문제를 개선하는 방법
  • 27. • 코드는 왜 읽기 어려울까요? • 어떻게 하면 코드를 더 잘 읽을 수 있을까요? • 아키텍처, 디자인패턴이 코드를 읽을 때 미치는 영향 STM의 문제를 개선하는 방법 프로그래머의 뇌
  • 28. 프로그래머의 뇌 코드를 읽기 어려운 이유 STM에 2~6개의 정보만 기억할 수 있음 기억이 몇 분 정도로 짧게 지속됨 STM의 문제를 개선하는 방법
  • 29. switch, true, throw, else, if, case, catch, false
  • 30.
  • 31. true, false, if, else, switch, case, throw, catch
  • 32. true, false, if, else, switch, case, throw, catch
  • 34. 프로그래머의 뇌 의미있는 단위 (Chunk) 로 묶으면 더 잘 기억할 수 있다. STM의 문제를 개선하는 방법 더 잘 기억하면 더 잘 처리할 수 있다.
  • 35. 프로그래머의 뇌 코드를 의미있는 단위 (Chunk) 로 묶으면 더 잘 기억할 수 있다. 더 잘 기억하면 더 잘 처리할 수 있다. 아키텍처 디자인 패턴 STM의 문제를 개선하는 방법
  • 36. 프로그래머의 뇌 디자인 패턴 교육을 듣고나서 해당 디자인 패턴이 사용된 코드를 수정하는 시간이 단축되는 연구결과 Lutz Prechelt: Two controlled experiments assessing the usefulness of design pattern documentation in program maintenance(1998) Marek Vokac: A Controlled Experiment Comparing the Maintainability of Programs Designed With And Without Design Patterns - A Replication In A Real Programming Environment (2004) STM의 문제를 개선하는 방법
  • 37. 디자인 패턴 교육 전 패턴이 사용되지 않은 코드를 수정하는데 걸린 시간 패턴이 사용된 코드를 수정하는데 걸린 시간 디자인 패턴 교육 후 패턴이 사용되지 않은 코드를 수정하는데 걸린 시간 패턴이 사용된 코드를 수정하는데 걸린 시간 사분위수와 최소, 최대값을 보여주는 상자 수염 그림
  • 40. • 리팩토링 • 의존그래프 • 상태표 작업 기억 공간의 문제를 개선하는 방법 프로그래머의 뇌
  • 41. 프로그래머의 뇌 리팩토링 복잡한 코드를 깔끔하게 정리한다. 혼란스러운 코드에 규칙을 부여한다. 작업기억공간의 문제를 개선하는 방법
  • 43. 프로그래머의 뇌 c = 0; while(n2 != 0) { n2 = n1 / 2; b[c++] = n1 - n2 * 2; n1 = n2; } printf("%s", b); n1 n2 b c 29 14 1 0 14 7 0 1 7 3 1 2 3 1 1 3 1 0 1 4 상태표 만들기 작업기억공간의 문제를 개선하는 방법 clang
  • 44. • 정신 모델(Mental Model) • 정신 모델의 충돌(Collision) 추상화 프로그래머의 뇌
  • 45. 프로그래머의 뇌 정신 모델 문제를 풀기 위해 두뇌가 사용하는 심적 표상, 추상화된 개념 추상화
  • 46. 프로그래머의 뇌 1 2 3 4 5 이진트리에 대한 정신모델 Edge and Node Array 추상화
  • 47. 프로그래머의 뇌 Directory structure Filesystem Inode structure 디렉토리 구조에 대한 정신모델 추상화
  • 48. 프로그래머의 뇌 더 추상적인 정신모델이 좋다 ( X ) 더 구체적인 정신모델이 좋다 ( X ) LTM에 있는 여러 층위의 정신모델 중 현재 상황에 적합한 모델을 불러오는 것이 좋다 ( O ) 추상화
  • 49. 프로그래머의 뇌 정신 모델의 충돌 새로운 정신모델이 기존에 알던 정신모델과 충돌하는 경우가 있다. 이때 혼란이 발생한다. 발생하는 모순을 인지하고 정신모델을 수정해야함 추상화
  • 50. 프로그래머의 뇌 객체와 클래스에 대한 여러가지 정신모델 "객체는 붕어빵이고 클래스는 붕어빵 틀이다" 함수는 일급객체이다. 그렇다면 함수는 붕어빵인가? 왜 붕어빵이지? 그럼 어떤 붕어빵 틀이 함수를 만들어내지? 객체는 붕어빵이 아니며 클래스는 붕어빵 틀이 아니다. 추상화
  • 51. • 인지적 측면 • 일관성 • 도메인 정보 • LTM 네이밍이 중요한 이유 프로그래머의 뇌
  • 52. 프로그래머의 뇌 이름은 코드베이스 내에서 일관성이 있어야 한다. 뇌가 LTM에 저장된 관련 정보를 더 쉽게 인출할 수 있다. 네이밍이 중요한 이유
  • 53. 프로그래머의 뇌 코드의 도메인에 대한 정보를 잘 나타내야 한다. LTM에서 연관된 추가정보를 제공한다. PersonList보다 VisitedCustomerList 네이밍이 중요한 이유
  • 54. 프로그래머의 뇌 LTM에 저장된 규약에 대한 정보 이미 알고있는 내용과 관련지어 생각한다. Loop Counter i, j, k 3차원 좌표 (x, y, z) 네이밍이 중요한 이유
  • 55. 아, 이 문제는 너무 어려워, 복잡해 아 내가 똑똑하지 않구나 발표의 목적 프로그래머의 뇌 이 문제는 이런 구조이고, 이런 종류의 인지부하를 요구하고 있구나 내 뇌가 지금 너무 많은 인지 부하를 겪고 있구나!
  • 56. 발표의 목적 프로그래머의 뇌 인지 과부화 상황을 인지하고 문제가 요구하는 인지부하의 종류를 판별한다. 해당 인지부하를 낮추는 전략을 사용한다.
  • 57. 오늘 설명하지 않은 다른 내용들이 궁금하다면 "프로그래머의 뇌" 책을 추천합니다.
  • 58. Thanks! 👋 허규영 iOS Developer https://twitter.com/bbvch13531