Skip to content

Instantly share code, notes, and snippets.

@NerOcrO
Last active November 9, 2022 09:03
Show Gist options
  • Save NerOcrO/35ef0f37c12ac68e7f388c7950cd02de to your computer and use it in GitHub Desktop.
Save NerOcrO/35ef0f37c12ac68e7f388c7950cd02de to your computer and use it in GitHub Desktop.

Prérequis d'un langage en production

  • Python est codé en C
  • Node.js est codé en C++
  • Python est mono coeur car créée avant l'apparition des multi coeur
  • Node.js est mono thread

Immutable

Typescript ✅

const phrase = 'une phrase'
phrase = 'une autre phrase'
// -> Uncaught TypeError: invalid assignment to const 'phrase'

type maison = Readonly<{
  fenêtre: number
  porte: number
}>

class maison {
  constructor(
    readonly fenêtre: number,
    readonly porte: number
  ) {}
}

On peut tout de même ajouter ou retirer un élément d'un tableau ou d'objet.

Python ❌

a="a"
a=2
print(a)
# 2

D'après la documentation :

  • Muable : lists, sets et dictionaries ;
  • Immuable : integers, floats, tuples et strings ;
  • Mais je n'ai pas de message d'erreur ;
  • La notion de constante n'existe pas.

Typage

Typescript ✅

Configurer de façon strict tsconfig.json.

Python ✅

Configurer de façon strict mypy.ini.

Linter

Typescript ✅

  • Eslint : Configurer de façon strict
  • Rome
    • Fait en Rust donc super fast
    • Meilleurs feedbacks que eslint
    • Pas encore toutes les rules de Eslint

Il existe plein de plugin pour par exemple les tests, typescript... à mettre en place aussi.

Python ✅

Configurer de façon strict .pylintrc.

Un peu plus lent dans l'IDE que Eslint.

Formatteur

Typescript ✅

Plus besoin de Prettier, Eslint fait le job (évite un module en plus et potentiellement des conflits de règle).

Python ✅

Python est très formatté de base (4 espaces d'indentation, pas de paranthèse, pas de ";"...).
Sinon il existe Black, Autopep8, Flake8...

Package manager

Typescript ✅

Python

Pip ❌

  • Livré avec Python et utilise requirements.txt

Pipenv

  • Après un pipenv install [module], on est obligé de changer l'étoile par le numéro de version dans Pipfile pour fixer la version alors que je m'attends à qu'il mette le numéro de la dernière version ;
    • On peut faire pipenv install [module]==1.0.0.
  • Après un pipenv install [module] ou pipenv uninstall [package], je me suis aperçu qu'il met à jour d'autres modules sans que je lui demande ;
    • On peut faire pipenv install --keep-outdated [package] ou pipenv uninstall --keep-outdated [package];
    • Ou fixer toutes les versions comme cité dans le premier point.
  • Quand il y a une faille de sécurité sur une dépendance, je ne sais pas comment remonter au paquet qu'il y a dans mon Pipfile ;
  • On peut installer deux fois le même package avec une même version dans packages et dev-packages.

Poetry

  • Le plus moderne et se calque sur package.json
  • Installation

Test

Typescript ✅

Jest

Python ❌

Pytest

  • feedbacks très difficile à lire quand un test est rouge car il y a trop bruit
    • Ajouter le flag --tb=short pour enlever l'affichage du test
  • Il n'y a pas de watch par défaut
    • il existe des modules pour ça mais le gros inconvénient est qu'ils peuvent ne plus être maintenu

Concurrence

Typescript ✅

Jest le fait par défaut

Python ❌

Pytest ne le fait pas par défaut alors que c'est une fonctionnalité qu'il devrait maintenir

Coverage

  • en python, on ne peut pas écrire de répertoire avec un tiret
  • en python, on ne peut pas mettre une fonction dite "privée" en dessous de celle qui l'appelle pour faire du top down
  • Pas d’interface (ou bidouille) au sens POO → protocol
  • Refacto pas à 100% (ie: recuperer_une_fiche_de_synthese)
    • quand on manipule des chaines de caractères
  • quand tu installes un module avec pipenv, il y a une étoile dans Pipfile au lieu du numéro de version
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment