본문으로 바로가기
homeimage
  1. Home
  2. 컴퓨터/컴퓨터 이야기
  3. 컴퓨터 프로그래밍 언어 학습 방법?!

컴퓨터 프로그래밍 언어 학습 방법?!

· 댓글개 · 바다야크

컴퓨터 프로그래밍 언어 학습 방법?!

제가 처음 컴퓨터에 입문하면서 배운 프로그래밍 언어가 Apple II+ Basic이었습니다. 그 당시의 Basic은 지금의 언어와 비교할 수 없을 정도로 그 기능이 빈약했지만, 진정 저에게 컴퓨터 프로그래밍의 재미가 무엇인지를 알려준 고마운 언어였습니다. 물론 누가 시켜서가 아닌 제가 좋아서 학습했기 때문에 즐겁고 행복한 시간이었습니다.

이후로 Apple 6502 어셈블러를 배우면서, 그렇게 궁금했던 숫자들의 향연을 이해하게 되었고, 취업해서는 C 언어를 주로 사용했습니다. DOS 시절 Turbo-C의 인기는 당연 최고였습니다만, 제가 주로 사용한 C 컴파일러는 Microsoft C 6.0이었습니다. 그야말로 든든했습니다. 제가 실수하지 않는 한 절대 에러가 발생하지 않았습니다.

MS C 6.0을 애지중지하다 보니 오랫동안 C 언어를 사용했습니다. 그러나 Microsoft에서 Microsoft Windows를 내놓은 후에는 하는 수 없이 다른 언어를 사용할 수밖에 없었는데, 회사에서 구매해준 CA-DB Fast. 지금 생각해도 몸서리가 처지는 엉터리망터리 컴파일러였죠. 이후에 Microsoft Visual C/C++을 알아보았지만 학습 기간이 너무 길고, 생산성이 매우 떨어진다는 생각에 다시 Microsoft Visual Basic을 선택했다가 불안하고 느린 성능에다가, 특히 오라클 DB와 연동해야 하는데 쉽지 않고 불안해서, 다시 바꾼 것이 델파이였고 지금껏 주력 개발 툴로 사용하고 있습니다. 정말 델파이는 저를 어둠에서 구해준 은인으로 생각될 만큼 감사하고 훌륭한 개발 툴이었습니다. 이렇게 편리하고 생산성 높은 개발 툴이 또 있을까 하는 생각이 듭니다.

김영삼 정부의 경제 파탄 시절에 직장을 잃고 힘들었을 때, 웹 프로그래밍에 관심이 있어서 PHP를 학습했었고, 새로 얻은 직장에서는 Visual Fox Pro를 사용하고 있어서 또 몇 년을 여우와 함께 지냈습니다. 지금 생각해 보면 정말 대단한 프로그램이라고 생각합니다. 아쉽게도 제가 그렇게 싫어하는 인터프리터 언어였고, 예쁘게 디자인할 수 있는 컴포넌트가 적어서, 아무리 노력해도 투박한 모습이어서 항상 속상했지만, 약국과 같은 소규모 데이터베이스 프로그램에는 그야말로 똑 소리 나는 로컬 데이터베이스 프로그램 언어였습니다.

Fox Pro 후에는 역시 델파이를 주로 사용해 왔습니다만, 몇 년 전부터 임베디드 리눅스 보드를 사용하게 됨에 따라 다시 gcc를 해야 했습니다. gcc도 C 언어이지만, 그래서 문법이 비슷하다고 하더라도 생소한 유닉스 환경에서 프로그램을 작성해야 하기 때문에, 또다시 유닉스 프로그래밍에 대해 학습을 해야 했습니다.

그리고 최근에는 자바가 필요해서 틈이 날 때마다 학습하고 있습니다.

Apple II+ Basic과 6502 어셈블러, C 언어, PHP 학습은 제가 좋아서 배웠다고 한다면,  CA-DB Fast나 Visual Basic, 델파이, Visual Fox Pro, gcc, 자바 등은 직장에서 업무로 프로젝트를 진행하기 위해, 그것도 주어진 개발 기간 안에 학습해서 프로그램을 작성해야 했습니다.

저 만의 학습 방법

이런 사정으로 빨리 학습을 해야 했는데, 나름대로 저 만의 학습 방법을 가지고 있어서 그나마 견뎌내지 않았나 생각합니다. 그 방법을 정리하여 올리려 합니다만, 이것은 지극히 저 개인적인 방법이라 옳은 방법이라 할 수 없습니다. 그러나 프로그래밍 언어 학습 방법 중에 이런 방법도 있구나 하고 참고해 주시면 감사하겠습니다.

책을 사러 놀러 갑니다.

자, 갑자기 임베디드용 리눅스 프로그램을 작성하게 되었습니다. 저는 한 번도 리눅스에서 프로그램을 작성한 적이 없습니다. C는 조금 압니다. 그렇다면 리눅스에서 실행되는 프로그램을 작성해야 되는데 어떻게 해야 할까요? 저는 아직까지 책에 의존합니다.

인터넷 서점을 통해 책을 구매할 수 있겠지만 무슨 책을 사야 할지 모르면서 책에 대한 서평만으로는 모자를 때가 많습니다. 선배가 좋은 책을 권해 준다면 다행이지만 이런 도움을 받지 못한다면, 날을 잡아서 대형 서점으로 갑니다. 그리고 최소한 4시간 이상은 논다 생각하고 들어 갑니다.

유닉스 프로그래밍에 대한 책이 여러 권 있습니다. 그러면 목차를 먼저 봅니다. 도대체 뭔 소리인지 모르는 내용이 빼곡합니다. 그러나 그중에 몇 가지 내용을 선택한 후, 그 부분을 읽어 봅니다. 처음부터 읽어 나갈 수 있지만 시간이 많이 걸리고 대부분 경우 앞부분의 내용은 쉽습니다. 또 경험이 쌓이다 보면 앞부분보다는 중간이나 후반 부분에 궁금한 경우가 많습니다. 잡지나 인터넷에서 익숙하게 보았던 단어가 눈에 띄는 경우도 있는데 이 기회에 알아보죠. 먼저 그 부분을 읽어 봅니다.

그 부분을 읽었다면 다시 다른 책을 선택하여 같은 주제 부분을 읽어 봅니다. 그리고 또 다른 책을 선택해서 역시 같은 부분을 읽어 봅니다. 그렇게 몇 권의 책을 읽다 보면 이해하기 쉽고 나에게 맞는 그런 책이 몇 권 눈에 띄게 됩니다.

물론 이 책, 저 책을 읽어야 하므로 목이 아픕니다. 그러므로 책을 어깨 높이까지 쌓여진 곳에 올려놓고, 얼굴을 들어 가급적 편한 자세로 차분히 읽습니다. 절대 책을 손에 들고 아래로 내려다보면서 읽지 마세요. 금방 목이 아파 옵니다. 그래도 다리가 아프고 허리가 아프면 커피숍이나 다른 쉬는 곳에서 경직된 목과 다리를 풀어 줍니다. 뭐, 책을 사러 왔지만 놀러 왔으니까요. 한 권의 책만 제대로 구한다면 오늘의 미션은 성공입니다.

여유 있게 쉬다가 다시 가서 몇 권으로 줄어든 책 중에 다른 부분을 읽습니다. 읽는 중에도 왠지 인쇄 상태가 나에게 맞는 것이 있습니다. 예제나 설명도 중요하지만 읽기도 편하고 왠지 친근하고 읽기 편한 그런 책이 있습니다. 점수를 후하게 줍니다.

이렇게 해서 최소 한 권이나 두 권의 책을 구매합니다.

처음부터 끝까지 3번 읽습니다.

대부분 학습하시는 것을 보면 컴퓨터 앞에서 책을 읽습니다. 그리고 예제가 나오면 책을 무릎 위에 접어 놓고 열심히 두들깁니다. 그러다 막히면 다시 책을 보고, 또 무릎 위에 놓고 키보드 치고 모니터 보고, 다시 책, 키보드, 모니터.

그렇게 이해하면 다시 다음 내용을 읽습니다. 그러나가 눈에 띄는 예제를 보면 역시 무릎에 책을 놓고 바로 컴퓨터로 예제를 따라 하는데, 저는 이 방법이 가장 최악이라고 말씀드리고 싶습니다.

물론 이 방법을 선호하시는 분도 계시겠습니다만 시간이 너무 걸립니다. 그리고 며칠 안 하다가 다시 보면 뭘 했었는지 기억도 안 납니다.

자, 제가하는 방법을 말씀드리면 컴퓨터를 끕니다. 그리고 처음부터 끝까지 읽습니다. 가급적 이해하려고 노력하면서 정독합니다. 그러다 도대체 뭔 소리인지 모르겠다 싶은 것은 다시 앞으로 돌아가서 다시 읽기를 시작하지만 절대 여기서 시간을 많이 소비하면 안 됩니다. 몇 번을 읽었는데도 모르겠다 하면, 그 부분을 표시하고 다음 부분을 읽습니다.

다시 말씀드립니다만, 모르는 부분에서 너무 힘을 빼면 안 됩니다. 아~, 책을 한 번 읽어서 모두 알아 버리면 저 같은 사람은 무엇으로 밥 벌어먹고살겠습니까? 모르는 것이 당연합니다. 그래도 가급적 이해하려 노력하면서 정독합니다. 또 매우 주의하실 것은 하루는 건너 띄셔도 이틀을 건너 띄시면 안 됩니다. 이틀 이상 건너 띄시면 지금까지의 고생은 헛고생입니다.

힘든 일입니다. 정말 인내와 끈기가 필요합니다. 며칠이 걸릴 수 있습니다. 그러나 마지막 장을 읽었을 때, 최소한 유닉스 프로그래밍에 대한 책을 한 권을 정독하지 않습니까. 축하 드립니다. 정말 고생 많으셨습니다. 오늘은 더 읽지 마십시오. 뭐 다 읽었는데 읽을 것도 없지요. 시원하게 맥주 한 잔. 자축하십시오. 저도 끝까지 읽은 책이 몇 안되기 때문에 정말 뿌듯합니다.

다음 날입니다. 그러면 이제 컴퓨터를 켤까요? 절대 아니죠. 다시 처음부터 읽으십시오. 이 지겨운 짓을 또 하라고요? 네. 다시 정독으로 읽어 가십시오. 역시 힘이 듭니다.

그러나 처음과 달리 익숙한 부분도 있고, 이전에 이해했던 내용이 굵게 볼일 때도 있습니다. 이제 중요한 부분을 만나면 꼭 표시를 해 둡니다. 줄을 그어도 좋고요, 책꽂이를 꽂아도 좋겠습니다. 그런데 또 이해가 안 되는 부분에서 걸리네요. 역시 여러 번 반복해서 읽어서 이해하려 노력합니다만 절대 시간을 많이 뺏겨서는 안 됩니다. 역시 넘어갑니다. 어차피 저의 밥일 뿐입니다.

두 번까지 읽었습니다. 정말 고생 많으셨어요. 그러나 이 글의 작은 제목처럼 다시 읽으십시오. 힘들기는 마찬가지이지만 속도는 이전보다 더 빠릅니다. 역시 이해 못 하는 부분도 있고요.

그러나 이제는 정확히는 모르지만 전체적으로 유닉스 프로그래밍에는 어떤 방법이 있다는 것을 알게 되었습니다. 기본 C 언어의 문법과 함께 함수도 어떤 함수가 있는지 알게 되었고요, 파일 처리, 쓰레드,  세마포어, 공유 메모리 등등 전반적인 내용에 대해 알게 되었습니다.

자세히도 모르고 프로그램을 짜 본 적도 없습니다. 그러나 누구와 유닉스 프로그래밍에 대해 얘기를 나누게 된다면 이해를 하거나 오히려 설명할 수 있습니다. 즉, 선무당이 된 거죠.

예제를 설정하고 프로그램을 완성합니다.

이제 알고 있는 지식으로 프로그램을 작성해 봅니다. 도대체 뭘 만들어야 할지 모르겠다면 책에서 눈여겨보았던, 아니면 기억나는 예제를 떠 올리고, 책을 덮어 놓고 작성합니다.
저 같은 경우는 몇 줄 적었지만 도대체 다음이 진척이 안 됩니다. 그럴 때 책을 읽어 다음 진행에 대한 힌트를 얻습니다. 가장 좋은 방법은 예제 부분이 아닌 설명 부분을 읽어 보고 막혔던 부분을 해결하는 것입니다. 설명 부분으로 안 된다면 예제 부분을 전체적으로 다시 봅니다. 그리고 인쇄되어 있는 예제를, 자신이 컴퓨터다라고 생각하면서 머릿속으로 한 행, 한 행을 실행해 봅니다.

자, 힌트를 구했으면 다시 책을 덮어서 멀리 놔두고 다시 도전합니다. 또 막혔다고 촐랑거리면서 또 책을 피면 안 됩니다. 해 보려고 노력해 보십시오. 기억에 떠 올리려 노력해 보세요.

그래도 너무 시간을 뺏기면 안 되겠죠. 다시 책을 보더라도 이해가 안 되는 부분만 촐랑거리며 보지 마시고 전체적으로 다시 확인해 봅니다.

이제 코드가 완성이 되었다면 컴파일해 봅니다. 에러가 납니다. 윽~ 그러면 또 책을? 절대 안 됩니다. 초보자가 범하는 두 번째 실수가 바로 에러가 났을 때의 대처 방법입니다. 컴파일러는 무책임하게 컴파일 작업을 중지하지 않습니다. 뭔가 메시지를 남깁니다.

그 메시지 내용을 꼭, 반드시 확인하십시오. 물론 무슨 말인지 모르는 경우가 있지만 찬찬히 읽어 보면 “아!!” 소리가 나는 경우가 있습니다. 수정하시고 다시 컴파일을 합니다. 또 에러가 나도 아까와는 다는 문제라면, 조금 전의 에러는 잡으신 것입니다. 이렇게 반복하여 에러를 직접 하나하나 잡아갑니다.

정말 모를 경우에는 책이나, 아니면 친절한 포럼의 도움을 받습니다. 아니면 선배를 괴롭혀야 겠지만 역시 에러가 발생한 행을 보고 어디가 잘못되었는지 직접 문제점을 잡으려고 노력하십시오. 정말 이 과정에서 실력이 배가됩니다. 정말입니다. ^^

그래픽이나 만질 수 있는 것을 작성합니다.

어느 정도 예제 프로그램을 작성하셨다면 더 많은 경험을 하셔야 하는데, 가급적이면 그래픽을 하십시오. 문자만 출력하는 단순한 예제만 하시면 쉽게 무료해집니다. 그래픽으로 변화무쌍한 모습을 보면서, 다른 사람에게 자랑도 하면서 말이죠.

프로그래밍의 즐거움 중 하나는 남들에게 자랑하는 재미입니다. 어느 정도 남들에게 보여줄 만하다면 자랑하십시오. 뻐기십시오. 그리고 더욱 다듬어서 더욱 멋지게 만드십시오. 부러워하는 친구의 얼굴에서 보람을 찾을 수 있습니다.

가능하다면 만질 수 있으면 더욱 좋습니다만 금전적으로나 하드웨어도 공부해야 하기 때문에 어려운 점이 있습니다. 그러나 재미와 흥미가 오래가기 때문에 매우 좋습니다. 비록 제거하는 화면은 버튼만 다닥다닥 붙여 놓았지만 각 버튼을 누를 때마다 그 신호를 받아 LED가 켜지고 바퀴가 움직이면 프로그램을 완성한 즐거움이 배가됩니다. 그러나 역시 돈이…^^

더 큰 프로그램을 실력 다지기

이제 욕심을 내서 좀 더 규모가 있는 프로그램을 작성해 봅니다.

.TCP/IP 소켓 프로그래밍으로 파일을 다른 PC로 전송하거나
.시리얼 통신으로 받은 것을 TCP/IP로 다른 PC로 전송합니다.
.TCP/IP나 시리얼 통신으로 이미지 파일을 전송하면, 받는 쪽은 수신받은 이미지를 화면에 출력합니다.
.시리얼 통신을 중간에서 데이터를 가로채서 주고받는 프로그램을 작성해 봅니다.

이렇게 주제가 있는 예제를 만들다 보면, 그 부분 부분이 모두 실무 프로젝트에 적용되는 부분부분이 됩니다.

그러나 역시 혼자 공부하다 보면 한계가 있습니다. 운전을 배웠더라도 운동장에서 아무리 열심히 연습해서 스피드 레이서가 되었더라도 밖에 나가면 상황이 전혀 틀리죠. 스타크래프트를 혼자서 컴퓨터 4 마리와 맞짱 떠서 맨날 이겨도 배틀넷에서 깨지는 이유를 잘 아실 것입니다.

가장 좋은 것은 취직을 해서 프로젝트를 맡아서 고생 고생하면서 만드는 것이 최고입니다.

아무래도 발등에 불이 떨어지면 심적으로도 부담이 되고, 파고들지 않을 수 없어 실력이 늘지 않을 수 없습니다. 취업 전이면 이마저도 쉽지 않죠.

그렇다면 프리웨어를 만들어서 배포해 보시는 것은 어떨까요?

요즘 블로그나 카페 만드는 것은 너무 쉽습니다. 프리웨어에 도전하시고 반드시 배포하십시오. 우선 사용하시는 프로그램 중에 만만한 것을 골라서 그동안 아쉬웠던 부분을 추가하여 만들어 봅니다. 그리고 완성도를 높이기 위해 학습하시고 방법을 찾아서 계속 업그레이드하여 올려 보세요.

그러나 프리웨어로 올릴 수 없는 임베디드 보드 같은 경우는 어떻게 해야 할까요?

포럼에 강좌를 올리는 것도 좋은 방법이라고 생각합니다.

어떤 프로젝트를 만들어 가는 과정을 올리는 거죠. 이런 강좌를 올린 경우가 별로 없습니다. 초보자 입장에서 학습하는 과정을 담아서 점차 발전해 가는 강좌. 아마 많은 분들로부터 호응을 받을 수 있고 인기 짱이 되실 수 있고, 아울러 많은 분들로부터 도움을 주고받을 수 있을 것입니다.

여러 방법이 있지만 어느 경우에도 혼자서는 힘이 듭니다. 귀동량과 눈 동량을 열심히 해야겠습니다. 이런 이유로 활발히 운영되는 포럼은 매우 큰 힘이 됩니다. 임베디드 리눅스 쪽이시면 제가 운영하고 있는 FALINUX 포럼을 권합니다만, 이외에도 매우 많은 포럼이 활발히 운영되고 있습니다. 마음에 드는 곳은 회원으로 가입하셔서 활발히 활동해 보십시오.

포럼에 답변이나 강좌 글을 올리십시오.

강좌와 같이 남에게 보여줄 글을 만들다 보면 알고 있는 지식은 다지게 되고, 모르거나 건성으로 알았던 내용도 정확히 알게 되는 기회가 됩니다. 해 보시면 아시겠습니다만 머릿속에만 있던 내용을 글로 적다 보면 많은 내용을 정리하게 되고, 학습하게 되고, 따지게 됩니다. 물론 개인 시간이 소모가 되겠습니다만 효과는 기대 이상입니다.

강좌가 부담이 되신다면 답변을 공략하세요. 포럼에 올려진 질문 중에 답을 아는 내용이면 답변을 다시는데, 그냥 말대답하듯 하지 마시고, 아시는 내용을 직접 프로그램으로 작성해서 확인합니다. 그리고 그 내용을 자세히 작성하여 올립니다.

만일 모르는 내용이라면 웹으로 검색해 봅니다. 그분 입장에서 방법을 찾아봅니다. 그리고 역시 직접 프로그램을 짜서 확인하고 올립니다. 강좌와 마찬가지로 답변 올리는 것도 지식과 경험 쌓기 외에도 자신감이 생깁니다.

저의 말씀은 여기까지 입니다. 어떻게 도움이 되는 글인지 모르겠습니다만 참고하셔서 자신만의 학습 방법을 만드시면 좋겠죠. ^^

'컴퓨터 > 컴퓨터 이야기' 카테고리의 다른 글

14일과 3년  (9) 2008.07.04
User Interface  (19) 2008.04.08
컴퓨터! 너 나가!!  (43) 2008.03.29
SNS 공유하기
최근 글
바다야크
추천하는 글
바다야크
💬 댓글 개
최근글
이모티콘창 닫기
울음
안녕
감사해요
당황
피폐

이모티콘을 클릭하면 댓글창에 입력됩니다.