'Tip'에 해당되는 글 164건

  1. 2010.07.13 *잠자리 눈
  2. 2010.07.13 *상상력
  3. 2010.07.13 *오픈소스 3
  4. 2010.07.13 *코드 리뷰와 리팩토링 2
  5. 2010.07.13 *문서
  6. 2010.07.13 *주석
  7. 2008.05.12 윈도우 한글설정하기
  8. 2008.04.28 원 월드 티켓
  9. 2008.04.28 [week&CoverStory] 공연 매니어가 찍었다 ‘여기가 명당’ [중앙일보]
  10. 2008.04.28 포토샵 팁

*잠자리 눈

2010. 7. 13. 21:05 from Tip
반응형

잠자리의 눈은 아주 작은 눈이 여러 개 모여 있는 구조로 되어 있다.
이것을 '겹눈' 이라고 한다.
이 겹눈 덕분에 잠자리는 하나의 사물을 아주 다양하게 바라볼 수 있다.
프로그래머도 이런 겹눈을 가지는 것이 좋다.
여기서 말하는 눈은 육체의 눈이 아니라, 마음의 눈을 말한다.
우리가 마음으로 사물을 바라볼 수 있게 해 주는 것은 상상력이다.
상상력이 곧 마음의 눈인 것이다.
이런 마음의 눈을 흩눈이 아니라, 겹눈의 형태로 가지는 것이 좋다.
우리의 상상력은 하나인데 어떻게 겹눈을 가질 수 있을까?
잠자리는 눈을 여러 개 가지고 있어서 한 번에 다양하게 볼 수 있지만, 우리의 마음의 눈이라는 상상력은 하나이기 때문에 한 번에 하나만 볼 수 있다.
그렇기 때문에 우리가 잠자리처럼 보려면 오랜 시간을 두고 여러 번 보는 수 밖에 없다.
잠자리의 눈이 병렬 처리1)가 가능한 구조라면, 우리 마음의 눈은 순차 처리2)만 가능한 구조다.
그렇기 때문에 우리는 문제나 프로그램에 대해서 여러 번 바라볼 필요가 있다.
동일한 프로그램에 대해서 나의 시각에서, 동료의 시각에서, 고객의 시각에서, 바라보는 훈련을 하면 된다.
또한 나의 시각에서 바라볼 때에도 프로그램의 외면 중심으로도 보고, 내부의 구조 중심으로도 보는 훈련도 필요하다.
이런 식으로 '겹눈 훈련'을 거듭 반복하다 보면 습관이 되고, 더 오래 훈련하게 되면 본능이 되어 버린다.
그 때부터는 의식적으로 애쓰지 않아도 자연스럽게 겹눈으로 바라볼 수 있게 된다.
이 때쯤이면 '통찰력'이라고 불리울 수 있는 능력이 생긴다.
어떤 프로그램을 보는 순간에 그것을 다 분석하지 않아도 프로그램에 대해서 깊이 있는 이해가 느낌(feel)으로 다가온다.
프로그래머는 바로 이런 '느낌에 의한 순간적인 분석력'이라고 불릴 수 있는 '본능적인 겹눈'을 갖추도록 노력할 필요가 있다.
 
1) 병렬 처리(parallel process):동시에 두 가지 이상의 일을 처리하는 것.
2) 순차 처리(serial process):한번에 한 가지 일만 처리하는 것.
   그렇기 때문에 병렬 처리로 한 번에 처리할 수 있는 두 가지 일이 있다면, 순차 처리로는 두 번에 걸쳐서 처리하게 된다.

06월 29일 18시 47분 28초

Posted by Mr.Martin :

*상상력

2010. 7. 13. 21:04 from Tip
반응형
프로그램을 작성하는 사람들은 근본적으로 상상력이 풍부한 사람이라고 할 수가 있다.
우리 눈에 보이지 않는 결과물을 마치 눈에 보이는 것처럼, 이미 이루어진 것처럼 가정하고 그 목표를 향해서 접근하기 때문이다.
특히 상상력이 풍부한 프로그래머는 자신이 이미 프로젝트를 마친 것처럼 행동하고 말하곤 한다.
예를 들면 '내가 말이야, 그 프로그램을 작성했기 때문에 나머지 프로세스가 잘 진행될 수 있는 거야'라거나, '이런 식으로 논리를 구성했기 때문에 문제가 생긴 거야'라는 식이다.
아직 문제가 발생하지도 않았는데, 이미 문제가 발생한 것처럼 말한다.
그들의 머릿속에는 이미 완성된 상태의 시스템이 현실처럼 그려져 있기 때문이다.
이런 풍부한 상상력을 가진 사람은 프로그램도 잘 작성한다.
이미 미래의 상(image)을 현실처럼 바로 보고 있기 때문에 프로그램을 구체적이고 현실적으로 작성할 수 있는 것이다.
그렇다면 이런 상상력을 기르기 위해서는 어떻게 해야 할까?
우선은 *경험*이 있어야 한다.
한 번 게임 프로그램을 작성해 본 경험이 있는 사람이라면, 또 다른 게임 프로그램을 작성할 때에 그 결과를 예상하기가 쉽다.
한 번 시스템 통합 프로젝트를 진행해 본 사람이라면, 또 다른 시스템 통합 작업의 결과를 쉽게 예측하고 상상해 볼 수 있다.
이처럼 *경험*은 우리의 상상력을 키워주는 중요한 요소다.
경험을 쌓기 위해서는 어떻게 해야 할까?
방법은 한 가지 뿐이다.
많이 작성해 보고, 많이 참여해 보는 것뿐이다.
 
노력에 비해서 보수가 적더라도 중소기업에서 취업하려는 프로그래머들의 태도는 여기서 기인한다.
경험을 통해서 현금과는 비교할 수 없는 값진 '예측 능력', '예상 능력'을 얻고자 하는 것이다.
그러므로 할 수만 있다면 최대한 많은 프로젝트에 참여하도록 하고, 최대한 '많고 다양한' 프로그램을 작성해 보라.
나는 여기서 '다양한'이라는 용어를 사용했다.
게임 프로그래머라고 해서 늘 게임 프로그램만 작성해서는 안 된다.
경험이 중요하지만, 정확하게 말하자면 '풍부하고 다양한 경험'이 중요한 것이다.
그러므로 게임 프로그래머라면 그림도 그려보고, 시나리오도 작성해 보고, 3D 그래픽 프로그램도 만져보고, 만화도 많이 보고, 직접 게임장에 가서 게임을 경험해 보는 것도 좋다.
여행도 상상력을 자극할 것이다.
정리하자면, 프로그래머는 다양하고도 많은 경험을 통해서 풍부한 상상력을 길러야 한다는 것이다.

06월 26일 19시 02분 01초
Posted by Mr.Martin :

*오픈소스

2010. 7. 13. 21:02 from Tip
반응형
오픈소스(open source)8)가 프로그래머의 생존 기간을 흔들고 있는 것은 사실이지만,
오픈소스가 그렇게 어두운 면만 있는 것은 아니다.
오픈소스 프로젝트로 만들어지는 리눅스9) 덕분에 우리는 아주 저렴한 가격에 웹호스팅10)을 할 수 있다.
오픈소스로 만들어진,
PHP 클래스11)를 이용하면 웹(world wide web) 상에서 실행되는 응용 프로그램들을 아주 쉽게
개발할 수 있다.
이 밖에도 오픈소스를 이용하면 예상 외로 할 수 있는 일들이 많아진다.
나는 오픈소스 자체를 매우 긍정적인 시각으로 바라본다.
인터넷이라는 웹에서 공유하는 전세계 프로그래머들의 '연구성과'라고 본다.
이 연구성과 자체가 상용으로 쓸 수 있는 프로그램이 되지는 못한다고 본다.
물론 그 중에 몇몇, 예를 들면 리눅스나 마이시퀄(MySQL)12)과 같은 성공적인 경우도 있지만 말이다.
그런 경우를 제외하면 대부분의 오픈소스는 완결되지 않은 상태로 남은 연구 결과물이다.
오픈소스는 프로그래머들의 작업에 도움이 되는 연구결과물들을 공통의 자산으로 만들어 놓는 역할을 했다.
우리는 이런 공통자산 덕분에 프로젝트를 쉽게 진행할 수 있게 되었다.
만약, 게임 도중 사용될 소규모 워드프로세서를 만들고 싶다면,
오픈소스 사이트13)에서 워드프로세서 소스(source program)를 가져다가 수정하면 된다.
ISP 업체14)의 서버 어플리케이션15)을 만들고 싶은가? 오픈 소스 사이트에서 하이버메이트(hibermate)와
스트러츠를 가져다 쓰라.
새로운 핸드폰에 쓸 소규모 임베디드16)운영체제를 만들고 싶은가?
오픈소스 사이트에서 임베디드 리눅스를 가져와서 연구하고 보강하여 쓰라.
오픈소스가 개발자의 밥그릇을 뺏어 간다고 불만을 토로 하기 전에, 그것을 적극적으로 활용해보도록 하자.
오픈소스는 단기적으로 개발자를 힘들게 하겠지만, 그것을 적극적으로 활용할 의지와 능력이 있는
고급 개발자에게는 둘도 없는 개발파트너이다.
 
8) 오픈소스(open source):누구나 가져다 쓸 수 있게 만든 프로그램.
누구나 가져다 쓸 수 있도록 하기 위해서,
프로그램을 파악할 수 있는 소스코드(source code)의 형태로 제공한다.
그래서 개방된 소스 코드라는 의미를 담고 있기 때문에 오픈 소스라고 부른다.
참고로 컴퓨터에서 실행되는 프로그램은 기계어로 되어 있어 프로그램을 파악할 수 없지만,
소스코드는 프로그래머가 알아볼 수 있는 형태의 프로그래밍 언어로 작성되어 있어
프로그램을 파악하기가 쉽다.
소스코드를 컴파일하면 실행코드가 된다.
9) 리눅스(LINUX):오픈소스 공통체인 GNU라는 단체에서 리누스 토발즈라는 핵심 인물을 중심으로 하여,
유닉스(UNIX)라는 세계적인 운영체제를 모방하여 누구나 무료로 쓰고, 누구나 고쳐 쓸 수 있게 만든 운영체제.
PC의 윈도우(Windows)라는 운영체제와 흔히 비교함.
10) 웹호스팅(web hosting):인터넷 사이트를 만든 회사나 개인이,
그 사이트를 설치하기 위한 컴퓨터를 빌리는 것.
11) PHP 클래스(class):PHP라는 프로그래밍 언어로 쉽게 프래그램을 작성할 수 있도록,
자주 쓰는 기능들을 미리 프로그램의 형태로 작성해 둔 것.
12) 마이시퀄(MySQL):자료를 저장하고 관리하는 시스템을 데이터베이스(data base)라고 부르는데,
마이시퀄은 강력하면서도 무료로 쓸 수 있는 데이터베이스다.
13) 오픈소스 사이트(open source site):오픈 소스들을 제공하는 사이트.
대부분 자발적인 봉사자들에 의해 비상업적으로 운영됨.
다양한 오픈 소스들을 제작하며, 무료로 제공함.
14) ISP 업체(Internet Service Provider):인터넷 서비스를 제공하는 업체.
한국통신, 하나로 통신, 두루넷과 같은 회선 서비스 업체만을 포함하는 협의의 ISP 업체와,
인터넷에서 서비스를 하는 모든 업체를 포함하는 넓은 개념의 ISP 업체가 있음.
15) 서버 어플리케이션(server application):인터넷 서비스를 제공하는 업체 쪽에 있는 컴퓨터에서 작동하는 프로그램을 말한다.
이것의 예를 들면, 인터넷 뱅킹을 할 수 있게 해 주는 프로그램은 고객의 컴퓨터에 설치되어 있는 것이 아니라, 은행 쪽의 컴퓨터에 설치되어 있다.
16) 임베디드(Embeded):'내장된'이라는 뜻이다.
어떤 기계 장치에 내장되어 그 기계를 작동하게 해 주는 모든 형태의 프로그램을 말한다.
예를 들면, 핸드폰 안에서 한글을 입력할 수 있게 해 주는 프로그램이라든지,
차량용 네비게이션 장치의 지도 프로그램이 '내장된' 프로그램이다.

06월 25일 17시 49분 04초
Posted by Mr.Martin :

*코드 리뷰와 리팩토링

2010. 7. 13. 21:01 from Tip
반응형
한 조사 기관에서 수학을 잘하는,
정확하게 말해서 수학 시험 문제를 잘 푸는 학생들의 습관을 조사해 보았다고 한다.
그랬더니 놀랍게도 한결같이 자신이 푼 문제를 재검토(review)하는 습관을 가지고 있었다고 한다.
반면에 수학을 못하는 학생들은 문제 풀이에만 힘쓰고, 다시 검토해 볼 생각을 하지 않더라는 것이다.
프로그래밍은 수학 문제를 푸는 것과 여러 면에서 유사하다.
 
문제가 있고, 해결 방식을 설계하고, 그 설계안 대로 문제를 풀고, 답이 확실한지 검증하는 것이 수학이다.
문제가 있고, 알고리즘4)을 설계하고,
알고리즘대로 코딩하고, 제대로 동작하는지 테스트하는 것이 프로그래밍이다.
수학을 잘하는 학생들은 이 단계 이후에 답이 확실한지를 다시 한 번 검토한다.
자신의 풀이 과정을 확인해 보고, 다른 해결 방법은 없는지도 생각해 보아,
해결 방법이 있다면 그 방법으로 다시 한 번 문제를 풀어본다.
 
마찬가지로 프로그래밍을 잘하는 프로그래머들도 단위 테스트5) 이후에 검토 과정을 거친다.
자신이 코딩한 내용이나 알고리즘을 다시 한 번 검토해 보고, 더욱 효율적인 해결 방법이 있다면 개선한다.
전자를 코드 리뷰(code review)라고 부르고, 후자를 리팩토링(refactoring)이라고 부른다.
즉 코드 리뷰는 재검토이고, 리팩토링은 개선이다.
 
수학 문제 풀이 이후의 재검토가 학생의 사고력을 길러 수학 실력을 높여주듯이,
프로그래밍 이후의 코드 리뷰와 리팩토링 프로그래머의 사고력을 길러 프로그래밍 실력을 높여준다.
코드 리뷰와 리팩토링에는 또 다른 장점이 있다.
프로그램의 품질을 높여주는 것이다.
오류(error)를 잡아낼 수 있고, 효율을 개선할 수 있기 때문이다.
개별 프로그램에서 하는 이런 행위는 궁극적으로 개발 프로젝트6) 전체의 생산성을 대폭적으로 향상시켜 준다.
코드 리뷰로 잡아낼 수 있는 오류를,
코드 리뷰를 하지 않은 관계로 수 일에서 수 주일동안 잡아내지 못하는 경우도 있다.
코드 리뷰는 통합 테스트7)나 유지보수의 기간을 줄여준다.
 
단위 테스트 이후에 반드시 코드리뷰와 리팩토링을 하여 프로그래머의 사고력을 높임과 동시에
프로그램의 품질도 높이도록 하자.
 
4) 알고리즘(algorithm):어떤 문제의 '절차적'이고 '확정적'인 풀이 방법을 말한다.
상황에 따라 달라지는 해법은 알고리즘이 아니며, 알고리즘은 그 해법이 확정적인 만큼,
문제를 풀어가는 절차도 정해져 있다.
그래서 '절차적'인 특성을 가지고 있다.
프로그램이란 어떤 업무를 처리하는 해법 즉, 알고리즘을 표현한 것이라고 볼 수 있다.
5) 단위 테스트(module test):프로그램 '하나'를 제작하고 나서 그 프로그램이 제대로 작성되었는지를 시험해 보는 것을 말한다.
단위 테스트는 대개 프로그램을 직접 제작한 프로그래머에 의해서 이루어지며, 때로는 전문 테스터(tester)가 담당하기도 한다.
6) 프로젝트(project):사전적인 의미는 '일의 추진 과정' 이지만,
컴퓨터 업계에서는 하나의 개발 업무 단위를 의미한다.
예를 들면 '회계 업무 프로젝트'라고 하면, 회계 업무 전체를 전산화하는 일을 말하는 것이다.
7) 통합 테스트(system test):단위 테스트를 마친 프로그램들과 관련 업무를 하나로 묶어 현업에서 쓸 수 있는 것이 시스템(system)이다.
예를 들어 일계표 처리 프로그램, 대차대조표 작성 프로그램 등의 회계 관련 프로그램들을 모두 엮은 뒤에, 개선된 조직과 연관지어 하나의 업무 처리 단위가 되도록 하면 이것이 '회계 시스템'이 된다..
이런 시스템 단위는 하나의 통합적인 의무 처리 단위라고 할 수 있다.
그렇기 때문에 시스템의 문제점을 발견하기 위한 시험을 통해 테스트라고 부르는 것이다.
단위 테스트 과정에서는 발견할 수 없었던 프로그램 간의 연관성 문제라든가 하는 것이 통합 테스트 과정에서 나타난다.

06월 24일 18시 09분 41초
Posted by Mr.Martin :

*문서

2010. 7. 13. 20:59 from Tip
반응형

다양한 개발 방법론이 소개되고 있지만, 지금까지 소개된 모든 개발 방법론에서 항상 강조하는 것은 풍부한 문서를 작성하라는 점이다.
문서(document)는 의사소통의 중요한 수단이고, 기록을 보존하게 해 주는 강력한 도구이기 때문이리라.
반면에, 문서 작성 자체가 프로그래밍을 방해할 때도 많다는 것을 강조하는 경우는 거의 없다.
기실, 정형화된 방법론을 도입한 개발 조직에서 제일 힘들어 하는 것 중의 하나가 문서 작성인데도 말이다.
마치 미국 국방부와 같은 대규모 조직에서 발생할 만한 현상이 소규모 개발 조직에서도 발행한다.
그 누구도 신경쓰지 않는 규정집들과 절차 매뉴얼들을 잔뜩 만들어 놓아야 한다고 생각하는 조직에는 희망이 없다.
미국 국방부처럼 그 문서를 만들기 위해서 대규모 인력을 유지해야 하고, 그 문서를 폐기하는 일에도 엄청난 신경을 써야 하는 상황을 만들어서는 안 된다.
문서는 개발을 돕기 위한 도구이며 수단이다.
개발이 목적인데, 문서 작성 자체를 목적으로 삼는 것처럼 보이는 조직도 있다.
프로그래밍하는 일에 한 두 시간 쓰게 하고, 나머지 모든 시간을 문서 작성에 할애하는 프로그래머도 보았다.
다시 한 번 강조하지만 문서는 기록 보존이나 의사소통의 수단이다.
만약 문서 작성 때문에 개발 자체가 힘들어질 것 같으면, 문서를 작성하지 않는 편이 낫다.

06월 22일 13시 44분 45초

Posted by Mr.Martin :

*주석

2010. 7. 13. 20:58 from Tip
반응형

프로그래밍1)은 코딩2)이 아니다.
프로그램 안에 코드만 들어 있어서는 안 된다.
코드만큼 중요한 것이 주석(comment)이다.
좋은 프로그래머인지 아닌지는 주석을 어떻게 달았는지를 보면 금방 나타난다.
경험 많고 잘 훈련된 프로그래머들은 주석을 풍부하고 체계적으로 단다.
코드만 작성하거나 주석을 빈약하게 다는 프로그래머들은 대개 코더 수준에 머무르는 사람들이다.
프로그래밍을 할 때에 글을 쓴다고 생각하라.
글을 쓸 때에는 항상 그 글을 읽을 사람을 염두에 두게 된다.
글을 쓸 때에는 사람들이 가장 이해하기 쉽게, 최대한 쉬운 말로 쓰되, 불필요한 군더더기는 없게 써야 한다.
주석을 다는 요령도 똑같다.
코드를 이해하기 쉽게 최대한 주석을 달되, 중복되는 주석은 피한다는 것이 요령이다.
이렇게 풍부한 주석을 달아둔 프로그램은 그 가치가 높아진다.
그런 프로그램은 유지보수3)하기 쉬워지기 때문에, 비교적 오랜 시간에 걸쳐 생존한다.
그런 프로그램은 유지보수를 담당한 프로그래머들의 생산성을 높여준다.
주석을 다는 행위 자체는 '제2의 프로그래밍'이다.
프로그래밍(programming) = 코드쓰기(coding) + 주석달기(commenting) 라고 할 수 있다.
주석의 중요성을 잊지 말아야 한다.


1) 프로그래밍(programming):
코딩 작업 외에도 알고리즘과 자료구조 그리고 인터페이스의 설계와 같은 고도의 작업을 포함한 개념.
2) 코딩(coding):프로그래밍의 하위 개념.
이미 설계된 프로그램 설계도를 보며 단순히 프로그래밍 언어로 번역하는 행위.
3) 유지보수(maintenance):이미 만들어진 프로그램이나 시스템을 상황의 변화에 맞게 고치거나 개량하는 일.

2010년 06월 21일 22시 42분 40초

Posted by Mr.Martin :

윈도우 한글설정하기

2008. 5. 12. 14:05 from Tip/windows
반응형
Posted by Mr.Martin :

원 월드 티켓

2008. 4. 28. 01:49 from Tip/Life
반응형
http://www.oneworld.com/

내가 구상한 계획대로 세계일주를 할 수 있는 티켓
10개의 항공사가 연합해서
1년 내 20번의 비행으로 세계여행을 할 수 있다고 한다.

언젠가 이용 할 것이다.
Posted by Mr.Martin :
반응형

사용자 삽입 이미지

중앙일보에서 퍼왔습니다.
출처는
http://article.joins.com/article/article.asp?Total_ID=3098895
문제가 된다면 삭제하겠습니다.(-.-)
Posted by Mr.Martin :

포토샵 팁

2008. 4. 28. 01:39 from Tip/Web
반응형
- 초기화 시킬경우
포토샵 실행후 창이뜰때 Alt+Shift+Ctrl 를 누른다.
 초기로 돌아올꺼냐고 물어보는데  Yes 클릭.

- 폰트가 작거나 크게 보일경우
File-New를 띄워놓고
Resolution 이 72 이 아니라 72 미만이나 이상일경우 72로 수정한다.

- 경로알기
C:\Program Files\Adobe\Adobe Photoshop CS3\Presets
들어가면 세부적으로 폴더 표시.
Posted by Mr.Martin :