본문 바로가기
공부

코딩은 Hello, World! 가 전부라고 생각한다.

by algosketch 2021. 2. 6.

 자기 자신을 포함하여 프로그래밍을 하는 모든 사람에게 자신감을 주기 위해 쓰는 글이다. 프로그래밍을 한 번이라도 해봤다면 모두가 Hello, World!라는 문장을 봤을 것이다. 아니면 뭐 Hello, Kotlin! 이나 Welcome, Express! 라던가... 다 비슷하다.

#include <stdio.h>

int main(void) {
    printf("Hello, World!");
}

 위 코드는 C언어에서 Hello, World!를 출력하는 코드이다. 가장 처음으로 접하게 되는 코드이다. 코딩을 처음하는 사람도 printf()의 의미는 쉽게 이해할 수 있겠지만, 그것을 둘러싸고 있는 함수와 헤더 선언에 대해서 이해하지는 못 할 것이다. 여기서 중요한 건 함수 등을 모르고 있다는 것이 아니라 Hello, World!를 출력할 수 있다는 것이다.
 가끔 Hello, World!를 출력하는 코드가 어려운 경우가 있다. java같은 경우엔 클래스 내부에 있고 출력 함수 호출은 클래스의 메서드를 호출해야 한다. 이 또한 중요하지 않다. 중요한 것은 문자열을 출력할 수 있다는 것이다. 1줄을 출력할 수 있으니 2줄, 3줄, ... 을 출력하는 것도 어렵지 않게 할 수 있다. 출력을 담당하는 코드 하나만큼은 정확하게 이해하고 있다. 아마 문자열 중간에 숫자를 넣는 방법도 어렵지 않게 배울 수 있을 것이다. 이런 식으로 할 수 있는 것을 조금씩 넓혀 나갈 수 있다.
 express처럼 프로젝트를 생성하면 많은 코드가 자동으로 생겨나지만 정작 출력되는 것은 Welcome, Express! 한 줄이어도 마찬가지다. 이 긴 코드들이 각각 어떤 역할인지 몰라도 괜찮다. 적어도 Welcome, Express!를 출력하는 코드 조각은 쉽게 찾을 수 있을 것이다. 이것을 수정해서 내가 출력하고 싶은 문장을 출력할 수 있을 것이다. 조급해 하지 말고 여기서 시작하는 것이다. 어떤 코드를 수정하면 무엇을 할 수 있다는 것을 알고 내가 수정할 수 있는 코드를 조금씩 늘려 나가면 된다.

 Hello, World!를 출력할 수 있으면 내가 원하는 문장을 여러 줄 출력할 수 있다는 것도 알았다. 그 외에 다른 코드가 부가적으로 붙더라도 출력하는 부분만 안다면 그 부분을 수정해서 원하는 결과를 얻을 수 있다는 것도 이해했다. 하지만 분기문(if, switch), 반복문(while, for), 함수 등 조금 더 복잡한 것을 배우는 것은 다르지 않을까 하고 생각할 수 있다. 그럴 땐 Hello, World! 처럼 가장 간단한 예제부터 접근하면 된다. 거기서 조금씩 수정해 보면 된다.
 예를 들어 구구단 코드를 작성한다고 치자. 내가 프로그래밍을 처음 배울 때 while이나 for문을 이해하는 것 자체는 어렵지 않았다. 하지만 구구단 코드는 이런 반복문을 중첩시켜야 하기 때문에 접근하기 어려웠다. 이렇게 접근해봤다면 어땠을까?

for(int i = 0; i < 9; ++i) {
    // 반복문은 알겠고 중첩된 반복문은 어려우니 내부에 있는 반복문을 무의미한 것으로 만들어 본다.
    for(int j = 0; j < 1; ++j) {
        printf("test");
    }
}


for(int i = 0; i < 9; ++i) {
    for(int j = 0; j < 1; ++j) {
        // 변수를 넣기 전에 거의 텍스트와 다를 바 없는 코드로 실험 해 본다.
        printf("%d * %d = %d", 2, 1, 2);
    }
}

 풀어야할 문제를 더 여러 단계로 쪼개어 생각하는 것이다. 내가 오르고 싶은 곳의 높이는 같지만 계단이 너무 높다. 계단의 개수는 많아지겠지만 높이를 낮추는 것이다.

 아마 지금 마주하고 있는 어려운 문제도 그것의 가장 쉬운 부분은 내가 이해할 수 있지 않을까? 그리고 거기서부터 시작하면 내가 원하는 곳까지 도달하는 것도 가능하지 않을까?