views:

163

answers:

9

For me it is : strong type

Wikipedia:

"strong typing" implies that the programming language places severe restrictions on the intermixing that is permitted to occur, preventing the compiling or running of source code which uses data in what is considered to be an invalid way

Why it is important? Because I love compile error much more than runtime error.

I guess it is better to supply some information and some reasons why it is important.

+5  A: 

Expressiveness.

That is, it makes it easy to express the design and ideas and does not require technical workarounds to make a design work.

Oded
care to explain deeper? Do you mean by expressive is a turing complete languages?
nanda
All real programming languages are turing-complete, and several contain another turing-complete subset (such as C++ Templates).
MadKeithV
what's the different between expressive and concise?
nanda
@nanda - Concise means brief, though informational. Expressive is not length related, but about being able to express different designs without the language being in the way.
Oded
@MadKeithV: Nope, it ain't so. There exist some non Turing-Complete "real" languages like Agda and Epigram. [Their non Turing-Completeness is because of the totalness of their type system.] Of course your definition of a real programming language might be different than mine, but for me Agda and Epigram qualify as real programming languages.
missingfaktor
Learn something new every day! Thanks Rahul - I recommend http://frankmccabe.wordpress.com/2008/09/30/sub-turing-complete-programming-languages/ for others interested in sub-turing-complete languages and their potential.
MadKeithV
A: 

Concise, but unambiguous syntax.

Visual Basic: It's clear what's going on, but it's very verbose.

Perl: It's quite concise, but you'd get clearer programs by banging on your keyboard randomly.

C#: Just right :D

Mike Caron
Perl is readable when it's written well, but I learned it first. I personally find C# and Java to be horrendously verbose.
Chris Lutz
I can't stand Perl. And, I agree that Java is quite verbose as well. But, C# has made great strides in recent years to concisity, all while maintaining very unambiguous syntax. I guess I'm a C# fanboy, then :D
Mike Caron
I was right there with you, until C#....The answer is Lisp man, LISP.(tongue firmly in cheek)
MadKeithV
+1  A: 

Supported in such a manner that it allow for rapid deployment after good testing.

Tobiasopdenbrouw
I don't think that's a **language** property
nanda
Technically true. BWT, I don't mean 'supported' in that there's a helpdesk, but that there's additional tooling/IDE / etc. provided for the language. Which isn't a language property either, but still d**n important for me.
Tobiasopdenbrouw
+4  A: 

It gets the job done. I think it's good to be familiar with more than one language. As much as I enjoy C# I don't think it is the best at everything. So for me I just look at the task at hand and what are some of the requirements and then try to choose a language that best matches.

spinon
+2  A: 

It is important that the code look like pseudo-code, in that it is easy to read and write. There is no objective measure for this, because over time the language and the programmer tend to bend towards each other.

cjrh
+2  A: 

1) Strong typing and features that support it.

C#/Java v1.0 were strongly typed languages, but sometimes you had to break static typing because there was simply not enough expressiveness to do some stuff and have it statically typed (i.e. you needed casts, when pulling objects from an untyped collection for example).

Generics of course improve the situation a lot and things get even merrier in languages that support higher order generics (like Scala).

2) Conciseness. If it's obvious, I shouldn't need to write it. Type inference is a great tool for this.

3) A great library. If it's often needed, I shouldn't need to write it.

Mau
A: 

Being Turing-complete helps.

Noel M
Not being Turing-complete pretty much disqualifies a language as a programming language.
Martin B
@Martin: Not entirely true. A programming language can be perfectly useful for specific kinds of computation or processing, but incapable of general tasks. Non-Turing-complete doesn't necessarily imply incapable of useful computation.
Jon Purdy
@Jon: Maybe in theory -- but in practice, what programming languages are there that aren't Turing complete? All of the non-Turing-complete languages that this question (http://stackoverflow.com/questions/315340/practical-non-turing-complete-languages) came up with were pretty academical. My point is that it's incredibly easy to be Turing complete -- allow unbounded loops and you're pretty much there. Look at templates in C++ -- they achieved Turing completeness at compile time entirely by accident.
Martin B
@Martin B: See my comment below Oded's answer.
missingfaktor
+1  A: 

I can't stand purely explicit, nominative, static typing, i.e. Java-style. I feel like I can only program effectively in languages that offer at least one of the following:

  1. Duck typing similar to Python, PHP, Perl, Ruby.

  2. A good template system that supports variadics, static if, etc. (like D's template system) plus at least some type propagation (like C#'s var keyword or D's auto keyword). I've been using D for a while and its template system is good enough that I often refer to it as "compile-time duck typing".

Without at least one of these I often feel like I'm caught in a complete straight jacket.

dsimcha
+3  A: 

Support first-class (aka higher-order) functions