이전 글들에서 간단한 것은 무종속성, 짧은 길이, 단일 흐름 등의 특징을 갖고

 

사람은 상대성, 단일코어, 감각적, 뚜렷한 목표의 필요, 속도감, 구체성 등의 특징을 갖는 직관을 갖는다고

 

떠올려보았다.

 

그럼 최종적인 목표인 간단하게 바꾸기는 어떻게 실현할 수 있을까?

 

복잡한 것을 간단한 것들의 조합으로 바꾸는 것이다.

 

이런 느낌일 것이다.

 

 

5개로만 나누어도 10개의 관계가 생겨 총 15개의 개념이 생겨버린다.

 

만약 n개로 나눈다면 O(n^2) 스케일로 개념이 생기는데

 

이건 간단하게 만들고자 하는 이치에 맞지 않다.

 

일단 연결을 줄여보도록 하자.

 

연결을 줄인다는 건 종속성을 줄인다는 것과 통하는 말이므로

 

간단한 것으로 만드는 과정의 일환으로 볼 수 있다.

 

 

종속성을 (n-1)개로 줄이는 방법은 쉽게 구상해낼 수 있다.

 

그런데 이 경우에도 문제가 있다.

 

많아지면 많아질수록 혼란하기도 하고

 

논리 선상에서 같은 지위에 놓여있다보니

 

상대적인 식별이 어렵다는 것이다.

 

또한 흐름조차 잡아낼 수가 없다.

 

 

따라서 이렇게 흐름을 나타내는 것을 추가적으로 둘 필요가 있다.

 

이렇게 하면 한방향 흐름을 나타낼 수 있고 이 흐름의 목표를 이름으로서 둔다면

 

목표가 무엇인지 몇번이고 상기시킬 수 있다.

 

또한 이렇게 분명하게 흐름이 잡혀있고 그걸 인지하면서

 

개발이든 공부든 여타 다른 일이든 하면

 

어느새부턴가는 "아 이거 다음에 그거 나온다" 라는 걸 감각적으로

 

아는 순간이 찾아올 것이고 속도와 재미는 덤으로 따라오지 않을까?

 

마지막으로 길이를 짧게 하는 것과 구체적으로 만드는 일에 대해 살펴보도록 하자.

 

사실 이 둘은 되게 상반되게 느껴진다.

 

그러나 둘이 공존하는 게 가능하다.

 

 

이렇게 연결을 반 정도 끊는 것이다.

 

이러면 4개의 개념이 된 것과 같다.

 

공부로서의 예를 들면 배경지식으로서 받아들이고

 

이미 아는 것이니 더 보지 않는 것에 해당하고

 

개발에서는 시스템의 동작이랑 연관되지 않는 흐름을

 

Utillity로 따로 빼는 것에 해당한다.

 

또, 구체적으로 만드는 것에 대해 살펴보면

 

프로젝트나 단순 테스트가 해당한다.

 

test case를 만들어내는 클래스를 만들어내거나

 

배운 내용을 기반으로 게임 같은 걸 만들어본다거나

 

등등이 이에 해당하는 것이다.

 

따라서 최종적으로 복잡한 것을 풀어낸 가장 이상적인 형태는

 

아래와 같다는 결론에 도달하게 되었다.

 

 

저번 글에서는 간단한 것의 특징 3가지를 알아보았고

 

이번 글에서는 복잡한 것을 간단하게 풀어내는 방법을 논하기 전에

 

사람의 직관에 대해 얘기해볼까 한다.

 

왜냐하면 컴퓨터가 느끼기에 간단한 것과 사람이 느끼기에 간단한 것은 분명한 차이가 있고

 

논하고자 하는 목표는 "사람이 느끼기에" 복잡한 것을 간단하게 풀어내는 것이기 때문이다.

 

1. 사람은 절대적이기보다 상대적으로 느낀다.

 

2. 사람은 멀티태스킹보다 one by one으로 해결하는 것을 더 쉽게 여긴다.

 

3. 모든 것을 감각적으로 받아들인다.

 

4. 목표와 목적이 뚜렷할 때 더 좋은 효율을 낸다.

 

5. 때로는 차근차근히 하는 것보다 빠르게 하는 게 좋을 때가 있다.

 

6. 일반적인 원리보다 구체적인 상황을 더 와닿게 느낀다.

 

첫번째로 사람은 상대적이다.

 

만약 눈을 가린 채로 의자에 앉아

 

"다람쥐 헌 쳇바퀴에 타고파"를 친다고 하자.

 

그러면 대체로 다 틀릴 것이다. 왜냐하면 "ㄷ"이 어디 있는지 알 수 없기 때문이다.

 

사람이 절대적이었다면 "ㄷ"의 위치를 절대적으로 딱 알고 나머지 또한 다 절대적으로 알아서

 

정확하게 쳤을 것이다.

 

반면 눈을 가리고 앉았더라도 왼손을 "ㄷ"의 위치를, 오른 손에 "ㅏ" 위치를 가르쳐준다면

 

정확하게 쳐낼 수 있을 것이다.

 

이건 상대적으로 받아들인다는 증거라고 할 수 있다.

 

두번째로 사람은 하나하나씩(one by one) 하는 것을 더 잘한다.

 

어떻게 보면 당연한 얘기이다.

 

수학책과 영어책을 동시에 펴놓고 공부하는 사람은 없을터이니.

 

세번째로 사람은 모든 것을 감각적으로 받아들인다.

 

잘 받아들여지는 글을 두고 흔히 "머리 속에 잘 그려진다"라는 표현을 쓴다.

 

글을 읽는다는 게 사실은 글을 이해를 도모하는 무언가로 바꾸는 것이고

 

이해를 했다는 건 내용을 머리 속에 감각적으로 녹여내는 것에 성공했다는 것이다.

 

카드 게임을 할 때 설명을 말로 듣고 하는 것보다 직접해보는 것을 더 잘 받아들이는 것도 그렇고

 

부끄러웠던 경험을 떠올려본다거나

 

웃긴 경험을 떠올려본다거나

 

하면 몸에서 바로 반응이 오는 것도 감각적이라는 증거이다.

 

또 유행어로 "어쩔티비"라는 어휘를 떠올려보면

 

사실 논리적으로는 납득할 수 없는 용어이다.

 

왜냐하면 "티비"가 붙어 마땅할 맥락이 없기 때문이다.

 

이것 역시 감각적이라는 증거이다.

 

시간 지나면 사라진다는 시스템을 일컬어

 

"disappearAfterWhile"로 네이밍하는 것보다

 

"fire"라고 하는 것이 더 잘 와닿는 듯한 것 역시 마찬가지이다.

 

그리고 비슷한 감각을 느꼈을 때 데자뷰를 느끼곤 하는데

 

이걸 논리적으로 처리하려면 전부 돈이고 시간이다.

 

따라서 사람의 이 감각적인 특성을 잘 이용하는 것도 좋은 묘책이 될 수 있을 것이다.

 

네번째는 목표와 목적을 분명히 하는 게 좋다는 것이다.

 

이는 단순히 무기력을 떨쳐내는 면에서도 좋지만

 

혼란스러운 상황에서 방향을 잃지 않는 데에 효과적이다.

 

다섯번째는 빠른 게 때로는 좋다는 것이다.

 

네번째랑도 연관있는 이야긴데

 

시간이 길어지면 길어질수록 목표가 무엇이었는지

 

퇴색되고 변질되어 갈피를 잃어버릴 수 있다.

 

또 긴 시간을 들인만큼 그걸 놓지 못하게 돼버릴 수도 있다.

 

하지만 빠르게 한다면, 빠르게 하려고 노력한다면

 

흐름이 꼬여서 잘못됐을 때 버리고 다른 거 하러가면 되고

 

또 시험 공부에서의 벼락치기와 같이 좋은 성능을 낼 수도 있다.

(다만 벼락치기는 휘발성이니 나중에 다시 보는 게 중요하겠지만)

 

여섯번째는 일반적인 것보다 구체적인 것이 낫다는 것이다.

 

리액트는 자바스크립트 라이브러리의 하나로서 사용자 인터페이스를 만들기 위해 사용된다.

 

라는 문장보다

 

리액트를 쓰면 이런 걸 만들 수 있다 하면서 관련된 걸 쭉 보여주면

 

당연히 더 잘 와닿을 것이다.

 

전자가 더 일반적이고 정확한 설명이다.

 

헌데 후자가 더 잘 받아들여지는 것은

 

구체적인 것이 사람이 받아들이는 데에 더 좋다는 의미라고 볼 수 있다.

 

이번 글에서는 사람의 직관에 대한 생각을 적어보았고

 

다음 글에서는 복잡한 것을 간단한 것처럼 다루는 방법에 대해 논해볼 예정이다.

저번 글에서는 복잡한 것과 간단한 것에 대해 알아봤고

 

결국 복잡한 것을 타파하려면 간단한 것을 다루듯이 할 수 있어야한다는 결론에 입각했다.

 

이번 글에서는 간단한 것의 특징을 알아보도록 하자.

 

1. 간단한 것은 종속성이 없다.

 

2. 간단한 것은 시작과 끝의 간격이 크지 않다.

 

3. 간단한 것은 오직 한 방향으로 흘러간다.

 

당장에 생각 나는 것은 이 3가지이다.

 

하나하나 살펴보면

 

간단한 것은 종속성이 없다. 다시 말해 조금 바뀌어도 다른 것에 영향을 전혀 주지 않는다.

 

이를테면 아주 큰 프로젝트와 알고리즘 문제 1개를 비교해본다고 할 때

 

아주 큰 프로젝트에서는 영향력이 큰 1개를 바꿀 때 모든 게 뒤틀려버릴 수 있는 반면에

 

알고리즘 문제 1개는 그렇지 않다.

 

숫자를 바꾸거나 변수를 더 두거나 상황을 약간 바꾸거나 해도

 

다른 문제에 영향을 주지도 않는다.

 

두번째로, 간단한 것은 시작과 끝의 간격이 크지 않다.

 

즉 짧다는 얘기이다.

 

알고리즘 문제 1개 물론 길 수도 있지만 큰 프로젝트의 모든 이야기보단

 

일반적으로 짧을 것이다.

 

세번째는 간단한 것은 한 방향으로 흘러간다는 것이다.

 

전래동화를 아무거나 떠올려보도록 하자.

 

원피스처럼 장편 스토리와 비교했을 때 한 방향으로 흘러간다는 특징을 포착해낼 수 있다.

 

[토끼와 거북이가 살았다] -> [토끼가 달리기 내기를 걸어온다] -> [내기가 승낙되고 토끼의 패배로 끝이 난다]

 

굳이 써보면 위와 같다. 결국 한 흐름만이 존재할 뿐인 것이다.

 

이에 비해 원피스는 오랫도록 쓰여진 만큼 이해관계 등의 모든 것이 복잡하다.

 

"루피가 이거 하는 동안 샹크스는 저걸 했고 또 카이도는 뭘 했고 ..."

 

하여튼 여러가지 흐름들을 고려해야하기 때문에 작가 입장에서는 머리 아플 것이다.

 

이번 글에서는 간단한 것의 특징들을 알아봤고

 

다음 글에서는 복잡한 것을 간단한 것으로 풀어내는 방법에 대해 얘기해볼 것이다.

살면서 어느것을 하던 그게 오래 되면 복잡한 개념들이 생겨나게 되어있다.

 

꼭 학문적인 것에만 국한되는 것이 모든 것이 으레 그런 것 같다.

 

하지만 복잡하지면 복잡해질수록 이해하기 난해해지고 결국에는 포기하게 된다.

 

완성한 것들에 비해 미완성이 된 채로 버려진 것들이 많은 이유도 바로 이것인 것 같다.

 

개발을 한다고 치면 처음에는 개념을 펼쳐나가는 데에 스스럼이 없지만

 

프로젝트가 커지면 커질수록

 

"이걸 바꿔도 될까?"

 

"이 기능을 만들려면 어느 부분을 건드려야하지?"

 

등등 복잡함의 위압감에 압도돼버리고 만다.

 

그렇다면 복잡한 것이 어렵다는 이 근본적인 틀을 부술 수 있는 방법은 없을까?

 

방법이야 여러가지 있을 수 있겠지만

 

복잡한 것들을 간단한 것들을 다루듯이 쉽게 해내면 된다.

 

다소 터무니 없는 얘기처럼 들릴 수 있겠지만 이게 맞다.

 

왜냐하면 간단한 건 쉽고 쉬운 것은 본인에게 있어 간단하다라고 할 수 있기 때문이다.

 

그럼 간단한 것과 복잡한 것의 차이를 잘 이해하고 그 갭을 줄인다면 되는 게 아닐까?

 

다음 글에서는 간단한 것들에 대한 생각들을 적어보도록 하겠다.

+ Recent posts