이런 글을 쓰기 애매한 초보 프로그래머 입니다만, 전부터 프로그래밍에 대한 핵심을 정리하고 싶었습니다.
언어
언어는 표현의 수단입니다. 표현은 나도 할 수 있지만, 상대방도 할 수 있습니다. 언어가 있기에 사람들끼리 소통, 즉 커뮤니케이션을 할 수 있는 것입니다.
프로그래밍 언어도 마찬가지 입니다. 컴퓨터와 프로그래머, 프로그래머와 프로그래머 사이를 연결해 주는 고리, 프로그래머는 프로그래밍 언어를 통해 자신을 표현하고 다른 프로그래머와 코드로 이야기 합니다.
이러한 언어적 관점에서, 우리는 우리가 왜 언어를 배워야 하는지 언어를 배우면서 추구해야 할 오의가 무엇인지 정의해 볼 수 있습니다.
1. 언어는 컴퓨터 뿐만이 아니라 사람과도 통신하는 수단이므로, 읽기 쉬워야 합니다.
2. 언어는 자신을 표현할 수 있는 강력한 도구이자 자신의 생각을 정리할 수 있는 수단이므로, 간결하고 튼튼하며 논리적으로 표현할 수 있는 능력이 중요합니다.
3. 언어 유희라는 말이 있습니다. 실용성을 극한으로 밀어 붙인 언어의 끝에는 아름다움이 있습니다. 더 넣을 것도 뺄 것도 없는 군더더기 없는 상태를 말하죠. 즉, 실용성을 근간에 둔 아름다움을 추구해야 합니다. 언어는 소통의 도구이면서 동시에 인간이 개발한 가장 훌륭한 장난감 입니다:D
논리
가끔 컴퓨터 바탕화면이 지저분한 친구들을 보게 됩니다. 그런 친구들의 공통점은 정작 중요한 순간에 필요한 것을 찾는데 너무 많은 시간을 소모한다는 점입니다.
우리는 언어를 사용하여 자신의 논리를 쌓아 올릴 수 있습니다. 이 때 기본은 정리입니다. 정리되지 않은 논리는 무너지기 쉽습니다. 왜 그럴까요? 프로그래밍의 복잡도 그래프는 2차 함수의 그래프처럼 처음에는 그런데로 견딜만 하다가 어느 순간이 지나면 스스로 감당할 수 없는 마지 노선을 만나게 되어 있습니다. (사실 프로그래밍에 한정된 이야기는 아니죠-ㅁ-; 눈 앞의 불만 끄다가는 언젠가 이런 상황이 오는 것이 인지상정입니다.) 하지만, 처음부터 논리가 견고하고 예외가 없으며, 혹시 있을 지 모르는 예외에도 유연하다면, 또한 그 모든 논리들이 일목 요연하게 정리되어 있다면, 항상 복잡도의 그래프를 수평하게 유지하는 것이 가능합니다.
이런 상태를 유지하는 것은 매우 힘겨운 일이지만, 동시에 매우 가치있는 일입니다. 여러분의 프로그램에 버튼을 하나 추가하는 데 10분이 걸렸는데, 1년 뒤에는 8시간이 걸린다면, 여러분은 반듯이 1년 뒤에 끝이 보이지 않는 야근의 늪에서 허우적 거리게 될 것이기 때문입니다. 반대로, 여러분이 원칙을 유지하고 복잡도를 유지했다면, 비록 버튼을 하나 추가하는데 처음부터 1시간이 소모되었겠지만, 1년 뒤에에도 여전히 정시에 퇴근하여 여자 친구와 맛있는 저녁을 먹을 수 있게 될 것입니다. (여러분은 좀 더 열정적이기 때문에, 하루에 1000 개의 버튼을 추가면서도 여전히 뭔가 생산적인 다른 것들을 연구하고 있을 지도 모르겠군요:D)
패러다임
프로그래밍 언어의 패러다임이라는 말이 있습니다. 언어마다 어떤 고유의 사상이 있다는 것이죠. 생각해 보세요. 현존하는 프로그래밍 언어는 수천종에 달하며 지금 이시간에도 저물어 가는 언어들이 있습니다. 왜 그 많은 것들이 필요할까요?
여러가지 이유가 있겠지만, 그 근본에는 패러다임이라는 것이 있습니다. 생각이 다른거죠. 우리는 다 생각이 다릅니다. 같은 문제도 해결하기 위한 접근과 논리는 셀 수 없이 많다는 것이죠.(학생 시절 여러분의 레포트가 copy and paste 로 작성되었다는 것을 교수님이 귀신같이 알아내던 핵심 노하우 입니다. 원래 같을 수가 없는 겁니다:D )
문제를 해결하기 위한, 보다 적절한 접근 방법을 찾기 위해 언어 자체를 바꿔야 하는 순간이 올 수도 있습니다. 이 때 새로 태어난 언어는 뭔가 다른 패러다임을 가지게 됩니다. 이 과정에서 패러다임은 급격한 변화를 맡이할 수도, 혹은 기존 패러다임에서 조금 변형된 실무적, 혹은 튼튼한 구조로 바뀔 수 있습니다.
C 언어의 경우 흔히 절차적인 언어라고 말합니다. 논리를 순서대로 늘어 놓는 것을 말하죠. 하지만, 잘 생각해 보세요. 단순히 논리를 늘어 놓는 언어는 치명적인 단점이 있습니다. 김상무 상무 상 무상 유상무.. 와 같은 개그를 업무 시간에 하루종일 해야 하는 상황이 발생할 수 있습니다. 이 상황은 정작 본인의 상황이 되면 그다지 재미가 없습니다.
물론 C 언어는 그렇게 단순한 녀석이 아닙니다. 이런 상황을 개그라고 생각 안하고 심각하게 받아들였죠. 그래서 함수라는 것을 준비해 두고 있습니다.
함수는 문장에서 동사의 역활을 합니다. 나 공부하러 간다, 친구가 숙제하러 갔다, 사장님 골프치러 가신다, 등등 다 간다 아니겠습니까? 여러분이 C 언어를 만드는 입장이었어도 아마 함수라는 녀석을 넣었을 겁니다. 생각해 보세요. 나 XX 하러 간다를 1년 내내 타이핑을 하는게 직업이라면, 언젠가 결국 다들 어딘가 간다라는 것을 깨닫게 될 것이고, 이걸 좀 더 쉽게 할 수 있는 방법을 생각해 내지 않겠습니까? 그래서 이런 식의 함수를 추가하게 되는 겁니다.
간다(누가, 어디/모하러)
-- 다음 이시간에..
태그 : programming



덧글
스미레 2009/09/24 16:44 # 답글
잘 보았습니다.^^;;스미레 2009/09/24 18:03 # 답글
프로그램 공부를 시작해 보려고요~시작이 반이라고 해지만
아무것도 몰라요ㅋㅋㅋ
신동호 2009/09/25 02:42 # 답글
하하; 좋게 봐주셨다니 기쁘군요. 프로그래밍 입문을 축하드립니다:D 즐건 하루 되세요.2009/10/13 08:37 # 답글
비공개 덧글입니다.신동호 2009/10/16 22:59 # 답글
ㅎㅎ;링크준 이글루 잘 봤습니다, 너무 재밌어서 한참을 봤네요:D