Q&A 자바자료 자바팁 자바정보 자바스크립트 자바자격증 광고

시작하는 자바프로그래머님께 (비전공자 포함)


음, 안녕하세요. 김상욱입니다.

휴. 고생 많으십니다.

음 저도 컴퓨터 전공자가 아닙니다.

기계설계학과 전공이었지요.

AutoCAD를 전공하려다가 바꾸었습니다.

처음 수개월간의 고생이야 더 말할 나위도 없었지요.

누구도 가르쳐주는 것도 없고,

저는 요즘 흔히 보는 몇개월짜리 학원을 다니다가 자바로 뜻을 잡고 졸업하면서

scjp자격증(문법만 알면 패스됨)을 취득했지요.

C 처음할 때, 가장 힘든 것이 포인터개념 아니겠습니까?

자바에서는 그만한 고생을 객체지향을 이해하는데 해야하지요.

아무리 똑똑해도 처음 6개월간은 정말 미칠 지경이 됩니다.

그것을 인내하고 이겨내야 비로소 하다못해 어디서 물으면서라도 공부할 수 있게 됩니다.

무엇보다 중요한 것은 님의 적성입니다.

컴퓨터앞에 컴퓨터랑 씨름하며 몇시간 몇일씩 혼자만의 싸움을 하는 것에

적성이 있어야 합니다.

그리고야 기본적인 로직인데 대입 반복 순환 은 아시지 않습니까?^^

 

그나마 취업이 잘 된다는 IT 계통(여기도 많이 어려워졌지만요.)

에 들어서긴 하셨지만, 그렇게 장밋빛세상은 아니더군요.

게다가 평생 쉬지않고 공부해야 합니다. 계속 바뀌니까요.

 

칼같이 말하자면, 아무나 개발할 수 있다면 전문직으로서 높은 수익을 얻을 수 없겠지요.

적성도 맞고 다 이겨낼 수 있는 인내심도 갖췄다한다면

휴, 자바에 대한 이야기를 해볼까요?

Java 생긴 지 겨우 몇 년 된 언어입니다. 인터넷의 붐을 타고 크게 인기를 끌었으며 우리나라에서 인기를 끈 것도 불과 몇 년 정도입니다.

이것은 프로그래밍을 시작하는 이에게 좋은 매리트입니다. 왜냐? 그만큼 뒤쳐지는 폭을 줄일 수가 있지요. 생긴 지 얼마 안된 언어이기 때문에 비전공자에게 좋습니다.
(물론, 4년 내내 컴쪽을 공부한 전공자에 비해서는 핸디캡은 있겠지요. 자바라고 해봐야 설계가 조금 다르지 결국 그 살을 메워넣는 건 로직이거든요.)

 

또한 그 개발 가능성이 무한합니다.

반 MS체제 진영에 수많은 강력한 기업들이 합세하면서 플랫폼이 다양화되면 플랫폼에 독립적인 Java가 느린 수행속도라는 단점을 극복하고, 그 위력을 뽐낼 수가 있습니다. 물론, MS가 기득권을 가지고 밀어붙여서 윈도가 전세계 OS를 독점한다고 한다면 Java가 기대에 못미칠 수도 있겠습니다만, 그럴 가능성은 적다고 봅니다.

덧붙여서, PC시장 자체가 축소될 것을 염두에 두어야 합니다. Java는 본래 가전제품에 탑재될 것을 염두에 둔 언어니까요. (꼭 모바일 쪽이 아니라 하더라도)

어려운 경제상황에도 불구하고,

그나마 좋은 소식은 웹언어의 예를 들면, 해외는 Java기반 기술(jsp 등)의 인기 상승곡선이 조금 누그러졌는데, 국내에서는 꾸준히 늘어 마침내 nt계열을 앞질렀더군요.(요새 asp버그가 많더니만.) 이 추세는 당분간 계속될 것입니다.

그 외 자바의 장점은 큰 서점에서 책 몇권 들고 서론만 읽어보면 아주 자알~ 나오는 것들이지요.

공부방법은 성심껏 가르쳐주는 착하고 훌륭한 선배가 있다면야 뭐가 두렵겠습니까만은, 그런 경우는 매우 드물지요. 사람들에게 동냥하듯 지식과 정보를 구걸해야 하고요.(프로그래머는 대체로 차갑잖아요. 절라 착한 저 빼고^^)


몇 가지 말씀드리자면,

1. 그래도 인맥은 활용하세요.

열심히 하고 잘 하는 사람 귀찮게 해야합니다. 매우 빠른 방법이지요. 물론 아예 지쳐서 도망가버리면 안되니까 적당히^^

2. 책은 잘 선택하세요.

책 선택은 주욱 찾아보고 자신에게 맞는 것을 고르는 것이 가장 좋습니다만, 그런 것이 익숙치 않은 분이라면, 자바사이트들을 둘러보면 책 비교, 추천하는 란이 꼭 있습니다. 읽어보시고 평이 좋거나 여러번 추천된 서적을 눈여겨 보고 고르세요. 물론 처음엔 가장 얇은 거로 시작하시고요 (알기쉬운 Java 2 강환수 저 를 추천합니다.) 그리고 바이블 류 하나 고르셔서 참고서로 쓰세요.

3. 시작은 튜토리얼로 하세요.

튜토리얼은 자바를 만든 Sun사에서 만든 메뉴얼입니다. 저도 왜 시작을 Java Tutorial로 하지 않았는지 안타깝거든요. 자바언어개발자가 쓴 매뉴얼이니 이거다! 그러면 100% 그거 맞습니다. 가장 확실하고 예제도 충분하지요.

4. 온라인을 적극 활용하세요.

급할 때 Q/A란에 질문올리는데에만 사용하시나요? 음, 물론 모르는 것은 그렇게 해야지요. 하지만 착한 마음으로 답변해주러 Q/A란에 들를 때 가장 짜증나는 것이 조금만 찾아보면 되는데, 혹은 이 게시판에서 관련 단어 검색만 해도 수십개 답변이 나오는데 막무가내로 급해요~~ 혹은 어디서 구한 소슨데 고쳐주세요~~ 이런 식의 질문입니다. 최소한 여기서 찾아봤는데(대부분 다 찾아지지만) 이러이러한 부분은 없거나 모르겠어서 질문합니다. 식으로 그리고 되도록 쉽게 힌트를 줄 수 있도록 질문해보세요. 반나절 안에 답변이 올라올 겁니다.

제 경우는 어려운 문제에 대한 단어 검색을 했더니 수천개의 검색 결과가 나와서 그 중에 답변이 있는 글만 날 잡아서 다 읽고는 했습니다. 초보일 때에는 다 비슷한 오류를 범하기 때문에 거기서 답변이 얻어질 뿐더러 의외로 수많은 팁들을 얻을 수 있지요. 제게 가장 큰 재산은 그때 눈 비벼 가면서 읽어댄 수천개의 게시물들이었습니다.

Q/A가 많은 url은

javaland.co.kr이 가장 오래된 자바사이트라 게시물 수가 많고,

javastudy.co.kr가 가장 활발해서 요즘 답변이 빨리 올라오고요,

javanuri.co.kr도 만만치 않지요. 거기 등록된 비기닝 강좌 추천합니다.

위 셋이면 충분할 겁니다. 아마 대부분 아시겠지만요. 각 사이트마다 또한 유용한 사이트들을 링크시켜놓고 있으니 필요한 부분을 찾아가보세요.


솔직히, 학생들이나 전공을 바꾼 이들로부터

자바 어떻게 공부해야 되요?

라는 말을 많이 듣는데, 저도 참 안타깝습니다. 그들 대부분은 몇 달 해보다가 슬슬 어려운 부분이 나오면 금새 다른 언어로 고개 돌려보고 또 조금씩 겉을 핥다가 이도저도 못하더군요.
공부도 무식한 사람이 잘한다고. 일단 마음을 먹었으면 죽어라~ 하고 반년은 공부해야 성과가 나오는데 말이죠. 구구단을 3~4단까지 외우고서 어떤 성과를 바라는 건 어리석인 일이죠.

또한,

자바가 뜰까요?^^
자바가 나아요 C가 나아요?

이런 질문도 많이 받습니다만, 이건 그야말로 누구도 모릅니다.

지금 당장 Sun이 이길지, MS가 이길지도 모를 뿐더러. Java가 각광받는다고 해도 또 그 단점을 극복한 새로운 언어가 어떤 계기에 의해서 인기를 끌게 되면 그때까지 죽어라 익힌 Java기술이 점점 사장되는 것을 지켜봐야 하지요. 결국 다시 말씀드리지만 이쪽에 발을 들여 놓은 이상 평생 공부해야 된다는 것입니다...

둘 다 잘하면 좋겠지요. 슈퍼맨이 되는 것입니다.
하지만, 시작하는 이들에게는 꿈같은 말입니다.

지금 제가 드릴 말씀은

"자바만 하기에도 시간이 모자르다." 입니다.

가뜩이나 생긴 지 얼마 안된 기술이라 하루에도 새로운 기술과 정보가 수두룩하게 쏟아지지요. 최소한 3~5년된 중급자가 C도 해볼까 라고 생각해본다면 모르지만. 선배들이 종종 말하길, 우선 한 언어의 전문가가 되라고 했습니다. 그러고 나면 다른 언어를 습득하는 것이 훨씬 쉽다는 거지요. 아까 말씀드렸듯이 살이 되는 기본 로직은 같거든요.

님의 어려움은 제가 걸어온 길을 걸으시는 것이기에 잘 압니다.

그런 안타까움에 바쁜 프로젝트 기간에 손 멈추고 님 위해 길게 글 보내는 것이겠지요.

힘내시고요. 다시 한 번 희망을 갖고 묵묵히 공부해보세요. 물론 이쪽 계통이 어떻게 돌아가는 지도 항상 정보습득하고 있어야 겠지요.(요새 온라인 잡지도 많으니까요.)

항상 노력하는 전문가가 되시길 빕니다.

 

아래는 한국 선사의 이사 황성훈씨가 Java 세계에서 꿈을 키워가는 프로그래머에게

좋은 글입니다.

---------------------------------------------------------------------------------------

현재 Java 환경에서 프로그래밍, 설계, 기타 등의 역할을 수행하는 개발자의 수는 날로 증가하여 몇 백만이라는 아주 큰 규모의 커뮤니티를 이루고 계속 그 규모를 키워가고 있다. 이들 중에서 단연 많은 비중을 차지하고 있는 부분은 Java 프로그래머들이다. 프로그래머는 해당 분야의 관련 시스템 구축의 직접적인 역할을 수행하는 인력으로서 군대로 말하자면 보병에 해당하는 인력이라 할 수 있다.

전투에서 보병의 역할. 비록 현대전이 기계화, 첨단화되고 있지만 해당 분야의 업무를 말끔하게 처리하는 것은 보병의 역할이다. 이와 마찬가지로 현재 시스템 구축 관련한 여러가지 새로운 아키텍쳐, 방법론, 툴 등이 도입되고 있고, 그 추구하는 바가 자동화이기 때문에 프로그래머의 역할은 점점 줄어들어 궁극적으로는 없어질 것처럼 보이지만 구축 시스템의 품질을 좌우하는 것은 최종적으로 프로그래머의 손에 달려 있다. 숙련된 프로그래머에 의하여 원하는 수준의 프로그램, 시스템이 완성되고 제 할 일을 수행할 수 있는 것이다. 그럼 숙련된 프로그래머가 되기 위해서는 어떠한 노력을 해야 하는지를 살펴보자.


숙련된 프로그래머가 되기 위해서…


숙련된 프로그래머란 주어진 환경 요건에서 최적의 결과를 기대할 수 있는 시스템/프로그램을 잘 작성하는 프로그래머를 일컫는다. 여기서 가장 어려운 부분이 “잘”이라는 것이다. 그럼, 어떻게 해야 잘하는 것인가?

이는 해당 프로그래머가 가진 소질, 역량과도 연관이 있으나 일반적으로 어떠한 교육을 받았고 기본적인 또는 보완적인 지식을 가지고 있는지 그리고 어떤 경험을 했는가에 따라 많은 차이가 있다. 프로그램에 천재성을 가지고 있는 사람에게 일반적인 교육과정에 대하여 소개하고 따르라고 하는 것은 타당치 않다. 이들은 가끔은 인정하고 싶지 않지만 주어진 문제를 보면 어떻게 프로그램으로 옮겨야 할 지가 손끝으로 쏟아져 나오는 사람들이다.(존 내쉬의 천재적인 암호 해독 능력은 프로그래머나 일반인의 입장에서 보면 맥 빠지는 일일지도 모른다. 그러나 이 후 여러 프로그래머의 노력으로 그와 유사한 또는 그보다 우수한 프로그램을 가지고 지금은 암호를 해독하고 있는 것을 보면 절대로 기 죽을 일 만은 아니다.)

그러나 대부분의 사람은 이러한 천재성보다는 다소간의 소질을 기반으로 교육, 훈련 및 경험을 바탕으로 훌륭한 프로그래머로 성장한다. (이 대목에서는 천재중의 대표격인 아인슈타인의 '천재는 1%의 영감과 99%의 노력으로 완성된다'는 말이 많은 위안을 주는 것은 어쩔 수 없나 보다.) 서론이 너무 길게 나가고 있군. 이제 본론으로 들어와서 일반인이 일반인에게 줄 수 있는 “좋은 프로그래머”가 되는 길은 다음과 같다.(이 길은 여러 수 많은 길 중의 하나이며 상황에 따라서는 틀릴 수도 있다.)

우선은 언어의 문법 및 특성에 대하여 충분한 이해를 해야 한다. 지금의 컴퓨터는 융통성이라고는 전혀 없으므로 틀린 문장을 넣으면 잔뜩 불평만 늘어놓은 채로 나 몰라라 할 것이다. 해당 언어의 특성을 잘 알고 있어야 간결하고 의미전달이 우수한 글을 쓸 수 있듯이 프로그래밍 또한 마찬가지다.

그 다음으로 필요한 것은 알고리즘과 자료구조다. 알고리즘은 앞선 많은 천제적인 수학자들이 문제를 해결하는 방안에 대하여 체계적으로, 수학적으로 정리를 한 것으로 이를 이해하고 활용할 수 있어야 원하는 프로그램을 쉽고 잘 작성할 수 있다. 그럼 자료구조는 언제 필요한가? 프로그램이란 컴퓨터가 주어진 자료(또는 데이터)를 처리하는 과정을 작성하고 관련 데이터를 조작, 처리하는 것이다. 자료구조는 이러한 데이터를 조작하는데 필요한 데이터의 구조체로 이 또한 많은 이들의 노력으로 지금 프로그래밍을 하는 이들은 이를 숙련하여 적용하는 노력을 하면 소정의 결과가 나올 것이다. 좀더 쉽게 접근하고자 한다면 알고리즘, 자료구조의 일반서보다는 이를 기반으로 해당 부분을 Java 언어로 구현한 예제를 담고 있는 책이 많이 발간되어 있으니 이 부분을 공부하는 데는 별 반 어려움이 없다. 이로써 기본적인 프로그램의 가나다는 끝낸 것으로 볼 수 있다.

그럼, 좋은 프로그래머가 되기 위해서는 프로그램만 잘 하면 되는가? 그건 아니다. 프로그래머는 구축대상의 시스템 설계를 컴퓨터 환경에 구현하는 사람으로, 건축의 관점에서 보면 설계도면의 내용을 실제적으로 자르고, 쌓고, 붙이고 해서 구체적으로 만드는 사람이다. 그러나 프로그램에서는 건축과는 달리 설계자와 시공자의 의사소통을 일관되고 균일하게 하는 방식이 잘 정리되어 있지 않다. 그러므로 프로그래머는(물론 설계자도) 공통의 표기법에 대한 숙련이 필요하다. 현재 가장 보편적으로 적용되고 있는 표기법은 UML(Unified Modeling Language)로 설계자가 작성한 UML을 제대로 이해하고 이를 구현하면서 발생하는 수정 사항에 대하여 해당 설계서를 UML을 사용하여 수정하여 설계자와 의사교환을 하는 기술이 필요하다. 프로그래머 입장에서는 다소 등한시 할 수 있을지도 모르나 다른 역할과의 의사교류는 매우 중요한 부분이기 때문에 프로그래머로서 성공하기를 원하는 사람은 반드시 갖추어야 하는 항목이다.

이렇게 하면 기본적으로 프로그래머가 갖추어야 할 양 날개, 언어적 항목과 의사교류적 항목은 갖춘 셈이다. 여기에 많은 시간과 경험을 추가한다면 여러분은 좋은 프로그래머가 될 것이라는 데는 별반 의심의 여지가 없다. 그러나 안타까운 부분은 주어진 시간이 그리 많지 않다는 것이다. 현실은 막 시작하는 사람에게는 많은 경험을 쌓을 수 있는 기회를 주는데 그리 호의적이지 않다. 그러므로 여기서 여러분은 또 한번의 점프가 필요하다. 이러한 점프를 도와주는 것으로 디자인패턴과 프레임웍이 있다. 디자인패턴은 반복적으로 발생하는 문제에 대하여 이를 해결하는 방안에 대한 해법을 제시하는 것으로 나름대로의 검증된 방법으로 사용할 수 있다. 그러므로 디자인패턴을 개념, 종류, 문제 발생 환경(또는 요인) 및 문제를 이해하고 이를 해결하는 방안에 대하여 익힌다면 여러분이 실전에서 이와 유사한 문제에 부딪혔을 때 관련 디자인 패턴 및 이의 응용으로 이를 헤쳐나갈 수 있다. 이런 측면에서는 디자인 패턴은 고급 프로그래머(및 설계자)로서는 반드시 숙지하고 있어야 하는 부분이다. 현재까지 작성된 디자인패턴은 그 종류만 하더라도 수백가지가 있을 정도로 넘쳐 나는 실정이다. 이런 상황에서 어떤 패턴이 실질적으로 도움이 되는지를 알고 다른 부분은 그때 그때의 상황에 맞게 찾아서 적용하는 것이 바람직하다. 디자인패턴을 시작하는 이는 “Design Patterns: Elements of Reusable Object-Oriented Software”를 시작으로 디자인패턴의 입문을 시작하여 Java/J2EE 환경에서 프로그램을 작성할 때 유용한 여러 디자인패턴을 모아놓은 “Core J2EE Patterns: Best Practice and Design Strategies”까지 전체적으로 훑어볼 필요가 있다.

그 다음에는…

숙련된 프로그래머가 되기 위해서 여러 가지 필요한 부분에 대하여 앞에서 간단하게 이야기를 하였다. 그러나 이러한 부분은 기술적인 부분에서 바라본 항목들로 이것만으로는 충분치가 않다. 주어진 언어를 사용하여 글쓰기를 할 때 단순한 기교 이상의 예술적인 부분이 필요하듯이 프로그래밍 또한 이와 유사하다. 프로그래밍은 단순한 기술적인 기교가 아니라 다분히 철학적인 요소가 많다. 그러므로 프로그래머로의 혜안을 가지기 위해서는 프로그램에 직접적인 부분(예: 언어, how to… 등)에만 집중하지말고 주변, 즉, 천재적인 프로그래머들의 사상, 해법 등을 기술한 여러 책들을 볼 기회를 기지기를 권한다. 이런 것들은 지금 당장은 큰 도움이 안될 수도 있지만 시간이 지나면서 알게 모르게 여러분의 프로그래머로의 역할에서 큰 비중을 차지할 것으로 본다.

프로그래머로 열심인 당신에게 조금이나마 도움이 되길…
황성훈

---------------------------------------------------------------------------------------
아래는 앞으로 님께서 헤쳐나가게 될 자바의 영역 그림입니다. 방대하지요? ^_^