프로그래머에 대한 조크

일본의 프로그래머에 대한 우스갯소리가 있어 데려왔습니다...
(출처 : 전파만세 - 리라하우스 제3별관 )
과장된 감이 없잖아 있습니다. 그냥 우스갯 소리로 읽고 넘기시면 됩니다. 하지만
다른 직업군이라고 다르지 않겠지만 프로그래머의 자조적인 목소리는 우리나라랑 별반 다를 게 없군요. ^^

참고. 아래 글에 등장하는 SE(시스템 엔지니어)는 우리나라의 PM(프로젝트 매니저)에 해당합니다.

1. "오늘까지"라는 말은 "내일 아침까지"라는 말이다.


2. 프로그램은 내가 원하는대로 움직이지 않는다. 타이핑대로 움직인다.


3. 요구 사양은 프로그램을 완성한 후에 추가된다.
   기본 사양은 완성품을 고객이 보고 나서 결정된다.
   상세 사양은 사용자가 프로그램을 사용해 본 이후에 결정된다.


4. 소프트웨어 설계에는 두 개의 방법이 있다.

    하나는 결함이 있을 수 없을 정도로 단순하게 만드는 방법이다.
    다른 하나는, 분명한 결함을 눈치채기 어려울 정도로 복잡하게 만드는 방법이다.


5. 코드는 개발 현장에서 사용하는 것이 아니라 납품처에서 사용하는 것이다.
    디버그는 납기일까지 하는 것이 아니라, 납품된 이후에 하는 것이다.


6. 프로그래머를 죽이기 위해서는 칼이 필요없다. 프로그램의 요구조건을 3번만 바꾸면 된다.


7. 다른 사람을 믿으라. 그 사람이 해결해줄지도 모른다.
    주의사항 - 먼저 자신을 의심해라.


8. 개발에 마지막은 없다. 출시만이 있을 뿐이다.


9. 클라이언트의 요구사항이 제 아무리 뒤늦게 추가되어도 납기일은 변하지 않는다.
    이것을「납기 불변의 법칙」이라고 한다.


10. 우리의 고객들은 물과 기능추가를 공짜라고 생각하고 있다.

11. 주머니가 짠 고객일수록 잔소리가 많다.


12. 개발 스케줄은 산수를 무시하며 짜여진다. 영업과는 1+1=2를 이해하지 못하는 사람의 모임이다.


13. 한 명이 쓰러지면 모두가 쓰러진다.


14. 버그가 너무 심하다? 걱정마라. 어느 순간 그것은 기본 사양이 될 것이다.


15. 좋은 설계는 한 명의 천재보다 세 명의 범재를 요구한다.
     나쁜 설계는 백명의 범재보다 한 명의 천재를 요구한다.


16. 고객에게 시스템 엔지니어는 부하이며, 프로그래머는 가축이다.
     시스템 엔지니어에게 고객은 돈이다.
     프로그래머에게 고객은 보이지 않는 악성 바이러스다.


17. 돈과 시간만 있으면, 그 어떤 시스템이라도 만들 수 있다고 생각하는가?
      웃어라. 그 기회는 영원히 주어지지 않는다.


18. 품질은 사양 변경의 수와 규모에 의해, 얼마나 열화될지 결정된다.


19. 영업과는 공상이 실현된다고 생각하는 몽상가이다.
      시스템 엔지니어는 넘을 수 없는 벽이 없다고 믿는 모험가이다.
      프로그래머와는 몽상가와 모험가에 의해 칠흑의 바다에 내던져진 표류자이다.


20. 유능한 프로그래머가 프로그램 설계개념도를 받아들고 최초로 하는 일은, 프로그램의
     목적을 이해하는 것이다. 그리고 그 다음으로 하는 일은, 지정된 방법과 시간 안에는
     도저히 그 목적을 완수할 수 없다는 사실을 시스템 엔지니어에게 이해시키는 일이다.


21. 프로그램이란, 운과 감에 의해서 작성되는 기적이다.
      운과 감이 없다면, 그 기간 내에 그러한 목표를 실현될 수 있을 리 없다.
      따라서 사양 변경은 기적에 트집을 잡는 건방진 행위이며, 사양 추가는 기적이 두 번
      일어날 것으로 믿는 무모한 행위이다.


22. 시스템 엔지니어는 지구력, 프로그래머는 순발력.


23. 정시에 퇴근하면, 일이 늘어난다.


24. 완벽한 프로그램은 완벽한 시간과 돈을 필요로 한다.
      미국의 국가 예산을 무제한으로 사용하는 NASA마저도, 아직 시간과 돈이 부족하다고 한다.


25. 눈으로 훑어볼 틈이 있다면 움직여라. 뇌세포보다 CPU가 더 해석이 빠르다. 그리고, 그 사이,
      쉴 수 있다.


26. 불편함을 버그라고 부를 것인가, 사양 상의 제한 사항이라고 부를 것인가는 남겨진 개발일자와
     납기일에 의해 결정된다.


27. 정장 대신 캐쥬얼을 입고 출근하는 "캐쥬얼 데이"를 세간에서는 휴일이나 공휴일이라고 부르는
      것 같다.


28. 프로그램은 머리로 기억하지 않는다. 몸으로 기억한다.


29. 내일 쉴 수 있다면 오늘 죽어도 괜찮다.


30. 고객은 거짓말을 한다.
      영업은 꿈을 말한다.
      시스템 엔지니어는 공상을 이야기한다.
      프로그래머는 과묵해진다. (혼잣말은 많아진다)


31.「네, 할 수 있습니다」라고 말하기 전에 10초만 곰곰히 다시 생각해보라.


32. 프로그래머는 1분 생각하고 1일을 코딩에 소비한다.
      1시간 생각하고 1시간 코딩하는 대신에 말이다.


33. 납품 이후의 디버그는 버그를 부른다.


34. 세 개의 디버그는 하나의 버그를 낳는다. 이것을 버그의 엔드리스 루프라고 한다.


35. 안 좋은 예감은 반드시 적중한다. 그러나 프로그래머는 그 안 좋은 예감에 반응하지
      않는다. 그것은 시스템 엔지니어의 일이다.


36. 아수라장을 해결할 수 있는 방법은 오직, 고객이 돈을 지불하는 것 뿐이다.


37. 아마추어는 버그발견의 천재이다.


38. 아, 그건 마이크로소프트에서만 가능한 주문입니다.


39. 프로그래머가 불만이라고 생각하는 부분은 고객도 반드시 불만이라고 생각한다.


40. 건강하기 때문에, 건강을 해친다.


41. 그건, 당신이 말한 요구조건입니다만.


42. 아, 개발실의 창문은 안 열립니다. 그 이유는 옛날에 한 프로그래머가 그 창문에서···


43. 고객은 최악의 사태를 믿지 않으며, 그 사태에 대한 준비를 악질적인 비용청구라고 생각한다.
      시스템 엔지니어는 최악의 사태를 대비하고 준비하려 한다.
      프로그래머는 최악의 사태를 누구보다 잘 예상하지만, 무시한다.


44. 만약 다른 직업을 갖게 된다면, 정시퇴근을「도망」이라고 부르지 않는 직업이 좋을 것 같다.


45. 시스템 엔지니어가 프로그래머에게 말하는「상식」은 3시간마다 변한다.


46. 최소한 자기가 쓴 시방서는 읽어주세요.


47. 고객이 시스템 엔지니어에게 사랑받는 방법은, 시스템 개발에는 시간이 곧 돈이라는 사실을
      깨닫고 빨리 최종요구조건을 확정하는 것이다.
 
     SE가 고객에게  사랑받는 방법은, 프로그래머에게 미움받는 것이다.

48. 납기일이란, 작업현장이 우리 회사에서 고객의 회사로 바뀌는 날을 의미한다.


49. 가끔 일어나는 버그는 버그가 아니다. 스펙이다.


50. 개발비의 30%는 프로그램의 요구조건을 확정하는데 사용된다.
     개발비의 30%는 프로그램의 요구조건을 변경하는데 사용된다.
     개발비의 30%는 프로그램의 버그를 잡는데 사용된다.
     개발비의 10%만이 프로그램의 개발에 사용된다.

2008/01/04 13:18 2008/01/04 13:18
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. Blog Icon
    초보

    일본이나 한국이나 똑같네요..ㅋㅋ

  2. Blog Icon
    서비

    몇몇 부분은 정말 공감 안 할래야 안 할수가 없죠. ㅎ

  3. 10년 전의 드립이 지금도.....

자바 어플리케이션(jar)을 실행파일(exe)로 만들기 :: launch4j

자바 어플리케이션도 실행 jar ( Executable JAR ) 파일로 작성 하면, jar파일을 더블클릭하여 실행하는 것이 가능합니다만..


정말?


자바어플리케이션을 실행할 PC에 자바구동환경( 자바런타임 JRE )이 미리 설치 되어 있지어야 한다는 약점이 있습니다.
이 때문에 자바 Swing/AWT등으로 작성된 GUI어플리케이션의 경우 어플리케이션 작성 후 Executable JAR파일을
윈도우용 실행 파일(exe)로 감싸는(Wrapping)하는 단계를 거치게 됩니다.

Executable JAR 파일을  exe파일로 감싸데는 몇 가지 방법이 있지만 이번 포스팅에서는 launch4j를 이용해 자바 어플리케이션을
exe형태의 파일로 변환하는 방법을 소개토록 하겠습니다.

잠깐 launch4j를 소개하자면 sourceforge.net 에 등록된 프로젝트로 Cross-platform Java executable wrapper를 구현하고 있습니다.
사용법의 간편함과 다양한 옵션이 존재하는 장점 외에도, 라이센스에서 이 프로그램을 이용해서 상업적인( commercial ) 어플리케이션을
작성해도 된다고 밝히고 있습니다.

  준비물 :
    launch4j ( 다운로드페이지 열기 )
    exe 파일을 만들 자바 어플리케이션.

PhotoRoverViewer.zip

테스트용 스윙어플리케이션





 

우선, 자바 어플리케이션을 작성하여 Executable JAR로 만들어 둔다.
( 이전 포스팅 참조 하며, 본 예제를 실행해 보기 원한다면 위에 링크한 자바 어플리케이션을 사용하시면 됩니다.)

그 다음, launch4j 실행하셔서 아래 화면을 참조 하셔서 wrapping환경을 세팅합니다.

launch4j 기본 설정 화면

launch4j 기본 설정 화면


1 번 항목에 jar파일을 어떤 디렉토리에 어떤 파일명의 exe로 떨굴지를 기술합니다.
2 번 항목에서 exe로 wrapping할 Executable jar파일을 선택 합니다.
3 번 항목에 기술한 URL은 변환된 자바 exe파일을 실행할 PC에 자바런타임 환경이 없을경우 안내문구와 이동할 웹사이트를 기술합니다.


launch4j ClassPath 설정 화면

launch4j ClassPath 설정 화면


4 번 항목에서 main 클래스를 기술합니다. Executable jar를 만들어 뒀다면 파일선택에서 jar파일을 선택하는것
만으로도 jar의 MANIFEST.MF 을 분석해서 main 함수와 lib 를 자동으로 세팅해 줍니다.


launch4j Header 설정 화면

launch4j Header 설정 화면


GUI 어플리케이션인지 Console 어플리케이션인지 세팅 해 줍니다.


launch4j JRE 설정 화면

launch4j JRE 설정 화면


5 번 항목은 exe파일과 jre를 함께 배포할 경우 jre패스가 어떻게 되는지 상대 경로 혹은 절대경로를 기술해 줍니다.
6 번 항목에 자바어플리케이션이 실행되기위한 최소버전의 JRE를 기술해 줍니다.


launch4j Version Info 설정 화면

launch4j Version Info 설정 화면


Add Version infomation을 체크하면 exe파일의 속성정보에 나타낼 정보를 기술합니다.


launch4j Message 설정 화면

launch4j Message 설정 화면


Add Custom Message를 체크하면 각 상황에따라 출력할 메세지를 기술할 수 있습니다.
현재 버전까지는 한글 메세지는 지원하지 않더군요. ^^

위와 같은 내용을 기술 해 준 후 launch4j 상단 아이콘 중 톱니바퀴를 클릭하면 지정한 exe파일이 생성 됩니다.



[Flash] http://www.yunsobi.com/anyone/2008-01-04_1144.swf

2008/01/04 11:51 2008/01/04 11:51
Trackback Address:이 글에는 트랙백을 보낼 수 없습니다
  1. 2008/10/05 15:51
  1. 좋은 정보 잘 보고 가요 ~ ^^

  2. Blog Icon
    서비

    도움이 되셨다니 저도 기쁩니다.

  3. 저도 잘보고 갑니다.잘되는군요 ;)

  4. Blog Icon
    coding4fun

    좋은 정보 감사합니다. 그런데, lauch4j로 만든 exe를 실행할 때, 절대 경로가 영어로만 되어 있으면 문제 없는데, 절대 경로 상에 한글이 포함되어 있으면 실행이 안되는 문제가 있습니다. 혹시 해결 방법은 아시는지요..

  5. Blog Icon
    공대소년

    많이 배우고 갑니다.
    감사합니다. :)

  6. Blog Icon
    공생공사

    여러글을 보다가 여기까지 왔네요..혹시
    반대로는 가능한가요?
    exe --> jar 형태로요?

  7. Blog Icon
    서비

    공생공사님 안녕하세요.
    http://stackoverflow.com/questions/7760126/how-to-convert-exe-file-to-jar-file 에도 님과 같은 질문 관련글이 있는데 대부분의 jar -> exe 컨버팅 도구의 경우 exe내부에 단순히 jar를 싸고 있는 형태로 패키징 하지 않고 .class 정보를 이용하여 실행파일을 생성해내기 때문에 exe에서 jar를 추출해 낼 수는 없습니다.

    다만, jsmooth나 launch4j 라도 exe에 jar를 포함하는 형태가 아닌 단순히 jar를 실행하기위한 런처만 exe로 구성했다면 실행 jar가 어딘가에 위치하고 있을 확률은 존재합니다.

    어떤 이유로 추출이 필요하신지 대강 짐작은 됩니다만, 가능하시면 원 개발자와 컨택하셔서 소스를 얻어내는 방안을 고민해보시는게 현실적일것 같습니다.

  8. Blog Icon
    비밀방문자

    관리자만 볼 수 있는 댓글입니다.

  9. Blog Icon
    안녕하세요

    질문 있습니다.
    //자바어플리케이션을 실행할 PC에 자바구동환경( 자바런타임 JRE )이 미리 설치 되어 있지어야 한다는 약점이 있습니다.
    이 때문에 자바 Swing/AWT등으로 작성된 GUI어플리케이션의 경우 어플리케이션 작성 후 Executable JAR파일을
    윈도우용 실행 파일(exe)로 감싸는(Wrapping)하는 단계를 거치게 됩니다.

    ...라고 적혀있는데 조금만 밑으로 내려가면

    //변환된 자바 exe파일을 실행할 PC에 자바런타임 환경이 없을경우 안내문구와 이동할 웹사이트를 기술합니다.

    ...라고 적혀있습니다. exe파일로 만들면 jre가 없는 환경에서도 실행될 수 있다는 말 아닌가요? 근데 왜 안내문구와 이동할 웹사이트가 필요한지 모르겠습니다.

  10. Blog Icon
    ㄴㄴ

    jar 파일을 exe파일로 wrapping 하는 작업은 단순히 exe를 통해 jar파일을 실행시켜주는 역할만 하는 겁니다.
    실행은 jvm 위에서 해야하므로, 환경이 되어야 작동이 가능합니다.

  11. Blog Icon
    misterwon

    감사합니다 ㅎㅎ 큰 도움이 되었습니다