Topic 3 The basis of programming

The 1999 NRC report “Being Fluent with Information Technology” addressed the role of programming in achieving fluency with information technology. The report defined programming as the construction of a specification (sequence of instructions or program) for solving a problem by an agent other than the programmer. Programming entails decomposing the problem into a sequence of steps and specifying them sufficiently precisely, unambiguously, and primitively that the interpreting agent, usually a computer, can effectively realize the intended solution.

This video attempts to answer the following question in a high level way: “What is programming?”

What is programming? – Processing Tutorial

The different paradigms of programming

There are different types of programming paradigms: different ways to express logic, and different functionalities for each programming language that at an aggregate level, can be summed up into categorical differences.

Here is an overview of the major paradigms in programming:

Declarative. Declarative programming is very simple and plain. It expresses the logic of a particular computation without specifying its flow. The easiest way to think about it is a programming language that declares what task is being done rather than how it should be done. Examples of this include programming languages like SQL, whose syntax is focused on explicitly specifying exactly what you want as opposed to specifying how it’s done (ex: the SELECT command which selects data). The underlying steps behind the SELECT query do not have to be explicitly defined for the machine to act upon its underlying logic.

Imperative. Imperative programming focuses on how a task is being done rather than what is being done, unlike the declarative model. Much like how in the imperative mode of language where commands are given, the imperative programming paradigm describes to machines how they should carry out a task. Imperative languages include languages such as Java, JavaScript, and Ruby, though all of them also have object-oriented logic as well — and most of them are multi-paradigm languages that are compatible with a variety of programming paradigms.

Functional. Functional programming is based on mathematical functions. While here too, commands are meant to specify how routines are carried out rather than what routines are carried out, unlike in the imperative paradigm, the state of a current program cannot be affected incidentally: what this means in practice is that you can have functions without return calls, since the program state will remain constant. Functional programming is emphasized in academia with languages such as Lisp and Clojure prominently supporting functional programming as a paradigm.

Object-oriented. The dominant programming paradigm since the 1980s, object-oriented programming involves building objects with data attributes and programming subroutines known as methods which can then, in turn, be invoked or modified. Languages such as Java, Python, C, C++, PHP, and Ruby are all principally object-oriented. Critically, unlike imperative or functional programming, the concept of inheritance and code reusability are firmly entrenched in programming objects which can persist either as classes (the definition of how a set of objects is defined, and what data they can carry) or objects themselves (which often correspond to real-world objects and a collection of attributes associated with them).

(Source: https://thenextweb.com/contributors/2018/05/07/first-principles-of-programming/)

Read this research that gives a strong indication that the use of computers as a tool for problem solving enhances the students’ abilities in solving real world problems involving mathematical modelling.

Problem Solving and Computational Thinking in a Learning Environment

(Problem_Solving_and_Computational_Thinking_in_a_Le.pdf)

If somebody has already built the wheel, there’s no need to reinvent it. Plenty of people have built solutions to address how to store sales contacts — but are there problems out there that remain unseen? Tons! And each could be the foundation for a successful project. 

Think of a program that could be useful to the real world.

Computer programming is one of the most well known applications of computational thinking. There are different paradigms of programming that each facilitates different needs. Programming is connected to the real world as computer programs aim to provide solutions that can facilitate our living.