Java >> Tutoriel Java >  >> Java

Comment aborder Python d'un point de vue Java

En ce moment, je prends une pause pour partager des mises à jour sur le script de titreur d'image et réfléchir à l'enseignement pour répondre à une demande d'un ancien élève. Dans l'une de mes évaluations de cours, ils m'ont demandé d'écrire un article sur la façon d'aborder Python en tant que personne connaissant Java. Naturellement, j'ai pensé que ce serait très amusant, alors voilà !

En bref, afin d'aborder Python d'un point de vue Java, je recommande d'apprendre comment les deux langages se comparent (par exemple, compilé vs interprété, typage statique vs dynamique, etc.). Ensuite, je recommande d'apprendre les idiomes de Python, d'utiliser ces idiomes et d'écrire sur votre expérience. Il n'y a pas de meilleure façon d'apprendre que de plonger.

Espérons que cela vous donne un bon aperçu de ce à quoi vous attendre dans cet article. Continuez à lire pour plus de détails !

Comprendre mon expertise

Avant de commencer, j'ai pensé qu'il pourrait être utile de partager exactement pourquoi je suis qualifié pour écrire cet article. Si cela ne vous intéresse pas, n'hésitez pas à passer à la section suivante. Sinon, voici mon histoire.

Quand j'ai appris à programmer, j'avais 18 ans et j'étais en première année à l'université. A l'époque, je suivais un cours d'initiation à Java, donc naturellement Java est devenu mon premier langage de programmation.

Au cours des quatre années suivantes, j'ai choisi une langue ou deux pour suivre d'autres cours. Par exemple, j'ai appris le C/C++ lors d'un stage, que j'ai finalement utilisé pour un cours sur les systèmes d'exploitation ainsi qu'un cours sur les graphiques. À peu près à la même époque, j'ai également appris C # pour le développement de jeux et MATLAB pour la simulation et la modélisation. De plus, j'ai même joué avec des langages plus spécialisés comme Verilog et le langage Arduino (c'est-à-dire C-ish).

Pendant toutes mes années à l'université, je n'ai jamais touché Python. Ce n'est que depuis environ un an que j'ai commencé mon premier emploi d'ingénieur. À ce moment-là, j'étais resté en grande partie dans l'espace Java et C/C++. Soudain, j'étais coincé à apprendre une toute nouvelle langue.

Bien sûr, si l'un d'entre vous a travaillé à temps plein, vous savez à quelle vitesse vous êtes capable de comprendre les choses. En conséquence, j'ai pu comprendre la syntaxe en quelques semaines seulement.

Cela dit, le code que j'ai écrit n'était pas génial. En général, j'ai passé beaucoup de temps à réfléchir à la façon d'organiser le code comme le ferait un programmeur Java. Par exemple, j'ai passé beaucoup de temps à essayer de convertir du code en objets alors que ce n'était pas toujours nécessaire. De même, je me sentais tomber dans le même type de mécanismes de bouclage itératifs que je pourrais utiliser en Java.

Au fil du temps, j'ai commencé à penser à Python comme à son propre langage, distinct de Java. Cependant, ce fut un long processus, alors j'ai pensé que j'allais rédiger cet article d'approches pour vous aider.

Qu'est-ce qui différencie Python de Java ?

Généralement, lorsqu'un élève me demande de lui apprendre un peu de Python, j'aime commencer par regarder ce qui rend les langages différents. De cette façon, nous avons une idée de ce que nous devons apprendre. Par conséquent, cette section présentera certaines des principales différences entre les deux langues. Ensuite, nous verrons en quoi ils sont similaires.

Compilé ou Interprété

La plus grande différence entre Java et Python est peut-être le fait que l'un est compilé (Java) tandis que l'autre est interprété (Python). En gros, cela signifie qu'une langue doit être traduite en tant qu'unité (Java) tandis que l'autre peut être traduite à la volée (Python).

Pour illustrer ce concept, j'aime partager un programme d'introduction commun, Hello World, dans les deux langues :

public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello, World!")
  }
}
print("Hello, World!")

Ici, nous pouvons voir que la version Java nécessite pas mal de passe-partout. C'est parce que nous avons affaire à un langage de programmation compilé. Par conséquent, il doit y avoir une structure pour indiquer où commencer l'exécution du code (c'est-à-dire la méthode principale).

D'un autre côté, Python, le langage interprété, n'a besoin d'appeler que le print() fonctionner directement. Après tout, cette commande est supposée être exécutée dans une séquence d'instructions à la volée. En d'autres termes, il n'est pas nécessaire de fournir un point d'entrée.

Naturellement, cela fait de Python un langage de script agréable. En gros, cela signifie que nous pouvons écrire des séquences de commandes dans un fichier à exécuter au besoin. Par exemple, voici un script qui imprime la date et l'heure actuelles :

import datetime
print(datetime.datetime.now())

Pour que ce "script" fonctionne en Java, nous devons d'abord le compiler et exécuter le binaire. Malheureusement, cela signifie que nous ne pouvons pas vraiment apporter de modifications sans recompiler le programme.

D'autre part, Python est assez rapide à modifier. Par exemple, voici ce même programme mais avec une étiquette supplémentaire :

import datetime
print(f"The current date and time is {datetime.datetime.now()}")

C'est cool ?

Saisie statique ou dynamique

Une autre différence fondamentale entre Java et Python est la façon dont les variables sont typées. Plus précisément, Java est typé statiquement tandis que Python est typé dynamiquement. Essentiellement, cela signifie que les variables Java sont vérifiées au moment de la compilation tandis que les variables Python sont vérifiées au moment de l'exécution.

Pour comprendre la différence, examinons à nouveau quelques extraits de code :

public class FiveFactorial {
  public static void main(String[] args) {
    int total = 1;
    for (int i = 1; i <= 5; i++) {
       total *= i;
    }
    System.out.print(total);
  }
}
total = 1
for i in range(1, 6):
  total *= i
print(total)

Ici, la différence la plus évidente est que les variables en Java doivent être explicitement typées. En d'autres termes, nous devons dire que nous voulons stocker un entier avant de pouvoir le faire. D'un autre côté, les types Python (ou indications de type) ne sont pas nécessaires, et je ne pense pas qu'ils aient été formellement inclus dans le langage avant Python 3.5.

Bien sûr, pour éviter toute confusion, il est possible d'avoir un langage typé statiquement qui ne nécessite pas de typage explicite (voir Kotlin). Cela dit, je pense que le manque de types explicites est le changement le plus choquant des développeurs Java. Heureusement, l'indication de type est disponible et encouragée. Voici le même exemple avec des indications de type ajoutées :

total: int = 1
i: int
for i in range(1, 6):
  total *= i
print(total)

Tout cela vous aide à détecter certains bogues dans des éditeurs comme PyCharm. Les indications de type ne vous empêcheront pas d'exécuter du code.

Accolades ou espaces

À ce stade, vous l'avez probablement remarqué, mais l'une des différences les plus choquantes entre Java et Python est la façon dont la portée est définie. En Java, nous définissons des blocs à l'aide d'accolades. Pendant ce temps, en Python, nous définissons des blocs à l'aide d'espaces. Pour moi, c'est une manière élégante d'exprimer la lisibilité dans la syntaxe du langage, car cela vous oblige à maintenir un espacement cohérent.

Bien sûr, il ne sert à rien de discuter sans exemple. Reprenons l'exemple factoriel :

public class FiveFactorial {
  public static void main(String[] args) {
    int total = 1;
    for (int i = 1; i <= 5; i++) {
       total *= i;
    }
    System.out.print(total);
  }
}
total = 1
for i in range(1, 6):
  total *= i
print(total)

Dans l'exemple Java, nous pouvons voir qu'il existe trois niveaux d'imbrication basés sur les trois ensembles d'accolades. Bien sûr, on le voit aussi par l'indentation, mais ce n'est pas strictement nécessaire :

public class FiveFactorial {
public static void main(String[] args) {
int total = 1;
for (int i = 1; i <= 5; i++) { total *= i; }
System.out.print(total);
}
}

Ici, nous avons décidé de compresser la boucle en une seule ligne. De plus, nous avons éliminé toute indentation. Quoi qu'il en soit, le compilateur sera content. D'un autre côté, vos collègues développeurs (ou votre futur moi) ne seront pas trop contents de vous.

Pendant ce temps, Python ne permet pas vraiment ce type de restructuration du code. En fait, nous aurons une erreur de syntaxe :

total = 1 
for i in range(1, 6): 
total *= i
print(total)

Si vous essayez de l'exécuter, vous obtiendrez l'erreur suivante :

SyntaxError: expected an indented block

Fondamentalement, cela signifie que l'interpréteur s'attendait à une sorte de bloc imbriqué, mais il ne l'a pas trouvé. En conséquence, le programme s'est écrasé.

Quoi qu'il en soit, il existe certainement d'autres différences entre Python et Java, mais celles-ci couvrent la principale différence du point de vue d'un débutant. Dans la section suivante, nous verrons comment les langues sont identiques, afin que vous puissiez maximiser le chevauchement.

Qu'est-ce qui rend Java et Python similaires ?

Comme promis, nous allons maintenant examiner en quoi Java et Python sont identiques, ou du moins similaires. Vous seriez surpris de voir combien il y a de chevauchement.

Paradigmes de programmation

Si vous avez une formation en Java, vous serez heureux de savoir que Python est en grande partie de nature impérative. Cela signifie essentiellement que les deux langages de programme exploitent les instructions pour mettre à jour l'état du programme.

Si vous n'êtes pas familier avec certains des autres paradigmes de programmation, ce ne sont peut-être pas les informations les plus utiles. Cela dit, cela signifie que vous n'aurez pas vraiment à élargir votre idée de ce que signifie la programmation lors de l'apprentissage de Python. Si vous êtes déjà à l'aise avec l'idée d'expressions et d'instructions, ces concepts continueront d'être utiles en Python.

Cela dit, Java vous lie en quelque sorte au domaine de la programmation orientée objet (POO). En Python, vous n'êtes pas aussi limité. Vous êtes libre d'utiliser le langage dans le paradigme de votre choix, y compris la POO et même la programmation fonctionnelle (FP).

De plus, vous pouvez avoir plus d'une classe de niveau supérieur par fichier en Python . C'est magnifique !

Syntaxe générale

L'un des avantages de Python est qu'il prend la syntaxe de langages tels que Java et les nettoie un peu. Par exemple, le while loop en Python ressemble beaucoup à son homologue en Java, mais il supprime les parenthèses et les accolades et prend deux-points :

int i = 0;
while (i < 10) {
  i++;
}
i = 0
while i < 10:
  i += 1

Pendant ce temps, les conditions suivent le même type de modèle :

int i = 0;
if (i == 1) {
  System.out.println("This is dead code, buddy!");
}
i = 0
if i == 1:
  print("This is dead code, buddy!")

Bien sûr, vous devrez vous habituer à utiliser elif plus de else if , mais cela ne devrait pas prendre trop de temps !

De même, bon nombre des mêmes opérateurs sont intacts, y compris tous les éléments suivants :

  • Opérateurs arithmétiques :+ , - , * , %
  • Opérateurs relationnels :< , <= , == , >= , >

Bien sûr, Python joue avec la division en incluant à la fois / et // . De plus, Python abandonne les opérateurs booléens habituels et les remplace par leurs homologues anglais :and , or , et not .

Cela dit, je pense que vous constaterez qu'il est assez facile de prendre Python compte tenu de ce que vous savez déjà sur la syntaxe de Java. Bien sûr, le plus grand changement sera d'oublier les accolades et les points-virgules. Mais vous avez compris !

La bibliothèque standard

L'un des avantages de l'utilisation de Java est sa bibliothèque standard. Par exemple, si vous avez besoin d'une structure de données comme une liste, vous en trouverez plusieurs implémentées pour vous dans la bibliothèque standard. Heureusement, Python possède également une excellente bibliothèque standard, et elle est disponible à portée de main.

Par exemple, avez-vous besoin d'une file d'attente pour quelque chose ? Voici un extrait de code de file d'attente des deux bibliothèques standard :

import java.util.LinkedList; 
import java.util.Queue; 

public class QueueExample {
  public static void main(String[] args) {
    Queue<Integer> q = new LinkedList<Integer>();
    // Do queue things
  }
}
import queue
q = queue.Queue()
# Do queue things

De même, avec l'ajout d'un joli gestionnaire de packages comme pip, vous pourrez même étendre la bibliothèque standard avec des packages tiers développés pour à peu près tout. Par exemple, j'utilise quelques packages dans mon script de titreur d'image, notamment Pillow et Matplotlib.

Aborder Python d'un point de vue Java

Maintenant que nous avons pris un moment pour comparer les deux langues, j'ai pensé que je pourrais dresser une liste de conseils pour vous aider à faire la transition. N'hésitez pas à prendre ces conseils avec un grain de sel; vous seul pourrez décider de ce qui est utile.

Apprenez les idiomes

Python est un langage idiomatique. Fondamentalement, cela signifie qu'il existe certaines façons de résoudre certains problèmes qui sont standard dans la communauté. En règle générale, ces idiomes sont décrits dans les propositions d'amélioration Python (PEP), mais vous aurez tendance à les rencontrer d'abord dans la nature.

L'un des idiomes courants auxquels je pense qui n'est tout simplement pas possible en Java est le test de vide pour les chaînes :

if (s.length() == 0) {
  // Do the thing
}
if s:
  # Do the thing

En tant que programmeur Java, il peut être tentant de vérifier si une chaîne est vide en testant la longueur de la chaîne. Bien que cela soit certainement possible en Python, il est généralement plus idiomatique de tirer parti de la flexibilité de type de la variable. Voir, en Python, les variables peuvent être évaluées en booléens sous certaines conditions. Par exemple, une chaîne vide est perçue comme False tandis qu'une chaîne de n'importe quelle longueur est perçue comme True .

Un autre exemple courant d'idiome Python est la boucle. Si nous voulions parcourir un tableau, nous pourrions être tentés d'utiliser une boucle for en Java. En Python, cependant, la boucle for traditionnelle n'existe pas. Au lieu de cela, les programmeurs Python utilisent ce que l'on appelle souvent en Java la boucle for améliorée ou la boucle for-each :

int[] arr = {1, 2, 3}
for (int i = 0; i < arr.length; i++) {
  // Do the thing
}
arr = [1, 2, 3]
for item in arr:
  # Do the thing

Si pour une raison quelconque vous avez besoin des indices, vous devrez utiliser le enumerate() fonction.

Malheureusement, il y a pas mal d'idiomes que vous devrez apprendre en Python. Cela dit, votre code ne sera pas mauvais si vous n'utilisez pas d'idiomes; ce sera juste un peu plus lent et moins lisible.

Si vous souhaitez explorer certains idiomes, j'écris tout le temps à leur sujet. En fait, j'ai toute une série consacrée à la résolution de problèmes courants en Python. Presque chaque article propose une solution idiomatique propre.

Utiliser la langue

L'un des conseils les moins appétissants est d'utiliser la langue . Après tout, vous pouvez étudier toute la journée, mais jusqu'à ce que vous essayiez réellement de résoudre vos propres problèmes, vous ne connaîtrez jamais vraiment la langue.

Cela dit, j'ai pensé que je vous aiderais à démarrer en organisant une petite liste de projets Python que vous pouvez essayer :

  • Comment créer un bot Instagram avec Python et InstaPy
  • Comment créer un bot Twitter en Python avec Tweepy
  • Projets de programmation pour débutants avancés #2 :Jeu de la vie
  • Projets de programmation pour débutants avancés #4 :Photomosaïques
  • Explorer des données Twitter avec Python (Partie 1 :Collecter des données)

Gardez à l'esprit qu'aucun de ces projets n'est le mien, donc je ne les ai pas examinés à fond ou quoi que ce soit. Cela dit, je pensais que les titres étaient attrayants et peut-être un bon point de départ (bien que peut-être trop difficile pour un vrai débutant).

Si vous n'aimez aucune de ces options, vous pouvez toujours créer la vôtre. Après tout, vous connaissez déjà Java, vous pouvez donc peut-être réécrire certains de vos anciens projets en Python.

Écrivez sur ce que vous avez appris

L'un des moyens les plus rapides d'évaluer votre apprentissage est d'expliquer votre compréhension. Si vous pouvez expliquer exactement pourquoi quelque chose fonctionne, vous renforcerez le processus d'apprentissage.

Pour rendre cela moins effrayant, vous pouvez essayer de noter le processus d'apprentissage dans un cahier. Ou, si vous souhaitez faire passer votre apprentissage au niveau supérieur, vous pouvez rédiger un article de blog rapide sur un site comme dev.to. Si c'est bien fait, vous pourrez peut-être aider des débutants comme vous.

Si vous craignez de ressasser les mêmes vieux concepts sur Internet, ne le soyez pas ! Je ne pense pas qu'il y ait de honte à écrire du contenu qui existe déjà sur Internet car cela sert à renforcer votre propre apprentissage. De même, nous pourrions tous bénéficier d'une autre perspective.

Commencez à coder !

À ce stade, je n'ai pas grand-chose d'autre à dire, alors laissez-moi résumer. Tout d'abord, lors de l'apprentissage de Python, il est important de comparer et de contraster Python avec le langage que vous connaissez déjà, Java. En termes de différences, j'en ai identifié trois :

  • Python est interprété pendant que Java est compilé
  • Python est typé dynamiquement tandis que Java est typé statiquement
  • Python utilise des espaces pour les blocs de code quel Java utilise les accolades

Naturellement, il y a probablement des milliers de différences, mais ce sont les trois grandes pour moi.

D'un autre côté, Python est similaire à Java à bien des égards. Par souci de brièveté, j'en ai choisi trois :

  • Java et Python partagent le paradigme de la programmation impérative
  • Java et Python partagent des éléments syntaxiques généraux tels que les boucles et les conditions
  • Java et Python partagent l'idée d'une vaste bibliothèque standard

Une fois que nous avons comparé et contrasté les langues, j'ai partagé trois conseils pour vous aider à traverser la transition :

  • Apprenez les idiomes Python
  • Utiliser Python pour créer des projets
  • Écrivez sur tout ce que vous avez appris

Espérons que ces plus de 2500 mots vous donnent un bon point de départ pour votre transition. En tant que personne qui a dû traverser une transition similaire, je vous souhaite bonne chance et continuez à travailler !

Si vous aimez ce type de contenu, j'apprécierais que vous montriez un peu d'amour au site en consultant ma liste de façons de développer le site. Par exemple, ce message vous dirigera vers ma liste de diffusion ainsi que vers ma chaîne YouTube et Patreon. Chaque petit geste compte!

Pendant que vous êtes ici, voici une liste d'articles connexes :

  • Comment terminer un projet de programmation à partir de zéro
  • Encore une autre façon d'apprendre la récursivité

De même, voici une liste de ressources de programmation d'Amazon (publicité) :

  • Interview sur le codage :189 questions et solutions de programmation
  • Python la tête la première :un guide convivial

Merci encore d'avoir passé du temps ! Je vous en suis reconnaissant.


Balise Java