상세 컨텐츠

본문 제목

1. AutoCAD User로부터 Programmer로 향한 첫 발걸음

IT & Programming/LISP 공부

by 그림아이 2022. 1. 23. 08:00

본문

반응형

1. LISP 이란 도대체 무엇인가?

 

LISP List Processing 약자로 인공지능 분야의 소프트웨어를 작성하기 위해 사용되는 프로그래밍 언어이다. 네이버 백과 사전에 나온 LISP 대한 설명을 잠시 인용하면 다음과 같다. “리스프 처리 언어라고도 부르며, 미국 MIT J.McCarthy 교수 연구팀이 개발하여 1960년에 발표했다. 리스트 (list : 자료구조의 하나로 순서가 매겨진 0 이상의 원소들의 집합) 형태로 데이터를 처리하도록 설계되었는데, 데이터와 프로그램이 모두 S- (S-expression) 이라고 하는 일반화된 리스트 (generalized list) 형태로 기술되므로 프로그램이 데이터처럼 취급되는 것이 특징이다.”

본인은 개인적으로 이렇게 어려운 말들은 모른다.

결국 LISP 인공지능 분야를 위해 개발된 언어로 데이터 처리에는 최고의 언어라고 하겠다. AutoCAD 프로그램 역시 데이터를 기반으로 소프트웨어이므로 궁합이 가장 맞는 프로그램 언어일 것이다. AutoCAD에는 1986 R6 R7 사이 중간 출시 단계에 처음으로 LISP 탑재되어 소개되었다.

초기 AutoLISP 2000이상 버전에서 VisualLISP으로 진화하였다. 새로운 함수들이 대거 추가되었고, 다른 응용 프로그램들과의 호환이 더욱 강력해졌다. ActivX 개념이 도입되었으므로 VBA 함께 탑재된 버전이다. 따라서 2000 버전이 출시될 당시 받았던 충격은 실로 말로 표현하기 힘들었다. 따라서 R14 아직도 사용되는 가장 이유도 역시 충격을 받아들이기 힘든 사람들이 많았기 때문이다. AutoCAD 혁명과도 같은 일이었으며, 시대의 변화에 발맞추는 전환기였다.

 본인이 강좌에서 소개할 함수들 기본적인 함수들은 AutoLISP부터 사용되던 함수이고, 보다 어려운 함수들은따로 설명할 테지만 – VisualLISP 함수들이다.

 

 

2. Prologue – 저자의 경험담 당부의

 

본인은 AutoCAD 10 전인 R10부터 사용하였고, LISP 본격적으로 개발하기 시작한지는 불과 3 정도밖에 되지 않았다. 하지만 실력에 있어서 우리나라 안에서 손가락 안에 꼽힌다고 자부하고 있다.

 지금 LISP 시작하려는 초보 프로그래머들에게 해주고 싶은 본인의 경험담 얘기는 전쟁에서 이긴 장수의 무용담처럼 과장된 것들이 아니다. 저자 역시 AutoCAD 사용자로서 최고라고 생각하며 한참 동안 매너리즘에 빠져있을 , LISP 발을 들여놓게 되었다. 그때의 막막함과 답답함을 아직도 생생하게 기억하고 있으며, 지금 느낌을 받을 초보 프로그래머들의 마음을 100% 이해한다. 누구의 도움도 받지 않았으며 오로지 혼자서 모든 문제를 해결한 덕분에 여러분들에게 쉽게 다가갈 있다고 믿고 있다. 따라서 본인은 모든 방법을 사용해서 공부해보았고 공부 방법들에 대한 각각의 장단점들을 모두 알고 있다. 앞으로 강좌는 저자가 직접 부딪혀 공부했던 방법 가장 좋은, 그리고 가장 단기간에 공부할 있는 방법을 토대로 진행될 것이다.

강좌를 시작하기 전에 말해두고 싶은 것이 있다.

 

첫째, 도움말을 적극 이용하라.

www.gocad.co.kr 에서 가끔 이런 질문들을 있다. “LISP 관련된 책들 중에서 추천 해주세요.” 질문에 대해 프로그래머들의 반응은 엇갈린다. 직접 권해주는 사람이 있고, 책은 그다지 필요가 없다고 하는 사람도 있다. 맞는 말이다. 본인도 집에 있다. 누군가 저와 같은 질문을 한다면 항상 본인은 이렇게 대답한다. “추천해 주고 싶은 책은 없습니다. 다만 어떤 책이든지 권쯤 집에 두는 것이 좋습니다. 하지만 절대로 책으로는 공부하지 마십시오.”

 도대체 무슨 소리인지 감을 잡는 분들이 많을 것이다. 본인은 대형 서점을 일주일에 번씩 들러 책을 고르는 학구파다. LISP 관련된 책들 마음에 드는 책은 솔직히 권도 없다. 하지만 책이 필요한 이유는 옆에 두고 사전처럼 써먹을 일들이 가끔 있기 때문이다. 책이 있다고 손해 이유는 절대로 없다. , 책이 없다고 불편한 일도 별로 없다는 것이다. 굳이 사겠다면 말리지는 않겠지만, 사지 않아도 뭐라고 한다는 뜻이다.

 그렇다면 무엇을 보고 공부하느냐고? 당연히 강좌로 공부하시면 된다. 책의 역할은 도움말이 대신해 준다. 소프트웨어의 가장 좋은 선생님은 바로 개발자들이 직접 만든 도움말이란 사실을 절대로 잊으면 된다.

 

둘째, 일정 수준 이상의 영어실력은 LISP 실력 향상에 절대적이다.

 영어를 못해도 프로그램을 배우는데 그리 지장은 없다고 믿는 사람들이 많다. 실제로 영어 못해도 프로그램 짜는 사람들도 있다. 제목을 다시 읽어 보라. 말을 다시 풀이하면 영어를 못하면 분명 한계가 있다는 것이다. 영어를 못하거나 앞으로도 영어 공부할 의사가 전혀 없다고 해도 LISP 공부하는 데는 무리가 없다. , 잘할 생각은 말아야 한다.

  이유는 여러 가지가 있다. 첫째, LISP이나 AutoCAD 미국 프로그램이란 사실. 사실은 매우 중요하다. 함수, 변수 모든 프로그램은 영어로 되어 있고, 프로그램의 알고리즘 또한 한국적이지 않다. 둘째, 도움말과 에러 메시지. 물론 한글로 도움말을 구해서 수는 있다. 하지만 읽어보면 알겠지만 정확히 해석되지는 않았다. 그리고 한글 AutoCAD 사용할 수도 있다. 그렇다고 해도 모두 영어로 것을 한글로 해석한 것으로 완벽한 의미 전달이 되지 않는다. 셋째, 인터넷의 활용. 우리 나라의 사이트에도 분명 많은 강좌나 소스를 제공하는 곳이 많다. 하지만 역시 해외 사이트가 양적, 질적인 면에서 월등하다. 그런 곳들을 다녀보려면 역시 영어 실력이 필요하다.

 본인은 강좌에서 영어를 적극 활용할 것이며 때론 설명도 영어를 곁들여 때도 있을 것이다. 그렇다고 어려운 단어는 하나도 없으며, 머리 싸잡아 매고 영어 공부할 필요도 없다. 단어만 넘어가면 매번 보던 단어가 중복되는 것이 프로그램 영어이기 때문이다.

 

셋째, 꾸준히 공부하라.

  부분은 아무리 강조해도 지나치지 않는다. 굳이 LISP 공부가 아니라 하더라도 적극적인 삶의 자세라고 있겠다. 공부를 시작하기 전에 계획을 세울 필수적인 것은 하루에 정도씩 시간을 할애할 있는지에 대한 부분이다. 30분에서 1시간 정도가 가장 문안 하다고 본다. 꾸준히 하다가 일정 수준 이상의 실력이 되면 일씩 밤새우는 것은 누가 옆에서 말려도 본인이 알아서 하게 되어 있다.

 

넷째, 묻고, 묻고, 묻고 물어라.

  부분 역시 공부하는 자의 기본적인 자세이다. 전문가에게 항상 물어본다는 것은 공부 시간을 단축시킬 있는 유일한 방법이다. 물론 묻기 전에 혼자서 해결하고자 노력하는 고통의 시간은 어느 정도 감수해야 한다. 그리고 묻다 보면 자신이 생각한 것보다 훨씬 빠른 지름길을 수도 있다. LISP 뿐만이 아니라 프로그램은 개발자의 성격이 그대로 묻어난다. 따라서 세상에 같은 프로그램이라도 내용을 보면 절대로 같을 수가 없는 것이다. 수많은 변수들과 함수 사용법 개발자 자신의 특유의 노하우가 배어 있기 때문이다. 저자 본인은 이런 적도 한번 있었다. 일주일간 A4 2 정도로 새로운 함수를 개발한 적이 있었는데, 나중에 다른 전문가의 글을 보니, 이미 12글자 짜리 함수가 AutoCAD내에 기본 함수로 내장되어 있었다. 바로 이런 차이 때문에 정보와 지식은 공유되는 것이 서로에게 좋다는 것이다. 그리고 항상 질문하는 자세는 끊임없는 지적 호기심과 욕구를 뜻한다. 지적 호기심과 욕구가 없다면 공부할 마음이 없다는 뜻이기도 하다. www.gocad.co.kr LISP 게시판을 적극 활용하면 된다.

 

다섯째, AutoCAD 실력은 LISP에서도 그대로 반영된다.

 어쩌면 당연한 얘기이다. LISP 발을 내디딘 사람은 분명 AutoCAD에서 인정 받는 사람일 것이다. 그렇지 않고 무작정 LISP 덤벼들면 낙마하기 좋다. 왜냐하면 기본적인 명령어들과 AutoCAD 프로그램 자체의 구조적인 흐름을 간파하고 있어야 한다. 기본 명령어들의 흐름을 익히는데 가장 좋은 것은 바로 script 이용하는 것이다. 예를 들어 Line 명령어를 수행할 enter 또는 spacebar 누르는지 알고 있는가? 대화창을 띄우지 않고 command 상태에서 text style 수정하는 방법을 알고 있는가? 따라서 이런 식의 실력이 뒷받침 되면 LISP 실력을 높이는데 시간을 단축시킬 있다. 물론 못하더라도 나처럼 부딪혀서 에러가 나면 해보고, 고쳐서 다시 해보고 하다 보면 자연히 수도 있으나 시간과 인내심이 절대적으로 필요하다. 성격 좋은 사람은 포기하기 좋은 것이 바로 프로그램 언어이고 LISP 또한 크게 다르지 않다.

 그리고, 가장 중요한 이유 하나는 이제 AutoCAD 시작하는 사람이나 AutoCAD 못하는 사람이 LISP 접하면 도무지 개발할 것이 없다. 정확하게 말하면 무엇을 개발해야 될지도 모르기 마련이다. 당연한 얘기다. 상당수의 LISP 초보들이 겪는 시행착오 하나는 개발하고자 하는 프로그램들이 대부분 AutoCAD 내의 기본 기능 또는 express menu 포함된 경우가 많다는 것이다. 물론 공부를 위해 알면서도 개발하는 것은 상관없으나 모르고 개발한다면 이만 저만한 시간적, 육체적 낭비가 아닐 없다. 그러므로 일정 수준 이상의 AutoCAD 실력을 겸비한다면 LISP 공부하기엔 더할 나위 없이 좋은 조건을 갖췄다고 있다.

 

여섯째, LISP 배우려 하는지 알아야 한다.

 저자 본인이 LISP 독학으로 공부하게 계기는 AutoCAD 사용시 단순 반복 작업의 불합리함 때문이었다. 어느 회사건 자체의 정형화된 틀을 가지고 있고 그에 걸맞는 형식을 갖추고 있다. 그런데 업무라는 것이 언제나 그렇듯이 한참 작업을 하는 도중에 수정되는 경우가 빈번하다. 이럴 수정하기 위해 수많은 인력들이 달려들어 시간과 정성을 쏟아야 한다. 그렇더라도 사람이 하는 이상 항상 실수가 나오기 마련이다. 이에 대해 달을 야근하면서 인내심 하나로 버티는 자신이 존경스럽기까지 했고, 다른 방법들을 찾다가 결국 LISP 공부하게 되었다. 회사 때문에 공부할 시간이 넉넉하지 못해서 결국 매일 12시부터 1시까지 시간씩 공부하곤 했다. 그러다가 점점 공부에 할애하는 시간이 늘어나 밤을 새우기도 했었다.

 조금 어려운 얘기를 하자면, 예전에 AutoCAD 개발되기 전에는 모든 설계는 양팔에 토씨를 끼우고 사람들이 직접 했었다. 이후로 컴퓨터가 세계적으로 보급되고, 설계용 프로그램인 AutoCAD 개발되면서 같은 양의 일을 최소한의 인원과 최소한의 시간으로 최고의 결과물을 만들어내기 시작했다. 그리고 대량 생산이 가능해졌다. 그런데 AutoCAD만으로는 예전에 사람들이 직접 작업하던 시절을 크게 벗어나지 못했던 것이 사실이다. 인력 면에서나 시간 면에서 그다지 효과를 내지 못했다. 왜냐하면 에러의 종류도 또한 많아졌고 그에 대한 수정 작업이 생기면서 정확성 면과 기술적 측면에서는 답보 상태에 빠져있었던 것이 사실이다. 사실 4 본인이 지금의 회사에 입사하던 시절에는 R14 사용하면서 100장짜리 plotting 사람이 혼자 멍하니 앉아서 enter 누르고 있었다. 이게 무슨 짓인가 싶었다.

 그래서 본인은 처음 script 공부했고, LISP 점차 눈을 뜨게 되었다.

 바로 정확성과, 업무 효율의 극대화, 최소의 인원과 시간으로 최대의 효과를 얻기 위해서였다.

  결과 실제로 예상했던 이상의 효과를 거두었고 부수적으로 프로로서의 몸값 극대화라는 보너스도 함께 받게 되었다. 나는 토목 공학과를 졸업하고 자격증도 가지고 있는 엔지니어이다. AutoCAD ‘CAD 아르바이트 전유물인 것처럼 생각하는 우매한 사람들이 아직도 많다. 하지만 엔지니어가 AutoCAD 다루지 못하면 절대로 회사는 발전할 없다. 앞으로 설계직에서는 그런 식의 비정규직을 찾기가 힘들 것이다. 왜냐하면 안정적이지 않은 직업 특성에 박봉까지 겹쳐져 오래 동안 하기 힘든 직업이기 때문이다. 이런 이유로 대부분의 고급 전문가들은 자신의 시간을 많이 할애할 있는 회사를 찾거나, 프리랜서로 활동하는 경우가 대부분이다.

 따라서 이제 시작하는 단계에 있어서 엔지니어가 LISP AutoCAD 관련 프로그램을 익혀둔다면 장기적으로 본인의 몸값을 배로 올릴 있고, 회사 입장에서도 몫을 사람이 해낸다면 그만큼 최상의 방법은 없다고 생각할 것이다.

 결국 생각해보면 AutoCAD 3rd party 프로그램들은 – Civil 3D, Land desktop, Arch desktop, Mech desktop – AutoCAD 사용하던 기술자들이 자신들의 단순 반복작업을 없애고, 자신들이 원하는 기능들을 추가해서 확장시킨 지극히 사용자화된 프로그램이라 있다.

 따라서 해당 분야에 전문 지식이 없다면 프로그램 개발에도 어느 정도 수준에 올라서면 한계에 부딪히기 마련일 것이다.

 

일곱째, 기존의 소스들을 분석하고 해석하라.

  방법 이외에 가장 단시간에, 그리고 가장 정확하게 LISP 공부할 있는 방법은 없다고 확신한다. 처음 시작할 때의 막막함에 대한 보상은 어떤 것도 해줄 수가 없다. 예를 들어 책을 보며 , , 그리고 글자, 글자 따라 하다 보면 이보다 막막할 수가 없다는 것을 누구나 느끼게 된다. 책의 구성은 대부분 VLISP editor 메뉴에 대한 설명, 그리고 함수 사용법과 예제가 전부이다. 함수의 종류를 차근차근 살펴보고 예제를 따라 해본 다음 이런 생각을 갖게 된다. “그래서, 이제 어떻게 하라고? 함수들로 프로그램을 어떻게 만드는 거야?” 저자 역시 답답함에 가로막혀 한동안 허탈했던 적이 있었다. 게다가 LISP 책들 대부분이 기계 설계 분야의 예제들을 수록해놓았기 때문에 토목 엔지니어인 저자로서는 피부에 닿는 예제가 개도 없었다. 그렇다고 기계 설계 분야의 엔지니어들 역시 책을 보며 득을 봤다는 말은 들어본 적도 없다.

 그래서 결국 찾아내어 저자 본인이 택한 방법은 바로 기존 소스들을 해석해 보는 것이었다. 나중에 들은 얘기로 여러 전문가들도 이런 방법을 택하고 있었다는 사실에 보다 확신을 갖게 되었다. 본인은 그저 호기심 삼아 답답한 마음에 해본 것뿐이었다. 직장 상사에게서 얻은 LISP 하나를 가지고 달을 밤을 새웠다. 소스를 print해서 지하철이고 집이고 회사고 앉아서 밑줄 긋고, 주석을 달고, 형광펜으로 칠해가며 공부했다.

  방법이 좋은 이유는 가지로 설명할 있다. 첫째, 에러가 없고 실제로 여러 사람들이 사용하는 프로그램을 분석함으로써 알고리즘을 자연스럽게 체험하고 배울 있다. 둘째, LISP 운용 원리와 규칙 등을 쉽게 배울 있다. 셋째, 여러 가지 함수들을 또는 도움말을 보면서 공부할 있고 때로는 이런 함수말고 다른 함수는 어떨까 하는 의문으로 응용력이 자연스럽게 생겨난다. 넷째, 앞으로 개발하고 싶은 프로그램에 대한 아이디어가 떠오르게 된다. 다섯째, 다른 개발자의 노하우를 접할 있는 유일한 기회이다. 다섯째, 차후에 개발하게 프로그램들의 훌륭한 샘플이 되어줄 있다.

 마치 영어를 해석하는 것처럼 해석하면 된다. 이런 식으로 분석하다 보면 시간은 단축되고 어려운 소스들을 구해서 수도 있게 된다. 본인은 처음 시작할 소스 분석에만 3개월을 들였다. 정확하게 세어보지는 않았지만 대략 30 정도는 해석했다고 기억된다. 물론 시간과 개수가 중요한 것은 아니다. 지금 생각으로는 10 정도만 해도 충분하다고 생각한다. 저자 역시 5 정도 분석한 앞으로 개발하고 싶은 프로그램 아이디어가 떠올랐고, 그와 관련된 소스들을 찾아 발췌해보고, 때로는 그대로 베껴보고, 에러가 나면 다시 찾아서 고쳐보고 등을 반복하면서 30개쯤 분석했을 이미 개발한 프로그램이 개나 되었다. 물론 처음 개발한 프로그램이라 볼품 없었지만 어느 누가 개발한 프로그램보다 멋져 보였고 아직도 허접한 프로그램을 고이 간직하고 있다.

 결국 글을 읽는 독자 여러분들이 이런 방법을 택해서 시간과 정열을 쏟는다면 3개월에서 4개월 사이에는 누구 못지 않는 훌륭한 프로그램을 개발할 있다는 것이다. 물론 저자보다 명석한 두뇌를 갖고 계신 분들이라면 달이면 충분하다.

 

 

  번째 강좌를 마치며 당부하고 싶은 말은, 앞으로 진행될 강좌 중에서 현재 예정대로라면 소스 분석 요령에 관한 강좌는 뒤에 이어질 것이다. 전에는 여러 책들과 같이 필수 함수에 대한 소개와 DXF 코드, 그리고 시스템 변수에 관한 내용이 포함될 것인데 만약 글을 읽는 독자 분들이라면 굳이 구입하지 않아도 좋다는 말을 하고 싶다. 왜냐하면 강좌들의 내용은 도움말이나 책에 나온 것들과 크게 다르지 않을 것이기 때문이다. 하지만 책이 없거나 강좌를 계속 꾸준히 받고자 하는 분들이라면 구입해두는 것도 좋을 것이라 생각된다. 앞에서 언급한 것처럼 사전처럼 계속해서 있다는 말을 이해 못하는 분들이 계실 것이다. 이유는 어떤 프로그래머라도 모든 함수를 기억하지는 못한다. 저자가 기억하는 함수들을 개수로 세어보면 20개에서 30 정도밖에 안된다. 대부분은 그때그때 찾아서 사용하게 된다. 따라서 책이든 도움말이든 앞으로의 강좌든 어떤 식으로든 사전처럼 항상 찾아볼 있는 무엇인가는 가지고 있어야만 한다. 따라서 성질 급한 독자 분들이라면 지금 글만 읽고도 충분히 또는 도움말과 함께 지금 바로 소스 분석에 들어가도 된다는 뜻이다. 분석하다가 모르거나 막히는 부분이 있다면 댓글을 남겨 주시면 최선을 다해 답변해 드릴 예정이다.

 

  강좌는 자유롭게 배포되지 않길 바란다. 저작권 문제 때문이지만 독자 자신의 몸값과도 직결된 문제이기 때문이다. 혼자 조용히 공부해서 몸값을 올리길 바란다. 지식은 공유되어야 하지만 이런 식의 저자의 백만불짜리 노하우는 공유되지 않고 깨어있는 소수의 독자에게만 물과 소금이 되길 바란다.

 

LISP이라는 바다

 

 

728x90
반응형

관련글 더보기

댓글 영역