|
효율적인 프로그래밍 방법 (3) 2012/01/27 14:02, 분류 : 분류없음
3. 쉬어가며 - 프로그래밍에서 무엇이 가장 중요한 덕목인가? 2. 자기가 원하는 소프트웨어를 만들라. 3. 기술적 장애는 중요치 않다. 4. 유명한 소프트웨어와 꼭 같이 제작할 수 있는 기술 기반이 있다고 남들이 만든 것을 따라가지 말라. 결론은 맨 처음으로 돌아간다. 이 홈페이지의 Byedodo 소프트웨어들은 그러하지 못하였기에 늘 후회한다. 효율적인 프로그래밍 방법 (2) 2012/01/11 22:51, 분류 : 분류없음
2. 고급 프로그래밍
서론에서 말한 작은 단위, 낮은 복잡도의 프로젝트가 아닌, 현재 Byedodo 프로그램과 같이 복잡도가 높은 소프트웨어 프로젝트에서 효율적인 프로그래밍에 대해 말해본다. 가장 큰 차이는, 개념적 구성이 우선된다는 것이다. 초기 Byedodo 프로그램은 직관적 프로그래밍이라고 한다면, 현재 Byedodo 프로그램은 개념의 구조화를 기반으로 하는 구조적이고 개념적 구성을 기반으로 한다. 여기서 중요한 프로그래밍 방법 하나는, 개념 구조를 클래스 구조로 이동시키는 작업이다. 즉, 개념 : CLASS = 1 : 1 로 대응된다. 예를들어 보자. 심볼릭 연산 엔진인 Byedodo mathAcademy 프로그램에서는, 수, 복소수, 다원수, 대수, 그리고 수많은 특이 함수를 [느긋한 계산법]을 통해 함수형 언어로 처리하며, 자체 구현된 랭귀지와 그 인터프리터 엔진, 디버깅 엔진을 탑재하고 있다. 따라서, 이 프로그램을 구현하기 위해서는, 수학적 개념 공간의 상당 부분을 컴퓨터가 이해할 수 있는 구조로 바꾸는 작업이 필요했다. 수학적 개념 공간을 구현하기 위해, 나는 다음과 같이 클래스 구조를 대응시켰다. 최상위 - 인터프리터 엔진 + 컴파일러 + 디버깅 엔진 2위 (차위) - 랭귀지 의미 CLASS 3위 - 수학 연산 엔진 (행렬, 그래프, 함수, 대수, 복소, 수론 등) 4위 - 함수 엔진 (미적분, 고급 해석 함수, 수론 함수, 대수 함수, 일반 연산 등) 5위 - 함수 의미 CLASS 6위 - 대수 의미 CLASS 7위 - 수 의미 CLASS 수 의미 CLASS 가 최소 단위이며, 이것은 정수형, 복소수형, 실수형, Fraction 형, 가우스 정수형, 확대정역, 확대체, 다원수형, 무한(Infinity) 등의 다양한 직접 계산가능한 [수]를 모두 표현할 수 있는 CLASS이다. (부동소수점형이 아니라, 무한소수점단위, 무한자리수단위를 기본으로 하는 구조이다) 7위부터 거꾸로 가보면, 이것이 어떻게 수학적 공간으로 대응되는지 알 수 있다. 수의 확장으로, 대수 구조가 존재하고, 대수 구조를 기반으로 함수 구조가 존재한다. 함수 구조를 기반으로 실제 처리를 담당하는 함수 엔진이 있고, 그 위에 모든 수학 연산을 처리하는 수학 연산 엔진이 들어간다. 이 엔진은 [느긋한 계산법]에 따라 실제로 값을 요구하거나 변수에 값이 할당될 때까지, 오로지 대수 그 자체를 대상으로 계산한다. 즉, Integral( Cos( X^2 - 1) - e^Y + 1) 등을 그 구조 그대로 다른 수학적 구조와 계산해 가는 것이다. (우리에게 Integral( Cos( X^2 - 1) - e^Y + 1) 은 개념적 수식이지만, 소프트웨어에겐 이 식은 클래스의 연쇄된 구조이다) 그 위에, 소스 코드의 랭귀지의 구조를 기술한 CLASS가 있고, 그 위에 해당 소스 코드를 실제로 컴파일하는 엔진과 디버깅 엔진이 최상위에 존재하는 것이다. 추가로, 외부 Database 가 있고, Node 구조의 문서 저장 시스템이 있다. 또한 옵션이나 그래프 인터페이스, 디버깅 표현, 첨부 파일 등의 여러 UI 적 요소가 결합된다. 이렇게 복잡한 구조는 즉각적으로 구현하기 어려우며, 대신 개념과의 1:1 대응 클래스 구조를 제대로 잘 작성하는 작업이 최우선이 되는 것이다. 실제로 mathAcademy 작업 시간을 봐도, 클래스 구조 설계에 1년이 걸렸지만, 그외 코딩 부분은 도움말까지 포함하여 3개월안에 마무리 되었다. 결론적으로 난이도가 높아질 수록, 코딩 작업에 걸리는 시간보다는, 전체 구조를 제대로 설계하는데 대부분의 시간이 주어진다는 것을 알 수 있다. 그리고 훌륭한 수준의 CLASS 구조를 설계하는 것이, 사실상 좋은 소프트웨어를 효율적이고 빠르게 제작하는 지름길이고, 또한 가장 어려운 작업이기도 하다. 다음에는 저러한 클래스 구조를 어떤 식으로 정의하여야, 실제 머리속으로 구상하는 복잡한 현실상의 개념을 클래스로 표현할 수 있는지에 대해 이야기하려 한다. <계속> 효율적인 프로그래밍 방법 2012/01/10 01:48, 분류 : 분류없음
1. 들어가며.
대상에 따라 효율적인 프로그래밍 방법론은 다르다. 어떠한 복잡도의 프로그램을 만드는가? 에 따라 접근하는 방법이 다르기 때문이다. Byedodo 초창기. 처음 석달간 만든 것은, matheToy와 대정수 및 수론 계산기, 행렬 계산기, 2-3차원 그래프, 다항식 및 대수, 복소 계산기, 진화 알고리즘의 인공지능 바둑 프로그램, 트리뷰 기반 매쓰에디터(레일노트), 일정관리 내서랍 프로그램, 오프라인 웹브라우저 웹주머니, 온라인 영상, 음악 감상 프로그램인 온에어(소금 플레이어) 까지. 총 12개 프로그램이었다. 이 초기 12개 프로그램을 석달이라는 시간내에 빠른 속도로 제작하고, 설치 관리자를 픽스하고, 온라인에 배포하는데에 사용된 프로그래밍 방법론은, [테스트없이 끝까지 코딩하는 것]이었다. 테스트는 중요하지만 시간이 걸리는 작업이다. 그 작업은 전체 작업을 효율적으로 하기도 하지만, 쓸데없이 길게 늘어뜨리기도 한다. (이것 저것 기웃거리고 더 나은게 없나 고민하게 만드는 심리적 요인도 있을 것이다) 그래서, 초기 12개 프로그램을 제작할 때는, 컴파일 테스트없이. 마치 논문 작업을 하듯이, 오직 [소스 코딩 + UI 디자인]을 지속적으로 하였다. (실행해 보지 않고 코딩만 하는 형태이다) 며칠간 어느정도 소스 작업이 완료되어 기본 형태가 충분히 갖춰지면 본격적인 테스트 작업이 진행되었고, 이 [테스트-디버깅]은 코딩에 비해 상대적으로 쉬우면서도 (머리를 쓸 필요가 없으면서도) 흥미로운 작업이 되었다. 내가 어디에서 논리적 오류를 일으켰는지 찾아가는 것이 흥미있었던 기억이 난다. 하지만 초창기 Byedodo 프로그래밍의 코드 수준은 총 10만 라인 정도에 지나지 않았기 때문에 저렇게 무작위적인 (무설계의) 코딩이 통했던 것 같다. 지금 얘기해 가려는 것은, 보다 복잡해진 현재 상황에서의 효율적인 프로그래밍 방법론에 대한 것이다. 그것은 프로그래밍이라기 보단, 논리적으로 구성하기 어려운 수준의 복잡한 구조에 대해 어떻게 정의하고 개념화하며, 그 상호관계를 어떤 구조로 풀어내어야 하는지에 대한 개략적인 글이다. <계속>
토닥 토닥 아이의 등을 두드리면,
자장 자장 노래를 부르다 잠이든다. 숑아지 숑아지 어루 숑아지. 어마 쇼도 어루쇼. 어마 다만네. 바람이 차가워 코가 빨개지는 어떤 12월의 늦은 밤이 되면, 팥죽 한그릇 먹고 싶다. 도란 도란 모여 팥죽에 들어갈 하얀 알알이 구슬을 빚는 시절의 기억. 그리 오래전이지 않은데, 시간은 수십년이 흘러있다. 내가 할 수 있는 것과, 내가 할 수 없는 것. 조용히 마음을 닫는다. 어느샌가 모두의 마음은 닫혀버렸다. 세상이 그렇게 만들었다. 자살하고 또 자살하고 또 자살하는 세상. 우리 아이들의 행복한 미래를 기대한다. 하지만, 이 땅은 그런 희망조차 사치롭게 한다.
한국은 IT 강국이라는 말을 지난 10년간 참 많이도 들었다.
사실 석유한방울 나지 않지만, 우리가 반도체를 팔아서 벌어들이는 돈은 왠만한 산유국의 석유 수출액에 못지 않았다. 그러나 반도체 외에 IT 강국이라고 부를만 한 것이 없지 않았나 생각한다. ![]() 도표 출처 : 디지털타임즈 왼쪽 도표를 보면, 우리나라 IT 산업이 얼마나 국가 경제에 도움이 안되는가? 하는 걸 눈으로 볼 수 있다. 이러한 IT 산업이 과연 우리나라의 주력 산업이라고 부를 수 있는지 의심스럽다. IT 산업이 우리나라에 맞다고 본 이유는, 1. 노동집약적 2. 시설집약적 3. 기술집약적 4. 고부가가치 이기 때문이었다. 그러나, 현재 우리나라의 IT 산업은 고용면에서 상대적으로 낮은 걸 봐서 노동집약적이지 않으며, 과다한 시설 투자에 실패 위험도가 상당하다. (실례로 평판 디스플레이 산업은 엄청난 시설투자비를 과연 뽑아낼 수 있을지 의문스러운 상황이다) 부품 국산화율 36%만 문제가 아니라.. 퀄컴과 같이.. 소프트웨어 등의 기술 부문에서 외국 기업에 내어주는 로열티가 어마어마하다는 것. 삼성 등이 최근 조단위의 엄청난 돈을 들여 소프트웨어 연구단지를 한국 등에 만들었지만 소프트웨어는 시설투자로 뽑아내는 차원이 아니기 때문에 과연 어느정도 성과를 얻을지 의심스럽다. 최근에는 고부가가치 산업에서 마치 IMF 이전의 한국 제품 특유의.. 1만원 팔면 1원 남는 제품같은.. 극도로 저부가가치 제품으로 떨어지는 중이다. 평판디스플레이나 반도체나... 기술은 세계 1위임에도 그만한 시장 지배력을 갖지 못하고 있다. ... 결국 한국의 IT 산업은 주력 산업이 아닌... 저부가가치의 낮은 경제 효용성의 비주력 산업으로 전환되고 있는 것으로 보인다. 그럼, 대안 산업이 무엇일까? 한국이 자랑하던 'IT 강국 한국'의 끝발이 그저 그런 정도로 식어가고 있다면, 차세대 동력을 어디서 얻어야 할까? 정부는 작년부터 SW 산업을 국가 주력 산업으로 키우겠다고 단언하고 나섰지만.. 눈 씻고 찾아봐도 그럴 기미조차 안 보인다. 아니.. 주력 산업으로 만들기 전에, 우선 IE에서만 돌아가는 정부 사이트부터 고쳐야 할 것 같다. 그리고, 그렇게 강력히 키우겠다는 SW 산업이란게 주로 대기업의 SI쪽인 것 처럼 보이는데.. 그게 무슨 SW 산업인가.. SW는 한국형 문어발 대기업이 파고들기에 어려운 곳이다. 삼성이 대기업임에도 왜 CAD 프로그램을 자체 개발하다가 말아먹었는지.. 그리고 삼성이나 여러 SI 쪽 소프트웨어 소스 코드를 보면 완전 노가다에 이것 저것 바느질해서 기워 넣은 코드인데.. 그런걸 기술이라고 할 수 있는지.. 또, SI는 대기업이 늘 발주받고, 실제 일은 하청에 그 하청에 그 하청에 그 하청에 그 하청 업체가 일을 하는... 그런걸 차세대 핵심 SW 산업이라고 부르기엔 부끄럽지 않을까? 등등. 아무튼, 정부는 SW 산업을 육성하겠다는데.. 그 쪽 담당 공무원들은.. 자기들 컴퓨터에서는 인터넷 사이트가 잘만 보이는데.. 왜 Active-x가 나쁘다고 하는지 이해하기도 어렵고.. 이해도 안되고.. IE 안쓰고 꼭 별나게 FF나 딴 거 쓰는 네티즌들이 밉고.. 만나면 패주고 싶고.. 대강 그런 유머러스한 상황이 아닌가 보인다. 소프트웨어 테스트 기술 2007/02/23 08:14, 분류 : 낡은 생각들
SW테스팅 전문인력 양성 시급 (전자신문)
위의 기사를 보면서, 한국의 소프트웨어 테스트 분야가 어느 정도 발달해 있는지 궁금해 진다. 몇년전에는 소규모 테스트 전문 업체가 있었는데 별로 신빙성이 높아보이지 않았다. 그들이 내세우는 테스터들은 보통 주부나 학생들이었는데, 실제 사용자층과는 거리가 있었다. 소프트웨어의 품질 부분은... 보통은 개발자가 그나마 잘 알고 있고, 그보다는 실제 매니아급 사용자가 더 많은 문제를 알고 있다. 개발자가 매니아급 사용자이기도 하다면 가장 이상적이다. (이 홈페이지의 소프트웨어가 그런 경우이다) 그런 경우는 버그 발생률이 현격히 낮아진다. 하지만 일반적으로 개발자가 자신이 사용할 목적으로 만드는 경우는 드문 경우이므로, 전문 테스터나 매니아급 사용자들의 리뷰들이 필요한 것이다. (보통의 한국 개발자는 개발에도 시간이 빠듯해 보인다.. 개발자 라인에서 세부적인 반복 테스트는 없다고 보면 맞을 것이다.) 품질 관리에서 테스트 부분이 가장 중요하고, 적절한 테스트 범위와 분량, 전문성, 책임 등이 요구된다. 요즘에는 자동화된 테스트 기술이 많이 발달했지만... 그것은 여전히 완성도에 문제가 있고 또한 잡아낼 수 있는 버그의 종류도 한계가 있다. sw 업체에서는 여전히 손과 눈으로 일일히 검사하는 방법이 일반적이다. F-35 개발시에도 실제 비행에서 일어난 '버그'를 통해 내장된 비행 소프트웨어를 디버깅했다. 테스트가 어느정도 안정적으로 이뤄지지 않은 소프트웨어의 경우 버그가 득실댄다고 표현해도 무방하겠다. 그들을 한국인이라고 부를 수 없다 2007/02/04 22:37, 분류 : 사람
동티모르는 인도네시아에서 해방되기까지,
30여년동안 강압적인 통치아래 놓여있었다. 그들은 자그만치 30여년간을 전 국민이 집단 수용소에서 생활했다. 거기서 배급받고 강제 노동했으며 인도네시아의 지배를 정당화하는 교육을 받으며 자라났다. 2000년 마침내 UN의 감시 아래 국민투표가 진행되었을 때, 5%의 사람들이 독립을 반대했다. 이른바 인도네시아에 빌붙어서 잘먹고 잘살아온 소수인들이었다. 그들은 기득권을 잃는 것이 싫었고 결국 독립 반대 투쟁(?)을 시작했다. 말이 투쟁이지, 같은 민족을 무차별 학살하고, 강간하고, 어린아이까지 모조리 처참하게 죽였다. 당시 동티모르 국민들은 군대도 경찰도 없었고, UN 평화유지군 역시 자기들을 방어하기에도 힘든 최소한의 (수십명 정도) 치안유지군 밖에 없었다. 그들은 더이상 도망갈 곳이 없어 성당(동티모르는 천주교가 국교이다)에 피신한 마을 주민 전체를 가둬두고 통째로 불태워 죽이기도 했다. 결국, 그런 만행을 보다 못한 많은 세계인들이 들끓고 나서야 마지못해 UN은 (미국은 인도네시아와의 이해관계로 UN의 참여를 반대했고, 중국, 러시아, 유럽까지도 그러했다) 평화유지군을 찬성했고, 몇년만에 그들은 소탕될 수 있었다. (해방 후 한국 전투 병력의 최초 파병이 이 때 있었다) 만약, 한국이 일본의 무조건 항복에 의한 해방이 아니라, 동티모르처럼 투표에 의한 해방이었다면, 과연 친일파들이 고분고분히 인정했을까? 아닐 것이다. 그들은 꼭 같이 총칼을 들고 독립을 지지하는 대다수의 사람들 무차별로 학살하려 했을 것이다. 실제로, 해방 직후 일어난 제주도 4.3 사태에도 그들이 있었고, 실제 일본인 300여명도 고용하여 토벌대로 참여시켰다. 그리고 제주 주민 수만명을 강간하거나 죽이거나 불구자로 만들었고 주민의 50% 이상을 살던 집을 버리고 산속으로 도망다니게 만들었다. 동티모르의 그들과 무엇이 달랐으며, 인도네시아에, 일본에 빌붙어 부와 명예를 얻은 그들에게 민족이란 애시당초 무슨 의미가 있었을까? 독재 시절에 빌붙어 사학과 언론계 등에서 친일의 명맥을 이어오던 그들이 요즘 뉴라이트 등을 통해 다시 규합해서 일제시대는 행복했다고, 위안부는 날조라고, 우리 민족은 일제시대에 감사해야 한다고 떠들며 일본 우익 세력과도 손을 잡으려고 한다. 차라리 동티모르처럼, 독립은 그토록 처참한 살육으로 시작되었더라도, 그들이 어떤 인간들인지 진작 알 수 있게 해주었다면 해방후 60년이나 지난 지금까지 저런 꼴을 보는 일은 없지 않았을까?
모든 것은 나중에 보면 참 쉬워보인다.
어떤 물리학과 학생은 자신이 그 당시에 태어났다면 충분히 아인슈타인 이론을 만들 수도 있었을 것이라고 말하기도 한다. MS 빌게이츠의 초창기를 보면, 누구를 그자리에 갖다 두더라도 성공할 수 있었을 것 같은 생각이 든다. 한글도 자신이 조선시대에 태어났으면 만들 수 있을 것 같다고 생각한다. 0의 발견도 자신이 인도에 태어나서 먼저 발견할 수 있었을 것이라고. 에베레스트, 북극점, 혹은 어떤 과학적인 시도와 그 결과물들에 대해, 그렇게 쉬운 것을 왜 못했을까? 하고 안타까워하기도 한다. 그리고 남이 이룩한 것에 대해 폄하하고 별 것 아닌 것이라고 말하기도 한다. 콜롬부스는 자신의 아메리칸 대륙 발견을 아무나 할 수 있었던 일이라고 폄하하는 뭇사람들에 대해, 달걀을 세워보라고 말함으로써 그들의 어리석음을 일깨워주려고 했다. 그리스의 한 유명한 수학자는 (탈레스였던가?) 이론을 발표할 때마다, 아무나 만들 수 있었던 수학 이론이라고 폄하하는 풋내기 수학자들(정작 그들은 아무 것도 발표하지 않는다) 때문에... 나중에는 자신의 수학 이론을 애써 이해하기 쉽도록 만들지 않았다. 남들이 이해하기 쉽도록 재편성하고 편집하는 작업이 얼마나 힘든데, 그걸 빼버렸으니 오히려 발표량은 더 늘어났다. 그러자 다른 풋내기 수학자들이 그의 수학은 너무 심오하여 이해하기 어렵다고 칭송하기 시작했다고 한다. 하고 나면 너무나 쉬워보이는 것. 그게 바로 세상의 일이다. 모든 것이 다 그러하다. 하지만 그 뒤에는 사람들의 어리석음을 단숨에 넘어선 뛰어남이 있다. 올블은 왜 애플, 구글, MS만 얘기하는가? 2007/01/25 09:36, 분류 : 사람
올블로그에 올라오는 글,
그리고 인기글, 메인에 분류되는 글에서, Ms, 애플, 구글 이 셋 중 하나라도 존재하지 않는 경우는 없었다. 1년 365일 내내 이어지는 찬양가. 대한민국 누리꾼들이 모두 돈을 받지 않았는지 의심스러울 정도이다. 매니아라고 하기엔 너무 전반적인 현상이다. 그러니 그 인기글을 따라하려고, 또 그와같은 수많은 애플, 구글, Ms 찬양 글들이 반복적으로 양산되는 상황이다. 매니아라고 한다면, 해당 Os나 검색 시스템, 마케팅 경쟁과 제품 기능 전반에 대해 꿰고 있어야 하겠지만, 거의 대부분 그것도 아니다. 단지 '나도 맛보았다'는 것이거나, '나도 들었다', '나도 한마디 하자' 정도의 수준에 머무른다. 그런 사람들을 매니아라고 부르기엔 뭣하다. 명품족이라는 단지 소비자적인 '관심과다층'이거나, 또, 무슨무슨'빠' 라는 말에 어울리지 않는가? 그들 중 대부분의 사람들이 그러한 부류에 들어간다고 생각한다. 그리고, 나 역시 그러할지도 모르겠다. 아니면, 우리에겐 SW나 IT에 관련하여 얘기할 수 있는 주제가 너무나 없는 것일지도. 새로운 유형의 소프트웨어란. 2007/01/24 22:24, 분류 : 낡은 생각들
web2.0 이라고 말하는 한때 지나가버린 유행의 결과물로서, 소프트웨어를 서비스 관점에서 제공되는 도구로서 보는 경향이 생겨났다.
이러한 경향은 구글을 중심으로 하여 적어도 하나의 트랜드를 구성할 수 있을 것이라 보인다. 전통적인 소프트웨어 관점이 급격한 변화는 일어나기 어렵다. 단지 사용자와 맞닿는 그 경계선의 구역에서만 미묘한 변화들이 (언제나 그랬던 것처럼) 자주 발생하는 것이다. "소프트웨어는 많은 파워풀한 기능과 사용하기 편리한 UI, 그리고 호환성과 대중성, 선점의 기득권과 브랜드 등등으로 판단되는 것이다." 라는 명제를 초월하는 새로운 유형의 소프트웨어란 무엇인가? 라는 질문의 해답은 구하기 어려운 문제이다. '소프트웨어'가 지금처럼 딱딱하고 물과 기름처럼 서로 섞이기 어려운 상황에서는. |

