brunch

You can make anything
by writing

C.S.Lewis

by 이남주 NJ Namju Lee Dec 26. 2020

Q 코딩과 더불어 어떤 공부를? Feat.4차 산업

Computational Design

질문, Youtube


현재, 건축학을 전공하고 있고 컴퓨테이셔널 한 디자인이 증가함에 따라 코딩의 중요성을 실감하여 컴퓨터 공학을 복수 전공하고 있습니다.
코딩을 이용한 디자인 즉, 그래스호퍼는 수학적인 그래프를 통해 디자인을 변형시킬 수 있는데 이에 대한 이해를 더 높이기 위해 선형대수학이나 기하를 따로 공부하면 이점이 있을까요?
만약 이점이 있다면 코딩을 더불어 어떤 공부가 더 효과적일 수 있는지 궁금합니다.




특별히 요즘 들어서, 디자인, 건축전공 학생분들에게 많이 받는 질문 중 하나인데요. 지극히 개인적인 생각을 나누어 보아요! 질문을 3가지로 나누어 봤어요.


1.  현재, 건축학을 전공...

현재, 건축학을 전공하고 있고 컴퓨테이셔널 한 디자인이 증가함에 따라 코딩의 중요성을 실감하여 컴퓨터 공학을 복수 전공하고 있습니다.

네 맞죠, 코딩은 선택이 아니라 필수입니다. 만약 동의가 안 되신다면, 여려 분은 앞으로 산업이 어떻게 변화는 지에, 세상이 어디로 흘러가는지에 대해 관심을 가질 필요가 있어요. 따라서, 패러다임 변화라는 파도를 타고 주도적으로 갈 것인지, 아니면 파도에 말려 정신없이 따라기가 바쁠 것인지가 결정할 수 있다는 것이죠. 그럼 코딩이 왜 중요하나를 생각해 봐야겠죠? 아래와 같이 이야기할 수 있겠어요.


4차 산업의 쌀, 즉 데이터를 사용하게 위해서!!

우리가 영어 혹은 제2 외국어를 학습하듯, 컴퓨터와 소통할 수 있는 언어 하나쯤은 알고 있어야죠.

현실적으로 잘 쓰지 않는 영어보다, 더 현실적으로 중요하고 가치 있는 언어죠.

코딩을 해야, 특정 이상의 레벨을 컨트롤할 수 있다. 즉 데이터를 쉽게 가공할 수 있죠. 컴퓨터의 어마 어마한 컴퓨팅 파워를 높은 자유도로 활용할 수 있죠.

마치, 옛날 "타자기"에서 컴퓨터의 "워트 프로세스"로의 전환보다 더 큰 이득이 있죠.

컴퓨테이셔널 팅킹은, 근본적으로 사람의 생각 프로세스를 바꿀 수 있죠.

문제 인식, 사고체계와 문제 해결 능력 자체가 달라질 수 있죠.

4차 산업의 포장을 넘어, 내용적 측면을 잘 이해하고, 디자인과 접목을 시켜보고 싶다면,

결국 4차 산업은 컴퓨테이셔널 팅킹으로 요약되고, 컴퓨테이셔널 팅킹을 하면, 빌 게이츠의 예처럼, 오타쿠 같다며 조소 섞인 웃음을 받을 수 있지만, 미래의 그 사람 밑에서 일하는 나를 발견하고 싶지 않다면, 컴퓨테이셔널 사고를 다양한 나의 삶에 적용해 보자.


더 많은 이유가 있겠지만, 지금 당장 머릿속에 생각나는 것은 이러합니다. 다른 이유를 더 알고 싶다면 다음의 링크를 참조해 주세요!  - 디자이너에게 코딩이란 / 나에게 코딩이란 / 코딩을 하는 이유 - link


Q. 꼭 복수 전공을 해야 하는가?


국내외 학생들에게서 많이 받는 질문인데요. 물론 복수 전공해서 둘 다 소화할 수 있으면 정말 금상첨화겠지만, 일반적으로 10중 1,2에만 해당되는 이야기예요. 왜냐면,


뇌구조가 다르다, 디자이너들이 엔지니어의 마인드로 전환이 필요하다, 즉 시간과 노력이 필요하죠.

전공으로 선택해서 4년을 달려도, 잘 안 되는 것을, 쉽지 않을 것을, 부전공한다고 달라질까?

취업시장에서, 직장 못 구하는 컴퓨터 공학 생들은 어떻게 설명할 것인가?

커리어상에 한 줄 이 중요할 수 있을까?


부정적인 이야기를 하는 이유는, 현실을 즉시하고 이해하고 들어가야 전략을 잘 새울 수 있기 때문이죠. 여러분들도 잘 아시다시피, 대학을 다닌다고, 전공을 했다고, 사회에서 필요되는 일꾼의 레벨로 간주될 수는 없죠. 회사의 HR이나 디렉터들은 바보가 아니죠.


둘 다 못할 수 있다, 따라서 반드시 선택과 집중이 필요하죠.

컴퓨터 사이언스(Computer Science )는 괘나 넓다. 우선 전공과 결을 같이 할 수 있는 부분을 중점적으로 공부를 하자. 그리고 그 주변의 영역(반드시 해야 하는)은 나중에 해도 괜찮죠.

복수전공을 통해서 컴퓨터공학을 마스터한다는 느낌 말고, 이제 개념을 알고 무엇을 어떻게 시작할 수 있는 방향을 알 수 있을 것 같다, 정도가 좋을 것이다.

왜냐면, 소프트웨어 엔지니어 영역은, 기본적으로 평생학습을 해야 하고, 그 자세가 중요하기 때문이죠. 특별히 우리처럼 부전공으로 할 경우에 그 개념을 우선적으로 잡고, 졸업 후 실무나 연구를 통해 평생에 걸쳐  공부 한야 한다는 것이죠. (사실 요즘의 모든 영역이 그러하죠. 과거의 하나를 배워 우려먹고 사는 시대는 끝났죠.)

앞의 말들처럼 일반화할 수 없지만, 만약 복수전공을 해야 한다면, 내가 왜 해야 하는지 충분한 고민을 하고 시작하기를 바라요. 분명한 것은 정해진 시간과 여러분의 학습 능력 또한 한계가 있다는 것을 알아야 하죠.

사실, 내가 무엇을 하고 싶은지? 잘할 수 있는지?, 왜 해야 하는지? 에 대한 확신이 있다면, 즉 명확한 동기부여가 잘 정리되어 있다면, 복수전공으로 하던 안 하던 상관없죠. 이미 뜯어말려도 할 수 있는 에너지 충분하기 때문이죠.




2. 코딩을 이용한 디자인...

코딩을 이용한 디자인 즉,그래스 호퍼는 수학적인 그래프를 통해 디자인을 변형시킬 수 있는데 이에 대한 이해를 더 높이기 위해 선형대수학이나 기하를 따로 공부하면 이점이 있을까요?


일단, 그라스호퍼를 떠나자, 떠나서, 2D 3D 그래픽 자체가 수학이죠(Linear algebra: 선형대수학). 좌표계에서 포인트를 정의하고 연결하는 거죠 일단 이것이 그래픽의 전부라고 봐도 무리가 없어요.

포인트 정의 그리고 포인트의 연결 : 포인트 라인 면 다각형 2차원 3차원 도형도 모두 포함되죠.

일반적으로, 그래픽 하면 좌표계에 선을 정의하고, 선을 연결하고, 색을 칠해서 화면에 시각언어로, 데이터를 그린다로 볼 수 있는 것이죠. 가령 3ds max, Rhino, Maya, SketchUp 혹은 Photoshop 등등의 그래픽 소프트웨어도 같은 철학에 근거하고 있어요. 왜냐면 컴퓨터 그래픽이라는 개념 위에서 위와 같은 소프트웨어들이 만들어졌기 때문이죠.

이러한 명령어들을 편하게 사용자를 위해 제공되는 것들이 스케치업이나 마야나 맥스나 일러스트레이터 등등의 소프트웨어다 라고 볼 수 있어요.

아이콘으로 빼놓은 것들이 고 아이콘은 사실 여러 개의 기본 펑션들을 묶고 있을 수 있다는 것이죠.    

그라스하퍼(Grasshopper) 하면, 비주얼 스크립팅 정도로 볼 수 있죠, Max creation graph, Dynamo, NodeBox 등등 제공되는 API를 조합해서 알고리즘을 만드는 것이죠. 즉, 명령어들의 적인 매크로(Macro)적인 조합으로 볼 수 있죠.

이름 자체가 내포하는 것처럼 시각적으로 코딩을 하는 거죠. 아무래도 그래픽 툴에 익숙한 디자이너들에게 쉬운 코딩 환경이죠.  

이것들을 좀 더 명백하게 끄집어 놓은 게 그라스 하퍼 코딩으로 볼 수 있죠. 보시면 오브젝트를 움직인다고 했을 때도, 아이콘 하라면 될 것을 그라스 하퍼 즉 비주얼 코딩으로는 포인트를 잡고 벡터를 적용하죠

그라스 하퍼 같은 비주얼 코딩도 더 잘게 나누면 스크립트의 한 줄 한 줄까지도 나눌 수 있죠 물론 그 펑션도 쪼갤 수 있죠.

자 그러면 여기서 사실 중요한 것은 수학보다는 어떤 순서로 어떤 명령어를 나열할까 가 굉장히 중요해요.

즉 이것은 스스로의 디자인 언어 즉 프로세스가 있냐? 그리고 디지털 소프트웨어의 문법을 잘 아느냐에 달려있죠.

즉, 초보자의 경우, 대부분의 튜토리얼이나 디자인 스크립팅은 수학적 이해와 활용의 부재가 아닌, 스스로의 디자인 방법이 없어서 오는 문제다 라고 볼 수 있어요.


수학은 인간들이 만들어낸 언어들 중에 가장 엄밀한 언어 중 하나죠. 예를 들면, 법도 엄밀한 언어예요. 논리를 가지고 있으니까요. 일상생활에서 사용하는 언어보다는 좀 더 명시적으로 엄밀한 논리를 가질 수 있다는 것이죠. 그러나 여전히 해석의 여지는 있어요. 하지만 수학은, 누가 해석하더라도 하나의 정확한 해석이 존재하니까요. 마치 계산기가 계산할 때마다 값이 달리 해석한다면, 우리는 계산기가 고장 났다고 생각할 거예요. 왜냐면 수학은 항상 최고의 엄밀성을 보장하다고 우리 모두가 알고 있죠.  


코딩을 한다는 것은 수학이라는 엄밀한 언어로 무언가를 기술하는 거예요. 왜냐면 컴퓨터는 계산을 하는 기계이기 때문에, 수학이라는 산술 체계로 그 주어진 업무를 수행하는 것이죠. 즉 어떤 업무를 지시하려면, 수학이라는 언어를 통해서 컴퓨터에게 지시한다 라고 보며 좋아요. 마치 외국인 직원에게 외국어로 지시하듯이.


이러한 배경에서, 제가 개인적으로 정리하는 수학이란,  수학은 그냥 문제 푸는 그런 시험의 영역이 아니라(대부분의 학생들이 암묵적으로 체화돼있는). 수학은 수의 성질을 활용해, 어떤 현상이나 패턴을 기술하는 방식 이아고 보면 좋을 것 같아요. 예를 들면, 현대 물리학, 특별히 이론물리학의 경우는 수학에 잡아 먹혔다고 하는 이야기를 종종 들어 봤을 거예요. 그도 그럴 것이, 물리학적 세계에 대한 시스템적인 수학적 모형을 수립하여 자연현상을 이해, 구현, 예측하는 분야기 때문이죠. 즉 수학으로 물리학적 세계관을 모델링을 하는 것이죠. 프로그래밍이랑 굉장히 흡사하죠.


즉, 시작하는 단계에서 코딩에 필요한 수학은, 수학적인 성질을 이용하여 지오메트리를 변형할 수 있느냐의 관점일 수 있어요. 즉 수의 성질로 현상을 표상(Representation) 시키고, 수의 성질들로 서로 연계성(Relationship)을 부여해서 현상을 모델링(Modeling)하는 것이죠.


사칙연산만 잘 추상화할 수 있다면, 디자인을 위한 프로그래밍을 시작할 수 있어요.

                     - 곱하기 어떻게 볼까? 추상을 통한 상상? 컴퓨테이션/크리에이티브 코딩 - link

함수의 성질을 이용하여 현상을 모델링할 때 사용할 수 있어요.

                    - Function 1D / 라이노 파이썬 04 1차원 함수 1/2 - link

                    - Function 1D / 라이노 파이썬 04 1차원 함수 2/2 - link

수학력 보다 중요한 것은?

                     - 코딩을 시작할 때, 필요로 되는 수학? - link



사실 단계별로 결국 공부를 할 수밖에 없겠죠. 하지만 우리가 영어를 처음 공부할 때, 알파벳의 기원에 대해서 이해하고 시작하지는 않죠. 그런 관점에서는 우선, 재미와 동기를 찾아내고 나중에 필요에 따라 공부를 하면 충분하다 라고 볼 수 있어요. 다음의 링크를 공부하길 권해요.

- Essential Mathematics for Computational Design (4th Edition) -  link

- Khan Academy / Linear Algebra - link


대부분의 사람들은 수학 보다, 스스로의 디자인 언어가 없는 것이 더 문제가 돼요. 사실 없다기보다, 스스로의 언어를 어떻게 명시적으로 나눌 것인가에 대 고민해봐야 해요. 즉 어떻게  컴퓨터에게 일을 시킬 것인지 인스트럭션을 어떻게 작성할 것인지를 훈련해야 한다는 것이죠.


스스로의 디자인 언어, 즉 프로세스가 있냐?

디지털 소프트웨어의 문법을 잘 아느냐?

API로의 확장이 가능해 지죠. 결국, 어떤 소프트웨어던, 거의 동일한 기초에 근거하죠.

즉, 초보자의 경우, 대부분의 튜토리얼이나 디자인 스크립팅은 수학적 이해와 활용의 부재가 아닌, 스스로의 디자인 방법이 없어서 오는 문제다 라고 볼 수 있어요.

스스로의 디자인 발전 방법론이 있다면, 수체계로 그 디자인 프로세스를 기술하면 돼요.(수학은 그저 도울뿐)

컴퓨테이셔널 싱킹(Computational Thinking)을 훈련을 통해, 나만의 디자인 언어를 만들어 보자!




3. 코딩 공부와 더불어...

만약 이점이 있다면 코딩을 더불어 어떤 공부가 더 효과적일 수 있는지 궁금합니다.


첫째로, 같은 이야기일 수 있으나, 코딩과 더불어, 컴퓨터공학을 자세히 공부해야 할 것 같아요. 예를 들면 자료구조 알고리즘 디자인 패턴 아키텍처 등등을 공부하면 좋겠죠. 디자인 베이스로, 컴퓨테이셔널 디자인을 하시는 많은 분들이, API를 이용하는 수준의 사용을 하시는데요. 물론 그것도 충분히 높은 레벨이지만, 한 차원 높은 활용을 하시려면 자료구조와 알고리즘 등등을 자세히 공부하길 권해요.


둘째로, 수학의 경우, 기초 중의 기초로, 벡터를 기본적으로 알아야 하겠죠. 가장 기본이 되는 유클리디안 공간과 벡터에 대해서 공부하기를 권해요. 앞서 설명드린 위의 자료와 링크를 참조하시고요.


한걸음 더 나아간다면, 지오메트리를 공부하는 것이 좋겠죠. 그리고 삼각함수라든지 행열(Matrix)도 같이 공부하면 좋겠죠. 컴퓨테이셔널 지오메트리(Computational geometry), 해석 지오메트리(Analytic geometry) 쪽으로 공부를 해보시면 컴퓨테이셔널 디자인을 하시는데 많은 개념적, 실제적 도움을 받을 수 있을 거예요.


Computational Geometry & Geometry Class & Visualization - link

Data, Geometry & Visualization - link


시간이 더 허락된다면, 미분기하학(Differential geometry)을 공부하기를 권해요. 3차원 유클리드의 평면(Plane) 및 공간(Space), 점(Point),  곡선(Curve)과 표면(Surface) 이론에 대한 많은 인사이트를 얻을 수 있을 거예요.


뿐만 아니라, 수학의 다른 영역도 살펴볼 필요가 있겠죠. 통계(Statistics)와 확률(Probability)의 경우는 데이터를 다루는 곳에서 필요한 배경지식을 공부할 수 있어요. 가령 데이터 시각화, 인공지능, 머신러닝 등등 데이터를 다룰 때는 통계를 공부하면 많은 도움이 됩니다.


이산수학(Discrete mathematics)의 경우에는 연속되지 않은 공간을 다루는 수학이에요. 가령 그래프(Graph) 구조의 구현 탐색을 공부할 수 있고, 특별히 디지털 공간상의 모든 데이터들은 이산화 된 정보이기 때문에 그래요, 가령, 아무리 스무스한 값의 변화 혹은 커브 곡율이라 하더라도, 결국은 이산화 가정을 거쳐야 계산을 하거나 페브 리케이션할 수 있기 때문이죠. 사실 수치해석(Numerical Analysis)의 이산화(Discretization) 프로세스도 독립적으로 존재하죠.


Lecture, Discrete Urban Space and Connectivity - Medium link

    이산 도시 공간과 연결성  - 전체 버전 - 편집 버전


자연스럽게 최적화(Optimization)를 빼놓을 수 없겠죠. 위의 다양한 수학의 서브 학문에서도 각각의 최적화 개념이 적용될 수 있을 뿐 아니라, 디자인에서 굉장히 다양한 최적화 이슈가 떠오를 수 있죠. 제작(Fabrication)의 영역에서도, 어떤 결괏값이 평가 기준에서 얼마큼 최적화되어있는지. 등등 많은 부분에 최적화는 적용될 수 있죠.


사실 이렇게 들어가다 보면 수학 영역 전체다 포함이 될 수밖에 없어요 왜냐면 컴퓨터는 기본적으로 계산 기기 때문에 그렇죠! 즉 계산 가능한 모든 것을 공부하고 적용할 수 있다는 것이죠. 그러나 우리가 이 모든 것을 다 안다고 전제하지는 않죠. 가령, 우리가 건축을 한다고 해서 모든 것을 다 알 수 도 없고, 요구하지도 않죠, 그래서 분업화가 돼있고 전문화가 돼있는 것이죠. 내가 원하는 부분들, 흥미가 느끼는 부분을 집중적으로 공부하는 것이죠. 그 행로에 수학이 있으면 수학을 공부하고, 통계가 있으면 통계를 하는 것이죠.      


크게 수학의 어떤 영역을 공부할 필요가 있는지 요약을 해보겠습니다.

대수(Algebra), 삼각법(Trigonometry), 선형대수(Linear Algebra)

미적분(Calculus), 미분 기하학(Differential Geometry)

수치 방법(Numerical Methods)

샘플링 이론 및 신호 처리(Sampling Theory and Signal Processing)

행렬(Matrix Equations), 물리(Physics)

미분 방정식의 수치 해법(Numerical Solutions of Differential Equations)

최적화(Optimization)

확률 및 통계(Probability and Statistics)

계산 기하학(Computational Geometry) 해석 기하학(Analytical Geometry)... refer link


수학적 테크트리를 살펴봤다면,

기술적 테크트리(라이브러리) 알아볼까요?

2D 혹은 3D - Canvas, WebGL, OpenGL...

Library : THREE, p5js, Processing, A-frame...

Software: Rhino, 3ds max, Maya, SketchUp...

Graphic engine: Unity, Unreal...

컴퓨테이셔널 싱킹을 공부하자!

Lecture, Computational Design Thinking for Designers - Medium link

               디자이너를 위한 컴퓨테이셔널 팅킹 - 전체 버전 - 편집 버전


Lecture, 컴퓨테이셔널 디자인 (Computational Design) -  / 비디오

Lecture, 파라메트릭 디자인(Parametric Design) -  / 비디오

Lecture, 컴퓨테이셔널 디자인의 활용 Lecture, Data and Design - Medium link

                데이터 그리고 디자인 - 전체 버전 - 편집 버전



비디오 버전


DATA & DESIGN 컴퓨테이셔널 디자인 바로가기 - link


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