Unix의 가장 오래되고 완고한 디자인 규칙 중 하나는 프로그램이 뭔가 긴요하게 할 말이 없으면 입을 다물고 있어야 한다는 것이다. 이 규칙에 잘 맞는 Unix프로그램은 불필요한 메시지로 소란을 피우거나 사용자를 귀찮게 하지 않고 할 일만을 조용히 처리할 것이다. 침묵은 금이다.
이러한 "침묵은 금이다" 라는 규칙은 원래 Unix가 비디오 디스플레이보다 먼저 태어났기 때문에 생겨났다. 1969년도에 사용되던 느려터진 프린팅 터미널에서는 불필요한 출력 때문에 사용자들의 시간을 흘려버리기 일쑤였다. 지금은 그런 불편함이 사라졌지만 간결함을 추구하는 훌륭한 규칙은 지금까지 남게 되었다.
잘 설계된 프로그램은 사용자의 관심과 주의를 소중하게 여겨서, 되도록 꼭 필요한 경우에만 시간을 끈다.
We cannot leave the subject of interactive user interfaces without exploring one of the oldest and most persistent design tropes of Unix, the Rule of Silence. We observed in Chapter 1 that well-designed Unix programs with nothing interesting or surprising to say should shut up, and suggested there are good reasons for this that have long outlasted the slow teletypes on which Unix was born.
Here's one: Programs that babble don't tend to play well with other programs. If your CLI program emits status messages to standard output, then programs that try to interpret that output will be put to the trouble of interpreting or discarding those messages (even if nothing went wrong!). Better to send only real errors to standard error and not to emit unrequested data at all.
Here's another: The user's vertical screen space is precious. Every line of junk your program emits is one less line of context still available on the user's display.
Here's a third: Junk messages are a careless waste of the human user's bandwidth. They're one more source of distracting motion on a screen display that may be mediating for more important foreground tasks, such as communication with other humans.
Go ahead and give your GUIs progress bars for long operations. That's good style — it helps the user time-share his brain efficiently by cuing him that he can go off and read mail or do other things while waiting for completion. But don't clutter GUI interfaces with confirmation popups except when you have to guard operations that might lose or trash data — and even then, hide them when the parent window is minimized, and bury them unless the parent window has focus.[111] Your job as an interface designer is to assist the user, not to gratuitously get in his face.
In general, it's bad style to tell the user things he already knows ("Program is starting up...", or "Program is exiting" are two classic offenders). Your interface design as a whole should obey the Rule of Least Surprise, but the content of messages should obey a Rule of Most Surprise — be chatty only about things that deviate from what's normally expected.
This rule has even greater force for confirmation prompts. Constantly asking for confirmation where the answer is almost always “yes” conditions the user to press “yes” without thinking about it, a habit that can have very unfortunate consequences. Programs should request confirmation only when there is good reason to suspect that the answer might be “no no no!” A confirmation request that is not a surprise is a strong hint of bad design. Any confirmation prompts at all may be a sign that what your interface really needs is an undo command.
If you want chatty progress messages for debugging purposes, disable them by default with a verbosity switch. Before releasing for production, relegate as many of the normal messages as possible to being displayed only when the verbosity switch is on.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
cp같은 경우에는 항목별로 처리되므로 각 항목을 보여줄 필요가 있다. 그래서 -v 옵션이 있다. 다스크 단위로 처리하는 dd와 상황이 다르다.
진행상황 출력으로 인해 속도가 느려지는 문제를 피한다는 부분은 출력되는 양이 많지 않고 네트워크 자원 소비량도 많이 않을 거라 생각했었는데, 매 스텝마다 진행상황을 체크하고 표출하려면 상당한 속도 저하가 있겠다는 생각이 든다. 가뜩이나 오래 걸리는 작업인데 스텝 수도 엄청 많을듯.
GUI는 dd의 태생 환경과는 거리가 멀고, 상식적으로 봐도 GUI로 진행상황을 표출하는 것은 dd에서 불필요하고 비효율적으로 보인다. 굳이 진행 상태바를 보고 싶다면 bar를 이용할 수도 있겠다. 하지만 그 오랜 작업시간동안 상태바를 지켜보고 있을 일은 없을테고, 필요한 순간에만 USR1 kill 시그널을 보내서 확인하는 것이 훨씬 효율적일 것이다.
man dd 해보시면 USR1 signal을 이용해
man dd
해보시면 USR1 signal을 이용해 진행상황을 확인할수 있는 방법이 나옵니다.
아, manpage에 이미 들어가있었군요. 그렇다면
아, manpage에 이미 들어가있었군요. 그렇다면 필요성은 인지하고 있다는 것인데, 확인할 수 있는 방법이 이미 있으니 따로 집어넣을 필요가 없다는 생각이었을까요? 확인 방법은 압니다만 왜 옵션으로 추가하지 않았을까 하는 뻘생각이었습니다;;
상당수의 그 옛날 유닉스 명령어는 진행상황 같은 것은
상당수의 그 옛날 유닉스 명령어는 진행상황 같은 것은 출력 안합니다. dd뿐만 아니라 cp, rm 등등도 마찬가지죠.
음... 명령어들이 태어날 때는 데이터 크기가
음... 명령어들이 태어날 때는 데이터 크기가 지금처럼 크지 않았기 때문이려나요? 그런데 cp와 rm에는 -v가 있지 않나요?
음... 명령어들이 태어날 때는 데이터 크기가
음... 명령어들이 태어날 때는 데이터 크기가 지금처럼 크지 않았기 때문이려나요? 그런데 cp와 rm에는 -v가 있지 않나요?
Art of Unix
Art of Unix Programming(정보문화사) 49쪽, 무언의 법칙 중
Unix의 가장 오래되고 완고한 디자인 규칙 중 하나는 프로그램이 뭔가 긴요하게 할 말이 없으면 입을 다물고 있어야 한다는 것이다. 이 규칙에 잘 맞는 Unix프로그램은 불필요한 메시지로 소란을 피우거나 사용자를 귀찮게 하지 않고 할 일만을 조용히 처리할 것이다. 침묵은 금이다.
이러한 "침묵은 금이다" 라는 규칙은 원래 Unix가 비디오 디스플레이보다 먼저 태어났기 때문에 생겨났다. 1969년도에 사용되던 느려터진 프린팅 터미널에서는 불필요한 출력 때문에 사용자들의 시간을 흘려버리기 일쑤였다. 지금은 그런 불편함이 사라졌지만 간결함을 추구하는 훌륭한 규칙은 지금까지 남게 되었다.
잘 설계된 프로그램은 사용자의 관심과 주의를 소중하게 여겨서, 되도록 꼭 필요한 경우에만 시간을 끈다.
이후 누군가 댓글로 344쪽 내용을 타이핑해주는데..
음 ..
Silence Is Golden
We cannot leave the subject of interactive user interfaces without exploring one of the oldest and most persistent design tropes of Unix, the Rule of Silence. We observed in Chapter 1 that well-designed Unix programs with nothing interesting or surprising to say should shut up, and suggested there are good reasons for this that have long outlasted the slow teletypes on which Unix was born.
Here's one: Programs that babble don't tend to play well with other programs. If your CLI program emits status messages to standard output, then programs that try to interpret that output will be put to the trouble of interpreting or discarding those messages (even if nothing went wrong!). Better to send only real errors to standard error and not to emit unrequested data at all.
Here's another: The user's vertical screen space is precious. Every line of junk your program emits is one less line of context still available on the user's display.
Here's a third: Junk messages are a careless waste of the human user's bandwidth. They're one more source of distracting motion on a screen display that may be mediating for more important foreground tasks, such as communication with other humans.
Go ahead and give your GUIs progress bars for long operations. That's good style — it helps the user time-share his brain efficiently by cuing him that he can go off and read mail or do other things while waiting for completion. But don't clutter GUI interfaces with confirmation popups except when you have to guard operations that might lose or trash data — and even then, hide them when the parent window is minimized, and bury them unless the parent window has focus.[111] Your job as an interface designer is to assist the user, not to gratuitously get in his face.
In general, it's bad style to tell the user things he already knows ("Program is starting up...", or "Program is exiting" are two classic offenders). Your interface design as a whole should obey the Rule of Least Surprise, but the content of messages should obey a Rule of Most Surprise — be chatty only about things that deviate from what's normally expected.
This rule has even greater force for confirmation prompts. Constantly asking for confirmation where the answer is almost always “yes” conditions the user to press “yes” without thinking about it, a habit that can have very unfortunate consequences. Programs should request confirmation only when there is good reason to suspect that the answer might be “no no no!” A confirmation request that is not a surprise is a strong hint of bad design. Any confirmation prompts at all may be a sign that what your interface really needs is an undo command.
If you want chatty progress messages for debugging purposes, disable them by default with a verbosity switch. Before releasing for production, relegate as many of the normal messages as possible to being displayed only when the verbosity switch is on.
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
음... "Go ahead and give your
음... 사람 눈에는 보고싶은 것만 보인다고 하죠;; "Go ahead and give your GUIs progress bars for long operations. That's good style" 유닉스의 미니멀리즘은 아름답게 생각합니다.
고민하던 내용을 정리해봅니다. cp같은 경우에는
고민하던 내용을 정리해봅니다.
cp같은 경우에는 항목별로 처리되므로 각 항목을 보여줄 필요가 있다. 그래서 -v 옵션이 있다. 다스크 단위로 처리하는 dd와 상황이 다르다.
진행상황 출력으로 인해 속도가 느려지는 문제를 피한다는 부분은 출력되는 양이 많지 않고 네트워크 자원 소비량도 많이 않을 거라 생각했었는데, 매 스텝마다 진행상황을 체크하고 표출하려면 상당한 속도 저하가 있겠다는 생각이 든다. 가뜩이나 오래 걸리는 작업인데 스텝 수도 엄청 많을듯.
GUI는 dd의 태생 환경과는 거리가 멀고, 상식적으로 봐도 GUI로 진행상황을 표출하는 것은 dd에서 불필요하고 비효율적으로 보인다. 굳이 진행 상태바를 보고 싶다면 bar를 이용할 수도 있겠다. 하지만 그 오랜 작업시간동안 상태바를 지켜보고 있을 일은 없을테고, 필요한 순간에만 USR1 kill 시그널을 보내서 확인하는 것이 훨씬 효율적일 것이다.
댓글 달기