이성 대신 의지를 공략하라 설득하는 것에 대해 이성의 규칙보다는 의지를 공략하는 것이 확실한 길이다. 성공을 결정하는 두 가지 규칙 당신을 좋아하는 사람이 당신을 돕는다. 누군가 당신을 좋아하는 것은 운에 달린 일이 아니다. 개인의 호감 역시 2번의 규칙을 따르면 당신을 좋아하도록 만들 수 있다. 사람들은 당신이 그들의 욕망을 충족시킬 때 당신을 좋아한다. 당신의 특정 관심사가 상대에게 어떤 이익이 될 수 있는지 정확히 알아내야 한다. 상대의 호감을 증폭하는 원리 상대의 호감을 얻어서 상대가 당신을 위해 실제로 무언가를 하게 된다면, 이제 서로 다른 두 가지 효과의 매력적인 상호 작용이 시작된다. 사람은 자신에게 호의를 베풀어준 상대만 좋아하는 것이 아니라, 자신이 도와주었던 상대도 자동적으로 좋아하게 ..
설득은 이성과 논리로 하는 것이 아니다 정치, 회사 업무 회의, 일상생활 등 우리는 매일 경쟁적으로 논리를 펼치고 토론을 한다. 상대를 설득하려 애쓰고 상대를 한방에 보낼 날카로운 논리를 수집한다. 하지만 안타깝게도 그런 노력을 통해서는 아무것도 얻지 못한다. 이런 경험은 다음과 같은 의문을 낳는다. 논리로 설득을 하려는 노력이 의미 있는 것일까? 의미가 있다면 언제, 어떤 논리를 써야 할까? 의미가 없다면 이제, 어떻게 해야 될까? 사람의 태도에 영향을 미치는 요인 네 가지 유전적 소인: 유전적 소인은 바꿀 수 없다. 애정 ≒ 감정: 감정의 본질은 논리의 영향으로 바꿀 수 없다. 인지: 정보나 논리를 통해 바꿀 수 있다. 행동: 어떤 태도가 나오게 된 행동에 영향을 미치면 바꿀 수 있지만 논리로는 바꿀..
1. 적응 지원의 문제 (전문가의 저주) 선임 개발자가 새 팀원에게 많은 정보를 준다. 정보의 양이 너무 많아서 높은 인지 부하를 유발한다. 예를 들어 팀원들, 코드베이스의 도메인, 워크플로, 코드베이스를 한꺼번에 소개한다. 소개가 끝난 후 선임 개발자는 새 팀원에게 질문을 하거나 과제를 준다. 선임 개발자는 이것을 아주 간단한 일로 여긴다. 도메인이나 프로그래밍 언어 혹은 두 가지 모두 관련 청크의 부족과 관련 자동화 기술 부족으로 인해 인지 부하가 높아지고 새 팀원은 적응에 어려움을 느낀다 새 팀원은 프로젝트가 매우 어렵다고 느낄 것이고 팀장은 새 팀원의 능력을 의심한다. 2. 전문가와 초보자의 차이 전문가의 뇌는 LTM에 관련 기억을 많이 저장하는데 이 저장된 기억을 작업 기억 공간이 필요로 할 때..
1. 코드베이스의 특성 조사 라이브러리, 프레임워크, 모듈에 대해 이야기할 때, 기술적인 측면에 대해 이야기할 수 도 있지만 인지적 차원의 코드베이스(CDBN)를 고려하면 사용자에게 미치는 영향을 이해하는 데 도움이 된다. 인지적 차원 오류 경향성 일관성 분산성 숨겨진 의존성 잠점성: 사용하는 동안 생각하는 것이 얼마나 쉬운지에 대한 것이다. 점도: 특정 시스템을 변경하는 것이 얼마나 어려운가에 대한 차원으로, 잠정성과 관련이 있다. 점진적 평가: 주어진 시스템에서 부분적인 작업을 확인하거나 실행하는 것이 얼마나 쉬운지에 대한 것이다. 역할 표현력: 프로그램에서 여러 가지 다른 부분의 역할을 얼마나 쉽게 알 수 있는지를 나타낸다. 메서드에 ()를 표현하는 것과 변수와 키워드를 다른 색으로 보여 주는 게 ..
1. 프로그래밍 중 이루어지는 다양한 활동 인지적 차원 표기법(CDN): 프로그래밍 언어 또는 코드베이스의 인지적 영향을 평가하고 검색, 이해, 전사, 증가, 탐구라는 다섯 가지 활동을 기술한다. 검색 검색은 코드베이스를 살펴보고 특정 정보를 검색하는 작업이다. 주로 STM에 무리를 가한다 부하를 줄이기 위해 종이나 별도의 문서에 노트를 작성하면 도움이 된다. 이해 이해는 활동을 수행할 때는 코드를 읽고 실행해 봄으로써 그 기능을 이해하게 된다. 전사(transcription) 전사는 단순히 코딩하는 활동이다 증가 증가는 검색, 이해, 전사가 합쳐진 활동이다 STM, 작업 기억 공간, LTM 모두 부하를 일으킨다. 탐구 CDN의 마직막 활동 STM, 작업 기억 공간, LTM 모두 부하를 일으킨다. 2. ..
1. 문제 해결이란 무엇인가? 문제 해결 요소 목표 상태, 즉 우리가 달성하고자 하는 것. 목표 상태에 도달하면 문제가 해결된 것으로 간주한다. 문제를 해결해야 하는 시작 상태 시작 상태에서 목표 상태에 도달하는 방법을 규정하는 규칙 상태 공간 프로그램을 해결할 때 고려할 수 있는 모든 단계를 문제의 상태 공간이라고 한다. 2. 프로그래밍 문제를 해결할 때 LTM의 역할은 무엇인가? 문제 해결 시 LTM 사용 문제를 이해한다. 계획을 세운다 계획을 실행한다. 두 되는 익숙한 문제를 해결하는 것이 더 쉽다 문제 해결을 위한 LTM 교육 방법 STM으로부터 문제의 상황에 대한 정보를 가져온다. 동시에 LTM은 관련 배경 지식을 검색한다. 문제 해결에 역할을 하는 두 가지 유형의 기억 절차적 기억: 운동 능력..
1. 코드 스멜이 인지 부하를 초래하는 이유 코드 스멜에 대한 간략한 소개 코드 스멜은 작동은 하지만 개선의 여지가 있는 코드를 의미한다. 메서드 수준 코드 스멜: 한 메서드가 많은 라인으로 되어 있고 많은 기능으로 갖는 경우 클래스 수준 코드 스멜: 하나의 클래스에 기능이 너무 많아 추상화가 안 되는 경우 혹은 기능이 너무 적어 추상화가 안 되는 경우 코드베이스 수준 코드 스멜: 중복코드가 존재하거나 메서들 간에 메시지 체인이 발생하는 경우 코드 스멜의 영향: 코드 스멜이 많다면 코드에 오류와 수정이 발생할 가능성이 많아진다. 코드 스멜이 인지 과정에 악영향을 미치는 방식 긴 매개변수 목록, 복잡한 스위치 문은 작업 기억 공간의 용량 초과를 발생시킨다 긴 메서 드는 효율적인 청킹이 불가능하다 중복 코드..
1. 이름이 중요한 이유 예루살렘 히브리 대학교의 전산학과 교수 드로 페이텔슨은 프로그래밍 작업에서 이름을 선택하는 실험을 통해 모호하지 않은 이름을 생각해 내는 것이 얼마나 어려운지를 증명했다. 명명이 중요한 이유 이름은 코드베이스의 상당 부분을 차지한다. 200만줄의 이클립스 소스코드에서 토큰의 33%, 문자의 72%가 식별자에 해당한다. 코드 리뷰 시 이름에 관해 많이 언급됨 4건 중 1건이 명칭과 관련한 언급을 포함했으며, 식별자 이름에 대한 언급은 9%를 차지하는 것으로 나타냈다. 이름은 문서화의 가장 쉬운 형태 프로그래머가 가장 많이 읽는 문서는 코드 내의 주석과 이름이다. 이름이 표식 역할 할 수 있다. 변수 이름은 주석문 외에도 코드를 이해하는 데 도움이 되는 중요한 표식이다. 명명에 대한..