on
모던 프로그래밍에 대하여
모던 프로그래밍에 대하여
최근 들어 모던하다, 모던 언어다, 모던 프로그래밍이다 란 말들을 책이나 포스팅에서 자주 접하게 되었다. 뜻이 어떤 것인지는 정확히 모르지만, 문맥의 뉘앙스가 긍정적다 보니 좋은 의미일 것이라고만 생각만 해오고 별 신경 쓰질 않았는 데.. 한가히 잉여롭게 멍 때리다가 문득 생각해 보길 도대체 프로그래밍에서 어떤 것이 모던한 것인지 궁금해지기 시작했다.
모더니즘에 대하여 위키 에서 찾아 보면, 아래와 같이 이야기하고 있다.
모더니즘(Modernism) 또는 근대주의(近代主義)는 종래의 전통이나 권위 등에 반대하여, 근대의 과학이나 문화에 의해서 자유·평등한 근대인으로서 살아가려는 개인주의의 입장을 말한다. 나아가서 기계 문명이나 도시 생활의 근대성 또는 미학적 근대주의와 서양 미술 전반의 보편적인 감각을 중시하는 경향도 지칭한다.
위키를 참조해 보면 모더니즘은 20 세기 이후에 일어난 예술 운동을 가리킨다고 한다. 전통적인 19세기 예술에 대한 전통적인 골격에 구애받지 않는 표현을 추구했다. 일반적으로 모더니즘이란 다음과 같은 특징을 가지는 데,
1. 현대적인 것
2. 20세기 초 각 분야에서 일어난 실험적인 예술 운동. 현대 예술이라고도 한다.
3. 19세기 말, 로마 가톨릭교회에서 일어난 운동으로, 현대에 맞는 신앙을 주장했지만 이단으로 몰렸다.
4. 스페인과 포르투갈의 모더니즘 운동은 모데르니스모를 참조.
근 현대사상을 반영한 트랜디한 프로그래밍을 뜻하지 않을까를 생각을 볼수 있다. 문제는 결국 트랜디하다는 것이 모더니즘이라 하면 트랜디한 모더니즘이란 무엇인걸까.. 좀 더 아리송 해지는 상황인데, 우연 찮게도 디자인 쪽에서 힌트를 얻었다.
디자인에서는 모던디자인, 현대적 디자인이라 함은 간결함(Simple)을 두고(Simple is best 라는 말처럼) 이야기를 많이 하는 걸 볼 수가 있다. 이 간결하다는 뜻은 본연의 목적에 맞는 것 외를 배제하자는 의미로 불필요한 치장은(시각적, 기타 옵션적인..) 배제하고 목적(컨셉)에만 집중 하자는 디자인 철학이다. 이것과 같이 맞물려서 프로그래밍에 대입해 보면 프로그래밍 관점에서도 이와 비슷하게 접근해보면 요즘들어 부쩍 ‘간결해진 코드 스타일의 패러다임’이 이와 맞아 떨어지는 모습을 볼 수 있다.
자바의 경우에는 Java 8 부터 언어적으로 드디어 모던해졌다는 얘기를 심심치 않게 들을 수 있는 데, 이에 대해서는 나도 같은 생각이다. 예전의 코딩 스타일과 요즘의 코딩 스타일을 비교해보면 많이 간결해졌음을 느끼곤 한다. 간결한 람다식의 지원과 스트림 등의 지원은 예전 자바의 모습에 비하면 굉장히 간결해지고 파격적으로 변했다고 생각 한다.(자세한 것은 Java8 Cheatsheet를 참조.)
자바 말고 다른 예를 들어보면 자바스크립트에서는 ES6 부터 많이 모던 해졌다고 얘기를 많이 하는 것을 볼 수가 있는 데, let과 const, 람다식과 같은 애로우 펑션(Arrow Functions : 애로 가 아니다, 절대루 ), 클래스 등이 생겼다. 기존에도 있던 기능이지만 번거롭고 많은 문제를 야기하던 부분을 타 모던 언어의 장점들을 융합해서 답을 찾으려고 하는 것을 볼 수 있다. (자세한 것은 ES6 CheatSheet 를 참조.)
포스트 모던(포스트 모더니즘)에 대하여
모더니즘이 이상적인 간결함을 이야기 한다면, 포스트 모더니즘은 모더니즘의 반 성향이라고 불리운다. 도대체 포스트 모더니즘은 도대체 무엇일까? 위키 에서는 아래와 같이 이야기 하고 있다.
포스트 모더니즘 프로그래밍은 이미 존재하는 코드를 사용하는 것이며 많은 코드를 직접 작성하는 것이 아닙니다. 이것은 대개 서로 붙이거나 다른 사람들의 코드를 구성하는 형태입니다. 이것은 오늘날 “엔터프라이즈”소프트웨어의 현실입니다. 포스트 모던 프로그래머들은이 사실을 인식하고 그것이 사실이 아니라고 가정하는 대신에 모든 프로그래밍 문제를 한 번에 해결할 수있는 프로그래밍 언어 나 패러다임을 생각해냅니다.
말이 조금 두리뭉시하지만, 대충 이해를 해보면 ‘재활용성’에 대해서 이야기하는 것 같다. 그런데 이는 기존에도 있는 당연한 개념이 아닌가 싶은 데, 왜 최근 들어 갑작스레 ‘포스트 모더니즘 스타일 코드~’, ‘포스트 모더니즘 랭귀지’ 라고 하는 걸까? 더 구글링을 해보았다, 찾아 보니 명쾌한 답을 내놓은 좋은 포스트들이 있었다. (1) 개발을 위한 개발 생산성 향상 파노라마, (2) 짜고치는 고스톱 스크린캐스트, 그리고 포스트모더니즘, (3)스크립트 언어의 새로운 보석 - Ruby
이 포스트들은 ‘루비 온 레일즈’ 을 많이 이야기 하고 있다. 여기서 잠시 루비에 대해서 짚고 넘어가 보면, 대부분의 사람들이 루비에 대해 말하기를 생산성이 좋다, 루비는 기존의 것을 최대한 활용하는 스크립트 언어다 란 식의 인상으로 이야기를 많이 하는 걸 볼 수 있다. 루비 온 레일즈는 세상에 첫 등장하면서 걸었던 슬로건으로 루비를 통한 쉽고 빠른 웹 어플리케이션 개발 이었다고 한다. 이에 웹 어플리케이션을 1달 걸릴 것을 일주일만에 만들 수 있다는 이야기를 덧붙였고 이를 증명해서 많은 화제가 되었다. 물로느 어디까지나 ‘개인 블로그’ 형태의 작은 어플리케이션 구현이지만, 대부분의 설정이나 로직들을 생략하면서 쉽게 바로 구현하는 데에는 나름 센세이션 했다고 한다. 이런 느낌에서 이 루비 언어에 힌트를 얻어 포스트 모더니즘을 다시 생각해보면, 포스트 모더니즘은 ‘설정보다는 관례를 따른다는’ 말처럼 실용적인 이야기를 한다고 볼 수 있다. 자바를 예롤 들면 ‘스프링 부트’와 같이 대부분의 설정이나 반복되는 로직들을 하나의 패키징해서 쉽고 빠르게 개발자에게 어플리케이션을 구현할 수 있게 도와주는 헬퍼 유닛을 예로 들 수 있겠다. 결국 프로그래밍이란 것이 생각의 구현을 위한 수단일 뿐이고, 그 과정이 쉽고 빠르다면 그게 장땡아닐까? 하는 철학이다. 이 철학은 위에서 잠시 얘기한 ‘이미 존재하는 코드를 사용하는 것이며 많은 코드를 직접 작성하는 것이 아니다’ 란 재활용이란 뜻이 바로 이 말임을 알 수가 있다.
어떻게 보면 포스트 모더니즘이란 단어 때문에 모더니즘에 안티성향을 가지는 철학이라 생각할 수도 있지만, 결국 두 철학 모두 개발자를 위한 ‘생산성’ 을 목적으로 두고 있는 것을 알 수 있다, 모더니즘은 간결해진 코드는 실수에 대한 안정성과 직관적인 코드를 통해 품질을 높일 수가 있게되는 것이고, 포스트 모더니즘은 기존에 놓여진 것들을 쉽게 조합하고 다룰 수 있는 환경으로 생산성을 높이자는 것이다.