Why are some programming languages such as Python or Julia considered to be "scientific" programming languages? I guess my real question what is the criteria that makes a programming language scientific?
Python – What makes a scientific programming language, scientific
programming-languagespython
Related Solutions
Python is pretty easy to embed and has good documentation on how to do it.
Also, Python has a pretty approachable syntax, even for new users. Perl tends to have obtuse syntax making it less approachable for new users.
Another common language for embedding is Lua. It is known to be fairly easy to embed and has low operating overhead.
Python is well known and used in the Scientific community thanks to SciPy and NumPy, which may influence your particular observations.
Acceptance Factors
I'd say a combination of various things, but I don't think they are all required. Some languages considered mature nowadays clearly do not satisfy some of these.
I'd say a combination of:
- Tooling:
- mainline: At least one stable "official" or widely-accepted (de-facto or vendor-recommended/supported) tool suite (compiler, interpreter, vm, editor).
- alternative: Some stable and not-so-stable alternatives of the above tooling (closed or open source variants, free or commercial variants, extensions, etc...).
- Community: An active , but not necessarily large group of followers and contributors.
- Recognition:
- Some degree of recognition and use by some industrial actors (even if in a niche).
- Some degree of recognition in popular culture (even if in a niche).
On Fame, Recognition and Maturity
Note that the differentiator here is on having strong and active criteria validators, not large or numerous ones. To clarify, consider these vastly different examples:
Ruby was for a long-time a language with a large community-backing, an official reference implementation and so forth but could hardly be considered mature until it ironed out some of its rough edges. It was famous before being mature.
On the other hand of the spectrum, some once very-widely used languages (COBOL, FORTRAN...) are now less visible but are still mature in every possible sense. They were once famous and mature.
Also, some niche-languages are in my view definitely mature, inspite of their small (but established) market penetration. Consider Oberon or Limbo. They are mature but never got famous. Others, like R, are relatively famous in that their "niches" aren't really niches (bugs me when people call things like Scala or Clojure "niche languages", which they definitely aren't), though their field of applications are not exactly what you'd call mainstream.
On Stability
What's stable anyways? It's quite relative...
- Compliance?
- To the standard (if there's one)?
- To a reference implementation (if there's one)?
- Number of bugs? (hardly a good measure)
- Use in critical environments?
In general, stability simply means I don't get surprised on a daily basis when going about my average job using the language's toolkit, and I can get definitive answers on what should or should not happen when I attempt to do something with the language and its toolkit, whether it's at the build-time or runtime of my programs.
But stability for someone writing smartphone apps and stability for someone writing medical or avionics systems is a different kind of bird.
Best Answer
Jeff Bezanson's PhD thesis on Julia, "Abstraction in Technical Computing" discusses this question at length, reaching only partial answers. Here are key quotes.
When using general purpose languages for scientific computing,
Contrasting the design priorities of mainstream programming languages vs. scientific (technical computing) languages:
Another factor is "convenience" (productivity) in how much you need to know to use a given piece of functionality,
I interpret "eliding software engineering distinctions" as emphasis on rapid and exploratory development over teamwork, portability, maintainability, usability, testability, deployability, etc.
The author mentions cultural differences, e.g. with MATLAB's
\
operator,