views:

921

answers:

7

I see the phrase "programming idiom" thrown around as if it is commonly understood. Yet, in search results and stackoverflow I see everything...

From micro:

  • Incrementing a variable
  • Representing an infinite loop
  • Swapping variable values

To medium:

To macro:

Is there a single, common definition for "programming idiom"? Since "programming idiom" is used in many scopes:

  • Micro: syntactic nuance or common syntax
  • Medium: common style and patterns
  • Macro: programming paradigms as idiom

Is it valid to use the phrase in any of these scopes? The answers so far focus on syntactic idioms. Are the others valid as well?

+2  A: 

See http://en.wikipedia.org/wiki/Programming_idiom

A programming idiom is a pattern, algorithm or way of structuring code. To talk about programming idioms is to talk about those patterns that recur frequently in code or to propose new ones.

The benefits of being familiar with idioms, particularly the larger ones, is that when looking at code you can see several lines of code but because it is familiar as a particular idiom you can mentally represent and think about the code as that single idiom instead of having to necessarily read and comprehend each line individually.

To say that code isn't idiomatic is to say that it doesn't structure itself in ways that allow human readers to think about the code effectively.

Sam Hasler
+3  A: 

From WikiPedia: A programming idiom is a means of expressing a recurring construct in one or more programming languages.

I'm guessing you've already been down that road though!

Mat Nadrofsky
+2  A: 

Idiom is a term from linguistics. It is a group of words that do not literally mean what the say. For example saying someone is "under the weather" when they are not feeling well. That particular phrase came from sailors talking about passengers, seasick passengers would go below the "weather" decks where the ships motion was less. But most of us are not sailors and don't know the literal meaning of the phrase.

In programming many, even most of the instructions are not understood by the general public even though they are English words. for example "for loop". While they make sense to programmers, they don't to most other people.

Jim C
-1: A programming idiom is different than the non-programming variant.
trinithis
+5  A: 

An "idiom" in (non-programming) language is a saying or expression which is unique to a particular language. Generally something which doesn't follow the "rules" of the langauge, and just exist because native speakers "just know" what it means. (for instance, in English we say "in line" but "out of line" -- that would be idiomatic)

Moving this to the programming arena, we get things like:

 if(c=GetValue())
 {...}

which actaually means:

 c = GetValue();
 if (c != 0)
 {....}

which every C/C++ programmer understand, but would totally baffle someone coming from a different programming language.

James Curran
-1 While idioms may be influenced by syntax, I think there is much more to them.
trinithis
A: 

An idiom is a way of saying something that is particular to a given language. For example here are a handful of english idioms.

You can extrapolate this to apply the concept to programming.

Aaron Palmer
+4  A: 

A programming idiom is the usual way to code a task in a specific language. For example a loop is often written like this in C:

for (i=0; i<10; i++)

PHP will understand a similar construct:

for ($i = 1; $i <= 10; $i++)

But it is discouraged in PHP for looping over an array. In this case you would use:

foreach ($arr as $value)

Whereas in Ruby, you would use:

(1..10).each

for the loop, or:

array.each

There are many many possibilities to write a loop in those languages. Using the idiom makes it immediately identifiable by experienced readers. They can then spend their time on more important problems.

Christian Lescuyer
+1  A: 

An idiom is a 'pattern' that can be identified in several places.

I wouldn't say it has anything to do with a particular programming language.

Iterator foo;
foo.reset();
while (foo.next())
{
    print(foo.value());
}

That is a snippet of what i would call the 'for each' idiom which is expressed slightly different in a number of languages.

Another excellent example of an idiom is Socket. All platforms that claim to have sockets, all work in conceptually the same way, that is, they all have roughly the same interface.

Zuu