>>1001937
>do one job and that job well
>>1002365
>"a program should do a one thing and do it well"
>>1002413
>do one thing and do it well
A debugger that dumps core and overwrites the original core file it was trying to debug is the definition of "well" for UNIX weenies. There's a famous paper called "An Empirical Study of the Reliability of UNIX Utilities" which came out of the UNIX community itself.
>Operating system facilities, such as the kernel and utility programs, are typically assumed to be reliable. In our recent experiments, we have been able to crash 25-33% of the utility programs on any version of UNIX that was tested.
>Wasn't one of the main reasons for the Unix philosophy, or way of building tools, was to save system resources because the machines weren't particularly powerful?
The UNIX "tool" philosophy was a kludge so they could get "tools" originally not designed to work together to work together, like those programs that work by moving your mouse pointer and faking keypresses. The proper solution in both cases is to use a binary interface.
>This screams trying to stop programmers from writing the same logic in different programs, hence saving resources and being minimal.
That's what libraries do. Libraries were around for decades before UNIX and they do a much better job.
>>1002465
>http://www.catb.org/esr/writings/taoup/html/philosophychapter.html
>Many pressures tend to make programs more complicated (and therefore more expensive and buggy). One such pressure is technical machismo. Programmers are bright people who are (often justly) proud of their ability to handle complexity and juggle abstractions. Often they compete with their peers to see who can build the most intricate and beautiful complexities. Just as often, their ability to design outstrips their ability to implement and debug, and the result is expensive failure.
Bright people can tell the difference between good software and a pile of shit. UNIX weenies don't mind "accidental" complexity like C and JavaScript brain damage or not being able to use compound literals with C macros because they didn't think about the interaction between commas and the preprocessor, but they complain about anything that's actually useful to the programmer even though the lack of brain damage makes it simpler than UNIX languages that do less.
>http://www.catb.org/esr/writings/taoup/html/ch07s03.html
>Though Unix developers have long been comfortable with computation by multiple cooperating processes, they do not have a native tradition of using threads (processes that share their entire address spaces). These are a recent import from elsewhere, and the fact that Unix programmers generally dislike them is not merely accident or historical contingency.
>From a complexity-control point of view, threads are a bad substitute for lightweight processes with their own address spaces; the idea of threads is native to operating systems with expensive process-spawning and weak IPC facilities.
Let me guess, this was written before Go came out and Eric S. Raymond completely changed his opinion on threads after Go made them "simple and elegant."
>as of mid-2003.
How did I know that?
The statement “fixing bugs would break existing code” is a powerful
excuse for Unix programmers who don’t want to fix bugs. But there might
be a hidden agenda as well. More than breaking existing code, fixing bugs
would require changing the Unix interface that zealots consider so simple
and easy-to-understand. That this interface doesn’t work is irrelevant. But
instead of buckling down and coming up with something better, or just fix-
ing the existing bugs, Unix programmers chant the mantra that the Unix
interface is Simple and Beautiful. Simple and Beautiful. Simple and Beau-
tiful! (It’s got a nice ring to it, doesn’t it?)
Unfortunately, programming around bugs is particularly heinous since it
makes the buggy behavior part of the operating system specification. The
longer you wait to fix a bug, the harder it becomes, because countless pro-
grams that have the workaround now depend on the buggy behavior and
will break if it is fixed. As a result, changing the operating system interface
has an even higher cost since an unknown number of utility programs will
need to be modified to handle the new, albeit correct, interface behavior.
(This, in part, explains why programs like ls have so many different
options to accomplish more-or-less the same thing, each with its own slight
variation.)