Maison  >  Article  >  interface Web  >  Développement Fullstack : apprendre Python en tant que développeur JavaScript

Développement Fullstack : apprendre Python en tant que développeur JavaScript

WBOY
WBOYoriginal
2024-08-31 00:22:33462parcourir

Fullstack Development: Learning Python as JavaScript Developers

Le voyage commence

Je travaille en tant que développeur frontend depuis plus de 8 ans, et au cours des 2 dernières années, j'ai décidé de repenser ma carrière et la manière dont je peux évoluer. J'ai constaté que la technologie frontend change fréquemment : différents frameworks, concepts et écart entre les composants et les hooks de la classe React. J'ai réalisé que tout cela n'était qu'une abstraction utilisée pour exprimer les besoins commerciaux et la vision personnelle. À partir de ce moment, j'ai décidé de changer de parcours professionnel et de devenir légèrement développeur full-stack.

Comme nous le savons tous, le développement frontend est aujourd'hui entièrement axé sur JavaScript, c'est pourquoi j'ai décidé d'apprendre Node.js et ses principaux frameworks. Tous les développeurs frontend rencontrent Node.js d'une manière ou d'une autre, et en tant que développeur frontend senior, vous devriez être capable d'écrire des points de terminaison de base dans Node.js avec Express ou une autre bibliothèque. Après 2 ans de développement actif côté Node.js, lorsque mon travail est devenu 50/50 entre frontend et backend, j'ai découvert que la plupart des projets ne se limitent pas à un seul langage.

Node.js n'est pas l'outil idéal pour tout, surtout lorsque l'on travaille dans une plus grande entreprise. Différents langages offrent différentes solutions ou sont plus optimaux pour résoudre des analyses de rentabilisation spécifiques. C'est pourquoi j'ai commencé à rechercher ce que je pourrais apprendre comme deuxième langage backend et comment je pourrais l'utiliser à l'avenir.

Je souhaite partager mon expérience et pourquoi j'ai décidé de m'en tenir à Python après avoir essayé d'apprendre Rust (principalement pas pour le développement Web), Swift (qui est avant tout une solution mobile) et Golang. Ici, vous découvrirez pourquoi je pense que Python est une excellente opportunité pour les développeurs frontend d'apprendre et comment commencer à l'utiliser.

Pourquoi Python ?

De nos jours, l’IA est quelque chose dont tout le monde parle. Le mentionner lors d’un entretien dans le cadre de votre expérience vous donne toujours des points supplémentaires. Presque toutes les entreprises tentent d’intégrer l’IA dans leurs produits, et Python va de pair avec l’IA et le Machine Learning. En apprenant Python, vous avez non seulement la possibilité d'écrire des applications Web avec des frameworks tels que Django, Flask et FastAPI, mais vous pouvez également commencer à travailler avec les services d'apprentissage automatique et d'IA.
D'une part, apprendre des langages plus complexes comme Rust, Go ou Elixir est une bonne idée si vous souhaitez devenir un meilleur programmeur. Cependant, d'un point de vue professionnel, ce n'est pas une transition facile pour devenir développeur backend avec un langage complètement différent que vous connaissez moins.

Python est un langage de programmation typé dynamiquement. En tant que développeur JavaScript ayant passé une partie importante de votre carrière dans un environnement similaire, cela ne devrait pas vous intimider, car vous savez déjà à quels types de problèmes vous attendre dans le code.
Avec Python, vous pouvez non seulement commencer à écrire des applications Web, mais également exploiter vos compétences dans les domaines liés à l'IA, ce qui donne à Python un avantage significatif en tant que deuxième langage.

La courbe d'apprentissage

La courbe d'apprentissage a été simple. En Python, vous devez certainement apprendre quelques concepts de base. Si vous avez de l'expérience avec JavaScript, cela ne devrait pas être un gros problème.

Voici l'exemple de code en Python :

import random

def guess_the_number():
    number_to_guess = random.randint(1, 100)
    attempts = 0
    guessed = False

    print("Welcome to the Number Guessing Game!")
    print("I'm thinking of a number between 1 and 100. Can you guess what it is?")

    while not guessed:
        user_guess = int(input("Enter your guess: "))
        attempts += 1

        if user_guess < number_to_guess:
            print("Too low! Try again.")
        elif user_guess > number_to_guess:
            print("Too high! Try again.")
        else:
            print(f"Congratulations! You guessed the number {number_to_guess} in {attempts} attempts.")
            guessed = True

guess_the_number()

Je ne pense pas que vous trouverez quelque chose de trop complexe ici. Même si vous n'avez jamais appris Python auparavant, vous pouvez comprendre presque toutes les lignes sans lire la documentation.

La plus grande différence que vous remarquerez est que Python utilise l'indentation pour définir des blocs de code au lieu d'accolades. Cela peut paraître étrange, et je trouve toujours cela un peu inhabituel, mais au bout d'un moment, on s'y habitue et la lecture du code devient plus facile.

En dehors de cela, de nombreux concepts en Python sont similaires à ceux de JavaScript. Au lieu de console.log, vous pouvez utiliser print, et pour l'interpolation de chaîne, vous pouvez ajouter f au début de la chaîne et utiliser presque la même syntaxe qu'en JavaScript.

Voici la version JavaScript du code ci-dessus :

function guessTheNumber() {
    const numberToGuess = Math.floor(Math.random() * 100) + 1;
    let attempts = 0;
    let guessed = false;

    console.log("Welcome to the Number Guessing Game!");
    console.log("I'm thinking of a number between 1 and 100. Can you guess what it is?");

    while (!guessed) {
        const userGuess = parseInt(prompt("Enter your guess: "), 10);
        attempts++;

        if (userGuess < numberToGuess) {
            console.log("Too low! Try again.");
        } else if (userGuess > numberToGuess) {
            console.log("Too high! Try again.");
        } else {
            console.log(`Congratulations! You guessed the number ${numberToGuess} in ${attempts} attempts.`);
            guessed = true;
        }
    }
}

guessTheNumber();

Surmonter les obstacles : concepts clés

Vous pouvez apprendre de nombreux concepts différents en Python. J'ai montré le plus déroutant pour moi en tant que développeur JavaScript.

Syntaxe basée sur l'indentation

En tant que développeur JavaScript, vous savez peut-être comment utiliser les blocs de code avec if/else et d'autres opérateurs. Dans la plupart des cas, vous ajoutez simplement {} et c'est tout. Le système basé sur l'indentation de Python peut être délicat.

Voyons le code JavaScript :

if (role === "admin") {
    const posts = getDraftPosts()

    if (posts.length === 0) {
        throw NotFound()
    }   

    return posts
}

Analogue Python :

if role == "admin":
    posts = get_draft_posts()

    if posts.length == 0:
        raise NotFound()

    return posts

As you can see readability of blocks in Python could be challenging from the first view. This is why for me it was important to avoid deeply nested blocks because it is hard to read and easy to miss correct indention. Keep in mind that Python could attach your code to a wrong code block because of missed indention.

Type system

Python is a dynamic typing language but I was surprised to find Python built-in Types annotation.

def add(x: int, y: int) -> int:
    return x + y

You don’t need to install additional features, only what you need in Python *3.5 and above.*

Even more complex types could be described as equal to Typescript:

# enums
from enum import Enum # import enum for built in lib

class Season(Enum): # extend class to mark it as enum
    SPRING = 1
    SUMMER = 2
    AUTUMN = 3
    WINTER = 4

print(Season.SPRING.name) # SPRING
print(Season.SPRING.value) # 1

# or generics
def first(container: List[T]) -> T:
    return container[0]

list_two: List[int] = [1, 2, 3]
print(first(list_two)) # 1

For using these types you are not required to install something or transpile this code. This is something I missed in JavaScript, at least Node.js. I know Node.js is adding some basic types in the nearest version (see Medium post about node.js built-in types support) but it looks poor now if you compare it with Python.

Python’s Global Interpreter Lock (GIL)

JavaScript uses an event-driven, non-blocking model, while Python's Global Interpreter Lock (GIL) can be a confusing concept in multi-threaded programs.
The Python Global Interpreter Lock (GIL) is a mechanism that ensures only one thread executes Python code at a time. Even if your Python program has multiple threads, only one thread can execute Python code at a time due to the GIL.
With JavaScript, you can achieve multithreading with web workers, but in Python, you need to use additional libraries to accomplish this.

A Pythonic Mindset

JavaScript's "multiple ways to do it" philosophy doesn't work as well in Python because Python adheres more closely to the concept "There should be one - and preferably only one - obvious way to do it."
In the JavaScript world, every company often creates its own code style guide, and it's fortunate if it follows basic JavaScript style recommendations. In reality, practices like using semicolons can vary widely, to the point where one project might use semicolons and another might not.
In Python, following Pythonic principles from PEP 8 (Python's style guide) is highly recommended. This guide outlines the basic rules of how to write Python code.
To write better code, it's essential to engage with the community and learn idiomatic Python practices that prioritize clarity and simplicity.

Managing Dependencies and Virtual Environments

This part might also be confusing. In JavaScript, you can usually add a package manager and start installing dependencies without any issues. However, Python’s pip and virtual environments may be new concepts.

In Python, when using additional dependencies, it’s highly recommended to use a separate virtual environment. Installing dependencies with pip (the Python equivalent of npm in JavaScript) in your environment could potentially break system utilities or the OS itself, as the system Python interpreter (the one that comes pre-installed with your operating system) is used by the OS and other system utilities.

As a solution, you can create a virtual environment with venv module:

python -m venv myenv
myenv\Scripts\activate # for windows
source myenv/bin/activate # for Mac

After you enter the virtual environment you can install all dependencies without any problem or danger for your root environment.

Finding Support and Resources

How I Learned Python

Learning a new language is always challenging. I started learning Python basics on an online platform, where I also completed some small projects. Here is the plan I used during my learning process:

  • Python basics.
  • Advanced Python concepts (module system, types, environment, async code).
  • Learning the basics of the most popular frameworks like Django, Flask, and FastAPI.
  • Writing my first API server with FastAPI.
  • Adding a database and learning how to work with databases in Python.
  • Deploying the application on a free hosting service.

Where to Find Help

You can find a lot of help in Reddit communities or Discord servers while learning. I’m mostly a Reddit user and would suggest finding subreddits for Python and the framework you decide to use for your first application.

Remember to use the official documentation. In my opinion, it looks overwhelming, and most of the time, I try to find related articles if I get stuck on a concept.

Make sure to read PEP 8 — Style Guide for Python Code, where you can find basic rules on how to write Python code.

Regarder en arrière et en avant

En réfléchissant à mon parcours de développeur JavaScript à l'adoption de Python, je n'ai aucun regret. Cette transition a ouvert des opportunités passionnantes, notamment dans les domaines de l'IA et de l'apprentissage automatique, que j'exploite désormais largement dans mes projets, notamment sur le backend.

Pour l’avenir, les possibilités avec Python sont vastes. Qu'il s'agisse de développement Web, de science des données, d'automatisation ou d'approfondissement de l'IA et de l'apprentissage automatique, Python fournit une base puissante et polyvalente sur laquelle s'appuyer et explorer de nouveaux horizons.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn