변수 이야기 하자는게 아니다
아래는 <Imagine + Engineer 시리즈 목차이자 첫 글
"카지노 게임 사이트은 배우기 어렵다."
나는 개인적으로 반은 맞고, 반은 틀렸다고 생각한다.
개인적으로 나는 프로그래밍이라는 것이 외국어보다는 훨씬 배우기 쉽다고 생각한다. 외국어는 대화가 시작되면 나의 능력을 총동원하여 즉각적으로 '문장'을 만들어내야 하지만, 프로그래밍은 모르면 언제든지 책을 통해서든 구글 검색을 통해서든 찾아볼 수 있다. 다양한 규칙이 존재하지만, 언어와 달리 사람이 창조해냈기 때문에 프로그래밍 언어들은 규칙이 명확하다. 외국어를 배울 때처럼 수많은 예외가 존재하지 않는다.
그런데 실제로 처음 배울 때 카지노 게임 사이트이 주는 압박감과 어려움은 외국어 공부의 어려움을 훨씬 상회한다.왜일까?
1.
나는 우선 그 원인을 질문과 대답이 없는 주입식 설명이라고 생각한다. 혹시 유명하다는 프로그래밍 책을 들여다본 적이 있는가? 보통 프로그래밍 언어를 배운다면, 연산자, 변수, 함수, 클래스, 자료구조등의 순서로 '공부'하게 된다. 그런데 변수가 무엇인지 알고, 어떻게 쓰는지도 아는데 도대체 왜 쓰는지 모른다. 내가 처음 배운 프로그래밍 언어는 자바였는데, 보통 객체지향이라는 개념을 배우기 시작하면서 많은 학생들이 눈물을 흘린다. 왜냐면 이유를 모르고 배우는 통에 도대체 이걸 왜 쓰는지 알 수가 없기 때문이다. 책에는 객체지향의 특징이 '다형성, 캡슐화, 상속, 재사용'라고 말한다. 저 단어 중에서 유일하게 단어만 보고 고개가 끄덕여지는 것은 '재사용'이라는 단어인데, 나머지는 프로그래밍을 해본 적이 없다면 아예 단어가 이해가 되지 않고 '재사용'도 어떻게 재사용하겠다는 건지 알 수가 없다.
원래는 아래와 같이 배웠어야 했다. 편의상 프로그래밍 언어는 파이썬으로 쓰겠다.
학생이 1명이 있다. 성은 홍이고, 이름은 길동이다. 나이는 15살이고, 직업은 학생이다.아래와 같이 변수로만 쓸 수 있다.
last_name = '홍'
first_name = '길동'
age = 15
job = '학생'
그렇다면 이번에는 학생이 3명 있다면 어떻게 표현할 수 있을까? 각각 변수 이름에 번호만 붙이면 그나마 쉽게 구분할 수 있을 거다.
last_name1 = '홍'
first_name1 = '길동'
age1 = 15
job1 = '학생'
last_name2 = '홍'
first_name2 = '길동'
age2 = 15
job2 = '학생'
last_name3 = '홍'
first_name3 = '길동'
age3 = 15
job4 = '학생'
그런데 이게 100명이 된다면? 우리는 모든 변수를 따로 만들어야 한다. 이건 꽤 귀찮은 일이니까, 조금 간단하게 줄였으면 좋겠다. 이게 클래스다.
class Student:
def __init__(self,last_name, first_name, age, job):
self.last_name = last_name
self.first_name = first_name
self.age = age
self.job = job
student1 = Student('홍', '길동', 15, '학생')
student2 = Student('홍', '길동', 15, '학생')
student3 = Student('홍', '길동', 15, '학생')
많은 프로그래밍 강의가 클래스를 쓰면 코드가 줄어든다고 가르친다. 그런데 처음 프로그래밍을 배우는 학생에게는 절대로 코드가 줄어들지 않는다. 클래스를 작성한만큼 코드가 늘어나는 셈이다. 하지만 클래스가 중요해지는 시점은 많은 수의 학생(데이터)을관리할 때이다. 만약에 100명의 학생을 관리한다면 위에서 각각의 변수를 따로 지정해줄때(400줄의 코드)보다, 클래스를 만들면 코드가 약 1/4(100줄의 코드 + 클래스 작성 6줄)로 줄어든다. 도대체 프로그래밍을 가르칠 때 이 간단한 사실을 왜 이야기해주지 않는 것일까?
2.
또 하나의 문제는 어려운 번역 단어를 사용한다는데 있다. 나는 '현학'적인 단어를 사용하는 것은 전달 능력을 현저히 떨어트린다고 믿는다. 그런데 프로그래밍은 심지어 영어를 모태로 시작하다 보니, 처음에 번역을 할 때 단어를 잘못 선택한 엄청난 단어들이 많다.
위에서 이야기한 변수는 무엇을 번역한 용어인가? 영어로는Variable이다. Variable의 동사형인 vary는 기본적으로 다양하다는 의미로 Variable은 '다양할 수 있는',즉'변할 수 있는'이라는 뜻이다.
number = 1
number = 2
print(number) # 2
위의 예시처럼 처음에 number카지노 게임 사이트 변수에 1을 집어넣고, 이후에 2를 다시 집어넣어도 된다는 뜻이다. 그러면 number카지노 게임 사이트 변수의 값이 2로 바뀐다.
그런데 이 Variable이카지노 게임 사이트 단어가 '변수'카지노 게임 사이트 이름에 갇히는 순간 그 생명력을 잃는다. 살면서 '변수'카지노 게임 사이트 단어를 들은적이 언제인가? "그 일에는 변수가 너무 많군."이카지노 게임 사이트 문장 말고는 잘 기억이 나지 않는다.혹은 까마득한 옛날 학교 수학 시간에 배운 것이 기억난다면 축하한다. 거의 저 의미와 유사하다.
또 한 가지 예를 들어보면 앞서 설명했던 Class는'객체지향'언어의 특징이라고 말한다. 영어로는 Object oriented programming (OOP)라고 쓴다. Object-Oriented라는 말을 그대로 직역해서 ('Object 객체', 'Oriented 지향')쓰는 것이다. 안타깝지만 이 번역은 실패했다고 생각한다. 한국에서 '객체'라는 단어는 거의 죽은 단어에 가깝다. 누가 일상 대화에서 '객체'라는 말을 쓰나? '객체'라는 말이 낯서니 '객체'를 '지향'한다는 말은 당연히 귀에 들어올 리가 없다. 용어가 이해가 안 되니 결국 다 외워버리는 수밖에 없다.
Object는 우리가 자주 쓰는 말로는 물건이나 대상에 가깝다.
last_name1 = '홍'
first_name1 = '길동'
age1 = 15
job1 = '학생'
이렇게 분리해서 생각하지 말고, 결국엔 한 학생의 성질을 의미하는 것이니 묶어서 생각하자는 것이 OOP다.
student1 = Student('홍', '길동', 15, '학생')
차라리 '물건화 시켜 생각하는프로그래밍'이나 아예 풀어서 '한 사물의 특징을 묶어서 표현하는 프로그래밍 기법'라고 알려줬다면 그렇게 골치 아프지 않았을 텐데라는 생각이 든다.
원래부터 어려운 건 없다. 한 반에 10명이 수업을 듣는데, 10명이 모두 고개를 좌우로 흔든다면 분명히 카지노 게임 사이트 가르치고 있다고 생각하는 것이 옳다. 누군가 나에게 스스로 충분히 이해하고 소화시켜서 자기의 말로 알아듣기 쉽게 설명해줬더라면 너무나 좋았을 텐데라는 아쉬움이 든다.