Is there a better term than "smoothness" or "granularity" to describe this language feature?

Posted by Chris Stevens on Programmers See other posts from Programmers or by Chris Stevens
Published on 2011-02-25T19:22:18Z Indexed on 2011/02/25 23:33 UTC
Read the original article Hit count: 444

One of the best things about programming is the abundance of different languages. There are general purpose languages like C++ and Java, as well as little languages like XSLT and AWK.

When comparing languages, people often use things like speed, power, expressiveness, and portability as the important distinguishing features. There is one characteristic of languages I consider to be important that, so far, I haven't heard [or been able to come up with] a good term for: how well a language scales from writing tiny programs to writing huge programs.

Some languages make it easy and painless to write programs that only require a few lines of code, e.g. task automation. But those languages often don't have enough power to solve large problems, e.g. GUI programming. Conversely, languages that are powerful enough for big problems often require far too much overhead for small problems.

This characteristic is important because problems that look small at first frequently grow in scope in unexpected ways. If a programmer chooses a language appropriate only for small tasks, scope changes can require rewriting code from scratch in a new language. And if the programmer chooses a language with lots of overhead and friction to solve a problem that stays small, it will be harder for other people to use and understand than necessary. Rewriting code that works fine is the single most wasteful thing a programmer can do with their time, but using a bazooka to kill a mosquito instead of a flyswatter isn't good either.

Here are some of the ways this characteristic presents itself.

  • Can be used interactively - there is some environment where programmers can enter commands one by one
  • Requires no more than one file - neither project files nor makefiles are required for running in batch mode
  • Can easily split code across multiple files - files can refeence each other, or there is some support for modules
  • Has good support for data structures - supports structures like arrays, lists, and especially classes
  • Supports a wide variety of features - features like networking, serialization, XML, and database connectivity are supported by standard libraries

Here's my take on how C#, Python, and shell scripting measure up. Python scores highest.

Feature           C#          Python      shell scripting
---------------   ---------   ---------   ---------------
Interactive       poor        strong      strong
One file          poor        strong      strong
Multiple files    strong      strong      moderate
Data structures   strong      strong      poor
Features          strong      strong      strong

Is there a term that captures this idea? If not, what term should I use? Here are some candidates.

  • Scalability - already used to decribe language performance, so it's not a good idea to overload it in the context of language syntax

  • Granularity - expresses the idea of being good just for big tasks versus being good for big and small tasks, but doesn't express anything about data structures

  • Smoothness - expresses the idea of low friction, but doesn't express anything about strength of data structures or features

Note: Some of these properties are more correctly described as belonging to a compiler or IDE than the language itself. Please consider these tools collectively as the language environment. My question is about how easy or difficult languages are to use, which depends on the environment as well as the language.

© Programmers or respective owner

Related posts about programming-languages

Related posts about language-agnostic