temporus
10
2018-07-12 18:37:49
3
672

프로그래밍 공부 어떻게 해야 할까요


안녕하세요, 원래는 타학과 지망이었다가 경제사정 때문에 컴공으로 오게 된 1학년 학부생입니다. 컴퓨터로는 지금껏 게임만 해 봤지 프로그래밍 언어나 시스템적인 부분에 대해서는 전혀 문외한이고, 코딩은 1학기에 기초 강의를 들은 게 처음입니다. 사실 원해서 온 학과가 아니다보니 불만도 많고 심드렁한 상태였고요.

방학이 되고나서부터 1학기 복습 겸+시간도 때울 겸 강의 교재 문제들 중에 재밌어 보이는 것들(8퀸 게임 등)을 풀어보고 있는데요, 처음에는 '그럭저럭 시간이 잘 가는구나' 싶었던 게 요즘은 '이왕 컴공과 온 거 진지하게 공부해야겠다, 재미있다' 로 바뀌어가고 있습니다.

그래서 여러가지로 알아보고 있는데, 사실 아무것도 모르는 1학년 입장에서는 아직 멀기만 한 내용들이 많아 질문을 올리게 되었습니다.


1.

지금은 하루에 5~8개 정도의 실습 문제를 풀고 있는데요, 쉬운 건 5~10분 안에 끝나지만 어려운 건 2시간이 넘어가기도 합니다. 책에 답지가 없어서, 한번 막히면 이걸 어떻게 짤지 고민하다가 30분이 훅 지나가는데... 퍼즐게임 풀기라고 생각하면 괜찮지만 공부라고 생각하면 비효율적인 게 아닐까? 하는 의문을 가지게 됩니다.

그냥 보이는 문제를 다 풀어보는 건 아무래도 주먹구구식이고, 좀더 효율적인 공부 루틴이 있지 싶은데 어떤 식으로 접근해야 좋을까요?


1-1.

문제를 풀다 보면 가끔 '문제가 요구하는 원리가 따로 있다' 는 인상을 받곤 합니다. '문제의 속뜻: A요소를 B처럼 이용해서 C라는 결과물을 만든다'에서 저는 B가 아니라 B'를 구현했다는 느낌입니다(결과물은 같습니다). 모로 가도 서울로만 가면 괜찮은 걸까요? 아니면 일단 문제의 요구사항을 명확히 이해하고 따르는 게 도움이 될까요?


2.

c++ 교재 말고는 펴본 적도 없는 상황인데, 교재에서 다루는 것보다 조금 더 깊은 내용을 배우고 싶을 때가 있습니다. 자료구조/알고리즘 공부를 하고 싶은데 풀면서 시간을 많이 쓰게 되는 문제들이 대부분 다차원 배열이나 포인터, 혹은 객체 문제다 보니 기본기를 더 닦아야 이해가 쉽지 않을까?(지금으로서는 시기상조 아닐까?) 라는 생각도 듭니다. 1) 우선 한번 읽어라도 보는 게 좋을까요, 2) 기본적인 내용을 확실히 알고 읽는 게 좋을까요?


3.

이것도 2.와 비슷한 의문인데, 게임을 만들어 보고 싶다는 생각을 가끔 합니다. Unity나 cocos를 생각중이고요. 그런데 기초 테크닉도 아직 입문 수준인 상황에서 응용 단계로 넘어가면 안 좋지 않을까? 하는 걱정이 생깁니다. 응용 단계로 넘어가는 데에 요구되는 기본기가 어느 정도라고 생각하시나요? 아니면 일단 부딪혀 보면 자연스레 실력 향상에 도움이 되는 걸까요?



긴 글 읽어주셔서 감사합니다. 좋은 하루 되세요 :)
0
0
  • 댓글 3

  • 제운
    180
    2018-07-12 18:44:33 작성 2018-07-12 18:45:15 수정됨

    1. 풀리다 안풀리면 체크하고 다음으로 넘어갔다가 다른 개념들 공부하다보면 어느순간 풀립니다. 1시간생각해도 안풀리면 넘기세요.

    2. 나프잘 책 추천

    3. 일단 해보는게 좋습니다. 기본기에 매몰되지말고 필요할때 필요한 스킬을 먼저 배운다고 생각하세요. 


    0
  • 진리와자유
    45
    2018-07-13 00:02:57

    이 진지한 질문 글에 답글이 하나 밖에 없어서 안습이네요.

    제 견해를 피력하겠습니다.


    문제 풀이는 답을 모르는 문제도 나올 수 있습니다.

    정답이 기록되어 있지 않는 것은 정답이 중요하지 않다는 의미이기도 합니다.

    저자는 독자가 문제를 보고 한번 생각해 보는 것을 원하는 것입니다.

    윗 댓글처럼 넘어가도 좋고 미련하게 잡고 있어도 좋습니다.


    다만 천재급들은 요구사항을 이해하고 거의 모든 문제를 다 풀고 넘어갑니다.

    아쉬운 것은 모든 사람이 천재는 아니지요.

    범재들이 선택할 수 있는 방법은 거의 비슷합니다.

    답을 보고 이해, 암기, 응용하기.

    이것도 어느정도 재능이 없으면 공부가 힘듭니다.


    그래서 모든 컴퓨터 분야에서 뛰어나기는 힘듭니다.

    부정적인 견해지만... 포기 할 건 포기하세요.


    예를 들어 알고리즘. RSA나 ECDSA가 있습니다.

    저더러 그냥 구현하라고 하면 할 수 있습니다.

    그런데 퍼포먼스를 내라고 하면 못합니다.

    수학적인 배경 지식이 없으면 최적화된 수식을 도출할 수 없으니 당연히 성능이 안나옵니다.

    물론 현실에서는 이미 수학 식이 도출되어 있고 Prime  Number를 만드는 공식도 몇가지 있습니다.

    그런 자료를 다 보고서 만들고자 하면 만들 수는 있을 것입니다.

    하지만 그렇게 하지 않습니다.

    성능을 개선하라고 하면 거기서 끝입니다. 더이상의 자료가 없으면 못 합니다.

    다행히 OpenSSL 이라는 유명한 라이브러리가 있으니까 가져다 씁니다.

    참고로 RSA는 처음 나올 때 특허 등록된 수식입니다.

    이런 쪽 개발은 천재들의 영역이 아닌가 생각됩니다.


    그러니 자신이 천재가 아닌 한 대학에서 배울 때 모든 것을 다 잘 할 수 있을 거라고 생각하지 마세요.

    천재들에게 프로그래밍은 공부가 필요 없어요. 그냥 코딩하면 동작하는 프로그램이 작성되는 겁니다.

    이런 사람들은 다른 사람과 협업을 잘 할 수 있는 코딩 방법을 신경 쓸 필요가 있습니다.

    혼자 아무리 잘해도 윈도우즈를 만드는 MS의 그 많은 개발자들의 능력은 못냅니다.


    보통사람들은 어려운 코딩을 배울 필요가 없습니다.

    최적화가 잘 되어도 다른 사람이 읽기 힘든 코드는 이미 실패한 코드입니다.

    O(n^2)를 O(n)으로 억지로 만들지 마세요. O(n+1), O(2n)이더라도 코드가 읽기 좋으면 만족하세요.

    그정도의 퍼포먼스는 하드웨어 성능으로 커버 됩니다.


    프로그래밍은 생산 작업이고 생산 작업은 생산성이 우선입니다.

    기교 부린 코드를 동경하지 마세요.

    초급 개발자가 읽고 어려워하면 이미 프로젝트는 생산성에서 실패한 것입니다.

    프로그램은 쉽게 작성해야 합니다.

    간결하고 가독성 좋은 코드가 생산성 높습니다.


    실제 프로젝트를 하다보면 코드가 이해가 쉽고 간결하게 나오는 것도 쉽지 않습니다.

    그래도 방향을 그렇게 잡아야 한다는 것입니다.


    질문 내용으로 돌아가서. 기본기는 기본기입니다.

    필수로 다 해야 하는 것이지요. 천재든지 범재든지 둔재든지.

    기본기를 더 닦겠다는 개념을 버리세요.

    학부 수업에 충실하자는 생각만 하세요.

    그러다보면 기본기가 형성됩니다.

    욕심 부리지 마세요. 낭만 대학 생활 짧을 것 같으면서도 공부하기에는 깁니다.


    게임을 만들고 싶으시면 재미로 만드세요.

    실력 향상이고 뭐고를 떠나서 흥미있는 일을 하세요.


    나중에 졸업할 때 즈음이 되면 자신이 부족한 부분이 뭔지 점검하세요.

    위에서 말한 포기한 부분입니다.

    보통은 일반적인 프로젝트에서는 생각하는 것처럼 고급 기술이 난무하지 않습니다.

    결국 자신의 부족한 점을 보완해 줄 친구, 동료를 만드세요.

    이게 가장 중요합니다.


    이제 큰 질문에 답하겠습니다.

    프로그래밍 공부 어떻게 해야 할까요?

    ==> 학부 커리큘럼에 진짜 충실하게 임하세요.


    제 답글 말고 질문 글에 많은 답변이 달렸으면 좋겠네요.

    1
  • temporus
    10
    2018-07-13 10:41:57

    답글 감사합니다. 너무 부담가지지 않고 열심히 해봐야겠어요 :)

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.