초보의 공부방법에 대해서..

superkkt의 이미지

안녕하세요.

C언어를 공부하는 초보입니다. C 문법에 관련된 책 몇권과 유닉스 시스템 프로그래밍에 관련된 책 몇권을 읽었습니다. 어느정도 기본적인 내용은 머리속에 있는것 같은데요.. 직접 프로그램을 짜본 경험이 전무하다보니 머리속에 있는 내용들이 정리가 안되는 느낌이네요.

그래서 아주 간단한 프로그램을 좀 짜봤는데.. 장난 아니게 버벅대고 있습니다. 책만 볼때는 이해도 잘되고 좀 안다고 깝죽거렸는데.. 쩝..

시행착오 끝에 공부 방법을 다른 코드를 분석하면서 짬짬이 프로그램 직접 짜보는 방향으로 바꿨습니다. 일단 마땅히 볼 코드가 없어서 http://opensolaris.org/os/ 여기서 간단한 커맨드를 분석하려고 해봤습니다.

그런데 문제가.. 간단한 코드는 무지 간단한데 어려운건 또 무지 어렵네요.. 중간정도 되는 레벨의 코드를 보고 싶은데.. 잘 못찾겠습니다.

여러 고수님들은 초보 시절에 어떻게 공부를 하셨는지요? 그냥 무지 어려운 코드 붙잡고 씨름을 해야하나요? 계속 짧고 쉬운 코드만 보고 있으니 내공이 항상 그 자리에 머물고 있는것 같습니다.

많은 조언 부탁드리겠습니다.

dotri의 이미지

프로그램 하나를 선택하고, 그 프로그램과 똑같은 기능을 하는 프로그램을 직접 만들어보는게 좋을것 같네요.

ls 나 ps 같은 시스템 명령어들은 유닉스 프로그래밍(POSIX.1)에 입문하는데 좋은 예제가 됩니다. cat 이나 more 같은 간단한 프로그램부터 시작해서, 시스템 명령어들을 만들어보는게 큰 도움이 될것같네요.

제가 주변에서 보기에도.. 프로그래밍을 정말 못하는 사람들이 꽤 있습니다. 제가 추론하건데, 프로그램의 동작 원리를 전혀 이해하질 못하는 경우가 많더군요. 프로그램이라는게 입력을 받고, 처리를 거쳐, 출력을 내어주는건데, 그 과정을 전혀 그려내질 못하더군요. 계산기 프로그램을 만든다고 쳤을때.. 남이 만들어둔 계산기를 사용하는것은 쉽습니다만, 사용하는 것과 만드는 것은 사고의 방향이 전혀 다르죠. 사용자로부터 숫자를 받는 부분과, 연산을 하는 부분, 그리고 결과를 보여주는 부분으로 나누어서 3단계로 생각할 줄 알아야하는데.. 이런 라인이 초심자들에게는 잘 안그려지나봅니다.
프로그램을 사용하는 사용자의 입장이 아니라, 프로그램을 돌리는 컴퓨터의 입장에서 생각할줄 알아야겠죠.

superwtk의 이미지

소켓 프로그래밍을 해보는건 어떨까요

chadr의 이미지

superwtk wrote:
소켓 프로그래밍을 해보는건 어떨까요

그것도 괜찮을지 모르겠지만 제대로된 네트워크 프로그램을 짜기란 초보자에게는 다소 어려울듯 싶습니다.

위에서 다른분께서 말씀하신데로 간단한 프로그램부터 하나씩 짜나가보세요.

ls 도 보기에는 간단해보이지만 수많은 기능이 있기때문에 간단히 만들기는 어려울겁니다.

그러므로 ls의 기능을 하는 프로그램을 짜신다면 무조건 완벽한 클론을 만들려고 하시기 보다는 ls라는 프로그램이 무엇인지부터 분석하셔서 기본 기능을 구현후 버전업 형식으로 작성해보세요.

이렇게 하면 분석과 설계 스킬업이 덤으로 딸려올겁니다.

처음부터 너무 어려운것을 만들려고 하시면 OTL을 경험하실수 있으니 작은거부터 차근차근 쌓아 올려 나가시면 재미있게 프로그래밍을 하실 수 있으실겁니다. :D

-------------------------------------------------------------------------------
It's better to appear stupid and ask question than to be silent and remain stupid.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.