Article original : 7 Questions New Developers Ask When Learning How to Code

Si vous êtes relativement nouveau en programmation, vous avez sûrement quelques questions – comment commencer, quoi apprendre en premier, que signifie vraiment le "développement front-end"...

Dans cet article, j'ai partagé 7 questions que je me posais lorsque j'ai commencé à apprendre à coder il y a environ 20 ans (waouh, maintenant je me sens vieux). Et j'y ai répondu aussi complètement que possible pour vous aider à commencer votre parcours en programmation.

Quel langage de programmation devrais-je apprendre en premier ?

À mon avis, cela n'a pas vraiment d'importance ! Il existe certainement des langages plus faciles à apprendre pour les débutants, comme Python, Ruby ou JavaScript. Mais la plupart des langages de programmation ont beaucoup de points communs, et les concepts de base sont généralement assez similaires.

Dans la plupart des cas, la syntaxe (les mots-clés, la structure et la sémantique) des langages diffère beaucoup plus que les concepts sous-jacents.

Une fois que vous maîtrisez les bases de n'importe quel langage de programmation, il devient beaucoup plus facile d'en apprendre un autre. Il est également probable que le langage que vous apprenez en premier ne soit pas celui que vous utiliserez principalement dans votre travail ou vos projets parallèles.

Par exemple, j'ai commencé avec Python à l'époque, j'ai expérimenté avec JavaScript et PHP, mais j'utilise maintenant Java pour mon travail et mes projets parallèles.

Bien sûr, vous ne voulez probablement pas commencer par apprendre un langage obscur et difficile qui n'est pas couramment utilisé. Mais vous ne pouvez pas vraiment vous tromper en commençant par un langage moderne populaire comme Python, Java, Ruby ou JavaScript.

La partie la plus importante n'est pas le langage que vous apprenez en premier, mais le fait que vous commeniez réellement et que vous amélioriez progressivement vos compétences au fil du temps. En résumé, concentrez-vous sur la maîtrise des concepts essentiels de la programmation plutôt que sur la syntaxe d'un langage spécifique.

Comment catégorise-t-on les langages de programmation ?

Bien que la plupart des langages de programmation aient beaucoup de points communs, il existe de nombreuses façons d'organiser les langages en diverses catégories.

Ces catégories sont utilisées pour regrouper les langages ayant une caractéristique ou un trait particulier, bien que deux langages ayant un trait commun puissent très bien différer à d'autres égards.

Voici 5 des catégories de langages de programmation les plus utiles pour les nouveaux développeurs :

  • Langages de programmation compilés

  • Langages de programmation interprétés

  • Langages de programmation à typage statique

  • Langages de programmation à typage dynamique

  • Langages de programmation orientés objet

Ci-dessous, une brève description de chacune de ces catégories, ainsi qu'une courte liste de langages pour chacune.

Langages de programmation compilés

Un langage compilé est un langage qui utilise un compilateur pour convertir le code source (le code que vous écrivez vous-même) en une forme que l'ordinateur sait comprendre (souvent appelée code machine).

Généralement, la sortie du compilateur est enregistrée dans un ou plusieurs fichiers appelés exécutables. Les exécutables peuvent être conditionnés pour la vente et la distribution dans des formats standard qui facilitent le téléchargement, l'installation et l'exécution du programme par les utilisateurs.

Une caractéristique importante du processus de compilation est que le code source est compilé avant que le programme ne soit exécuté par l'utilisateur final. En d'autres termes, la compilation du code a généralement lieu séparément de l'exécution du programme.

Langages compilés populaires :

  • C

  • C++

  • Java

  • Rust

  • Go

Langages de programmation interprétés

Un langage interprété est un langage qui utilise un interpréteur pour convertir le code source (le code que vous écrivez vous-même) en une forme que l'ordinateur sait comprendre.

Un interpréteur est un programme qui prend un ensemble de code source écrit dans un langage de programmation spécifique, le convertit en une forme que l'ordinateur peut comprendre et l'exécute immédiatement en temps réel.

Une différence principale entre la compilation et l'interprétation est que le processus d'interprétation n'a pas de décalage entre la conversion du code et son exécution – ces deux étapes se produisent au moment de l'exécution du programme ou à la volée. Alors qu'avec la compilation, la conversion du code a lieu à l'avance (parfois bien à l'avance) de l'exécution du programme.

Langages interprétés populaires :

  • Python

  • JavaScript

  • Ruby

Langages de programmation à typage statique

Le typage statique signifie que les types de données des variables dans un langage de programmation sont connus et établis au moment où le programme est compilé. De plus, le type de données d'une variable n'est pas autorisé à changer pendant la compilation ou l'exécution du programme.

Par exemple, chaque fois que vous créez une variable dans un langage à typage statique, vous devez spécifier explicitement le type de données de cette variable. Ce type de données pourrait être un entier, une chaîne de caractères, un booléen, etc. Cela s'appelle la déclaration de variable. Une fois que vous avez déclaré le type de données d'une variable, elle ne peut contenir que ce type de données tout au long de l'exécution du programme.

Langages à typage statique populaires :

  • C

  • C++

  • Java

Langages de programmation à typage dynamique

Le typage dynamique signifie que les types de données des variables sont établis pendant l'exécution du programme, également connu sous le nom de runtime.

Les types de données des variables ne sont pas explicitement indiqués dans le code source et les variables peuvent être facilement réaffectées pour stocker des valeurs de n'importe quel type de données à la volée.

Langages à typage dynamique populaires :

  • Python

  • JavaScript

  • Ruby

Langages de programmation orientés objet

La programmation orientée objet (POO) est un paradigme de codage qui permet aux programmeurs de créer et de travailler avec des "objets". Un objet est une représentation ou un modèle de quelque chose que le programmeur doit décrire via le code.

Cela semble probablement super vague, et c'est le cas. Pratiquement n'importe quoi peut être modélisé comme un "objet" en code. Les objets représentent souvent des choses réelles, comme les produits à vendre dans un magasin ou les clients qui achètent ces produits.

Mais les objets peuvent également représenter des choses numériques telles que des formulaires web, et même des choses plus abstraites comme des points de terminaison d'URL, des sockets réseau, etc.

La programmation orientée objet est généralement implémentée dans un langage à l'aide de classes. Vous pouvez considérer une classe comme un modèle (ou un template) pour le type d'objet qui est créé.

Une classe contient un ensemble d'attributs (propriétés ou caractéristiques) qui définissent chaque objet de la classe. Les classes contiennent également un ensemble de méthodes (fonctions) qui permettent d'effectuer des opérations sur des objets spécifiques de la classe.

Par exemple, une classe "Produit" pourrait avoir les attributs suivants :

  • SKU du produit (identifiant unique pour chaque produit)

  • Nom du produit (nom descriptif pour chaque produit)

  • Type de produit

  • Prix du produit

  • Réduction du produit

Comme mentionné, une classe est vraiment juste un modèle pour créer des objets. La création d'un objet en utilisant une classe comme modèle est appelée instanciation. Vous pouvez créer autant d'objets que vous le souhaitez à partir de la même classe, et chaque objet créé est appelé une instance de cette classe. L'instance est généralement stockée comme une variable dans le code que vous pouvez utiliser selon vos besoins en interagissant avec ses attributs et méthodes.

En continuant avec notre exemple, vous pouvez utiliser notre classe "Produit" ci-dessus pour créer plusieurs objets de type "Produit". Chaque produit aurait son propre ensemble de valeurs d'attributs, telles que SKU, nom, type, prix et réduction.

Représenter des ensembles structurés de données de cette manière orientée objet peut être une façon très intuitive pour les programmeurs d'écrire et d'organiser leur code. Cela est probablement dû au fait que les humains ont tendance à être naturellement bons pour penser en termes d'entités identifiables qui existent dans le monde réel.

Quelle est la différence entre le développement front-end, back-end et full-stack ?

En tant que nouveau développeur, vous avez probablement parcouru des offres d'emploi dans le domaine de la technologie et remarqué la mention fréquente des termes "front-end", "back-end" et "full-stack".

Ces termes font généralement référence à la partie de l'application sur laquelle vous travaillerez. De plus, ils impliquent également que vous travaillerez sur une application logicielle, généralement une application web ou une application mobile.

Le front-end fait référence aux parties de l'application avec lesquelles les utilisateurs (également appelés "clients") interagissent directement. Pour une application web, le front-end est l'ensemble des pages web (et des fonctionnalités) qui sont présentées dans le navigateur de l'utilisateur. Pour une application mobile, le front-end est l'ensemble des écrans avec lesquels l'utilisateur interagit sur son appareil mobile.

Les tâches de développement liées au front-end incluent la conception de l'expérience utilisateur, la création de l'interface utilisateur, la gestion des réseaux côté client, l'intégration et l'utilisation de bibliothèques côté client, ainsi que la collecte/validation/soumission des entrées utilisateur.

En tant que développeur front-end, vous implémenterez ces tâches principalement en utilisant HTML pour définir la structure des pages web, CSS pour ajouter du style et JavaScript pour ajouter de l'interactivité.

Le back-end fait référence aux parties de l'application qui fonctionnent en arrière-plan et ne sont pas présentées directement à l'utilisateur/client.

Le back-end inclut généralement un serveur web qui gère les connexions HTTP reçues du client front-end (généralement un navigateur web). Le serveur web gère ces connexions et les dirige vers le code back-end qui effectue la logique nécessaire pour répondre au client. Cette partie du back-end est appelée routing ou API (interface de programmation d'application).

Le code back-end lui-même est traditionnellement une base de code monolithique autonome qui est déployée comme une seule unité. Mais selon l'architecture de l'application, le code back-end peut fonctionner comme un ensemble de fonctions serverless s'exécutant sur un service cloud plutôt que comme une base de code autonome.

Le code back-end valide les entrées utilisateur, applique la logique métier, interagit avec le stockage de données tel qu'une base de données et élabore une réponse qui est renvoyée au client front-end.

Maintenant que nous avons couvert le front-end et le back-end, le développement full-stack est facile ! :) Le full stack inclut simplement à la fois le front-end ET le back-end ! Le terme "full stack" vient du terme "stack" qui est une forme abrégée de "software stack". La stack logicielle est l'ensemble des outils, frameworks, langages de programmation et systèmes d'exploitation utilisés pour supporter une application.

Quelles sont quelques stacks logicielles populaires ?

Maintenant que nous savons ce qu'est une stack logicielle, nous allons brièvement discuter de quelques options populaires parmi lesquelles vous pouvez choisir.

Stack LAMP (Linux, Apache, MySQL, PHP)

La stack LAMP est une stack back-end éprouvée et standard de l'industrie qui utilise le système d'exploitation Linux comme base. Par-dessus, vous utilisez un serveur web Apache pour gérer les requêtes web et les diriger vers une base de code PHP. Les données sont stockées dans une base de données MySQL, qui est une plateforme de base de données relationnelle libre et open-source (FOSS).

Cette stack est idéale pour des sites web de contenu assez standardisés comme les blogs.

Vous avez peut-être remarqué que je n'ai pas explicitement mentionné d'outils front-end comme faisant partie de cette stack – cela signifie donc que LAMP est une stack back-end.

Stack MEAN (MongoDB, Express.js, Angular.js, Node.js)

La stack MEAN est une stack plus moderne qui utilise la plateforme de base de données non structurée MongoDB pour stocker les données. Vous utilisez Express.js comme framework web back-end et Angular.js pour le front-end. Enfin, vous utilisez Node.js pour exécuter JavaScript sur le back-end.

Un avantage majeur de la stack MEAN est que tous les composants sont conçus pour fonctionner nativement avec le langage de programmation JavaScript, via JSON (JavaScript Object Notation).

Notez que les composants de cette stack sont orientés à la fois vers le front-end (Angular.js) et le back-end (MongoDB, Express.js, Node.js), donc MEAN peut être considérée comme full stack.

Stack MERN (MongoDB, Express.js, React.js, Node.js)

Comme vous pouvez probablement le voir, la stack MERN est très similaire à la stack MEAN, sauf qu'elle utilise la bibliothèque React.js pour le front-end au lieu d'Angular.js.

Cette stack est bien adaptée aux développeurs qui aiment React pour son style flexible et intuitif de création d'interfaces utilisateur.

Frameworks notables

Je voulais prendre un bref moment pour souligner deux autres frameworks back-end populaires (et non des stacks) que vous pouvez incorporer ou échanger pour des composants spécifiques des stacks mentionnées ci-dessus.

Spring Boot est un framework Java (techniquement un cas spécial du framework Spring plus large) qui est excellent pour développer du code back-end Java pour les applications web et les applications mobiles. Si vous êtes nouveau dans la programmation Java, je vous recommande vivement de le découvrir.

Django est un framework Python qui est spécifiquement conçu pour être utilisé avec le langage de programmation Python. Si vous préférez construire des applications web en Python, cela vaut définitivement la peine de s'y intéresser.

Comment les développeurs collaborent-ils sur du code sans être dans la même pièce ?

Lorsque j'ai commencé à coder, j'ai ouvert un éditeur de texte Python sur ma machine locale et j'ai créé un seul fichier qui a grandi pour contenir tout le code de mon projet. J'ai rapidement trouvé que cela devenait ingérable, alors j'ai divisé mon code en plusieurs fichiers Python .py (ou modules comme on les appelle).

Lorsque je codais avec un ami, il était généralement assis derrière moi pendant que je tapais, ou j'étais assis derrière lui. Si nous devions échanger des extraits de code ou des fichiers, nous les envoyions simplement par e-mail.

Cela a pris des années avant que j'apprenne comment les développeurs collaborent avec succès en codant, et que cela se fait souvent à distance.

La clé d'une collaboration réussie sur le code est d'apprendre à utiliser un système de contrôle de version (VCS). Un VCS est un outil qui suit les changements que plusieurs développeurs apportent aux fichiers de code au fil du temps, et permet aux développeurs de travailler efficacement ensemble sur le même ensemble de fichiers.

Les systèmes de contrôle de version créent un dépôt qui stocke les données nécessaires pour recréer n'importe quelle version des fichiers de code tels qu'ils existaient à des moments spécifiques. Cela s'appelle le contrôle de version.

Les systèmes de contrôle de version sont des outils très polyvalents, car ils servent plusieurs fonctions utiles pour les équipes de développement :

  • Suivi des changements apportés aux fichiers de code

  • Permet aux développeurs de partager facilement leurs changements avec les autres et d'accéder aux changements apportés par les autres

  • Offre des moyens simples pour fusionner les changements de code apportés par plusieurs développeurs ou équipes

  • Fournit une sauvegarde complète de l'historique du code d'un projet au fur et à mesure de son évolution, et un moyen de restaurer efficacement n'importe quelle version précédente du code

  • Permet aux développeurs de gérer facilement les conflits de code sur les mêmes lignes des mêmes fichiers

  • Fournit divers autres outils pour améliorer la collaboration et l'efficacité de l'équipe

Il existe de nombreux systèmes de contrôle de version, mais vous en avez presque certainement entendu parler d'un : GitHub.

En fait, GitHub lui-même n'est pas un système de contrôle de version. GitHub est une entreprise qui fournit l'hébergement en ligne pour les projets utilisant le contrôle de version. GitHub tire son nom du système de contrôle de version spécifique qu'il utilise : Git.

La première version de Git a été créée en 2005, et elle est devenue de loin le système de contrôle de version le plus connu et le plus populaire de la planète. Git est utilisé par la grande majorité des équipes de développement aujourd'hui, et c'est un outil essentiel à apprendre si vous prévoyez de coder professionnellement.

Est-ce que le système d'exploitation que j'utilise a de l'importance ?

En ce qui concerne l'apprentissage de la programmation pour la première fois, je répondrais à cette question de manière similaire à la première de cette liste. Je pense que ce qui compte beaucoup plus que le système d'exploitation que vous avez, c'est que vous commenciez à apprendre dès que possible avec ce que vous avez.

Cela dit, je pense que ma réponse serait une échappatoire si je m'arrêtais là. Supposons que vous essayez de prendre une décision active sur le système d'exploitation à choisir pour le travail de codage.

En tenant compte du fait qu'il existe de nombreuses raisons subjectives pour lesquelles les gens préfèrent leur système d'exploitation, à mon avis, un système d'exploitation qui fournit un accès à un terminal de ligne de commande de qualité peut être très utile pour comprendre.

Pour cette raison, ma préférence va aux systèmes d'exploitation de type Unix tels qu'une distribution Linux ou MacOS si possible pour le travail de développement. Pour être tout à fait honnête – je développe principalement sur MacOS.

Ma raisonnement est que l'apprentissage du travail sur la ligne de commande (un peu comme l'apprentissage de l'utilisation de Git) est une compétence essentielle en programmation à apprendre. Une ligne de commande complète et intuitive est une partie centrale du développement logiciel. À mon avis, Linux et MacOS intègrent mieux les lignes de commande modernes que Windows.

Quel éditeur de texte ou IDE devrais-je utiliser ?

Les éditeurs de texte et les IDE (Environnements de Développement Intégrés) ont évolué de manière massive au fil des ans, et les développeurs choisissent des favoris pour de nombreuses raisons.

Une raison pourrait être qu'un éditeur ou un IDE particulier a été créé spécifiquement pour un langage de programmation ou un framework particulier. Une autre pourrait être que votre entreprise utilise un éditeur spécifique, donc c'est celui que vous avez appris et avec lequel vous êtes resté. J'ai trouvé cette raison particulièrement vraie dans mon expérience.

Si vous travaillez principalement avec des langages interprétés et à typage dynamique tels que Python, JavaScript, Ruby ou PHP, je vous recommande de commencer avec un éditeur basé sur une interface graphique comme Sublime Text ou Visual Studio Code. Ce sont deux des éditeurs de texte les plus populaires et ils offrent une multitude de fonctionnalités et de personnalisations pour faciliter votre vie en tant que développeur.

Si vous travaillez avec Java, je vous recommande soit Eclipse soit IntelliJ IDEA qui offrent une multitude de fonctionnalités spécifiquement conçues pour travailler dans l'écosystème Java.

Enfin, quel que soit l'éditeur que vous choisissez pour votre travail de développement principal, je vous recommande d'apprendre un peu de Vim. Vim est un éditeur de texte qui est destiné à être utilisé directement dans votre terminal de ligne de commande. Il faut certainement plus de temps pour s'y habituer puisque vous devez apprendre à utiliser les commandes clavier de Vim pour interagir avec vos fichiers au lieu de pointer-et-cliquer avec votre souris.

Mais selon mon expérience, cela en vaut vraiment la peine. Même si vous n'apprenez que les commandes de base, celles-ci vous aideront énormément si vous vous retrouvez à naviguer dans un terminal non graphique au travail et que vous devez inspecter ou modifier certains fichiers.

Je recommande vivement le programme intégré Vimtutor qui est téléchargé automatiquement lorsque vous installez Vim. Il vous guide à travers les bases directement dans votre terminal de ligne de commande.

Résumé

Dans cet article, j'ai discuté de 7 questions couramment posées par les nouveaux codeurs. Nous avons couvert un large éventail de sujets, allant des questions sur la sélection des langages de programmation, des stacks de développement logiciel, des systèmes d'exploitation et des éditeurs de texte.

Si vous avez des questions que je n'ai pas abordées, n'hésitez pas à m'envoyer un message à jacob@initialcommit.io.

Prochaines étapes

Si vous avez trouvé de la valeur dans cet article, j'ai écrit un livre intitulé Coding Essentials Guidebook for Developers qui contient 14 chapitres, chacun couvrant un concept, un langage ou un outil de codage essentiel.

Les sujets incluent l'architecture des ordinateurs, Internet, la ligne de commande, HTML, CSS, JavaScript, Python, Java, SQL, Git et plus encore.

Ces sujets ont été soigneusement sélectionnés pour aider à rassembler une vision plus large du puzzle du développement, au lieu de se concentrer sur un seul sujet en profondeur. Cela pourrait être une bonne ressource pour vous si vous avez trouvé de la valeur dans cet article.