안녕하세요 코딩도장 책을 공부하면서 공부방법에 대해서 깊은 고민이있어 질문글올립니다. 우선 저는 그전까지 파이썬공부를 이것저것 많이해봤습니다. 점프투파이썬 혼자공부하는파이썬 등등 여러책을 깔짤대는 수준이여서.. 이번에는 정말 제대로 공부해보고자 코딩도장책을 사서 공부중에있습니다. 강사님이 설명을 워낙잘해주셔서 이해또한 잘됐다생각하고 리스트 튜플등 시컨스 자료형에 대해서 배울떄까지 과제는 어렵지만 구글링이든 뭐든어떻게해서 해결을 하면서 공부를 해왔습니다. 그러다가 챕터 20부터는 서서히 어려워 지더니 리스트 응용 딕셔너리응용등에서는 강사님이 설명해주신 개념이 뭘뜻하는지는 알겠는데 과제는 도저히 제힘으로 풀수없는 상태가 되고말았습니다...
흔히는 코딩공부를 암기하고말고 이해하라는데 과제에 필요한 개념(코드)를 직접 타이핑해보려니 뭐부터 시작해야할지모르겠고 지금생각해보니 앞에서 공부한것또한 뒤죽박죽되서 현재 공부방법이 잘못된게 아닌가 깊이 생각됩니다...
현재저는 방학생이라 하는게 없어서 코딩도장교재는 한달정도 계획을 세워서 공부하려했었는데 제가 진도만 너무 빨리나가는것에 치중을둬 잘못공부한게 아닌가 생각됩니다 ㅠㅠ 흔히는 코딩은 암기가 아니라고하는데 과제풀떄 필요한 코드를 갖다쓸때 어떤 개념 혹은 코드가 필요한지는 암기하고 푸는게맞나요? 대체 처음에는 교재에있는 예제나 몰랐던 연습문제 혹은 과제에있는 코드는 다 암기하는 방식으로 공부하고있었는데 이런식으로 공부하는건 잘못된 방법이라고 다들그러셔서 대체 그럼 어떻게 공부하라는건지 모르겠습니다 ㅠㅠ 현재 중반정도까지 진도나갔는데 앞에서 한게 정리가안되는 느낌입니다.. 대체 어떤식으로 코딩공부를 해야할까요.. ㅠㅠ
학습자의 수준은 천차만별이므로 책 하나로 다 된다고 할 수 없습니다.
처음 입문한다면 예제 코드를 하나씩 실습하면서 이해하는 게 가장 중요합니다. 눈으로만 공부하면 이해하는 게 아닙니다.
마치 수영을 눈으로만 익히는 것과 같습니다. 유튜브 수영 강습 영상을 10번 본다고 수영이 될까요?
단계별로 예제를 실습해보고, 예제를 조금 바꿔서 실험도 하고, 응용도 해보면서 학습해야 합니다. 이론의 예제를 대부분 패스하고 눈으로만 이해하고 암기하는 방식으로 학습한다면 어떤 입문서를 봐도 프로그래밍 입문은 실패할 겁니다.
피겨 스케이팅을 눈으로 보고 탈 수 있다고 주장하는 것이 얼마나 터무니 없는지 알 수 있을 겁니다. 이론은 쉽지만, 끊임없이 반복해서 몸에 익혀야만 내것이 될 수 있습니다. 예제, 퀴즈, 연습문제, 심사문제는 몸에 익히는 과정을 위해 안배한 것입니다. 몸에 익히는 과정 없이 눈으로만 이해하려고 하면 처음에는 효율적인 것 같아도 점점 어려워지고, 뒤로 갈수록 진도를 나갈 수 없게 될 겁니다. 당연합니다. 눈으로 보고 배운 피겨 스케이팅인데 이제 점프도 한다고 하니까 안 되는 게 당연합니다. 수영도 마찬가지입니다. 흔히 1만 시간의 법칙이라고 하지만, 시간을 들인만큼 실력도 향상됩니다. 프로그래밍도 비슷합니다. 절대적으로 코딩에 들인 시간만큼 실력이 향상됩니다.
UNIT 20까지의 학습을 토대로 시험 성적 10개를 받아서 평균을 구하는 프로그램을 스스로 작성할 수 있을까요? 책도 안 보고, 인터넷도 안 보고, 메모장 하나만 사용해서요. 안 된다면 연습이 충분하지 않은 겁니다. 기본 과정을 통과했지만, 기본기는 제대로 습득되지 않았다는 뜻이니까요.
심사문제도 스스로 고민하고 풀어본 다음에 틀리고, 해설을 봐야 합니다. 대부분은 심사문제를 빈칸으로 제출하고 해설부터 보고 정답부터 끼워 맞추고 빨리 통과하려고 하죠. 결국 스스로의 성장을 깎아 먹는 행위이고, 나중에 자신은 모르지만 그만큼 돌려 받게 됩니다.
때로는 천천히 하는 게 가장 빠른 길입니다.
정보처리기사 시험 개정 전에는 정렬 소스 코드 전체를 통으로 암기해서 시험을 통과하는 사람도 있었습니다. 변수 선언이 무엇인지는 전혀 이해하지 못하는 것이죠. 내림차순 정렬인지, 오름차순 정렬인지의 차이도 모르고, 정렬 코드를 암기만 한 것이죠. 조건식에서 >를 쓰는지, <를 쓰는지에 따라 정렬 순서를 바꿀 수 있다는 간단한 원리조차 모르고 무작정 코드를 암기한 겁니다. 그래서 자신이 암기한 코드는 오름차순 정렬인데, 시험에는 내림차순 정렬이 나와서 틀렸다는 것이죠. 원리를 모르고 암기로 해결할 수 없습니다. 애초에 프로그래밍의 길이 아니라 잘못된 길로 가고 있는 것이죠.
5초컷 초간단 MBTI라는 게 있습니다.
Q. 문제가 생겼을 때 당신의 대처법은?
1. 말이 많아짐
2. 생각이 많아짐
1번으로 대답하면 E 유형
2번으로 대답하면 I 유형
파이썬으로 mbti.py를 짜고, 간단한 입력과 출력, 조건식으로 이런 것도 만들 수 있을 겁니다. 친구들에게 자랑도 할 수 있겠지요.
당장은 명령창이지만, 나중에 웹 프로그래밍도 입히면 같은 로직에 웹이라는 껍데기만 입히면 됩니다. 아이폰이나 안드로이드 앱도 껍데기이고, 그 안의 로직은 동일합니다. 애초에 이 정도 기초 로직을 짤 수 없으면 UNIT 20까지의 학습도 학습을 한 게 아닙니다.
예제가 재미 없다면 지금까지 배운 내용으로 자랑할 수 있는 프로그램을 만들어보세요.
UNIT 20의 FizzBuzz 문제는 프로그래밍 면접의 단골 문제입니다. 신입이 이 정도 문제도 작성하지 못한다면 떨어뜨린다는 것이죠. 프로그래머는 대부분 이 문제를 잘 풀지만, 신입 지원자의 40%는 이 문제를 풀지 못해서 떨어집니다. 정말이냐고 묻는다면, 많은 회사의 면접 담당자는 이 문제를 출제하는 것으로 무늬만 컴공, 학점만 잘 받은 컴공을 떨어뜨릴 수 있어서 다행이라고 생각한다고 합니다. 지원자의 99%는 걸러낼 수 있다고 합니다. 에디터도 없고, 종이와 펜으로 손코딩하는 경우가 더 많습니다. 그러나 매우 간단한 문제이므로 손코딩도 문제는 없겠지요.
UNIT 23의 지뢰찾기 문제도 프로그래밍 면접의 단골 문제입니다. 2차원 리스트(배열)를 조작할 수 있는지, 이 정도 반복문 제어 구조는 스스로 짤 수 있는지 본다는 것이죠.
https://krksap.tistory.com/1136
C 언어 코딩 도장 UNIT 37에는 전치행렬 구하기 심사문제가 있습니다. 위 심사 문제의 1번이죠.
파이썬 코딩 도장에서는 전치 행렬은 없고, 대각선으로 별 출력하기 문제가 있습니다.
2차원 배열을 사용하고 응용할 수 있는지 묻는 문제입니다.
같은 책을 어려운 부분은 패스하고, 1회 통독하고, 2회차 반복하는 것도 좋은 방법입니다.
단, 예제는 직접 다 입력하고 실습해봐야 합니다. 간단해 보이지만, 실제로 해보면서
코딩 에러도 겪고, 그 에러를 직접 수정하는 과정도 학습의 한 부분입니다.
눈으로만 이해하면 항상 완벽한 코드를 종이로만 보기 때문에 실제로 코딩할 때는
코딩도 못해, 에러는 왕창 나와, 어떻게 고칠지도 몰라, 코딩은 어려워, 나랑 안 맞아...
이렇게 됩니다. 눈코딩하지 말고, 백문이 불여일타... 라는 말이 있는 게 코딩 입문입니다.
심사문제가 막힐 때는 포럼 오른쪽 상단에서 UNIT 번호로 검색하고 이전 질문과 답변을 참고하고,
그래도 안 될 때는 질문을 올리세요.
어려움을 겪어야 성장을 한다.
이것도 학습에 있어서 가장 중요한 개념입니다.
어려움을 겪어야 성장을 합니다. 따라서 무조건 쉬운 게 아니라 지금 어렵다고 느끼는 그 자체가
성장의 한 과정이라는 것을 아는 것도 중요합니다.
눈으로 수영 공부하는 사람보다 매일 수영장에 가서 1시간씩 수영하는 사람이 더 많은 어려움을 겪고,
더 많이 성장하는 것은 당연합니다.
차근차근 제대로 성장하세요.