Article original : The Parallel Threads of Life and Programming

Je suis convaincu que notre désir le plus profond est, en payant le coût du temps, de voir un aperçu de quelque vérité fondamentale sur l'univers. De l'entendre murmurer ses leçons et pointer vers son but.

Et, si vous cherchez assez fort ces leçons, vous les trouverez. Qu'elles soient une manifestation de votre esprit ou qu'elles puissent être tenues dans votre main, une fois que vous les voyez, elles restent vôtres pour toujours.

La programmation offre des parallèles significatifs avec la vie. Nous sommes chargés de créer quelque chose – quelque chose dont la somme semble plus significative que les parties. Comme la vie, c'est un test de créativité limitée. Il y a des règles que nous devons suivre, certaines que nous devrions suivre, et d'autres que nous sommes libres d'ignorer. La programmation nous offre un aperçu, aussi éphémère soit-il, de certaines vérités fondamentales sur le monde dans lequel nous résidons.

Les quatre parallèles entre la programmation et la vie

L'itération est un progrès.

Saviez-vous que, si vous commençiez le mois avec un seul centime et qu'il doublait chaque jour, vous auriez 163 $ le 15 du mois ? Surely, vous pensez, il doit y avoir une meilleure façon de gagner 163 $ en 15 jours. Mais, si vous attendez encore 15 jours, vous auriez plus de 5 millions de dollars.

Allez-y, je vais attendre pendant que vous faites le calcul.

En programmation, nous utilisons le terme itérer pour indiquer la répétition de quelque chose. Dans une définition plus formelle, il s'agit de l'application répétée d'une procédure au résultat précédent de cette procédure. Par exemple, ajouter les nombres 1 et 1 pour obtenir 2, puis ajouter 1 et 2 pour obtenir 3, et ainsi de suite.

Lorsque nous itérons, nous cherchons des commentaires. Nous attendons qu'une certaine condition soit remplie pour pouvoir soit arrêter d'itérer, soit ajuster comment nous itérons. Si nous échouons à écouter ces commentaires, nous pouvons nous retrouver dans une boucle infinie.

La vie n'est pas différente. Nous nous attendons souvent à pouvoir sauter du point A au point B sans jamais définir ce que sont le point A ou le point B. Et, même lorsque nous identifions ces points, nous nous attendons à un déplacement immédiat du début à la fin. Au lieu de cela, ce qui est souvent la vérité, c'est que nous devons progresser de manière incrémentielle du début à la fin. Nous devons écouter les commentaires qui nous disent où nous en sommes pour pouvoir faire des ajustements.

Lorsque nous avons des objectifs, le progrès peut souvent sembler – pendant les premiers jours, semaines, voire mois – inexistant. Nous sommes souvent tentés de recommencer ou de repartir à zéro. Mais en faisant cela, nous ne réalisons pas que, bien que nous n'ayons peut-être pas atteint notre destination, nous sommes quelque part bien au-delà de notre point de départ. Un redémarrage complet n'est pas nécessaire, nous devons simplement faire quelques ajustements mineurs.

Arrêtez de recommencer. Laissez l'itération être la force qui crée le progrès.

La plupart des problèmes complexes sont des collections de problèmes plus petits qui ont déjà été résolus.

Même les applications les plus fascinantes sont une série de solutions principalement banales à des problèmes banals. En fait, la plupart des solutions mises en œuvre dans un programme ne sont rien d'unique. C'est la combinaison de ces solutions ordinaires qui crée un produit extraordinaire.

En programmation, il existe différentes façons d'utiliser ces solutions assez ordinaires. Une façon est par le biais d'un terme appelé abstraction. Abstraire quelque chose, c'est éloigner quelque chose d'autre.

En programmation informatique, lorsque nous abstraisons quelque chose, nous construisons souvent une technologie de niveau supérieur sur une technologie de niveau inférieur. Cela facilite le travail avec les technologies de niveau inférieur.

Par exemple, la plupart des langages de programmation sont des abstractions du langage binaire énigmatique (0 et 1). Ils mettent une couche entre nous et un niveau d'interaction plus fondamental, mais encombrant, avec l'ordinateur. Ces langages de niveau supérieur nous permettent de nous concentrer sur des problèmes de niveau supérieur.

Une autre façon de résoudre les problèmes plus efficacement est d'utiliser les solutions de quelqu'un d'autre. Vous avez peut-être aussi entendu le terme bibliothèque. Et, bien que je ne parle pas d'un endroit mal éclairé, poussiéreux et silencieux où vivent les livres, ce n'est pas loin.

Une bibliothèque, en termes de programmation, est un code que quelqu'un d'autre a écrit et qui résout des problèmes routiniers. Elle abstrait également les choses qui ne sont pas absolument fondamentales pour résoudre le problème que vous avez.

Par exemple, si vous écrivez un programme qui nécessite que quelqu'un se connecte pour utiliser votre application, vous pourriez écrire le code pour chiffrer et déchiffrer les mots de passe vous-même, ou, vous pourriez utiliser le code écrit par quelqu'un d'autre pour le faire pour vous. Avec la deuxième option, nous libérons du temps pour nous concentrer sur des problèmes plus significatifs que notre application essaie de résoudre.

Nous utilisons tous des abstractions et des bibliothèques sous une forme ou une autre. Par exemple, le magasin d'alimentation est une abstraction de la production de notre propre nourriture. Une voiture est une abstraction du voyage à pied. Un four est une abstraction de la construction d'un feu. Ce sont des couches que nous plaçons devant nous et qui nous permettent d'allouer du temps à des problèmes de niveau supérieur.

Réinventez la roue seulement pour apprendre à faire une roue, pas pour conduire au magasin.

Comment vous définissez un problème est la façon dont vous le résoudrez.

Rappelez-vous l'histoire d'un camion qui a roulé sous un pont et s'est coincé. Les ingénieurs ont passé des heures à essayer de comprendre comment déplacer le pont. Un petit enfant est arrivé, face à face avec les pneus du camion, et a dit : « Et si vous laissiez l'air sortir des pneus ? »

Du point de vue de l'enfant, le problème n'était pas que le pont était trop court, mais plutôt que le camion était trop haut.

La plupart des gens peuvent résoudre n'importe quel problème. En fait, la plupart des problèmes énoncent la solution. Par exemple, si le pont cause le problème, la réponse est de faire quelque chose avec le pont. Si, cependant, le problème est que le camion est trop haut, alors la solution – presque évidemment – est de rendre le camion plus court.

L'arrangement des parties est beaucoup plus important que les parties elles-mêmes.

Qu'ont en commun le code source de Google Maps, la Déclaration d'Indépendance, le discours I have a dream de Martin Luther King Jr., le discours de remise des diplômes de Steve Jobs en 2005, et ma première application, Hello, World ?

L'accès aux mêmes 26 lettres de l'alphabet anglais.

Il y a très peu de choses qui me fascinent plus que le mot écrit. Le mot écrit est l'une des technologies les plus puissantes qui ont émergé des humains.

Oui, j'utilise le terme technologie parce que – même gravé dans le mur d'une grotte – il a fondamentalement changé la façon dont nous persistons l'information. Les données n'étaient plus contraintes dans les limites de nos esprits.

Bien que le but du mot écrit était initialement lié à la tenue de registres, il est rapidement devenu un moyen de diffuser des idées. Certaines de ces idées provoqueraient la colère, et d'autres inspireraient.

Chaque langue (y compris le langage informatique) a des subtilités lors de la transmission d'informations par écrit ou par la parole. Les mots et leurs parties constituantes peuvent être légèrement différents. Pourtant, une langue est un ensemble de symboles qui peuvent être arrangés en ce qui semble être un nombre infini d'idées.

Par exemple, en langue anglaise, il y a environ 29 symboles que je peux utiliser pour représenter presque tout mon univers. J'ai mentionné les 26 lettres, mais il est également utile d'avoir accès aux points, aux virgules et aux points d'interrogation.

Ces 29 caractères sont disponibles pour vous, moi, et étaient disponibles pour Steve Jobs. Pourtant, chacun de nous, tout au long de notre vie, suivra des trajectoires différentes en fonction de la combinaison de lettres que nous avons choisi de croire et de prononcer pour les faire exister.

Intéressamment, bien que nous ajoutions souvent des mots au dictionnaire, nous n'ajoutons généralement pas de lettres. Cela signifie, au niveau le plus fondamental, que toutes les idées qui peuvent exister, existent déjà, avec leurs parties constituantes attendant silencieusement que nous les arrangions pour les faire exister.

Les Brown résume bien cela avec cette expérience de pensée :

Imaginez, si vous le voulez, être sur votre lit de mort. Et debout autour de votre lit – les fantômes des idées, des rêves, des capacités, des talents que la vie vous a donnés.

Et que vous, pour une raison quelconque, n'avez jamais agi sur ces idées. Vous n'avez jamais poursuivi ce rêve. Vous n'avez jamais utilisé ces talents. Nous n'avons jamais vu votre leadership. Vous n'avez jamais utilisé votre voix. Vous n'avez jamais écrit ce livre.

Et les voilà, debout autour de votre lit, vous regardant avec de grands yeux en colère disant : « Nous sommes venus à vous. Et seul vous pouviez nous donner la vie ! Maintenant, nous devons mourir avec vous pour toujours. »

La question est – si vous mourez aujourd'hui – quelles idées, quels rêves, quelles capacités, quels talents, quels dons, mourraient avec vous ?

Merci d'avoir lu !

woz

Suivez-moi sur Twitter