brunch

You can make anything
by writing

C.S.Lewis

by jeromeNa Feb 12. 2023

프로그램 코딩

프로그램 코딩 학습에 대한 짧은 생각

언어는 표현하기 위한 수단이다.


생각을 표현하기 위한 수단이 다를 뿐이지 생각 그 자체는 동일하다. 가령, '나는 잠을 자고 싶다'는 생각을 표현할 때 두 손을 합장하고 머리를 기대는 몸짓만으로도 표현이 가능하다. 입으로 말하기 위해서는 언어라는 도구를 빌려서 사용하는 것뿐이다. 언어가 다르다고 해서 생각이나 감정 자체도 다른 것은 아니다.


표현이 풍부할수록 언어의 범위는 다양하다. 한국어의 따스하다. 따뜻하다. 따사롭다. 쨍쨍하다. 뜨겁다. 덥다 등 다양한 표현이 있는 반면 영어는 warm, hot 두 개로 표현된다. 한국어는 하나의 단어로 느낌을 알 수 있지만, 영어는 하나의 단어에 부가적인 설명이 붙어야 느낌을 알 수 있다. 이처럼 언어마다 표현이 가능한 것과 쉽지 않은 것들이 존재한다.


한국어는 표현력이 다양한 만큼 다루기가 쉽지 않다. 다양하기에 표현을 정확하게 전달할 수 있지만 반면 어느 단어를 쓰느냐에 따라 느낌이 달라지기에 애를 먹을 수 있고, 설명이 없기에 오해를 불러일으킬 수도 있다. 영어의 단어는 표현력이 단순하기에 다루기 쉬울 수도 있지만, 정확한 표현을 위해 설명을 덧붙여야 한다.




각 언어는 문법이 존재하지만, 대부분 일반 사람들은 문법에 맞춰 소통하지는 않는다. '나는 학교에 간다'라는 짧은 문장도 주어 + 목적어 + 동사로 이루어졌다는 문법이 있다. 더 자세히 문법적으로 보면  '은, 는, 이, 가, 을, 를, 에, 의…' 등 조사가 명사인지, 목적격인지 관형격인지 등에 따라붙는 조사가 틀리다. 이런 복잡하고 어려운 문법에 맞춰 내 생각을 표현하라고 하면 나는 포기할 것 같다. 세종대왕은 소통에 어려운 서민을 위해 한글을 창제했는데, 배우기가 더 어렵다면 없는 것만도 못한 꼴이 된다. 하지만 언어에는 문법이 존재한다. 올바른 언어 사용과 다른 나라 사람이 언어를 배우기 위해서는 필요하겠지만, 소통을 위한 것인데, 학문이 되어버리면 쉽게 지치고 때려치우고 싶은 생각도 있을 것이다.

문법에 맞지 않더라도, '학교 간다 나는', '간다 나는 학교', '나 간다 학교', '나 학교 간다'와 같이 문법에 맞지는 않지만 소통은 된다. 영어로 표현하면, 'I am go to school’이 문법적이지만, 'I go school’, ‘go school’, ‘school go’로 해도 소통은 되지 않을까. 중요한 것은 표현을 소통하는 것이지 문법에 맞춰 문법을 이야기하는 것은 아니라는 것이다. 속(본질)을 잊거나 모른 채 겉만 학습한다면 문법이 바뀔 때마다 매번 학습해야만 소통할 수 있을 것이다. 이런 학습된 소통은 피곤하고 사절이다. 부가적으로 한국어의 '나'와 영어의 'I’를 다른 개념으로 인식한다는 것에 문제가 있다. '나'를 표현하는 한국어는 '나'이고, 영어는 'I’, 일어는 '私(와타시)', 중국어는 '我(워)'로 표현하는 것이지 아예 다른 개념이 아니다.


프로그래밍 언어도 인간의 언어와 비슷하다. 프로그래밍 언어는 컴퓨터에게 내가 원하는 표현을 명령하는 수단이다. 컴퓨터는 프로그램이 없으면 단순한 고철덩어리에 불과하다. CPU 성능, RAM의 용량, 하드디스크의 커다란 용량, 우수한 그래픽 해상도 등도 프로그램이 없으면 값비싼 고철에 불과하다. CPU의 연산능력, RAM의 기억능력, 방대한 하드디스크의 활용, 우수한 그래픽 해상도의 화려함을 제어하고 표현하기 위해서는 프로그램이 필요하다.


컴퓨터는 0,1만 알고 있다. 이런 0,1의 위치를 기억하기 위해 주소라는 개념을 사용하고 있다. 컴퓨터가 0,1만 알고 있다고 해서 모스 부호처럼 0,1만으로 컴퓨터에 명령하기에는 힘들어 보인다. 모든 개발자가 0,1만으로 프로그래밍하라고 한다면 대부분 포기하지 않을까. (컴퓨터 초창기에는 실제로 0,1만으로 프로그래밍을 했던 적이 있었다.)


컴퓨터가 알아들을 수 있게 인간의 언어로 만든 것이 프로그램 언어이다. (인간의 언어에서 컴퓨터의 0,1로 변환하는 과정을 컴파일이라고 한다.) 컴퓨터는 복잡하지 않고 단순하다. 인간의 표현도 감정을 제외하고는 표현 자체는 단순하다. (감정은 복잡한 심적 변화이기에 표현에도 한계가 있는 듯하다.) 인간의 대표적인 행동 표현을 생각해 보면 걷다, 먹다, 든다, 내린다, 눕다, 앉다, 일어난다 정도가 아닐까. 여기에 추가적으로 더 많은 행동을 넣을 수 있지만, 많지는 않을 것 같다. 컴퓨터는 더 단순하다. 0,1에서 좀 더 고차원적인 표현을 해서 변수, 상수, 반복, 조건, 함수 5가지가 다다. 컴퓨터에게 표현을 명령하기 위해 5가지만 제대로 알아도 표현이 가능하다는 이야기다.


이 5가지 표현을 각 언어별로 자기의 특성에 맞게 문법을 만들어 제공하고 있다. C, C++, JAVA, Python, php, Javascript, Objective C, Kotrin, Dart, Go, Rust 등 현재 사용되고 있는 언어만으로 수많은 종류가 있다. 하지만 모든 언어의 본질은 5가지가 기본이다. 5개의 기본도 모른 채, C, C++, JAVA, Python 등을 배운 들 아무 소용이 없다. JAVA를 사용한 개발자가 Python을 배울 때 5가지 기본을 수행하기 위한 문법만 익히면 다룰 수 있다. 하지만 5개의 기본도 모른 채, 다른 언어를 배운다면 처음부터 기본부터 다시 학습한다. 또 다른 언어를 배우기 위해 또다시 처음부터 기본부터 학습한다. 5가지 기본이 같은 개념인데도 불구하고 아예 다른 개념으로 인식해서 처음부터 다시 학습하는 것이다. 이런 식으로 학습하다 보면, 확장은 커녕 빠르게 변하는 프로그래밍 세계에서 도태되는 것은 시간문제다.




나는 C, JAVA, Python, php, nodejs, Javascript(React (Native), Vue, Angular), Android, Kotrin, Dart(Flutter)로 프로그램을 개발한다. -C 계열의 C++, Objective C, Swift는 기회가 없어 학습하지 못했지만, 기회가 있다면 학습할 생각도 가지고 있다.- 자랑거리가 되지도 않지만, 가끔 주변 개발자들이 어떻게 언어를 금방 학습할 수 있는지 의아해한다. 기본만 제대로 알고, 어떤 목적으로 사용하는지만 알면 된다. 제대로 안다는 것은 내가 원하는 대로 활용이 가능하고, 자유자재로 가지고 놀아야 한다는 의미다.


부가적으로 포토샵, 일러스트레이터, 피그마 등 그래픽 툴도 기본적으로 공통된 개념이 있다. 레이어, 채널, 마스크, 벡터, 아트보드, 색상차트 정도만 알아도 대부분의 그래픽툴은 다룰 수 있다. -나는 포토샵, 일러스트레이터, 피그마, 스케치, 클립스튜디오, 페인터를 다루고 있다.- 각 툴만의 특징-포토샵은 이미지 합성, 보정, 일러스트레이터는 오브젝트, 피그마는 패키지, 라이브러리 등-은 별도로 학습해야 하고, 페인터의 경우에는 브러시의 특성과 재질의 특성을 알아야 하기에 미술을 좋아하지 않거나 모른다면 조금 접근하기가 힘든 툴이다.




기본을 모른 채 겉으로 보이는 멋있음과 화려함만 동경하고 배운다면, 분명 한계에 부딪히고 스스로 절망하고 좌절할 수 있다. 그림을 그리기 위해서는 선 긋는 연습부터 시작한다. 맛있는 음식을 만들기 위해서는 재료 손질방법부터 연습한다. 음악을 만들기 위해서는 음표를 알아야 한다. 영화를 찍기 위해서는 시나리오부터 써야 한다. 글을 쓰기 위해서는 책부터 읽어야 한다. 코딩에서도 5가지-변수, 상수, 반복, 조건, 함수-만 제대로 알아도 언어의 영역을 벗어나 코딩을 할 수 있다. 모든 화려함이나 멋짐은 귀찮고, 하기 싫은 일부터 시작해야 한다.


조금 더 깊게 생각하면, 음식을 만들기 위해서는 재료 손질법을 알아야 하지만 그 이전에 재료를 알아야 한다. 음악은 음표 이전에 악기를 알아야 하고, 영화는 시나리오를 쓰기 전에, 자료를 모아야 된다. 글을 쓰기 위해 글 소재를 알아야 한다. 프로그램 코딩도 마찬가지다. 코딩을 하기 위해서는 가장 단순한 데이터부터 알아야 한다. 코딩 자체가 데이터를 다루는 일이기 때문이다. 개인적인 생각이지만 -전공자라면 공감할 듯 한- '자료구조론(데이터구조론)'이 쉽지 않다는 것이다. 일단 뒤에 '론'이 붙어서 더 어렵게 느껴지는 듯하다.


모든-대부분- 영역에서의 가장 기본은 '데이터(자료)'다. 하지만 아쉽게도 책이나 학원, 인강 등에서는 '데이터(자료)'와 관련된 책이나 커리큘럼, 콘텐츠가 많지 않다. 지루하고, 찾는 사람도 없어 전문서적이나 대학 교과목으로만 대부분 있을 뿐이다.


시간이 되는대로 가끔 가장 중요하고 기본인 ‘데이터‘를 개인적으로 관심 있는 분야를 학습도 할 겸 연관해서 보다 이해하기 쉽게 다뤄볼 생각이다.



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari