4

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?

2
  • It just mens the languages are often used as tools by scientists. E.g. Python has the numpy library which makes it very useful for scientific computing. This means Python is much more popular in the niche of scientific computing than say Java, even though Java is probably more used in other niches like enterprise systems. There is no exact criteria for what makes a language scientific though.
    – JacquesB
    Commented Jun 12, 2016 at 9:15
  • 1
    Good support for numerical methods is probably the biggest single feature for a scientific language. Without numpy or the like, Python probably wouldn't qualify as one... Commented Jun 16, 2016 at 23:42

2 Answers 2

6

Jeff Bezanson's PhD thesis on Julia, "Abstraction in Technical Computing" discusses this question at length, reaching only partial answers. Here are key quotes.

We propose that technical users crave the flexibility to pick notation for their problems, and language design — the highest level of abstraction — is where you go when you need this level of flexibility.

When using general purpose languages for scientific computing,

Effective scientific libraries extensively employ polymorphism, custom operators, and compile time abstraction. Code generation approaches (writing programs that write programs) are unusually common.

Contrasting the design priorities of mainstream programming languages vs. scientific (technical computing) languages: Contrasting design priorities

The priorities in each row are not necessarily opposites or even mutually exclusive, but rather are a matter of emphasis. It is certainly possible to have both parametric and ad hoc polymorphism within the same language, but syntax, recommended idioms, and the design of the standard library will tend to emphasize one or the other. Of course, the features on the left side can also be useful for technical computing; we exaggerate to help make the point.

Another factor is "convenience" (productivity) in how much you need to know to use a given piece of functionality,

This leads languages to adopt various forms of loose coupling, automation, and elision of software engineering distinctions that are considered important in other languages. ... These systems are function-oriented, typically providing a rather large number of functions and a much smaller number of data types. Type definitions and features for organizing large systems are de-emphasized.

I interpret "eliding software engineering distinctions" as emphasis on rapid and exploratory development over teamwork, portability, maintainability, usability, testability, deployability, etc.

Informally, in order to provide the desired experience a language needs to be able to assign a meaning to a brief and isolated piece of code such as sin(x). This leads directly to making declarations and annotations optional, eliding administrative tasks like memory management, and leaving information implicit (for example the definition scopes and types of the identifiers sin and x).

The author mentions cultural differences, e.g. with MATLAB's \ operator,

By writing only A\B, the user can solve square, over- or under-determined linear systems that are dense or sparse, for multiple data types. The arguments can even be scalars, in which case simple division is performed. In short, a large amount of linear algebra software is accessed via a single character! This contrasts with the software engineering tradition, where clarifying programmer intent would likely be considered more important.

2
  • 1
    Sun's/Oracle's Project Fortress (unfortunately abandoned) was a really interesting point in the Programming Language Design Space, being a rigorously designed language by experienced language designers (the lead designer was Guy L. Steele, co-designer of Scheme, chairman of the ANSI Common Lisp committee, co-author of the Java Language Specification, ECMAScript Language Specification, ISO C Language Specification, and others) with a sophisticated type system, powerful parametric polymorphism, bounded polymorphism, ad-hoc polymorphism, multiple dispatch, traits, an extreme focus on accessible … Commented Jun 12, 2016 at 13:17
  • 1
    … and semi- to fully-automatic parallelization, and above all, a syntax inspired by surveying the actual notation used by actual scientists in thousands of actual scientific, technical, mathematical, numerical papers. Fortress source code actually looks like rendered LaTeX output (not LaTeX source code). Commented Jun 12, 2016 at 13:18
5

Generally when someone refers to a programming language as scientific it is either because there are useful libraries for use in that field or the syntax of the language makes it easy to write the required algorithms. However, just because one field considers a particular language as a scientific does not mean that a different field considers it the same.

Python has lots of libraries for bio informatics so that would likely be part of its appeal. Fortran has a lot of general purpose math libraries so it is often favored for highly computational fields (also its array slicing syntax can simplify algorithms). Functional programming languages can often more closely replicate the raw algebra so they can also be favored in some circles and in the case of F# the units of measure functionality gives the compiler the ability to perform dimensional analysis, which in some fields can be a big benefit (especially engineering when multiple unit systems may be in use).

One other element that is sometimes considered is how fast and easy is it too write code. Do you have to write a lot of boiler plate code. Also is it easy to call your compiled program with simple syntax. How easy is it too add in command line arguments and how easy is file in and out. Fortran makes writing fixed column width output files really easy (which makes reviewing the prior by hand instead of importing them into a spreadsheet program easy).

1
  • 2
    Or, in other words, what makes a scientific language "scientific" is being called a "scientific language" by scientists who do scientific programming. It's the same as the question what is the difference between a "language" and a "dialect"? A language is a dialect with an army. What is the difference between a country and a territory? Being called a country by other countries. Commented Jun 10, 2016 at 18:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.