PGR21.com
- 자유 주제로 사용할 수 있는 게시판입니다.
- 토론 게시판의 용도를 겸합니다.
Date 2010/03/24 14:09:31
Name Je ne sais quoi
Subject [일반] 프로그래머의 길을 걷는 후배님들께
최근 여러가지 일로 일의 의욕을 잃고 시간을 낭비중에, 요즘 자게나 질게에 프로그래밍에 관계된 글이 좀 올라오는 것을 보고 한 마디 써봅니다. 별 능력도 없고 평범하게 일하는 평범한 프로그래머지만, 그래도 일한지 조금 시간이 되어서 이제 시작을 하시려는 분들께는 몇 마디 도움은 드릴 수 있다는 생각이 들어서(사실은 일하기 짜증나서 -_-;;;) 한 번 써봅니다.

전반적인 이공계에 관한 글은 이미 pgr21에도 좋은 글들이 많이 올라왔습니다. 그 중에서 제가 생각하는 백미는 orbef2님의 '이공계의 길을 가려는 후배님들께'입니다. 제목부터 표절이라는 게 보이시죠? 그만큼 제가 생각하기에 전반적으로 좋은 글이고, 단계별로 아주 좋은 글을 써주셨습니다. 1편은 구글로도 검색이 되지 않아 링크를 못 걸었습니다. 안 읽어보신 분들께는 꼭 읽어보시기를 권합니다. 특히 대학생 분들께는 더... 이 링크 모음만으로도 제 글은 가치가 있다고 자부(?!)합니다.

10편: https://pgr21.com/zboard4/zboard.php?id=freedom&page=1&sn1=&divpage=3&sn=off&ss=off&sc=on&keyword=%C0%CC%B0%F8%B0%E8&select_arrange=headnum&desc=asc&no=16981
9편: https://pgr21.com/zboard4/zboard.php?id=freedom&page=1&sn1=&divpage=1&sn=off&ss=off&sc=on&keyword=%C0%CC%B0%F8%B0%E8&select_arrange=headnum&desc=asc&no=5956
8편: https://pgr21.com/zboard4/zboard.php?id=freedom&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=%C0%CC%B0%F8%B0%E8&select_arrange=headnum&desc=asc&no=4668
7편: https://pgr21.com/zboard4/zboard.php?id=freedom&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=%C0%CC%B0%F8%B0%E8&select_arrange=headnum&desc=asc&no=3456
6편: https://pgr21.com/zboard4/zboard.php?id=freedom&page=1&sn1=&divpage=1&sn=off&ss=off&sc=on&keyword=%C0%CC%B0%F8%B0%E8&select_arrange=headnum&desc=asc&no=3105
5편: https://pgr21.com/zboard4/zboard.php?id=freedom&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=%C0%CC%B0%F8%B0%E8&select_arrange=headnum&desc=asc&no=1588
https://pgr21.com/zboard4/zboard.php?id=freedom&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=%C0%CC%B0%F8%B0%E8&select_arrange=headnum&desc=asc&no=551
4편: https://pgr21.com/zboard4/zboard.php?id=freedom&page=1&sn1=&divpage=1&sn=off&ss=on&sc=off&keyword=%C0%CC%B0%F8%B0%E8&select_arrange=headnum&desc=asc&no=307
3편: https://pgr21.com/zboard4/zboard.php?id=ACE&page=1&sn1=&divpage=1&sn=off&ss=off&sc=on&keyword=%C0%CC%B0%F8%B0%E8&select_arrange=headnum&desc=asc&no=55
2편: https://pgr21.com/zboard4/zboard.php?id=ACE&page=1&sn1=&divpage=1&sn=off&ss=off&sc=on&keyword=%C0%CC%B0%F8%B0%E8&select_arrange=headnum&desc=asc&no=41

그럼 이렇게 좋은 글이 자세하게 올라왔는데 전 무얼 쓸 것이냐 하면... 뭐 사실 그냥 넋두리죠 뭐. 일단 바로 어제 올라왔던 기사입니다. 주기적으로 올라오지만 개선은 안 되는 야근 이야기.

http://media.daum.net/digital/view.html?cateid=1067&newsid=20100323082120560&p=mydaily

이게 그럼 대한민국 IT의 현실이냐?(아 물론 대한민국이 야근을 강요하는 저질 사회인 것은 전 분야에 걸쳐 똑같지만, 저는 다른 분야에 대해서는 말 할 자격이 없으니까요) 슬프게도 대답은 yes입니다. 저는 다행스럽게 저 만큼의 막장은 안 들어갔지만, 뭐 저도 나름 야근 좀 하는 곳에 있었습니다. 최근에도 프로젝트때문에 3달 연속으로 새벽 2시 넘어 자기도 했구요. 이 현실을 벗어나려면? 아예 시작을 안 하시면 됩니다. 다른 분야 얼마나 좋은지 모르겠는데, 그래도 저 기사처럼 말 그대로 죽도록 일하면서(그러다 실제로 죽기도 하고 ㅜ.ㅜ) 보상도 인정도 못 받는 거 보다야 나쁘겠어요? 게다가 요행 안 죽고(!) 계속 일해도 몇 년 있으면 회사에서 잘릴 거 같은 공포에 시달리구요. 그러니 다른 살 길을 찾아보세요. 다른 길이 뭐냐구요? 그걸 제가 알았으면 이러지 않고 있겠죠?

그럼 이미 이걸로 먹고 사는 사람들은 어쩌란 말이냐구요... 나이 먹어서 다른 거 하기도 힘들고, 가족도 있다구요 ㅜ.ㅜ 네 저도 그래요. 그래서 짜증나고 미치겠는데 모르겠네요.

그런데 그렇게 맘에 안 들면 이 일 왜 하냐구요? 그래도 뭐 만들어서 돌아가는 거 보면 재미있거든요. 솔직히 재미있어요. 버그 잡아서 프로그램 돌아가는 거 보면 남들이 보기엔 뭐 별 거 아닌 거 같고 우스워 보이는데 근데 그 재미에 이거 하거든요.

자 그러니 이제 넋두리는 끝이고, 약간 현실적인, 하지만 제가 아는 범위에서 드릴 수 있는 약간의 도움을 혹시 필요하신 분들께 말씀 드립니다. 학부생이지만 나가서 상 타고 책 쓰고 그러는 당신은 그냥 가볍게 백스페이스 눌러주세요. 이 글은 어디까지나 저처럼 항상 고민하는 평범한 분들을 위한 글입니다 ^^ 두서 없이 그냥 생각나는대로 씁니다.

1. 학교 수업 열심히 들으세요.

이거 뭐 수능 전국 1등한 학생 인터뷰도 아니고 학교 수업 열심히 들으라니 무슨 소리냐구요? 근데 그게 사실인걸 어떻게 합니까. 학교 수업 열심히 안 들으면 나중에 현업 나와서 후회합니다. 저처럼 -_- 저도 압니다. 학교 수업 들어가면 교수가 프로그래밍은 숙제만 내주지 가르쳐주지도 않으면서 뭔 소린지 알아들어먹을 수 없는 이론만 설명하는거. 그런데 나중에 그게 도움이 됩니다. 모르면 다시 공부해야 해요. 그러니 이해 안되도 그냥 일단 열심히 들으세요. 잘 알아들으면 최고고 몰라도 그런게 있다는 거 정도만 알아둬도 모르는 거 보다는 훨씬 좋습니다.

그 중에서도 제가 단 하나만 손에 꼽으라고 한다면 저는 자료구조 & 알고리즘을 선택하겠습니다. 한승연, 니콜, 구하라, 강지영, 박규리 다 좋지만, 한 명만 선택하라면 구하라인것처럼(엥?), OS, 컴퓨터 구조, 네트워크... 다 중요하지만 그래도 단 하나만 선택한다면 단연 자료구조 & 알고리즘입니다. 사실 이 글을 쓸 생각을 한 것도 얼마전 질게에 자료구조 질문글이 올라왔는데 답변을 다시는 분들이 자료구조가 쉽다는 겁니다. 아마 수업에서 점수 따는게 쉽다는 의미로 쓰셨을거라고 생각이 들지만... 만약 그게 아니라 진심이라면 그렇게 답변을 다신 분들은 천재이거나 아니면...

프로그래밍을 좀 해보신 분들은 아시겠지만, 사실 책에 나오는 왠만한 것들은 요즘 나오는 언어들에서는 구현이 되어 있는 경우가 많습니다. 그런데 현업에서 일을 하면 그런게 있어도 결국 자기가 자료구조 선택하고, 알고리즘 만들어야 합니다. 교과서에 나오는 경제학으로 실물경제에 적용이 되면 강만수가 나라를 이 지경으로 (그것도 두 번이나) 안 만들었을 것처럼, 언어에서 지원하는 자료구조는 어디까지나 실무에서 기본적인 것들을 빨리 구현하는데 도움을 주는 것이지 실제 업무를 전부 처리해주는게 아니거든요. 많은 프로그래머들이 경험이 있으시겠지만, 자료구조 잘못 만들었다가 다음 버전에서 바로 뜯어고치는 일이 부지기수로 일어납니다. 재사용을 위해 객체지향설계 잘하면 된다구요? 저는 아직도 OOP를 모르는 사람이라 함부로 말 못하는데, 노파심에서 말씀드리지만 C++이나 Java 책에 나오는 그 정도의 설계를 할 줄 안다고 어디가서 OOP 안다고 말하면 안됩니다. 제가 이해를 못해서 그런지 모르겠지만 지금까지 현업에서 일하면서 제 주변에서는 OOP 제대로 설계해서 재사용성을 높이는 분들은 한 번도 못봤습니다.

이 부분이 흔히 무협지에서 말하는 내공에 해당하는 부분인데, 내공이 딸리면 소설 초반부에 아직 각성하지 못한 주인공에게 까불다가 중반 넘어가서 주인공의 심부름꾼이 되는 무협지의 하급 악당들처럼 아키텍트의 지시에 따라 프로그램 작성만 하는 coder가 될 수 밖에 없습니다.

2. 프로그래밍 언어는 일단 한 가지를 어느 정도 다룰 줄 알게 된 후에 다른 것을 공부하세요.

그런데 그거 하나 할 줄 알게 된다고 다른 것도 잘 할 거라고 착각하지는 마세요. 흔히들 하나 잘 다루게 되면 다른 것 이해하는 건 쉽다고 말합니다. 그런데 저는 그게 이해가 안 가더라구요. C++ 잘한다고 Java 잘 할까요? 물론 잘 하는 분들 계십니다. 그런 분들은 천재까지는 아니어도 언어에 감각이 있으시거나 아니면... 아 물론 printf나 cout이나 System.out.println이나 다 출력해주는 거 비슷하죠. 그런데 과연 C의 절차적 프로그래밍을 이해했다고 다른 C++이나 Java와 같은 OOP 언어를 잘 할까요? 절차적 프로그래밍과 OOP 이야기는 엄밀히 말하면 언어의 spec에 관한 것은 아니니 그럼 perl이나 bash나 python이나 Ruby와 같은 script language를 잘 쓸까요? scheme이나 erlang같은 함수형 언어는요?

물론 언어는 서로 영향을 주고 받기 때문에 유사한 점이 있고 한 가지를 알면 다른 녀석을 이해하는데 도움이 되는 경우도 있습니다. 그런데 일어 안다고 해서 스페인어 배우는데 과연 얼마나 도움이 될까요? 오히려 이미 알고 있는 개념때문에 새로운 것을 배우는데 문제를 일으키기도 합니다. 한 가지를 안다고 해서 다른 녀석을 잘 이해하게 될 꺼라는 막연한 기대감은 버리고 일단 한 가지를 잘 쓰게 된 후 하나씩 확장하자는 마음으로 배울 필요가 있습니다. 사실 한 가지 언어만 고수의 반열에 올라도 대접받고 살 수 있습니다. 고수의 반열에 오른 사람들은 이미 여러가지를 할 줄 알긴 하지만 -_-;

1번에서 내공 이야기가 나왔으니 이 부분은 외공에 해당한다는 것을 아실텐데, 물론 내공이 중요하지만, 외공도 엄청나게 중요합니다. 내공만 세고 외공이 약하면 결국 주인공의 내공을 증폭시켜주기만 하고 강호에서 사라지거나 악당의 암기에 당해 사라지는 은둔 고수가 되는 것처럼 언어를 다룰 줄 모르는 프로그래머는 현실 세계의 프로그래머가 아니라 학자가 되야 하는 거죠.

엉성한 비유지만 결국 자료구조와 알고리즘을 잘 알고 동시에 그것을 프로그래밍 언어로 표현을 할 수 있어야 합니다.

3. C를 꼭 공부하세요

2번의 연장선상에 있는 부분이긴 한데, 약간 목적이 달라 분리했습니다. 여기부터는 조금 구체적인 부분이기도 하고.

90년대 말부터 컴퓨터 프로그래밍을 가르칠 때 처음부터 Java로 하는 경우를 많이 봤습니다. 요즘엔 뭐가 기본일지 모르겠는데... 아무튼 이런 언어들로 교육을 하면 초보자에게 언어의 개념을 가르치는데는 좋다고 하긴 합니다. 고급언어일수록 풍부한 API로 지엽적인 부분을 덜 생각하게 하는 경향이 있으니까요. 그런데 문제는 이렇게 최근에 기본으로 가르치는 언어들은 포인터를 내부적으로 숨겨두기 때문에 가끔가다가 포인터가 없다고 착각을 하는 분들까지 생격난다는 겁니다. C 언어를 공부할 때 거의 대부분의 사람들을 괴롭히고, 현업에서도 괴롭히고 아마 퇴직할 때까지 괴롭힐 이 포인터를 모르거나 알아도 그냥 대충 아는 분들이 많아진다는 것이 가장 큰 문제인거죠.

C, C++ 안 쓰는데 포인터 모르는게 왜 문제냐? 왜냐하면 포인터를 겉면에 드러내지 않는 언어들도 내부적으로 사실 포인터 쓰거든요. 그리고 포인터는 메모리의 주소로 접근을 하는 방법을 이야기하는 거라서 결국 현재 컴퓨터 구조상 없을 수가 없거든요. 이 녀석을 이해하지 못하면 간단히 말씀드려서 총체적 난국에 빠지게 됩니다. 뭐, 저도 여전히 제대로 이해하지는 못하지만 -_-;;

4. 프로그래밍 처음 시작하는데 어떻게 해야 하나요? 하시는 분들께

공부할 언어를 결정하셨으면, 책 한 권 구입해서 보고 또 보세요. 물론 그냥 읽지 말고 코드는 타이핑하셔야겠죠? 진부한 말로 백문이 불여일타입니다. 다른 거 필요없나요? 네. 그냥 일단 보고 또 보세요. 지겨워도 보세요. 그런데 이게 어렵거든요. 저도 그렇게 안 해서 여태 이 고생합니다 ^^;

5. 프로그래밍 좀 할 줄 알고 실무도 했는데 학벌이 중요한가요? 실무 경험을 쌓는게 더 인정받지 않나요? 하시는 분들께

죄송하지만 여긴 한국입니다. 다른 분야보다는 조금 덜 영향을 주지만, 학벌이 당연히 영향 줍니다. 가끔 10대 후반에서 20대 초반 분들 중에 실무 경험 좀 쌓이고 프로제트 좀 하시면서 인정받으시는 분들 중에 이런 분들 있습니다. 코드 하나 제대로 못 짜는 박사보다 내가 일 잘한다. 네 사실 그럴 수 있습니다. 그런 박사들 분명히 있구요. 그런데 돈은 그 분들이 더 잘 법니다. 그리고 실무로만 인정을 받는 경우는 적어도 해당 분야에서 이름을 떨치는 그 정도 수준이 아니면 필요 없습니다. 당연히 학교 졸업해야 합니다. 그리고 솔직히 외국이라고 다를 것도 없습니다. 구글의 경우 같은 수준이면 박사 학위 소시자를 우선 채용하는 것은 잘 알려져 있습니다. 그 석사나 학사면 학교 이름 봅니다. 왜 안 그러겠습니까? 주변에 좋은 학교 널렸는데.

6. 프로그래머 하면 야근 많이 하나요? 하시는 분들께

위로 올라가서 제가 걸어놓은 링크 기사 다시 읽어보세요 ^^ 물론 회사 분위기, 팀 분위기, 당시 경기, 등등에 따라 조금씩 다르지만 기본적으로 한국은 야근하는 사회입니다. 싫으면 다른 일 하시거나 아니면 외국 가세요. 저도 짜증납니다 -_-

7. 프로그래머는 영어 잘 해야 하나요? 하시는 분들께

영어 못하면 입사 원서도 못 냅니다. 그럼 입사하면 영어 쓰냐? 그거야 복불복입니다. 같은 회사여도 자기 부서나 유관 부서에 외국인 프로그래머가 있으면 당연히 써야되겠죠? 근데 기본적으로는 프로그래밍 이야기 할 때는 대충 얘기하면 통하긴 합니다. 그러니 어디 원서 낼 정도로만 일단 하세요.

그런데 제 생각이지만(그리고 이미 많은 분들이 생각하지만), 앞으로 영어의 중요성은 이 분야에서는 커질 수 밖에 없다고 예측하고 있습니다. 이미 많은 사람들이 이 쪽을 기피하는 분위기라서가 아니라... 앞으로는 우리나라도 프로그래밍을 아웃소싱하는 분위기가 될 거 같아서입니다. 인도 사람들은 이미 2000년대 초반부터 우리나라 대기업에서 조금씩 썼었고, 최근 동유럽쪽으로 고개를 돌리는 회사들이 많아졌습니다. 인도말이나 루마니아어, 헝가리어, 체코어, 폴란드어등을 하는 프로그래머들은 거의 없을테니 영어로 의사소통하셔야겠죠? 경력 쌓이고 팀장이나 PM되면 더 그러실 거구요. 제 개인적인 생각으로는 아무리 늦어도 5년이면 그런 회사들의 비중이 꽤 높아지지 않을까 생각하고 있습니다.

8. 어느 분야가 전망이 좋은가요? 하시는 분들께

그걸 제가 알면 이러고 있겠습니까? 그런 건 각 분야 전문가들도 모를텐데. 예를 들어 AhnGoon님이나 The Xian님께 게임 쪽 전망 좋아요? 하고 물으면 뭐라고 하실까요?(무단 전제 죄송... 아... 잘 아시려나 -_-;;) 중요한 건 최근 추세가 어디든 generalist를 강조하는 추세로 가고 있는데 그래도 우선 specialist가 되어야 한다는 점입니다. 우선 자기 하시는 것 부터 전문가가 된 후에 분야를 넓히셔야지 괜히 요즘 뭐가 인기있다고 저기로 가고, 뭐가 흥미있어서 이리로 가고 그러면 남는 것은 여러가지 초급 경력들과 낮은 연봉 뿐입니다.

9. 제가 지금 하는 일이 ~~~인데 연봉이 적당한 걸까요? 얼마 받아야 할까요? 하시는 분들께

저도 월급 받는 사람인데 뭐라고 하겠습니까? 주는대로 받으세요. 정 맘에 안 들면 (자신 있으면) 그만두고 다른 곳 찾으세요. 아니면 창업하세요. 저도 자신 없어서 그냥 이러고 삽니다 -_ㅜ

10. 대기업에서 시작하는게 좋나요? 아니면 중소기업이지만 프로그래밍으로 이름난 곳에서 시작하는게 좋나요? 하시는 분들께

이 부분은 시각에 따라 다른데, 각각 장단점이 있습니다. 중소기업에서 하면 보통 여러가지를 한꺼번에 해야 해서 고생하면서 해당 분야에 실력자가 되기도 하지만, 전문성이 떨어지는 경우도 있고, 대기업에서도 전문 분야 잘 살려서 고수가 되기도 하는 반면에 하청업체 직원들만 괴롭히는 진상이 되기도 합니다. 그러니... 그냥 근무환경 좀 좋고 돈 더 주는 곳으로 가서 열심히 하세요. 뭐 제가 일했던 기업 얘기라면 입사교육부터 근무 환경이나 전배등등 해드릴 수 있는 얘기가 엄청 많지만, 거기 나온지도 좀 됐고, 개별 기업 얘기니 일반적인 건 아니라서요.

아 쓰지도 못하는 글 괜히 쓸 생각으로 했더니 별로 정리도 안 되는데 길기만 하네요. 어렸을 때 논술은 잘 했는데 실제로 쓰려면 왜 이렇게 엉망인지... 조금이나마 도움이 되는 분들이 있으면 하는 마음에 주절주절 써봤습니다. 혹시 다른 질문 있으면 댓글 달아주시면 잘 하시는 분들이 답변 해주실 겁니다. 아니면 제가 아는 한이라도... ^^;

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
검은창트롤
10/03/24 14:16
수정 아이콘
16개월 좀 넘는 기간동안 월~금은 9시 출근 2시 퇴근, 토요일은 10시 출근 2시 퇴근, 일요일은 12시 출근 2시 퇴근...
추석/설 연휴때는 추석/설 당일 하루 쉬었고, 그 외의 휴일 0, 휴가 0 - 본사에서 휴가 소진하라고 압력 들어오니 1주일 휴가 쓰고 정상 출근
그 프로젝트때는 견뎠는데 그 다음 프로젝트때(주말 출근 그래도 좀 덜 하고 매일 12~1시 퇴근) 과로로 사무실에서 졸도.
뭐 악성 프로젝트만 연속적으로 걸려서 저랬지만, 저런 생활 하는 사람이 드물지 않습니다.

덤으로 회사에선 접대 하지 말라 하고 고객은 접대를 요구하고 뭐 그렇습니다.
아가씨 옆에 없으면 술 못쳐먹는 xx들, 아 진짜 그때 생각만 하면 혈압이...

전산쟁이 하겠다는 후배들 보면 도시락 싸들고 다니면서 말리고 있습니다.
하루04
10/03/24 14:23
수정 아이콘
10가지 전부 정말 도움이 많이 되는 글들이네요~ 한번씩 고민 했던 부분들도 많고..
야근.....월드컵 때문에 근 10일간 밤샘작업을 했는데 너무 피곤해요ㅠㅠ
살찐개미
10/03/24 14:24
수정 아이콘
결론은 개발자하지마세요.

농담이 아니라 정말정말정말정말정말 진심으로........
WizardMo진종
10/03/24 14:24
수정 아이콘
학부 졸업반 학생인데 본문을 보면서 아 내가 알고있는게 다 맞구나... 라고 생각이 들었습니다.
Korea_Republic
10/03/24 14:33
수정 아이콘
저도 미쿡의 한 대학에서 경영정보학과 졸업반 학생인데 (졸업 한달반 정도 남았죠) 평소 막연하게만 생각해왔던것들중 맞는부분이 많은것 같아서 공감이 됩니다. 근데 저는 일단 병역의무를 먼저 해결해야 하니깐...... (먼산)

저 역시도 코드짜고 그러는건 저랑 안맞을듯 싶어요. 간단한 서블릿 하나 만드는데도 몇일이 걸렸을 정도라서요 ㅡㅡ;;
10/03/24 14:38
수정 아이콘
구글의 경우 박사학위를 적기는 하지만 학교를 적는다거나 그런 공간 자체가 없습니다만...
뭐 박사학위 받은곳을 적으니 그게 그거겠군요 -_-a
프로그래밍 쪽은 확실하게 모르겠지만 실리콘밸리에서는 학벌에서 -> 실력으로 넘어가고 있다고 하더군요.
그냥 졸업했다 이것만 작성하고-> 회사시험 -> 인터뷰하면서 감시관 앞에서 프로그래밍 -_-;;
얼마전에 제 사촌형이 Apple,AMD,WD,Yahoo에 신청했는데 전부다 프로그래밍 시험 봤다고 하더군요.
결국엔 수업을 잘 들어야 한다는게 진리인듯 합니다 ~.~
Summerlight
10/03/24 14:38
수정 아이콘
기본기가 중요하다고 강조하셨는데, 정말 이거 틀린 말이 아닙니다. 프로그램을 설계한다는 것도 제일 밑바닥까지 내려가보면 케이스에 맞는 효율적인 자료구조들을 만들고, 그걸 처리할 효율적인 알고리즘을 구현하는 것이죠. 학부에서 배우는 자료구조 시간은 이러한 설계의 가장 기본적인 방법들을 배우는 과목이니 절대 소홀히 하시면 안 됩니다. 컴퓨터가 좋아졌다고는 하지만, 아직 비효율적으로 만든 프로그램들까지 무난히 돌릴 수준은 안 됩니다.

언어를 여러 개 배우는 것 역시 사고의 폭을 넓힌다는 관점에서 볼 떄 굉장히 도움이 됩니다. 절차 지향, 객체 지향, 일반화, 함수형 등등 프로그래밍 패러다임은 다양한데, 같은 문제를 서로 다른 방식으로 해결하는 것을 보다 보면 머릿 속에 담아 두고 있는 프로그램을 작성하는 표현력이 넓어지죠. 많은 사람들이 프로그래밍 언어를 여러개 배우라고 하는 이유는 그 것들을 다 쓰는데에 목적이 있는 것이 아니라, 각 언어들이 제공하는 추상화 수단들을 이해하고 공부하는 것에 있습니다. (그렇다고는 해도 저수준 언어, 스크립트 언어는 각각 한 개 이상 능숙하게 쓸 수 있는게 좋습니다.)

그리고 영어의 중요성 역시 정말 중요합니다. 영어가 되는 사람은 안 되는 사람보다 기본적으로 10배 이상의 정보를 확보하는 것이고, 조금 더 고급 기술들로 가면 100배 이상의 정보를 확보하고 시작하는 겁니다. 사실 많은 분들이 좋은 책들을 국내에 들여오려고 힘을 쓰고 계시긴 합니다만, 매년 쏟아져 나오는 새로운 기술들을 전부 커버하기엔 역부족입니다. 논문쪽으로 가면 번역판 같은 건 사실상 없다고 봐도 무관하고요. 이런 상황에서 영어를 못하면 지식을 습득하는 데에 있어서 수동적인 자세를 가질 수 밖에 없게 됩니다. 말하고 쓰진 못하더라도 최소한 기술 문서 정도는 읽을 수는 있어야 합니다.
김연우
10/03/24 14:45
수정 아이콘
자료구조+알고리즘+영어. 셋이 핵심이지요.

제 생각에 영어는 필수입니다. 논문도 그렇고 구글링도 그렇고
SNIPER-SOUND
10/03/24 14:54
수정 아이콘
본문과 좀 동떨어진 이야기지만

IT 기반 회사는

기획, 개발, SE 가 정말 물고물리는 원수 관계죠.

원수가 되는 이유는 각양 각색이지만 주위를 봐도 대부분 원수처럼 이를 갈고 지냅니다.

우리 생각이 짱이야 (기획)-> 되도않는 기획으로 뭘만들라는 거야 그리고 날짜는 왜이리 급박해!!(개발) ->
아 님들 자제요. 먼저 실컷 싸우느라 시간 밀려놓고 시스템을 이틀만에 구축하라고 ? 난 퇴사하겠소(SE)

이러한 말도안되는 업무 방식이 각 부서의 야근을 부추긴다고 생각합니다.
10/03/24 15:42
수정 아이콘
^^;;; 갑자기 제 글 관련한 쪽지가 와 있길래 깜놀했는데, 님의 글 때문이었군요!
아스트랄
10/03/24 16:12
수정 아이콘
좋은 글 잘 보았습니다.
저도 현직 개발자로서 몇가지 추가해보죠. 글쓴분이랑은 좀 다른 견해도 있네요.
전 JAVA 개발자 입니다. 따라서 OOP 에 한정된 이야기만 하겠습니다.

1. OOP 개발자는 C 를 하지 않고 바로 OOP 를 하는 것이 낫습니다.
C(절차지향) 와 OOP 는 패러다임 자체가 완전히 다릅니다.
프로그래밍 언어에서 패러다임이란 real world 를 computer world 로 상태 변화를 해주는 기준이라 보시면 됩니다.
즉 실제 세상을 컴퓨터 세상에서 표현하는 방식이라는 거죠.
C에서는 실제세상을 순차, 분기, 반복의 절차적으로 수행되는 것이라고 보는겁니다. 그래서 이 기준에 맞춰서 프로그램 구성을 하죠
OOP 는 실제세상을 객체라고 보는겁니다. 그리고 이 객체들간의 관계로 프로그램 구성을 하죠.
( 객체란 속성과 행동으로 구성되어 있는 것입니다. )
패러다임의 변화는 정말 어렵습니다. 따라서 절차지향의 관점을 패스하고 그냥 객체지향의 관점으로 배우는 것이 낫다고 보여지네요.
객체지향으로 나가는 이유는 간단합니다. 유지보수의 용이, 재사용성 이게 잘 만든 프로그램에 기준이거든요 ( 예전에는 performance 였습니다 - 물론 아직도 이게 중점이 되는 분야도 있습니다 ) 그리고 절차지향보다는 객체지향이 이걸 더 잘 구현하게 해주는 것이고요.

2. 영어는 필수입니다. ( 현재 상황에서는 이라는 단서가 붙습니다만 )
조금만 심도있는 정보를 구하려면 한글로 된 것들은 거의 없습니다. 구글링만 해도 대부분은 외국 사이트에 forum 에서 정보를 얻을 수 있습니다. 거기다가 API , 주석도 전부 영어로 되어있습니다. 따라서 어쩔 수 없이 영어를 잘 하셔야 합니다.
영어라고 하니 오해의 소지가 있는데 읽기만 잘 하시면 됩니다.

3. 1번과 연관된 내용입니다만 객체지향이 지향하는 것에 대해서 충분히 심사숙고 해 보시기 바랍니다.
같은 기능을 구현하는 방법은 무수히 많습니다. 어떤 방식으로 내가 개발을 해야 하는 것은 객체지향이 지향하는 방향으로 해야 하는겁니다. ( 추상화, 재사용 등등 )
객체지향이 유행하기 시작한 시간이 꽤 지났습니다만 아직도 JAVA 를 절차지향으로 짜는 사람이 많습니다. 왜 객체지향적으로 짜야 하는지 모르기 때문이지요.

4. 3번과 연관된 내용인데 개념에 대한 공부를 많이 하시기 바랍니다. 그렇지 않으면 계속 코더에서 머무르게 될 것입니다.
예를들어 제가 담당하고 있는 시스템은 OSGI 기반에 extjs(화면단), spring(controller&business logic), hibernate(DB연결) 인데 개념을 모르고 그냥 코딩하는 사람이 많습니다. spring 에서 IoC 는 필수 개념입니다. hibernate도 ORM 개념이 필수 입니다. 왜 이런 방식을 사용하는지 아셔야만 spring, hibernate를 제대로 사용하고 있는겁니다. 물론 이개념들은 상당히 어렵운데다가 익숙해 지려면 시간이 많이 걸립니다. 그래서 그런지 아직도 엉망으로 개발된 프로젝트가 많다고 하더군요.

5. 안타깝게도 위의 예처럼 굉장히 잘 설계되어 있어서 ( OSGI 는 모든 프로젝트를 번들로 구분해서 기본적으로 번들별로 사용할 수 있게 해 줍니다.) 재사용 잘하고 유지보수가 용이하게 해 놓는다 하더라도 현업은 관심 없습니다. 기능만 잘 되면 되는거거든요. 수준 높은 프로그램일수록 소스 파악하기는 엄청나게 어렵습니다. 현재 트렌드는 객체간의 결합도를 낮추는 것인데 결합도를 계속 낮추다 보니 실제 소스에서는 interface 만 가지고 있지 실제로 사용하는 구현된 class 를 찾기가 어렵거든요. xml 및 annotation 으로 거의 모든 설정을 해 놓으니깐요.
하고자 하는 말은 이렇게 어려운 개념을 이해해서 제대로 프로그래밍을 한다고 해도 돌아오는건 별로 없다는 거에요.
그러니 정말 개발이 좋은것 아니라면 이길은 들어오지 마세요(응?)

결론이 이상하게 낫는데 혹시라도 자바 개발자의 길을 걸으려는 분이 있다면 조금이나마 도움이 되셨으면 하네요.
사실좀괜찮은
10/03/24 16:32
수정 아이콘
한국에서 해서는 안 될 일 중 하나가 프로그래머... 그리고 만화가... 뭐 그렇더군요.

화이팅입니다.
폭렬저그
10/03/24 16:48
수정 아이콘
C는 개인적으로 비추 드림....

오히려 HTML -> DHTML 을 먼저 보시는걸 추천드리고 싶군요.. 대세는 ClientSide Script 로 점점 가고있습니다.

C는 별로 쓸모가 없어집니다..C 디자인패턴도 다 사장되고 있구요...거의 금융권 코어부분만 남아있다고 보시는게 맞을듯..

그쪽도 사실 C라기 보다는 ProC 죠...사실상 쿼리능력..

ps)...근대 전 C 개발자입니다.ㅠㅠ.....
폭렬저그
10/03/24 16:52
수정 아이콘
아이폰 C코드의 디자인 패턴이나 MFC디자인 패턴을 잘 보시면 왜 C를 하지 말아야 하는지 아실듯

또한 JavaScript 도 점점 복잡해서 oop 개념으로 슝 하고 ~ 가고있습니다.

jquery,dojo 같은 복잡한 넘들 범용화 시작했고 HTML5 로 또 한번의 변혁이 일듯...C는 완전 비추입니다..
폭렬저그
10/03/24 16:56
수정 아이콘
사실좀괜찮은밑힌자님//

네 그냥 넘어가세요..^^;;..이해하실 필요 전혀없습니다.

옛날이야기고

지금은 차라리 HTML공부하시는게 도움됩니다.
10/03/24 16:57
수정 아이콘
흐흐.. 좋은 말씀은 위에서 다들 해주셨으니.. 약간만 양념을 치자면,

영어는 진짜 필수입니다. 국내 출판 서적은 경력 3년차, 번역서는 5년차가 되는 순간 안 읽게 됩니다.
그담부터는 무조건 원서 아니면 구글링이죠. 읽기 공부 많이 하세요.

수학도 잘 하셔야 합니다. 특히나 학교에서 별로 중요하게 안 생각하고 그냥 넘어가는 집합론 & 확률...
이게 진짜 대박입니다. 저거 제대로 이해 못하고 넘어가면, 코드가 온통 if-else 투성이가 됩니다. 완전 짜증납니다. -_-;;
만약에 게임 프로그래머가 되시겠다면, 벡터, 행렬, 삼각함수는 완전 마스터하고 오십쇼. 선형대수도 물론.

그리고, 제발 국어공부좀 소홀히 하지 맙시다. 기획문서대로 좀 짭시다. 이건 뭐 난독증도 아니고...

이상, 짜증스런 후임들한테 치이다가 회사 때려치우고 게임 회사 차려버린 11년차 넘버 3 개발자의 푸념이었습니다.

P.S: 아, 그리고 제가 자녀가 생기면, 술담배는 권할지언정 프로그래머는 안 권할 생각입니다.;;
GodMetallica
10/03/24 17:01
수정 아이콘
이번에 복학한 컴공1학년으로써
큭.... 갈길이 멉니다...
큐리스
10/03/24 17:15
수정 아이콘
저도 C는 패스하는 걸 추천드리구요.
포인터에 대한 이해를 위해서는 차라리 어셈블리를 살짝 배우는 편이 좋다고 생각합니다.
깊게 들어갈 필요는 없고 기본적인 부분만 익혀두면 포인터 개념에 대해서는 충분히 이해가능할 것 같네요.
azurespace
10/03/24 17:20
수정 아이콘
저 개인적으로는 프로그래밍 입문은 ML 등으로 시작하고, 이후에 Python을 거쳐 C와 Assembly 레벨까지 커버하는 것이 가장 좋다고 생각합니다. Markup Language 말고요!

왜냐면 ML은 수학만 좀 알면 누구나 할 수 있는 것이죠. 컴퓨터 내부 구조에 대한 이해가 아예 없어도 가능합니다. 물론 performance와 readability를 동시에 갖춘 프로그램을 작성하려면 내부 구조를 공부하긴 해야겠지만, 그건 별개의 문제고요.

Python 역시 pack, unpack 같은 부분을 제외하면 아키텍쳐에 대해서 많이 알 필요는 없습니다. 그러면서 OOP도 지원하고 있으며, 간단한 코드 블록들은 절차 지향적으로 작성하게 되고요. Python은 C를 배우기 전에 징검다리 삼아서 접할 수 있는 가장 좋은 언어입니다.

JAVA는 제 사견으로는 언어 자체가 조잡합니다. 10년도 더 전에 만들어진 언어이고, 옛 버전의 문법을 그대로 지원하면서 JVM의 설계 변경을 최소화하면서 언어를 확장했기 때문에, 이는 어쩔 수가 없습니다. 사용 범위가 워낙 넓고 방대한 라이브러리가 존재하기 때문에 사용하는 것이지, 그나마 없었으면 저는 JAVA는 절대 사용하지 않을 겁니다. C#에 비교하면 정말이지.. 마소님이 다 해주실거야....
azurespace
10/03/24 17:27
수정 아이콘
그리고 Data structure와 Algorithm 말인데, 얘들 우습게 볼 것이 전혀 아닙니다. 저는 10년 이상 Algorithm Contest에 참가했는데도 아직 얘네가 어렵습니다. 단순히 학부 과목에서 점수를 잘 받는다는 수준이라면 쉽겠지만, 하면 할 수록 심오하고 기발한 애들이 튀어나옵니다. 근데 좌절스러운건 이런 애들이 6~70년대에 다 나왔다는 거죠. 삼사십년 전의 학자들이 만들어 놓은 걸 21세기에 읽는데 잘 이해가 안 될 때는 정말 눈물이..

단순히 Code를 작성하는 것 뿐이라면, 회사 입장에서는 실업계 고등학교나 전문대 출신들 데려다가 시켜도 됩니다. 오히려 이쪽이 4년제 대학에서 대충 이것저것 하다 온 사람들보다 코딩 실력은 뛰어납니다. 코딩이란 건 기본적으로 Skill과 Experience가 중요한 분야이니까요.

하지만 그 Code에서 사용할 가장 좋은 Algorithm이나 Data structure를 설계하는 것은 정말로 어려운 일입니다. 근데 문제는 이게 프로그램 성능에 진짜 엄청나게 큰 영향을 미치거든요. 완전히 같은 일을 해서 같은 결과를 내놓는데, 한 프로그램은 열흘이 걸리고 다른 하나는 다섯시간에 끝나는 것도 가능합니다. 이건 정말이지... 창의력과 응용력 없이는 안 되는 일이거든요. (그래서 제가 성공하질 못했나 봅니다. -_-)
Je ne sais quoi
10/03/24 18:12
수정 아이콘
흐흐흐 한분 두분 나오시는군요... 프로그래머 하실 분들은 나중에 모르는 거 있음 물고 늘어질 몇몇 아이디 기억하시기 바랍니다. 대표적으로 a로 시작하는 분들 있습니다.
10/03/24 18:32
수정 아이콘
일단은 역시 기본기가 가장 중요합니다. 자료구조+알고리즘+수학+언어기본개념(절차적or객체지향적)+영어(정보력)
그리고 현업에서는 주어진 과제를 잘 해결할 수 있는 기술 개발도구 API 라이브러리 등등 재빨리 찾아 습득하는 능력이 추가적으로 요구되는 거죠.
아무래도 각 분야별로 자주 써먹는 개발도구테크와 기술이 따로이다보니 결국 적어도 한가지 테크에서 전문가가 되는 게 일단 살 길입니다;
끊임없이 배울 수 있어야 하고 배우는 걸 즐길 수 있어야 합니다. 대충 할 수 있는 직업은 절대 아니에요. 즐기던지 떠나던지 All or not.
폭렬저그
10/03/24 18:45
수정 아이콘
SW 개발 쪽에서 가장 중요한건....

"열정" 입니다. ^^;;;
폭렬저그
10/03/24 18:47
수정 아이콘
사실좀괜찮은밑힌자님//

java 로는 게임을 만들지 않습니다. ^^;; .. java 의 UI는 극악이며 VM언어 특성상....데이터 처리가 늦어서 아예 안쓰입니다.

javascript 로 만들어 보세요 ^^;;
마이클스코필
10/03/24 18:49
수정 아이콘
지금 컴공 학부생으로서 벌써 부터 걱정과 한숨을 만들게 합니다. 그렇다고 쉽게 포기는 하지 않을겁니다.
제가 궁금한게 있습니다. 컴퓨터 공학을 전공하고 학부생으로 졸업하면 프로그래머 외에는 다른 길은 없는 건가요?
제가 아직 직업에 대해서 잘 모릅니다만, 프로그래머가 비추이면 다른 방향으로 가는게 어떨까 싶어서 저도 그쪽으로 알아보고 싶네요,
사실 저는 코딩 실력 형편없습니다. C나 C++문법만 대충 아는 편이고 프로젝트 같은걸 해보지 않아서 .....
아무쪼록 프로그래머 길은 저도 가기 싫은데,,, 다른 쪽으로 어떤게 있는지 궁금하네요.
10/03/24 19:12
수정 아이콘
컴퓨터 소프트웨어과쪽 갓 새내기라서 덜컥 겁이 나지만 그래도 프로그래밍 공부하면서 예제들만 해내도 성취감은 대단하더군요 -_-;;
그래서 계속 하고 있습니다.
WizardMo진종
10/03/24 19:13
수정 아이콘
슬슬 뭔말인지 이해가 안되는 단계까지 왔는데 비전공자가 이 댓글들을 보면 어떤표정을지을지,,,
율본좌
10/03/24 19:56
수정 아이콘
프로게이머의 길을 걷는 후배님들께 라고 들어왔네요;
10/03/24 20:13
수정 아이콘
분명 댓글에 한글이 오가고 있는데 번역을 부르고 싶어지는 이 상황은 뭘까.
카오스와반수
10/03/24 20:40
수정 아이콘
저번에...한국 프로그래머들 힘든가요?물어봣는데

어떤분이 지금이라도 늦지 않았으니 다른 적성을 찾아보라고 해서

이번에 수능 한번 더볼려고 하는중인데;;;덜덜
Korea_Republic
10/03/24 20:41
수정 아이콘
전공이 경영정보쪽이신 분들은 안계시나요? 이글에 댓글 다신분들 대부분 컴공계열이신듯 하네요.
Cazellnu
10/03/24 21:18
수정 아이콘
제가 제일 싫어하는게 술자리서 일이야기 하는거, 노는곳(?)에서 일이야기 하는거인데 이러지들 말자구요..
10/03/24 22:15
수정 아이콘
저도 아직 실력이 부족한 전공 + JAVA개발자로써 한 말씀 드린다면 객체지향이라는 개념이 상당히 어렵습니다.
실력이 점점 늘면서 객체지향이라는 개념에 대해 더 심도있게 생각해보실텐데 , 저도 처음 개발할때는 객체지향 쉽네? 이렇게하면되는거아니야 했던 때도 있지만 지금보면 거의 다 형편없죠. C를 잘하신다고 C++이나 JAVA를 잘하실 순없습니다. 물론 처음시작하시는 분보다는 이해나 업무속도는 빠르죠. 저도 아 쉽네? 남들보다 내가 잘하네? 이런 잘못된 생각하기 쉽습니다. 저도 또한 그런 잘못된 생각에 한참 나태했습니다.
흔히 말하는 Spring 이란 프레임워크도 제대로 이해하고 사용하는분 현업에서 흔치않습니다. 그냥 쓰니까 편하니까 쓰는거죠. 하지만 조금이라도 왜 이렇게 사용하는지 생각해보면 상당히 어렵습니다. 물론 C 부터 C++ , JAVA 등으로 시작하는게 저도 맞다고 생각하지만 .
참고로 SI나 솔루션업체,개발업체에 들어가신다고 해도 많은업무량(업무파악,문서작성,코딩) 등으로 계속 발전없이 컨트롤브이에 익숙해지는
코더들이 많고도 많습니다. 저또 한 ㅠㅠ
전공수업,영어부터 열공하세요. 이게 진리인듯
스웨트
10/03/24 22:45
수정 아이콘
경상대의 눈으로는 그저 경외심에 덜덜...
준이...
10/03/24 23:35
수정 아이콘
동생들이 C, C++, JAVA 등, 어떤 컴퓨터 언어를 어떻게 공부 해야 되냐고 물을때 마다 항상 제가 해주는 말이 있죠..

"..영어(외국어).."

흐그그그그그그그그극...ㅜㅠ
10/03/25 00:04
수정 아이콘
다들 코어 개발자 같으세여ㅠ-ㅠ.. 내공들이.. 전 그저 SI 개발자 뿐. 할 줄 아는건 C#과 실버라이트 정도의 웹기술.
여자예비역
10/03/25 00:25
수정 아이콘
이걸 다 이해하는 내가 싫다.. 정말...ㅠㅠ
10/03/25 01:09
수정 아이콘
여기가 어디죠? 전 누구죠?
이걸 다 알고 있어야 사람이 되는 건가요?
여러분, 제 말 들리기는 하는건가요?
10/03/25 10:35
수정 아이콘
컴퓨터 전공하고있는 학부생인데요.. 학교 커리 큘럼상 1학년 2학기때 C를 배우고, 2학년부터 자료구조와 OOP를 배우게 되어있거든요? 그러니까 절차적 프로그래밍하고 OOP를 동시에 배우게 되는거잖아요. 자료구조 교수님이 말씀하시는 것도 C를 선택해서 배우고 있지만 절차적 프로그래밍에 국한된게 아니라 항상 OOP와 연계해서 설명하시던데 절차적 프로그래밍하고 OOP를 동시에 하기가 그렇게 어렵나요?
Polaris_NEO
10/03/25 14:03
수정 아이콘
저도 모르게 그저 이상향만 바라보고 덜컥 SE의 길로 입문한 비전공자(경영)입니다.

교육받으면서도 '난 누군가 또 여긴 어딘가 -_-' 이러고 있는데

이 글을 보니.. 제 앞날이.. 하아아 ㅠ

앞으로 Je ne sais quoi님을 비롯하여 Je ne sais quoi님이 언급하신 a로 시작하시는 많은 분들의 조언을 구해야 겠습니다 (굽신굽신)
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
58137 [일반] 무어의 법칙과 부의 재분배 (부제: 과학기술혁신은 결국 중산층의 몰락을 야기하는가) [51] cheme8896 15/05/12 8896 10
57242 [일반] 왜 우리는 목성을 두려워 하는가? [36] cheme9949 15/03/28 9949 12
56248 [일반] 민두노총에 새희망은 찾아오는가? [39] cheme9348 15/01/29 9348 2
46180 [일반] [대세동참] 같은 운동이라도 체력을 측정하면서 합시다. [4] cheme5662 13/08/29 5662 3
39075 [일반] [테니스] 앤디 머레이 사상 첫 테니스 단식 메이저 대회 우승 [26] cheme6454 12/09/11 6454 1
38853 [일반] 두 명의 암스트롱 [13] cheme7522 12/08/27 7522 0
38012 [일반] [아마도?] 힉스 보존 발견이 임박한 듯 합니다. [39] cheme7211 12/07/05 7211 1
36803 [일반] 문대성씨가 탈당 기자회견을 돌연 취소했네요. [54] cheme7270 12/04/18 7270 0
34308 [일반] [K의원 vs. 이준석 비대위원] [43] cheme6911 11/12/30 6911 0
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로