프로그래머는 아니지만 재미있어서 …갖고 있던거 챙겨서 올립니다..
==============
프로그래머가 쓰는 용어 정리
밀다 : 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))))
신임 교수
================
#include
void main(void)
{
char *message[] = {“Hello “, “World”};
int i;
for(i = 0; i < 2; ++i)
printf(“%s”, message[i]);
printf(“\n”);
}
계약직 전문가
=====================
#include
#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
#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),>
#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;
};
#include
#include
#include
#include
#include “thlo.h”
#include “pshlo.h”
#include “shlo.hxx”
#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;
}
#include
#include
#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;
};
#include
#include
#include
#include
#include “thlo.h”
#include “pshlo.h”
#include “shlo.hxx”
#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;
}
#include
nclude “pshlo.h”
#include “shlo.hxx”
#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 */
0x2573F891,
0xCFEE,
0x101A,
{ 0x9A, 0x9F, 0x00, 0xAA, 0x00, 0x34, 0x28, 0x20 }
};
UUID LIBID_CHelloLib = { /* 2573F890-CFEE-101A-9A9F-00AA00342820 */
0x2573F890,
0xCFEE,
0x101A,
nclude
#include
#include
#include
#include
#include “pshlo.h”
#include “shlo.hxx”
#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)
====
=========================
#!/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)
==============================
#include
#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
—
프로그래머, 정말 힘든 직업 같아요. 존경스럽기도 하구. 근데, 나이 많이 먹고 할 일은 못 된다고 하던데… 저도 전공은 컴공이지만, 정작 프로그램쪽엔 ㅡ,.ㅡ 으~ 말을 말자. 가슴만 아프네요.ㅡㅡ