<<

In our Scientific Computing course, 2020S, we will utilize these coding languages and packages: python (including NumPy, SciPy, SymPy, , IPython=Jupyter, ) SageMath (built on top of Python, uses Jupyter) MATLAB (similar to Matlab)

Of these, python is a GPL (general purpose language) and is a low- to medium-level language. The packages used with python are high-level (Numpy, Scipy, Sympy, Matplotlib, etc.). Python code can be run as scripts (interpreted) or can also be compiled into machine code.

What does all of this mean? What is the big picture of coding languages and mathematical ?

Glossary of terms: = one step beyond machine code; in fact, it is just machine code translated into human-readable language. Class = type of object in OOP Client side program = code run on the of the person running the code. Cloud computing = type of distributed computing done over the web. (eg – BOINC used for SETI.) Coding = programming = program that converts code into machine code CPU = Developer = fancy name for “” or “coder” Distributed computing = when a program is run by many different at the same time - -- eg SETI (search for extraterrestrial intelligence). DSL = domain specific language (Matlab, Mathematica) GNU = GNU’s not Unix GPL = general purpose language (Unix, , , ) GUI = Interpreted language = same as . Method = function of inputs that produces an output, used in OOP. Object = a thing that has attributes, properties, sometimes , and also has methods associated to it that can act on it. OOP = object-oriented programming (also just OO) Open-source software = code people can modify and share because design and code are accessible. Can be publicly, collaboratively developed. Machine code: the language (like 0’s and 1’s, binary data or data) that can be inputted into a CPU and executed. Multi-paradigm languages – support different types of programming (eg both procedural and OOP and ….) – most modern languages are like this. In the newer ones, different types of syntax can be used. Parallel computing – where more than one computation is done by the computer at the same time. The number of nodes is the number of things that can be done at the same time. – standard linear “do this, then do that using this variable” programming RAD = rapid application development RAM = random access memory Scripting language – one where a program can be executed without being compiled first into machine language. Same as “interpreted language” Server = a typically big computer that is a central hub of a network. Server-side code = code that it run on a server that can be accessed by other computers over the network or internet. Syntax – the spelling and grammar of computer coding – punctuation, formatting of how to make statements in the code. – platform in one language placed inside another platform; eg – Java VM run on top of an , so that Java code can be run interpretively.

The lowest-level coding is machine coding. But you also call the most rudimentary languages low-level, ones that really don’t abstract anything beyond what the computer’s architecture can do. High-level coding means that one coding language makes complicated functions that use the functions of another language, which in turn uses the functions of a low-level language. All of today’s code in high-level languages. (I will call the typical high-level coding languages medium level (like C, java, C++, Fortran) and the much more abstracted languages (like MATLAB, , Mathematica) very high level.) Medium-level languages (C, C++, Fortran) are faster but cumbersome to program and debug. High-level languages are 1.4(Python) to 4(Mathematica) times slower but are easier to code when working with complicated .

Here are some language descriptions from medium level to the highest level.

First, GPLs and Mathematical Software:

C, Unix, Fortran are infrastructure/building blocks procedural languages is written in C (although, really unix)

C, C+, C++, C# (MS rival to Java), Java (Linux is C-based) Used by software developers, computer engineers, business and systems analysts, IT, web admins, used in management companies. Used by Microsoft, Apple, Oracle, Cisco, etc. Dev in 1972 C++ is OO, mid-level Used by software engineers, developers, IT, Engineering, Management of businesses, etc. Used by , Mozila, Winamp, Adobe, Amazon, Lockheed Martin C++ released in 1983 C# is used by for automation, web developers, etc. C# is used by Microsoft, HP C# developed in 2000 Objective-C used by IT, web developers, iOS, Android apps dev by Apple in 1983

F# (GPL, multi-paradigm) Dev/rel 2005

Java (does everything, evolved from C++, key is virtual machine (VM) that performs JIT(just in time)) GPL, OO, High-level, used by software engineers, web developers, Uswed by Ebay, , internet of things, cloud computing, enterprise architecture Adobe Creative Suite, Eclipse, Lotus, Mincraft, OpenOffice written in Java. (dev in 1990 at Sun, publicly introd in 1995)

Pascal, Basic (ancient, user-friendly procedural languages) Dev/rel 1970; dev/rel in 1964

Visual Basic .NET (scripting for Windows computers, object and event-based) Intr in 1991 python (NumPy, SymPy, Matplotlib) (used by Google, Pinterest, Instagram, YouTube, DropBox, NASA, ESRI – env sys research inst – GIS, developed in late 1980s, released to public in 1991) (used in web/internet development, scientific and numerical computation, desktop GUIs, suitable for RAD, a lot of AI programs including those used in gaming) Ipython – interactive command shell for python (and other programming languages), Jupyter has , mathematical expressions, inline plots, etc, support for GUI toolkits. Provides parallel and distributed computing.

SageMath (open source symbolic computation software, written in python) “System for and Geometry Experimentation” Developed/released in 2005 GAP is part of SageMath

MATLAB (mathematical programming, nice for and numerical packages) Dev in late 1970s, first written in Fortran, then later in C/C++, Java

(GNU=GNU’s not Unix, mass collaboration project announced in 1983) GNU Octave (Written in C/C++, Fortran), mostly compatible with MATLAB, using Xoctave as front end. Also: Octave Online, QTOctave. Dev/Rel in 1994

Scilab (w latest frontend) (alternative to Matlab, written in C/C++, Java, Fortran) Dev in 1990, released in 2009

Mathematica (Wolfram – symbolic mathematical computational and graphics package) Released in 1988, written in C/C++, Java

Scala (runs on Java VM) Dev/ rel in 2004

Swift (open sourced scripting language, for Apple stuff, based on Objective C) Used by software dev, esp for iOS and OSX, IT Used by Apple, Dow Jones Introduced in 2014

Ruby (scripting, for web development), Ruby on Rails Open-sourced, OO scripting language Used in data science, web development, robotics, networking, system admin & security, 3d modeling, Used by Github, Scribd, Groupon, NASA, Motorola, Toyota, Google Sketchup, Amazon, Twitter Dev in 1995.

Rust (systems programming, multiparadigm) Dev/rel 2010

Go (Golang, scripting language, introduced by Google, similar to C, multi-paradigm) Dev in 2007, rel 2009

Statistical Software:

SAS (statistical package) Dev/rel in 1976

Stata (statistical package, written in C) Dev /rel in 1985

R (high-level, interpreted language, open source, for statistical programming and graphics, some big data use) written in C, the first version was “S”. (Recommended: download RStudio) Dev in 1992/3, released in 1995-2000.

Julia (high-level, for data manipulation, open source, works well with parallel computing and cloud computing, similar syntax to Matlab and R) Dev in 2009 / released in 2012

Coding specifically for the Internet:

Html (basic web page development) Used by web developers, email designers, software engineers, IT, engineering design, Used by Apple, Apex, etc. Dev in 1990

Javascript (web client-side scripting version of C++/java, works on client computer; makes web pages dynamic/interactive) Used by web developers, software engineers, design, marketing, finance, healthcare) Used by Wordpress, Khan Academy, LinkedIn, Groupon, all websites. Dev in 1995 JQuery – math.js – math library for Javascript mathjax: javascript display engine for latex math

PHP (open source, server-side scripting language, used on the web to write to files, forms, , generates web dynamic content) Used by web developers, it, management of industries Used by any web pages like Facebook, Wordpress, etc. Released in 1995

SQL ( query language) Used by IT, Engineering, management of business, data gathering industries. Used in Data analysis and big data mining Dev by IBM in 1974 as SEQUEL

BOINC (open source, “middle-ware”, cloud ) Dev originally for SETI in 2002.

TIOBE Index for December 2019

December Headline: The winners continue to win

TIOBE will announce the of the year next month. There are 4 candidates for this title: Java (+1.3%), C (+1.8%), Python (+1.9%) and C# (+1.4%). These 4 languages are all in the top 5. Only C++ lost some ranking points in 2019. Python is top favorite for the title. It was already programming language of the year 2018, but its popularity keeps growing. This is mainly due to the lack of programmers in the world and the ease of learning this language if compared to other languages. C is also doing well thanks to the rise of Internet of Things. Why Java and C# are doing well is unclear, but it would be the first time that C# becomes the programming language of the year. Let's see what will happen next month! The TIOBE Programming Community index is an indicator of the popularity of programming languages. The index is updated once a month. The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. Popular search engines such as Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube and Baidu are used to calculate the ratings. It is important to note that the TIOBE index is not about the best programming language or the language in which most lines of code have been written. The index can be used to check whether your programming skills are still up to date or to make a strategic decision about what programming language should be adopted when starting to build a new software system. The definition of the TIOBE index can be found here.

Dec Dec Programming 2019 2018 Change Language Ratings Change

1 1 Java 17.253% +1.32%

2 2 C 16.086% +1.80%

3 3 Python 10.308% +1.93%

4 4 C++ 6.196% -1.37%

5 6 C# 4.801% +1.35%

6 5 Visual Basic .NET 4.743% -2.38%

7 7 JavaScript 2.090% -0.97%

8 8 PHP 2.048% -0.39% Dec Dec Programming 2019 2018 Change Language Ratings Change

9 9 SQL 1.843% -0.34%

10 14 Swift 1.490% +0.27%

11 17 Ruby 1.314% +0.21%

12 11 /Object Pascal 1.280% -0.12%

13 10 Objective-C 1.204% -0.27%

14 12 Assembly language 1.067% -0.30%

15 15 Go 0.995% -0.19%

16 16 R 0.995% -0.12%

17 13 MATLAB 0.986% -0.30%

18 25 0.930% +0.42%

19 19 Visual Basic 0.929% -0.05%

20 18 0.899% -0.11%