공부계획에 대하여..

canuyes의 이미지

공부계획에 대하여 질문 올립니다.
저는 현재 컴퓨터공학 1학년을 마치고 사정상 휴학한 학부생입니다.
이렇다 할 소속을 갖고 있지 못한 휴학생 입장에서 KLDP는 정말 도움이 되는 사이트네요...
각설하겠습니다.
저는 현재 C를 공부하고 C++공부를 막 끝마친 상태입니다.
물론 1학년 때 이산수학과 같은 기초과목들은 이수했습니다.

지도교수의 지도나 선배들의 조언을 구하기 난감한 휴학생 입장에서
저는 나름대로 공부계획을 세워 공부중입니다.
하지만 생각만큼 쉽게 계획이 정립되지 않아 여기 계신 선배님들께 질문을 올립니다.

저는 현재 알고리즘, java 학습을 계획 중에 있습니다.
알고리즘이야 그렇다 치더라도 java를 학습하려 하니 마음속에서 많은 의문이 일더군요.
‘과연 언어를 깊게 학습하지 않고 무작정 언어의 수를 늘려가는 것이 좋은 선택일까?’
저는 현재 C와 C++을 이용해서 작성할 수 있는 프로그램이 콘솔 프로그램 뿐입니다.
MFC가 무엇인지, API를 어떻게 사용하여 윈도우 프로그램을 만드는지에 대한 개념이 전혀 없는 상태입니다.
사실상 일반적인 프로그램(윈도우 창에서 실행되는)을 얼른 만들어 보고 싶은 욕심도 있구요...

여기 계신 선배님들은 제가 지금 java를 학습해서 언어를 경험해 보는 것이 옳다고 보시나요?
아님 mfc, api등의 학습을 통해 c/c++의 활용 및 입지를 더욱 굳히는 것이 맞다고 보시나요 ? ㅠㅠ
조언 기다립니다 nn

shint의 이미지

하나만 잘하시면 됩니다.
알고리즘도 하나를 하더라도. 제대로 된 프로젝트를 하나 완성하는게 맞습니다.
게임이나 생활. 사회등에 유용한 알고리즘을 만드시는게 가장 좋습니다.

언어는 상관없으니. 아무거나 제대로 만들 수 있으면 됩니다.

1. 목표설정
2. 자료수집
3. 설계 및 기획
4. 세부 기능 구현 및 문서화
5. 배포

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

canuyes의 이미지

그렇다면 지금 제 시점에서는 무얼 시작하고 공부하는 것이 좋을까요?

shint의 이미지

게임도 있고
관리 운영도 있고
편집 저작 도구도 있고... 찾아보세요.

뭘 하고 싶은지 알게되면. 할게 많아져요.

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

snowall의 이미지

삽질은 세가지가 가능해요. 깊게 파거나, 넓게 파거나, 깊고 넓게 파거나.

자바를 할 줄 안다면 자바로 별걸 다 해보세요. 머리를 말린다거나, 망원경을 만든다거나, 버스를 탄다거나...

피할 수 있을때 즐겨라! http://melotopia.net/b

yielding의 이미지

1. 지금 당장 GUI를 못해도 상관없습니다.
GUI는 복학하고 GUI를 할 계기가 될때 해도 늦지 않습니다.
(MFC로 GUI를 짜기에는 인생이 너무 짧다는 말이 있죠?)

2. 언어를 더 공부하는 것은 나쁜게 아닙니다.
하지만 C/C++/Java는 같은 계열의 언어죠.. imperative.. (C++가 multiple paradigm 이긴 하지만)
paradigm이 다른 언어를 번갈아 가면서 공부하는 것은 추천할만한 합니다.
지금은 c++를 가지고 프로그램을 많이 하는게 더 중요해보입니다. 굳이 언어를 하나 더 하시려면
java 보다 python, ruby 같은 스크립트 언어를 하나 베워보세요. 사고가 말랑말랑 해집니다.

3. 무엇을 짤 것인가?
소스코드의 크기와 상관없이 매일 나를 위해 프로그램하는 것. 이것이 막연한 목표보다 좋습니다. (워드 커닝햄의 유명한 조언이죠)
이산수학을 베웠고, 알고리즘을 공부하신다고 하시니 projecteuler 문제를 풀어보는 것도 좋습니다.
TDD를 먼저 공부하고 문제를 Test와 함께 풀어보는 것이 프로그램을 하면서 더 많은 것을 베우는 방법이 될 듯 합니다.

4. 이 시점에 C++를 공부하는 것
이건 아주 사견입니다만 c++11 표준이 확정되면서 c++언어는 중흥기에 들고 있습니다.
1) c++의 표준 라이브러리, 성숙한 boost library로 multiple platform에서 동작하는 빠르고 간결한 프로그램 짜기도 쉬워지고 있고,
2) c++ 프로그램에 말랑말랑한 스크립트 언어 임베딩도 쉬워지고 있습니다.
3) gcc 뿐만 아니라 facebook의 php 코드도 c++로 다시 작성/변환되고 있고 있습니다.

주력 언어가 자바가 아니고 c++ 였다면 지금 java를 좀 더 잘하기 위해 공부하는 것 보다 c++로 프로그래밍 경험을 더 쌓는 것이 좋아보입니다.
한가지 유의할 점이라면, c++언어가 보통 복잡한게 아니죠.... 언어 공부에 파묻히지 마시고 풀고하자 하는 문제에 집중하시길..

Life rushes on, we are distracted

canuyes의 이미지

yielding 님과 lithium81 님의 답글을 보고나서 구글링도 해보고 나름대로 책도 뒤적여 봤습니다.
친절한 조언 정말 감사드립니다.
답글을 가지고 나름대로 생각해보고 밑그림을 그려보다가 몇 가지 궁금한 사안들이 생겨
창피를 무릅쓰고 한번 더 조언을 구합니다.

지식이 부족했던 탓인지 제가 GUI라는 단어를 떠올리지 못 했습니다.
mfc, api 운운하며 길게 이야기 했지만 제가 말하고자 했던 것은 yielding 님 말씀처럼 GUI 였습니다.
GUI를 배울 기회를 추후로 미룬다고 하더라도 GUI rgus에 대한 기초적인...지식은 짚고 넘어가고 싶습니다.
제가 매일 끄적이는 코드를 GUI로 구현하려면 MFC와 API를 배우는 것이 맞는지요?

yielding님께서 C++11 표준이 새로 확정 되었다고 하셨는데
저는 C++의 기본적인 공부를 막 끝내고
Nicolai M. Josuttis가 지은
The C++ Standard Library: A totorial and reference를 구매 예정중에 있었습니다.
새로운 표준이 확정되었다는 이야기는 제가 지금 구매하려는 책 말고 다른 책을 구매해야한다는
말씀이신가요?

조언 기다립니다.
감사합니다.

yielding의 이미지

1. GUI on windows
c++로 구현된 제품이라면 대부분 MFC로 만들어졌을 겁니다.
MFC는 GUI 관련 windows API를 wrapping한 클래스 라이브러리입니다. API를 많이 안다고 MFC를 많이 아는 것은 아니지만 MFC를 잘 하는 사람은 API도 많이 알죠.
그런데, MFC를 잘 하려고 마음먹으면 할게 너무 많아요. Win32 API 공부도 만만한게 아니고 MFC는 점차 사용되지 않는 추세이기 때문에 (C#/WFP 등등의 대안이 있어서) 추천드리고 싶지는 않네요. 차라리 여러 플랫폼을 지원하는 Qt 라이브러리가 좋아보입니다.

2. c++11 표준
IOS IEC-14882-2011.pdf 문서가 pdf로 있습니다. 이 스펙을 가장 표준에 가깝게 구현한 컴파일러는
clang3.1 (http://clang.llvm.org/cxx_status.html) 혹은 최신 gcc 일텐데 버전 넘버는 정확히 모르겠습니다.
말씀하신 책에 c++0x, c++11 에 대한 설명이 있으면 구입해서 보셔도 될거에요. 책을 사지 않아도 위의 클랭 사이트에 첨부된 스펙을 읽거나 구글링 하시면
학습에 필요한 충분한 자료를 구할 수 있습니다. Nicolai M. Josuttis의 책이 최신 표준을 포함하고 있지 않다고 해서 나쁜건 아닙니다.
단지 제가 강조했듯이 c++의 문법 공부에만 빠지지 않으면 될 것 같습니다.

사족이겠지만 다시 한 번 강조하면, MFC와 C++의 문법을 현란하게 말하면서 간단한 문제를 못 푸는 사람들을 너무 많이 봤습니다. 자기가 잘한다고 생각해요.. 아는게 많아서…

MFC로 GUI를 미려하게 만드는 것보다 코딩 파워, 문제를 푸는 능력, 말랑말랑한 사고, 다른 사람과 소통하는 능력 이런 것이 더 중요합니다. 이런 능력을 키우기 위해서 시간을 할당 하는 것이 더 좋을 것 같습니다.

Life rushes on, we are distracted

lithium81의 이미지

1. 학생이시니, 무엇보다도 공부할 수 있을 때 공부하는게 제일 좋지 않을까요?

어떤 언어, 어떤 라이브러리... 이 모든 것들은 다 돌고 돌고 돕니다. 너무도 빠르게 변하고 빠르게 발전하기 때문에, 사실상 몇년 뒤에 무슨 기술을 보유하고 있으면 유리할거다.. 판단이 서는 게 없을 정도입니다.

(스티브 맥코넬이었던 것 같은데 암튼 유명한 분이 말하길) 기술은 끊임없이 변하지만 그 모든 기술들에 대개 적용될 법한 공통의 원리나 원칙이 존재하고,

그런 원리들은 언어가 바뀌고, 라이브러리가 바뀌고, 유행이 바뀌어도 늘 남아 있기 때문에 배우면 좋다고 했던 것 같습니다.

그런 측면에서 연장해서 생각해보자면, 특정 벤더의 기술이나 특정 언어에 자신의 역량을 국한시키는 건 위험한 일입니다.
(상상해보건대... Java를 미친 듯이 공부해서 Java의 전문가가 되었는데, Oracle에서 Java 언어 지원 더 이상 안 하고 개발도 안 한다고 폭탄 선언 나오면 어떻게 될까요)

현재 학부생이라 하셨으니 커리큘럼에 있는 과목들을 교수랑 다이다이 맞짱 떠도 될 만큼 철저하게 공부하시는 걸 추천드리고 싶습니다.

진학을 하시든, 현장을 가시든, 나중 되면 바빠져서 이론을 충분히 흠미하면서 공부할 시간도 없을 가능성이 있으니까요.



2. 그렇지만, 다른 한 편으로는,

학부 수업이나 과제, 단기 프로젝트와 관계없이 스스로가 더 알고 싶고, 더 잘 하고 싶은 열정에 다른 언어도 익혀보고, 다른 API나 라이브러리를 써보는 건 무척 좋은 태도입니다.

다만, yielding님 댓글처럼, 같은 계열의 언어보다는 script언어라던가, functional programming 패러다임의 언어를 공부해보시는게 중장기적으로 더 좋을 것 같습니다.

언어는 그저 수단(도구)일 뿐입니다. 물론 만능 척척박사 수준으로 잘 다루는 언어가 하나 정도는 있어야 겠지요.

그렇지만 위에 yielding님도 언급하신 것처럼, 풀고자 하는 문제에 집중하는 게 더 중요하지, 언어 자체에 매몰되는 건 바람직하지 않다고 개인적으로 봅니다.



3. MFC 등을 비롯 여러 라이브러리들은,

필요가 있을 때(예. 프로젝트 수행)나 스스로에게 강한 동기부여가 있을 때 학습해야 효과가 높습니다.

미리 해두면 나중에 좋겠지... 하는 보험 들어놓는 마음으로 공부하는 건 (그냥 제 경험일 뿐입니다만) 참 고되고 힘들고.. 책 한 권 떼기도 더디었던 기억이 납니다.

- 어제보다 나은 오늘, 오늘보다 나은 내일.

canuyes의 이미지

답글감사합니다.

익명 사용자의 이미지

새로운 언어를 습득하는 것도 좋긴합니다만.. 언어들은 나중에 아시겠지만 필요하면 하실 수 있습니다.

물론 각 언어를 몇 십년 정도 하시는 분들 처럼 유연하고 보기쉽고 빠르게 짜기는 힘들겠지만요.

지금 단기간 다른 언어를 공부한다고 그 분들 처럼 될 수 있는 것도 아닙니다.

다른분들도 말씀하셨듯이 다른언어를 하려는 시도보다는 문제를 정의해서 해당문제를 풀어가는 노력이 필요한 시점인 것 같습니다. - 프로젝트라던가..

사실 그런데 문제자체도 정의하는 게 쉽지 않죠. 어떤 프로젝트를 어떻게 해야할지 또는 어떤 문제를 풀어봐야할지..

그런 의미에서 팁을 좀 드려본다면 알고리즘 공부하시면서 문제해결능력도 같이 키워보시면 좋을 듯 하네요. - algospot 사이트를 추천합니다 :)

또 프로젝트 같은 경우에는 oss 프로젝트가 매년 열리는 걸로 아는데 이런 것도 참여해보시면 좋을 것 같아요. 아이디어가 없다면 지정 과제 같은 부분으로요.

학부 1학년에 저도 비슷한 고민을 했던 것 같아요. 어떤 언어를 공부해야 도움이 될 지... 이미 C/C++을 어느정도 하신다면 그것을 도구로 다른 일들을 하려고 노력해보세요!

댓글 달기

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