views:

434

answers:

13

In the context of programming language discussion/comparison, what does the term "power" mean?

Does it have a well defined meaning? Even a poorly defined meaning?

Say if someone says "language X is more powerful than language Y" or asks the same as a question, what do they mean - or what information are they trying to find out?

+1  A: 

I view the term as marketing fluff, no one well-defined meaning.

If you consider, say, Assembler, C, and C++. On occasions one drops from C++ "down" to C for particualr needs, and in turn from C down to assembler. So that make assembler the most powerful because it's the only language that can do everything. Or, to argue the other way, a single line of C++ code can replace several of C (hiding polymorphic dispatch via function pointers for example) and a single line of C replaces many of assembler. So C++ is more powerful because one line does "more".

I think the term had some currency when products such as early databases and spreadsheets had in-built languages, some quite restricted. So vendors would tout their language as being "powerful" because it was less restricted.

djna
+3  A: 

There are really only two meanings people are worried about:

"Powerful" in the sense of "takes less resources (time, money, programmers, LOC, etc.) to achieve the same/better result", and "powerful" in the sense of "is capable of doing a wide range of tasks".

Some languages are extrememly resource-effective for a small range of tasks. Others are not so resource-effective but can be applied to a wide range of tasks (e.g. C, which is often used in OS development, creation of compilers and runtime libraries, and work with microcontrollers).

Which of these two meanings someone has in mind when they use the term "powerful" depends on the context (and even then is not always clear). Indeed often it is a bit of both.

Artelius
+17  A: 

It does not have a well-defined meaning. In these types of discussions, "language X is more powerful than language Y" usually means little more than "I like language X more than language Y." On the other end of the spectrum, you'll also usually have someone chime in about how any Turing-complete language can accomplish the same tasks as any other Turing-complete language, so that neither is strictly more powerful than the other.

I think a good meaning for it is expressivity. When a language is highly expressive, it means less code is required to express concepts. To me, this doesn't just mean that you have to write less code to accomplish the same tasks, but also that the code is easily readable by humans. Of course, generally (to a point), having fewer lines of code to read makes the task of reading and understanding easier for humans.

Having a "powerful" standard library comes into play here along the same lines. If a language comes equipped with thorough, complete libraries, then idiomatic code in that language will be able to benefit from the existing library code and not have to repeat or reinvent common functionality in application code. The end result is, again, having to write and read less code to accomplish the same tasks.

I keep saying "generally" and "to a point", because once a language gets too terse, it gets more difficult for humans to decipher. I suppose at this extreme, a language may still be considered "more powerful" (or even "too powerful"). So I guess I'm saying my personal interpretation of "powerful" includes some aspects of "useful" and "readable" in it as well.

Vineet
+1 for "I like language X more than language Y." That is what most debates over the "power" of a language boil down to in the end.
JUST MY correct OPINION
+1 for expressiveness. And just to be clear, a language draws power not only from its ability to succinctly express instructions to a computer, but also to clearly/obviously express intent to a casual (human) reader. That's why shorter is not always better.
Forest
+1 for pointing out that the power of the standard library should be considered as part of the power of the language
Jon Rodriguez
+10  A: 

C is powerful, because it is low level and gives you access to hardware. Python is powerful because you can prototype quickly. Lisp is powerful because its REPL gives you fantastic debugging opportunities. SQL is powerful because you say what you want and the DMBS will figure out the best way to do it for you. Haskell is powerful because each function can be tested in isolation. C++ is powerful because it has ten times the number of syntactic constructs that any one person ever needs or uses. APL is powerful since it can squeeze a ten-screen program into ten characters. Hell, COBOL is powerful because... why else would all the banks be using it? :)

Amadan
I like this a lot.
BlueRaja - Danny Pflughoeft
Assembly is powerfull because you can code the most fastest unsigned division by 3: 2 mov, 1 mul and 1 shr :)
Stringer Bell
+8  A: 

"Powerful" has no real technical meaning, but lots of people have made proposals.

A couple of the more interesting ones:

  • Paul Graham wants to call a language "more powerful" if you can write the same programs in fewer lines of code (or some other sane, sensible measure of program size).

  • Matthias Felleisen has written a very serious theoretical study called On the Expressive Power of Programming Language.

As someone who knows and uses many programming languages, I believe that there are real differences between languages, and that "power" can be a convenient shorthand to describe ways in which one language might be better than another. Nevertheless, whenever I hear a discussion or claim that one language is more powerful than another, I tend to keep one hand firmly on my wallet.

Norman Ramsey
I'd +1 this if you said "one language might be better than another **in a specific domain** ". As is it smacks too much of one-true-wayism.
JUST MY correct OPINION
+2  A: 

It can have several meanings. In the very basic sense there's power as far as what is computable. In that sense the most powerful languages are Turing Complete which includes pretty much every general purpose programming language (as opposed to most markup languages and domain specific languages which are often not Turing complete).

In a more pragmatic sense it often refers to how concisely (and readably) you can do certain things. Basically how easy is it to do certain tasks in one language compared to another.

What language is more powerful (besides being somewhat subjective) depends heavily on what you're trying to do. If your requirements are to get something running on a small device with 64k of memory you're likely not going to be using Java. Most likely the right language would be C or C++ (or if you're really hard core assembly). If you need a very simple CRUD app done in 1 day, maybe something like Ruby On Rails would be the way to go (I know Rails is a framework and Ruby is the language, but these days what libraries and frameworks are available factor greatly into picking a language)

Davy8
+2  A: 

nothing absolutely nothing.

To high level programmers it might mean alot of available datatypes built in. Or maybe abstractions to easily create or follow Design Patterns.

Paul Graham is a very high level guy here is what he has to say: http://www.paulgraham.com/avg.html

Java guys might tell you something about portability, the power to reach every platform.

C/UNIX programmers may tell you that its speed and efficiency, complete control over every inch of memory.

VHDL/Verilog programmers will tell you its complete control over every clock and gate so as to not waste any electricity or time.

But in my opinion a "powerful language" supports all of the features for you to complete your task. Documentation may be important, or perhaps it is portability, or the ability to do graphics. It could be anything, writing a gui from Assembly is just stupid, so is trying to design an embedded processor in flash.

Choosing a language that suits your needs perfectly will always feel like power.

Toymakerii
+2  A: 

Powerful means "high in power". "Power" is something that increases your ability to do things. "Things" vary in shape, size and other things. Loosely speaking therefore, "powerful" when applied to a programming language means that it helps you to do perform your tasks quickly and efficiently.

This makes "powerful" somewhat well defined but not varying between domains. A language powerful in one domain might be crippling in another eg. C is very powerful if you want to do systems level programming since it gives you direct access to the machine and hardware and structures that let you code much faster than you would in assembly. C compilers also produce tight code that runs fast. However, once you move to web applications, C can become very "unpowerful" and crippling since it's so much effort to get something up and running and you have to worry about a lot of extraneous details like memory etc.

Sometimes, languages are "powerful" in multiple domains. This gives them a general "powerful" tag (or badge since were are on SO here). PG's claim is that with LISP, this is the case. That might be true or might not be.

At the end of the day, "powerful" is a loaded word so you should evaluate who is saying it, why he's saying it and what it means to to your work.

Noufal Ibrahim
+5  A: 

The only meaningful way to describe "power" in a programming language is "can do what I require with the least amount of resources" where "resources" is defined as "whatever costs I'd rather not pay" and could, thus, be development time, CPU time, memory space, money, etc.

So basically the definition of "power" is purely subjective and rendered meaningless in any objective discussion.

JUST MY correct OPINION
I disagree with the last sentence. If "power" only has meaning in a certain context it is not necessarily less useful or even meaningless. The rest of the answer is spot on. Power = the ability to make things happen with little effort.
iwein
A: 

I remember many instructors in college calling whatever language they were teaching "powerful".

Leads me to think:

Powerful = a relative term comparing the latest way to code something vs. the original or previous way.

Greg McNulty
+1  A: 

Typically there are two distinct meanings:

  • Expressive, meaning the code tends to be very short and understandable
  • Low level, meaning you have very fine-grained control over the hardware.

For the most languages, these two definitions are at opposite ends of the spectrum: Python is very expressive but not very low level; C is very low level but not very expressive. Depending on which definition you pick, either language is powerful or not powerful.

BlueRaja - Danny Pflughoeft
A: 

A precise answer can be tried to reach, by not assuming that the elements that define "powerful" (in the context of languages) come from so many dimensions.

See how many could be, and a lot will be missing:

  • runtime speed
  • code size
  • expressiveness
  • supported paradigms
  • development / debugging time
  • domain specialization
  • standard libs
  • codebase
  • toolchain ecosystem
  • portability
  • community
  • support / documentation
  • popularity
  • (add more here)

These and more parameters draw together X picture of how "programming in some language" would be like at X level. That will be only the definition, though, the only real knowledge comes with the actual practice of using the language, but i digress.

The question comes down to which parameter will represent the intrinsic quality of a language. If you refer to a language in itself, its ultimate, intrinsic purpose is "express things", and thus the most representative parameter is rightfully expressiveness, and is also one that resonates frequently when someone talks about how powerful a language is.

At the moment you try to widen the question/answer to cover more than the expressiveness of the language "as a language, as a tongue", you are more talking about different kinds of "environment", social environment, development environment, commercial environment, etc.

Depending of the complexity of the environment to be defined you'll have to mix more parameters that come from multiple, vast, overlapping and sometimes contradictory dimensions, and eventually the point of getting the definition will be lost or the question will have to be narrowed.

This approximation still won't answer "what is an expressive language", but, again, a common understanding are the definitions that Vineet well points out in its answer, and Forest remarks in the comments. I agree, for me "expression" is "conveying meaning".

Juaco
A: 

I think that, perhaps coincidentally, the physics definition of power is relevant here: "The rate at which work is performed."

Of course, a toaster does not perform very quickly the work of putting out fires. Similarly, the power of a programming language is not universal, but specific to the domain or task to which it is being applied. C is a powerful language for writing device drivers or implementations of higher-level languages; Python is a powerful language for writing general-purpose applications; XPath is a powerful language for writing queries on structured data sets.

So given a problem domain, the power of a language can be said to be the rate at which a competent programmer is able to use it to solve problems in that domain.

intuited