기타/컴퓨터공학

프로그래밍의 개념

바로이순간 2012. 8. 25. 14:02

저기 프로그래머들이 프로그래밍을하잖아요.  저는 프로그램을 이용하는사람이지 만드는사람이아니라서;

 프로그램의 개념을 모르겠어요.


프로그래머들은 프로그래밍을 어떻게하는거예요?

그리고 프로그래밍에 필요한 지식이나 요소들은 뭐가있나요?


여러가지 프로그램을 만들때마다 사용하는 요소들이 다른가요? (예를너어주세요)

=======================================================


아주 간단한 프로그램 부터 예를 들어 보겠습니다.


[1] 덧셈을 하는 프로그램: 두 수의 덧셈, 여러 수의 덧셈, 규칙을 가진 수들의 덧셈

예를 들어서 3x+1 이라는 규칙이 있습니다.

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

지금 현재 수가 짝수라면 2로 나누어 주고, 홀수라면 3배를 한 다음 1을 더해서 다음 수를

구해내는 것입니다. 그리고 1이 되면 멈추는 것입니다.


그런데 31로 시작하면 꽤 긴 수열이 나와서 종이와 연필로 푸는 사람들을 당황하게 만듭니다.

이거 정말 끝이 나는 것이야 아니야? 하는 의문이 쏟아 집니다.


하지만 프로그램으로 해결하면 금방 끝납니다. 물론 프로그램을 짠다는 것이 쉽다는 것이

아니라, 결과를 토해 놓는데 걸리는 시간이 금방이라는 것입니다.


익숙한 사람에게는 이 수열을 구하는 시간보다 짧은 시간에 프로그램을 완성해서

그 결과를 구해볼수 있습니다.


잠간 그 수열을 보도록 하겠습니다.


   31   94   47  142   71  214  107  322  161  484  242  121  364  182   91  274

  137  412  206  103  310  155  466  233  700  350  175  526  263  790  395 1186

  593 1780  890  445 1336  668  334  167  502  251  754  377 1132  566  283  850

  425 1276  638  319  958  479 1438  719 2158 1079 3238 1619 4858 2429 7288 3644

 1822  911 2734 1367 4102 2051 6154 3077 9232 4616 2308 1154  577 1732  866  433

 1300  650  325  976  488  244  122   61  184   92   46   23   70   35  106   53

  160   80   40   20   10    5   16    8    4    2    1


이 수열을 출력하는 프로그램은 다음과 같습니다.


#include <stdio.h>

int main() {

    int x=31;

    while(x!=1) {

        printf("%5d", x);

        if(x%2==0) x/=2;

        else x=3*x+1;

    }

    printf("%5d", x);

    return 0;

}

=======================================================

그것 참 재미 있네요, 하지만 그래도 프로그램이 무엇을 할수 있는지 알기가

어렵네요. 이렇게 생각하리라고 봅니다.


프로그램으로는 우리가 보는 윈도우의 그림들을 그릴수가 있습니다.

윈도우에 비치는 모든 그림들이 어떤 프로그램이 그림을 그려주기 때문에 우리가

윈도우 창에 떠있는 많은 창들과, 이미지와, 동영상들을 볼수 있는 것입니다.


어떻게 그림을 그리느냐고 질문한다면, 많은 기초적인 지식이 필요하지만, 

기본적으로는 점을 찍을 수 있다는 것입니다. 화면상에 있는 모든 창들과

이미지와 동영상들도 원래는 점 하나, 하나가 모여서 된 것 들입니다.


많은 점들을 어떤 규칙을 가지고 빠르게 그리다 보면 우리가 보는 창이나, 이미지,

동영상이 되는 것입니다,

=======================================================

프로그램이 하는 일은 인터넷이 동작하게 해주는 일도 합니다.

(스마트폰에서 통화, 인터넷 검색, 사진찰영, mp3플레이어, 같은 모든 기능들이

사실을 프로그램에 의해서 수행이 되는 것입니다.)

######################################################


프로그래머는 어떤 일을 해결하기 위한 해법, 방법, 알고리즘, 순서를 찾아냅니다.

물론 이를 다른 사람이 알려주는 경우도 있습니다. 하지만 결국은 이러한 방법들을

짜맞추어서 매끄럽게 돌아가게 만드는 사람은 프로그래머 인 것입니다.


큰 방법도 작은 것들로 쪼개 집니다.

사칙연산(덧셈, 뺄셈, 곱셈, 나눗셈), 비교, 자료의 이동 등 등 이 모여서

여러가지 기능과 따지는 것, 똑똑한 처리가 이루어 지는 것입니다.


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

프로그램의 대상과 종류에 따라서 기초가 되는 지식이나 방법이 달라질 수가 있습니다.

mp3플레이어를 만드는 경우에는 압축된 음악이 어떻게 복원되어서 wav 파일로 바뀌는지를

알아야 할 것입니다.


채팅 프로그램을 짜는 경우에는 네트워크나, 인터넷의 동작에 대해서 잘 알아야 할 것이고,

사람들의 행동양식과 반응에 대한 지식이 필요할 것입니다.


프로그램을 만드는 것은 그대상이 무엇인지에 따라서 무한히 다른 가능성과 다양성을 가지고

있다고 볼수 있습니다.