Overkill – Java as a First Programming Language

Matthias Endler

오버킬 – 첫 프로그래밍 언어로서의 Java

원문은 Matthias Endler님이 에 게재했습니다. 이 블로그 구독하기

얼마 전 동네 학생과 첫 프로그래밍 경험에 대해 이야기를 나눴다. 학교에서 Java로 배우기 시작했는데, 곧 끔찍한 경험이 되고 말았다고 한다.

우리 중 많은 사람은 BASIC이나 Pascal 같은 언어로 코딩을 배웠다. 객체 지향도 없었고, 정교한 파일 입출력도 없었으며, 모듈화도 거의 없었다… 그런데 그게 오히려 좋았다. BASIC에서는 그냥 이렇게 쓰면 됐다.

PRINT "HELLO WORLD"

이걸로 끝이다. 이 코드는 실제로 동작하는 프로그램으로, 가장 기본적이고 반복적으로 마주하는 문제, 즉 화면에 텍스트를 출력하는 일을 해결한다.

Java에서 같은 일을 하려면 이렇게 써야 한다.

public class Main {
  public static void main (String[] args) {
    System.out.println("Hello, world!");
  }
}

가장 쉬운 작업이라고 할 수 있는 일을 하기 위해 얼마나 많은 프로그래밍 지식이 필요한지 보이는가? 이 프로그램을 초보자에게 설명하려면 아마 이렇게 말해야 할 것이다.

문자열 배열을 단일 인자로 받고 void를 반환하는 main 메서드를 포함하는 Main 클래스를 만들고, PrintStream 클래스의 out 객체의 println 메서드를 사용해 텍스트를 단일 인자로 전달하세요.

— 중괄호는 빼먹지 마시길. 이렇게 하면 첫 프로그래밍 시간은 분명 엄청나게 즐거울 것이다.

좋다. 그럼 대안은 무엇일까? 그래픽을 위한 정교한 표준 라이브러리가 없고(Java도 마찬가지지만) 확장성이 떨어진다는 이유로 이제 와서 BASIC으로 코딩하고 싶어 하는 사람은 없다는 걸 인정한다. 언어는 깔끔하고 단순해야 한다. 수치 연산에는 충분히 빨라야 하지만, 경직된 C 계열 중괄호 언어들처럼 장황해서는 안 된다(미안하다, C++ 하는 분들). 학습 곡선이 완만해야 하고 즉각적인 피드백을 제공해야 한다(컴파일 언어는 이 부분에서 종종 형편없다). 깔끔한 코드를 장려하고 모범 사례에 보상을 줘야 한다. 이 모든 것을 제공하는 언어 중 하나가 바로 Python이다.

그리고 Python은 그 외에도 더 많은 것을 제공한다. 거의 모든 일을 도와주는 수백 개의 라이브러리, 주요 IDE와의 훌륭한 연동(PyDev in Eclipse, IDLE…), 정확하고 우아한 문법까지.

위 프로그램을 Python으로 작성하면 이렇게 된다.

print("Hello World")

이 단계에서는 객체 지향이나 스코프, 함수 인자에 대해 알 필요가 없다. 번거로운 사전 준비나 장부 정리도 없다. 물론 인터프리터 언어이긴 하지만, 초보자에게는 전혀 걸림돌이 되지 않는다.

아직 확신이 서지 않는다면, Java에서 텍스트를 출력하고 서식을 지정하는 것은 숙련된 프로그래머에게는 비교적 쉽지만, 진짜 끔찍한 일은 파일 입력에서부터 시작된다.

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class fileIO {
    public static void main(String[] args) {
        String filename = "test.txt", line;
        try {
            BufferedReader myFile =
                new BufferedReader(new FileReader(filename));

            while ( ( line = myFile.readLine()) != null) {
                System.out.println(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

“야, 파일 입출력은 원래 꽤 복잡해. 원래 그런 거야”라고 말하는 게 들리는 듯하다. 물론 내부적으로는 맞는 말이다. 하지만 초보자에게는 쉬운 인터페이스가 제공되어야 한다. Python이 그 방법을 보여준다.

file = open("test.txt")
text = file.read()
print(text);

이 코드는 과정이 어떻게 동작하는지에 대한 자연스러운 이해와 정확히 일치한다. “컴퓨터가 파일을 열고, 읽은 뒤, 출력한다.” 다섯 살짜리 아이라도 이해할 수 있다. 비록 내부적으로 정확히 그렇게 동작한다 해도, 누구도 “파일을 읽기 전에 FileReader에서 동작하는 BufferedReader가 필요하다…”라며 설명을 시작하지는 않을 것이다. 처음에는 큰 그림을 설명하고 싶은 것이다. 컴퓨터에게 유용한 일을 시키는 법에 대한 가장 기본적인 원리를 말이다. 그렇지 않으면 초보자를 좌절시키고, 자신은 프로그래밍에 소질이 없다는 착각에 빠뜨리게 된다. 프로그래밍은 재미있고, 시작하는 것이 가장 중요한 단계다. 그러니 불필요한 추상화 층으로 그 경험을 망치지 말자.

링크

이 글은 muse-spark-1.2-contributor 모델을 사용해 번역했습니다.

댓글