개발잘하려면 많이 만들어봐야한다는 말은 누구나 쉽게 할수 있고 이상적인 말일 수 있습니다


사람들은 다양하고 다양한만큼 각자에게 맞는 학습방법이 있을 수 있습니다.
앞으로 이야기 하고자 하는 학습방법도 모두에게 맞는 학습방법이 아닐 수도 있습니다만, 이 방식이 맞을 분들에게는 굉장히 효율적인 방법일 수 있을것이라고 생각합니다.

코딩실력은 무언가를 만들어보면서 막히는 문제를 어떻게 해결할지 고민하고 해결하는 과정속에서 자라난다는 것을 전제로 시작하는 이야기입니다.

"그래서 많이 만들어보면 잘할수 있게됩니다" 이렇게 이야기 하면 꽤 막연하게 들릴수 밖에 없을것 같습니다.
"모르는데 어떻게 만들어?" 라는 생각이 아마 가장 먼저 들수 있지 않을까 생각합니다.
아마도 사람에 따라서 듣는 사람입장에서는 현실성 없는 이상적인 이야기정도로 들릴 수도 있을것 같습니다.

그런데 말입니다.
무언가를 만들어본다는 말에서 "무언가" 라는것은 그게 그 어떤것이여도 상관이 없다는 이야기입니다.
즉 거창할 필요없고 아주 시시한것이여도 상관없다는 의미입니다.
"Hello 라는 이름이 쓰여진 버튼을 만들고 버튼을 눌렀을때 버튼의 색을 노란색으로 바뀌도록 하는 것"을 그 "무언가"라는 이름의 미션으로 정해도 상관없다는 이야기입니다.
지금 이야기한 이 미션은 사람에 따라 누군가에겐 간단할수도, 또는 어려울수도 있습니다.
이것이 어렵다고 생각하는 사람이라면 "눌러도 작동안하는 Hello 라는 이름이 쓰여진 버튼을 만들어보는 것"으로 미션을 축소해서 난이도를 줄여서 해볼 수 있습니다.
"눌러도 작동안하는 Hello 라는 이름이 쓰여진 버튼을 만들어보는 것" 을 할수 잇는 사람이라면,
"눌러도 작동안하는 World 라는 이름이 쓰여진 버튼을 만들어보는 것" 도 해볼 수 있겠지요.
혹은 "Hello버튼을 누르면 World버튼이 생성되도록 만들어보는 것"도 시도 해볼 수 있을지 모릅니다.
만약 이렇게 떠올려 본 미션이 내가 아는 범위를 좀 넘어서는 이유로 방법을 몰라서 어렵다면 안해도 괜찮습니다. 물론 도전해보는것도 좋습니다.
이렇듯 현재 알고있는, 혹은 살짝 내가 아는 범위를 넘어서는 미션들을 생각해볼 수 있는 만큼 다양하게 생각해내보고 그것들을 모두 만들어 보는겁니다.

이렇게 해보기 위해서 자신이 가진 코딩실력과 크게 동떨어져있는 대단한 지식들이 필요한것이 아닙니다.
왜냐하면 이 미션은 스스로가 할 수 있을것 같은 정도의 난이도로 스스로가 고려해서 만든 미션들이기 때문입니다.
물론 이렇게 스스로에 의해 만들어진 미션들이라 할지라도 만들어보기 전에는 쉬울지 알기 어려울 수 있습니다.
그러나 그럴땐 해보다가 어려우면 난이도를 더 낮추면 되는것이지요.

이렇게 스스로 미션을 떠올려보고 만들어보는 과정에서 스스로가 무엇에 어려움을 느끼고 무엇을 모르는지를 명확하게 알수 있게됩니다.
이때 어려움을 느낀 그것들이 무엇보다도 지금 알아야할 학습우선순위의 가장 위에있는 내용들이라고 생각해도 무방합니다.
그리고 이렇게 스스로가 만들어낸 미션에서 막힌 문제를 어떻게 해결할지 방법을 찾아가는 과정에서 진짜 실력이 쌓입니다.
그리고 이렇게 만든 미션들은 스스로의 실력을 고려해서 만든 미션들입니다.
만약 무언가에 막힌다면 스스로가 처한 상황이 어떤상황인지 그리고 무엇을 몰라서 못하고있는건지를 판단하기 수월합니다.
따라서 자신이 처한 문제에 대해 방법을 찾아가는 과정도 스스로의 논리를 통해 접근하기 수월합니다.
이 상황에서는 누군가에게 질문을 하더라도 그냥 단순히 "어떻게하나요" 가 아니라 "이러이러한 이유때문에 무엇이 문제가된다 그래서 이 문제를 해결하기 위한 방법이 필요하다" 라고 자신이 처한 상황을 논리적으로 전달할 수 있게됩니다.
목표를 달성하기 위해 알아야할 것이 무엇인지, 현재 무엇이 부족한지를 명확하게 논리적으로 인지하고있는 것 만으로도 해결에 가까워져 있다고 이야기해도 과언이 아닙니다.

그런데 이 방법에는 한가지 어려운점이 있습니다.
이 방법은 스스로가 해볼만한 주제를 창작해서 스스로에게 부여해서 스스로 해결하는 과정을 거쳐야하는 방법입니다.
따라서 학습자는 이것을 하기 위해서는 능동적이고 자기주도적이여야 한다는 점입니다.
이 방법의 학습효율은 매우 훌륭하다고 생각하지만 절대적으로 자기주도적이고 능동적이여야하는 점이 있기 때문에 이 방법이 모두에게 쉬운 방법이라고 이야기하기는 어려울수도 있을것 같습니다.
일단 스스로를 움직일 수 있을만한 흥미로운 주제를 스스로가 떠올리는 것이 사람에 따라서는 쉽지 않을수도 있습니다.

이 어려운 점을 어떻게 해결해야할까..?
호기심이란건 어떤 계기가 없이 문득 떠오르기도하지만 보통은 그러기 쉽지 않습니다.
그러나 어떤 계기가 하나 있다면 호기심은 거기에서 출발할 수 있습니다.
그럼 호기심을 만들어낼 수 있을 계기가 일단 있어야할텐데요..

화면에 버튼을 하나 만들어서 그 버튼을 잠시 바라보며 생각해보는겁니다.
자.. 일단 버튼을 하나 만들었습니다.
그 다음 무엇을 해볼 수 있을까..
버튼이니까 누르면 어떤 일이 일어나게 해 볼수 있을텐데..
무슨일이 일어나게 해볼까..
생각해보는겁니다.

버튼을 누르면 console 에 hello 라고 출력해본다
버튼을 누르면 버튼의 색을 바꾼다
버튼을 누를때마다 버튼이 커지게 한다
버튼을 누를때마다 버튼이 작아지게 한다
버튼을 누를때마다 버튼이 작아지게하다가 너무 작아지면 버튼이 제거되게 한다
버튼을 누를때마다 버튼의 점점 흐려지다가 아주 흐려지면 버튼이 제거되게 한다
버튼을 누르면 버튼이 사라지게 한다
버튼을 누르면 5초후에 버튼이 사라지게 한다
버튼을 누르면 5초후에 새로운 버튼이 누른 버튼 왼쪽에 생성되게 한다
버튼을 누르면 5초후에 새로운 버튼이 누른 버튼 왼쪽에 생성되게 하고 생성된 버튼을 누르면 5초후에 누른 버튼의 오른쪽에 있는 버튼이 제거되게 한다
버튼을 누르면 버튼의 색을 현재 시간이 밤이면 Black, 낮이면 White가 되도록 해본다
버튼을 누르면 여섯개의 무작위의 숫자가 출력되게 해본다
버튼을 누르면 1에서 10사이의 숫자가 무작위로 하나 출력되게 해본다
버튼의 모양을 토글스위치로 만들고 누를때마다 on off 되게 만들어본다
버튼을 누르면 오늘의 날짜를 출력하도록 해본다
버튼을 누르면 macOS에 폴더마다 생성되는 .DS_Store 파일을 모두 사라지게 만들어본다
버튼을 누르면 컴퓨터 내에 중복되는 파일이 있다면 하나만 남겨두고 지우게 만들어본다
버튼을 누르면 버튼의 색을 현재 실제 기온에 따라 30도 이상의 뜨거운 기온이면 빨간색, 24도정도의 온화한 기온이면 녹색으로 표현되게 해본다
버튼을 누르면 현재시간을 출력하도록 해본다
버튼을 누르면 오늘의 원달러 환율을 출력해본다
버튼을 누르면 어제와 비교해서 비트코인이 얼마나 변동이 생겼는지 출력해본다
버튼을 누르면 오늘의 날씨의 기온을 출력하도록 해본다
버튼을 누르면 사진파일을 선택하는 창이 나오게 한다
버튼을 누르면 사진파일을 선택하는 창이 나오게 해서 파일을 선택하면 사진의 해상도를 구해서 출력하도록 한다
버튼을 누르면 사진파일을 선택하는 창이 나오게 해서 파일을 선택하면 사진을 촬영한 카메라의 모델명을 출력하도록한다
버튼을 누르면 사진파일을 선택하는 창이 나오게 해서 파일을 선택하면 사진을 촬영한 카메라의 현재 중고가격을 출력하도록 한다
버튼을 누르면 사진파일을 선택하는 창이 나오게 해서 파일을 선택하면 사진을 촬영한 카메라 제조사의 현재 주가를 출력하도록 한다
버튼을 누르면 음악파일을 선택하는 창이 나오게 해서 파일을 선택하면 음악의 재생길이를 출력하도록 한다
버튼을 누르면 음악파일을 선택하는 창이 나오게 해서 파일을 선택하면 음악을 재생한다
버튼을 누르면 음악파일을 선택하는 창이 나오게 해서 파일을 선택하면 음악의 음을 그래프로 표현해서 보여준다
버튼을 누르면 음악파일을 선택하는 창이 나오게 해서 파일을 선택하면 노래를 부른 가수의 성별을 판단해서 출력하도록 해본다
버튼을 두개 만들고 A버튼을 누르면 음악파일을 선택하는 창이 나오게 해서 파일을 선택할수 있게 하고 B버튼을 누르면 선택한 음악파일이 재생되도록 한다
이렇게 끝없이 떠올려보는겁니다.
기존의 아이디어에 살을 계속 조금 붙여보는 방법으로 계속 떠올려볼 수 있습니다.
이렇게 떠올려본것은 어려운 미션일수도 있고 수월할수도있습니다.
일단은 자신이 할 수 있을지는 이런 아이디어를 떠올려본 후 그냥 해보는겁니다.
하다가 어려우면 포기하고 미션을 좀 축소시켜서 해보면 되는겁니다.
호기심이 생기기를 바랍니다.
그래야 실행하게 됩니다.

왜 미션을 스스로 생성해내야하는가에 대한 의문을 가질 수 있습니다.
분명 스스로 할거리를 생성해내지 않아도 이런 해볼거리들을 찾을 방법들이 많이 있습니다.
하지만 이 미션들은 나의 관심사에서 동떨어져있거나 내 실력이 고려되지 않은 미션들일 가능성이 높습니다.
나의 상황과 관심사와 동떨어진 주제들이 아무리 중요한 내용이라고 하더라도 동기부여가 되기 쉽지 않을거라는 생각입니다.
자신의 실력이 고려되지 않은 미션을 하게되면 고려되지 않은 만큼 자신의 논리가 문제해결에 개입될 여지가 줄어들어 그만큼 스스로 무언가를 해나가고 있다는 느낌을 받기도 어려울겁니다.

결론..
이 방법은 처음에 이야기했듯 모두에게 효과적인 방법이 아닐수도 있습니다
이 방법은 스스로가 이러한 호기심을 만들어내고 스스로가 스스로에게 미션을 부여할 수 있는 자기가 자기를 주도할수 있는 능동적인 사람들에게 매우 효과적일것이라 생각합니다

실력이 부족한것과 무언가를 만들어 볼 수 있는지의 여부와 관련이 없습니다
실력이 부족하다고 하여 아무것도 만들 수 없음을 의미하는 것이 아닙니다
현재 실력으로 할수 있는 범위 혹은 조금 넘어서는 범위내에서 아주 간단한것이라도 상관없습니다
무언가를 만들어보는 시도를 한다는건 그 과정에서 무언가 막히는 것을 만나게되는 가능성을 만드는 활동이기도 합니다
이 과정에서 진짜 실력이 만들어집니다