이런 질문을 해도 되는지 잘 모르겠지만 궁금한 마음에 한 번 올려봅니다.
제가 처음 소프트웨어 공부를 하면서 느끼는 점은 수학 교과목과 비슷하다는 느낌을 많이 받았습니다.
단순히 달달 외우기보다는 예를 들어 안풀리는 심사문제를 계속 고민하고 물고 늘어지는 습관이 필요할 거 같다는 생각이 듭니다.
그렇다면
만약 안풀리는 심사문제가 있다면 풀이과정을 보기 전에
최소 10분 또는 15분 등등 최소한 얼마의 시간 동안 고민하고 풀이과정을 보는 것이 도움이 될지 여쭤보고 싶습니다.
감사합니다.
학습 전략에 대해서는 다음 책을 참고하는 게 좋습니다.
<어떻게 공부할 것인가>
http://www.yes24.com/Product/Goods/15341766
학습 능력이 100세까지 행복한 인생을 만든다.
더 늦기 전에 공부 습관을 바꿔라!
125년의 학습 연구, 40년의 인지심리학 연구 성과, 11인의 학자가 10년간 수행한
‘교육현장 개선을 위한 인지심리학의 응용’ 연구를 집대성한 하버드대학교 출간 교육학 명저!
도서 소개에도 설명이 있습니다만, 어떻게 공부하는 것이 효율적인가는 오랜 연구 주제였습니다. 교육학에서는 이런 문제를 다룹니다. 효과적인 교수법은 무엇이고, 효과적인 학습법은 무엇인가? 수학은 어떻게 공부해야 하는가? 같은 질문입니다.
125년 동안의 연구 논문을 면밀하게 분석하고 정리하고 인지심리학의 관점에서 정리한 책입니다. 이외에도 학습법에 대한 책은 많지만, 안 보는 것이 좋습니다. '서울대 합격생 수기'처럼 자신에게 맞는, 자신이 선호하는 전략을 소개하거나 개인의 경험을 지나치게 일반화하거나 하는 등의 문제가 있습니다.
대부분의 도서관에 책이 있을 겁니다. 가까운 도서관을 찾아서 빌려보면 될 겁니다.
학습에서 중요한 것은 '인출 학습'입니다. 무조건 암기하는 것이 아니라 인출 학습을 하는 것입니다. 기억에서 인출하는 것으로 아는 것과 모르는 것을 구분할 수 있습니다. 뇌의 신경 회로가 강화되면서 기억력이 강화됩니다. 무조건 암기만하는 것보단 앞에 인형을 두고 설명하거나 블로그, 메모장, 노션 등에 설명하는 문서를 작성하는 것이 더 효과적인 방법입니다. 오늘 공부한 내용을 정리한다고 할 때도 마찬가지입니다. 책을 보지 말고 scanf를 학습했다면 scanf에 대한 설명을 스스로 작성하고, 모르는 부분만 책을 참고하면서 정리 노트를 작성하는 것입니다. 이는 정리 노트가 아니라 노트를 작성하면서 얻는 인출 학습 경험이 더 큽니다.
코딩 도장에서는 인출 학습을 위한 장치로
퀴즈, 연습문제, 심사문제가 있습니다.
예제와 설명만 읽으면 내가 아는 것처럼 느껴집니다. 그러나 아직 학습을 한 것은 아닙니다. 인출 학습을 해야만 합니다. 이를 위해 퀴즈로 지식을 묻고, 연습 문제로 지식을 응용하게 하고, 연습 문제보다 살짝 어려운 심사 문제로 인출 학습을 극대화합니다. 제가 사이트 관리자이자 코딩 도장 시리즈의 기획자이니까요. 그런 의도로 설계한 겁니다.
UNIT 38 심사문제 지뢰찾기처럼 중간에 난이도가 다소 높은 허들이 있는 문제가 있습니다. 이는 중간고사와 같은 느낌입니다. 항상 평탄해서는 안 됩니다. 게임에서도 '이렇게 어려운 것을 누가 해?'라고 했지만, 어렵기 때문에 베스트셀러가 되기도 합니다. 매니아를 형성하기도 하죠. 이는 비디오 게임의 초창기에도 그랬고, 현대에도 그렇습니다. <다크 소울> 시리즈가 어려운 게임이지만, 그렇게 매니아를 형성한 것으로 알고 있습니다.
고민하고 허들을 한 번 넘는 것으로 큰 성취감을 얻을 수 있습니다. 그런 장치 정도로 이해하면 됩니다. 다만, 어려우니 포기하고 넘어가는 것도 괜찮습니다. 다음에 다시 하면 좀 더 쉽게 해결할 수 있습니다.
컴퓨터 공학은 수학과에서 시작했습니다. 앨런 튜링도 수학자였지, 컴퓨터 공학자는 아니었습니다. 현대는 모든 학문이 분화되어 있지만, 과거에는 지식이 그렇게 많지 않았고, 분화되어 있지 않았습니다. 수학과 프로그래밍이 비슷한 건 우연이 아닙니다. 수학적 기호 표기에서 분화했습니다. 프로그래밍 언어는 또한 언어학에서도 영향을 받았습니다.
물고 늘어지는 학습에 관해
물고 늘어지는 학습은 바람직하지 않습니다. 과거부터 잘못된 예가 반복되어 전수되고 있어서 시장에서 사라지지 않고 있습니다.
수학과 프로그래밍, 또는 기타 다른 학습에서도 동일합니다.
수학과 프로그래밍은 모두 문제 해결 능력을 발전시키는 것입니다. 새로운 정보를 받아들이고 기존 정보를 연결하고 새로운 개념을 인지하는 과정입니다.
수학적 개념, 프로그래밍 개념과 문제 해결 능력을 습득하려면 추론, 추상화, 비교, 패턴 인식 및 문제 해결 능력과 같은 인지 능력을 사용하게 됩니다. UNIT 1의 도입부에 '문제 해결을 위한 과학적 사고'가 설명되어 있는 이유입니다. 컴퓨테이셔널 씽킹이라는 용어로 정리되고 있지만, 이런 용어가 없어도 기본 학습 과정은 위와 같습니다. 추론, 추상화, 비교, 패턴 인식 및 문제 해결 능력입니다.
감정적 측면: 지나치게 어려운 학습은 정서적으로 불안을 유발할 수 있고, 성취감을 느낄 수 없으면 학습에 대해 의욕을 잃을 수 있습니다. 흔히 수포자라는 말이 그런 것입니다. 학습을 효과적으로 하려면 지나치게 어려운 학습이 아니라 적당한 난이도가 있는 학습을 선택하는 것이 좋습니다. 이를 통해 정서적 안정을 유지하고, 적당한 성취감을 느끼면서 학습을 이어가는 게 좋습니다.
코딩 도장이 아니라 다른 교재라도 자신에게 맞는 교재가 있다면 선택하는 것도 방법이라는 뜻입니다.
사회적 측면: 학생, 교사, 주변 동료들과 긍정적인 상호작용하에서 공부하는 것이 중요합니다. 의욕을 꺾는 사람이 있다면 멀리하는 게 좋고, 서로 의지를 북돋을 수 있는 사람들을 만나는 게 좋습니다. 즉, 내 기를 빨아 먹는 에너지 뱀파이어는 멀리 하고, 서로 긍정적인 기운을 주고받는 사람을 가까이 두는 게 좋습니다.
이러한 사람들을 만들 수 있는 몇 가지 방법이 있습니다.
모각코: 모여서 각자 코딩하는 모임, 페이스북 그룹 등이 있습니다. 스스로 모집하는 것도 방법입니다.
스터디 모음: 코딩 도장 스터디를 만들거나 관련 스터디를 찾는 방법
부트캠프: 비용이 들어가는 곳도 있지만, 비용이 들지 않아도 되는 방학 때만 운영하는 부트캠프가 있습니다. 정부나 각 지자체에서 운영하는 곳을 찾아보세요.
https://boottent.sayun.studio/camps
국비지원 무료 교육 과정들도 있습니다.
신경과학적 측면: 학습은 결국 뇌의 신경망을 연결하는 행위입니다. 뇌는 신경 가소성이 있습니다. 사용하면 강화되고 사용하지 않으면 신경 회로가 약화됩니다.
수학과 프로그래밍이 처음이라면 당연히 이 신경망이 강화되는 물리적인 시간이 필요합니다. 따라서 양질의 학습 이후에는 양질의 수면이 중요합니다. 수면 측정 앱 등도 있습니다. 손목 밴드 같은 제품도 있습니다.
양질의 수면으로 뇌가 오늘 학습한 것을 정리하고 신경망을 강화할 수 있게 해주는 게 좋습니다.
숫자와 언어를 처리하는 영역은 다릅니다. 문제를 푸는 과정에서 뇌의 다양한 영역이 협동하여 정보를 처리해야 하고, 그에 따라 문제 해결 능력이 향상됩니다.
학습은 뇌의 인지적인 과정이라는 것을 이해할 필요가 있습니다. 처음 추천한 책을 보는 게 좋습니다.
안 풀리는 문제: 해법을 보세요.
너무 오래 고민하는 것은 좋지 않습니다. 적절한 도전이 더 중요합니다.
풀리지 않는 문제에 계속 도전하는 것은 실패감을 학습할 수 있고, 이는 부정적인 기억 연상을 일으키고, 학습 동기 저하를 일으킵니다. 결론은 '수포자'가 될 겁니다. C 언어 포기자처럼 'C포자'가 되는 경우도 있겠습니다.
풀이를 보고 학습했다면 문제 해결 전략을 이해하고 새로운 문제에 적용할 수 있는 연습을 해야 합니다.
코딩 도장은 입문 단계에서 반복해서 인출 학습을 하도록 되어 있으니 책을 차례대로 공부하면 이 문제는 해결됩니다.
프로그래밍 언어 입문 이후에는 자료구조, 알고리즘 등이 있고, 다양한 알고리즘 심사 사이트가 있습니다. 이러한 사이트에는 문제 해결 전략을 학습할 수 있는 몇 만 개 이상의 문제가 있습니다.
인출 학습이기 때문에 어려운 주제는 매일 아침 인출하면 됩니다.
선택 정렬이 어렵다면 매일 아침 선택 정렬 코드를 작성하면 됩니다. 100일 챌린지처럼 100일 동안 매일 아침 암기한 코드를 작성하고 실행하면 됩니다. 보통 정보 올림피아드나 국제 대회를 준비하는 학생들은 매일 이런 루틴을 반복하면서 다양한 기초 알고리즘과 자료구조를 암기합니다.
연결 리스트가 어려운 게 아니라 반복 횟수, 인출 학습이 부족한 것이므로 연결 리스트를 매일 아침 작성하면 됩니다. 코딩 워밍업이죠. 체육 시간에 기초 체조를 하는 것과 같습니다.
선택 정렬 5분, 삽입 정렬 5분, 퀵 정렬 5분, 연결 리스트 5분... 대부분 5분 안에 할 수 있는 간단한 레벨이 될 때까지 매일 아침 워밍업으로 반복하는 것입니다. 나중에 반복하면 됩니다.
피보나치 수열 5분, 메모이제이션으로 피보나치 수열 5분, 동적 계획법으로 피보나치 수열 5분, 비재귀로 피보나치 수열 5분과 같은 워밍업을 하면 됩니다.
완전히 자기 것이 된 코드가 있으면 다른 책, 다른 사람이 작성한 자료구조, 알고리즘 코드도 금방 이해할 수 있고, 차이점도 금방 발견하고 정리할 수 있습니다. 문제는 인출 학습의 횟수입니다.
한국인의 영어 학습이 어려운 이유가 어순 차이 때문이라고 믿는다면 아닙니다. 대부분은 인출 학습이고 반복의 정도 차이입니다.
반대로 한국에 사는 외국인은 한국어를 유창하게 잘 합니다. 어순 차이 때문이라면 외국인들도 한국어 학습이 매우 어려웠어야 합니다.
"Have a nice day"가 자동으로 안 나온다면 그 말을 거의 안 해봤기 때문입니다. 입력만 했지 인출, 입으로 떠들기는 거의 다 안 해봤기 때문입니다. 그래서 혼잣말로 세상 모든 것을 묘사하기라는 학습법이 있습니다.
아침부터 하루종일 모든 일상을 영어로 설명하는 것입니다.
일어났다, I woke up
문을 닫는다, I cloed the door.
문을 쾅 닫는다, I slammed the door.
길을 걷는다
지하철 승강장에 기다리는 사람들이 있다. There are people waiting on the platform. They don't look happy. 행복해보이지 않는다.
도로에 차들이 다닌다. 한 눈에 차는 10대 정도 보인다. 10대 중에 9대는 검정색이다. 사람들은 검정색을 사랑한다.
거의 이런 표현들을 영어로 매일매일 반복하면 한 달 정도면 거의 다 외우고 영어는 그냥 술술 나올 겁니다.
조선시대 노비가 영어를 더 잘했다고 하는데, 이는 communcative approach, 커뮤니케이션 중심 접근 방법이었고, 일상에서 반복 사용했기 때문입니다. 즉 인출 학습을 했다는 뜻입니다.
여기 정약용이 쓴 영어 교재도 있으니 도서관 가서 찾아보세요.
-. 조선시대 영어교재 아학편
http://www.yes24.com/Product/Goods/58215776
발음교재로 나왔지만, 잘 보면 커뮤니케이션 중심 접근 전략이 당시의 기본 방법이었다는 것을 알 수 있습니다.
코딩 도장 심사문제의 통과율은 대부분 90%이고, 일부 80% 전후입니다. 난이도 조절을 많이 했고, 대부분의 경우에는 적당한 난이도가 되도록 했습니다. 다만, 멘토가 없고 독학이면 어려움이 있을 수 있습니다. 동영상 강의를 많이 참고하세요.