실력향상을 위해..

ujlikes의 이미지

안녕하세요. 전산학과에 재학중인 한 학생입니다.
제가 이리저리 전과를 하고 다녀서, 또 이전에는 프로그래밍을 해본 경험도 없어서,
그간 두 학기정도 배운게 전부입니다.

아직 무엇을 파고들어야 할지는 아닌 단계같아서, 나름 기본적인 실력을 키워보고자
학과 활동 외에 실력을 키울 다른 방향을 생각해 보고 있는데
무엇부터 시작해야할지, 또 어떤 방법을 통해 해야 할지 까마득합니다.

좋은 방법이 있다면 추천부탁드립니다~

sunfuture의 이미지

기초가 튼튼해야 응용도 손쉽게 배울 수 있다...라고 생각합니다. ^^;;

요즘 TDD(Test Driven Development)와 관련된 것들을 배우면서 깨달음을 얻어가고 있습니다.
학교에서 배우게되는 강좌들에서 더 나아가서, 친구들과 스터디를 구성해서
괜찮은 교재를 하나 선정해서 기간을 정해서 발표하고 토의하면서 독파하고,
크고작은 경연대회를 목표로 해서 준비하는 것이 좋을 것 같습니다. ^^

중요한 것은, 달성하고자 하는 목표를 정하고 그것을 이루기 위해 노력하는 과정이죠!!

미래는 도전하는 자의 것이다!

미래는 도전하는 자의 것이다!

하얀말의 이미지

개인적으로 학부 과정의 전산과(Computer Science)는 다음 과목들로 귀착된다고 생각됩니다.

컴파일러(일명 골파일러)

컴파일러는 lexical analysis와 parsing까지는 오토마타 이론이라는 수학 지식이 필요하고 그 이후 중간 언어(Intermediate Language) 생성 이후 작업은 로더, 링커, 어셈블러, 더 나아가 OS라는 시스템 소프트웨어 및, 타겟 CPU에 대한 지식이 필요하죠.

오토마타는 형식 언어(Formal Language)라는 과목에서 배우고, 이 형식 언어는 대부분의 전산과에서 필수 과목인 프로그래밍 언어(PL) 학습의 선수 과목이라고 볼 수도 있습니다. 그리고 PL은 컴파일러의 선수 과목 정도로 볼 수도 있겠죠. 그리고 이 형식 언어 이론을 배우려면 bool 연산으로 대표되는 이산 수학을 배우는 것이 좋겠습니다.

타겟 CPU에 대한 이해는 결국 대부분의 전산과에서 필수 과목인 컴퓨터 아키텍쳐(CA) 지식과 동일한 뜻이며, 이 CA와 OS(이 놈도 대부분의 전산과에서 필수 과목)를 같은 학기에 들으신다면 아주 강한 연관성을 팍팍! 느끼실 수 있을 것입니다. 예를 들어 가상 메모리는 CA에도 나오고 OS에도 나오거든요. 우리가 쓰는 가상 메모리는 이 둘의 콤보죠.

CA의 선수 과목은 논리 회로(Logic Circuit), 논리 회로의 선수는 이산 수학이 될 것입니다. 회로 이론(circuit theory)도 논리 회로의 선수로 볼 수도 있겠으나 저는 개인적으로 회로 이론 개판 쳤어도 논리 회로 수강엔 별 어려움이 없었어요.

OS의 선수는 로더, 링커, 어셈블러라는 시스템 소프트웨어 과목을 들 수 있으며, 이 어셈블러는 CA에도 많은 영향을 미칩니다. 로더는 OS, 링커는 PL에서도 많이 다루죠.

그리고 소프트웨어 관련 과목을 듣노라면 자료구조/알고리즘이 안들어가는 녀석이 없습니다. S/W 개발하면서 스택/큐/리스트 등등등 안 쓸 수가 없고(요새는 이정도는 기본 라이브러리에 다 탑재되어 잇긴 하지만..) 프로그램의 성능 따지다 보면 프로그램 복잡도 안 따질 수가 없죠. 그리고 자료구조/알고리즘의 기저엔 이산 수학이 깔려있죠.

아, 그리고 게임에 관심 많아서 3D 그래픽스에 관심이 있으시다면(원래 전산과 학생의 로망이 게임, 바이러스, OS 제작 아니겠습니까? ㅎㅎ) 미적분, 행렬, 벡터 같은 수학과 역학(미적분이 또 역학에도 많이 쓰이죠)과 같은 물리 과목 짱짱하게 하셔야 할 겁니다.

결국 지금 배우시는 학과 공부 짱짱하게 하셔야 된다는 뜻입니다. 학과 과목이 현실과 동떨어진, 당장 돌아가는 그 무언가를 만드는데 별 쓰잘데기는 없어뵈지만, 그래도 교수님들이 괜시리 그 학년에 그 과목 개설하는 것이 아니거든요.

그리고 이런 걸 잘 해야 원천 기술 개발에 도전할 수 있습니다. 이런 게 딸리면 남들이 만들어놓는 라이브러리나 가져다 쓸 밖에요(대부분의 현실, 특히 대부분의 대한민국 IT 현실이 이렇긴 합니다만...). 실질적으로 3D 게임을 만들려면 Direct X를 잘 알아야겠지만, Direct X 같은 근원적인 것을 만들려면? 게다가 Direct 3D를 이해하는 것 마저도 벡터, 행렬(객체의 회전은 결국 행렬의 회전 연산입니다) 이론 지식이 없다면, 좀 과장하자면 이해라기보다 기계적 암기 정도로 그치겠죠.

그래서 구글 같은 회사가 수학 잘하는 사람들 뽑는 것, 개인적으로 타당하다고 봅니다.

(덧 1)

공부 잘하면 또 다른 이익이 있습니다. 장학금도 탈 수 있잖아요? ㅎㅎ(공부 안하고 알바하는 것보다 장학금이 더 효율적이죠. 학점이란 스펙도 만들어지고요.)

(덧 2)

그래도 프로그래밍에 빠져 학점 개판인 사람도 인정은 하고 이해도 합니다. ㅎㅎ

lain07의 이미지

다만 수학도 격하게 들어가기때문에 수학과 정말 친해져야 합니다.
초반에 c나 java로 좀 끄적일때는 설마 이정도일 줄은 몰랐죠..

___________________________
I like Small Linux.


___________________________
I like Small Linux.

snowall의 이미지

장학금을 받으려고 열심히 공부하다보면 가끔(이라기에는 의외로 자주) 같은 과, 같은 수업에 천재가 들어오는 일이 있습니다. 그땐 김연아를 바라보는 아사다마오를 바라보는 안도미키 같은 심정으로 수업을 들을 수밖에요...
--------------------------
피할 수 있을때 즐겨라!
http://snowall.tistory.com

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

superwtk의 이미지

1. 기초를 튼튼히.
"전산학과" 가 정확히 어떤걸 가르치는 학과인지는 모르겠지만, computer science 라면 알고리즘, 자료구조, 운영체제, 컴파일러, 데이터베이스 등 기본적인 소양을 갖추는데 초점을 맞추세요. 물론 응용 기술을 배우는것도 중요하지만, 결국 시간이 지나도 남는건 기초입니다. 기초에 투자하는 시간과 응용 기술에 투자하는 시간을 7:3 정도로 해보는건 어떨까요.

2. 특정 언어나 응용 기술만을 사용해야 한다는 고집 버리기.
조금 과장해서, "나는 자바 프로그래머니까 모든 프로그램을 자바로 만들거야" 라고 말하는 사람들을 꽤 많이 보아왔습니다. 이게 고집인지, 아니면 새로운걸 배우기 싫어하는 게으름인지는 잘 모르겠지만, 자신을 제한된 틀 안에 가두는 족쇄인것은 분명합니다. 어떤 언어나 다른 응용 기술(예를 들면, Django, iPhone SDK, HTML5 등)이 필요하다고 판단되면 배우세요. 그렇다고 해서 다른 모든걸 포기하고 새로운걸 배우는데만 집중해야 되는건 아닙니다. 필요한 만큼만 배우는것도 시간을 효율적으로 쓰는 좋은 방법입니다.

3. 필요한거 직접 만들어쓰기.
자신이 프로그래밍을 잘 못한다고 생각해서 특정 언어의 문법이나 라이브러리 사용법만 파고드는 사람들도 있습니다. 이런 분들은 대부분 언어나 라이브러리 사용법을 몰라서 프로그램 작성을 못하는것이 아니라 그냥 프로그래밍을 못하는겁니다. 글쓰기도 다상, 다독, 다작을 해야 실력이 늘듯이, 프로그래밍도 많이 생각하고, 다른 사람 코드도 좀 보고, 이것저것 많이 만들어봐야 실력이 향상됩니다. 뭘 만들어야 할지 잘 모르겠으면 자신에게 필요한걸 직접 만들어보는것도 좋은 방법입니다. 21세기형 자급자족이랄까요. 예를 들면 이런거 http://labs.sumin.us/incubator/youtube

4. 욕심을 버리기.
소프트웨어 개발 프로젝트를 처음 시작하면서 규모가 큰 프로젝트를 기획하는 사람들이 종종 있습니다. 대부분의 경우엔 중간에 포기하게 되죠. 경험이 없는 상태에서 어떻게 큰 프로젝트를 성공적으로 진행할 수가 있겠습니까. 작은걸 기획해서 완성까지 가보는것이 중요하다고 생각합니다. 유닉스의 ls, cat, grep 같은 명령어나 윈도우에 있는 notepad.exe, paint.exe 같은 프로그램을 그대로 따라서 만들어보면 겉으로 보기에 별거 아닌 프로그램이라도 완성하는데에는 상당한 시간과 노력이 필요하다는걸 알게 될겁니다.

--------------------------------------------------------------------------------
http://blog.sumin.us

snowall의 이미지

물리학을 전공해보셔도 좋습니다. :)

하지만 저를 원망하진 마세요.-_-;;

--------------------------
피할 수 있을때 즐겨라!
http://snowall.tistory.com

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

gix의 이미지

헐.. 굳이 전산학과로 전과를 하셨다니;

학과활동 외에 시간을 더 투자하시겠다면 영어를 열심히 하셔서 외국인과 비즈니스 대화가 가능할 정도의 수준으로 끌어올리세요.
부전공으로 경영, 회계를 들으시는 것도 좋습니다.

bxhs의 이미지

원래 프로그램 만들어보면 재밌고 가슴 두근거리고 실력도 느는데요...
그게 아니라면 자료구조/알고리즘을 봐야겠죠..

뭘 만드는 업종 쪽으로 간다면, 자료구조/알고리즘만 제대로 알면..
큰 소리치고 다닐만 합니다.
특히 SI쪽에서는.. 그런 쪽으로 잘 하는 사람..거의 없어요..
엔진 쪽으로 갈수록... 교과서에 안나오는 좋은 자료구조가 많습니다.
그런걸 다룰려면, 기본적인걸 잘해놔야 되요..

시스템 쪽으로 간다면... 배경지식도 중요하고요...

혹시, 프로그램 습작 시에 절대로 완벽하게 만들거나, 잘만들려고 하지마세요
100% 실패합니다.
editplus를 능가하는 텍스트 에디터를 방학중 만들겠다..라는등..

제한 된 기능의 프로그램을 끝까지 만들어보는게 좋습니다.