프로그램수업 유머

Professor Ho's Wiki Site


목차

프로그래머가 쓰는 용어 정리

밀다 : uninstall

깔다 : install

죽이다(=내리다) : 프로세스를 종료시키다

살리다(=띄우다, =올리다) : 프로세스를 시작시키다

뿌리다 : 메시지혹은 테이터를 출력하다

찍어보다 : 디버깅용으로 특정데이터의 값을 출력해보다.

갖다붙이다 : copy and paste

뚝딱뚝딱해서 만들다: 기존에 있는 라이브러리나 소스코드를 이용해서 대충 돌아가는 프로그램을 만들다

돌리다 :

1. 루프문을 이용해서 반복수행하다

2. 특정 프로세스를 가동시켜 테스트 혹은 운영해보다

때려넣다(때려박다) : 대량의 테이터를 파일이나 DB에 저장시키다

갈아엎다 : 기존의 설계된 프레임워크혹은 아키텍쳐를 버리고 새롭게 재작성하다

허접하다 : 기능이 별로 없고, 에러체크가 별로 없어 버그가 많고 UI가 미려하지 못하다

버벅거리다 : 네트워크 부하, 코딩및 설계 결함등으로

performance가 떨어지다

미친짓하다 : 불필요한 코딩을 많이하다.

특정 의존성을 지닌 문제를 생각치 못하고 계속 작업을 하다

날리다 : 특정 테이터를 삭제하다

물고 있다 : 특정 서버와의 연결이나 파일 locking 같은 프로세스가

종료되지 않고 계속 실행되다.

쏘다 : 특정메시지나 테이터를 네트워크로 보내다

맨땅에 해딩하다: 새로운 기술이나 전혀 적용해보지 않은 기술을 이용하여

시스템을 구축하다

프로그래머의 10계명..

시작부터 경지에 이르기까지… 1. 정보를 모음에 소홀히 하지 말고 설명서를 읽음에 게을리 하지 말지어 다. 오늘 필요 없는 정보는 내일 필요하리라. 가장 가치 있고도 저렴한 지식은 책 속에 있느니라. 서점과 동료의 책꽂이에 무엇이 꽂혀 있는지 때때로 살피어라. 무심코 흘렸던 종이 한 장이 너의 근심을 풀어 주었 으리라. 설명서는 충분히, 꼼꼼히 읽을지어다. 모든 의문은 설명서를 안 보는 데서 생기니라. 그렇더라도 모두 다 읽을 필요는 없느니라.

2. 너의 PC가 안전하다고 믿지 말지어다. 5분 후에 정전이 되고 내일 너의 하드가 맛이 가리라. 그러하니 너의 소중한 소스 코드는 정기적으로 여 러 군데에 단계별로 백업해 두어라.

3. 변하는 수를 다룰 때에는 늘 조심할지어다. 정수가 절대로 그 한계를 넘지 않으리라 가정하는 것은 어리석음이라. 127, -128, 255, 32767, -32768, 65535, 이 숫자들을 너의 골수에 새기어라. 0.0은 0이 아니니 실수는 원래부터 결코 정밀하지 않느니라. 부호 없는 것과 있는 것을 어울리거나 정수끼리 나눌 때에는 늘 조심하여라.

4. 무슨 일을 반복시킬 때에는 처음과 끝에 유의할지어다. 너의 컴퓨터는 1보다는 0을 좋아 하니라. 배열의 첨자가 그 범위를 넘지 않을지 손 댈 때마다 따져 보아라. 수식에 1을 더하거나 뺄 때에는 늘 긴장하라. 너 의 프로그램은 단지 한 번 덜해서 틀리고 한 번 더해서 다운되느니라.

5. 항상 모든 경우의 수를 고려하고 섣불리 생략하지 말지어다. 절대로 일 어나지 않을 일은 반드시 일어나고, 가장 드물게 일어날 일이 가장 너 를괴롭히리라. 그러하니 언제나 논리에 구멍이 없는지 꼼꼼히 따져 보 고, if를 쓸 때에는 else부터 생각하라.

6. 함수 안에서 매개 변수값은 결코 믿지 말지어다. 지금 그 매개 변수가 결코 가질 수 없다는 값을 내일부터는 가지리라. 그러하니 매개 변수값 이 올바름을 항상 검사할지어다. 그렇더라도 처리 속도가 문제가 되는 경우는 예외이니라.

7. 오류를 알려 주는 기능은 있는 대로 모두 활용할지어다. 컴파일러의 경 고는 모두 켜 두어라. 경고는 곧 오류이니라. 오류를 알리는 함수의 결 과를 확인하지 않는 우를 범하지 말지어다. 모든 파일 입출력과 모든 메모리 할당은 조만간 실패할 것이라.

8. 한 번의 수정과 재컴파일만으로 연관된 모든 것이 저절로, 강제로 바뀌 도록 할지어다. 어떠한 것을 수정했을 때에 연관된 것이 따라서 변하지 않는다면 그것이 곧 벌레이니라. 컴파일러로 하여금 매개 변수 리스트 를 완전하게 검사하도록 하고, 언젠가 손대야 하거나 따라서 변해야 하 는 수치는 전부 매크로로 치환하며, 형 정의를 적극 활용하여라.

9. 사용자가 알아서 잘 써 주리라고 희망하지 말지어다. 너의 프로그램은 항상 바보와 미친놈만이 쓰느니라. 사용 설명서를 쓸 때에는 결코 빠뜨 리지 말아라. 빠뜨린 만큼 사용자는 너를 괴롭힐 것이니라.

10.매사에 겸손하고 항상 남을 생각할지어다. 가장 완벽한 프로그램일수록 가장 완벽하게 숨은 벌레가 있느니라. 네가 이 세상 최고의 프로그래머 라고 떠들며 자만할 때, 옆집 곳간에서는 훨씬 더 뛰어난 것을 묵묵히 만들고 있느니라. 아무렴 프로그래밍은 혼자 잘나서 할 게 아니니, 너 로 인해 다른 사람들도 더불어 잘 되면 그얼마나 좋은 것이냐. 이 모든 것을 깨닫고 지키려 애쓰는 자는, 있어도 없어도 되어도 아니 되어도 늘 평온하리라.

진짜 프로그래머 가려내기..

가짜 : 책상에 온통 책으로 덥혀있다. 자세히 보면 웹부터 시스템 프로그래밍까지 동내서 점같다.그런 자기 책상을 보며 자랑스러워 한다.

진짜 : 책상에 담배재와 잡동사니만 굴러다닌다.

가짜 : 모르는것이 있을때는 여기저기 관련 사이트에 Q&A에 질문을 올리고 답변을 기다린다.

진짜 : 모르는것이 있을때는 Q&A를 뒤져보고 없으면 깡으로 만든다.

가짜 : 짜본것보다 아는게 더 많타

진짜 : 아는것보다 짜본게 더 많타

가짜 : 직업을 물어보면 프로그래머라고 당당하게 말한다.

진짜 : 직업을 물어보면 우물쭈물 하다가 상대에 따라 ‘컴퓨터 하는 사람’,‘소프트웨어쪽 하는사람’자꾸 자세히 물어보면 ‘프로그램 짜는 사람’ 등 프로그래머라는 말을 피한다.

가짜 : 부탁하면 머든지 한다. 물론 끝까지 한다는 보장은 없다.

진짜 : 부탁하면 곤란한 표정을 짓는다. 어쩔수 없이 하게되면 수단과 방법을 안가리고 끝을 본다.

가짜 : 컴퓨터 관련은 뭐든지 물어보면 모르는게 없다. 아주 성의있게 요목조목 설명해준다.

진짜 : 물어보면 아는게 없다. 중요한 질문이나 확실히 아는것만 간단하게 말한다.

가짜 : 다른사람이 잘 공부하지 않는 분야를 익히면 자신이 그분야 전문가가 된줄 안다. 그러나 기술을 제대로 써보지는 못한다.

진짜 : 다른사람이 잘 공부하지 않는 분야는 쓸모가 없기 때문이기에 배우지 않는다. 반드시 필요하면 대강 배워서 쓰고 잊어버린다.

가짜 : 시간만 나면 관련 게시판 TIP이나 강좌를 읽으면서 외공을 연마하여 자랑하고 다닌다.

진짜 : 시간 나면 가끔식 자료구조,알고리즘,인공지능학, 영상처리학등 개론서를 훝어보면서 내공을 연마한다. 누가 물어보면 논다고 한다.

가짜 : 클래스만 쓰면 OOP프로그램인줄 안다.

진짜 : 마음만 먹으면 프로그램을 비지오로도 짤수도 있다.

가짜 : 100만큼 배워서 10만큼 쓴다.(C/C++/API/MFC/VB바이블을 쓸수 있을정도로 알고 있어도 프로그램은 1000 줄이상 못짠다.)

진짜 : 10만큼 배워서 1000만큼 쓴다.( if문만 배워도 만든다.)

가짜 : 자신이 프로그래밍에 소질이 있다고 생각한다.

진짜 : 자신은 프로그래밍에 소질이 없다고 생각한다. (입버릇처럼 때려치울꺼라고 하면서 부지런히 짠다.)

가짜 : 코딩할때 타자속도가 600타 이상 나오며 부지런히 친다.

진짜 : 한참 담배피다 300타 이하 속도로 몇자치고 또 담배핀다.

가짜 : 마지막 10%가 고비다.

진짜 : 처음 10%가 고비다.

가짜 : 빌게이츠,리누스,잡스등 IT유명인들에 관심이 많고 때론 동경한다.

진짜 : 아무 관심없다. 가짜 : 언제나 최신 컴퓨터에 최고급 사양으로 유지하고 잡다한 부품이나 오버클럭등에 관심이 많타

진짜 : 컴파일러가 뜨는데 지장 없으면 컴퓨터에는 관심 없다. 스피커에만 관심을 가진다.

가짜 : 최적에 작업 환경을 요구한다. (조용하고, 남의 시선이 안닫고 구석진곳등등..)

진짜 : 컴퓨터만 있으면 작업한다.

가짜 : 알고 있는 모든 프로그램이 다 깔려있다. 깔면 다 사용할수 있다고 생각한다.물론 나가서도 그렇게 말하고 다닌다. 윈도우 태마나 바탕화면등에 신경을 많이쓴다.

진짜 : 아무 관심없다.

가짜 : 심심하면 인터넷에서 특이한 테크닉 소스나 완성된 프로그램 소스를 구해서 구경하고 누가 물어보면 자신이 짰다고 말한다.

진짜 : 필요하지 않타면 남의 소스에 관심 없다.

가짜 : 가능한한 남이 못알아 보게 짠다. 물론 주석도 안단다.

진짜 : 가능한한 남이 알아보기 쉽게 짠다. 주석은 가끔식 단다

가짜 : Q&A게시판에서 조금이라도 들어본 질문이 올라오면 다 아는듯 답변을 단다.

진짜 : 게시판을 잘 이용하지 않는다.

가짜 : 온갓 유명 컴퓨터 서적과 잡지를 부지런히 사다 모은다.

진짜 : 가끔식 잡지나 한번씩 사고, 절판되었거나 절판직전 책을 어렵게 구해다 본다.

가짜 : 책의 목차와 앞에 몇패이지만 본다. 그러면 그 책을 다봤다고 생각한다..

진짜 : 목차도 보지않는다. 가끔식 뒤에 색인만 살핀다.

가짜 : 가짜들 끼리 모이면 잘 될줄 안다.

진짜 : 진짜들 끼리 모이면 잘 안된다.(가짜가 좀 끼어있어야 한다.)

가짜 : 가짜가 하는모습을 동경하고 따라할려고 한다.

진짜 : 가짜처럼 살려고 노력한다.

진짜와 가짜가 만나서 프로그래밍 이야기를 하면….

가짜 : 입으로 프로그램을 짠다. (현란한 첨단기술은 다써서)

진짜 : 머리로 다짜고 컴파일 시켜서 컴파일된 결과만 말한다. ( if/for만 써서)

가짜 : VC를 조금이라도 하면 VB하는 사람은 다 자기보다 프로그램 못짜는 줄 안다.

진짜 : 프로젝트에 최적의 언어를 선택한후 개발한다.(주특기는 있지만 특정 언어만 쓰지 않는다.)

가짜 : 왠만하면 VC로 짠다. VB로 프로그램 짜고 있는 사람을 보면 VC몰라서 VB로 짜는줄 안다.

진짜 : 왠만하면 VC 안쓰려고 노력한다.

가짜 : DirectX를 다 익히면 게임 만들수 있을줄 안다.

진짜 : DirectX를 다 모른다. 그러나 필요하면 게임은 만든다

han.rec.humor

.. 다음 내용은 모두 모니터 화면에 “Hello World”를 찍기 위한 프로그램입니다.

중고등학생


10 PRINT “HELLO WORLD” 20 END 대학 신입생


program Hello(input, output) begin writeln(‘Hello World’) end. 대학 2학년


(defun hello (print (cons ‘Hello (list ‘World)))) 신임 교수


  1. include

void main(void) { char *message[] = {“Hello “, “World”}; int i; for(i = 0; i < 2; ++i) printf(“%s”, message[i]); printf(“\n”); } 계약직 전문가


  1. include
  2. include

class string { private: int size; char *ptr; public: string() : size(0), ptr(new char(‘\0′)) {} string(const string &s) : size(s.size) { ptr = new char[size + 1]; strcpy(ptr, s.ptr); } ~string() { delete [] ptr; } friend ostream &operator <<(ostream &, const string &); string &operator=(const char *); }; ostream &operator<<(ostream &stream, const string &s) { rettream << s.ptr); } string &string::operator=(const char *chrs) { if (this != &chrs) { delete [] ptr; size = strlen(chrs); ptr = new char[size + 1]; strcpy(ptr, chrs); } return(*this); } int main() { string str; str = “Hello World”; cout << str << endl; return(0); } 마스터 프로그래머


[ uuid(2573F8F4-CFEE-101A-9A9F-00AA00342820) ] library LHello { // bring in the master library importlib(“actimp.tlb”); importlib(“actexp.tlb”); // bring in my interfaces

  1. include “pshlo.idl”

[ uuid(2573F8F5-CFEE-101A-9A9F-00AA00342820) ] cotype THello { interface IHello; interface IPersistFile; }; }; [ exe, uuid(2573F890-CFEE-101A-9A9F-00AA00342820) ] module CHelloLib { // some code related header files importheader(); importheader(); importheader(); importheader(“pshlo.h”); importheader(“shlo.hxx”); importheader(“mycls.hxx”); // needed typelibs importlibctimp.tlb”); importlib(“actexp.tlb”); importlib(“thlo.tlb”); [ uuid( 2573F891-CFEE-101A-9A9F-00AA00342820),>

  1. include "ipfix.hxx"

extern HANDLE hEvent; class CHello : public CHelloBase { public: IPFIX(CLSID_CHello); CHello(IUnknown *pUnk); ~CHello(); HRESULT __stdcall PrintSz(LPWSTR pwszString); aggregatable ] coclass CHello { cotype THello; }; }; private: static int cObjRef; };

  1. include
  2. include
  3. include
  4. include
  5. include “thlo.h”
  6. include “pshlo.h”
  7. include “shlo.hxx”
  8. include “mycls.hxx”

int CHello::cObjRef = 0; CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk) { cObjRef++; return; } HRESULT __stdcall CHello::PrintSz(LPWSTR pwszString) { printf(“%ws\n”, pwszString); return(ResultFromScode(S_OK)); } CHello::~CHello(void) { // when the object count goes to zero, stop the server cObjRef–; if( cObjRef == 0 ) PulseEvent(hEvent); return; }

  1. include
  2. include
  3. include “ipfix.hxx”

extern HANDLE hEvent; class CHello : public CHelloBase { public: IPFIX(CLSID_CHello); CHello(IUnknown *pUnk); ~CHello(); HRESULT __stdcall PrintSz(LPWSTR pwszString); aggregatable ] coclass CHello { cotype THello; }; }; private: static int cObjRef; };

  1. include
  2. include
  3. include
  4. include
  5. include “thlo.h”
  6. include “pshlo.h”
  7. include “shlo.hxx”
  8. include “mycls.hxx”

int CHello::cObjRef = 0; CHello::CHello(IUnknown *pUnk) : CHelloBase(pUnk) { cObjRef++; return; } HRESULT __stdcall CHello::PrintSz(LPWSTR pwszString) { printf(“%ws\n”, pwszString); return(ResultFromScode(S_OK)); } CHello::~CHello(void) { // when the object count goes to zero, stop the server cObjRef–; if( cObjRef == 0 ) PulseEvent(hEvent); return; }

  1. include

nclude “pshlo.h”

  1. include “shlo.hxx”
  2. include “mycls.hxx”

HANDLE hEvent; int _cdecl main( int argc, char * argv[] ) { ULONG ulRef; DWORD dwRegistration; CHelloCF *pCF = new CHelloCF(); hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); // Initialize the OLE libraries CoInitializeEx(NULL, COINIT_MULTITHREADED); CoRegisterClassObject(CLSID_CHello, pCF, CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE, &dwRegistration); // wait on an event to stop WaitForSingleObject(hEvent, INFINITE); // revoke and release the class object CoRevokeClassObject(dwRegistration); ulRef = pCF->Release(); // Tell OLE we are going away. CoUninitialize(); return(0); } extern CLSID CLSID_CHello; extern UUID LIBID_CHelloLib; CLSID CLSID_CHello = { /* 2573F891-CFEE-101A-9A9F-00AA00342820 */ 0×2573F891, 0xCFEE, 0×101A, { 0×9A, 0×9F, 0×00, 0xAA, 0×00, 0×34, 0×28, 0×20 } }; UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */ 0×2573F890, 0xCFEE, 0×101A, nclude

  1. include
  2. include
  3. include
  4. include
  5. include “pshlo.h”
  6. include “shlo.hxx”
  7. include “clsid.h”

int _cdecl n( int argc, char * argv[] ) { HRESULT hRslt; IHello *pHello; ULONG ulCnt; IMoniker * pmk; WCHAR wcsT[_MAX_PATH]; WCHAR wcsPath[2 * _MAX_PATH]; // get object path wcsPath[0] = ‘\0′; wcsT[0] = ‘\0′; if( argc > 1) { mbstowcs(wcsPath, argv[1], strlen(argv[1]) + 1); wcsupr(wcsPath); } else { fprintf(stderr, “Object path must be specified\n”); return(1); } // get print string if(argc > 2) mbstowcs(wcsT, argv[2], strlen(argv[2]) + 1); else wcscpy(wcsT, L”Hello World”); printf(“Linking to object %ws\n”, wcsPath); printf(“Text String %ws\n”, wcsT); // Initialize the OLE libraries hRslt = CoInitializeEx(NULL, COINIT_MULTITHREADED); if(SUCCEEDED(hRslt)) { hRslt = CreateFileMoniker(wcsPath, &pmk); if(SUCCEEDED(hRslt)) hRslt = BindMoniker(pmk, 0, IID_IHello, (void CEEDED(hRslt)) { // print a string out pHello->PrintSz(wcsT); Sleep(2000); ulCnt = pHello->Release(); } else printf(“Failure to connect, status: %lx”, hRslt); // Tell OLE we are going away. CoUninitialize(); } return(0); } 초보 해커 (Apprentice Hacker)


  1. !/usr/local/bin/perl

$msg=”Hello, world.\n”; if ($#ARGV >= 0) while(defined($arg=shift(@ARGV))) $outfilename = $arg; open(FILE, “>” . $outfilename) || die “Can’t write $arg: $!\n”; print (FILE $msg); close(FILE) || die “Can’t close $arg: $!\n”; } } else print ($msg); } 1; 경력 해커 (Experienced Hacker)


  1. include
  2. define S “Hello, World\n”

main(){exit(printf(S) == strlen(S) ? 0 : 1);} 숙련된 해커 (Seasoned Hacker)


% cc -o a.out ~/src/misc/hw/hw.c 구루(지존) 해커 (Guru Hacker)


% cat Hello, world. ^D 신임 관리자 (New Manager)

=============

10 PRINT “HELLO WORLD” 20 END 중견 관리자 (Middle Manager)


mail -s “Hello, world.” bob@b12 밥, “Hello, world.”를 출력하는 프로그램 소스를 좀 보내주겠나? 내일까지 부탁하네. ^D 고위 관리자 (Senior Manager)


% zmail jim “Hello, world.” 프로그램이 오늘 오후까지 필요함. 최고 경영자 (Chief Executive)


% letter letter: Command not found. % mail To: ^X ^F ^C % help mail help: Command not found. % damn! !: Event unrecognized % logout – This entry was posted on Tuesday, September 30th, 2003 at 5:40 pm and is filed under blah~blah~. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed. One Response to “프로그래머 관련 유머모음..” spica says: 2003/09/30 at 6:54 pm 프로그래머, 정말 힘든 직업 같아요. 존경스럽기도 하구. 근데, 나이 많이 먹고 할 일은 못 된다고 하던데… 저도 전공은 컴공이지만, 정작 프로그램쪽엔 ㅡ,.ㅡ 으~ 말을 말자. 가슴만 아프네요.ㅡㅡ @hof 블로그 is proudly powered by WordPress Entries (RSS) and Comments (RSS). </html>

개인 도구