안드로이드 앱 강좌를 인터넷으로 들으면서 앱 개발은 두 가지로 크게 나뉜다는 것을 알게 되었다. 하나는 레이아웃, 그리고 다른 하나는 자바 언어를 이용한 프로그래밍. 인터페이스를 만드는 것이 전자이고, 사용자가 어떤 동작을 취했을 때, 그러니까 예를 들어 터치라든지, 스와이프를 한다든지 할 때, 그에 따른 결과나 동작을 어떻게 실행할 것인지를 결정하는 것이 후자인 셈이다. 굉장히 거칠게 두 단계로 뚝딱 나눈 감이 없잖아 있지만, 그래서 앱 개발자들은 이런 단순무식한 구분에 '그게 그렇게 단순한 게 아니에요.' 라고 말씀해 주실 수 있겠지만, 내가 받은 가장 큰 인상은 그러했다.


그래서 그런지 전자에 해당하는 레이아웃 편집은 그렇게 크게 어렵게 보이지 않았다. 왜냐하면 이 부분은 html5과 css (cascading style sheets)를 초보 수준으로 어느 정도 알고 있는 나로서는 안드로이드 레이아웃에서 지정하는태그나 속성이 기존에 알고 있던 것과 조금 다르더라도 그냥 비슷하게 때려맞추기(?) 식으로 비교를 하며 이해할 수 있기 때문이다. 예를 들어 Linearlayout의 horizontal 속성은 flex item들을 flex-direction을 row로, flex-wrap을 nowrap 한 것이나 비슷하지 않은가.


하지만 후자에 해당하는 자바 프로그래밍은 전혀 알고 있는 게 없었다. 클래스가 뭔지, 상속받는다는 것은 뭔지, 왜 이렇게 점을 찍어대는 것인지, 감지자는 무엇이며... 20여년 전에 웹에서 사용되는 자바스크립트(JavaScript)를 보면서 뭐 저런 마법같은 게 다 있을까, 신기해 하던 적이 있었는데 마치 그 느낌이다. 그래서 이 부분을 정확하게 익히지 않으면 앱 개발은 불가능할 것이라는 생각이 들어 앱 프로그래밍 책 말고도 자바 프로그래밍 언어 입문서를 같이 구매했던 것이다. 책 이름은 '이것이 자바다 - 신용권의 Java 프로그래밍 정복'.


지난주부터 책을 보기 시작했는데, 이 글을 홈페이지에 남기는 지금 시점 기준으로 200 페이지를 단숨에 읽고 실습을 마쳤다. 다행히 학부 때 나름 혼자 공부해보겠노라고 C 언어 책을 사서 본 적이 있는데, 이 때 웬만한 기본적인 개념들(byte, int, Boolean, if나 while 같은 조건문)은 익힌 적이 있었기 때문에 1권의 초반부는 굉장히 쉽게 넘어갈 수 있었다. 아마 중반부부터는 자바만의 이야기가 점점 가미되면서 더 어려워지겠지만, 현재까지는 매우 순항중이다. 게다가 심지어 재미있다! 기왕 시작한 공부, 열심히 해야지.


원래는 앱 개발을 위해서 Java를 배우자는 목표였고 그것 외에는 별 생각을 하지 않고 책을 산 것이었다. 그런데 책을 읽다보니 프로그래밍을 익히는 것은 과학을 공부하는 것을 너머 더 나은 사회를 만들어 가기에 참 좋은 활동이라는 생각이 들었다. 이게 왠 뜬금없는 소리인가 하겠지만, 체계적이고 조건과 그 결과가 완벽하게 논리적으로 짜여 있는 프로그래밍 세계에서는 오류를 용서하지 않는다. 물론 우리의 사회는 헛점과 부족함이 많은 인간들의 비논리적인 판단으로 돌아가는 사회이다. 하지만 그럼에도 우리 사회에는 금융이라든지 행정 업무라든지 그런 감정적이거나 비합리적인 판단이 용납되지 않는 사회 분야들이 반드시 존재하기에 관계자들이 이런 프로그래밍 방식을 머리 한 켠에 두고 꺼내 쓰는 것은 필요한 일이라고 생각한다. 또한 디버깅(debugging)을 하는 프로그래머들의 사고 태도는 사회 생활 중 발생하는 여러 가지 문제들을 꼼꼼하게 되짚고 해결하며 재발을 방지하는 시스템을 구축하는 데 굉장한 도움이 될 것이며, 사람이 아닌 시스템이 중시되는 각종 관료 및 조직 사회를 이끌어 가는 사람이라면 반드시 이 과정을 좀 유심히 고찰할 필요가 있다고 생각한다. 예를 들어 디버깅을 원활하게 하기 위해서 어떤 규칙이나 규약을 둔다든지, 어느 누가 보더라도 쉽게 이해할 수 있도록 구조를 설계한다든지.


그런데 한가지 더. 책을 읽으며 이것저것 자판을 두들기다보니 당장 10년 이후의 우리 연구자들의 매양 하는 일이 이런 프로그래밍을 하는 것이 아닐까 하는 발칙한 생각을 해 보았다. 몇 줄의 코딩이면 조건을 지속적으로 바꿔가면서 명령문을 반복적으로 실행하는 것을 보노라니, 이것이야말로 화학을 연구하는 사람들이 매일같이 실험실에 나와서 해야 하는 일 아닌가 하는 생각이 들었다. 처음에는 10:1로, 그 다음에는 10:2로, 그 다음에는 10:3으로... 그렇게 얻어진 데이터를 통해 최적의 값을 확인하고 그것의 이론적인 배경과 맞는지 검증하고 다음 실험으로 넘어간다. 아직 인공지능이 새로운 실험을 설계하는 수준의 통찰력을 획득하기까지는 시간이 조금 필요하겠지만, 일련의 과정을 반복적으로 효율적으로 해내는 것에서는 인간이 따라올 수 없는 수준으로 완벽하게 하고 있다. 그렇다면 잘 설계된 프로그래밍 코드를 따라 움직이는 실험로봇이 우리 연구실에 도입된다고 가정할 때, 우리의 능률과 정확도를 향상시킬 수 있는 방법은 무엇일까? 사실 '가정'이 무색할 정도로 이미 사회 곳곳에 이러한 존재들이 그들의 영역을 점차 확장시키고 있다. 그런 점에서 우리 연구책임자들이 할 수 있는 최선의 일은 러다이트 운동(Luddite movement)을 벌이는 것이 아니라, 그것들을 적극적으로 우리의 연구 영역으로 끌어들일 수 있어야 한다는 것이다. 외국인을 데려다가 일을 시키려면 영어를 할 줄 알아야하듯이, 기계의 언어를 우리도 언젠가는 알아야 하며, 그것을 언제까지나 컴퓨터 공학 전문가들에게만 맡길 수는 없는 노릇이니 우리도 어느 정도 익혀두어야 한다. 자바가 모든 것을 다 아우를 언어가 되지는 못하겠지만, 훗날 연구실 운영에 가장 적합한 프로그래밍 언어가 연구자들 사이에서 널리 홍보될 때, 지금 익히고 있는 자바를 잘 이해하게 된다면 좀 더 친숙하고 빠르게 그 새로운 세상에 적응할 수 있지 않을까? 마치 영어를 잘 알고 있으니 스페인어를 더 쉽게 접할 수 있고, 한국어를 잘 알고 있으니 일본어가 더 쉽게 느껴지는 것처럼 말이다.


참, 한 가지 더 느낀 게 있다. 세상엔 여전히 배울 게 많고, 난 배우는 것을 천성적으로 참 좋아하더라는 것이다. 그리고 놀랍게도 거기에는 '언어'라는 비슷한 공통적 특질이 있다. 고분자화학은 자연의 언어 중 하나이고, 스페인어는 많은 사람들의 언어 중 하나이고, 재즈는 음악의 언어 중 하나이고, 그리고 자바 역시 컴퓨터 프로그래밍 언어 중 하나이다. 말년에는 다른 일을 하는 것보다 비교언어학을 연구하되 외국어끼리의 비교가 아닌 화학과 입말, 민속음악간의 어떤 연결고리를 찾는 연구를 하면 어떨까? 예를 들면 왜 스페인어권에서는 화학이 비교적 덜 발달할 수밖에 없었는지를 혹시 그들의 언어에서 유추할 수는 없을까? 러시아 정교회 음악의 멜로디와 러시아어 문장 구조 사이에는 어떤 관계가 있었을까? 터무니없는 말처럼 들리지만, 과연 아무런 관계가 없을까, 사실 그게 연구 아니겠는가.



For the sake! Of the call!

-fluorF-