posted by 아겔-_- 2009.06.28 23:40

자바가 뭐길래...

 

 

주의: 전방에 간만에 DogSound

 

 

2009/06/28 22:51:52

 

몇년간 잠잠하던 이슈였던 "자바를 도대체 왜 쓰나?"라는 플레임이 KLDP에 번졌었다.

 

개인적으로 회사일도 바쁘고, 플레임에 진지하게 끼어드는것도 별로 좋아하지 않는 나로서는 그저 불구경일뿐이었다. 이제는 어느덧 개념있는 몇몇 유져들이 소화한 상태로 보인다.

 

그럼에도 별로 특출난 자바 개발자도 아닌 내가 생각하는 자바의 즐거움, 혹은 강력함에 대해서 많이들 공감하지 못하는 모습에 조금 섭섭하고 안타까운 마음에 졸문을 적는다.

 

 

 

"Guy L. Steele, Jr."란 사람을 아시나요? (http://en.wikipedia.org/wiki/Guy_L._Steele,_Jr.)

Scheme이란 언어의 초기설계에 많은 공헌을 한 분이라고 합니다. 그리고 또 재미있는것은 다음의 경력입니다.:

Steele has served on accredited standards committees ECMA TC39 (ECMAScript, for which he was editor of the first edition), X3J11 (the C language), and X3J3 (Fortran) and is currently chairman of X3J13 (Common Lisp). He was also a member of the IEEE working group that produced the IEEE Standard for the Scheme Programming Language, IEEE Std 1178-1990. He represents Sun Microsystems in the High Performance Fortran Forum, which produced the High Performance Fortran specification in May, 1993.

한 마디로

  • ECMAScript (JavaScript, ActionScript...)
  • C language
  • CommonLisp
  • Scheme

이런 언어들의 표준에 공헌을 하고 계시는군요. 그리고 또 어떤 언어에 공헌을 하고 계실까요? 딩동댕~ 예, 자바입니다.

아주 오래전에 자바의 시작과 함께했던 분이군요. 자바도 어떻게 생각해본다면, Scheme와 유사하죠. (Crystalized) C/C++에서 많은 불필요하고 복잡한 부분을 제거하고, 순수한 객체지향언어로서, 그러면서도 단순함을 읽지 않도록 중용을 지킨 언어라고 생각합니다. (예, primitives가 있지만요. 순수하다고 그렇게 얘기할래요. 스몰톡이 더 순수한 객체지향이지만, 메타클래스와 같은 도를 넘어선 부분이 있지 않을까요? 너무 give-and-take인가요? ^^;)

 

많은 사람들이 이런 발언에 반감을 가질것을 알면서도 제가 이렇게 적는 이유는, 자바가 "성공적"이기 때문입니다. 시장의 대부분을 잠식했다는 성공은 둘째치더라도, 비-개발자를 내면의 포스를 이끌어내는 해커적인 수련이 아니라, 교육과 훈련으로 개발자로 만드는것이 가능한 언어이기 때문입니다.

 

자바를 정말 제대로 이해하고 계신가요? 저는 솔직히 별로 그렇지 못해 부끄럽습니다만, 적어도 '루비스트의 생각'이나 '팩터수련자의 마음'으로 자바를 대하고 있다고 생각하진 않습니다. 무슨말인가하면 자신이 익숙한 세상의 시각으로 자바를 재단하지 않는거 말입니다. 자바는 루비, 리습, 팩터, 스몰톡, 펄이 아닙니다. 자바의 세계에는 그 규칙이 있습니다.

 

예를 들어,

  • 모든것은 객체
  • 그런데 객체의 최소단위는 선언의 단위 : 패키지, 클래스, 인터페이스, 필드, 메서드...

    • 여기서 삐끗하는거죠. 코드블럭은 객체의 최소단위가 아니니까요. 다른 대부분의 다이나믹 언어들과 다르게.
    • 그래서 재사용의 단위는 객체까지니까 좀 더 블럭이 커지죠.
  • 그리고 정적인 타입검사

    • 이것도 불편하다고 생각하면 불편하죠
    • 하지만 반대로 좋은거라고 생각하면 좋은거죠. 컴파일러가 에러를 잡아주고, 좋은 개발환경이 있으니까요.

 

인정할것을 인정하면 나쁘지 않다고 생각합니다.

물론, 루비나 펄, 파이썬, 리습 같은 언어보다 더 간결하고 명확한 코드를 작성하기 쉽지않고, 알고리즘을 기술하는데도 더 복잡합니다. 하지만, 선원에 들어가 참선을 하며 작성하는 코드가 아니라 정말 그때 그때 필요한 코드를 나열하고 그걸 컴파일러와 개발환경에 잡아주는것으로 인한 개발성능은 나름 매력적이고 즐거운 경험입니다. (실용적인)

 

또한 다른 언어에서는 예를 찾아보기 힘든 방대한 라이브러리, 도구가 있습니다.

대부분의것들이 꽤 mature하고 동일한 방법으로 접근이 가능합니다. 오픈소스로. Maven이나 Ivy에 대해서 생각해보세요.

 

개발작업이 단순히 말도 안되는 복잡한 디테일에 사로잡힌것이 아니라 라이브러리들을 모아서 적당한 블럭을 조합해 내는 그런 작업이 되어갑니다. (스몰톡의 아이디어가 무엇이었는지 기억해보세요.)

 

반대로 펄이나 파이썬으로, 혹은 루비, 팩터로 하는 작업들을 생각해보면 재밌습니다.

대부분의 경우에는 그 언어라는 system을 벗어나는일이 적지만, 그래도 자바에 비하면 대부분의 경우 시스템과 언어, 그리고 적어도 c에 대해서 해커적인 지식을 필요로하는 작업이 있습니다. (extension build나 설치...)

 

하지만 자바를 이용하면서 jvm, jar버젼, 그리고 .class파일의 몇가지 규칙을 제외하고는 그 범위를 넘어서는 생각이 많이 필요하진 않습니다.

 

저는 대표적으로 커먼리습에서 ASDF을 이용해서 외부 패키지를 설치하는것과 Maven을 이용해서 외부 JAR을 추가하는것을 비교해보라고 권해드리고 싶습니다.

 

물론, 리습과 같은 언어가 쓸모없다는말이 아닙니다. 저라면 그걸로 충족이 된다면 얼마든지 그런 언어들을 이용할 생각이 있고 그런 언어들을 좋아합니다. 저는 회사에서는 다이나믹언어빠로, #langdev와 같은 곳에서는 자바빠로의 오명을 듣기도 했습니다. 그런데 단순히 그런것들을 무턱대고 자신의 생각의 한계에 가두는것이 안타깝습니다.

 

결국 저희 회사의 주 사용언어는 자바지만, 저의 의견이 반영되어 개발자 면접시 가장 주요한 질문은 "팩터, 리습, 스몰톡, 루비, 파이썬, 펄등을 아는가? 안다면 사용할수있는가"라는 질문입니다. ("평균을 넘어서기", "해커와 화가"에서 잘 알려진 아이디어죠.)

자바개발자보다 파이썬 개발자가 더 낫지만, 반대로 파이썬을 능숙히 할줄아는 자바개발자가 더 좋습니다. 반대도 마찬가지구요. :-) 저희 회사의 기업가치는 그런 개발자들의 합이라고 생각합니다.

 

저는 자바가 좋고, 루비가 좋고, 팩터가 좋습니다.

 

어떤분은 도대체 그따위 개소리를 하는 저의가 뭐냐고 하실지도 모르겠다는 먼 걱정이 듭니다.

펄을 이용해 web crawler을 만들때 회사에서는 투덜거렸었고, 팩터에 관심을 가질때 어떤분께서는 21세기들어 보기드문 큰웃음을 주셨었고, 자바를 옹호할때 나름 개방된 마음이라고 생각했던 사람들은 얼마나 자신들의 생각이 고루한가를 고백하셨던것 같습니다. 그냥 저의 생각은 좋다고 생각하는게 있는데 그걸 당신네들이 느끼지 못하는게 슬픈거지, 그걸 굳이 선포하실 필요는 없다고 생각합니다. 그리고 제가 그동안 공부해온 언어들과 환경들을 생각할때(팩터, 리습, IoLanguage...) 단순히 제가 자바를 좋아한다고 백안시하는건 그게 더 웃기다고 생각합니다. (나름 "신자유주의 좌파"나 "주주총회에 참석하는 노조위원장"같은거죠.;;;)

 

장미는 피처럼 붉고, 코스모스는 어린아이의 뺨처럼 핑크인게 좋습니다.

 

자바는 지금까지 발전해왔고, 앞으로도 발전할것이라고 생각합니다.

Groovy, Scala, JRuby로 그랬고, 다시 한번 새롭게 태어날 Java7, 그리고 JavaFX에서 가능성을 봅니다. :-)

 

 

뭔가 돌을 던지려면 던지고, 말려면 말아라는 식의 글이라 좀 부끄럽군요. 오랬만에 DogSound을 적어봅니다.

이 글은 스프링노트에서 작성되었습니다.

신고

'5.1ch DogSound' 카테고리의 다른 글

어떻게 앞서갈것인가  (1) 2010.06.04
be a Big Fish  (0) 2010.03.26
자바가 뭐길래  (4) 2009.06.28
거짓말과 함정들  (2) 2009.04.16
모든 상황속에서  (0) 2009.02.21
[모자이크] 핵심, 본질, ...  (0) 2008.09.11

티스토리 툴바