Title says it all... Mine is "Never stop learning"... :)
"Don't be a language snob. Use whatever works or whatever your customer wants and is willing to pay for."
Nothing is complicated!
Complicated = a bunch of simple things mixed together.
Break it down.
Then make it simple.
This goes with steve.off.myopenid.com's answer.
KISS, Refactoring, Redesign if needed, Create test cases and when another problem appears add it to your test cases, Ask a friend when you're in trouble.
Communication has no.1 importance in a big project and not only.
"If you need a motto, you're doing it wrong."
Not a dig at the person who posed the question on here, it was asked offline at my old work place a while ago and with the suggestion that "all good developers have a motto" I replied with the above. Good developers tend to have sound-bites that are bandied around, as they tend to be good at being succinct. I tend to avoid mottos.
This has made me program crazy stuff for it's, well, crazy and fun.
Like the Jupiter ACE emulator in 3D or a dancing Steve Jobs in iTunes or a 3D modeling app for the Palm
I also have another one:
"If you want something done you'll have to do it yourself"
My job is not to program. My job is to provide business value. I happen to do that by programming sometimes. More frequently, I do it by not programming.
when writing software, imagine that the person who has to maintain it is a violent psychopath who knows your address.
Keep everything clear, obvious and as self-documenting as possible.
"Code as if somebody else needs to understand your code."
and
"Do no evil!"
Programming is like sex. One mistake and you have to support it the rest of your life.
- If software design were as visible as a bridge or house, we would be hiding our heads in shame.
- The code is important. The braces are syntactical sugar.
- Beginning coders comment nothing; Novice coders comment the obvious; Experienced coders comment the reason of code; Master coders comment the reason for the code not used.
- The only thing harder than trying to design software is trying to design software as a team.
- I need this baby in a month - send me nine women.
When you're green you're growing, when you're ripe you rot!
The requirements are going to change in a month. I might have to make the change.
Write so I can understand it in a month.
"Why?"
While I'm mostly a BA these days I think it holds equally well in either role.
First learn to solve problems then, if you must, learn to write code.
I've always thought of Soichiro Honda's quote "Success is 99% Failure" to be a good one.
The Zen of Python has a lot of ideas I really like too.
From Terry Pratchett, natch:
Cuius testiculos habes, habeas cardeo et cerebellum
A test that succeeds when it is intended to fail is far more worrisome than when it is intended to succeed.
A good programmer always looks both ways before crossing a one-way street.
Do your best to get it done on time, but doing it the right way is more important.
"Be Prepared!" Anything can happen when you program executes, sanity check all user input.
If it's stupid and it works, it's not stupid.
Programming is art, not mathematics.
"Nothing is impossible in software."
It's helped me think around some stubborn problems and inital thoughts of "it can't be done", "it's impossible", etc.
Never solve hard problems.
Divide hard problems into simple ones, and solve those.
"If you didn't learn anything today, you weren't paying attention!"
Slow down, get it in writing, and it's never too late to test one more time.
To serve and to protect.
also:
If I'm not making mistakes, then I'm not trying hard enough.
"Good code reads like documentation". From the Agile Manifesto, I think.
Make it run, make it right, make it fast. My dad told me this the first day I started programming. I still have to remind myself sometimes. Make it run, because it's too easy to take counsel of your fears and spin off into AbstractDesignLand. Make it right, because there lies the joy of software. Make it fast so people can use it, but don't make any performance-related decision until you have solid evidence.
"No coffee, No workee"
"If you can't understand the code, you probably shouldn't be modifying it."
"It compiles. Ship it."
"Software should meet the user on their terms, not the other way around."
And my favorite for making big, technical decisions... "What could possibly go wrong?"
There has to be a better way to do this...
Most normally followed by... No whammies... no whammies... no whammies... COMPILED!
Comment why the code is there. Indent properly and consistently. Follow naming conventions. Don't write the same thing more then once. Have a sandwich.
Don't fit the problem to technology, find the proper technology to solve the problem.
"Any sufficiently advanced technology is indistinguishable from magic." -Arthur C. Clarke
Don't keep zombies in your backyard. You never know when they'll come to get you.
When you know something is not right, fix it asap.
CASE: Copy And Save Everything
or, in modern business-speak:
Don't reinvent the wheel.
Adapt to change.
Whether its features, pace of technology, toolsets, etc....how are you at Adapting?
"What do you mean user acceptance tests? Is my precious work going to be ravaged by a bunch of careless users?!?"
;-)
I am a good cook, I am a fantastic eater. -Stephen Brust
I apply this philosophy to all things in life, not just food.
My job is to solve problems, usually with computers, usually with code.
Depnds on the day :
Good Day = Truism : "Single Stepping your code is the ONLY way"
Bady Day = Sarcasim : "What could possibly go wrong?
The motto I have on the wall next to me is:
Keep It Simple Stupid
That way I never forget it.
“A designer knows he has achieved perfection not when there is nothing left to add, but when there is nothing left to take away.” —Antoine De Saint-Exupery
I have a few...
Don't do anything a machine could be doing.
With a PC, the easy things are easy, but the hard things are impossible. With UNIX, the easy things are hard, but all things are possible. -- I don't remember the source... Schwartz maybe?
Just say NO to a pretty GIU.
Driving a mouse is about like driving a truck. When I drive a keyboard, I'm driving fleets of trucks.
A new computer is a hundred times cheaper than a new employee, and the computer works around the clock.
My motto is: Script it and go to sleep.
In other words, don't waste your time doing routine menial tasks (like renaming individual files in a directory) when you can automate the process and be more efficient.
As a corollary, I do like "keep it simple, stupid". Engineers and Programmers seem to take pride in over-complicating solutions.
In the words of Mad-Eye Moody, "Constant Vigilance". You always need to stay on top of your game.
"Rule Four: You can accomplish more with robots than you can with stress."
"Keep it simple stupid"
"Treat everything in life like a challenge"
"Master one thing. Learn as much as possible about everything else"
"Have fun"
Although I think this from the favorite quotes question might be a little more fitting.
"It's morning already?"
Keep It Simple Stupid, there's a quote that springs to mind when someone's getting all "clever" about their implementation of a feature, to paraphrase:
Debugging code is twice as hard as writing that code in the first place so if you're writing code approaching your technical limits then you're already too stupid to debug it.
Now I don't completely agree with that (as you can learn while you're debugging and thus improve to the level where you're ok) but it's always struck a chord with me.
"Bloody instructions which being taught return to plague their inventors" -- Machbet
"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." - Albert Einstein
"If you were accused of being a developer...would there be enough evidence to convict?"
Everything should be as simple as possible - but no simpler. -- Albert Einstein
assert(ItWorks != ItIsCorrect); # Ever
and
If you tell lies to your computer, years later, long after you've forgotten, it will tell tham back to you. So, never tell lies to your computer.
"As simple as possible, but no simpler" -- Einstein (?) via Scott Myers
Nothing is impossible - it just needs more time to implement.
A programmer is just a programmer. A developer should get one and stick to designing.
It is by caffeine alone I set my mind in motion. It is by the bean of java that thoughts acquire speed, the hands acquire shaking, the shaking becomes a warning. It is by caffeine alone I set my mind in motion.
(from "Dune", via the Scary Devil Monastery)
I love the DRY motto: "Don't Repeat Yourself". It drives me to constantly refactor my code which ends up making things simpler and more readable. The best code patches are ones that remove code.
Use the correct language to solve the problem.
Leave the code cleaner than when I found it.
Mine is also a life motto and is actually tattooed on my arm :)
"Aut viam inveniam aut faciam" - I will either find a way or I will make one.
My place of work's motto
"We don't have time to do it right, but we have time to do it over"
"If Brute Force isn't working for you, you aren't using enough of it!"
From the Tao of Programming:
A program should follow the `Law of Least Astonishment'. What is this law? It is simply that the program should always respond to the user in the way that astonishes him least.
If I can't explain it to an 8 year old, don't code it yet.
Not all problems are worth solving. Here's my estimate for that database app.....
And
If it's not in the spec, it's going to cost you extra, and it's going to be done later.
Or, as a friend of mine used to say,
"Okay, we can do that. What DON'T you want done?"
It'll take two more weeks.
Just kidding. I'd guess I'd have to go with:
Be reliable.
Any technology, no matter how primitive, is magic to those who don't understand it.
Walking on water and developing software from a specification are easy if both are frozen. - Edward V Berard
"Plan to throw one away, you will anyhow." - Fred Brooks
"If you plan to throw one away, you will throw away two." - Craig Zerouni
If it doesn't work in the lab, it won't work in the field. If it doesn't work in the field, it doesn't work.
The path to becoming a good programmer is paved with bad scripts.
When i program for myself, it is:
"You are not a team of 50 people, so stop planning big advanced applications"
I like the philosophy of NetBSD:
Some systems seem to have the philosophy of "If it works, it's right". In that light NetBSD could be described as "It doesn't work unless it's right".
I just keep tryin' ta get a little better Said the little better than before
from Mr. Brownstone by Guns N' Roses
A good program is nothing but a theory of the world.
And there is no sense in letting a few ugly facts spoil a beautiful theory.
It's only impossible because nobody has done it yet. (Glynn Willet, ATX Inc)
There's always a solution.
Nothing's impossible, every challenge is achievable one way or another; it's just a case of persevering and being creative until you find the right way.
"Those who can code - Compile, Those who can't code - Error Check, Those who can't error check are inevitably your bosses"
But there’s no sense crying over every mistake.
You just keep on trying till you run out of cake.
A seated genious will always go less far away than a walking dumbass.
The IBM Polyanna Principle:
Machines should work; People should think.
"Experience is what You get, When you don't get what you want."
Commit early, commit often.
Also applies to designing, commenting, and testing.
Google knows everything. StackOverflow knows less, but it's better organized.
In response to all the "simple" responses:
"For every complex problem there is an answer that is clear, simple, and wrong." - H.L. Mencken
:)
Relentless Incrementalism, and maximum stability!
I never stop my relentless pursuit of incremental improvement and the pursuit of perfect algorithms and code. There is always room for improvement, for a new way of looking at things, and a better way to attack a problem. I do this all with a near paranoid focus on making sure the resulting code is unbreakable too (I actually believe in the concept of bug-free software).
Sure, I have some basic objects, methods, and techniques that have "risen to the top" now and remain proven, efficient, stable, and accurate. But, I try to never let myself consider anything to be immutable, and I let me mind constantly ponder potential improvements (speed, stability, etc), and test my ideas regularly. This leads to all sorts of great programs that are not only robust, but fast and bug-free.
- Fork
- Morph
(if !what_you_had_in_mind) GOTO 2
- It rings!
When in doubt - morph it more!
Morph it 'till it rings!
Well, I wanted to use something funnier and wittier, but here are two of the ones I find myself using fairly frequently:
The software architecture and platform isn't "done" until it can do everything it is conceivable and possible for it to perform within its domain through reconfiguration (obviously by these standards, I've never ACTUALLY completed a software platform or architecture :))
Don't be afraid to do it yourself
NOTHING is impossible. Its not rocket-science, nor is it brain-surgery. And, even if it was, there are developers for that stuff to - so the request isnt impossible.
A regex is the light at the end of a long, dimly lit tunnel. The light of an oncoming train, that is.
"Do the simplist thing that could possibly work." Too much time is lost coding overly complicated solutions to problems. Start with the simple, and then grow from there as needed.
"Experience is being able to say 'I think I've messed up like this before'"
Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
Abraham Lincoln
It's often better to solve the general class of problems of which the problem before you is merely a specific case.
"I can make it do anything you want, provided you give me enough time and money."
As a consultant, that's my standard answer to clients asking "can you write a program that does this?"
I actually have those two sentences as background on my dev machine:
"Does that make sense to people?" and "If it ain't broke, you're not trying hard enough"
The first step to becoming a good programmer is to admit that you're not.
Write code as if you will never touch it again.
That means, do it right the first time. Do not bank on being able to go back later and fix it up.
As a passionate pragmatist:
Figure out the least number of steps you think are needed, then get out Occams Razor and start shaving
"Designing computer software today is a race between software engineers trying to build better, idiot-proof programs, and the Universe trying to build better idiots. So far the Universe is winning."
Can't remember the author's name; feel free to me edit me if you do. (Originally saw it as a user signature on a technical forum. It's from a rather well known technical author, a Mr Grant, maybe, if I remember right.)
I wanna change the world, but they won't give me the source code.
"Expect the unexpected" and "Trust no one" (from users, library functions, etc.)
I have several
1 - Reinventing the wheel is boring - and who wants an oval wheel that falls off every few minutes? Someone else has done this before.
2 - Make something work now, make it work better, later.
3 - Let's just do some Googling...
For me it's more like "Never give up" - I guess that's what happens when you're exposed daily to Coding Horrors and somehow you have to turn that into a nice application.
"Listen to your fear."
One of the hardest lessons I've had to learn is that if there's something I'm avoiding looking at, or something I'm half-afraid to look at, then that's almost certainly the part that is misdesigned, miscoded, or most likely to require changes later on.
In this case fear isn't the mind-killer. It's more like the smoke alarm.
The end user doesn't know what they want and the managers are even worse. Just implement and iterate.
Meetings with people who aren't developers are seldom useful, but it does get me out the office
Before I push open the office main door, I tell myself:
I am not here for money. I am here to learn something new ..
It has kept my little candle burning inside me..
Cheap and cheerful. Credit to Dan for introducing me to the phrase.
Red / Green / Refactor
It is to the point where I have nightmares about Christmas trees pruning themselves. It is for more than just TDD, now!
I don't really understand anything that I haven't built myself. I may think I do, but I don't. At best, I have a superficial familiarity with it, but I don't really understand it like I would if I had built it myself. (That's not to say that I should build everything myself; just that I shouldn't be deceived into thinking that I have mastered anything that I haven't built myself.)
By the same token, I am forced to admit, on a daily basis, that I am nowhere anywhere near as smart as I may think I am or wish that I was. Reflecting upon my own handiwork is a gentle reminder that I am capable of acts of overwhelming stupidity, astonishing hubris, and a mind-boggling propensity to repeat the mistakes of the past.
This is more of an Anti-Motto, but its a quote that always reminds me that making the code concise is what I should be striving for.
I have made this letter longer than usual, only because I have not had
the time to make it shorter.
-Blaise Pascal
If you don't have time to do it right, how come you have time to do it twice?
"It's not about the tools" and "a buggy product today is better than an Apple product tomorrow".
As long as I ease the job for the user, I don't care how much I have to do.
"I have not failed. I've just found 10,000 ways that won't work."
Thomas A. Edison (1847 - 1931), (attributed)
"Serving simple solutions to perplexing problems, perpetually."
That's my motto at the moment, it may get refactored sometime...
"Some hours of trial and error can save you minutes of reading manuals" :-D
This one's more methodological than a general motto, but here goes:
- The first copypaste is OK, as long as you know what you're doing.
- The second means a refactor is due.
- The third means you're doing it wrong.
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
[From The Wizardry Cursed by Rick Cook]
- There's no such term in programming as "impossible".
- Everything is possible!
It just takes too long or too costly to produce.
why deallocate when you have have it live forever!!! (just kidding)
my real one:
Simple is better!
Mine would be: Just do it, whatever it is!
P.S. This is actually a line from my personal guidance book for programmers. I haven't made the book public.
"If your code isn't elegant you haven't reached the right abstraction level yet."
Mine is not as funny...
Do it once, done it for all.
I'm a believer in reusability and think software developers are innovator and not programming monkeys.
(said when I forget to upload updates)
"It must be cached in your browser"
"It depends."
That's the answer to all good software engineering questions, really.
To be a good software engineer, you should know on what it depends, and why.
If you are going to be a wall blocking my way, I'll drill a hole in you and blow you apart anytime! I am a paragon of masculinity. Go beyond the impossible and kick reason to the curb! Who the hell do you think I am!?
"Brevity is the soul of wit, not of reliable implementations."
I don't know how many times I've heard the "it's only 3 lines of code" argument to present a solution. And every time, 3 lines were not enough, or took days to write. Now, when someone tells me about their fabled "3 line function", and that it's actually running in a piece of software I have to maintain, I recoil in fear automatically, it's become a damn reflex.
AND, in reply to another response:
"My job IS to program, that is, to be on the receiving end of a problem, and solve it, programmatically or sometimes otherwise. To be a programmer is to be a problem solver. The marketing department can package that problem solving as a product and that will provide business value."
Any 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.
- John Dryden
Release the code - Heghlu'meH QaQ jajvam
Klingon speak for - Today is a good day to die
Best regards, Tom.
Who needs unit tests when you've got BDD (breakpoint driven development)
For this I stand with the viewpoint of Einstein :
"Everything should be made
as Simple as possible,
but not simpler."
And attitude level - "Right Guy for the Right Job"
Write it like I'm going to have to physically perform everything it does every time it does it down the road.
This is more of a troubleshooting motto than a programming motto, but I like it.
"Quit thinking and look!" -David Agans in "Debugging"
Further clarification from the same book...
"You can think up thousands of causes of the failure, but you can see only the actual cause."
You shouldn't ask "whether" something needs or should be done. You should ask "What are you willing to give up to get it?"
Meta: Everything should be made as simple as possible, but no simpler. -Einstein
Implementation: Remove pieces (features, design elements, etc) until it breaks.
Anything is possible.
As programmers, we have the power to do magic within the universe of the computer. There are some rules, yes, but just about anything can be done. If someone tells you that what you want to do is impossible, then they're either wrong or lying.
I think that this applies especially in the field of language design.
When your product is 80% complete, that means you have another 80% to go.
If you are doing too much, stop and think. If you are thinking too much, stop and do.
Helps strike a balance between over/under planning
Not so much a motto as a way of thinking.
What Is A Computer?
A Computer Is A Big Box With A Little Man In It.
This Little Man Is "Myopic". He's So Myopic That He Can See Only One Instruction At A Time.
But This Man Is Fast. Blazing Fast And Getting Faster.
Also This Man Isn't Very Smart. He'll Attempt To Do Whatever You Tell Him To Do And Always In The Order That You Tell Him To Do It.
Nothing is too complex to solve with enough layers of abstraction and nothing is too simple to make too complex with enough layers of abstraction.
"we are all going to hell and I'm driving the bus".
Translation/explanation/how do I understand it: "enjoy your life/job to the fullest, learn from mistakes, fear nothing, and try have fun no matter what happens."
"You have to belive you're creating the best app, the best business, the best experience in the history of our industry.
Nothing Less".
Alex Hunter
"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil"
"You can save hours of planning by investing into weeks of coding first."
If the only tool you have is a hammer, everything looks like a nail.