Thoughts, words and philosophies

The following have either been said by me or about me, or are sentiments written by others which strike a chord within me. Some just tickle my funny-bone.

You cannot move mountains if you believe them to be mountains.
You must think of them as collections of small stones,
Which can be moved one at a time, and then reassembled.

-- The Tao of Meow

Nobody trips over mountains.
It is the small pebble that causes you to stumble.
Pass all the pebbles in your path
and you will find that you have crossed the mountain.

-- Traditional proverb

Do not follow where the path may lead.
Go instead where there is no path and leave a trail.

-- Muriel Strode

Your time is limited, so don't waste it living someone else's life.
Don't be trapped by dogma - which is living with the results of other people's thinking.
Don't let the noise of other's opinions drown out your own inner voice.
And most important, have the courage to follow your heart and intuition.
They somehow already know what you truly want to become.
Everything else is secondary.

-- Steve Jobs, June 12, 2005

The reasonable man adapts himself to the world.
The unreasonable one persists in trying to adapt the world to himself.
Therefore all progress depends on the unreasonable man.

-- George Bernard Shaw

Everything should be made as simple as possible, but not simpler.

-- Albert Einstein


-- Anon


-- P. Andrew Sandlin

There are 4 steps to becoming a competent programmer:-

  1. Write a program.
  2. Write a program that works.
  3. Write a program that works efficiently.
  4. Write a program that works efficiently and
    can be understood and maintained by anyone.

-- Tony Marston

There are two ways of constructing a software design:

  1. Make it so simple that there are obviously no deficiencies.
  2. Make it so complicated that there are no obvious deficiencies.

C.A.R. Hoare, The 1980 ACM Turing Award Lecture

Programs must be written for people to read,
and only incidentally for machines to execute.

-- Abelson and Sussman

Any fool can write code that a computer can understand.
Good programmers write code that humans can understand.

-- Martin Fowler

Any idiot can write complex code that only a genius can understand.
A true genius can write simple code that any idiot can understand.

-- Tony Marston

Simple, clear purpose and principles give rise to complex, intelligent behavior.
Complex rules and regulations give rise to simple, stupid behavior.

Dee W. Hock, "The Sheep's Second Law of the Universe"

Rules are written for those who lack the ability to truly reason,
But for those who can, rules become nothing more than guidelines,
And live their lives governed not by rules but by reason.

-- James McGuigan

Obeying rules without an understanding of the reasons behind them
creates an approximation of competence
which leaves one vulnerable to the exceptions.

-- Jeffery Veen, Web Essentials 2005

One man's meat is another man's poison.
One man's convention is another man's constriction.
One man's rule is another man's restriction.
One man's purity is another man's putrefaction.

-- Tony Marston

There are only three limiting factors in the career of a software engineer:

(a) The limitations of the hardware.
(b) The limitations of the software.
(c) The limitations of his own intellect.

It is impossible to produce a superior product by limiting oneself to the inferior intellect of others,
which is why I choose to ignore them at every possible opportunity.

-- Tony Marston

Premature optimization is the root of all evil (or at least most of it) in programming.

-- Donald Knuth

Java is sweeping across the world so that if you go to your boss and say,
"I think I'll write it in Java,"
then your boss will be very impressed and she won't tell you,
"Don't be silly; we don't program like that here."

-- Tim Berners-Lee, keynote at JavaOne, 1996

There are two basic approaches to software development:

  1. Rules oriented - where you follow a set of rules or a methodology religiously, to the letter and without question and just assume that the results, whatever they are, must be acceptable.
  2. Results oriented - where you aim to produce the best results in the shortest possible time and use whatever methodology or rule set that helps you achieve this aim.

One requires blind obedience, plus, from what I have seen on more than one occasion, an unerring ability to invent interpretations of those rules that are so obscure and perverse that they do nothing but increase complexity and decrease productivity.

The other requires intelligence and skill, the ability to know which rules and methods to adopt, when and how to adapt them to fit a particular purpose, and when to reject them in favour of something better.

-- Tony Marston

I know that perfection is impossible, but that doesn't stop me from trying to achieve it.
I strive to do the best that I can, and I am always looking for ways to improve.

Others seem to think that because perfection is impossible to achieve it is a waste of time trying.
They end up by doing just enough to get the job signed off,
and never seek to find a better or more efficient way.
That is why their work will always be mediocre and they will never improve.

-- Tony Marston

90% of the work takes 90% of the time.
The last 10% takes the other 90% of the time.

-- Anon

First they ignore you,
then they laugh at you,
then they fight you,
then you win.


If a job is worth doing, it is worth doing properly.
-- Anon

If you can't do a job properly, don't waste your time doing it.
-- Anon

There are two ways of doing a job - properly or not at all.
-- Anon

There are two ways of doing a job - the 'Tony Marston way' or the wrong way.
-- an admirer

Do you want it done your way, or do you want it done properly?
-- Tony Marston

Do you want ME to do it, or do you want it done YOUR way?
-- Tony Marston

Do you want me to work to the best of MY ability,
or do you want me to downgrade and work to the best of YOUR ability?

-- Tony Marston

You can't soar with Eagles when you work with Turkeys.

-- Anon

Some people know only what they have been taught,
while others know what they have learned.

-- Tony Marston

If I did things the same as you do then my results would be no better than yours,
and I am afraid that your best is just not good enough.
As the only way that I can be better is to do things differently
you should spend less time asking "Why are your methods different?"
and more time asking "Why are your results better?"

-- Tony Marston

When people call me arrogant and opinionated what they really mean is:

  1. I have an opinion which is different from theirs.
  2. I am not afraid to voice that opinion.
  3. I refuse to change that opinion and "fall into line".

Here are a few opinions (in no particular order) which you may or may not like:

  1. Object Oriented Programming can be EVIL - Part 1
  2. Object Oriented Programming can be EVIL - Part 2
  3. Technical Keys are EVIL (sometimes)
  4. Design Patterns are over hyped
  5. Design Patterns are dead! Long live Transaction Patterns!
  6. Object Oriented Programming for Heretics
  7. Development Standards can be EVIL
  8. Breaking Backwards Compatibility is EVIL
  9. Case Sensitive Software is EVIL
  10. Are you a Code Monkey?
  11. Software Patents are EVIL
  12. Stored Procedures are EVIL
  13. What is Object Oriented Programming (OOP)?
  14. Object Relational Mappers are EVIL
  15. Dependency Injection is Evil
  16. Not-so-SOLID OO Principles
  17. Not the three greatest paragraphs ever written on encapsulation
  18. Table Oriented Programming (TOP)
  19. 4+ Reasons Why All PHP Frameworks Suck - Except RADICORE
  20. A minimalist approach to Object Oriented Programming with PHP
  21. Let's Make It More Complicated Than It Really Is Just To Prove How Clever We Are
  22. Please do not break our language
  23. Your code is crap!
  24. Using object composition for "has-a" relationships is not such a good idea
  25. OO Design is incompatible with Database Design
  26. How NOT to Validate Data
  27. Object Oriented Database Programming
  28. On not using the "right" standards
  29. DB or not DB, that is the question
  30. What is the difference between Procedural and OO programming?
  31. The difference between an interface and an abstract class
  32. Is PHP too verbose?
  33. Echo chambers for outdated ideas
  34. Levels of use
  35. Singletons are NOT evil
  36. Having a separate class for each database table IS good OO
  37. Why I don't do Domain Driven Design
  38. The concept is OK but your implementation is not
  39. Your rules are RUBBISH!
  40. Re: Objects should be constructed in one go
  41. Re: What's so great about OOP?
  42. To There and Back - but still in the wrong place
  43. Re: Exceptions and talking back to the user
  44. Are you achieving the aims of OOP?
  45. Changing fundamental language behaviors
  46. Response to personal attack on
  47. RE: Improving PHP's Object Ergonomics
  48. Pop Quiz on OOP

-- Tony Marston

Some people tell me that I am not a team player.
That is only true when you are talking about teams of idiots.

-- Tony Marston

I did not train to be a proctologist, so why do you expect me to work with a***holes?
-- Tony Marston

Something that works cannot be wrong.
Something that does not work cannot be right.

-- Tony Marston

Innovate, don't imitate.
-- Anon

There are two ways of using technical primary keys:
(a) indiscriminately, (b) intelligently

To much of the former implies too little of the latter.

Just because the use of a technical primary key is the solution to a problem in SOME circumstances does not mean that it is a solution that can be applied in ALL circumstances. If there is no problem in the first place then implementing an unnecessary solution could actually create its own problem.

I have encountered several situations where the use of a technical key does in fact have a negative effect, which has led me to question the hypothesis that technical keys are always a "good thing". As it takes intelligence to weigh up the pros and cons of implementing a technical key in particular circumstances, those who employ technical keys indiscriminately are IMHO exhibiting a lack of intelligence.

-- Tony Marston

The Feynman problem solving algorithm:

  1. Write down the problem.
  2. Think real hard.
  3. Write down the solution.

In journalism, the 6 keys to the story are always
"who, what, when, where, why and how."

"How" is the only one that doesn't start with "w" so it always gets left out,
and is hard to explain in any case,
which explains why most people don't understand anything.

This creates the following types of people:

  • "who" people are busybodies.
  • "what" people are bosses.
  • "when" people are historians.
  • "where" people are geographers.
  • "why" people are whingers.
  • "how" people are the ones who get things done.

Those who cannot learn from history are doomed to repeat it.
-- George Santayana

A fool is one who repeats his own mistakes.
A wise man is one who learns from the mistakes of others.
-- Anon

Experience is not what you've done, but what you've learned from what you've done.
-- Anon

Q: What's the difference between Theory and Practice?
A: In theory there is no difference, but in practice there is.
-- Anon

To effectively apply practices, you need to understand the principle,
but to understand the principles, you need to practice!
-- The Agile Dilemma

I'd give my right arm to be ambidextrous.
-- Anon

As one door closes another one shuts.
-- Anon

If it wasn't for bad luck I wouldn't have any luck at all.
-- Anon

I'm not biased - I don't care who beats Arsenal.
-- Anon

I'm not biased - I hate everybody.
-- Anon

If God had wanted us to use the metric system he would have had 10 disciples.
-- Anon

If God had wanted Britain to be part of Europe he would not have invented the English Channel.
-- Anon

My nose is pink, not brown.
If you want part of my anatomy up your rear-end all I can offer is my foot!

-- Tony Marston

There are three kinds of people - those who can add up and those who can't.
-- Anon

There are 10 kinds of people - those who can understand binary and those who can't.
-- Anon

I have not failed. I've just found 10,000 ways that won't work.
-- Anon

There are 4 boxes to use in the defense of liberty:
(i) soap, (ii) ballot, (iii) jury, (iv) ammo.
Use in that order.
Starting now.
-- Anon

I woke up this morning feeling like a million dollars - all green and crinkley.
-- Anon

I woke up this morning feeling like a teenager - but where can you get one at 6 am?
-- Anon

Life is hard, then you die.
-- Anon

Life's a bitch, then you marry one.
-- Anon

I never realised what happiness was until I got married.
Then it was too late!
-- Anon

UNIX is a 4-letter word.

-- Tony Marston

Q: How many staff work here?
A: About half of them.
-- Anon

Bread is the staff of life, and the staff round here are one big loaf!
-- Anon

In the Beginning there was The Plan.
And then came the Assumptions.
And the Assumptions were without Form.
And the Plan was completely without Substance.
And The Darkness was upon the face of The Workers.
And they Spake among Themselves, Saying, "It is a Crock of Shit, And it Stinketh."
And The Workers went unto their Supervisors and Sayeth, "It is a Pail of Dung and none may Abide the Odor Thereof."
And the Supervisors went unto their Managers and Sayeth unto them, "It is a Container of Excrement and It is very strong, Such that None may Abide by It."
And the Managers went unto their Directors and Sayeth, "It is a Vessel of Fertilizer, and None may Abide Its Strength."
And the Directors spoke amongst Themselves, Saying One to Another, "It contains That Which Aids Plant Growth, and It is Very Strong."
And the Directors went unto the Vice Presidents and Sayeth unto Them, "It promotes Growth and is Very Powerful."
And the Vice Presidents went unto the President and Sayeth unto Him, "This New Plan will actively promote the Growth and Efficiency of This Company, and These Areas in Particular."
And The President looked upon The Plan And Saw that It Was Good.
And The Plan Became Policy.

This is how Shit Happens.

The evolution of "Company Policy"

Start with a cage containing five apes. In the cage, hang a banana on a string and put stairs under it. Before long, an ape will go up the stairs and start to climb towards the banana. As soon as he touches the stairs, spray all the apes with cold water.

After a while, another ape makes an attempt with the same result - all the apes are sprayed with cold water. Turn off the cold water.

If, later, another ape tries to climb the stairs, the other apes will try to prevent it even though no water sprays them. Now, remove one ape from the cage and replace it with a new one. The new ape sees the banana and wants to climb the stairs. To his horror, all of the apes attack him. After another attempt and attack, he knows that if he tries to climb the stairs, he will be assaulted.

Next, remove another of the original five apes and replace it with a new one.

The newcomer goes to the stairs and is attacked. The previous newcomer takes part in the punishment with enthusiasm.

Again, replace a third original ape with a new one. The new one makes it to the stairs and is attacked as well. Two of the four apes that beat him up have no idea why they were not permitted to climb the stairs, or why they are participating in the beating of the newest ape.

After replacing the fourth and fifth original apes, all the apes which have been sprayed with cold water have been replaced. Nevertheless, no ape ever again approaches the stairs.

Why not? "Because that's the way its always been around here."

Once upon a time, in a kingdom not far from here, a king summoned two of his advisors for a test. He showed them both a shiny metal box with two slots in the top, a control knob, and a lever. "What do you think this is?"

One advisor, an Electrical Engineer, answered first. "It is a toaster," he said. The king asked, "How would you design an embedded computer for it?" The advisor: "Using a four-bit microcontroller, I would write a simple program that reads the darkness knob and quantifies its position to one of 16 shades of darkness, from snow white to coal black. The program would use that darkness level as the index to a 16-element table of initial timer values. Then it would turn on the heating elements and start the timer with the initial value selected from the table. At the end of the time delay, it would turn off the heat and pop up the toast. Come back next week, and I'll show you a working prototype."

The second advisor, a IT consultant, immediately recognized the danger of such short-sighted thinking. He said, "Toasters don't just turn bread into toast, they are also used to warm frozen waffles. What you see before you is really a breakfast food cooker. As the subjects of your kingdom become more sophisticated, they will demand more capabilities. They will need a breakfast food cooker that can also cook sausage, fry bacon, and make scrambled eggs. A toaster that only makes toast will soon be obsolete. If we don't look to the future, we will have to completely redesign the toaster in just a few years."

"With this in mind, we can formulate a more intelligent solution to the problem. First, create a class of breakfast foods. Specialize this class into subclasses: grains, pork, and poultry. The specialization process should be repeated with grains divided into toast, muffins, pancakes, and waffles; pork divided into sausage, links, and bacon; and poultry divided into scrambled eggs, hard-boiled eggs, poached eggs, fried eggs, and various omelette classes."

"The ham and cheese omelette class is worth special attention because it must inherit characteristics from the pork, dairy, and poultry classes. Thus, we see that the problem cannot be properly solved without multiple inheritance. At run time, the program must create the proper object and send a message to the object that says, 'Cook yourself.' The semantics of this message depend, of course, on the kind of object, so they have a different meaning to a piece of toast than to scrambled eggs."

"Reviewing the process so far, we see that the analysis phase has revealed that the primary requirement is to cook any kind of breakfast food. In the design phase, we have discovered some derived requirements. Specifically, we need an object-oriented language with multiple inheritance. Of course, users don't want the eggs to get cold while the bacon is frying, so concurrent processing is required, too."

"We must not forget the user interface. The lever that lowers the food lacks versatility, and the darkness knob is confusing. Users won't buy the product unless it has a user-friendly, graphical interface. When the breakfast cooker is plugged in, users should see a cowboy boot on the screen. Users click on it, and the message 'Booting UNIX v.8.3' appears on the screen. (UNIX 8.3 should be out by the time the product gets to the market.) Users can pull down a menu and click on the foods they want to cook."

"Having made the wise decision of specifying the software first in the design phase, all that remains is to pick an adequate hardware platform for the implementation phase. An Intel Pentium with 48MB of memory, a 1.2GB hard disk, and a SVGA monitor should be sufficient. If you select a multitasking, object oriented language that supports multiple inheritance and has a built-in GUI, writing the program will be a snap."

The king wisely had the IT consultant beheaded, and they all lived happily ever after.

Tony Marston
21st May 2002