전공자분들께선 열혈강의 c로 처음 공부할때 연습문제 그냥 쉽게 푸나요?

개성만점의 이미지

저는 비전공자인데 예제를 이해하는건 어렵지않은데 바로 밑 연습문제를 풀때는 도통 이걸 갑자기 어떻게 풀어라는거지?
하는 생각을 자주합니다. 전 예술관련 전공자라 그런지 개념 난이도와 연습문제 난이도 차이가 크게 느껴지네요.
사실 포인터도 개념은 소문보다는 덜 어려운데 연습문제는 뭐랄까 단어만 알려준채로 소설책 속 한국어를 프랑스어로 번역하라는 것처럼 낯설어요.

제가 영 소질이 없는거지..그냥 궁금해서 물어봅니다. 포기는 안해요^^

세벌의 이미지

저는 대학교에서 수학을 전공했습니다.
학생들을 가르치다 보면 "개념은 이해했는데 문제는 잘 못풀겠다"는 말을 종종 듣습니다.
그런데 그런 학생은 "개념을 이해했다"고 생각한 거지 제가 보기엔 개념을 "제대로" 이해 못한 경우가 많습니다.
수학에서 기본 개념이라 할 수 있는 "정의" 자체를 이해 못하고 문제를 풀려고 하는 경우가 많습니다.
컴퓨터 프로그래밍도 비슷합니다.

님께서 소질이 있는지 없는지는 이제 시작하신 거 같은데 벌써 판단하기는 어렵겠죠?

모르는 문제 있으면 구체적으로 질문하시면 여러분들이 잘 도와줄 겁니다.
여러분들 중엔 까칠하신 분도 많습니다. 까칠한 답변에도 좌절하지 마세요.
포기는 안 한다고 하셨으니 잘 될 겁니다.

개성만점의 이미지

감사합니다. 이런 사이트에 물어보는것도 좀 조심스러워서 ㅜ.ㅜ 고민하다 올린건데 마지막 한마디 정말 큰 힘이됩니다.
사실 포기하고싶던 순간 많았지만 그때마다 포기하지않아서 그래도 쪼금씩 발전했던게 아까워서 자꾸 하고싶습니다 ^^

 의 이미지

예제를 이해했다고 착각하는 경우를 경계하세요.
"예제는 이해했지만 연습문제가 안 풀리는" 경우가 생기는 이유는 대체로 그렇습니다.

물론 교재에서 연습문제 난이도 조절을 실패해서 그렇게 되는 경우도 없지는 않습니다만, 애초에 그런 책은 친절한 입문서가 아니죠.
반면 친절한 입문서일수록 되려 그런 착각을 불러일으키기 쉬운 것 같더군요.

1. 예제 코드는 반드시 전부 직접 타이핑해서 컴파일, 실행해보세요.

물론 귀찮습니다. 무슨 타자연습 시키나 싶기도 하고, 두툼한 프로그래밍 교재 세워놓고 따라 치려면 책상 위에 독서대 올려 놓을 공간도 필요하고 그렇거든요.

그러다가 오타 한 번 내서 컴파일 안되면 원인 찾는다고 책하고 모니터 번갈아 보면서 수십 분씩 날리고 그러는 거죠. 그거 하나하나가 귀중한 경험입니다.
나중에 가면 본인에게 어떤 실수, 어떤 오타가 잦은지 파악이 될 겁니다. 그러면 특별히 더 주의를 기울이게 되기도 하고, 원인 파악도 그만큼 더 빨라집니다. 거기서 더 나아가면 "다른 초보자가" 저지르기 쉬운 실수들도 금방 파악하고 지적할 수 있게 됩니다. 그렇게 전문가가 되는 겁니다.

2. 예제 코드가 잘 컴파일되고 책에서 설명한 결과가 나오면, 조금씩이라도 바꿔 보세요.

예제 코드라는 게 뭔가 조금씩 추가해 볼 여지가 있는 코드들이 많아요. 아쉬운 기능이라든가. 책에서 꼭 시키지 않아도 할 수 있을 것 같으면 해 보는 겁니다.

엉뚱하게 바꾸면 컴파일이 안 될 겁니다. 돌아가더라도 예상하던 결과가 나오지 않을 때도 있습니다. Undo는 그럴 때 쓰라고 있는 거죠. 조금씩이라도 "자신만의 코드"를 작성해 보는 연습을 그렇게 해 보는 겁니다. 점점 더 많은 코드를 직접 짤 수 있게 될 것이고, 그러다 보면 언젠가는 빈 파일에서부터 시작할 수도 있게 될 겁니다.

3. 이해가 안 되는 부분이 생기면 해결하고 넘어가세요. kldp 프로그래밍 질답란을 이용하셔도 좋습니다.

예제 코드의 동작이나, 직접 짠 코드의 동작이나, 혹은 교재 본문의 설명 중에 제대로 이해가 안 되거나 본인 생각과 다른 부분이 있으면 아무리 사소하더라도 그냥 지나치지 마세요. 꼼꼼하게 따지고 넘어가야 합니다.

혼자 힘으로 해결하기 어려울 것 같으면 질문해보세요. 다만 질문자님의 의문을 최대한 구체적으로 설명하고 답을 구하셔야 합니다. 여기 분위기를 보시면 아시겠지만 그런 종류의 질문은 대체로 답이 잘 달립니다.

개성만점의 이미지

동의합니다. 제가 이해했다고 착각하고 빨리 진도빼고싶다는 욕심이 지나친것같습니다 ㅜ.ㅜ ^_^ 발전하기위해선 천천히가도 꼼꼼히 보는게 훨씬 이득일거같네요.

정말 감사합니다

권태민의 이미지

이미 한참 지난글에 댓글을 답니다만
앞으로도 해당 글과 댓글들을 C언어 입문자들이 볼것같아 얘기합니다.

기본개념과 응용문제는 다르다고 생각합니다.
예를들어 공을 차는 법을 배웠다 해서 모두가 축구선수가 될 수 있는것은 아니지요.
입문자가 개념을 익히는데에 최선을 다했어도 문제를 응용하는것은 기본에서 더 나아간 행동입니다.

수학을 전공하셨다면 더 잘 아실거라 생각듭니다.
기본개념을 익히는것과 매번 새로운 문제를 푸는것이 다르다는것.
개념을 축분히 숙지했음에도 응용하여 문제를 푸는 능력이 부족한것은 아직 초보자이기 때문 아닐까요.

저는 답을 내지 못하더라도 문제를 읽고 생각하는 과정을 거쳐. 답지를 보고 따라하는것도 괜찮다 생각듭니다.
여러 문제유형들을 풀다보면 자연스럽게 응용력도 생겨나겠죠.

swish95의 이미지

뭐 같은 내용이긴 한데..

답지를 보든 그건 중요하지 않습니다.
문제는 답지를 보고 문제를 풀었다고 생각하면 안됩니다.
그 코드가 자기가 만든 코드가 아니고 따라 쓴 코드이기 때문입니다.

실제로 코드를 직접 짜지 않으면 머리속에 해당 코드는 100% 이해 되지 않습니다.
물론 비슷한 경험이 많고 삽질이 충분하면 보는것만으로 힌트가 되는 경우는 많지만

초보자 입장에서는 "제대로 이해못한 상태에서" 그냥 이 문제는 저렇게 푸는구나 정도만 알게 되는 경우가 많습니다.
가능하면 이해했다고 생각되면 지우고 처음부터 다시 짜보시길 권합니다.
변수 하나하나, 코드의 위치 모든것이 의미가 있는 경우가 많은데 그런부분은 초보일때는 잘 모릅니다.

------------------------------------------------------------
ProgrammingHolic

권태민의 이미지

1. 보는것보다 직접 해보는것(보는것만으로는 직접 수행하는데 큰 발전이 없죠.)
2. 옮겨적기보다 생각해보는것
3. 생각한것 코드로 짜보기.

'가능하면 이해했다고 생각되면 지우고 처음부터 다시 짜보시길 권합니다.' 이 내용이 정말 중요하다 생각합니다.
학습에 중요한 포인트죠.

공감합니다.

권태민의 이미지

이해되지 않았던 개념이, 이해했다 생각했던 개념이
문제를 푸는 과정중에 완전히 이해 될때가 있습니다.
그래서 예제가 있는거겠죠.

중요점은
개념을 "제대로"이해하지 못했기 때문에 문제를 못푼다. 라기보다
문제를 푸는 과정과 문제풀이 결과를 돌아보며 개념 이해가 완성될때가 있다는 생각입니다.

반복학습, 자기 주도적학습, 이해에 대한 오해를 바로잡는것(이해범위의 착각). 같은 내용입니다.
다만 개념을 "제대로 이해한것이 맞냐"라는 내용으로 책망 하기보다.
나온 문제들 또한 예제와 같이 생각하여 발전해 나가는 과정으로 품길 바라는 생각입니다.

권태민의 이미지

1. 보는것보다 직접 해보는것(보는것만으로는 직접 수행하는데 큰 발전이 없죠.)
2. 옮겨적기보다 생각해보는것
3. 생각한것 코드로 짜보기.

'가능하면 이해했다고 생각되면 지우고 처음부터 다시 짜보시길 권합니다.' 이 내용이 정말 중요하다 생각합니다.
학습에 중요한 포인트죠.

공감합니다.

lalupo20의 이미지

한챕터 문제 다푸는데 몇주 걸리기도 했던거 같네요. 무슨 수학참고서처럼 문제가 많아서...

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.