Programming,  컴퓨터와 인터넷

C 프로그램 들여쓰기 크기 논쟁 from KIDS

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 3일 토요일 오후 08시 40분 41초
제 목(Title): C

내가 사장이라면, 그리고 새로운 C programmer를 뽑는 interview자리에
앉아 있다면, 다음과 같은 질문을 할 것이다.

자네는 C프로그램에서 indent로 이용할 tab size는 얼마인가?

질문을 이해못하면 불합격
8이라고 대답하면 합격 가능성이 높음
8이라고 대답하지 않고 다른 숫자를 부르면 무조건 불합격.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 3일 토요일 오후 08시 57분 41초
제 목(Title): Re: C

근데 왜 8이외의 숫자면 불합격?

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 3일 토요일 오후 09시 06분 16초
제 목(Title): Re: C

왜냐하면, code가 너무 다닥다닥붙어 있어서 readability가 많이 떨어진다는
것입니다. 저 개인적으로 그렇게 생각하고 있습니다. tab 8로 쓰면 if, for
몇개 들어가면 오른쪽 여백이 없어서 code쓰기 불편하다고 하는데, 사실
8써도 할 것은 다할 수 있는데. for, if많이 써서 오른 쪽 여백이 얼마남지
않게 만드는 경향이 있는 사람은 iQ가 낮아서 그런다고 감히 생각합니다. 쓸데없이
if만들고 for만들고.. 그렇게 해서 오른쪽 여백 없애고, 그래서 tab은 4쓰고..

아 미치겠다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 3일 토요일 오후 09시 28분 03초
제 목(Title): Re: C

별로 큰 프로그램을 안 만들어 봤나 보군요.

misII, sis, espresso 등을 들어 보신적이 있습니까?

이런거 만든 사람들도 ts=8, sw=4 로 하고 기본적인 indent는

4를 쓰도록 기본 권고안(?)을 만들어 쓰죠.

여러사람이 coding 했어도 비슷한 형태의 코드들.

한명, 두명 정도가 겨우 겨우 몇만라인 만드는 것하고는

틀리다고 볼 수 밖에..

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 3일 토요일 오후 10시 17분 46초
제 목(Title): Re: C

아마 긴 프로그램을 안 짜셨나 보군요.
그런 프로그램 짜실 때 8로 해놓고 써보세요.

아마도 안 보이는 게 더 많을 겁니다.

저 같으면 6이상 쓴 사람은 전부 불합격입니다.

긴 프로그램도 안 짜본 사람한테 무슨 프로젝트를 맡깁니까?

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 3일 토요일 오후 10시 34분 53초
제 목(Title): Re: C

> 왜냐하면, code가 너무 다닥다닥붙어 있어서 readability가 많이 떨어진다는
> 것입니다. 저 개인적으로 그렇게 생각하고 있습니다. tab 8로 쓰면 if, for
> 몇개 들어가면 오른쪽 여백이 없어서 code쓰기 불편하다고 하는데, 사실
> 8써도 할 것은 다할 수 있는데. for, if많이 써서 오른 쪽 여백이 얼마남지
> 않게 만드는 경향이 있는 사람은 iQ가 낮아서 그런다고 감히 생각합니다. 쓸데없이
> if만들고 for만들고.. 그렇게 해서 오른쪽 여백 없애고, 그래서 tab은 4쓰고..
>
> 아 미치겠다.

허허… 그냥 웃지요…

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 3일 토요일 오후 10시 45분 30초
제 목(Title): Re: C

내가 프로그래머고 직장을 구하고 있다면, 프로그래머의 실력을 묻는답시고
겨우 탭 사이즈나 물어보는 직장엔 안 간다.

탭 사이즈야 자기 혼자 짜면 자기 마음대로 쓰면 되는 것이고, 여럿이 짜면
짜기 전에 서로 통일하고 짜면 되지, 뭐가 불만이람?

탭사이즈가 8이면,

1. 일단 함수 들어가면서 8
2. for loop 하나 돌리면 8
3. 하나 더 돌리면 8
4. switch, case 쓰면 8 또는 16
5. 그 안에 if 문 하나 있으면 8

가볍게 화면 반쪽을 먹어버린다. 코드가 훤해진다. 뭐 취향 문제이긴 한데,
이렇게 짜면서 그게 절대기준이라고 우기는 사람 프로그래밍 실력이야… 뻔하지모.

* 탭사이즈 2로 쓰는 인간이.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 3일 토요일 오후 11시 26분 05초
제 목(Title): Re: C

GUI쪽 프로그램 짤려면 tab size 8로는 아무래도 좀 답답하지.

펑션 이름들이 좀방 길잖아. 파라미터도 많고.

내가 밥벌어먹고있는게 대충 40만라인쯤 되는 코드인데,
우리는 tab을 8로 쓰는 대신에, 136칼럼을 기본으로 하고 쓴다네.
xterm으로 볼때도 화면 136×100 6×10 폰트.
프린터로 찍을때도 비슷하게.

그럼 tab size 8이라도 견딜만 함.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 12시 03분 25초
제 목(Title): Re: C

tab size 8은 짜증남..

nested loop가 4이상 되는건 툭하면 line over를 하기때문..

8쓰라는 회사는 지원도 안할것임.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 12시 17분 34초
제 목(Title): Re: C

모르긴 몰라도 원글 쓴사람, 많이 짜보지 않은것 같습니다.

그런식의 질문을 하는 것부터 틀렸다고 말하고 싶네요.

무엇보다도 이런 얘기 나오는 것 자체가 조금 문제있어 보입니다.

수만 – 10만 line 이상 되는 program을 짤때 각종 function, variable에

몇백 line짜리 program처럼 간단하게 이름 붙일 수 있을 것 같습니까 ?

indentation이 그렇게 쉽게 될 것 같아요 ?

조금만 하다보면 그새 잊어먹고 code의 숨은 뜻을 알아내기 위해

자신이 작성한 것을 역으로 분석하는 경우가 허다합니다.

함수 이름도 비슷한게 많아져서 갈수록 길어지는 경우도 다반사구요 ..

Program 구조가 복잡해지는 것은 말할 것도 없습니다.

그런데 tab size를 8로 해요 ?

Terminal 해상도가 꽤나 좋은가보군요 ..

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 01시 59분 18초
제 목(Title): Re: C

하하.. 웃긴다.

너가 있는 회사는 개발회사는 아니겠지 설마? ^^

탭을 8이상쓰다니..

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 02시 49분 57초
제 목(Title): Re: C

질문 자체가 난센스다.

면접시 이런거 물어보지도 않는다.

이런 것을 가리켜서 井低之蛙라고 한다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 02시 58분 56초
제 목(Title): Re: C

프로젝트에 따라서…3~4
심한경우 2까지.

난 갈수록 tab이 작아지던데… 쩝

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 03시 33분 34초
제 목(Title): Re: C

탭사이즈는 2.

오오. 탭사이즈 2로 쓰시는 분이 키즈에도 있다니.
힘든 인생을 사시는군요 ^_^;; (동질감)

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 05시 01분 09초
제 목(Title): Re: C

한때는 탭사이즈 1도 썼습니다. 인간이 할 짓이 아니더군요. -_- 결국 ‘이건
도저히 안되겠다’ 싶어서 고친게 2…. –;

근데 2로 해도 그럭저럭 쓸만합니다. 사실 4 정도가 이상적이라고 생각은
하지만, 워낙 게을러서 고치기 귀찮아하기 때문에.. better의 가장 큰 적은
good enough라고…

사실 탭사이즈가 뭐가 문젭니까. 얼마나 구조적으로 짜느냐가 문제지.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 06시 23분 25초
제 목(Title): Re: C

난 3.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 07시 45분 21초
제 목(Title): Re: C

음. 전 3으로 쓴느데. 이게 젤 편한듯..

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 07시 49분 47초
제 목(Title): Re: C

아참 한갖더. 탭 사이즈 3으로 하고
space expand를 사용합니다.
이게 젤루 편한듯. 인쇄하면 탭때분에
코드가 뒤죽박죽 될때가 많죠.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 09시 02분 28초
제 목(Title): Re: C 질문한 사람, 완전 깨지다!

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 09시 34분 15초
제 목(Title): Re: C

저는 탭 안쓰고..
스페이스로 띄어쓰기 두칸 합니다..

탭이 이따금 가다가..
말썽을 부리면..
황당하기 까지 합니다..

그래서..아예 탭이란 키를 사용을 안하죠..

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 09시 41분 19초
제 목(Title): Re: C

첫 글 올리신 양반.

8을 쓰겠다는 생각을 미루어보건대,
구조적 프로그래밍 기법을 코드로 옮기는 기술을
배우지도 못했으므로 감점 10점.

어쩌다 8을 쓰게 됐고 지금 익숙해져서 8을 쓰는 것이라면
그런 기법을 배울 기회를 갖지 못했을 뿐이라는 점에서 감점 2점.

역시 8을 쓰겠다는 생각을 가진 것으로 보아
straight-forward-if 문장이 무엇인지도 모를
가능성이 99%라는 점에서 다시 감점 10점.

C++보다 Java가 랭귀지 구조적 측면에서
왜 더 좋은지 이해하지 못하고 있을 가능성 90%.
아직 Java를 모르면 기술 습득 태만으로 감점 3점.
Java를 알고 여전히 8을 쓰고 있으면
Java를 Basic처럼 쓰고 있을 확률 높으므로 감점 3점.
Java를 Java답게 쓰고 있더라도 이제 애플릿
테스트 프로그램 정도 짜봤을 정도라는 면에서 역시 점수 없음.
탭 8한테 줄 점수 참 없군요…

SE는 날랑방구 뽕이라는 생각을 갖고 있으며
정말 쓸데 없는 학문이라고 생각할 가능성 높으므로 감점 5점.
만일 SE에서 하는 말이 참 깊게 와 닿는다면
최소한 8을 쓰자고 주장하지는 못할 것임.

왜 코드를 이렇게 짜면 안되고
rc = open();
if (rc is failure)
error();
do something;
rc = close();
if (rc is failure)
rollback();
else
commit();

이렇게 짜야 하는지
if (open() is success) {
do something
rc = close();
if (rc is success) {
commit();
} else {
rollback();
}
} else {
error();
}

당신은 이해하지 못하고 있음.
계속 8을 고수하여 C는 비구조적인 프로그램을
작성가능케 한다는 악명을 높여 주슈.

한 가지 더.
펑션은 블랙박스처럼 행동해야 한다는 것을
알지 못하고 있는 것 같으며, 또는 알고 있다고
하더라도 라인 단위에까지 적용해야 한다는 것을
모르고 있어서 감점 10점.
탭 8 안 쓰는 거 가지고 참 감점도 많이 시키네… 후훗.
당신 프로그래머를 뽑기는 커녕 어디 가면 떨어지겠는데요?

덧붙임.

8을 주장하는 사람은 많은 경우 기억력과 암기력이 좋은데
자신이 만든 코드를 탭 8로 써서 비구조적으로 만들어놓고도
코드를 대부분 잘 기억하는 특징이 있음.
물론 이런 코드는, 좀 능력이 떨어지는 다른 프로그래머가
코드를 이해하기 힘들게 만들기 때문에 좋은 게 아님.
이런 사람은 조직에서 쪼차내서 혼자 놀게 만들거나
아니면 혼자 노는 부서에 보내서 능력을 발휘하게 해줘야 함.
첫 글 쓴 사람은 아마도 IQ가 높아서 코드를 아무렇게나
만들어도 잘 기억하는 사람의 부류로 보임.
So, 실전에서 좀 더 굴러서 다양한 코드 스타일일 몸에 익혀
초식 뿐만 아니라 내공을 키우길 권고함.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 11시 04분 42초
제 목(Title): Re: C

웃기는 소리좀 작작하쇼…

tab=8이어야 한다고?

tab은 4정도를 권고하는 경우가 훨 많소.

레포트 몇개짜보고 하는 헛소리로 들리는 군.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오전 11시 14분 00초
제 목(Title): Re: C

우오 프로그램 고수이신 것 같네요.

질문하나… 라인단위까지 적용한다는게 정확하게 어떤 의미인가요 ?

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오후 08시 55분 05초
제 목(Title): C revisited

자 좋은 이야기 참 많이 나왔다. 집에 갔다가 온 사이에 많이도 뤼를 달았구나.

java, C++은 C랑은 다른 언어이니 java에서 썼던 tabsize, C++에서 썼던 tabsize
가지고 이야기를 전개해서 이야기를 더 혼란속으로 몰아넣지 말자고 먼저 제안하면서
여러분들의 뤼에 대한 나의 생각을 나열해 보겠다.

tabsize를 1,2,3을 쓰면서 자랑스럽게 말을 하는 놈들이 참 많나보구나.
참 미련도 하시지. 사람이 얼마나 쫀쫀하면 tab을 그것밖에 못주고 살까?
tabsize로 1,2,3를 쓰면 오른쪽으로 code가 갈일이 없어서, if, for, while등을
수없이 nesting시킬 수 있어서 참 좋겠구나.

그리고 너희들은 얼마나 프로그램 많이 짜보아서 나보고 리포트 몇개 짜보았다고
말하는거니? 누근 만 line, 2만 line프로그램 안짜본 적 있는 줄 아느냐?
미안하지만 나는 code의 line수를 세본적이 없어서 얼마나 긴 프로그램을 짰는지
기억이 없구나.

한마디만 하자.

몇일전 TCP/IP implementation에 대한 질문 이곳 anonymous에 나온 것 같드라.
TCP/IP가 몇일걸려 뚝딱 짤 수 있는 것이 아님을 알고 있을테니, TCP/IP가 상당히
복잡한 것임은 너희들도 잘 아리라 믿는다.

한번 TCP/IP implementation source를 들여다 보거라. FreeBSD에도 있구, linux에도
있으리라 믿는다. 그곳에서 tabsize몇으로 정해놓고 쓰고 있더냐?

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오후 08시 58분 08초
제 목(Title): Re: C revisited

첨가하고자 한다.

내가 보기싫어 죽겠는 코드들은

char *function(char *name)
{
FILE *fin;
char *something;

fin = fopen(name, “r”);
if (fin != NULL) {
이하 30 line 생략
} else {
return NULL;
}
fclose(fin);
return something;
}
와 같은 code들이다. 뭐가 문제 있는지 모르겠지? 이code에서?
쓸데없이 indentation을 만들어낸다는 것이야. 미친짓이야. 이렇게 짜는 것은.

내가 무슨 이야기하는지 모르겠으면 너도 별볼일 없는 놈이야.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오후 09시 06분 47초
제 목(Title): Re: C revisited

다음의 code도 한번보자.

void name_put(int code)
{
switch (code) {
case FLAG_A:
printf(“file.c: name(): code was FLAG_A\n”);
break;
case FLAG_B:
printf(“file.c: name(): code was FLAG_B\n”);
break;
case FLAG_C:
printf(“file.c: name(): code was FLAG_C\n”);
break;
case FLAG_D:
printf(“file.c: name(): code was FLAG_D\n”);
break;
default:
printf(“file.c: name(): code was Unknown\n”);
break;
}
return;
}

내가 열내는 것은 위와 같은 code를 만들어내는 사람들 때문에 미친다는 것이야.

조금만 노력하면 좀더 나은 code만들어 낼 수 있는 것 아닌가?
비록 다음의 code가 이상적이지는 않을지라도 나는 다음과 같은 code를 추천한다.

void name(int code)
{
char *p;
switch (code) {
case FLAG_A: p = “FLAG_A”; break;
case FLAG_B: p = “FLAG_B”; break;
case FLAG_C: p = “FLAG_C”; break;
case FLAG_D: p = “FLAG_D”; break;
default: p = “Unknown CODE”; break;
}
printf(“file.c: name(): code was %s\n”, p);
return;
}

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오후 09시 12분 37초
제 목(Title): Re: C revisited

아무리 유명한 code라도 그것이 모든 것 – 사소한(?) indentation부터

여러 구현상의 technique까지 – 의 bible이 될 수는 없습니다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오후 09시 13분 46초
제 목(Title): Re: C revisited

전산과는 상관없는 사람이지만…

탭사이즈 같은 건 SE관점보다도
개인 취향에 좌우되는 것 아닌가요?

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오후 09시 14분 50초
제 목(Title): Re: C revisited

네말이 맞다. 바이블이 될 수는 없다.

하지만, tabsize를 8쓰면 몇개의 indentation때문에 space가 부족해질 수 있다는
tabsize !=8 주의자들의 핑계거리는 적어도 상당부분 무용지물이 된다는 것이다.
TCP/IP를 tab = 8 로 썼으니 8쓰자고 주장하는 것이 아니라, 복잡한 code라도
언제든지 tab = 8로 요리할 수 있다는 것을 보여주려 하는 것이다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오후 09시 16분 35초
제 목(Title): Re: C revisited

개인취향이라는 것에도 동의하는 바이다.

하지만, 서로서로의 code를 들여다볼 수 밖에 없는 상황에 놓이면 다른 문제가
된다. 나의 무엇무엇을 바꾸면 상대편도 무엇무엇을 바꾸어야 할 상황이
되는 경우, 다른 사람 code를 직접 access해야 하는데, 증말 미치는 경우가
많다. code가 다닥다닥 붙어 있으면 말이다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오후 09시 24분 47초
제 목(Title): Re: C revisited

탭사이즈야 얼마든지 에디터에서 바꿀 수 있잖아요.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 4일 일요일 오후 09시 27분 07초
제 목(Title): Re: C revisited

내가 또 미치는 경우는 다음과 같은 경우인데..

char *function(char *szBuffer, int iLen)
{
int i;
char *tmpBufferPointer;

for (i = 0, tmpBufferPointer = szBuffer; i < iLen; tmpBufferPointer++) 이하 개지랄 떠는 code부분 생략. return something; } 이 경우도 다음의 code로 충분하다는 거야. 미친놈의 Hungarian들아. char *function(char *Buffer, int Len) { int i; char *p; for (i = 0, p = Buffer; i < Len; p++) 이하 개지랄 떠는 code부분 생략. return something; } Len은 length임이 분명한데 뭐하러, integer랍시고 i를 붙여 iLen이라 하는거냐? 또 뭐가 두려워서 char *tmpBufferPointer라는 거창한 이름을 주는거냐? 단순한 char *에 말이다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 4일 일요일 오후 09시 37분 53초 제 목(Title): Re: C revisited 하긴 char *tmpBufferPointer가 char *szTmpBufferPointer보다는 더 나은 것 같다. 자 또한가지 말하고 싶은 것은 int howmany(char *some[]) { int dwCount; char **pp; for (dwCount = 0, pp = some; *pp; pp++) dwCount++; return dwCount; } 와 같은 거지같은 code만들지 말고 살자. 거지같은 Hungarian들아. 다음의 code로 충분하지 않느냐? int howmany(char *some[]) { int i; char **pp; for (i = 0, pp = some; *pp; pp++) i++; return i; } dw어쩌고저쩌고 하는 variable 보기싫어 미치겠다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 4일 일요일 오후 09시 40분 45초 제 목(Title): Re: C revisited 결벽증 아니에요? [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 4일 일요일 오후 09시 43분 51초 제 목(Title): Re: C revisited 변수 이름은 그렇다 치고.. 탭 사이즈가 8이어야 하는 이유도 좀 자세히 들어봅시다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 4일 일요일 오후 10시 13분 21초 제 목(Title): Re: C revisited 상당한 부분을 자신있게 말하고 있지만, 님이 하고 있는 프로그램 역시 하나의 스타일이라네. 누구든지 자신만의 스타일이라는게 있고, 그래서 주석이라는 놈이 나와있지.. 변수를 어떻게 지정하든, 탭을 어떻게 주든, 또한 흔히 말하는 인터페이스가 어떻든... 그건 자신만의 스타일이라네 님이 싫다고 그걸 그렇게 매도하며 hungarian이니 어쩌니 라고 말하는데. 그렇게 말하는 님의 프로그램 소스좀 함 보세.. 님이 생각하기에 정말 잘 된 코드이다..라고 생각되는걸 아무 데나 좀 올려보게나..구경함 해보세나.. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 4일 일요일 오후 10시 18분 07초 제 목(Title): coffee revisited 자 좋은 이야기 참 많이 나왔다. 오락하다 온 사이에 많이도 뤼를 달았구나. 홍차, 아이스커피는 커피랑은 다른 음료이니 홍차 마시는 스타일, 아이스커피 마시는 스타일 가지고 이야기를 전개해서 이야기를 더 혼란속으로 몰아넣지 말자고 먼저 제안하면서 여러분들의 뤼에 대한 나의 생각을 나열해 보겠다. 각설탕을 1,2,3개를 넣으면서 자랑스럽게 말을 하는 놈들이 참 많나보구나. 참 미련도 하시지. 사람이 얼마나 쫀쫀하면 설탕을 그것밖에 못넣고 살까? 각설탕을 그것만 넣으면 칼로리 걱정할 일이 없어서, 밀크와 크림을 원하는대로 넣을 수 있어서 참 좋겠구나. 그리고 너희들은 얼마나 커피 마셔 봐서 나보고 커피의 향을 아냐고 말하는 거니? 누군 모카, 헤이즐넛 안 마셔본 줄 아느냐? 미안하지만 나는 상표를 보고 마셔본 적이 없어서 얼마나 다양한 커피를 마셨는지 기억이 없구나. (블라 블라...) 내가 또 미치는 경우는 다음과 같은 경우인데... 머그컵에 커피 가득 따라놓고 음악 들으면서 책보면서 비스킷을 곁들어 즐기기 이 경우도 다음의 커피로 충분하다는 거다. 이 미친 머그광들아. 컵에 커피 따라서 각설탕 8개 넣고 휘휘 저어 마시기. ----- 엥, 별로 재미없다... [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 4일 일요일 오후 10시 24분 31초 제 목(Title): Re: C revisited 너 같은 넘 보면 욕밖에 않나온다. 거 케이스 문예 말여... 너 어거지로 거지 같은 코드 맨들어 내냐구 고생좀 했꾸나... 그런 거지 같은 코드는 탭사이즈 상관 없이 거지 같은거구... 글구 말여... 뭐 티시피 아이피 프로그램 보면 어쩌구? 거 넌 뭔 에티터 쓰는지 몰겠지만 만일 브이아이 쓴다면 ts=3으로 해놓쿠 소스 한 번 봐볼래??? 그려두 탭사이즈가 팔로 보이나? 어떤 에티터가 탭사이즈 조절기능이 없나 나한테좀 말해주봐봐 잉??? 또 뭐 헝가리안이 어쩌구 저쩌구??? 지랄 개지랄... 나두 그런 코드는 않쓰는 놈이지마는 것두 나름대로 의미가 있다구 생각헌다. 왜 뜹냐??? 전부는 아니지마는 너부더 더 일찍 간 선배들이 다 나름대로 이유가 있기 땜시 그런 발상을 해낸겨~~~ 내 지금 예를 들기가 좀 모하지마는 니도 언젠가 이런땐 헝가리언 노테션을 쓰는게 편리하구낭~~~하는 생각이 들 때가 오길 바란다. 물론 그 때두 니가 그런 코드 쓰기 실타면 건 뭐 니 맘이구... 나두 그런데까지 지랄 하면 너랑 똑같은 넘 되니까... 암튼 너 나름대로 잘 났나분디... 이 못난놈이 봉께 잘난거 넘 티내는거 가터서리 열좀 받네... [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 4일 일요일 오후 10시 27분 33초 제 목(Title): Re: C revisited 또, 세계인이나.. 세현, 삼열에 버금가는 미친놈 하나 등장했군.. C++과 자바를 싫어하는놈 같아서는 아마 unix based c program을 하는놈같은데.. 설마 c simulation programming하는놈이 tab=8을 쓰는 미친짓은 하는것 같지는 않고. unix programming의 bible이라는 Stevens의 저서들을 한번 봐보슈.. 모두 tab=4 라는것들을 볼수 있으니.. 자기가 좋아한다고 해서 남에게 무조건 강요시키는 흔한 전산 사이코중에 하나로밖에 안보이는구려. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 4일 일요일 오후 10시 46분 36초 제 목(Title): C 코드 가지고 지랄 하시는 분. 학부생이 yacc 가지고 컴파일러 하나 짜고 구루가 된 마냥 떠드는 것 같구료. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 4일 일요일 오후 10시 51분 22초 제 목(Title): Re: C 코드 가지고 지랄 하시는 분. ^^ '놈'으로 정정. 냅둡시다. 혼자 지랄하다 지치면 나가떨어지겠죠. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오전 01시 20분 32초 제 목(Title): Re: coffee revisited 괜찮았어요. 너무 오래 끌지 않은 것도 좋았구요.. ^^ [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오전 01시 51분 37초 제 목(Title): Re: C revisited 몇주 안에 프로그래머로 일을 시작하게 된 사람이라 이 주제에 대해 관심이 많은데, 제 눈에도 처음 이것들 글 올린 사람은 정상이 아닌것 같습니다. 별거 아닌것 가지고 그렇게 짜증을 내다니, 앞으로 회사에서 저런 사람 만나면 참 사는게 고달퍼 질것 같네요. 쓸데없이 이리 트집 저리 트집 잡고 들들 볶을거 아닙니까. 거창하게 말을 시작해서 긴장하면서 읽어봤는데 이거야 원... 이건 인격 수양의 문제 아닙니까. 프로그래밍 뿐만 아니라 평소 생활에도 주위 사람들보고 이건 왜 이러냐 저거 맘에 안든다 해서 굉장히 피곤하고 짜증나게 만드는 스타일 같네요. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오전 02시 13분 15초 제 목(Title): Re: C revisited 븅신 같은 새끼가 다 있군. TCP나 Linux 소스에서 탭 사이즈를 논하냐. 븅신아. 그건 그냥 탭이야. 탭 사이즈는 에디터에서 맘대로 조정 가능해. 븅신아. 그러니까, 다른 사람한테 긴 프로그램 안 짜봤다는 소리 듣는거야. 븅신아. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오전 04시 20분 57초 제 목(Title): Re: C revisited 헝가리안, 그거 짜증나지. 나도 도저히 고렇게는 못하겠다. 그치만 읽기는 좋잖애? 더구나 요즘은 C라고 하면 무조건 (그리고 당연히) VC++라고 쓰고 비주얼 씨뿔뿔(!)이라고 읽는 그것만 생각하니까 새로 배우는 애들은 다 그게 정석인줄 알걸? 그러니까, 그건 너가 참아. 그리고 중간에 자바하고 C++들먹인놈은 누군지 모르지만, 그게 왜 C애기 하는데 나오냐? 그 두개 섞는놈들 정말 보기 싫어. 특히 전부다 C로 짰는데 주석은 전부다 //로 해서 표준C로는 컴파일 안되게 하는 놈들, 정말 보기 싫어. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오전 07시 47분 07초 제 목(Title): Re: C revisited tabsize를 2,3으로 쓰는 사람들도 진짜 tab character를 써서 그런 indentation을 만드니? space character두번 세번 눌러서 그게 tab이라고 우기는 거니? 그래 내가 양보해서 tab 4쓰는 사람은 봐 줄 수 있다고 하자. 도대체 2,3쓰는 사람은 뭐하는 사람들이냐? 그리고 tab size를 editor로 바꿀 수 있다고 하는 사람 보게나. 꼭 그게 가능한 세상만 있는게 아니란다. 미안하지만, 난 windows도 아니고 UNIX도 아닌 세상에 살아서 그렇단다. 하긴 어떤 놈은 tab character를 누르면 자동으로 space로 convert되는 editor를 쓰고 있어서 어쩐다는 이야기를 자랑스럽게 하는 사람도 있으니, 참 불쌍한 인생.. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오전 07시 50분 55초 제 목(Title): Re: C revisited C에 대해서 고수라고는 못하지만 조금 안다고 생각하는 사람이라서 이런 건방진 이야기 하는지는 몰라도, C code를 처음 딱 보기만 해도 이 사람 실력이 얼마인지는 알겠더라. 나도 처음엔 그런 시시콜콜한 것에는 신경쓰지 않았어. 하지만 세월이 지나니까 어떻게 coding을 해야 무난한, 모나지 않는 code가 되는 것인지는 알겠더라. C revisited에 뤼다는 사람들에게 부탁하고 싶은데, 제발 학부생들은 뤼달지 말아라. 그리고 TCP/IP이야기를 내가 왜 꺼냈는지 이해하지 못하는 쪼다가 하룻밤 사이에 생겼나보구나. 내가 말하지 않았니? 아무리 복잡한 코드, 예를들어 TCP/IP implementation같은 거,라도 tab 8로 잘 요리할 수 있다는 것을 보여주려고 TCP/IP 이야기를 꺼낸 거란다. TCP/IP랑 linux가 tabsize이야기한다고 내가 그런 적 있느냐? Stevens의 Advanced Unix Programming이야기 한놈 보게나. 책과 terminal은 다르다는 것을 알아주었으면 좋겠다. 책은 column이 좁은 편이라서 tab을 약간 조정하는 것 같다는 생각 해본적 없니? Richie가 쓴 C programming Lanugage도 tab이 6인가, 5를 썼던 것으로 기억한다. 그렇다고 해서 Richie가 5, 6을 tab 으로 5인가 6을 썼을 것라고는 생각되지 않아. 그리고 부탁하는데, Richard Stevens가 쓴 Network Programming책의 tabsize가 얼마인지좀 보아주었으면 좋겠구나. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오전 08시 01분 03초 제 목(Title): Re: C revisited 그래 내가 미친놈이라고 하자. 내가 야구를 배울려고 하는데 내맘대로 스윙연습하고 있다고 하자. 그런데 이좃범이란 애가 와서 타격자세에 대해서 넌 이렇게 하면 안돼. 이런 자세는 좋은 안타가 나오지 않아. 되도록 이러이러한 자세가 좋고 이런 타격자세는 예전의 유명한 타자 모모의 타격자세이니까 적어도 엉터리 자세는 아니라고 그냥 믿고 이런 자세로 가봐. 하고 지도한다고 할때, 야 이좃범 씹할놈아. 지금의 내 자세는 내 개인의 취향이야. 니가 뭔데 이래라 저래라 하는거냐? 하고 말할거니? 하긴 거의 모든 C programmer들은 이런 똥고집은 있는 것 같긴한데. 그래도 C revisited에 뤼단놈 중에서는 Hungarian에 대해서 옹호하는 글 쓰는 사람이 없네? 이게 어찌된 일이지? 예상밖이다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오전 08시 35분 49초 제 목(Title): Re: C revisited 내가 case문으로 예를들었더니, 어거지 같은 코드 만드느라고 수고했다고 칭찬도 하고 그런 사람이 다 있네드래.. 하하하. 그 code는 내가 만드는 것이 아니고 내가 물려받은 거야. 난 그런 code보면 너무 답답하거든. 그 code보면 한 눈에 debug용 function이라는 것 알겠지? 대충 다음과 비슷한 것이었지? #define STATE_A 0x00000001 #define STATE_B 0x00000002 #define STATE_C 0x00000003 void put_state(int state) { switch (state) { case STATE_A: printf("put_state(): STATE_A\n"); break; case STATE_B: printf("put_state(): STATE_B\n"); break; case STATE_C: printf("put_state(): STATE_C\n"); break; case STATE_D: printf("put_state(): STATE_D\n"); break; case STATE_D: printf("put_state(): STATE_D\n"); break; default: printf("put_state(): unknown state\n"); break; } return; } 그런데 state의 경우의 수가 수십가지나 되면 미친다는 거야. 괜히 code가 길어지거든. 난 이런 경험많이 만났어. 예전에 누가 이렇게 짜놓았더라구. 그럼 다음과 같은 것은 어떠니? #define STATE_A 0x00000001 #define STATE_B 0x00000002 #define STATE_C 0x00000003 struct state_name { int s_state; char *s_name; }; #define WHAT_IS_THIS(x) {x, #x} struct state_name state_names[] = { WHAT_IS_THIS(STATE_A), WHAT_IS_THIS(STATE_B), WHAT_IS_THIS(STATE_C), WHAT_IS_THIS(STATE_D), .... }; char * get_state_name(int state) { struct state_name *p; int i, len; len = sizeof(state_names)/sizeof(state_names[0]); for (i=0, p = state_names; i < len; i++, p++) if (p->s_state == state)
return p->s_name;
return NULL;
}

void
put_state(int state)
{
char *name;
name = get_state_name(state);
if (name)
printf(“put_state(): unknown\n”);
else
printf(“put_state(): %s\n”, name);

return;
}

state가 수십가지나 되는 경우를 좀 생각해봐.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 09시 26분 06초
제 목(Title): Re: C

난 4 쓰는데..

나같은 놈은 당장 짤리겠군..

몇십만 라인되는 그 소스를..

8로 고치면 …�

어이 8로 한다고 그러는 사람…

왜 너 기준으로 생각하지? 물론 니 회사라면 니 마음대로 겠지만..

세상 그렇게 딱정해놓고 그 선에서 벗어난 사람..배제하면..

안되..그렇다고 니가 정해놓은 선이 언제나 보편적인 가치관이나

그런것에 명확하게 부합된다고 하면 ..오만이지..

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 10시 10분 25초
제 목(Title): Re: C

난 4쓰는데…

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 08시 56분 30초
제 목(Title): Re: 아직도 탭사이즈 가지고 우기는 인간

넌 C에 tab을 2로 해놓고 쓰는 것이니?

너랑 일 같이 안하고 있는게 정말 다행이구나.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 08시 58분 55초
제 목(Title): Re: 아직도 탭사이즈 가지고 우기는 인간

얌마.

너 언제봤다고 반말이야.

너 같은 놈하고 난 같이 일할 수준이 아닌거 같다.

위에 반말쓴놈(너)의 수준을 보니 말이다.

————————————————-

반말쓴놈을 제외한 다른분들껜 죄송.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 10시 36분 44초
제 목(Title): Re: C revisited

tabsize 8을 써야한다는덴 동의하지 않지만 헝가리안 노테이션

싫다는데는 동의합니다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 10시 41분 40초
제 목(Title): Re: C revisited

별 이상한 놈을 다보겠네..

가서,엄마 젖좀 더 먹고 오슈…

없는 실력 있는 체 하느라 힘들겠수다…

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 10시 46분 24초
제 목(Title): Re: C revisited

나보고 젓먹고 오라는 놈 보거라. 너 학부생이지?

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 10시 58분 03초
제 목(Title): Re: C revisited

TAB size?? hard tab size는 8, soft tab size는 4. 🙂

그리고 indentation을 얼마나 하느냐는 프로그램 스타일 문제 아닌가요?

왜 indentation만 가지고 씹죠? 이왕 싸우는거 block 구조도 씹고…

if (aaa) {
blahblah;
}

라고 쓰는 K&R style의 block 구조나

if (aaa)
{
blahblah;
}

라고 쓰는 BSD style이나..

if (aaa)
{
blahblah;
}

라고 쓰는 whitesmith C style이나..

if (aaa)
{
blahblah;
}

라는 이중 indentation의 GNU 식 style이나…
(GNU식에선 2+2 indentation입니다. (두칸 들여쓰고 또 두칸 들여쓰는…))

또 if if else의 위험한 구조도 씹고..
C 언어의 block이 statement가 아니라는 것도 씹고..

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 10시 58분 18초
제 목(Title): Re: C revisited

음.. 탭을 4로 쓰거나 8로 쓰는것은 개인적인 취향이기 때문에 굳이 탭을
8로 쓰고자 주장하는 것은 아닙니다만 최소한 코딩이 옆으로 길어지는
것을 막고자 하는 노력은 해야 될 것 같습니다.
사실 대부분의 코드는 노력만 하면 얼마든지 옆으로 길어지는 것을 막을
수 있고 그렇게 되었을때 탭을 8로 하면 시원스럽게 코드를 볼 수 있습니다.
대부분 코드가 옆으로 쓸데없이 길어지기때문에 (이것들은 어쩔수 없는
경우도 있지만 사실은 대부분 옆으로 길어지는 것을 줄이고자 하는 노력
을 하지 않고 코딩을 하기 때문입니다.) 어쩔수 없이 자꾸 탭 사이즈를
줄이게 되는 것입니다. 탭을 2 로 쓰신다고 하는 분이 계셨는데 아마도
처음에는 탭을 4나 8정도로 쓰다가 코딩을 하다보니 어 이거 안되겠는데
하면서 탭을 다시 4로 줄이고 그러다고 또 코딩이 길어지니까 어 안 되겠다
다시 탭을 2 로 하자 이런식으로 하여 탭을 2 로 쓰게 된것이라고 생각합니다.
코딩의 량이 수만, 수십만 라인이 넘어가더라도 대부분의 경우는 코딩을
할때 이런 점을 유의해서 코딩을 한다면 얼마든지 탭을 8로 쓸수 있고
이렇게 했을때 코드가 시원스럽게 보입니다..
즉 제가 하고 싶은 말은 코딩이 옆으로 길어질때 탭 사이즈를 줄여서 해결
할려는 노력보다는 코딩을 더 깔끔하게 할려는 노력을 해야 된다는 것입니다.
사실 실제로 몇십만 라인의 코드를 그것도 시간에 쫓겨가면서 하다보면
알면서도 옆으로 길어지는 코딩을 하게 되지만은요 처음 c를 시작하는 사람들
은 탭을 4나 8로 쓰는것은 개인 취향인데 뭐가 상관있어 할것이 아니라
탭을 8로 하고도 옆으로 길어지지 않는 코딩을 할려는 노력이 필요할것입니다.
실제로 이런 노력을 할 때 프로그래밍 실력이 향상되고 다른 사람이 디버깅
하기가 좋아집니다.
구조적인 프로그래밍 시대에 무슨 탭사이즈가 중요해 라고 하신 분이 계신것
같은데요..실제로 탭이 2 인 경우에 구조적인 프로그래밍이 되었으리 만무합니다.

이런경우 90% 이상이 아무 생각없이 코딩을 하다가 코딩이 옆으로 길어지는 것을
임시방편적으로 막기 위해서 탭 사이즈를 줄였을테니까요…

결론적으로 다시 한번 말하면탭 사이즈를 4나 8로 하는것은 개인적인
취향이지만 대부분의 잘 짠 프로그램은 탭을 8로 하고서 볼때에도 80 칼럼을
넘어가지 않는다는 것입니다..

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 11시 04분 40초
제 목(Title): Re: C revisited

하하하. 드디어 tab 8에 동의하는 분이 한분 나오셨네요.

아마도 이분은 programmer로써 대성하리라 믿습니다. tab 4로 정해쓰거나
2로, 심지어는 1로 정해놓고 쓰는 바부팅이들과는 질적으로 다른 분인 것 같습니다.

space두번씩 눌러 indentation한다는 쪼다들은 다들 죽어라.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 11시 06분 13초
제 목(Title): Re: C revisited

> char *function(char *Buffer, int Len)
> {
> int i;
> char *p;
>
> for (i = 0, p = Buffer; i < Len; p++) > 이하 개지랄 떠는 code부분 생략.
>
> return something;
> }
>
> Len은 length임이 분명한데 뭐하러, integer랍시고 i를 붙여 iLen이라 하는거냐?
> 또 뭐가 두려워서 char *tmpBufferPointer라는 거창한 이름을 주는거냐? 단순한
> char *에 말이다.

글쓴 이의 답답한(?) 심정은 충분히 이해할 것 같다. 하지만 그에
대한 경험적인 변호(!)의 토를 잠시 달고 싶다.

나는 C 코딩을 10년 넘게 했는데 그 와중에 수많은 시행 착오를
겪으면서 느낀 것 중의 하나는 C가 갖고 있는 기능은 좋지만
readability가 다른 언어보다 떨어져서 여러 사람이 같이
짜거나 혹은 자기 스스로 나중에 보더라도 이게 어떤 기능을
하는 모듈인지 헷갈린다는 점이 반복적으로 만나는 어려움이었다.
사실 이건 어떤 얕은 테크닉으로 극복할 수 있는 것이 아니다.
이것은 코딩과 문서 작업(documentation)을 제대로 병행하지
않아서 생기는 문제인데 사실, 그 이전에 충분한 사전 준비 작업이
되지 않았기 때문에 생긴다고 볼 수 있다. 나름대로 프로그래머라고
하는 사람들을 보면, 자신감이 있는 건 좋은데 어떤 프로그램을
짤 때 먼저 알고리즘과 pseudo coding(hand writing 레벨에서)을
충분히 하지 않고 바로 프로그래밍에 들어가는 경우가 많기 때문이다.
아무튼 이런 문제를 근본적으로 해결하려면 코딩 전에 많은 준비를
해야하지만 코딩하면서 지켜야할 몇가지 원칙도 있다고 본다.
그 중에 하나로 나는 변수나 함수 이름을 정할 때 매우 신중해야
한다는 걸 발견해왔다. 사실 hungarian 코딩도 그런 원칙을 지키는
방법의 하나로 봐야할 것이다.

맨 위에 예로 든 코드에서, 함수 길이가 별로 길지 않으면
char *p;
와 같은 형태가 전혀 문제가 되지 않지만 프로그램이 길어지면서
다양한 변수가 비슷비슷한 역할로 등장하면서 코더는 헷갈리기
시작하고 가뜩이나 char *p, *q, *r; 등으로 써오던 변수들이
예기치 않게 사용되어 찾아내기 엄청 어려운 버그를 만들어낼
수 있다. 분명히 그렇다.

위의 예제는 단순하니까 논자의 주장에 동의하지만, 만약 그
언급한 대로 “개지랄 떠는 코드 부분”이 자꾸 늘어나기 시작한다면
틀림없이 나중에 헷갈린다. 중간에 다시 char *p;가 등장할 수도
있다. 어떤 면에서 이건 초보 프로그래머들이 하는 전형적인 실수 중의
하나이다.

이런 것을 원천적으로 바꾸려면, 습관적으로라도 또 아무리 코드
길이가 짧더라도 변수명을 정하는데 적당한 길이를 유지하는 것이
매우 중요하다. 특히 C의 특성상 스트링 처리는 치명적인 버그를
유발하기 쉬우므로 int i;에 비해 char *p;는 대단히 신경을 써야만
한다.

학생 입장에서 1,000라인 ~ 2,000라인 짤 때는 이런 것이 문제가
되지 않는다. 그러나 업체에서 납품 시간을 지키면서 50,000라인
이상 짜야할 때는 이런 코드를 나중에 다시 볼 틈이 없다. 이건
사실 불행스럽긴 하지만 우리 현실이 그렇다. 짜는 순간 가능한
검증도 쉬운 형태로 해야만 한다. 그게 습관이 되다 보면 자기도
모르게, 동시에 아무리 짧은 코드라 하더라도 변수를 읽기 쉽게
정하고 함수 명을 정할 때도 신중해지는 것이다. 비록 그게 길더라도
말이다. 그렇게 되면 때로 그 자체가 comment 역할도 할 수 있다.

그래서 역으로, 좋은 코드는 변수나 함수 명은 적당히 길면서
라인의 횡 길이가 종이나 화면의 2/3을 넘지 않는 경우라고
보기도 한다. 유명한 프로그래머들의 코드를 보면 그게 많이
느껴진다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 11시 18분 21초
제 목(Title): 헝가리안

전부 헝가리안 노테이션을 씹는 분위기이니 저라도 옹호의 발언을 한마디..
지저분하고 무성의한 코딩을 보자면 짜증이 나긴 하지만
버그 없이 잘 작동하고 뭐 하는 코드인지 이해도 된다면
그걸로 충분합니다.

스타일보도 더 중요한 문제는
이부분이 도대체 뭐하는 코드인지 초보자이건 전문가이건 모두에게 명백해야 한다는
점.
버그가 없어야 한다는 점이죠.
훌륭한 스타일을 고수하자는 것도 바로 이런 이유에서이지
스타일 자체가 목적은 아닙니다.

헝가리안 노테이션이 지저분해 보이니 너무 과도하게 사용하는 것은 스타일 구기는
짓이지만,
지 잘난 맛에 초보자 이해하기 어려운 코드를 작성하는 것 보다는 훨 낫습니다.
누구나 쉽게 이해할 수 있는 코드를 작성하기 위해서라면
스타일 좀 구기는 것도 나쁘지 않습니다.

따라서 너무 과도하게 헝가리안 노테이션을 사용할 필요는 없지만,
과도하게 사용한다고 해서 크게 나빠질 것도 없습니다.

암호같은 이름만 쓰는 사람 하고
과도하게 장황한 이름만 쓰는 사람이 잇다면
전 후자와 같이 일하겠습니다.

지 잘난 맛에 사는 놈은 저 혼자 일하라고 냅두는 것이 좋죠.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 11시 19분 00초
제 목(Title): Re: 근사한 선물..

TAB2라.. 쩝.. 제가 그렇게 쓴다고 올렸었는데..
평소에 4개 프로젝트에 따라 3또는 2개.

그게요…

C++얘기가 또 나오는데..

C로 짤때는 4정도로 쓰곤 했고..library들이 지가 아무리 개겨봤자 요리가
됐었는데..

거의 모든 class와 function(method? -_-) data type등등이 template을 이용하고
상속에 상속에 상속에 상속에 다시 상속 받은 것들을 2~3개 한꺼번에 쓰려고
하면… 가로를 135이상 쓰지 않는이상 대책이 안서지요.

근데 저는 화면에 최대한 많은 정보가 보이는게 좋거든요.
그래서 emacs를 frame 4개로 띄워서 80×100정도를 가로로 겹치지 않게 가로로 두 개
배치하고, 가상 데스크탑으로 그 아래에 똑같은 방식으로 하나 더 배치..
각각의 frame은 1~2개의 윈도우 사용…

이렇게 되니까..가로로 넓히기도 그렇고…. 그니까 최대한 짜낸기 tab size를
줄이는거 뿐이더군요. 쫍.

그래도 font-lock이랑 옵션 패턴 한 두 개 설정하면.. 영역은 칼라로 깨끗하게
구분해 주거든요. 머.. 구분하는데 지장 없으니까.. 쓰는거죠.

tab은 자동으로 space로 바꿔주도록 설정하고.. 그걸 편집할때는 tab으로
인식하니까.. 어디서 읽든 문제는 안되고요..
vi도 비슷하죠 모..

windog에서는 windog용 emacs가..기능은 조금 부족하지만 쓸만하고..
dog도 emacs가 있고 font-locK도 지원하는데..여기 얘기하고는 안맞네엽. 음냐

tabsize=8님의 글중에..나온 sample이..참 어디서 많이 본 스타일이네요.
예전에 모 정보통신 회사와 같이 일한적이 있었는데….
RTOS로 pSOS를 이용하더군요. 교환기 종류의 시스템에서 MP보드에 들아간
프로그램이 그런 스타일이었습니다.
case:
case
case: printf …………….

뜨아~

나같음 그정도 되면 배열로 잡고..영역 검사하겠다. 접. -_-

하튼.. 왜 이 얘기를 꺼냈는가 하면…
그 회사 개발환경이 dog였거든요. 대부분이 q-editor를 쓰고..
98년도에 q를 보게될줄은 상상도 못했었지요.

아마 tabsize=8님이 그 회사에 다닐지도 모른다는 생각이 들어서리..

또 주저리주저리 쓸데없이 말만 길게 늘어놨네요.
미친 욕쟁이가 한 마디 하겠군.

쭈~압.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 11시 19분 55초
제 목(Title): Re: 근사한 선물..

바붕…

c revisited에 re를 단다는게..
엄한데다 달았네요.

그래도 수정하기 시러..걍 내삐둬야지.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 11시 26분 11초
제 목(Title): Re: C revisited

후후..

indentation할때 tab을 사용하는 이유는… 편리해서 이기도 한 것 같은데…

또한 다른 이유도 찾을 수 있겠네요…

어떤 사람은 size 8인걸 좋아하고, 4인걸 좋아하는 사람도 있고…

tab size 8로 indentation해서 짠 사람이 있고…

만약 이걸 가져다 쓰는 사람이 size 4를 좋아한다면…

자신의 editor에서 tab size를 4로 설정하면 그렇게 보이잖아요…

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오전 11시 39분 41초
제 목(Title): Re: C revisited

참 좋은 의견을 내셨습니다. indent될때마다 tab을 쓰면 에디터에서 tabstop만
바꾸어서 보면 하등의 이상할 것이 없겠죠. 4좋아하는 사람이나 8좋아하는 사람이나
대만족일 것입니다.

한가지 단점은 tab4를 쓰는 사람은, 어라 오른쪽 column으로 많이 남았네
흐뭇해하면서 지맘대로 indent, indent하여 nesting을 깊이 들어갈 수 있다는
것이 흠입니다.

자.. 제가 부탁드리고 싶은 것은 무엇이냐하면

우리 tabstop으로 8을 쓰는 습관을 가지자하는 것입니다. 🙂

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오후 12시 12분 28초
제 목(Title): Re: C revisited

처음 C revisited를 쓴 사람의 의견에 동의한다.

tap size가 너무 작으면, 확실히 너무 긴 프로그램의 경우에

자잘은 indent가 되어 제대로 보기 어렵게 되고, 그걸 tab

size를 조정해서 보게 되면 장난 아니게 오른편으로 넘어가게

되지.

그렇지만, 처음에 그 글 쓴 사람에게 말할 것은 그 의견이

틀려서 re:를 단 사람들보다는 말투가 마음에 안들어서 re:

를 단 사람이 많다는 것을 알아둬라.

프로그램 그거 긴 거 짜봤다는게 자랑할 만한 일인지는 몰라도

다른 사람들을 무시하는 발언은 사과를 하도록 해라. 너같은

놈 때문에 프로그래머가 욕을 먹는 것은 참을 수가 없다.

아무리 옳은 말을 하더라도 과격한 말은 삼가하거라. 아가야.

너는 프로그램을 짜기에 앞서 일단 사람이 되어야 할 것 같구나.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오후 12시 17분 35초
제 목(Title): 더 이상 C 를 논하지 말라~!~!

#define X
#define XX
#define XXX
#define XXXX
#define XXXXX
#define XXXXXX
#define XXXXXXX
#define orfa for
#define XXXXXXXXX
#define archa char
#define ainma main
#define etcharga getchar
#define utcharpa putchar

X X
X X X X
X X X X
X X X X
X X X X
X X X X
X X X X
X X X X X X
X XX X X XX X
X XXX X XXXXXXXXX X XXX X
X XXX X XXXX XXXX X XXX X
X XXXX X XX ainma(){ archa XX X XXXX X
X XXXX X oink[9],*igpa, X XXXX X
X XXXXXX atinla=etcharga(),iocccwa XXXXXX X
X XXXX ,apca=’A’,owla=’a’,umna=26 XXXX X
X XXX ; orfa(; (atinla+1)&&(!((( XXX X
X XX atinla-apca)*(apca+umna-atinla) XX X
X X >=0)+((atinla-owla)*(owla+umna- X X
X atinla)>=0))); utcharpa(atinla), X
X X atinla=etcharga()); orfa(; atinla+1; X X
X X ){ orfa( igpa=oink ,iocccwa=( X X
X X (atinla- XXX apca)*( XXX apca+umna- X X
X atinla)>=0) XXX XXX ; (((( X
X atinla-apca XXXXX XXXXXXX XXXXX )*(apca+ X
X umna-atinla XXXXXX )>=0) XXXXXX +((atinla- X
X owla)*(owla+ XXXX umna- XXXX atinla)>=0)) X
X &&”-Pig-” XX “Lat-in” XX “COb-fus” X
X “ca-tion!!”[ X (((atinla- X apca)*(apca+ X
X umna-atinla) X >=0)?atinla- X apca+owla: X
X atinla)-owla X ]-‘-‘)||((igpa== X oink)&&!(*( X
X igpa++)=’w’) X )||! X (*( X igpa X ++)=owla); * X
X (igpa++)=(( X ( XXX XXX X atinla-apca X
X )*(apca+ X umna XXX – XXX X atinla)>=0) X
X ?atinla- X apca XXX + XXX owla X :atinla), X
X atinla= X X X X etcharga()) X
X ; orfa( X atinla=iocccwa?(( X (atinla- X
X owla)*(owla+ X umna-atinla)>=0 X )?atinla- X
X owla+apca: X atinla): X atinla; ((( X
X atinla-apca)* X (apca+umna- X atinla)>=0)+( X
X (atinla-owla)* X (owla+ X umna-atinla)>= X
X 0)); utcharpa( XX XX atinla),atinla X
X =etcharga()); XXXXXXX orfa(*igpa=0, X
X igpa=oink; * igpa; utcharpa( X
X *(igpa++))); orfa(; (atinla+1)&&(!((( X
X atinla-apca )*(apca+ X
X umna- XXXXX XXXXX atinla)>=0 X
X )+(( XXXXX atinla- X
XX owla)*( owla+umna- XX
XX atinla)>=0))); utcharpa XX
XX (atinla),atinla= XX
XX etcharga()); } XX
XXXX } XXXX
XXXXXXXXX

—–
씨바….

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오후 12시 19분 41초
제 목(Title): 또 C가지고 발악들 할래?

#include
static char
atoi[‘C’^’c’]=”__+C-_+C__CC*//_+C&C-_+_C_C/*__”;

main(int
LCL,char
**LB
){FILE*SS;int
abs,
cos;
char fgetc[5],rand [6], qsort [26]
,log[256]; if(3>LCL) return 1;if((SS=fopen( *++LB ,”rt”
))== NULL) return 2; SD( fgetc ,*++LB);while(
fgets(log,0x0100, SS)!=NULL){ abs^= abs; abs–;
while ((int)abs< (int)strlen (log )){cos ^=cos; while (!( isalpha (log[ ++abs]) ))if( !(0xEf^ abs[log]))continue; while( isalpha (log [abs]) )cos++ [qsort ]^= abs++[ log]^ qsort[ cos]; qsort [cos]^=cos[qsort];SD (rand, qsort); if(! (fgetc ['^'^ '^']^ rand ['^'^'^' ]|fgetc[1]^rand[ 1]|fgetc[2]^ rand [2]| fgetc [3]^ rand[3 ])){ printf (log );abs^= strlen(log)^abs; }}}fclose( SS); return 0;}SD( char *pow, char *sqrt) {int exp,sin, malloc ;for(exp^=exp; strlen (sqrt )>exp; exp++ )sqrt [exp] ^=exp[
sqrt ]>=’a’^ sqrt[ exp]> ‘z’?’C’
^’c’:’^’^’^’; pow[1] ^=pow[1];pow[2]&= pow[1];pow[3]^= pow[3] ^pow[2]
;pow[0]^=sqrt[0]^ pow[2][pow];if(!( (malloc ^=strlen
(sqrt)^malloc,malloc ?malloc:malloc ^malloc)^1)) return
;for( exp^=exp,++exp; exp++sin))if((sin[sqrt]^’_’)&&(sqrt
[sin-1]^sqrt[sin+0]))pow[exp]^=sin[sqrt]^pow[++exp];}

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오후 12시 20분 50초
제 목(Title): 그만들 하라니까..

#include
#include
#include

#define N O->
#define Li(V,K)[(K)*Ga/32+V/32]
#define Mg(P,V,K)(P Li(V,K)>>(V&31)&1)
#define H(P,V,K)(P Li(V,K)|=1<<(V&31)) #define U(P)calloc(P,1) #define Au(V,K)Al[K|N U+V+V-1&7] #define Ti(V,I,K,Y)((V^I&&K^Y&&I=Li/2)+(V>D[P],Au(P,8)>>D[P], N V, N K))

Ar *U, *Au, W, Li, F;

Mo Al[27];

S
{
Ar V, K, U, T;
S *H;
}
*C, *Zn;

S *
Zr (Mo V, Mo K, Mo T)
{
S *O = C, *W = Zn;
*(Mg(U, V, K)?&W:&O)=0;
while (O)
O = (W = !N T || (N T &= -!!(N V – V | N K – K | !(T – N T ^ 1))) ? O :
0) ? N H : 0;
return W;
}

void
Ag (Mo V, Mo K, Mo P, Mo T, S * O)
{
S *H = (O ? N H : C);
*(H ? &O : &Zn) = O = *(O ? &N H : &C) = U (sizeof (S));
N U = P; N T = T; N H = H; N V = V; N K = K;
F & 32 || H(U, V, K);
}

void
main (Mo V, char ** O)
{
char *H, Sg[106];
srand (time (0));

while (*++O && (sscanf (*O, “%lu”, W ? &Li : &W) ||
(–**O, F |= !((**O – 57) % 14) << (**O - 57) / 14)) ); puts("%!\n/S{ 0 setlinewidth} /N{ showpage} /O{ moveto rlineto stroke} def def def S"); for (V = 0; V < 8; Al[8 | (V - 2) & 7] = Al[V] = !!(V & 3) * (1 - (V & 4) / 2) * 4, V++); do { U = U (V = (As * Ga + 31) / 8); Au = U (V); for (*U = -W-1, H = U(W); ++*U; H[*U+W] = Mn); Ag (Ga / 2, As / 2, 5, 1, C); Ag (Ga / 2, As / 2, 1, 1, C); while (C) { Ar I[7], Y[5], D[13]; S *Ge, *O = C; if (N T) { D[8] = (F & 4 ? Mn : W ? H[N T % W] : (N T & 85) % 3); W ((!!C>>!C));
W ((!!C<> 1) | F & 1));
}

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오후 12시 22분 58초
제 목(Title): 마지막이유…

#ifndef n
#define n 05
#endif pqbd
#define dpqb __FILE__
#define ppbd “Move disk %d from peg %d to peg %d\n”
#define pdbq
#if n&01
#define dqbp
#endif bpdq
#if n&02
#define dbpq
#endif pbdq
#if n&04
#define pbqd
#endif qbpb
#if n>>3
#define bqdp
#endif pbbq
main(){ pdbq
printf( pdbq
#include dpqb
#define qbdp
#include dpqb
);} qbdp
#else dpdp
#ifdef dqbp
#define bdpq
#endif bpdd
#ifdef dbpq
#define bdpq
#endif pqpb
#ifdef pbqd
#define bdpq
#endif pdpp
#ifdef bqdp
#define bdpq
#endif pdpp
#ifdef bdpq
#undef bdpq
#ifndef dqbp
#define dqbp
#ifndef dbpq
#define dbpq
#ifndef pbqd
#define pbqd
#ifndef bqdp
#define bqdp
#else dbqb
#undef bqdp
#endif qdqb
#else pdbq
#undef pbqd
#endif qdbp
#else pqbb
#undef dbpq
#endif pqbd
#else bbpp
#undef dqbp
#endif ppqb
#include dpqb
#ifndef dqbp
#ifndef dbpq
#ifndef pbqd
#ifndef bqdp
#define bdpq
#endif pbpp
#endif qpdp
#endif ddpb
#endif qppb
#ifdef bdpq
#undef bdpq
#ifndef qbdp
pdbq ppbd
#else qbbd
#ifdef pqdb
,1,2,3 pqdb
#undef pqdb
#define qdbp
#else bdbb
#ifdef qdbp
,1,3,1 qdbp
#undef qdbp
#else bdbd
,1,1,2 pdbq
#define pqdb
#endif qppq
#endif pqpb
#endif bpdd
#else pqpq
#ifndef qbdp
pdbq ppbd
#else qqqb
,1 pdbq
#ifdef dqbp
+1 dqbp
#endif qqdb
#ifdef dbpq
+2 dbpq
#endif ppqb
#ifdef pbqd
+4 pbqd
#endif pqpp
#ifdef bqdp
+8 bqdp
#endif bbpb
#ifdef pqdb
#ifdef dqbp
,1,3 dqbp
#else pddp
,3,1 pdbq
#endif qpqq
#else dbqb
#ifdef qdbp
#ifdef dqbp
,2,1 dqbp
#else pqdb
,1,2 pdbq
#endif dbdp
#else pdpp
#ifdef dqbp
,3,2 dqbp
#else pdbb
,2,3 pdbq
#endif pqpp
#endif qbdp
#endif pqpp
#endif pdbp
#endif pqdp
#include dpqb
#ifdef dqbp
#undef dqbp
#ifdef dbpq
#undef dbpq
#ifdef pbqd
#undef pbqd
#ifdef bqdp
#undef bqdp
#else qddb
#define bqdp
#endif ppqp
#else bddq
#define pbqd
#endif ddbq
#else bbdb
#define dbpq
#endif qqbd
#else ddbq
#define dqbp
#endif qbdb
#endif qbdb
#endif qbpp

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오후 12시 26분 48초
제 목(Title): 죄송합니다.

이상은 Obfuscated C Contest 라는

프로그램의 당선작들입니다.

그냥 어나니 갑작스레 하두 C 언어 야그가

넘쳐나길래 올려봐ㅅ습니다. 참 희한하죠?

저게 프로그램이라니 말입니다. 저두 한번 해보려고

난리친적 있었는데 도저히 안되더라구요.

http://sol.wohnheim.uni-ulm.de/~widi/obfus-c/summary.html

가보시면 있답니다.

더운 여름 건강히들 지내세요~~

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 5일 월요일 오후 12시 35분 37초
제 목(Title): 가장 뿅가는디유…

include
/*MLSPXPMPVPOQN
POPJLVMMQNQNPSPYPXLRP
XMTJMLSPXPMPVPOQNPOPJLVMN
QSPWPOPXLRPXMTJMLNPOPPPSPXPOP
JLYPRLTPVLUPVLWPVLXPVLVPSLJLUQP
PJQLQSPXPNQPPRLTPVL*/main(){int K/*
PUOUPWOV*/,L/*WPVLXPVLKPUOVPWOSLU*/,M
/*PPPPVPOQMQRPR*/=0;FILE/*TPSLUMWQT*/ *
J/*MPRPKPLQ*/; J= fopen(__FILE__
/*T*/,”r”);for (;( L/*KPUOWOWMUQ
LLOLMPULWLWL WLW LWLWLWLWLWLW
LWLWLULVOXP LLV LLLOLMPULOL
MMNP*/=getc (J) )!= -1;L/*
OLWLRMMQUL VOX PLLVLLLMQO
PMPYPXPNP MQL LVLLLWPSP
XPOQNQOPMQ LLV LTj*/>=’J’
&&L/*LRPYP OQL QMQLLVLLL
OLMQVOXPL LVL LLVOe*/<= 'J'+15&&( (M= !M/*MMMQMV OJMMMMMU OOL NPU MPMOM UMRNOLMQV OJM MMMMRMLLW QUMTJSPX PNQ JLLPUOWO WMUQJMVL JMV L*/)?K/* MQMV*/=L: putchar (K/*deMN MaVbcLKM KMV Le*/-'J' /*MWQUMTJ WPK PSPXPR*/ |(L/*PQV LMPSLSPXPNQ*/- 'J'<<4)) ));exit( 0);}/*LPQUMMPR PKPLQJLT LTLJLMPU MTJUQMPRPKPLQ JLNPUONM JMWOVLTL OPVLPPWM PMUMTJNQ SPWPOPYO NQJLQPUM TJPNSNVN ONJLTLRP VLTLSPUM TJQQRPSP VPOPJLRL WLWLPPJLP LPLJLKLJQ SPJQOPRL NPSLJLPL PLJLKLPPY PLQUPRLSL SLUMTJRPW MPPNPYPJQ OPXPRLPMW LPPVMVMKM VLLLKPLLSL UMSPWMPPNP YPJQOPXPR LRLPMWLPP VMVMKMSLUL KMVLLLLQLL SLUMTJPPYP LQRLUMUMSL UQSPPPRLPPS LUQPPQPOPNQ MQRLNPVLNMJM VLSPSLUMNPUO MQNQLQVPOPXPR LNPSLWLKMWOWM QLVOJMQLUMTJSP PPRLTLNPWMWMQL JMQLULPPSLUQMQJQLQSPXPNQPPRLTLMPVLLLOLM QVOXPLLVLNPULKMSLUMYPRLMQNQNPYPOQNQVL PMVLPMWLPPVLNPULKMVLJMSLWQTJSPPPRLT LNPXMQLJMQLULPPSLYPRLRPVLOMVLNP VLJMVLJMSLWQOPVPMQOPUQNQSPWPO PRLPLQPSLUMOPWMKPMQMPNQSP WPOPRLVPYPMPKPVPNQSPW POPRLPLQPSLSLUM TJPPYPLQRLPQWMKMUMPQVMPMUMPQULULSLYPRLRPVLPQKLWMKMPLPLPQKLWMPMWLKMVLPQ ULQLJMQLVLKPNQYPSPRLOPULLPUOPQWOSLVLPQSLMQVPOPOPJQRLKMSLUMWQWQWQTJTJ*/ ------------ 이제보니 커멘트가지고 장난하는게 넘심하네요... [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 12시 48분 23초 제 목(Title): 나 탭 2 쓰는 사람인데.. 좋은 습관이 아닌 것은 인정합니다. 2는 너무 적죠. (습관이란 게 무섭습니다.) 하지만 결코 8로 짜다가 '어 화면이 모자라네?' 하고 탭사이즈 줄이고, 줄이고, 하는 삽질을 하는 것은 아닙니다. 탭사이즈 8까지 썼으면 쓴 게 아까워서라도 끝까지 쓰죠. 그걸 어느 세월에 2로 줄이고 있습니까? 🙂 하고 싶은 말은 탭 사이즈는 2는 좀 적고, 4 정도가 적당하고, 8은 쓰고 싶은 사람은 쓰고, 16은 아무도 안 쓴다는 것. 그리고 탭 사이즈와 C 프로그래밍 실력의 관계는 브라자 사이즈와 골프 실력의 관계와 같다는 것. (즉 아무 관계가 없음. 단지 크기가 적당하면 관람객(?)의 시선을 만족시켜 준다는 것뿐.) 그리고 8로 쓰다.. 4로 쓰다.. 2로 쓰다.. 하는 말을 하신 분은 아마 tab 문자를 직접 넣는 걸 생각하신 것 같은데요, 그러면 하긴 탭사이즈 맘대로 바꿔 쓸 수 있죠. 근데 이거 비추천입니다. 에디터 상에서 탭문자와 스페이스는 구분이 가지 않습니다. 그냥 빈공간이죠. (당연하죠?) 그런데 하드 탭 사이즈는 쓰는 사람마다 지멋대로 바꿔 씁니다. 8도 있고 4도 있고... 따라서 특정 환경에서 아주 나이스하게 보이는 코드가 다른 에디터로 옮기면 미친년 머리풀어헤친 모냥 엉망이 되는 사태가 발생할 수 있습니다. 예컨대 프로그램을 짜다가 앞에서 8칸 들어간 부분이 있는데 한줄은 스페이스 8개 넣고, 다음줄은 탭문자 하나 넣었다고 합시다. (이래도 모릅니다. 보기에는 똑같으니까. 스페이스를 무조건 탭문자로 변환시켜 주는 에디터를 쓸 수도 있겠지만 모든 사람이 그런 에디터 쓰는 것도 아니고.) 그런 코드를 탭문자 간격이 4인 환경에서 보면 엉망이 되겠지요? 게다가 더 문제는 indentation은 항상 (탭간격 * 탭갯수)가 되지는 않는다는 겁니다. Temperature[x, t+1] = Temperature[x, t] - Radiation(Temperature[x, t]) * dt + K * (Temperature[x+1, t] - Temperature[x, t]) * dt + Q * blah blah...; (거기 욕하는 놈... 이거 보고 화면 가득 채워서 넘어가는 병신같은 코드라고 욕해봐. 너는 사칙연산 다섯 개 이상 들어가는 수식 짜본 적 없지? 그런 수식 써본 적은 있니?) 이런 식의 코드에서, 두번째, 세번째 줄과 첫번째 줄의 indentation 차이는 탭문자의 갯수가 아니라 절대적인 문자 갯수로 결정이 됩니다. 이걸 만약 탭문자로 쓰고 탭설정을 바꿔버리면? 난리나죠.. 하여튼, 탭문자 하나 스페이스 8개로 바꿔 버린다고 별로 하드 더 들지도 않습니다. 텍스트 파일이 커봤자 얼마나 큽니까. 요즘같은 기가바이트 시대에. 그냥 스페이스 쓰세요. 그러면 어디서나 똑같은 모습으로 코드를 볼 수 있습니다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 01시 12분 34초 제 목(Title): Re: 나 탭 2 쓰는 사람인데.. 혹시 xemacs 쓰지는 않으시는지.. 거기 tab size가 2로 되어있잖아요. (첫줄만 2tab이 먹고 그다음 부터는 바로 윗줄에 따라 tab이 됨) 그리고 xemacs에서는 tab이 진짜 tab이 아니고 키는 한번에 tab size 만큼 가지만 실제로 화일이 저장될때는 그게 모두 스페이스로 바뀌어서 저장된다나봐요. 바로 윗분이 지적해주신 것 처럼 탭싸이즈를 바꾸는 것에 따라서 인덴테이션이 완전히 바뀌니까.. 모두 스페이스로 처리하면 그런일이 없겠죠. 나중에 어느 에디터로 읽어오든 처음 에디팅 한대로 그대로 보이드라구요. 전 보통 indentation을 4로 하는데 이게 모든 사람에게 좋아보이는게 아닌가보군요. 음.. 역시 indentation은 8 col이 가장 좋은걸까? 그리고 변수 말씀하신분 계시는데 적당한 길이로 self-documentation이 되도록 하도록 노력을 해야한다는데에 절대적으로 동감. 저 같은 경우 괜찮은 모델로 X window programming style을 꼽고 있는데 다른 분들은 어떤 스타일을 가장 선호하는지 그것도 궁금하군요. @ 부서에 C code를 asm code처럼 짜는 놈이 있어서 이갈리는 사람이.. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 01시 24분 36초 제 목(Title): Re: 나 탭 2 쓰는 사람인데.. 저도 탭4 씁니다만 그게 제겐 제일 맞더군요. 전 책도 그림많고 여백많은거 보단 글씨도 작고 촘촘하니 뚜꺼운책을 선호합니다.눈에 안좋을 수도 있지만 하여튼 그게 좋아요. 일종의 기호일 뿐인데 너무 집착들 하는거 아닙아닙니까들? [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 01시 28분 10초 제 목(Title): C indentation은 .. 사람의 취향이라는 것이 정답이겠지요 ? 처음 주제를 꺼낸 사람의 말투에 조금 문제가 있었던듯 합니다. 8 안쓰면 무조건 안된다 식의 말을 했던 것 같은데 .. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 01시 31분 10초 제 목(Title): Re: 나 탭 2 쓰는 사람인데.. 흘... 나는 파스칼 배우고 막 놀때는 8로하다가 나중에 C를 쓰면서 어떻게든 기존에 쓰던 파스칼과 다르게 만들라고 4쓰기 시작했는데... 근데 요즘애들도 파스칼 배우나? 괜히 궁금하군. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 01시 44분 44초 제 목(Title): Re: 나 탭 2 쓰는 사람인데.. 쩝.. 그..2개썼다 4개썼다 8개썼다 하는게 저를 지칭하시는거 같은데.. 음.. 글씨유.. 일단.. vi쓸때는 tabstop을 4로 맞춰놓고 씁니다. 그리고 그냥 tab을 누르지요. 그리고 space는 전혀! 넣지 않습니다. 그럼 어디서 보든 똑같지요. (function parameter를 여러줄 썼을때 빼고 -지적하신 부분이 이건데.. 그냥 팀원들 설정 통일하세요.. ) 근데..vi쓰는건 장난칠때와 비상시 뿐이고..평소에는 emacs만 쓰는데.. 항상..프로젝트 시작할때.. 사용하는 tool과 library, 시스템 설계 등등을 고려해서 tabstop을 3~4정도로 정하고 시작합니다엽.(emacs의 config을 수정한다는 얘기지엽) 그리고 이건 keyboard입력은 tab이지만 emacs에서 자동으로 space로 바꿔주도록 설정해놔서 팀의 다른사람덜이 vi로 읽는데는 별루 문제 없고.. 다른 사람들 코드를 내가 가져올때는 파일 전체에 대해 indentation을 함 해주고 시작하지엽. emacs같은데서 지원하는 자동 indent쓰지 않으려면 가끔 indent라도 돌려주면 좋을텐데...indent의 설정은 커녕 존재도 모르는 사람이 태반이니.. 쫍. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 01시 48분 08초 제 목(Title): Re: 나 탭 2 쓰는 사람인데.. 참 그리고 빼먹은거 하나.. 설마.8개 space를 넣는데...그냥 space8번 치시는건 아니겠지엽? 그럼 혹시 8개 space뺄때는? vi에서야 8x라고 하거나..메크로 만들면 되겠지만서도... 흠..어케 하시는지 궁금하네엽. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 02시 01분 10초 제 목(Title): Re: 나 탭 2 쓰는 사람인데.. 지 좇꼴리는데로 하는 거지 뭘 싸우나.. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 02시 15분 17초 제 목(Title): Re: 나 탭 2 쓰는 사람인데.. 유치한 새끼들... 프로그램이 돌기만하면 두번다시 거들떠 보기도 싫은 때가 오리라 이미 짠 코드를 다시 볼 수 있게 만드는 놈들은 절대 돈벌지 못할지어다 [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 02시 29분 30초 제 목(Title): Re: 나 탭 2 쓰는 사람인데.. 작성한 코드를 다시 보면 미친새끼라고 하신분.. 틀림없이 프로그램에 대해서 모르는 사람이다. 리눅스 벌써 망했겠네... 그리고 좇꼴리는데로 양반.. 왜 좇이 그쪽으로 꼴리냐에 대해서 한참 얘기하는데 김새게시리... [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 03시 19분 43초 제 목(Title): Re: 나 탭 2 쓰는 사람인데.. 이제 나올 얘기는 다 나왔습니다. 여기서 끝내는게 어떨지... [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 06시 58분 18초 제 목(Title): Re: 나 탭 2 쓰는 사람인데.. 이거 옵션에 tab expand라고 있습니다. 그거 쓰시면 되는데.. 냠. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 07시 43분 01초 제 목(Title): Re: 탭=8 <- 혹시 바보아니세용? 그 사람 바보 맞습니다. 여러글들을 종합해 본 결과 바보임이 확실합니다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 07시 51분 06초 제 목(Title): Re: 탭=8 <- 혹시 바보아니세용? 어라. 또 나의 콧털을 건드네? 좋은 코드들은 좋은 indentation에서 더욱 빛을 발한다? 읽기좋은 code가 좋은 코드이다? indentation하나 제대로 제어 못하는 사람이 무슨 좋은 코드 만들 수 있을까? indentation줄일 수 있는 방법이 수없이 많음에도불구하고 그냥 알고리즘 그대로 번역밖에 못하는 코드는 별볼일 없는 코드이다? 이렇게 하면 좀더 효율적인 코드가 될꺼야. 하고 생각하는 과정과 이렇게 하면 indentation 하나 줄일 수 있어 하는 생각이랑 아무 관련이 없는 것일까? 알고리즘 자기 마음대로 지랄할 수 있을 정도가 되면, indentation지맘대로 하는 것도 식은 죽 먹기지. 예쁜 코드가 좋은 코드이다? 지저분한 코드는 그 알고리즘이 휘왕찰랑해도 별볼일 없는 것이다? 이딴 생각같은 것 해본 적 없나요? 그리고 내가 학부생들은 뤼달지 말랬지! 가서 C 숙제나 해. 시간 남으면. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 07시 53분 34초 제 목(Title): tab expansion. 저같은 경우에는 tab expansion을 사용하지 않습니다. 보통 사람들이 소스 코드를 볼때 tab size를 자기가 보기 원하는 code로 보는것이 가장 편하니깐.. 저는 tab을 그냥 둡니다. 위에 어느분이.. code가 지저분해 진다고 하셨는데.. 저같은 경우는.. result = sin(x) + sin(y) + cos(x*x+y*y) tan(2*x); 와 같이 한줄넘어 오는 code의 경우는.. tab을 한번 더 쓰죠.. 어짜피 저렇게 되면 tab길이 하고는 상관없이 항상 밑에 줄이 한번 더 들어가게 되죠. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 08시 30분 15초 제 목(Title): 학부생들.. 학부생들은 re 달지 말라고. 참... 학교에서 보면 (난 학부생. -.-) 대학원생이라고 학부생 열라 무시하는 놈들이 있는데 지들은 잘나서 날때부터 대학원생인가 학부생 거치고 대학원생 되는거지.. 가끔씩 공부하려고 도서관에서 책 빌려오면 '아직도 그런거나 보고있냐' 는 투의 재수없는 말을 던지는 대학원생이가 있는데 그냥 씹어준다.. 학부생인 나는 솔직히 말해서 아는것이 X도 없지만 X나 잘난 척하는 대학원생들은 정말 꼴도보기 싫다... 학부생들에게 신경도 안쓰다가 학생들 실력 떨어졌다고 개소리나 해대는 교수들도 마찮가지... [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 08시 39분 01초 제 목(Title): Re: 탭=8 <- 혹시 바보아니세용? "알고리즘 자기 마음대로 지랄할수 있으면" 이말이 도데체 무슨 말인지 모르겠다. 알고리즘은 그냥 있는 건줄 아는 모양이군요. 알고리즘이 뭔지 하나도 모르는 사람. 간단한 것만 알고리즘인 줄 아는사람. 혹은 알고리즘 부분부분 바꾸면서 새로운거 만드는 건줄 착각하는 사람. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 09시 03분 30초 제 목(Title): Re: 아직도 탭사이즈 가지고 우기는 인간 이야기를 듣고보니 원글 쓴 사람이 하고 싶은 말은 tab 크기를 논하기 보다는 코딩기술에 대해 언급하는 것 같다. 간결성과 타인과 공동작업시 능률이 높아질 수 있는 표준성 등등... 그래서 tab이 8정도 되면 보다 정렬된 코딩으로 가자는 뜻이지 8이나 쓰면서 복잡하게 쓰자는 말은 아닐듯 싶다. 그런데 원글 쓴사람이 다른사람들에게 문제본질을 이해시키는 수준은, 자신이 학부생은 끼지 말라고 해놓고는 스스로도 학부 저학년의 수준을 보여준다는 거다.. 나도 프로그램경력은 오래되었지만 딱히 남에게 내 코드가 적절하다! 라고 말하지는 못한다. 알고리즘을 어떻게 이해하고 있느냐에 따라 또 어떻게 알고리즘을 공부해 왔나에 따라 코딩은 상당히 달라지는 경향이 있다. 따라서 공동작업 시엔 다들 표준으로 다두게될 부분을 협의하는 과정이 필요한 법이지!! 원글 쓴 사람이랑, 위에 뤼단 사람들 갸비지 성 자기 잘났소! 글은 좀 피해주길 바란다. 그래도 뭔가 논의거리가 되는 글이라고 생각해서 죽 읽어봤더니 나 잘났소! 로 끝나버리는 결과들이 안타까워서 하는 말이니깐!! [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 09시 06분 31초 제 목(Title): Re: 탭=8 <- 혹시 바보아니세용? 앞에서 무슨 얘기가 나왔는지는 모르겠는데... tabsize를 변경 안하고 항상 8로 쓰고 있는 사람 입장에서 말하자면 tabsize가 커야 indentation이 적당히 커지면 (프로그램을 짜는) 제가 쉽게 제 자신의 잘못을 발견할 수 있습니다. SE coding rule중에 그런게 있습니다. (SE = software engineering) indentation이 4번 이상 들어가면 그건 잘못된 code다... (readability 입장에서...) 그럼, indentation하지 말고 flat하게 짜라? 그건 아니죠... indentation이 4번 이상 들어가면 이미 그 code는 두개 이상의 개념을 포함하고 있는 경우가 많습니다. 무슨 소리인가 하면 어느정도 indentation이 들어간 부분을 function (procedure, subroutine)으로 만들어서 쓰면 훨씬 읽기 좋은 (implies 벌레를 잡기 좋은) code가 된다는 거죠. 즉, 세부 사항을 abstraction함으로서 한 code에 하나의 개념만을 표현할 수 있는데, 잡다하게 세부사항을 섞어놔서 보기 힘들게 되는 경우가 많다는 겁니다. 아마 tabsize=8을 주장하시는 분이 SE에서 말하는 저 개념을 껍데기로만 받아들이셨던가, 아니면 몸에 배어서 알고는 있는데 표현을 못하시는 것 같군요... [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 11시 10분 05초 제 목(Title): Re: 탭=8 <- 혹시 바보아니세용? 씨발 지랄하고 자빠졌네... 위에 SE 어쩌고 지랄하면서 헛소리 하고 자빠져있는 자식을 보노라면 화가 치민다. 난 석사과정에서 SE전공했는데, indentation이 그렇게 의미있는것이라고는 처음들어 본다. 그리고 코드 루핑이나 분기등의 구조에 관심이 많았던 구조적 기법 시절에도 그런 시시껄렁한 얘기한 새끼는 없었다. indentation이 8로 되어 있어야 깊게 네스팅된 걸 발견하고, 4단 이상으로 네스팅되 있으면, 설계상의 결함이 있다?... 인덴테이션이 8이어야 네스팅된 걸 발견할 수 있냐? 눈알이 그렇게 나빠? 쓸데없는 잡소리는 그만 집어치우고, 집에가서 SE 책이나 한번 더 뒤져봐라. SE책으로는 Pressman이 쓴 고전책이 니 수준에 맞겠다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 11시 18분 59초 제 목(Title): SE 어쩌고 나불대는 인간은 윗글 보셔. SE를 모르는 사람은 잘못하면 SE는 그런 쓸데 없는거나 연구하는 거라고 생각할 거 아냐? 그리고 그정도 네스팅이 생길때마다 펑션으로 대체해 버리면 쓸데 없이 한번만 콜되는 수많은 펑션들이 존재하게 될 것이고, 오히려 전체적인 구조를 더욱 파악하기 어렵게 하기 쉽다. 그리고 간단한 일을 하는 모듈에서도 수십단계의 call tree가 생길거고... 게다가 제한된 프로그래밍 환경 (VxD 같이 global stack을 사용하기 때문에 최소의 stack을 사용해야만 하는)에서도 그따위 씨부렁거림이 통할지 잘 생각해 볼 지어다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 5일 월요일 오후 11시 19분 26초 제 목(Title): 그리고 바로위의 글도 봐 (x) [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 07분 13초 제 목(Title): tab=8의 문제 1 C, C revisited SE가 학문적 완성도를 위해 쓸데없는 것까지 다 포함하려고 시도해서 그렇지 그 중 몇 개는 확실히 지켜야 하는 것들입니다. 앞의 SE 전공 석사 졸업생은 탭8 주장자와 함께 필드에서 구르시면 몸으로 느끼게 될 것입니다. 이해하지 못하셔도 됩니다. 함께 구르세요... 그러면 느끼게 됩니다. C와 C revisited를 같은 분이 쓰셨나? C 앤드 C revisited를 읽고 한 시간 동안 글을 썼습니다. 처음에 감점을 좀 많이 시켰는데 화를 내는 것을 보니 아집에 빠지면 나오지 못한다는 면에서 감점 좀 더 시켜야겠네... 능력이 좀 떨어지는 프로그래머가 있다는 사실을 알지 못하거나 또는 알고도 배려하지 못하니 아직 팀장은 아닌 거 같고, 사람을 뽑는다는 말을 하는 걸로 봐서 이제 팀장이 될 거라는 이야기인지... 헷갈리는구먼요. 그런데 팀장이 되면 여러 사람을 만나겠지만 프로그래밍 실력이 떨어지는 사람이라고 자존심까지 다 접어두고 사는 건 아니라는 걸 알아야해요. 당신이 앞서가는 선각자에 속하는 게 아니라 아직 무수하게 널린 탭8의 단점을 겪어보지 못한 후발주자라는 것을 인식하세요. 가서 좀 굴러서 내공을 키우라고 했건만 다시 와서 떼를 쓰고 있으니... 시간이 지나야 당신은 고쳐질 모양입니다. 제가 첫 글 쓰신 당신께 드리고 싶은 말은 "당신은 똑똑하여 잘 할 수 있을지 모르나, 당신 옆의 좀 떨어지는 프로그래머는 그렇지 않으니 배려하라"는 것입니다. 하지만 너무 과도하게 지나치지는 마십시오. 내가 당신께 누구나 쓸 수 있게 쉽게 만들어지다 못해 지나쳐버린 Visual Basic을 예찬하라는 말이 아닙니다. 내가 안타깝게 생각하는 것은 The C Programming Language와 Stevens의 Network Programming 책이 많은 사람들의 코딩 기법에 악영향을 주고 있다는 겁니다. 또 MS의 SL과 Help에 있는 수많은 코드(특히 MSDN의 샘플코드)가 위의 두 책과 같은 형식으로 코딩되어 있는데 거기에 쓰여 있는 내용이 배울만한 바이블인 건 맞습니다만, 코딩 기법은 60점 짜리입니다. (안 좋다는 말입니다.) [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 07분 49초 제 목(Title): tab=8의 문제 2 첫 글 쓰신 당신을 설득하려고 하는 글은 아니고 아직 탭 사이즈를 결정하지 않은 사람들에게 탭8로 가게 되면 어떤 문제를 겪게 될 것인지를 보여주고자 합니다. 탭8을 쓰시는 당신은 머리가 좋아서 실수를 안하겠지만 어쨌든 많은 탭8사용자들이(이하 탭8들) 겪는 문제를 나열하겠습니다. 이 말은 무슨 말인가 하면, 현재 탭8이 실수를 하지 않아도 탭8들의 코드를 넘겨 받은 타인이 쉽게 실수를 한다는 뜻입니다. 탭8을 주장하시는 당신은, "남도 나와 같이 실수를 안할 것이다"라고 믿고 계시는 것은 아니겠지요? 탭8들이 만든 코드는 ... 1. 변수의 스코프 범위가 최소가 되도록 하지 못한다. 2. 펑션은 블랙박스로 만들어도 코드 블럭까지 블랙박스로 만들지 못한다. 3. 코드가 알고리즘을 반영하지 않는다. 그래서 역분석이 어렵다. 4. 많은 탭8들이 코드를 변형해서 80컬럼을 안 넘기려고 노력한다. 5. open/close, malloc/free의 쌍이 맞지 않는 오류를 많이 범한다. 6. 충분한 에러 메시지를 찍어주지 않는다. 7. 1 entry, 1 exit을 지키지 못한다. 첫 글 쓰신 분은 1, 3, 4, 7을 불가피하게 위반하고 있으며 상당히 노력하시는 분이니까 2는 위반할 가능성이 비교적 낮으며 6은 성실성의 문제이므로 위반 가능성을 제가 추정하지 못하겠습니다. 똑똑하시므로 5는 위반하지 않을 것 같습니다. 2는 많은 탭8들이 지나치는 부분입니다. 이 중에서 SE에서 명백하게 금하고 있는 것이 있습니다. 1, 3, 7을 금합니다. 탭8들은 1, 3, 7을 위반하게 됩니다. 나머지는 하도 당연한 것이라서 SE에 나오지도 않습니다. 그러나 행하게 되면 바보 취급 당하는 것들입니다. 탭8들 뿐만 아니라 탭4들도 이런 문제들을 겪곤 하기 때문에 이게 탭8의 문제가 아니라고 주장하실 수도 있습니다. 그러나 이 문제들을 해결하기 위해서는 탭8을 쓰면 꽤 곤란해진다는 것을 곧 보여드리겠습니다. 아마 보여드린 후에도 탭8들의 마음은 바뀌지 않을 것이지만... 저도 탭8을 가끔 쓰기 때문에 바꾸라고 권하지는 않습니다. 다만 처음 선택을 하려는 사람에게는 탭8을 권하지 않습니다. 그런데 그 이유가 취향에서 비롯되는 것이 아닙니다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 08분 27초 제 목(Title): 샘플 알고리즘 1 이제 문제점들을 드러내기 위해 코드를 하나 만들어보겠습니다. 주문: 파일복사 프로그램을 만들어라. 프로그래머니까 산출물로 문서, 소스코드, 프로그램을 내겠지요. 문서에 이런 걸 포함하고 있을겁니다. 알고리즘1: 파일 이름을 두 개 입력받는다. 소스 파일을 연다. 타겟 파일을 연다. 메모리 버퍼를 할당한다. 버퍼를 이용하여 파일을 복사한다. 메모리 버퍼를 해제한다. 타겟파일을 닫는다. 소스 파일을 닫는다. 끝. 뭐 좀 다를 수도 있겠습니다. 그리고 이건 특정한 예이니까 이 경우에는 어떻게 해야한다고 토달지 마십시오. 이걸로 이야기하려고 하는 바를 이해해주세요. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 09분 12초 제 목(Title): 버전1 버전1: input_filename(sname); input_filename(dname); sfile = open(sname, "r"); dfile = open(dname, "w"); buffer = malloc(8 * 1024); copy(sfile, dfile, buffer); free(buffer); close(dfile); close(sfile); 자 이게 알고리즘을 그대로 코드로 바꾼 겁니다. 그런데 학생도 아니고 이거 코드라고 할 수 있습니까. 그래서 이 코드에 에러 핸들링 코드를 추가하여 버전2를 만듭니다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 11분 38초 제 목(Title): 버전2 버전2: input_filename(sname); input_filename(dname); if (strlen(sname) <= 0 || strlen(dname) <= 0) { printf("이름이 잘못되었습니다.\n"); return -1; } sfile = open(sname, "r"); if (sfile < 0) { printf("입력 파일을 열지 못했습니다.\n"); return -2; } dfile = open(dname, "w"); if (dfile < 0) { printf("출력 파일을 열지 못했습니다.\n"); return -3; } buffer = malloc(8 * 1024); if (buffer == NULL) { printf("메모리가 부족합니다.\n"); return -4; } rc = copy(sfile, dfile, buffer); if (rc < 0) { printf("복사 도중 에러가 발생했습니다.\n"); return -5; } free(buffer); // no error close(dfile); // no error close(sfile); // no error 음. 만족스러워... 흠흠 돌려볼까? 음 역시 잘 돌아가는군 하며 만족스러워합니다. 디버거를 돌려봐도 에러 처리 루틴이 확실하게 조건문 체크를 하고 있다는 사실을 보여줍니다. 그런데 좀 더 생각할 수 있는 사람은 아 코드에 문제가 좀 있군 하면서 에러 처리가 완벽하지 못하다는 점을 알아내고는 다음과 같이 몇 줄을 더 추가하여 버전3을 만듭니다. 흠 탭을 스페이스로 넣는 것 참 괴롭군요. 키즈 에디터에도 탭 쓰게 해줘잉... [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 13분 07초 제 목(Title): 버전3 버전3: input_filename(sname); input_filename(dname); if (strlen(sname) <= 0 || strlen(dname) <= 0) { printf("이름이 잘못되었습니다.\n"); return -1; } sfile = open(sname, "r"); if (sfile < 0) { printf("입력 파일을 열지 못했습니다.\n"); return -2; } dfile = open(dname, "w"); if (dfile < 0) { printf("출력 파일을 열지 못했습니다.\n"); close(sfile);<---- 추가 return -3; } buffer = malloc(8 * 1024); if (buffer == NULL) { printf("메모리가 부족합니다.\n"); close(sfile);<---- 추가 close(dfile);<---- 추가 return -4; } rc = copy(sfile, dfile, buffer); if (rc < 0) { printf("복사 도중 에러가 발생했습니다.\n"); close(sfile);<---- 추가 close(dfile);<---- 추가 free(buffer);<---- 추가 return -5; } free(buffer); // no error close(dfile); // no error close(sfile); // no error 아 장하게도 에러 처리가 모든 경우를 처리할 수 있게 되었습니다. 탭8들은 단지 탭을 넣지 않기 위해 이렇게 합니다. 그런데 좀 처량하지 않습니까? 에러 처리 루틴이 계속 반복되고 있군요. 이 처량함을 극복하기 위해 탭8 프로그래머가 방법을 고안합니다. (VB의 에러 처리 루틴과 비슷한 방법입니다.) 그래서 버전4가 나옵니다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 14분 45초 제 목(Title): 버전4 버전4: input_filename(sname); input_filename(dname); dfile = NULL; sfile = NULL; buffer = NULL; rc = 0; // success if (strlen(sname) <= 0 || strlen(dname) <= 0) { printf("이름이 잘못되었습니다.\n"); rc = -1; goto EXIT; } sfile = open(sname, "r"); if (sfile < 0) { printf("입력 파일을 열지 못했습니다.\n"); rc = -2; goto EXIT; } dfile = open(dname, "w"); if (dfile < 0) { printf("출력 파일을 열지 못했습니다.\n"); rc = -3; goto EXIT; } buffer = malloc(8 * 1024); if (buffer == NULL) { printf("메모리가 부족합니다.\n"); rc = -4; goto EXIT; } rc = copy(sfile, dfile, buffer); if (rc < 0) { printf("복사 도중 에러가 발생했습니다.\n"); rc = -5; goto EXIT; } EXIT: if (dfile) close(dfile); if (sfile) close(sfile); if (buffer) free(buffer); // no error 이상과 같은 코드가 탭8이 할 수 있는 최선이 아닐까요. 탭을 두 개 이상 넣기 싫어하기 때문에 거의 이런 코드가 됩니다. 이 코드의 문제가 무엇입니까? 자 다시 한 번 문제점 리스트를 체크해봅시다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 15분 50초 제 목(Title): 문제점 확인 1 탭8들이 만든 코드는 ... 1. 변수의 스코프 범위가 최소가 되도록 하지 못한다. 2. 펑션은 블랙박스로 만들어도 코드 블럭까지 블랙박스로 만들지 못한다. 3. 코드가 알고리즘을 반영하지 않는다. 그래서 역분석이 어렵다. 4. 많은 탭8들이 코드를 변형해서 80컬럼을 안 넘기려고 노력한다. 5. open/close, malloc/free의 쌍이 맞지 않는 오류를 많이 범한다. 6. 충분한 에러 메시지를 찍어주지 않는다. 7. 1 entry, 1 exit을 지키지 못한다. 문제점 확인을 좀 다시 하고. 먼저 제일 큰 문제 7번. 1 entry, 1 exit을 지키지 못한다. => 위 코드는 1 entry이지만 5 exit입니다.
알고리즘에는 1 entry, 1 exit이 안될 아무 이유가 없는데
그게 바뀌었습니다. 이렇게 나가는 곳이 많으면 디버깅은
몇 배 힘들어집니다. 탭8을 유지하기 위해서 이것을 피하기는
사실상 어렵다 못해 거의 불가능합니다.
이것은 코드를 보고 원래 알고리즘을 만들어내는 것을 방해하는 요인입니다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 16분 33초
제 목(Title): 문제점 확인 2

두번째 큰 문제 2번. 코드 블럭까지 블랙박스화 하지는 못한다.

=> 펑션 블랙박스화에 대한 개념은 누구든지 갖지만,
탭8들은 애초에 코드 블럭에 대한 블랙박스화 개념을 갖지 않습니다.
그렇다고 탭4, 탭2들 모두가 이런 개념을 갖고 있는 것은 아닙니다만…
개발이 끝나갈 무렵 코드가 너무 길어졌다는 생각을 한 후
몇몇 부분을 펑션으로 쪼개내려고 생각합니다.
그런데 탭8들은 대부분 코드를 위와 같이 만들기 때문에
완전히 새로 쓰지 않는 한 쪼개는 게 불가합니다.
자 약간 수정된 알고리즘을 다시 볼까요.

파일 이름을 두 개 입력받는다.
소스 파일을 연다.
blahblah를 호출한다.
소스 파일을 닫는다.

blahblah:
타겟 파일을 연다.
메모리 버퍼를 할당한다.
버퍼를 이용하여 파일을 복사한다.
메모리 버퍼를 해제한다.
타겟파일을 닫는다.

같은 알고리즘입니다. 알고리즘은 쉽게 변형될 수 있지만
탭8들의 코드가 그렇게 함께 바뀌어 주지는 못합니다.
에러 처리 코드들이 서로 얽혀 있어서 건드리면 터지는 코드가 되어 있습니다.
(건드릴 수 있다고요. 그럼 제가 앞뒤에 50줄씩 더 추가할겁니다.)
새로 쓰는 수밖에 없습니다.
그럼 새로 쓰지 않고도 코드 조각을 블랙박스화 하는 방법이 없을까?
있습니다. 그런데 대부분 탭8들은 받아들이지 않습니다.
조금 뒤에 코드가 어떻게 바뀌어야 하는지 보여드립니다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 16분 52초
제 목(Title): 문제점 확인 3

3번. 코드가 알고리즘을 반영하지 않는다. 그래서 역분석이 어렵다.

=> 위의 코드는 알고리즘을 반영하는 코드가 아니라
알고리즘과 같은 목적을 성취하는 코드의 하나일 뿐입니다.
위의 코드가 알고리즘과 같다고 주장하실 분 분명히 계시리라고 봅니다.
그러나 그렇지 않습니다. 저렇게 쓰여진 코드 100줄짜리 펑션 10개인
소스 총 1천줄 갖다 주고 플로우 차트 그리라고 하면 매우 힘든 일입니다.
알고리즘이 코드로 바뀌는 과정에서 변형되었기 때문입니다.
이게 왜 탭8과 관련이 있는가 하면, 탭8은 알고리즘을
코드로 기술하는 과정에서 코드 사이사이에 알고리즘의
이해를 방해하는 다른 라인들(주로 에러 처리 루틴들)을 넣게 됩니다.

이건 구조화 프로그래밍 기법을 배우고 그런 기법으로
알고리즘을 설계하는 것까지 배웠음에도,
알고리즘을 코드로 옮기는 것을 배우지 못한 때문입니다.

소프트웨어의 복잡도를 불필요하게 높이는
이 구조적인 문제를 피하기 위한 코딩 기법을
학교에서는 가르쳐주지 않습니다.
그래서 신참들은 책에서 보고 배우게 되는데
이때 Stevens의 책과 MSDN이 악영향을 끼칩니다.
일부 똑똑한 프로그래머들이 만든 UNIX 소스들은 더 문제입니다.
봐라 이 사람들도 이렇게 하지 않느냐 하는 합리화 꺼리를 만들어주기 때문입니다.
이것은 많은 프로그래머가 겪는 문제입니다만
스스로 문제라 인식하지 못하고 있고 그래서 자연스레 코드가 지저분+복잡해집니다.
이것은 라인 한 줄 더 띄우고 탭 사이즈를 어떻게 해서 해결되는 문제가 아닙니다.
다만 탭8을 쓰는 사람은 개선의 여지가 별로 없다는 것입니다.
알고리즘을 코드에 정확히 반영하는 게 탭8에서는 많은 경우 불가능합니다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 17분 07초
제 목(Title): 문제점 확인 4

1번. 변수의 스코프 범위가 최소가 되도록 하지 못한다.

=> 이 문제는 거의 즉각적으로 누구든지 알 수 있습니다.
새롭게 필요로 하는 변수는 항상 제일 윗쪽에 추가할 수밖에 없습니다.
심지어 한번 쓰고 버리는 루프 변수까지도.
스코프 룰을 어쩔 수 없이 위반하게 됩니다.
한 몇 년 정도 소스가 이 사람 저 사람 거치게 되면
unused variable이 좀 생길 겁니다.
그렇다고 함부로 지우지도 못합니다.
혹시나 임시로 주석처리 되어 있던 코드에서 사용하고 있을까봐.

탭8들의 플랫한 코드에서 나오는 불가피한 문제점입니다.
이것도 깨끗하게 피할 수 있습니다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 17분 22초
제 목(Title): 문제점 확인 5

4번. 많은 탭8들이 코드를 변형해서라도 80컬럼을 안 넘기려고 노력한다.

=> 이것은 위의 문제 3번과 비슷한 이야기입니다. 원래의 알고리즘을
변형하여 알고리즘에 담겨있는 생각의 30% 쯤을 프로그래머의
머리에 저장하고, 나머지 70% 쯤을 코드에 써 놓은 것입니다.
당연히 최초 프로그래머는 문서의 씌여 있는 알고리즘과
코드가 좀 다른 모양이지만 그 뜻을 압니다.
다른 프로그래머는 코드를 보고 알고리즘을 판독하지 못합니다.
왜냐하면 코드가 알고리즘을 정확히 반영하지 않기 때문입니다.
아주 지엽적인 곳만 고칠 수 있고, 따라서 별 것도 아닌
프로그램이 “원래 어려운 프로그램”으로 둔갑하게 되거나
또 “누구누구가 아니면 손대지 못하는 프로그램”이 되기도 합니다.

여기에서 ‘변형’이란 알고리즘에 나오지 않았던 코드들이
알고리즘 사이에 비집고 들어오는 일을 말합니다.
주로 에러 처리 루틴들입니다.
알고리즘 가독성을 현저히 떨어뜨리게 됩니다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 17분 37초
제 목(Title): 문제점 확인 6

5번. open/close, malloc/free의 쌍이 맞지 않는 오류를 많이 범한다.

=> 탭8은 원체 nested를 싫어하기 때문에 이 쌍을 맞추는 게
매우 힘듭니다. 또 빠뜨리는 실수를 하는 사람도 매우 많습니다.
에러의 효과도 필드에 나가서 발견되는 경우가 많고요.
Memory Leak 버그가 많은 이유 바로 이것 때문입니다.
이것도 간단한 코딩 기법으로 커버 가능한 부분이지만,
탭8들에게는 그 혜택이 별로 주어지지 않아서
정신을 차리는 것으로 커버해야 합니다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 18분 11초
제 목(Title): 문제점 확인 7

6번. 충분한 에러 메시지를 찍어주지 않는다.

=> 나름대로 노력한 버전3의 코드를 보셨나요.
참 반복되는 에러 코드에 정성스런 에러 메시지란 너무도 어려운 법입니다.
나오는 에러 메시지.. 필드에서 얼마나 중요한지 모릅니다.
세울 수 없는 시스템을, 게다가 가동시간이 아니면 얻을 수
없는 에러 메시지가 겨우 “에러: 코드 -4” 이딴 식의 메시지를
내보내줄 때면 내가 짠 코드임에도 욕이 절로 나옵니다.
이걸로 뭘 어떻게 고치라구? 하는 욕 말입니다.

디버깅에 지치고 지치면 이 에러 메시지가 부실해지든지
상황과 일치하지 않는 메시지가 자꾸만 늘어갑니다.
에러 체크 루틴이 하나 바뀌면 한 곳만 고치면 된다고 생각했는데
왜 생각지 못한 곳에까지 에러 처리 루틴들이 들어가 있는 것입니까.
이거 탭8과 직접적인 연관 있다고 말씀드리지 않겠습니다.
하지만 탭8은 이 문제를 당하기 쉽고, 해결하기 어렵습니다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 18분 34초
제 목(Title): New 버전1

자 이제 개선해봅시다.

알고리즘 다시 가져오고.

알고리즘:
파일 이름을 두 개 입력받는다.
소스 파일을 연다.
타겟 파일을 연다.
메모리 버퍼를 할당한다.
버퍼를 이용하여 파일을 복사한다.
메모리 버퍼를 해제한다.
타겟파일을 닫는다.
소스 파일을 닫는다.
끝.

New 버전1:
input_filename(sname);
input_filename(dname);
sfile = open(sname, “r”);
dfile = open(dname, “w”);
buffer = malloc(8 * 1024);
copy(sfile, dfile, buffer);
free(buffer);
close(dfile);
close(sfile);

이걸 그냥 두긴 존심이 상하죠.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 21분 23초
제 목(Title): New 버전2

straight-forward-if 문을 사용하여 알고리즘을
가장 먼저 직접적으로 코드로 옮깁니다.
즉 해야할 바를 가장 먼저 씁니다.
머리속에 알고리즘을 남겨두지 말고 모두 코드로 옮깁니다.
처음에 생각했던 것만을 (에러 처리는 알고리즘에 나오는 것도
아니며 처음에 생각한 부분도 당연히 아님) 먼저
코드로 옮기는 것이 핵심입니다.

New 버전2:
input_filename(sname);
input_filename(dname);
if (strlen(sname) <= 0 || strlen(dname) <= 0) { printf("이름이 잘못되었습니다.\n"); return -1; } sfile = open(sname, "r"); if (sfile >= 0) {
int dfile;<---- 변수 정의가 여기로 내려왔습니다. dfile = open(dname, "w"); if (dfile >= 0) {
char *buffer;<---- 변수 정의가 여기로 내려왔습니다. buffer = malloc(8 * 1024); if (buffer != NULL) { rc = copy(sfile, dfile, buffer); if (rc >= 0) {
; // success
} else {
error(“복사 도중 에러가 발생했습니다.\n”);
}
free(buffer);
}
close(dfile);
} else {
error(“입력 파일을 열지 못했습니다.\n”);
}
close(sfile);
} else {
error(“입력 파일을 열지 못했습니다.\n”);
rc = -2;
}

이제 이 코드가 너무 길고 indentation도 너무 깊다고 판단되어
아무래도 이 함수는 좀 손봐야겠다고 생각이 되어
알고리즘을 보니 분명히 손 볼 수 있는 구조입니다.
그래서 알고리즘을 수정합니다.

파일 이름을 두 개 입력받는다.
소스 파일을 연다.
blahblah를 호출한다.
소스 파일을 닫는다.

blahblah:
타겟 파일을 연다.
메모리 버퍼를 할당한다.
버퍼를 이용하여 파일을 복사한다.
메모리 버퍼를 해제한다.
타겟파일을 닫는다.

아 그런데 코드도 이렇게 수정할 수가 있나요.
물론 됩니다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 23분 34초
제 목(Title): New 버전3

모든 문제를 해결한 버전.

New 버전3:

blahblah(int sfile, char *dname)
{
int dfile;<---- 펑션으로 만들 때 문제를 일으키지 않음 dfile = open(dname, "w"); if (dfile >= 0) {
char *buffer;<---- 펑션으로 만들 때 문제를 일으키지 않음 buffer = malloc(8 * 1024); if (buffer != NULL) { rc = copy(sfile, dbuf, buffer); if (rc >= 0) {
; // success
} else {
error(“복사 도중 에러가 발생했습니다.\n”);
}
free(buffer);
}
close(dfile);
} else {
error(“입력 파일을 열지 못했습니다.\n”);
}
}


input_filename(sname);
input_filename(dname);
if (strlen(sname) <= 0 || strlen(dname) <= 0) { printf("이름이 잘못되었습니다.\n"); return -1; } sfile = open(sname, "r"); if (sfile >= 0) {
blanblah(sfile, dname); <---- 이 부분이 펑션으로 쪼개져 나갑니다. close(sfile); } else { error("입력 파일을 열지 못했습니다.\n"); rc = -2; } ... blahblah 펑션이 참 어색한 파라미터를 받고, 기능적으로 잘못되었다고 생각하실 겁니다. (저도 그렇게 생각하니까.) 하지만 여기서 보여주고자 하는 것은 즉각적으로 블랙박스 펑션으로 쪼개는 코딩 기술입니다. 원래 함수는 다시 indentation level 2로 바뀌었습니다. 어 그럼 탭8들은 그렇게 못한다는 말입니까? 예 잘 못합니다. 탭8들은 New 버전2를 아예 만들 생각을 하지 않기 때문에 New 버전3이 나오는 것도 힘듭니다. 코드 블럭들에까지 블랙 박스 개념을 염두에 두고 항상 이렇게 만들어야 가능한 얘깁니다. 예를 들어 위의 버전3나 버전4의 코드를 이렇게 블랙박스화 시키려고 생각을 해보십시오. 많은 노력이 듭니다. 게다가 에러 처리 루틴을 재배치한다는 것은 사실상 에러 처리 루틴을 풀 테스트해야 한다는 것을 의미하는 것으로 소프트웨어 릴리즈를 몇 주 또는 몇 달 뒤로 미루는 요인이 됩니다. 탭8을 주장하는 것은 사실상 이 블랙박스 개념을 포기하는 것과 다름없습니다. 이 블랙박스화 된 코드 조각은 언제든지 펑션으로 쪼개져 나갈 수 있으며, 또한 코드 조각으로 되돌아오는 게 아주 쉽게 가능합니다. (되돌아오는 일은 거의 없습니다만) blahblah가 여전히 indentation이 깊다고 생각한다면 똑같은 방식으로 더 쪼개낼 수 있습니다. 게다가 에러 처리 루틴을 재배치하지 않고 쪼개낼 수 있기 때문에 쪼개는 과정 후에도 소프트웨어 테스트가 필요하지 않습니다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 24분 25초 제 목(Title): 개선점 항상 융통성이 있어야 합니다. 모두 다 그렇게 하라는 말이냐 고 저에게 묻지 마십시오. 적당한 레벨에서 로직에 전혀 영향을 주지 않으며 에러 처리 루틴을 재배치하지 않고도 코드 블럭을 펑션으로 떼어내는 기술을 보여드렸습니다. 그리고 파일 이름을 처리한 부분은 일부러 중간에 return 처리했습니다. 그 때문에 1 entry, 2 exit이 되었지만 알고리즘의 이해를 방해하는 것이 아니라고 판단되어 그렇게 합니다. 탭8을 고수해도 사실 이것이 됩니다. 하지만 개발 과정에서 탭8을 고수하게 되면 이와 같은 프로그래밍 스타일에서는 거의 배겨나지 못합니다. 코딩을 한참 하는 도중에는 이와같은 정리나 펑션화를 하기 어렵기 때문입니다. 그래서 보통 4나 2를 쓰게 됩니다. 또 더이상 참을 수 없을 경우 즉각적으로 펑션으로 쪼개내면서 개발을 진행시킬 수가 있습니다. 탭8을 사용하게 되면 그 못 참는 정도가 빨리 옵니다. 개발이 거의 끝나갈 무렵에 소스 정리를 하기 위해 펑션 정리를 하는 경우에는 이 문제가 더 중요합니다. 어떻게 하면 소프트웨어 테스트가 완료된 코드를 전혀 로직을 건드리지 않고 더 분해할 수 있는가 하는 것 말입니다. 이 문제의 심각성을 말해주는 우스운(!) 격언이 있지요. "돌아가면 더 건드리지 말라" 자 여기서 scope 룰은 어떻게 되는가 봅시다. dfile과 buffer 변수가 사용되기 직전에 선언이 됨으로써 블랙박스로 쪼개져나갈 때 아무 문제도 일으키지 않습니다. 게다가 변수는 최소한의 scope를 가져야 한다는 룰을 지킵니다. 탭8 코딩법에서는 지키는 게 불가능합니다. 전에 어떤 분이 코드 라인에 블랙박스 개념을 적용시키는게 무슨 말인가 하고 물으셨습니다. 바로 이것입니다. 이 코드 블럭은 펑션 속에 포함된 코드 블럭이지만 이미 블랙 박스로 구현된 펑션과 다르지 않습니다. 사실상 코드 블럭을 하나도 수정하지 않고 블랙박스 펑션으로 분리할 수 있기 때문에 이미 블랙박스입니다. 에러 처리부분에 대해 봅시다. 에러 한 개에 대해서는 딱 하나의 에러 처리 루틴이 있습니다. 유지보수가 쉽습니다. 이 코딩법에서는 open/close, malloc/free 쌍이 맞지 않는 오류를 원천적으로 만드는게 힘듭니다. 코드를 쓸 때 가장 먼저, 파일을 열고 닫는 코드를 쓰기 때문입니다. 즉, rc = open(); if (rc == success) { close(); } 를 먼저 쓰고 두번째 에러 처리 루틴을 붙입니다. rc = open(); if (rc == success) { // code here close(); } else { error("오픈에 실패했습니다.\n"); } 그 다음 가운데 코드 블럭을 써나갑니다. 이 순서는 지켜야 할 중요한 코딩 습관입니다. 여기서 어떻게 쌍을 빠뜨리는 일이 일어날 수가 있겠습니까. 또한 쌍이 제대로 되어 있는지 확인하는 것도 너무 쉽습니다. notepad를 쓰지 않는 이상 pair를 맞추는 툴은 쉽게 입수 가능하기 때문입니다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 26분 40초 제 목(Title): 마지막 가장 중요한 장점 그러나 여러 장점보다 가장 중요한 장점은, 코드가 정확히 알고리즘 반영에 주력한다는 점입니다. 에러 처리 루틴을 알고리즘 중간 중간에 삽입하지 않음으로써 알고리즘 가독성을 높이고 (코드 가독성을 높이는 것보다 훨씬 더 중요한 문제입니다.) 역분석을 가능케 한다는 것입니다. 이것이 탭8을 쓸 경우 얻기 힘든 매우 중요한 장점입니다. 심지어 코드를 다음과 같이 쓸 수도 있습니다. "// 작업 시작" 이후의 7줄만 보세요. 이 함수가 말하려고 하는 전부입니다. New 버전4: input_filename(sname); input_filename(dname); // 작업 시작 if (strlen(sname) > 0 && strlen(dname) > 0) {
if ((sfile = open(sname, “r”)) >= 0) {
int dfile;<---- 변수 정의가 여기로 내려왔습니다. if ((dfile = open(dname, "w")) >= 0) {
char *buffer;<---- 변수 정의가 여기로 내려왔습니다. if ((buffer = malloc(8 * 1024)) != NULL) { if ((rc = copy(sfile, dname, buffer)) >= 0) {
// 작업 끝. 이하는 에러처리입니다.
; // success
} else {
error(“복사 도중 에러가 발생했습니다.\n”);
}
free(buffer);
}
close(dfile);
} else {
error(“입력 파일을 열지 못했습니다.\n”);
}
close(sfile);
} else {
error(“입력 파일을 열지 못했습니다.\n”);
rc = -2;
}
} else {
printf(“이름이 잘못되었습니다.\n”);
return -1;
}

이 프로그램을 읽는 사람은 “작업 시작” 부터 “작업 끝” 까지
딱 7줄만 읽으면 무슨 일을 하는지 알 수 있는 것입니다.
탭8 코딩법에서는 약 40 줄 정도를 읽어야 했습니다.
알고리즘의 가독성을 극대화하기 위해
융통성을 발휘하여 dfile, buffer 변수를 앞쪽으로 다시 옮겨본다면
알고리즘의 핵심을 5줄로 코딩할 수 있습니다.

// 작업 시작
if (strlen(sname) > 0 && strlen(dname) > 0) {
if ((sfile = open(sname, “r”)) >= 0) {
if ((dfile = open(dname, “w”)) >= 0) {
if ((buffer = malloc(8 * 1024)) != NULL) {
if ((rc = copy(sfile, dname, buffer)) >= 0) {
// 작업 끝

이 코딩법은 indentation 2, 3 레벨 들어가는 경우 어떻게 더이상
들어가지 못하게 할 수 있는지를 보여줍니다.
그런데 들어가지 못하게 하려면 일단 4, 5 또는 그 이상
코드가 일단 들어가야 한다는 문제가 있습니다.
즉 쪼갤 필요성을 그때서야 느낀다는 것이지요.
4, 5 들어가면 탭8로는 버티기 힘듭니다.
이 코딩법은 언제든지 코드의 어떤 부분이든
indentation 레벨을 3, 4로 유지할 수 있지만
탭8들은 길어지는 코드를 하염없이 바라보고만 있어야 합니다.

이상 탭8 코딩법을 사용할 경우 나타나는 여러 단점들에 대해
말씀드렸습니다. 마음에 드는 이야기도 있을 것이고
마음에 들지 않는 이야기도 있을 것입니다. 취사 선택하세요.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 12시 27분 32초
제 목(Title): 너무 길어 죄송합니다

CnUnix에서 논해야 할 문제이긴 하지만
anony에서 시작된 문제라 여기에 올립니다.
관심없으신 분들께는 죄송합니다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 01시 26분 49초
제 목(Title): Re: 너무 길어 죄송합니다

짝짝짝.

대단하십니다.

한 수 배웠습니다.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 01시 26분 59초
제 목(Title): Re: 탭=8 <- 혹시 바보아니세용? >아항.. 알겠당.
>
>아저씨 혹시
>X 윈도우 코딩 안해본거 아닌가용?
>MFC 코딩도 혹시 못해봤지용?
>아님 DCOM이나 CORBA 프로그래밍은 해보았나용?
>혹시 그런 분야 프로그래밍은 다 그지 같아서 나는 싫어! 안해!!
>이런 생각이 들지 않나용?

이따위 리좀 달지 마세요.

다 해봤다고 위에 써놨지 않습니까?

싸움을 거는 것도 아니고 보드를 흐리는 글이로군요.

그냥, 무시하세요. 병신이 지 잘났다고 떠드는데 아니라고 말해봐야

병신이 압니까? 솔직히 병신이 병신짓하는데 병신이라고 말해봐야

입만 아프지 않습니까? 뭐, 이런 말을 하면 또, 병신이 병신 아니라고

병신 지랄을 할텐데, 그 때도 그냥 병신이 병신 짓한다고 생각하고 그냥

넘어가야죠. 병신이 병신짓하겠다는데…

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 02시 11분 38초
제 목(Title): Re: 너무 길어 죄송합니다

다 좋은데 마지막에 주석을 //로 달아 놓은거 보니
비주알 씨로 시작하신 분이구먼.

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 03시 10분 03초
제 목(Title): Re: 너무 길어 죄송합니다

수고하셨습니다.

음… exception 처리를 뒤에 넣어 놓으면 그런 장점이 있군요…

덕분에 C++의 throw, catch exception handling이 code readability에도 도움을
주고 있다는 사실을 다시 한 번 실감하게 되었습니다.

nested if로 된 procedure라… 생각해 보지 못했는데…
그러고 보면 프로그램은 참으로 불쌍하군요… 수많은 error의
지뢰를 통과해야 겨우겨우 끝에 도달할 수 있으니…

status variable과 errmsg string variable 로 1 entry, 1 exit + debug
information을 유지했던 Tab 8 맨으로부터

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 03시 13분 36초
제 목(Title): Re: 탭=8 <- 혹시 바보아니세용? 이따위 리좀 달지 마세요. 다 해봤다고 위에 써놨지 않습니까? 싸움을 거는 것도 아니고 보드를 흐리는 글이로군요. 그냥, 무시하세요. 병신이 지 잘났다고 떠드는데 아니라고 말해봐야 병신이 압니까? 솔직히 병신이 병신짓하는데 병신이라고 말해봐야 입만 아프지 않습니까? 뭐, 이런 말을 하면 또, 병신이 병신 아니라고 병신 지랄을 할텐데, 그 때도 그냥 병신이 병신 짓한다고 생각하고 그냥 넘어가야죠. 병신이 병신짓하겠다는데... ::: 한마디만 하자. 난 안다. 이글은 분명히 KAIST학생이 썼다는 것을. KAIST학생들 지들은 천재인 척 하지만 내가 볼땐 천재의 낌새는 눈꼽만도 없는 놈들이 KAIST에는 많다. 그래 내가 C랑 C revisited라는 글을 썼을때 너의 기분을 상하게 했는지 몰라. 아냐. 아마도 기분 몹시 상했을거야. 그렇지만 위의 뤼의 글을 쓰는 너의 능력 정말 우습구나. 넌 내가 왜 병신인지 아무런 이야기도 하지 않은채 병신이라고 말하고 있다. 적어도 내가 8을 주장하는 것에 대해서 반론이라도 이야기하면서 병신이라고 해야 최소한의 예의가 아니냐? 난 잘 안다. KAIST학생들의 수준을. 너희들 상당부분은 위에서 보는 글, 아무런 주장도 없이 불쑥 병신이라느니, 말도 되지 않는다느니 , 미친놈이라느니 하고 글을 쓴다. 왜 도대체 왜 병신이며, 말이 되지 않으며, 미친놈인지에 대해서는 한글자도 찾아볼 수 없다. 위에 어느분이 왜 탭8이 나쁜지에 대해 이야기하고 있다. 내가 그의 글에 동의하든 동의하지 않든 그것은 다른 문제이니 접어두기로 하고, 그글들 뒤에 달린 뤼가 하나 있었다. 그글은 석줄정도 되는 것이었는데, 참 잘하였습니다. 와 비슷한 이야기를 하고 있다. 그 도배하셨던 그글들이 왜 좋은 글이었는지는 한마디도 하지 않은ㄴ채 그저 잘 썼다는 이야기를 하고 있다. 동의한다는 이야기도 없고 어느어느 부분에서 동의하지 않는다는 이야기도 없다. 그글도 KAIST학생의 글이다. KAIST학생들은 지극히도 단순하다. 이와같은 지극히 단순한 글들, 뤼들은 KAIST보드에 와보면 수없이 만난다. 참으로 한심한 KAIST학생들. SNU보드에도 자주 놀러가지만 그곳엔 적어도 이처럼 단순한 글들 찾기 힘들다. 그저 서너줄 써놓고 병신이라느니, 이해할 수 없다느니, 꺼지라느니 하는 이야기 SNU에서는 찾기 힘들다. KAIST학생들아. 너희들은 적어도 자신의 이야기를 말하는데 있어서는 SNU뒤딸아오기 힘들다. 다시 찾아본 결과 짝짝짝 수고하셨습니다. 한수배웠습니다. 라는 글이었습니다. 제가 이글에서 두번째로 비난했던 글은, "참 잘하셨습니다"가 아니고. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 03시 33분 44초 제 목(Title): Re: 너무 길어 죄송합니다 아주 대단한 실력이십니다. 옳은 방법이란 것은 알겠는데, 그렇게 짜고 싶지는 않군요. 눈이 피곤해요. 저같으면 이렇게 짜겠습니다. C++로 짠다면: try { String sname = src_filename(); String dname = dst_filename(); File sfile = File(sname, "r"); File dfile = File(dname, "w"); CharArray buffer(8 * 1024); copy(sfile, dfile, buffer); } catch (IOException e) { // 에러처리 } catch (MEMException e) { // 에러처리 } C로 짠다면: char *sname=0, *dname=0, *buffer=0; int sfile=0, dfile=0; TRY { sname = src_filename(); dname = dst_filename(); sfile = file(sname, "r"); dfile = file(dname, "w"); buffer = malloc(8 * 1024); copy(sfile, dfile, buffer); } CATCH (IOEXCEPTION) { /* 에러처리 */ } CATCH (MEMEXCEPTION) { /* 에러처리 */ } FINALLY { if (sname) free(sname); if (dname) free(dname); if (buffer) free(buffer); if (sfile) close(sfile); if (dfile) close(dfile); } * TRY CATCH FINALLY는 setjmp() longjmp() 등등을 사용하여 정의된 매크로입니다. 옛날에 C 코딩할 때 만들어 써었는데 지금 찾아보니 지워버렸는지 없군요. 혹시 원하시면 다시 만들어 올릴 의향도 있는데... * 보면 알겠지만 제 텝사이즈는 언제나 4입니다. tab=8? 흠.. 별로 그러고 싶지 않군요. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 03시 35분 07초 제 목(Title): Re: 탭=8 <- 혹시 바보아니세용? > 위에 SE 어쩌고 지랄하면서 헛소리 하고 자빠져있는 자식을 보노라면
> 화가 치민다. 난 석사과정에서 SE전공했는데, indentation이 그렇게
> 의미있는것이라고는 처음들어 본다.
> 그리고 코드 루핑이나 분기등의 구조에 관심이 많았던 구조적 기법
> 시절에도 그런 시시껄렁한 얘기한 새끼는 없었다.

뭐, 별로 유명하지 않고 오래된 책이라서 그런지는 모르겠지만…
(이거 학부때 최근 책이라고 공부하던 건데… 쩝…)

R. Fairley, “Software Engineering Concepts”, McGraw-Hill, 1985, pp. 215–216

에 보면 아래와 같은 이야기가 나와 있습니다.

Don’t nest too deeply: The major advantage of single entry, single exit
constructs is the ability to nest construct within one another to any
desired depth while maintaing linearity of control flow. If the nesting
becomes too deep, as in

while B1 loop
if B2 then
repeat S1
while B3 loop
if B4 then S2

it becomes difficult to determine the conditions under which statement S2
will be executed; the clarity of the code is obscured. Excessive nesting is
also an indication of fuzzy thinking and poor design. As a general guideline,
nesting of program constructs to depths greater that three or four levels
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
should be avoided. In addtion,… <후략>
^^^^^^^^^^^^^^^^^^

음… 원래 coding style이라는 것은 일반적인 글을 쓰는 것과 마찬가지로
꼭 정해진 형식은 없다고 뒤에 덧붙여 놨군요…

> indentation이 8로 되어 있어야 깊게 네스팅된 걸 발견하고, 4단 이상으로
> 네스팅되 있으면, 설계상의 결함이 있다?…

설계가 아니라 구현… 아닌가요? coding 단계에서 design으로 다시 올라가면
어쩌시나?

> 인덴테이션이 8이어야 네스팅된 걸 발견할 수 있냐? 눈알이 그렇게 나빠?

예… 저는 눈이 나빠서 그런지 그래야 4번 nesting이 눈에 뜨이더라구요…
tab=4로 하면 5, 6번은 쉽게 넘더군요…

> 쓸데없는 잡소리는 그만 집어치우고, 집에가서 SE 책이나 한번 더 뒤져봐라.

예, 그래서 이렇게 보고 올립니다요…

> SE책으로는 Pressman이 쓴 고전책이 니 수준에 맞겠다.

석사 논문까지 쓰신 분이니 참고 문헌에 맞게 적어 주시죠…
그러면 감사히 읽어보도록 하겠습니다.

중간에 끼어든 Tab 8 맨

[ anonymous ] in KIDS
글 쓴 이(By): 아무개 (Who Knows ?)
날 짜 (Date): 1999년 7월 6일 화요일 오전 03시 37분 46초
제 목(Title): Re: 탭=8 <- 혹시 바보아니세용? 탭 이야기 그만 합시다. 제가 너무 공격적이었던 것 같고 또 너무 심한 말을 한 것 같아서 미안한 마음 숨길 수가 없습니다. 개인적으로 조금 바랬던 것은 저랑 같이 일하는 C style에는 관심이 별로 사람과 같이 사는 관계로 답답한 마음 스트레스 좀 풀겸 이곳에서 tab4를 쓰는 사람들 비난좀 했습니다. 사실 탭문제는 탭4와 탭8로 나뉘어 서로 치고박고 싸울 줄 알았는데 탭1, 2, 3도 있다는 소리를 들어서 황당했습니다. 그분들에게는 더욱 심한 말을 한 것 같아서 미안하게 생각하고 있으며, 이 세상에는 탭1,2,3을 도저히 용납할 수 없는 "병신"도 살아가고 있다는 것에 주의를 기울려 혹시 탭1,2,3이 정말 좋은 것이지 다시 한번 생각해보시면 어떨까 하는 작은 부탁드립니다. 그리고 조금전에 많은 양의 글을 쓰신 분께 드리는 말씀인데, 사실 너무 학자적이십니다. 무슨 뜻이냐하면 너무 교과서적이다. 하는 것입니다. 저는 1 enter, 1 exit을 도저히 받아들일 수 없거든요. error가 나오면 즉시즉시 return해버리는 타입이라서. 물론 제 이야기는 당신의 주장이 쓸데없는 것이다라는 것은 아닙니다. 다만 도저히 받아들일 수 없다 하는 것입니다. 당신의 글에 뤼를 다시는 분들이 몇분 게셨는데 당신의 글에 동의하는 글인 것으로 보아 당신의 글은 좋은 글일 것입니다. 하지만 저는 아직 덜 배운 모양인지 아직 받아들일 수가.. 아무튼 탭 이야기 그만합시다. 많은 분들 뤼 다시느라 수고하셨습니다. 그리고 부탁하건데 느닫없이 병신, 미친놈 이라는 이야기 하지 맙시다. 적어도 왜 병신인지 미친놈인지 이야기나 하고 그런 이야기합시다. 감사합니다. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 08시 25분 43초 제 목(Title): 크크 TAB을 5로 놓고 쓰는 사람은 못봤죠 ? 내가 아는 사람은 5로 놓고 쓰더라구요. 재밌네... 10년 조금 넘게 이 바닥에서 이런저런 사람을 보아왔는데... C는 4가 젤 많은듯... (특히 vi쓰는 시스템 프로그래머들은 거의 4던데여??) 글구 이즈음 java쓰는 사람중엔 2도 만만치 않게 있구... (4가 물론 많지만...) 글고 많은 신참들을 보아 오면서 느낀건 학교서 배울때 8로 배우고 연습하지만 회사에 와서 코드량이 커지고 옆으로도 넓어지면서 점점 4로 가는 듯... (회사일은 바닥부터 자기가 하지 않는 경우가 많아서 다른 사람의 코드를 볼일이 많으니 많은수의 4짜리 code를 보다가 따라가는 것일 수도 있고...) 전 몇으로 쓰는가? 또 쌈거리가 될거 같아서 그건 안 밝히는게 낳을 듯... 어쨌건간에 5로 놓고 쓰는 사람이 있다는건 재밌는 일입니다요. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 10시 15분 58초 제 목(Title): Re: 탭=8 <- 혹시 바보아니세용? tab=8 에 놓고 코딩할라면 대체 터미날이 얼마나 커야 되는거야? 80칼럼 터미널에선 tab=8이면 변수명의 길이도 제한 받아야 하고 쫌만 탭을 쳐도 커서가 눈에서 벗어나 여간 불편한게 아닌데 마랴. 윈도구 프로그래머나 tab=8에 놓을꺼야 아마.. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 10시 28분 17초 제 목(Title): Re: 탭=8 <- 혹시 바보아니세용? 아저씨 저 C, C revisited를 쓴 원저자인데요. 이젠 그만 하죠. 저 너무 지쳤네요 [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 11시 01분 49초 제 목(Title): Re: 너무 길어 죄송합니다 귀찮아서 그렇게 했겠지요. ^^ [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오전 11시 12분 53초 제 목(Title): TAB 8 논장을 보며.. 기쁘다. 학부때 공부 안했던거 여기서 보충하는구나.. ^____________________________^ - 어느 통신 전공 공도리. PS. 참 근디유.. 통신이나 전자 전공하고.. 교환기나 머 그런 시스템 프로그램만 하는 사람들도 SE나 DS등에 대해 꼭 공부해야 한다고 생각 하시남유? 정규 과목에는 없었는디.. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오후 08시 09분 55초 제 목(Title): Re: 탭=8 <- 혹시 바보아니세용? 탭 8을 쓴 원저자고 지랄이고 항복해. 발뺌하지 말고 [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오후 09시 10분 32초 제 목(Title): Re: C 글세요.... 실대없이...어려운.코드.쓰기보다... 읽기 편하게 if, for문 많이 쓰는게 쉽든데... 옛날 처럼....메모리..문제가.있는것도.아니고... 쉽게..논리가..눈에..딱들어오도록...쓰는게..좋아보이든데... 옛날.처럼..말도.않되게..어려운.코드.만들지.맙시다.. --;;.. [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오후 09시 29분 33초 제 목(Title): [Q] emacs 에서 space expansion? emacs에서 indent를 모두 space로 하고 싶을 때에는 어떻게 해줘야 합니까? 누구말대로 어느 줄은 space로, 또 다른 줄은 tab으로 indent가 되니 tab 설정이 다른 곳에서 보면 이상하게 되더군요. eamcs에서 space expansion을 설정하려면 어떻게 해야 하죠? [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오후 09시 38분 16초 제 목(Title): Re: 죄송합니다. C 로는 못하는게 없다는 말이 맞구나.... --;;... 대단한 언어야 아무튼.... [ anonymous ] in KIDS 글 쓴 이(By): 아무개 (Who Knows ?) 날 짜 (Date): 1999년 7월 6일 화요일 오후 09시 56분 11초 제 목(Title): Re: 탭=8 <- 혹시 바보아니세용? indentation depth가 4만으로 해결할 수 있을 정도로 간단한 실제 문제는 별루 없습니다.

답글 남기기