Fermer

mai 7, 2018

Les premiers principes de la programmation



J'ai récemment écrit un guide de 80 pages sur la façon d'obtenir un travail de programmation sans diplôme basé sur mon expérience en aidant les étudiants à faire exactement cela à Springboard . Cet extrait est une partie où je me concentre sur les premiers principes de la programmation, un squelette qui vous aidera à apprendre plus efficacement. C'est l'approche de l'apprentissage qu'Elon Musk privilégie – et c'est quelque chose qui peut vous aider à revenir à la base de l'apprentissage de la programmation efficace.

1- La programmation consiste à manipuler des données

À la base, la programmation consiste à déplacer des données et à jouer avec. Lorsque vous envoyez des identifiants de connexion à un serveur Web ou lorsque vous obtenez le chargement de votre photo de profil, le code envoie des données de part et d'autre. Si vous pouvez reconnaître que les données mobiles sont le fondement de la programmation, vous pouvez comprendre le sous-sol d'où vous allez construire votre maison.

2- La programmation est comme l'écriture – vous voulez être aussi clair que possible

Lorsque vous écrivez du code, vous pouvez le considérer comme une activité individuelle. Rien ne pourrait être plus éloigné de la vérité, malgré tous les stéréotypes qu'Hollywood a lancés sur l'archétype de la programmation. Lorsque vous programmez, vous devez imaginer que vous écrivez pour un public. La programmation est une activité collaborative, qui implique souvent de travailler avec des coéquipiers proches ou d'autres collaborateurs.

3- Connaître les différents types de programmation

Pensez-vous à la programmation comme un blob générique ou pouvez-vous le différencier en des parties spécialisées? Dire que vous voulez être un programmeur, c'est un peu comme dire que vous voulez être un ingénieur – le diable peut être dans les détails.

Nous reviendrons plus en détail sur les larges chemins techniques que vous pouvez suivre en tant que programmeur sur différents chemins, mais pour l'instant, nous pouvons distinguer quelques grandes différences.

La plus grande différence dans les types de programmation peut être considérée comme la différence entre la programmation "frontale" et la programmation "back-end". Le frontal implique de manipuler ce qu'un utilisateur voit directement: pensez à l'interface que vous voyez lorsque vous vous connectez à une interface Web. Le back-end est l'ensemble de la magie qui se passe à l'aveuglette – la façon dont les serveurs traitent votre mot de passe et vous donnent accès à toutes vos données.

Les différents paradigmes de la programmation

Il existe également différents types de paradigmes de programmation: différentes façons d'exprimer la logique, et différentes fonctionnalités pour chaque langage de programmation qui, au niveau agrégé, peuvent être résumées en différences catégorielles.

Voici un aperçu des principaux paradigmes de la programmation:

  • Déclaratif. La programmation déclarative est très simple et simple. Il exprime la logique d'un calcul particulier sans spécifier son flux. La façon la plus simple d'y penser est un langage de programmation qui
  • déclare quelle tâche est faite plutôt que comment cela doit être fait. Les exemples incluent les langages de programmation comme SQL, dont la syntaxe est axée sur la spécification explicite exacte de ce que vous voulez, par opposition à la spécification de la façon dont cela est fait (ex: la commande SELECT qui sélectionne les données). Les étapes sous-jacentes de la requête SELECT n'ont pas besoin d'être explicitement définies pour que la machine agisse sur sa logique sous-jacente.
  • Impératif . La programmation impérative se concentre sur la façon dont une tâche est faite plutôt que sur ce qui est fait, contrairement au modèle déclaratif. Tout comme dans le mode impératif du langage où les commandes sont données, le paradigme de la programmation impérative décrit aux machines comment elles doivent accomplir une tâche. Les langages impératifs incluent des langages tels que Java, JavaScript et Ruby, bien que tous aient aussi une logique orientée objet – et la plupart d'entre eux sont des langages multi-paradigmes compatibles avec une variété de paradigmes de programmation.
  • Fonctionnel . La programmation fonctionnelle est basée sur des fonctions mathématiques. Alors que là aussi, les commandes sont destinées à spécifier comment les routines sont effectuées plutôt que les routines, contrairement au paradigme impératif, l'état d'un programme en cours ne peut pas être affecté incidemment: ce que cela signifie dans la pratique sans rappel, puisque l'état du programme restera constant. La programmation fonctionnelle est soulignée dans le milieu universitaire avec des langages tels que Lisp et Clojure soutenant la programmation fonctionnelle en tant que paradigme.
  • Object-oriented Le paradigme de programmation dominant depuis les années 1980, la programmation orientée objet implique la construction d'objets avec des attributs de données et des sous-routines de programmation connues sous le nom de méthodes qui peuvent ensuite, à leur tour, être invoquées ou modifiées. Les langages tels que Java, Python, C, C ++, PHP et Ruby sont tous principalement orientés objet. De manière critique, contrairement à la programmation impérative ou fonctionnelle, le concept d'héritage et de réutilisabilité du code est solidement ancré dans les objets de programmation qui peuvent persister en tant que classes (définition de la définition d'un ensemble d'objets). qui correspondent souvent à des objets du monde réel et à une collection d'attributs qui leur sont associés.)

Il existe également des paradigmes de programmation, pour la plupart dépassés ou théoriques, qui tournent autour de la programmation procédurale, de la programmation logique et de la programmation symbolique. Recherche ceux si vous avez le temps, et comparez et contrastez!

4- La programmation est à propos de la simplicité forcée

Simple vaut mieux que complexe
Complexe vaut mieux que compliqué
Flat vaut mieux que niché
Sparse vaut mieux que dense.

– Le zen de Python

L'un des principes fondateurs de la programmation efficace est une sorte de simplicité forcée qui devient naturelle avec le temps et l'itération. Peut-être parfaitement résumé dans le Zen de Python simple est mieux que complexe – et complexe est mieux que compliqué. Tout comme la bonne écriture, qui nécessite parfois de se concentrer sur les bonnes idées et de supprimer autant de mots inutiles que possible, une bonne programmation signifie garder la logique sous-jacente exprimée simplement pour qu'elle soit lisible pour les autres et peut-être plus

5- De petites performances entraînent des gains importants

Quand on a affaire à une machine qui peut effectuer des opérations complexes en quelques secondes ou parfois en microsecondes, il peut être difficile de comprendre d'un point de vue humain comment gérer l'efficacité d'un tel système. Les humains sont notoirement mauvais à la pensée exponentielle et la programmation dépend de ce courant de pensée. Quelques microsecondes de différence en une opération peuvent signifier une différence de milliers d'heures lorsqu'elle est étendue à une chaîne d'opérations qui dépasse les billions.

Trois concepts peuvent vous aider à gérer cette complexité.

Complexité temporelle

Se familiariser avec le concept de complexité temporelle dans la programmation et en particulier grande notation O . En d'autres termes, la notation Big O trace un modèle de réponse d'un algorithme à un ensemble donné d'entrées.

Les algorithmes O (1) réagissent de la même façon quelle que soit la taille d'entrée qu'ils alimentent. Vous pouvez entrer une valeur ou un billion: – cela n'a pas d'importance, l'algorithme traitera en même temps. Un exemple commun de ceci est l'algorithme de retour ou d'impression dans la plupart des langages de programmation.

Les algorithmes O (N) réagissent linéairement aux entrées qu'ils reçoivent. Un million de points de données? Attendez-vous à ce qu'il s'exécute un million de fois plus lentement qu'avec un seul.

Les algorithmes O (N 2 ) réagissent exponentiellement aux entrées qu'ils reçoivent. Chaque entrée est mise au carré au fur et à mesure de son traitement. Pensez à un algorithme qui doit regarder deux fois les données à chaque itération. Avec un jeu de données deux fois plus grand qu'un autre, vous verrez rapidement une rafale exponentielle de temps quand il s'agit de la lenteur avec laquelle cet algorithme va traiter des jeux de données de tailles différentes.

Cela se passe dans une variété de configurations: [19659042] ce tutoriel a une liste plus complète et une explication plus complète. Le point à retenir est que vous devriez toujours vous efforcer d'utiliser des algorithmes qui évoluent le plus linéairement possible, sinon de grands ensembles de données deviendront ingérables.

Modularité

L'une des plus grandes choses à propos de la programmation est la possibilité d'étendre la logique qui a été sauvegardée auparavant. Vous n'avez pas à réinventer la roue à chaque fois: si vous avez construit un composant qui fonctionne, vous pouvez l'appeler à tout moment.

Ce concept simple de sauvegarde de parties de code pouvant être appelées comme un mélange de composants est appelé modularité, et c'est un dispositif indispensable pour gagner du temps pour des projets individuels. La modularité vous permet également de gagner du temps en collaboration. Vous pouvez travailler avec des personnes différentes sur un problème complexe et travailler sur une seule pièce puis faire interagir votre module avec ceux construits par d'autres pour former une solution plus grande.

Saisir les nuances de la modularité de vos programmes vous permettra non seulement de gagner du temps, mais aussi de rendre vos programmes plus forts et plus lisibles, et moins dépendants de gros blocs de code qui peuvent s'avérer infestés de bugs.

Raccourcis

Utilisez les raccourcis quand vous le pouvez! La programmation efficace consiste à mettre vos pensées et votre logique en forme de machine le plus rapidement possible. Cette table des raccourcis clavier vous aidera à accélérer. Des jeux tels que TypeRacer vous aideront à améliorer le nombre de mots par minute, ce qui vous permettra de transférer vos pensées plus rapidement dans le code.

La maîtrise des raccourcis vous permettra de construire des choses plus rapidement et de voir les résultats plus tôt que plus tard.

6- La pratique rend parfait

On dit souvent qu'il y a deux façons dont l'esprit humain voit la croissance: soit la mentalité fixe, soit la mentalité de croissance. Dans la mentalité fixe, la croissance humaine est une fonction du destin: peu importe combien vous essayez, vous ne pouvez jamais grandir au-delà de ce que les facteurs innés vous ont prescrit. La mentalité de croissance est l'opposé total de la mentalité fixe: ici, votre croissance n'est limitée que par le temps et votre volonté de faire quelque chose de grand.

Personne n'est naturellement né meilleur programmeur que quelqu'un d'autre. Vous devez travailler dur et mettre dans les heures si vous voulez améliorer vos compétences en programmation.

Cela s'étend aux interviews de programmation, un mal nécessaire. La barre est beaucoup plus haute que dans les conditions normales auxquelles vous vous êtes habitués: beaucoup de temps et beaucoup de ressources comme StackOverflow pour vous aider en cours de route (plus de détails plus tard). Une entrevue de programmation est conçue pour vous tester. Vous devrez vous habituer à pratiquer une forme de programmation sous contraintes, à la fois naturelles et artificielles: faire des ensembles de résolution de problèmes chronométrés, et ne compter que sur du papier pour esquisser quelques algorithmes.

7- Créer des programmes flexibles pour des besoins différents

L'une des plus grandes difficultés de la programmation est la nécessité de créer des choses qui peuvent fléchir et qui ne se cassent même pas sous ce qu'on appelle " ": différentes utilisations de votre logiciel qui peuvent défier les limites extrêmes des variables que vous avez définies. Le cas le plus facile à considérer est une application qui est devenue très populaire et doit supporter des milliers d'utilisateurs à la fois. Même le code le plus élégamment conçu va commencer à fatiguer que cela arrive.

8- Construire des choses utiles. Avoir de l'empathie et comprendre les problèmes de vos utilisateurs.

La plupart des gens oublient que la technologie n'est pas seulement une compétence à utiliser pour s'amuser. La technologie est un moyen pour une fin. N'oubliez pas que vous ne construisez pas pour le plaisir de bâtir: vous construisez pour un utilisateur final ou pour résoudre un problème significatif qui ne peut être résolu sans la technologie. Sachez quand construire quelque chose avec du code, et sachez quand vous n'avez pas à le faire.

Si quelqu'un a déjà construit la roue, il n'est pas nécessaire de le réinventer. Beaucoup de gens ont construit des solutions pour aborder la façon de stocker les contacts de vente – mais y a-t-il des problèmes qui restent invisibles? Des tonnes! Et chacun pourrait être la base d'un projet réussi.

Construisez des choses utiles avec vos compétences en programmation . C'est la meilleure façon d'utiliser vos compétences pour de bon et de les mettre en évidence pour les autres.

Maintenant, que signifie utile? C'est le noeud du problème. Dans un monde rempli d'applications pour tous les besoins de luxe et de consommation, il peut être difficile de voir exactement ce que les moyens utiles. Dans ce contexte il est important de pratiquer l'empathie et de diagnostiquer des problèmes réels pouvant être résolus par des solutions technologiques . Ceci, notamment, ne doit pas se limiter à des problèmes qui peuvent être résolus dans un but lucratif. Il y a beaucoup de place pour la technologie pour les initiatives de bien social ou pour les technologues pour résoudre les problèmes sociaux. Cette étude de cas sur la science des données pour un organisme de développement international et de revenu de base GiveDirectly en fournit un bon exemple.

Pour devenir le technologue le plus influent possible, il est important de comprendre les problèmes. savoir quand et comment poser les bonnes questions, comment écouter et découvrir les problèmes sous-jacents auxquels les gens sont confrontés. Avec la bonne dose d'empathie et de perspective, vous pouvez construire des choses utiles au maximum qui aident à résoudre des problèmes pour les autres.

9 Tirez profit du plus de ressources possible, et redonnez quand vous le pouvez

Allez sur des communautés telles que Hacker News et Quora . Rechercher des questions sur StackOverflow – et même en demander quelques-unes si vous êtes bloqué sur quoi que ce soit! Recherchez des dépôts Github géniaux qui contiennent toutes les ressources dont vous auriez besoin pour apprendre un sujet particulier: voir, par exemple, Awesome Python pour une liste de ressources organisées dans l'espace Python.

Et n'ayez pas peur de l'échec. Vous apprendrez en cours de route, pratiquant vos compétences et devenant de mieux en mieux chaque jour qui passe, quel que soit le résultat.

Vous voulez plus de matériel comme celui-ci? Découvrez mon guide sur la façon d'obtenir un travail de programmation sans diplôme .

Ce message fait partie de la série de nos contributeurs. Les opinions exprimées sont celles de l'auteur et ne sont pas nécessairement partagées par TNW.




Source link