Gems from Computer Curmudgeon that I am typing in verbatim, as I really think these are some of the most interesting things I have read about the craft of programming in a very long time. Apologies to Guy Kawasaki, this may go past fair use on your copyright - I felt they were too wise to be left buried.

How to Program

Program freely

Have rollicking fun when you program. Program as if you were creating something for your friends. Make programming easy on and interesting to yourself, without fear of failure. Thumb your nose at the know-it-alls, critics, managers, and MBAs at least once a month and program freely.

Program recklessly

Ignore "market" requirements (the market usually doesn't know what it wants until it sees it). Go where no programmer has gone before. Add Excel, PageMaker, and RTF compatibility at the end. If ever. If you want. Make history, not compatibility. Your goal is to create software so great that customers are willing to rekey data, so tell the world to kiss your SCSI port and go for it.

Program for love

Programming is generosity. You can have an insight or know a truth about how a computer can do something. You want other people to share it. So you program. Put your love for people into your program. It will touch people, and all of you will be better for it. It may even sell - because people are willing to buy love on a disk (If you want to see love on a disk, look at HAM from Microseeds publishing. This little jewel allows you to customize the order of your Apple menu and it adds a folder to the Apple menu containing a directory of the items used recently. HAM shows some serious love of System 7 users.

Program honestly

Most software is dishonest. When you look at it, you can't believe that a programmer with a triple-digit IQ believes that this is the way things should work. Instead, the software is saying, "This isn't really what I think. The design specs said to do it this way." Or, "My boss saw John Sculley demo a HyperCard stack that has this kind of interface." Or, "My boss saw this feature in an Apple video." Be honest. And be accepted or rejected on what you really believe.

Program to infect

Great software leaps from a computer and infects people's brains. It makes their fingertips sizzle and mouse buttons palpitate. Infection happens immediately or it doesn't happen at all. It won't happen because people try-and-try to like a program or because a reviewer says it's good. As you program, keep the goal of infection in your mind.

Program for intrinsic rewards.

Programming yields two intrinsic rewards. First, programming helps you understand your feelings better. Nothing forces a person to understand himself better than trying to communicate his feelings. Second, programming increases creativity: the more you use your creative power, the more you will have (Don't you wish Powerbook batteries worked this way?) No matter how many copies of your program you sell, if you program for intrinsic rewards, you'll reap satisfaction.

Program in the present.

To borrow a Ueland[1] analogy, work like a child strings beads: one bead at a time, unconcerned about what the necklace might look like with different beads. Ignore the rumors you read in MacWEEK about DAL, RISC chips [Ed.: HA! RISC won!], and cross-platform compilers. Instead, do the best you can with the present. If you wait for the perfect platform and the perfect object-oriented compiler, you may never finish anything. Create a product so great that people won't care about upgrading to the latest gee-whiz-what-have-we-shipped-but-no-perfected technology.

Program anything you want.

Ueland quotes William Blake to illustrate this point: "Better to strangle an infant in its cradle than nurse unacted desires." Ignore the forecast about market size in the year 2000 and the competitive analysis of the viability of various platforms. Tackle anything that fascinates you: a product for NeXT, an Excel killer - even a Macintosh database program. If your company won't let you do this, then quit. Have you ever met anyone who regretted quitting a job?

Program microscopically.

Take a close look at the software you've created. Does it show a microscopic attention to detail? A fine eye? Empathy for the user? Forget "patentable, paradigm-shifting algorithms for the '90s" because great software come down to minute details. Get out your microscope and program software for mortals.

If you want to see programs not programmed microscopically, look at Microsoft Word or Aldus PageMaker. Don't you love dialog boxes that contain three pop-up menus and nine buttons (Save, Cancel, Apply, Set Default, Apply Set, Apply Default, Default Apply, Default Set, and Default Default) plus four buttons leading to additional dialogs?

These products were programmed with a telescope. It must have something to do with being from the Pacific Northwest. Maybe there are hooded owls living in Word and PageMaker, so it is against the law to cut down the number of dialog boxes.

Program when you are discouraged

Ueland quotes Van Gogh: "If you hear a voice within you saying: You are no painter, then paint by all means, lad, and that voice will be silenced, but only by working." No one- not Andy Hertzfeld, Bill Atkinson [2], Steve Capps [3], or Michael Jordan [23] - woke up one day and was great. They make it look easy because they've worked hard. Great programming is opening a vein and pouring blood onto a disk.

>>

Interface

That which justifies Apple's margins.

- From Computer Curmudgeon, page 144 - 147, 95, 1992

[1] http://en.wikipedia.org/wiki/Brenda_Ueland

[2] http://www.folklore.org/StoryView.py?story=Round_Rects_Are_E...

[3] http://www.folklore.org/StoryView.py?project=Macintosh&s...