tags:

views:

3128

answers:

77
+39  Q: 

Nuggets of wisdom?

There are many quotes from famous computer scientists that have become the wisdom that guides our profession. For example:

"Premature optimization is the root of all evil in programming."

  • Donald Knuth (citing Hoare's Dictum)

"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?"

  • Brian Kernighan

And so on. My question is, what are your favorite words of wisdom about programming from someone who is not famous? Was it a friend, a coworker, or a teacher, or a family member?

For example, a technical writer friend of mine said:

"You can't get the right answers unless you ask the right questions."


Thanks for all the contributions! The answer I selected was (a) specifically coding-related, and (b) stated by someone who is not technically famous (though he has a popular blog and a podcast and runs StackOverflow). I.e. he's no Bill Gates or Yogi Berra.

+3  A: 

http://www.google.com/search?hl=en&q=programming+quotes

And in honor of our fearless leader....

http://www.codinghorror.com/blog/archives/000855.html

Aaron Palmer
Mauricio Scheffer
It was simply a kind gesture, please don't read any more into it.
Aaron Palmer
Who's Jeff and Joel?
JasonMichael
+4  A: 

Programming is hard, let's go shopping!

+3  A: 

Bugs? My code doesn't have bugs. It has randomly generated, undocumented features!

Chris Boran
+47  A: 

To understand recursion, you must first understand recursion.

eviljack
Why the -1, it is a great quote. But you have to understand recursion to understand a joke about recursion.
Gamecat
This is not wisdom, it's a joke.
Paul Nathan
What paul said. :)
baash05
I voted +1 but removed it because it really is a joke not a quote, I think there is another question over there for this answer
victor hugo
To understand recursion, ask someone standing closer to Douglas Hofstadter than you.
jleedev
Google "recursion" and look at the spelling suggestion :-)
Cameron
+8  A: 

Can't remember where I heard it, must have been during some tech talk I've watched sometime before.

Regardless of how smart, creative, and innovative your organization is, there are more smart, creative, and innovative people outside your organization than inside.

Encourages open source work, peer review, reminds me not to try and reinvent the wheel.

Also:

Every single time I have been clever I have regretted it.

Can't remember who told this one either.

I GIVE TERRIBLE ADVICE
Bill Karwin
+3  A: 

Quidquid latine dictum sit, altum sonatur.

Javier
Lol, but so right!
Gamecat
"'Whatever is said in Latin sounds profound" for those too lazy to google it
Steven A. Lowe
Quando omni flunkus moritati.
plinth
Steven, that pretty much goes for any language you don't know. People like the unknown, the mysterious.
ldigas
+17  A: 

Always make sure the shower curtain is on the inside.

Steve B.
I think this is attributed to Conrad Hilton, speaking with Johnny Carson on "The Tonight Show."
Bill Karwin
+18  A: 

"The software will ship in July, we just don't know of what year."

Jim C
Heard a good on on possibly a scott hanselman podcast..."it will likely ship in a month that ends with ber...like March-ber"
esabine
+40  A: 

Never be afraid to say "I don't understand".

nzpcmad
+6  A: 

Another classic: "640K is Enough For Anyone".

Althought the quote is not verified, and probably wrong, it is a significant portion of computer science history.

Gamecat
Attributed to Bill Gates, but he has denied saying it.
Bill Karwin
Yup, hence the addition ;-).
Gamecat
+13  A: 

Some people, when confronted with a problem, think "I know, I’ll use regular expressions." Now they have two problems. --Jamie Zawinski

Ned Batchelder
Man, is it just me or is anyone else getting tired of people using this quote?
Simucal
To be honest, I've never much agreed with Jamie's sentiment: regexes are powerful tools, easily misused, but invaluable when used properly. It is a good quip though.
Ned Batchelder
Yea, I agree. Regex's have a bad rap imo. I don't know if it is due to its dense syntax or what.
Simucal
I'll never get tired of this quote.
Daud
The problem is not to the one knowing regexes, but recommending them to someone who doesn't know them as a solution to his problem.
peterchen
+3  A: 

An of course Murphy's law: "Anything that can go wrong, will go wrong at the worst possible moment."

Gamecat
Not to forget OToole's corollary - "Murphy was an optimist"
seanb
+33  A: 

Not directly development-related, but true all the same...

A computer lets you make more mistakes faster than any other invention in human history, with the possible exceptions of handguns and tequila.

ZombieSheep
Attributed to Mitch Ratcliffe. He may qualify as someone who is not famous, because his page on wikiquote.org has been deleted with reason of "not sufficiently notable."
Bill Karwin
+5  A: 

ILLEGITIMI NON CARBORUNDUM

Steven A. Lowe
Classic. My favourite one of the mock latins is "Carpe Canem".
Ali A
A: 

In order to understand recursion, you must first understand recursion.

Damn, beat to the punch, I should read these threads first.

FlySwat
please delete this mate... it's already there in the list as you found out :) ... that delete link that you have there... click on it! :)
balexandre
+3  A: 

Don't know whether it is not famous, but it is good advice anyway.

make it work, make it pretty, make it fast

EricBouwers
A colleague of mine put it, "make it work, make it *stable*, make it fast". Your definition of "work" may encompass stability, but I think many programmers could benefit from the explicit hint :)
Ian Mackinnon
+69  A: 

"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."

(Tom Cargill)

Because it is scarily true!

Ali A
180% development time!?
Mailslut
Yes Mailslut, that’s the joke.
Daniel Cassidy
+5  A: 

The much underrated:

"If you build it, they will come"

(Field of dreams?)

Ali A
Not at all valid for most Web 2.0 sites though (Cuil?)
FlySwat
Web 2.0 is contentless unless you have users. first you need content, then you get people who want it
Paul Nathan
Yeah, I find it works best in open source, when one person has a mission, and they build it.Definitely not suitable for web 2.0 rubbish.
Ali A
+42  A: 

I Believe Jeff Atwood said it

Code doesn't exist until it's checked into source control.

I've lost so much interesting software that I've written over the years simply because I never had a system of storing it. Over the last 2 years, I've made sure that just about every thing, including scripts that I've written, have been stored under source control.

Kibbee
Corrollary: code which only exists on your computer is no more real than code which only exists in your head.
JesperE
Oh yes... I learnt that the hard way. It was not my code that didn't exist, that's the bigger problem! :)
furtelwart
Nothing exists until it's backed up. Nothing's backed up until it's been shown it can be restored. (Data files are easy; systems and configuration are more difficult.)
David Thornley
+56  A: 

"Fast, good, cheap: pick any two."

plinth
I'm not sure if NASA originated this saying, but that's where I heard it first. A few years back they had a motto of "Faster, Better, Cheaper". Then they crashed 2 Mars probes, one because some numbnut forgot to convert from Metric to US units. After that they added the "Pick Two" part.
Clayton
I saw this long before NASA crashed anything into mars.
Robert Paulson
I've seen this parody: "Pick two: fast, good, cheap, Windows (counts as 2)"
Bruce Alderman
@aardvark: yawn
peterchen
+41  A: 

Another one of my favourites is from Larry Osterman:

One in a million is next Tuesday

Basically what he meant was computers operate at such high speeds, with so many people using one system, that even bugs that occur only once in a million, still come up quite frequently.

Kibbee
True. I tried to explain to a co-worker the other day that if a bad things happens once every billion instructions they theoretically happen ~16 times per second on a 4GHz quad-core machine...
Christoffer
+3  A: 

My bit o' wisdom would be this: Don't fix what ain't broke.

Paul Nathan
+26  A: 

I saw a quote on here about an app. "Software by Stephen King, Interface by Salvador Dali"

StingyJack
*chuckle* The software is a horror, the interface is surreal? >.>
Paul Nathan
I remember that one, someone on SO said that about the Harvest revision control system. Alas, my wife has to use Harvest at her work.
Bill Karwin
hey, i've been quoted, how cool is that! http://stackoverflow.com/questions/263273/what-is-the-most-poorly-named-application-out-there#263361
Steven A. Lowe
Steven I love that line. It really fits Clarity, too.
HLGEM
+1 for quoting a non-famous person (all due respect to Steven).
Bill Karwin
+6  A: 

I don't believe in documentation; if it was hard to write, it should be hard to read. Why do you think they call it "code"?

Adam Liss
Documentation is like sex. When it's good it's very very good ... and when it's bad, it's still better than nothing.
ldigas
I don't think the logic holds: it takes a lot of effort to make non-trivial code read easily.
Christian Vest Hansen
@idigas - what about when it's weird?
Jason
+2  A: 

A computer is like a sewer. What you get out of it depends on what you put into it. -- Paraphrased from Tom Lehrer

Adam Liss
+23  A: 

If you don't understand the problem you're trying to solve, writing more code will only make it worse.

Adam Liss
+12  A: 

A hard problem is seldom worth solving.

Meaning that if it seems hard you should spend time making it simple: either by understanding it better, by rephrasing it or by limiting (or extending) the scope.

+1  A: 

Here's something i came up with one day:

You can't have just madness, you have to have a method to the madness.

Jukebox
i feel like you might not have come up with this...
Jason
Well, i'm sure its possible that someone else has said it, but I am not aware of anyone who has :)
Jukebox
+2  A: 

IGNORANCE IS STRENGTH.

FREEDOM IS SLAVERY.

(Sadly, I've never seen WAR IS PEACE to apply particularly well in computing.)

Darius Bacon
for programming, this is actually all very true in my experience. great quotes!
Roland Bouman
+1: I agree with you, and I think that an explanation as to why this nugget applies to software development would make for a good blog post.
Jim G.
+12  A: 

Whenever someone says something like "in theory, this should work..." I sometimes reply with this:

In theory, theory and practice is the same.

I don't recall where it's from, or even if I made it up myself (in that case I probably wasn't the first to come up with it).

Christian Vest Hansen
That's usually attributed to Yogi Berra, and also to computer scientist Jan L. A. van de Snepscheut and scientist Albert Einstein. According to wikiquote.org.
Bill Karwin
I think the original goes: "In theory there is no difference between theory and practice. In practice there is a big difference.".
ldigas
The version I heard was "The difference between theory and practice is, in theory there is none and in practice there is."
GalacticCowboy
Considering the comments here, I think this is the sort of wisdom that many people come to realize in their own way, and describe with their own words. So there is no one original wording for this one.
Christian Vest Hansen
"In theory, everything works and nobody knows why. In practice, nothing works and everybody knows why. Here, we combine theory and practice: nothing works and nobody knows why." --anon
MSalters
In theory, communism works. In theory.
Konerak
If your theory is that misaligned with practice, you should formulate a new theory. That's how science works.
ninjalj
+1  A: 

Don't try to build multi-threaded application in the languages that aren't designed for it.

Kozyarchuk
+5  A: 

"i m the best programmer in the world."

zamfir
This is so obviously bull**** that i just laughed lol'ed and thereby disturbed the barbeque goin' on at the neighbors. only the humour impaired would ever vote this down.
Kris
+26  A: 

Trying is the first step towards failure
--Homer Simpson

This has been proven almost every time we try out a new technology at work.

Nils-Petter Nilsen
I'm not particularly fond of the Simpsons (no dislike tho) but this quote is _the_ shiznit!
Kris
On the other hand: "I haven't failed, I've found 10000 ways that don't work" -- Edison
Adam Liss
Is this a misquote?: "Kids, you tried your best and you failed miserably. The lesson is, never try." - Homer
Jason
For "Trying is the first step toward failure", see here: http://www.youtube.com/watch?v=3SihR1NuADc
Joey Adams
+31  A: 

In my very first computer science class in college, the professor said, If you remember only one thing from this class, remember these two things:

A computer does what you tell it to do, not what you want it to do.

and

The IQ of a computer is zero.

Bruce Alderman
When someone curses at the computer I usually say "it's probably your fault", and, as a fellow developer pointed, "I am my worst enemy".
Ravi Wallau
I had a comp-sci professor in one of the introductory courses who said, "the computer is a super-sonic idiot."
smcameron
+49  A: 

"Measuring programming progress by lines of code is like measuring aircraft building progress by weight." - Bill Gates

joseph.ferris
did he say that before or after saying that 1meg would be amply sufficient memory ?? .^_^.
Newtopian
Not everything is eternal. No one really predicted the growth of computing in a practical sense. If anything, Gates helped to drive that through Microsoft having larger and larger hardware requirements for each iteration of products. However, I think the provided quote really does hold true. The number of lines of code really doesn't tell me anything about how it is achieving its functional goal, just like the aircraft.
joseph.ferris
@joseph : true, lines of codes is but one in an array of possible metrics that can be applied to code. Alone it tells little about the whole picture but it does help understand, if only a tiny bit, the code and code base better. As such I do not think it should be discarded with he back of the hand as utterly useless. In this regard the 1m quote is just as narrow minded as the aircraft quote. There is no silver bullet in metrics, one should not dismiss a metric, however simple, for it's lack of silver cladding.
Newtopian
Exactly. Note that I don't mention that it is a useless metric, just one that has no insight into *functional* completeness. A very good example of using LOC as a metric is in identifying bloated areas of code that are likely candidates for refactoring - as it is a reasonable assumption that a class is either doing to much or not doing something effectively. Also, not 100% true, but it provides a means as an indicator for a potential issue.
joseph.ferris
+24  A: 

"The definition of insanity is doing the same thing over and over again and expecting different results." -Einstein

This is my usual answer as to why I don’t want to attend another meeting where no decision making will occur.

Bob
+11  A: 

Make everything as simple as possible, but not simpler. -Albert Einstein

Holograham
+11  A: 

Stupid should hurt.

Meaning if you got immediate feed back for making that bone-headed mistake, you'd stop.

dacracot
+18  A: 

I think it's a book title.

Learn to program in c++ in just 10 years.

It captures the idea that programming is not something you jump into, and getting good takes a long long time. Anyone who thinks otherwise is a fool, IMHO.

baash05
That's a great point! See also: http://norvig.com/21-days.html
Bill Karwin
+2  A: 

Check out my site: http://www.SoftwareQuotes.com - it has an excellent selection of quotations about software development.

Some quotes:

"The software isn't finished until the last user is dead." - Anonymous

"A well-written program is its own heaven; a poorly-written program is its own hell." - Geoffrey James

Imageree
+40  A: 

"It is easier to optimize correct code than to correct optimized code." --Bill Harlan

ldigas
+1  A: 

"Nothing works until you try it." -- me

Assume everything is broken until verified.

Used in response to questions like, "If we combine feature X and feature Y in a way we've never done before, will it work?" and "Do we handle generic absurd but catastrophic error condition?"

Discovered after spending a week at a remote customer site implementing a clever use of our product I thought should work but didn't verify. We committed it to the customer, it didn't work, so I spent a week in a warehouse in Kansas City implementing said feature.

David Poole
Commonly refered to as if it's not tested, it's broken.
Brian R. Bondy
+4  A: 

"NOTHING is more important in a database than integrity."

from my friend Eric

"The whole idea of doing this opens up a huge can of Pandora's box" (not specifically IT related but too much fun not to include)

"Crap...I hate it when I drop the wrong table"

from my former boss

HLGEM
+19  A: 

Be very careful at what you type into Google Images.

GreenieMeanie
that's too true I was looking for detail on how to imbed pictures into latex documents.... "pictures latex" is not a great search string
Colin Cassidy
@Colin, I wonder how many readers will actually type "pictures latex" into Google right after having read your comment :) I know I did.
Peter Perháč
@Colin Cassidy: yes it is! @MasterPeter: atleast this one.
Kris
Heh, I did a skincare website for Latina women once. Needed some headshots, and accidentally typed "Latina Facials". Definitely regretted that...
Mike Robinson
My wife was on the phone with her friend's five year old daughter, explaining how to find pictures on the computer, when I overheard her stressing "no, no, no, type in CAT"...!
Colin Pickard
Haha, excellent :)
bltxd
My wife wanted to download some stuff the dairy council had on their site for a class project. She mistyped and instead of gotmilk.com she typed gotmilf.com. Not what she was expecting. Also, my cousin when younger tried to find a local sporting goods store by simply typing the store name followed by .com. The store in question was Dick's.
monkeypushbutton
It strikes me that all of you must have intentionally set the "do not filter my results" on the Google search preferences page....
Luke
I did the Dicks.com without thinking back in high school when trying to pull up dicks sporting goods, using the teacher's computer that was hooked to the overhead projector. Apparently the school's porn filter isn't so good.
jamone
+2  A: 

"Proper Planning Prevents Poor Performance" -- My old boss.

Matt Brunell
In the military, there's another 'P' in front of 'Poor'. Something to do with urination, IIRC.
DaveE
+5  A: 

"Don`t test what you are not prepared to fix"

Colin Cassidy
Heh! Reminds me of a company I worked at where they released a Beta software product two weeks before the production release. As if any feedback they received from Beta customers could be acted on before the final release!
Bill Karwin
+1  A: 

"Do it right the first time (Bertrand Serlet)"

...meaning, don't hack something together which works mostly, but apply proper engineering. Everything else requires more effort in the future.

Simon
+2  A: 

What I usually end up telling my colleagues

  • Stop assuming the code is wrong just because you are not the author of it.

What I usually end up telling my boss:

  • The urgent is done. The indispensable is in progress. For miracles, please forecast some delay.
m_oLogin
+5  A: 

None of us is as dumb as all of us.

Scott
+7  A: 

I can't believe these weren't already here:

Garbage in, garbage out

and

Know Thy Data

finally

To err is human, to really foul up requires a computer

PTBNL
+14  A: 

"Measure twice, cut once" - good philosophy for any discipline...

CMPalmer
Wikiquote.org lists this under English proverbs, Russian proverbs, Swedish proverbs, Czech proverbs, and Persian proverbs. Sounds pretty universal!
Bill Karwin
"...and have a spare, just in case"
Pondidum
+5  A: 

"Think big, act small, fail fast; learn rapidly"

+24  A: 

I was talking to a guy about Object Oriented Programming, and added:

Just because it's made out of car parts, doesn't mean it's a car.

It promptly was entered into Bugzilla's Quips.

Kieveli
+1 Very astute!
Bill Karwin
+12  A: 

A favorite when trying to make a decision.

It is easier to get forgiveness than permission.

That's a great quote, it's attributed to Adm. Grace Murray Hopper, a pioneer of computer science.
Bill Karwin
I just can't figure out why people like this quote. There are so many situations where someone following this advice could cause permanent damage, for which forgiveness is nice, but the consequences remain.
John Fisher
I prefer the opposite...
RCIX
I like, and act in accordance with, this quote because consulting every step you take with a superior will increase conservativeness and decrease experimentation. If you experiment *responsibly*, for instance by using a new technology, you'll sometimes get results far above what is expected of you.That's my experience anyway.
Niels Bom
I beleive the quote is; "anal sex, its easier to get forgiveness than permission"
Mailslut
It's true most of the time. In the non-working-for-the-man business world where time actually equates to money it can be a really expensive choice to wait around for someone to give you permission. Especially, since permission usually requires a decision and decisions can result in ramifications to the person making it. From experience working with managers at huge multi-national companies, they almost never make a decision unless they can spread it across multiple people. Mostly because, to become a manager in a huge company, it's expected that you're never wrong. Screw permission.
Evan Plaice
Taking it further, it's harder to get forgiveness after failing to get permission.
JMC
+2  A: 

Programming is communication. Communication is not programming.

-- Myself.

Here's an explanation (spoiler alert?) for those that might find it difficult to grok exactly what this phrase is suppose to mean:

The first part of this phrase is butt naked and means exactly what is says. When we write code - good code, that is - we are communicating ideas and intent, data and process. Not only are we communicating this information to our compiler, but also to our colleagues, the next guy who is going to maintain that code and to our (near) future self.

The second part; "communication is not programming," is a bit deeper and is about communicating with living people, and how different that is from communicating with a compiler. Human languages are full of ambiguity, and often require multiple different explanations before a point or idea comes across clearly. Communicating with people require "people communication." Further, people are not computers. When you ask a person to do something, they will probably not do exactly what you asked. They may do less or they may do more. They may even do something completely different, or what amounts to nothing of value (to you). Not because they are bad, but because they are people.

Christian Vest Hansen
+1  A: 

Don't de-reference dangling pointers.

Eric M
Also, sometimes you need a break: Have fun. Kill zombies.
Eric M
True and true. (+1 and +1)
Dian
+14  A: 

Computer Science is no more about computers than astronomy is about telescopes.

--E. W. Dijkstra

dub
A: 

"Question your assumptions"

Geos
+2  A: 

At a polytechnic they teach you to wash your hands after going for a piss, at university they teach you not to piss on your hands.

Karl
I studied Chemistry. I was taught to wash my hands *before* going for a piss. If the code you are using is toxic, I think the analogy continues to hold quite well!
Stewart
I've also seen this quote used to distinguish US Army training from US Marines training.
Bill Karwin
Well, in university, mostly they teach people how to piss around, in my experience.
Eric M
+2  A: 

At least two. They are more physics, rather than computer science:

"if you always follow the minimum energy path, you are guaranteed that your potential will only decrease" - Me

"When you work in a vacuum, it's easy to fill the room" - Zachary Spencer, here on SO

Stefano Borini
+1 for quoting non-famous people, as I mentioned in the original question. Many answers are quoting celebrities or famous scientists.
Bill Karwin
Hey! I am famous! :P
Stefano Borini
Sorry Stefano, no disrespect intended. :-)
Bill Karwin
+3  A: 

Being really good at C++ is like being really good at using rocks to sharpen sticks. — Thant Tessman

Narayan
I've always thought of C++ as being like a razor blade. Both that one can write extremely concise pointed code, but one can cut oneself too.
Eric M
+2  A: 

It's maybe a bit obvious, but one of my lecturers in college pointed this out, and it's stuck with me:-

"If your code compiles, you've written a program. But this doesn't mean that it's the program that you think you've written".

This guy was big on formal proofs...

It's a good point, and you don't have to go into formal proofs for it to be a useful principle. Any software project must first define its requirements, then implement, then validate that what was implemented satisfies the requirements.
Bill Karwin
A: 

"All of Microsoft's software is written in Visual Basic" -- My IT teacher

haha.

Charlie Somerville
+1  A: 

If you can't test it, then you don't need it.

Referring to source code. If it doesn't have a testable result, then you might as well use a null statement.

This is particularly true of error handling code. If the error condition can't be created, why try to handle it?

Stewart
+5  A: 

My all-time favourite has to be Hofstadter's Law:

It will take longer than you think, even if you take Hofstadter's Law into account.

:)

Joel in Gö
Oh sorry, infinite loop.
pestaa
+2  A: 

"For every problem there is a solution which is simple neat and wrong"

This is a variant of a quote by H. L. Mencken.
Bill Karwin
+1  A: 

Question: What is the difference between ignorance and apathy?

Answer: I don't know and I don't care. ;)


Synopsis: You can't help someone who is both ignorant and apathetic at the same time, so don't waste your energy.

wweicker
+4  A: 

We've made a deal with God:

  • He doesn't program,
  • we don't make miracles.
voyager
A: 

"I think most application development involves initial lack of understanding of how to use a particular technology optimally, followed by a downward spiral of workarounds and short cuts" - A developer friend of mine

Terence Lewis
A: 

Even though the compiler doesn't have a GUI, it still is beautiful.

-- me

Always have a healthy disrespect of the impossible

-- unknown

n002213f
I think the latter quote is a favorite saying of Larry Page, co-founder of Google. I'm not sure if the saying is originally his or not, but is known for saying it.
Bill Karwin
+2  A: 

"This project is scheduled to be done when hell freezes over. But it may slip." - Keith Reynolds

Bill Karwin
+1  A: 

"El flojo trabaja dos veces" -my friend's Colombian mother

Spanish for, "The lazy person works twice." Applicable to everything.

Jason
+1  A: 

From "Tips: Ten tips for being happier.":

Anything worth doing is worth doing badly.

For a mountain of wisdom take a look at some of the posts on "Sources of Insight".

JB King
A: 

"I don't care how did you do it. It has to work."

My friend told me that when I created a tiny report for him 10 years ago. But It is not what he exactly told me but meaning was same.

THEn
+3  A: 

It certainly is famous, but shouldn't be left unlisted:

Perfection is achieved, not when there is nothing left to add, but when there is nothing left to take away -- Antoine de Saint-Exupery

Nubsis
+1  A: 

Keep it simple stupid! (KISS Principle)

Don't over engineer nor over design the problem you're trying to solve, keep it simple and elegant.


Don't repeat yourself (DRY Principle)

Every piece of knowledge must have a single, unambiguous, authoritative representation within a system. Never copy and paste code either.


Making progress

Do something every day towards your project, whatever you do now you won't have to do later. Seems obvious but it really helps you move forward on your projects.

Brian R. Bondy
+2  A: 
Oren A