10 types of people
There are only 10 types of people in the world: those who understand binary and those who don’t.
There are only 10 types of people in the world: those who understand binary and those who don’t.
The best programmers are not marginally better than merely good ones. They are an order-of-magnitude better, measured by whatever standard: conceptual creativity, speed, ingenuity of design, or problem-solving ability.
Considering the current sad state of our computer programs, software development is clearly still a black art, and cannot yet be called an engineering discipline.
Perilous to us all are the devices of an art deeper than that which we possess ourselves.
A good programmer is someone who always look both ways before crossing a one-way street.
You can’t have great software without a great team, and most software teams behave like dysfunctional families.
A computer is a stupid machine with the ability to do incredibly smart things, while computer programmers are smart people with the ability to do incredibly stupid things. They are, in short, a perfect match.
Almost anything in software can be implemented, sold, and even used given enough determination. There is nothing a mere scientist can say that will stand against the flood of a hundred million dollars. But there is one quality that cannot be purchased in this way — and that is reliability. The price of reliability is the pursuit of the utmost simplicity. It is a price which the very rich find most hard to pay.
A smart terminal is not a smartass terminal, but rather a terminal you can educate.
It always takes longer than you expect, even when you take into account Hofstadter’s Law.
If a kid is addicted to a computer, I think that’s far better than watching TV, because at least his mind is making choices.
The cost of adding a feature isn’t just the time it takes to code it. The cost also includes the addition of an obstacle to future expansion. […] The trick is to pick the features that don’t fight each other.
If debugging is the process of removing software bugs, then programming must be the process of putting them in.
Creating computer software is always a demanding and painstaking process — an exercise in logic, clear expression, and almost fanatical attention to detail. It requires intelligence, dedication, and an enormous amount of hard work. However, a certain amount of unpredictable and often unrepeatable inspiration is what usually makes the difference between adequacy and excellence.
All you have to do is call free()
slightly less often than malloc()
. You may want to examine the Solaris system libraries for a particularly ambitious implementation of this technique.
We can solve any problem by introducing an extra level of indirection.
Any problem in computer science can be solved with another level of indirection… but that usually will create another problem.
Computers are useless. They can only give you answers.
Things which any idiot could write usually have the quality of having been written by an idiot.
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
In computer science, arrogance is measured in milli-Dijkstras.
I have found that the reason a lot of people are interested in artificial intelligence is the same reason a lot of people are interested in artificial limbs: they are missing one.
Make everything as simple as possible, but not simpler.
Bad programmers worry about the code. Good programmers worry about data structures and their relationships.
There is not now, nor has there ever been, nor will there ever be, any programming language in which it is the least bit difficult to write bad code.
Bad comments are like bad sex. It may not be great, but it’s better than nothing at all.
Compulsive caching or pre-calculation of answers when the questions aren’t performance intensive is a bad habit.
While it is possible to write bad programs in any language, in C it is absolutely required.
Never underestimate the bandwidth of a station wagon full of tapes hurtling down the highway.
A language that doesn’t have everything is actually easier to program in than some that do.
When I am working on a problem I never think about beauty. I think only how to solve the problem. But when I have finished, if the solution is not beautiful, I know it is wrong.
There’s no sense being exact about something if you don’t even know what you’re talking about.
Are you quite sure that all those bells and whistles, all those wonderful facilities of your so called powerful programming languages, belong to the solution set rather than the problem set?
There are two major products that come out of Berkeley: LSD and UNIX. We don’t belive this to be strictly by coincidence.
A good programmer looks both ways before crossing a one-way street.
Beware of bugs in the above code; I have only proved it correct, not tried it.
I have an ugly tendency to blame all my failings on others. It’s something I picked up from my parents.
It is a painful thing to look at your own trouble and know that you yourself and no one else has made it.
I don’t wish to be without my brains, tho’ they doubtless interfere with a blind faith which would be very comfortable.
When in doubt, use brute force.
They don’t make bugs like Bunny anymore.
Two bytes meet. The first byte asks, «Are you ill?» The second byte replies, «No, just feeling a bit off».
C lets you easily shoot in your foot, C++ lets you reuse the bullet.
I am always doing that which I cannot do, in order that I may learn how to do it.
The major difference between a thing that might go wrong and a thing that cannot possibly go wrong is that, when a thing that cannot possibly go wrong goes wrong, it usually turns out to be impossible to get at or repair.
I’m a programmer. People seem to think I can fix their computer problems. I guess they never wonder where those problems came from.
I would love to change the world, but they won’t give me the source code.
XML is like violence. Sure, it seems like a quick and easy solution at first, but then it spirals out of control into utter chaos.
The cleaner and nicer the program, the faster it’s going to run. And if it doesn’t, it’ll be easy to make it fast.
The competent programmer is fully aware of the limited size of his own skull. He therefore approaches his task with full humility, and avoids clever tricks like the plague.
Code never lies, comments sometimes do.
A camel is a horse designed by committee.
Search all the parks in all your cities; you’ll find no statues of committees.
The three C’s of software engineering are: Communication, Communication and Communication. Projects hardly ever fail due to technical problems.
Compatibility means deliberately repeating other people’s mistakes.
The code is 100% complete, it just doesn’t work yet.
Some problems are so complex that you have to be highly intelligent and well informed just to be undecided about them.
Beauty is more important in computing than anywhere else in technology because software is so complicated. Beauty is the ultimate defence against complexity.
The computing scientist’s main challenge is not to get confused by the complexities of his own making.
Program complexity grows until it exceeds the capabilities of the programmer who must maintain it.
The central enemy of reliability is complexity.
Increasingly, people seem to misinterpret complexity as sophistication, which is baffling — the incomprehensible should cause suspicion rather than admiration. Possibly this trend results from a mistaken belief that using a somewhat mysterious device confers an aura of power on the user.
Complexity kills. It sucks the life out of developers, it makes products difficult to plan, build and test, it introduces security challenges and it causes end-user and administrator frustration.
Keep it complex and kludgy.
Behind every computer error there is at least two human errors, one of which is blaming the computer.
Computer science is no more about computers than astronomy is about telescopes.
Mathematicians stand on each others’ shoulders and computer scientists stand on each others’ toes.
Any fool can use a computer. Many do.
More computing sins are committed in the name of efficiency (without necessarily achieving it) than for any other single reason — including blind stupidity.
That which CAN be configured, MUST be configured.
A foolish consistency is the hobgoblin of little minds, adored by little statesmen and philosophers and divines.
Constants aren’t. Variables won’t.
Constraints are not limitations; they are insight.
Controlling complexity is the essence of computer programming.
Correctness is clearly the prime quality. If a system does not do what it is supposed to do, then everything else about it matters little.
Any given program costs more and takes longer.
I have no special talents. I am only passionately curious.
A data structure is just a stupid programming language.
Databases are details to be hidden. They are not your central abstraction, nor are they the core of your application.
I love deadlines. I like the whooshing sound they make as they fly by.
Naturally, a tool for getting rid of bugs in your program is called a «debugger». Mudanely enough, the corresponding tool for putting bugs into your program is called a «programmer».
Debugging is damnably troublesome work, and plagues me.
Debugging time increases as a square of the program’s size.
The most effective debugging tool is still careful thought, coupled with judiciously placed print statements.
Debugging: removing the needles from the haystack.
Deleted code is debugged code.
In design, perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.
The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time.
With diligence it is possible to make anything run slowly.
A distributed system is one in which the failure of a computer you didn’t even know existed can render your own computer unusable.
If you aren’t sure which way to do something, do it both ways and see which works better.
Computers make it easier to do a lot of things, but most of the things they make it easier to do don’t need to be done.
You can’t stop anyone from doing anything. You can only slow them down.
When in doubt, leave it out.
I have always wished that my computer would be as easy to use as my telephone. My wish has come true. I no longer know how to use my telephone.
Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter.
Given enough eyeballs, all bugs are shallow.
If you don’t have time to do it right, you better have time to do it over.
There are two ways to write error-free programs; only the third one works.
猿も木から落ちる。
Any program will expand to fill available memory.
My definition of an expert in any field is a person who knows enough about what’s really going on to be scared.
Fashion is something barbarous, for it produces innovation without reason and imitation without benefit.
No code is faster than no code.
A computer lets you make more mistakes faster than any invention in human history, with the possible exceptions of handguns and tequila.
Software is finished when the last person stops using it.
Produce no document unless its need is immediate and significant.
The trick is to fix the problem you have, rather than the problem you want.
Comparing to another activity is useful if it helps you formulate questions, it’s dangerous when you use it to justify answers.
FORTRAN is not a flower but a weed — it is hardy, occasionally blooms, and grows in every computer.
Forward thinking was just the thing that made multics what it is today.
Software is like sex. It’s better when it’s free.
Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.
Never attribute to funny hardware that which can be adequately explained by broken locking.
Design games for yourself, but pretend like you’ve never seen the game before, so make it intuitive.
Any program that tries to be so generalized and configurable that it could handle any kind of task will either fall short of this goal, or will be horribly broken.
Everyone is a genius, but if you judge a fish on its ability to climb a tree, it will live its whole life believing it is stupid.
The whole point of getting things done is knowing what to leave undone.
It has been said that the great scientific disciplines are examples of giants standing on the shoulders of other giants. It has also been said that the software industry is an example of midgets standing on the toes of other midgets.
«Infinitely extendable API» roughly translates as «we can’t live without API bloat». Frankly, judging by the codebase, people who designed GNOME are culturally incompatible with UNIX.
Good programmers write good code. Great programmers steal great code.
If you can’t write a good code, at least make it looks good.
Good code is short, simple, and symmetrical — the challenge is figuring out how to get there.
It is only a slight exaggeration to say that every good comment in a program represents a small failure of the language.
Good design adds value faster than it adds cost.
Verba movent, exempla trahunt.
A good way to have good ideas is by being unoriginal.
The most important thing in a programming language is the name. A language will not succeed without a good name. I have recently invented a very good name, and now I am looking for a suitable language.
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
Real programmers always confuse Halloween and Christmas because Oct 31 equals Dec 25.
The primary duty of an exception handler is to get the error out of the lap of the programmer and into the surprised face of the user. Provided you keep this cardinal rule in mind, you can’t go far wrong.
Haskell is faster than C++, more concise than Perl, more regular than Python, more flexible than Ruby, more typeful than C#, more robust than Java, and has absolutely nothing in common with PHP.
That’s the thing about people who think they hate computers. What they really hate is lousy programmers.
I remarked to Dennis [Ritchie] that easily half the code I was writing in Multics was error recovery code. He said, «We left all that stuff out [of Unix]. If there’s an error, we have this routine called panic
, and when it is called, the machine crashes, and you holler down the hall: Hey, reboot it.»
Bugs that go away by themselves come back by themselves.
I think Microsoft named .Net so it wouldn’t show up in a Unix directory listing.
For a sucessful technology, honesty must take precedence over public relations for nature cannot be fooled.
Weeks of programming can save you hours of planning.
What I cannot build, I do not understand.
The whole HTML validation exercise is questionable, but validating as XHTML is flat-out masochism. Only recommended for those that enjoy pain. Or programmers. I can’t always tell the difference.
Integrated development environment features are language smells.
Programming: when the ideas turn into the real things.
Languages that try to disallow idiocy become themselves idiotic.
Fish don’t know they’re in water.
Imagination is more important than knowledge. For knowledge is limited, whereas imagination embraces the entire world, stimulating progress, givin birth to evolution.
Imagination is the Discovering Faculty, pre-eminently. It is that which penetrates into the unseen worlds around us, the worlds of Science.
One man’s constant is another man’s variable.
The problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.
Incorrect documentation is often worse than no documentation.
In my egotistical opinion, most people’s C programs should be indented six feet downward and covered with dirt.
If you put an infinite number of monkeys hitting keys at random on typewriters, eventually one will bash out the complete works of William Shakespeare.
Two things are infinite: the universe and the stupidity of mankind. However, I am not so sure yet with the universe.
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage — to move in the opposite direction.
To iterate is human, to recurse divine.
Java is a DSL to transform big XML documents into long exception stack traces.
Programming is like juggling; the problem is that the balls go where you throw them.
Keep it simple and stupid.
To me, programming is more than an important practical art. It is also a gigantic undertaking in the foundations of knowledge.
Knowledge is knowing that a tomato is a fruit; wisdom is knowing not to put it in a fruit salad.
There is much pleasure in useless knowledge.
Languages shape the way we think, or don’t.
If you start programming by learning perl you will just become a menace to yourself and others.
Learning to program has no more to do with designing interactive software than learning to touch type has to do with writing poetry.
It’s a curious thing about our industry: not only do we not learn from our mistakes, we also don’t learn from our successes.
Programming is like sex, one mistake and you will support it for life.
Measuring programming progress by lines of code is like measuring aircraft building progress by weight.
I’ve wondered whether Linux sysfs should be called syphilis.
Linux is only free if your time is worthless.
Any sufficiently well-documented lisp program contains an ML program in its comments.
Lisp isn’t a language, it’s a building material.
There is no place like 127.0.0.1.
Low-level programming is good for the programmer’s soul.
A programming language is low level when its programs require attention to the irrelevant.
Every methodology I’ve come across has, at its kernel, a very small section labelled «Do magic here».
The Law of Software Envelopment: Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. Code for readability.
Computers are about making life easier in much the same way that the Republican party is about fiscal responsibility and a culture of life.
Management is doing a thing right; leadership is doing the right things.
Adding manpower to a late software project makes it later.
Software obeys the law of gaseous expansion — it continues to grow until memory is completely filled.
If Microsoft had developed Internet, we could not ever see the source code of web pages. HTML might be a compiled language then.
The use of COBOL cripples the mind; its teaching should therefore be regarded as a criminal offense.
Computers are good at following instructions, but not at reading your mind.
If you think it’s simple, then you have misunderstood the problem.
Such is modern computing: everything simple is made too complicated because it’s easy to fiddle with; everything complicated stays complicated because it’s hard to fix.
Sometimes it pays to stay in bed on Monday, rather than spending the rest of the week debugging Monday’s code.
An organisation that treats its programmers as morons will soon have programmers that are willing and able to act like morons only.
The latest new features in C++ are designed to fix the previously new features in C++.
Once a new technology starts rolling, if you’re not part of the steamroller, you’re part of the road.
Real programmers don’t comment their code. If it was hard to write, it should be hard to understand.
What can be asserted without evidence, can be dismissed without evidence.
There are no unitary tests in our project because we don’t do mistakes here.
I have not failed. I’ve just found 10,000 ways that won’t work.
With sufficient thrust, pigs fly just fine. However, this is not necessarily a good idea. It is hard to be sure where they are going to land, and it could be dangerous sitting under them as they fly overhead.
A notation is important for what it leaves out.
OAuth is the best that the wrong way of doing things can provide.
What is the difference between an object methodologist and a terrorist? You can negotiate with the terrorist.
Object-oriented design is the roman numerals of computing.
I invented the term «Object-Oriented», and I can tell you I did not have C++ in mind.
Object-oriented programming is to writing a program, what going through airport security is to flying.
If it works, it’s obsolete.
Any given program, when running, is obsolete.
Entia non sunt multiplicanda praeter necessitatem.
Old programs read like quiet conversations between a well-spoken research worker and a well-studied mechanical colleague, not as a debate with a compiler. Who’d have guessed sophistication bought such noise?
Old computers go into museums, but old software goes into production every night.
Any non-trivial program contains at least one bug.
A specification that will not fit on one page of 8.5x11 inch paper cannot be understood.
Unix has retarded OS research by 10 years and Linux has retarded it by 20.
Refactoring is something that {should} be done opportunistically, as a regular part of your programming work.
You’re bound to be unhappy if you optimize everything.
As a programmer, it is your job to put yourself out of business. What you do today can be automated tomorrow.
Trying to outsmart a compiler defeats much of the purpose of using one.
The most often-overlooked risk in software engineering is: incompetent programmers. […] One bad programmer can easily create two new jobs a year. Hiring more bad programmers will just increase our perceived need for them. If we had more good programmers, and could easily identify them, we would need fewer, not more.
In the one and only true way, the object-oriented version of «Spaghetti code» is, of course, «Lasagna code» (too many layers).
The best is the enemy of the good.
Perl – The only language that looks the same before and after RSA encryption.
It’s not that Perl programmers are idiots, it’s that the language rewards idiotic behavior in a way that no other language or tool has ever done.
We have persistent objects, they’re called files.
PHP is a minor evil, perpetrated and created by incompetent amateurs; whereas Perl is a great and insidious evil, perpetrated by skilled but perverted professionals.
PHP is the Sarah Palin of programming languages.
π seconds is a nanocentury.
Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary.
Plan 9 looks like it was written by experts; Linux looks like something my students could aspire to write.
I have always found that plans are useless, but planning is indispensable.
A program is portable to the extent that it can be easily moved to a new computing environment with much less effort than would be required to write it afresh.
C combines the power of assembly language with the flexibility of assembly language.
The effective exploitation of his powers of abstraction must be regarded as one of the most vital activities of a competent programmer.
A programmer walks to the butcher shop and buys a kilo of meat. An hour later, he comes back upset that the butcher shortchanged him by 24 grams.
Prediction is very difficult, especially about the future.
Premature optimization is the root of all evil.
Mostly, when you see programmers, they aren’t doing anything. One of the attractive things about programmers is that you cannot tell whether or not they are working simply by looking at them. Very often they’re sitting there seemingly drinking coffee and gossiping, or just staring into space. What the programmer is trying to do is get a handle on all the individual and unrelated ideas that are scampering around in his head.
As soon as we started programming, we found to our surprise that it wasn’t as easy to get programs right as we had thought. Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs.
A program is like a poem: you cannot write a poem without writing it. Yet people talk about programming as if it were a production process and measure «programmer productivity» in terms of «number of lines of code produced». In so doing, they book that number on the wrong side of the ledger: We should always refer to «the number of lines of code spent».
Programming graphics in X is like finding the square root of PI using Roman numerals.
Programming is hard, let’s go shopping.
There are only two kinds of programming languages: those people always bitch about and those nobody uses.
A lot of programming questions are always asked because the programmer has reached the end of a twisty maze of his own creation. Turn around, walk, spin around, and try again. You’ll find a better solution.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to build bigger and better idiots. So far, the universe is winning.
Life is too short to run proprietary software.
Everyday life is like programming, I guess. If you love something you can put beauty into it.
Python’s a drop-in replacement for BASIC in the sense that Optimus Prime is a drop-in replacement for a truck.
If C++ is the answer, what the fuck was the question???
C is quirky, flawed, and an enormous success.
In order to define recursion, we must first define recursion.
Some people, when confronted with a problem, think: «I know, I’ll use regular expressions». Now they have two problems.
The good thing about reinventing the wheel is that you can get a round one.
Why don’t you guys get to work coding while we work on the requirements?
If you’re willing to restrict the flexibility of your approach, you can almost always do something better.
Before software can be reusable it first has to be usable.
Ruby is Perl on LSD.
In non-I/O-bound programs, less than 4% of a program generally accounts for more than half of its running time.
Given the options: «Scope», «Time» and «Cost», pick any two.
Security is a state of mind.
Programming is not a zero-sum game. Teaching something to a fellow programmer doesn’t take it away from you. I’m happy to share what I can, because I’m in it for the love of programming. The Ferraris are just gravy, honest!
Talk is cheap. Show me the code.
Simplicity is hard to build, easy to use, and hard to charge for. Complexity is easy to build, hard to use, and easy to charge for.
Simplicity carried to the extreme becomes elegance.
The unavoidable price of reliability is simplicity.
Simplicity is prerequisite for reliability.
Simplicity is the ultimate sophistication.
Complexity has nothing to do with intelligence, simplicity does.
Simplicity — the art of maximizing the amount of work not done — is essential.
While intelligent people can often simplify the complex, a fool is more likely to complicate the simple.
The ability to simplify means to eliminate the unnecessary so that the necessary may speak.
Programs, like ships, sink in the C.
No matter how slow you are writing clean code, you will always be slower if you make a mess.
Software gets slower faster than hardware gets faster.
The beauty of small and simple code is that you can bend or break the rules as long it stays small and simple.
We should forget about small efficiencies, say about 97% of the time.
So-called «smart» software usually is the worst you can imagine.
What society overwhelmingly asks for is snake oil. Of course, the snake oil has the most impressive names — otherwise you would be selling nothing — like «Structured Analysis and Design», «Software Engineering», «Maturity Models», «Management Information Systems», «Integrated Project Support Environments» «Object Orientation» and «Business Process Re-engineering» (the latter three being known as IPSE, OO and BPR, respectively).
My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn’t resist the temptation to put in a null reference, simply because it was so easy to implement.
If McDonald’s were run like a software company, one out of every hundred Big Macs would give you food poisoning, and the response would be «We’re sorry, here’s a coupon for two more».
If carpenters built houses the way programmers build programs, the next wind to come along would destroy civilization.
Software is like entropy. It is difficult to grasp, weighs nothing, and obeys the second law of thermodynamics; i.e. it always increases.
The most amazing achievement of the computer software industry is its continuing cancellation of the steady and staggering gains made by the computer hardware industry.
If you want to win in a software business, just take on the hardest problem you can find, use the most powerful language you can get, and wait for your competitors’ pointy-haired bosses to revert to the mean.
There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.
The most important single aspect of software development is to be clear about what you are trying to build.
Software efficiency halves every 18 months, compensating Moore’s Law.
Trying to improve software quality by increasing the amount of testing is like trying to lose weight by weighing yourself more often.
Software sucks because users demand it to.
All software sucks, be it open-source or proprietary. The only question is what can be done with particular instance of suckage, and that’s where having the source matters.
Most software today is very much like an Egyptian pyramid with millions of bricks piled on top of each other, with no structural integrity, but just done by brute force and thousands of slaves.
First, solve the problem. Then, write the code.
When you want to do something differently from the rest of the world, it’s a good idea to look into whether the rest of the world knows something you don’t.
Given the options: «Fast», «Efficient» and «Stable», pick any two.
Given the options: «Fast», «Good» and «Cheap», pick any two.
If it doesn’t work, it doesn’t matter how fast it doesn’t work.
Most XML I’ve seen makes me think I’m dyslexic. It also looks constipated, and two health problems in one standard is just too much.
The nice thing about standards is that you have so many to choose from.
Just because the standard provides a cliff in front of you, you are not necessarily required to jump off it.
In the same world where Vomit-Making System is elegant, SGI «designs» are and NT is The Wave Of Future™. Pardon me, but I’ll stay in our universe and away from the drugs of such power.
The standard rule is, when you’re in a hole, stop digging. That seems not to apply to software nowadays.
Success is failure in progress.
But in our enthusiasm, we could not resist a radical overhaul of the system, in which all of its major weaknesses have been exposed, analyzed, and replaced with new weaknesses.
If you want a product with certain characteristics, you must ensure that the team has those characteristics before the product’s development.
A user interface should be so simple that a beginner in an emergency can understand it within ten seconds.
Would you rather Test-First or Debug-Later?
Testing? What’s that? If it compiles, it is good. If it boots up, it is perfect.
Program testing can be a very effective way to show the presence of bugs, but is hopelessly inadequate for showing their absence.
That brain of mine is something more than merely mortal; as time will show.
Programming is 10% science, 20% ingenuity, and 70% getting the ingenuity to work with the science.
The best code is no code at all.
The cheapest, fastest, and most reliable components are those that aren’t there.
The X server has to be the biggest program I’ve ever seen that doesn’t do anything for you.
The common language of programmers is Profanity.
It is not that uncommon for the cost of an abstraction to outweigh the benefit it delivers. Kill one today!
If we’d asked the customers what they wanted, they would have said «faster horses».
UNIX was not designed to stop its users from doing stupid things, as that would also stop them from doing clever things.
You want to make your way in the Computer Science field? Simple. Calculate rough time of amnesia (hell, 10 years is plenty, probably 10 months is plenty), go to the dusty archives, dig out something fun, and go for it. It’s worked for many people, and it can work for you.
The Eight Fallacies of Distributed Computing:
The essence of XML is this: the problem it solves is not hard, and it does not solve the problem well.
The factory of the future will have only two employees: a man and a dog. The man will be there to feed the dog. The dog will be there to keep the man from touching the equipment.
In programming, the hard part isn’t solving problems, but deciding what problems to solve.
The key to performance is elegance, not battalions of special cases.
In software, the most beautiful code, the most beautiful functions, and the most beautiful programs are sometimes not there at all.
Computer programs are the most complex things that humans make.
Have you heard about the new super computer? It’s so fast, it executes an infinite loop in 6 seconds.
The object-oriented model makes it easy to build up programs by accretion. What this often means, in practice, is that it provides a structured way to write spaghetti code.
Every programming language has an optimization operator. In C++ that operator is: //
.
I am rarely happier than when spending an entire day programming my computer to perform automatically a task that would otherwise take me a good ten seconds to do by hand.
The proper use of comments is to compensate for our failure to express ourself in code.
The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.
The purpose of computing is insight, not numbers.
The purpose of software engineering is to control complexity, not to create it.
Beware of «the real world». A speaker’s appeal to it is always an invitation not to challenge his tacit assumptions.
On two occasions I have been asked by members of Parliament: «Pray, Mr. Babbage, if you put into the machine wrong figures, will the right answers come out?». I am not able rightly to apprehend the kind of confusion of ideas that could provoke such a question.
If you’ve chosen the right data structures and organized things well, the algorithms will almost always be self-evident.
It is better to do the right problem the wrong way than the wrong problem the right way.
There are three kinds of lies: lies, damned lies and benchmarks.
The value of a program is proportional to the weight of its output.
Theory and practice sometimes clash. And when that happens, theory loses. Every single time.
Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: nothing works and they don’t know why.
Sometimes, things that should work, don’t. That’s worrying. Sometimes things that shouldn’t work, do. That’s worringer.
The question of whether a computer can think is no more interesting than the question of whether a submarine can swim.
Threads and signals are a platform-dependant trail of misery, despair, horror and madness.
The three most dangerous things in the world are: a programmer with a soldering iron, a hardware engineer with a software patch, and a user with an idea.
One of my most productive days was throwing away 1000 lines of code.
I’m confident that tomorrow’s Unix will look like today’s Unix, only cruftier.
So much complexity in software comes from trying to make one thing do two things.
C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, it blows away your whole leg.
You can never train a programmer, you may discover one.
Forgive him, for he believes that the customs of his tribe are the laws of nature!
True glory consists in doing what deserves to be written; in writing what deserves to be read.
You can’t trust code that you did not totally create yourself.
Don’t tune for speed until you’ve measured, and even then don’t unless one part of the code overwhelms the rest.
Beware of the Turing tar-pit in which everything is possible but nothing of interest is easy.
A program that produces incorrect results twice as fast is infinitely slower.
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you’re as clever as you can be when you write it, how will you ever debug it?
There are only two hard things in Computer Science: cache invalidation and naming things.
When there is no type hierarchy, you don’t have to manage the type hierarchy.
If we wanted you to understand it, we wouldn’t call it code.
Programmers won’t tell you that they don’t understand the specification; they will happily invent their way through the gaps and obscurities.
Undetectable errors are infinite in variety, in contrast to detectable errors, which by definition are limited.
Unformed people delight in the gaudy and in novelty. Cooked people delight in the ordinary.
Unix is user-friendly. It’s just particular who its friends are.
Not only is UNIX dead, it’s starting to smell really bad.
Unix is simple. It just takes a genius to understand its simplicity.
Unix is a junk OS designed by a committee of PhDs.
A good programmer would rather leave a problem temporarily unsolved than solve it poorly.
Written code is buggy code, unwritten code might be bug-free code.
If a program is useful, it will have to be changed.
If a program is useless, it will have to be documented.
Microsoft’s biggest and most dangerous contribution to the software industry may be the degree to which it has lowered user expectations.
Programmers think they all suck; Prostitutes also think they all suck. And both are right: they all suck. The big difference is that prostitutes got the term «user-friendly» right.
This «users are idiots, and are confused by functionality» mentality of Gnome is a disease. If you think your users are idiots, only idiots will use it.
Just because they are called «users» it doesn’t mean they are on drugs… although it would make more sense if they were.
Do I really want to be using Haskell, a language where memoize
is a PhD-level topic?
Vacuumware: n, software which was written specifically to fill a void in the industry, especially software which is successful more due to how well it fills that void than due to anything else, like usability or utility.
XML is like violence: if it doesn’t solve your problem, you aren’t using enough of it.
Software wears out softly, software development wears out the developers really hard.
Computers are like air conditioners: they stop working as soon as you open Windows.
More good code has been written in languages denounced as bad than in languages proclaimed wonderful – much more.
I object to doing things that computers can do.
Work expands so as to fill the time available for its completion.
As a rule, software systems do not work well until they have been used, and have failed repeatedly, in real applications.
Rules allow people to write code without thinking. When you don’t think, you get bloated code that just concatenates stupid patterns. People stop thinking and questioning; then it’s just worshipping some rules without any purporse.
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
Write your code like you will have to debug it when you are low on sleep, drunk, or hungover — because you probably will.
As soon as you comment your code, it is out of date and wrong.
Sometimes when you fill a vacuum, it still sucks.
If the designers of X-Windows built cars, there would be no fewer than five steering wheels hidden about the cockpit, none of which followed the same principles – but you’d be able to shift gears with your car stereo. Useful feature that.
Nobody who uses XML knows what they are doing.
When someone says: «I want a programming language in which I need only say what I wish done», give him a lollipop.