Ces deux termes désignent l'activité de concevoir des algorithmes et des programmes . Si cette activité est principalement le fait des informaticiens, il est important de connaître les notions essentielles de la programmation pour être un acteur du monde numérique (voir, par exemple, le discours, donné en activité, d'un récent président des États-Unis).

On souhaite ajouter une nouvelle fonctionnalité à une machine. Il faut donc la coder (ou la programmer) ce qui va se faire en deux étapes : concevoir un algorithme puis écrire le programme correspondant. Il est important de remarquer que le plus difficile est de concevoir un bon algorithme alors que programmer n'est que traduire cet algorithme dans le langage choisi. Nous allons décrire deux principes de conception.

La démarche la plus souvent utilisée est celle de la conception descendante qui consiste à décomposer le problème en des problèmes de plus en plus simples. Notons que c'est une démarche courante. En effet, si je dois me rendre de mon domicile à Lille à l'hôtel Arosfat à Londres par le train, je vais décomposer le problème en problèmes plus simples : aller de mon domicile à la gare TGV, prendre le TGV, aller de la gare St Pancras à l'hôtel. On peut alors continuer le processus de décomposition. Par exemple, aller de la gare St Pancras à l'hôtel peut se décomposer en : se rendre au terminus des navettes, si une navette est disponible rapidement, prendre la navette, sinon se rendre au métro, ... On arrête la décomposition lorsque tous les sous-problèmes introduits correspondent à des fonctionnalités de base de notre langage. On peut alors expliciter un algorithme (ou des algorithmes) pour définir la fonctionnalité attendue puis les traduire dans des programmes.

La démarche inverse qui consiste à imaginer sa solution à partir des fonctionnalités de base est la conception ascendante . Rappelons que les nouvelles fonctionnalités peuvent, à leur tour, être considérées commes des fonctionnalités de base ce qui permet de recommencer le processus pour créer de nouvelles fonctionnalités encore plus riches. Les environnements de programmation permettent de ranger l'ensemble de ces fonctionnalités dans des bibliothèques, à l'image des livres et des connaissances.

On peut comprendre les machines actuelles, comme construites selon ce principe en partant de fonctionnalités de base avec un empilement de couches applicatives de plus en plus riches. Par conséquent, aujourd'hui, la plupart des besoins, personnels ou professionnels, des utilisateurs sont couverts par une ou plusieurs applications. Ceci fait dire à certains qu'il est inutile de savoir coder ou programmer. Nous pensons, a contrario , que bien comprendre les notions de base sur les algorithmes et les programmes permet de bien comprendre le fonctionnement des machines et des applications. Et c'est même oublier que le monde est riche, en perpétuelle évolution et demande à chaque évolution de nouveaux développements informatiques. Programmer c'est faire preuve de créativité. Le lien entre création et numérique est encore rendu plus explicite par la programmation créative : elle vous permet de définir de nouvelles formes d'expressions artistiques sonores ou visuelles.