A language consists of representations (usually words) and grammar (rules of usage). The aspects of theoretical linguistics most pertinent to programming languages include the following:
- Syntax. What's legal in a language: Which sequences and arrangement of symbols are allowed. This is commonly described with BNF notation.
- Semantics. Usage and meaning of the syntax. Contrast with ontology which is concerned about the nature of the meaning.
- Pragmatics. How context and situation influences interpretation of the semantics.
A computer language is a language (with its own vocabulary, grammar, and syntax) used by, or in association with, computers.
A programming language expresses computation. A programming language is used by humans or computers to communicate with computers, usually to make the computer do some work. EGs: C; Java; Forth; LISP.
FYI: Computer languages cover programming languages plus these languages:
- A specification language are used during system analysis and design. EG: UML.
- A query language queries databases, data structures, and information systems. EGs: SQL; MDX; XPath; ABAP; SAS.
- A markup language combines text and extra information about the text. EGs: PostScript; SGML; HTML; XML.
- A transformation language takes input and modifies it. EGs: XSLT; troff; TeX.
- A communication protocol is a set of standard rules for data representation, signalling, authentication, and error detection required to send information over a communications channel. EGs: TCP/IP; OSI; SNA.
"programs should be written for people to read, and only incidentally for machines to execute."
-Abelson & Sussman. Structure and Interpretation of Computer Programs, preface to the first edition [Ref]
A programmer is in the gutters actually writing the code. A developer is a programmer who works with more complicated systems, usually involving multiple programming languages. An analyst is a developer who interacts with business folks to translate business goals into programming goals. Clients are people, who may or may not have ever been programmers, who have some scheme to make money or perform some service. Users use the program and sometimes they are the clients and sometimes the users are "clients" of the clients. EG:
Some clients wanted "the computer" to do some work for them. The clients and computer analysts formed a project to make the computer do the work. They met a number of times where they discussed the requirements and analyzed them to form a model (often UML) which represented an outline of the program (software), computer system (hardware), and people involved.
Eventually the project became detailed enough that the developers had some nice specifications to work with (including, of course, a deadline). In the deep gutters of the programming, the programmers encountered problems (as with every story), but the programmers, developers, analysts, and clients met often and were creative enough to overcome the problems. After a sufficient amount of testing, validation, and redesign the project was finally implemented with real users. The users provided feed back for additional improvements on the never-ending project.
A program is a set of statements or a collection of commands and instructions that detail a complete algorithm for a computer in a computer or programming language. To program is to write a program. An assembly are the files that compose a program. Software usually refers to completed programs. Applications usually refer to programs for the end user. EG:
When I am done programming my program, I will package the assembly, distribute the software, and users everywhere will love my application.
Here are some key distinctions between different kinds of programs or software:
- System software v application software: Generally speaking application software runs ON system software. System software includes things like the operating system (OS), the kernel, device drivers, firmware, the user interface. Something blur the line: low-level utilities and programming tool like compilers.
- Horizontal apps v vertical apps: Horizontal apps can be use broadly (like a text editor), whereas vertical apps serve a niche purpose (like for a specific process in a particular company).
- Web apps v native apps: A web app runs in a browser and the code comes from a web server so web apps work on many devices. A native app is written in a language for the particular type of device so native apps may access device specific features.
In actuality, programs rarely stand entirely by themselves. Software and chunks of programs can be programmed to serve other software and other chunks of programs. It all gets very complicated with systems and sub-systems and sub-sub-systems. It might be said that the Internet is a single living program and probably the most complicated system ever devised by humanity.