문득 생각해보니 처음 프로그래밍이 뭔지 느꼈던 그 날이 생각났다.

아마도 초글링 3년차 였던 것 같다.
컴퓨터 학원이라는 곳을 처음 다녔고, 1부터 100까지의 합을 구하는 프로그램에 대해 배우고 있었다.

10 I = 0
20 SUM = 0
30 I = I + 1
40 SUM = SUM + I
50 IF I<100 THEN GOTO 30
60 PRINT "SUM:";SUM

여기서 도저히 이해가 안 가는 게 30행, 40행이었다.

아니, 대체 I 와 I+1 이 어떻게 같다는 거지?
 

이 코드를 노트에 적어서 집에 갖고 와서는 한참을 고민했다.
당시 학원 컴퓨터는 SPC-1100이었고, 집에선 MSX(IQ-1000)를 사용했는데, 양쪽 모두에서 같은 결과를 확인했다.
즉, 내가 이해를 못해도 저 코드는 정상이라는 건 어렴풋이 알 수 있었다.

image 5050이 맞지! 그렇지!

그러다가 학원에서 들은 한 마디가 떠올랐다.

등호는 같다는 뜻이 아니라 대입한다는 뜻이야
 

메모리에 뭔가를 저장한다는 의미라는 것을 처음으로 느낀 순간이었다.
그리고, 이 때부터 프로그래밍이 무엇인지를 알기 시작했다.

이후에 BASIC의 기본 규칙 중에 다음과 같은 내용들을 배울 수 있었다.

  • 변수를 선언하지 않고 그냥 사용하면 0이 자동 대입됨
  • IFTHEN 뒤에 GOTO가 생략되면 행번호로 가라는 뜻
  • 변수명은 앞의 2글자만 기억함

즉, 위의 코드는 아래와 같이 더 축약할 수 있는 것이었다.

10 I = I + 1
20 S = S + I
30 IF I<100 THEN 10
40 PRINT "SUM:";S

다음 단계는 (당연히) FORNEXT 구문을 배우는 것.

10 S = 0
20 FOR I = 1 TO 100
30 S = S + I
40 NEXT I
50 PRINT "SUM:";S

행번호가 없는 대부분의 현대 언어에선 사실 이런 과정으로 가르치지 않고 그럴 수도 없다.
이 때는 비록 다익스트라의 “Go To Statement Considered Harmful”이 나온지 한참 되었지만 그래도 BASICBASIC이라…


사실 이 문제는 전혀 이렇게 쓸 필요가 없다.
이건 가우스느님께선 초글링 때 이미 식으로 정리하신 문제였다.

10 N = 100
20 S = N * (N+1) / 2
30 PRINT "SUM:";S

카테고리:

업데이트: