나의 이야기/Note2009. 8. 1. 18:07
내가 인터넷에 적은 글이다.

현실을 생각해보자. 뭘 해야 하나?
Posted by 머리
나의 이야기/Diary2008. 8. 16. 16:24
2008.8.16(토) 맑음

  오랫만에 인터넷으로 여기 저기 프로그래밍 관련 자료를 찾아 다니면서 놀아 보았다.
한 세시간쯤.. 그렇게 봤는데, 주로 뭔가 개발하기 보다는 가장 밑바닥의 자료들을 찾아 다녀 보았다. 예를 들면 '초보자를 위한..' 이런 식의 자료들.

  그런 자료들을 읽어 보면서 느낀점. '아직 초보자 벗어나려면 멀었다.' 몰랐던 지식들이 너무나 많다. 잠시나마 초보자 티는 벗었다고 자만하고 있던 나에게 잠깐 질타와 반성의 시간을 가졌다. 부끄러워라.

  모르는 것을 부끄러워하거나 두려워 하진 않는다. 모르는 것을 알았으면 다시 공부하면 되니까. 하지만 내 주위의 수많은 프로그래머 및 프로그래머 지망생들을 보면서 '그들과 나를 비교하면 내 수준이 얼마나 될까?'하는 생각에 나 자신은 자꾸만 작아지게 되고 더욱 더 공부하고 싶어지며 조급하게 된다. 아니, 조급해져야 한다고 생각한다. 아직 할 것이 많다.

  공부는 오래 할 생각이지만 해야 할 것은 그 시간에 비해 너무나도 많게 느껴진다. 나 자신에게 부담을 지우긴 싫지만, 내가 좋아하는 것이고 내가 하고 싶은 것이라 이정도 부담은 나에게 지워 줘야 하지 않을까? 힘내고, 부지런히 공부하자.
Posted by 머리
나의 이야기/Note2008. 8. 9. 16:14
아.. 부모님께 소포를 보내달라고 했다.

거의 다써가는 샴푸랑 바디샴푸, 폼 클렌징이랑 같이 Thinking In Java도 같이 보내달라고 해 버렸다.
이래도 되려나... 왠지 쵸큼 눈치 보이는데? 뭐 아무렴 어때? 얼른 왔으면 좋겠다.

그것과 같이 또 사고 싶은 책이 늘어나고 있다. 군대까지 와서 이런.

1. The Art of Computer Programming
가장 사고 싶은 책이다. 그냥 TIJ 없이 이 책 한권사서 계속 읽어 보고 싶다. 수학적인 부분도 있어서 한번쯤은 읽어 두는게 좋을 듯 싶다.

2. 소프트웨어 산책
어쩌다 추천받아서 알게 되었는데, 재미있을 것 같네.

두개 다 구포도서관에서 본 책 같다. 휴가 가서 한번 읽어 보고 둘중에 하나 사서 들고 와야지. 아 얼른 휴가 가고 싶다!
Posted by 머리
Study - Programming/C#2007. 12. 13. 11:26

using System;
using System.Windows.Forms;
using System.Drawing;


class Program : Form
{
    Button btn = null;
    ListBox lstbox = null;
    Image image = null;
    public Program()
    {
        this.Text = "Graphics 개체 얻기";
        btn = new Button();
        btn.Text = "버튼 위에 GDI+ 출력";
        btn.SetBounds(10, 10, 200, 100);
        btn.Click += new EventHandler(btn_Click);
        this.Controls.Add(btn);

        lstbox = new ListBox();
        lstbox.SetBounds(210, 110, 410, 310);
        lstbox.Items.Add("사과");
        lstbox.Items.Add("포도");
        lstbox.Items.Add("수박");
        lstbox.DrawItem += new System.Windows.Forms.DrawItemEventHandler(lstbox_DrawItem);
        lstbox.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(lstbox_MeasureItem);

        this.Load += new EventHandler(On_Load);
        this.Controls.Add(lstbox);
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        Graphics grfx = e.Graphics;
        if (image != null)
            grfx.DrawImage(image, 0, 0);
    }

    static void Main(string[] args)
    {
        Application.Run(new Program());
    }

    public void btn_Click(object sender, EventArgs e)
    {
        Graphics grfx = btn.CreateGraphics();
        grfx.FillRectangle(new SolidBrush(Color.Blue), btn.ClientRectangle);
        grfx.Dispose();

        Image imageFile = Image.FromFile("C:\\Documents and Settings\\All Users\\Documents\\My Pictures\\그림 샘플\\겨울.jpg");
        grfx =  Graphics.FromImage(imageFile);

        Font font = new Font("돋음",20);
        Brush brush = Brushes.Pink;

        grfx.DrawString("이미지에 글자 쓰기", font, brush, 10, 10);
        grfx.Dispose();

        imageFile.Save("sample.gif");
        this.image = Image.FromFile("sample.gif");
        this.Invalidate(this.ClientRectangle);
  
    }

    private void On_Load(object sender, EventArgs e)
    {
        lstbox.DrawMode = DrawMode.OwnerDrawFixed;
    }

    private void lstbox_MeasureItem(object sender, MeasureItemEventArgs e)
    {
        Graphics g = e.Graphics;
        Console.WriteLine("{0} : MeasureItem 이벤트 실행", e.ToString());
    }

    private void lstbox_DrawItem(object sender, DrawItemEventArgs e)
    {
        Graphics g = e.Graphics;
        Brush brush = Brushes.Black;

        switch(e.Index)
        {
            case 0:
                brush = Brushes.Red;
                break;
            case 1:
                brush = Brushes.Violet;
                break;
                case 2:
                brush = Brushes.Green;
                break;
        }

        g.DrawString(lstbox.Items[e.Index].ToString(), e.Font, brush, e.Bounds, StringFormat.GenericDefault);

        Console.WriteLine("{0} : DrawItem 이벤트 실행", e.ToString());
    }
}

소스가 좀 많다. 이외에도 몇가지가 있는데, 한 소스에 담기가 좀 번거로워서 한번에 담을 수 있는것만 해 놓았다.

주석이 없어서 소스 분석이 좀 어렵겠다. 주석 습관 들여야 하는데..

사용한 방법은 다음과 같다.

1. Control Class의 CreateGraphics메서드 이용
2. ListBox 등의 컨트롤에서 제공하는 MeasureItem이나 DrawItem 이벤트 등을 이용한 방법
3. Graphics.FromImage() 메서드 이용
4. OnPaint()메서드 override 해서 사용


이외에도 Paint이벤트 상속받기, PrintPage이벤트 핸들러,Win33API 사용하기 등의 방법이 있다.

Posted by 머리
나의 이야기/Note2007. 11. 10. 01:01
  지금 내가 공부 하고 있는 언어들을 한번 세어 보면

1. C
2. C++
3. JAVA
4. C#
5. VB.NET
6. Delphi

  여기에 세부 분야까지 넣어 보면
1. API
2. MFC
3. TCP/IP

  뭐 이정도. 문제는 이런 것들을 그냥 배워 보고 싶다는 생각에 건드려만 본다는 것이다. C/C++이야 항상 만지고 있는 거니 예외라 치고, 델파이는 거의 안하니 제외 해도 너무 하려고 하는게 많다. 특히 C#이랑 JAVA는 의욕에 비해 하는게 너무 없는듯하다.

  지금 생각은 이렇다. 한 두가지 정도만 집중할것이냐 조금만 더 힘낼 것이냐. 솔직히 말해서 조금 버겁긴 하지만 그렇다고 못하겠는건 아니다. 그냥 진도가 너무 안나가는 것에 대한 불안감?

  그래도 대학 와서 내가 이쪽 분야 그동안 공부했던것과 비교해 본다면 결코 무리라는 생각은 안든다. 다만 걱정되는건 어린 시절 근 10년간 VB를 파 오면서 너무 공부하기에는 어렸었다는 것도 있었겠지만 여러가지를 많이 해보고 싶어서 이것 저것 해보다가 어중간하게 얕고 넓게(?) 익히게 되어서 그게 반복되지 않을까 신경쓰인다.

  1월 안에는 윈어플 큰거 하나 짜놓고 가긴 가야 하는데.. 제일 승산 있는게 무엇일까? 제일 승산있는건 MFC나 C#쪽인데.. 아무래도 최근에 새로 배우는 언어는 C#이 제일 무난하게 나가고 있어 조금만 더 하면 윈폼 시작할것이니. 아니면 지금 텀 프로젝트한다고 공부중인 MFC도 요즘들어 뭔가 감이 잡혀가기 시작해서 조금만 더 노력하면 속도가 붙을 것 같은데..

  이렇게 해봐야 겠다. JAVA로는 뭐 만드는건 잠시 미루되 꾸준히 공부는 하고 MFC는 텀에 충실하되 실력이 늘 수 있게, 그리고 C#으로는 뭘 만들도록 주로 공부해 봐야지. 이렇게 실천할수 있으면 얼마나 좋아.
Posted by 머리
Study - Programming/C/C++2007. 11. 6. 02:12

  Int Class에 이어 이번에 만들어 본 것은 String Class. C/C++에서의 문자열 처리를 보완하기 위하여 만들어 본 클래스이다. VB나 기타 다른 언어의 String형과 비슷하게 만들어 보았다.
구현한 것은 다음과 같다.

1. Constructors/Destructor
2. Adding Operator(+)
3. Equal Operator(==)
3. Assignment Operator(=)
4. Lenght Method
5. Standard IO Interface
  이렇게 나열하고 보니 몇가지 구현해보고 싶은게 많이 생기네.. Mid,Left,Right Method나 != Operator 같은것들.. 뭐 다음 기회로 미루자.

int Class 만들때보다 연산자 오버로딩을 좀 더 익숙하게 다룬 것 같다. 다음에 만들어 볼 것은 Matrix Class.

invalid-file

Class_String

Posted by 머리
나의 이야기/Note2007. 10. 7. 04:05

  요즘들어 자꾸 우물 안 개구리라는 느낌을 자주 받는다. 그도 그럴 것이, 요즘 코드 짜는 것들을 보면 별찍기라던지, 진법변환이라던지, 정렬 알고리즘이라던지, 뭐 이런것들이다. 그야말로 학교 과제용 코드들. 이런 쉬운 것들만 자꾸 하다 보니 내가 무슨 C의 본좌라도 되는 것처럼 자만하게 되는 것 같기도 하고, 그런 느낌이 들땐 흠칫 놀라면서 다시 마음을 가다듬곤 하긴 한다.
  지금 생각하면 참 실력 많이 늘었다고 느끼는건 사실이다. 어린 시절 아직 사고 능력이 부족 할 때에는 잘 이해가 안가던 것들이 지금은 하나 둘씩 이해가 되어가고 있고, 좀 더 경험도 쌓여 가고 있고.. 객체지향? 이런거 어릴때는 뭔지도 몰랐던 개념이였지만 지금은 오히려 객체지향 프로그래밍이 익숙할 떄도 있다.
  그렇게 뭔가 좀 아는게 늘어가다 보니 지적 허영심에도 많이 빠지더라. 뭔가 내가 천재라도 된 것 거처럼 걷기도 전에 뛰려고 하는 식으로 다른 걸 배우려고 하고.. 그러다가 포기할때도 있고.. 참.. 후회할 때가 많다. 그냥 하나만 팠으면 더 나았을 텐데..
  오늘 어쩌다 알알이라는 분의 블로그에 들어가서 글을 읽었었다. 여자 프로그래머이신듯 하던데.. 참 블로그가 대단하더라.. 정말 나'따위'라는 말이 생각나더군. 참 그러면서 내 자신에게 왠지 모르게 화가 나고 나도 저런거 할줄 알아야 하지 않겠냐라는 생각도 하고, 그러면서 리폿, 학과 공부, 학점 같은걸 생각하니 또 답답하고.. 하고싶은 건 많은데 해야 할것도 많다 이런 거겠지.. 전에도 한번 썼었지만 차라리 백지상태로 들어와서 공부해 나갔었음 좋다는 생각이 많이 드네.
  이 다음 내용을 생각하다 눈에 들어온 게 저 위쪽 문단에 '지적 허영심'이란 단어..참 나를 부끄럽게 만드는 단어다. 조금, 아주 조금 안다고 혼자 설쳐대는 꼴이 아닌가 나란놈은. 어차피 나중에 가면 다 똑같아 지는거. 부끄럽구나 부끄러워. 차라리 학점이라도 높았으면.
  더이상 썻다가는 비참해 질 것 같다. 그만 써야지.

Posted by 머리
나의 이야기/Note2007. 9. 10. 01:28

  부산대학교 정보컴퓨터공학부.. 내가 다니는 곳이지. 학교는 둘째 치고 과만큼은 내가 10년전부터 변하지 않고 쭉 원하던 과에 들어온 것이니 불만없다. 아니 오히려 행복하다. 만족스럽다. 이것을 위해 공부해왔고 또 프로그래밍도 공부하고 했던 거니까. 그래서 다른 동기들보다 기반지식도 많이 쌓여 있고 전공 수업도 별 무리 없이 들을 수 있는 것이고.

  그런데 요즘들어 이런 생각을 많이 하게 된다. '차라리 나도 보통 동기들처럼 백지 상태로 이 과에 들어 왔다면..' 그러니까 C 언어 이런거 전혀 모르고 들어 왔었다면 지금 이 과에서 어떻게 살고 있을까?

  오히려 그게 더 좋은 것이라는 생각이 든다. 코딩? 지금 내 입장에서는 그딴거 대학 와서 배워도 충분하다. 지금 내 상태같은건 부질없다는 이야기다. 지금알고있는 지식이래봐야 잘쳐줘도 API 기본정도. 이런거? 투자만 하면 대학생활동안 충분히 습득 가능하다. 내가 군대 갔다 와서 복학했을때, 지금은 쩔쩔 매고 있어도 복학할때 쯤에는 나 따위는 상대도 안된다고 생각할 수 있는 실력을 갖춘 여학우들 많이 나오겠지. 남학우들은 뭐 원래 잘하고 군대 갔다 온다는건 같은 조건이니까 뭐.

  이런 의미에서는 오히려 지금 동기들에게 부러운게, 나는 지금 학점보다는 오히려 프로그래밍 공부가 훨씬 흥미 있고 좋아한다. 대학 공부가 이것만 있는게 아닌데 거의 이쪽에 100% 투자하고 있고 그로 인해 지금 학점도 그리 좋다고는 못하니까. 차라리 아예 몰랐으면 그나마 학점이라도 잘 받아보자고 필사적으로 노력할텐데, 그러기에는 지금은 너무 늦다는 생각이 든다. 너무 이쪽에 빠져 있다.

  차라리, 프로그래밍 실력 나중에 다 똑같아질거, 좀 떨어져도 학점 잘 받아서 좋은 대학원 가고 좋은 취직자리 얻는게 오히려 나중을 생각해서는 좋을거라는 생각이 더 드는데, 어차피 막장 IT업계, 프로그래밍실력보고 사람뽑나, 다 나중에 점수 보고 뽑을텐데.. 이런 생각을 하면서 참 내가 무슨 생각을 하는건가 하는 생각도 들고 왠지 슬퍼진다는 느낌도 들고 이상하게 화가 난다는 생각도 들고 한번도 해보지 않은 컴퓨터 공부에 대한 회의나 후회감도 생기고 이런다..

  지금 이순간, 어떤 방향으로 나아가야 할까? 바꾸어도 늦지 않았을까?

Posted by 머리
나의 이야기/Note2007. 8. 29. 01:06

테크트리?

  스타 테크트리 가지고 흉내내는 속어다. 뭐 간단하게 말하면 자기가 프로그래밍 공부를 어떻게 해왔냐는 말이다. 주로 언어 관련 순서를 나타내고, 가끔씩 자료구조, 알고리즘,이산수학 이런것도 넣기도 하더라. 음.. 나는 언어를 이런식으로 익혀 왔다. VB -> C -> C++ -> C#,JAVA 물론 사이사이에 API,MFC 이런것들도 중간 중간에 끼어 있다. 뭐 어느것 하나 제대로 알고 있는건 아니지만 나름 뭔가 하고 있다고는 생각하고 있다.


  초등학교 3학년 때, 컴퓨터 입문 책 부록에(그 당시에는 부록 CD를 주면서 온갖 유틸리티를 담아 주곤 했었다.) QBASIC이 들어 있었다. 그리고 부록 CD 설명에 '프로그래밍 도구인 QBASIC이다.' 이렇게 적혀 있었는데, 이것이 프로그래밍이라는 단어를 알게 된 계기였다. 즉, 무슨 프로그램 돌아가는게 신기해서 '아~ 나도 이런거 한번 만들어 보고 싶다' 이런 생각은 하지도 않았다는 것이다. 그래서 그떄 컴퓨터 가르쳐 주시는 선생님한테 물어보니 아직은 어려워서 못한다고 하시더라. 근데 이상하게 그때 그게 그렇게 하고 싶었나보다. 나름 파워포인트의 링크 기능갖고 내컴퓨터 불러오고 탐색기 불러오고 한글 불러오고 하는 기능으로 (지금 생각하면 참..) 꺠작대고 하는걸 보고 나에게 던져 주셨던게 Visual Basic 5. 그래서 그때 멋도 모르고 동네 서점가서 VB책 두꺼운거 하나 사와서 혼자 이것 저것 해보고 했었다. 그 책이 현재 내 보물 1호, Visual Basic Programming Bible Ver 5. 수도 없이 읽어서 지금은 완전 너덜너덜해 졌지만 그래도 반도 아직 모르는 책이다. 그 이후에 중학교전후에 C를 배운 적이 있었는데, 그 때는 정말 아무것도 모르고 배웠을 것이다. 단지 VB랑 비슷했던 기본 문법 사항들만 가지고 놀았고, 함수,포인터 이런거는 사용할줄도 몰랐을 것이다. 더군다나 그 VB의 RAD툴에 익숙했던 꼬마가 콘솔가지고 놀아 봐라. 얼마나 몰라도 몰랐겠는가.

  그 후 중학교때까지는 거의 VB만 가지고 놀았다. 그게 지금 생각하면 나에게 독과 약 둘다 되었던 것 같다. 득이 되었다면 윈도우 프로그래밍을 좀더 쉽게 접글할 수 있게 되었다는 것이고, 독이 되었다면 쉬운것만 찾아서 그리 실력이 크게 늘지 못했다는 것. 아마 당시에 C로 시작했으면 반대의 상황이 되었을지도 모르지만 그렇다고 VB먼저 시작한게 후회되지는 않는다. 오히려 더 마음에 든다.

  고등학교때는 컴퓨터를 거의 접었었고, 대학교 붙고 나서 미치도록 C 공부를 했었는데, 그떄 실력이 제일 많이(들인 시간에 비해서) 늘은 것 같다. 이미 기본적인 문법은 거의 알고 있었고, 경험도 거의 10년 가까이 얕게 했든 깊게 했든 나름 이것 저것 만들어 보느라 쌓여 있던 덕인지 머리쓰는 부분에서 막히는 일은 별로 없어 포인터 같은 난해한 개념 이해하는데 시간을 많이 들일 수 있었다. 이때쯤에야 겨우 프로그래밍에 대한 윤곽이 잡히기 시작했다. 솔직히 그 이전까지만 해도 나는 함수같은것은 뭔지도 몰랐다. 이미 VB에서 프로시저가지고 줄기차게 써먹어 놓고도 뭔지 몰랐다는 것. 그런 것들이 뭔가라는 것이 머리가 어느정도 크고 나니 잡혀 왔나 보다. 그 이후에 C++배울때는, 정말 단기간(거의 2달도 안대서) 대충 사용할수 있게 되었다. 뭐 나름 시간투자를 한 이유도 있었겠지만 C++하면서부터는 VB의 객체사용 경험이 있어서 그런지 이해가 빨리 된 듯 했다. 지금은 C#이랑 JAVA 간간히 어깨넘어 익혀 보면서 자료구조랑 알고리즘 파고 있다. 그런 쪽의 경험은 나한테도 절대적으로 부족하니까.

  지금 생각하면 지금 동기들이 밟고 있는 테크트리랑은 많이 다르다. 시작한 언어 자체도 다르니까.. 하지만 이렇게 생각한다. '무슨 언어를 배우든 나중에는 다 비슷비슷하게 보일것이고, 문법을 떼는게 문제가 아니라 머리쓰는법을 익히는게 문제다.' 개인적으로 문제해결기법시간에 김경석 교수님이 가르쳐 주시는 취지는 잘 알겠는데, 그게 성공적이지 못한게 참 아쉽다. 어떻게 돌아가는지만 생각할수 있으면 문법이야 금방 하니까 문제가 아닌데..뭐 근데 당연한 결과일 것이다. 머리쓰는건 눈에 안보이는 결과물이고, 문법은 당장 눈에 보이는 결과물이니까.

  흠... 대충 두서없는 말은 이쯤하고, 개인적으로 다시 공부하라 하면 이런식으로 공부해보고 싶다. C->자료구조,알고리즘 -> C++ -> VB -> API -> MFC -> 쭈욱.

Posted by 머리