[PYTHON] Ce que j'ai pensé après avoir travaillé pendant un an sur le projet "Ne pas écrire de commentaires"

en premier

Je suis ingénieur chez SES. Par conséquent, mon travail consiste à participer à divers sites et à développer, mais ce que j'ai ressenti lorsque j'étais engagé dans une équipe avec l'idée de ** ne pas écrire du tout de commentaires ** ~~ et peu de documentation ~~ pendant un an. C'est un article qui a écrit.

Puisque Java et Python sont utilisés pour le développement, des exemples sont décrits dans ces langages.

Bonne chose

Tout d'abord, c'était bien. Largement divisé

C'est deux points.

Améliorez vos compétences en codage

Il n'y a aucun commentaire. Lors de l'écriture de code dans cet état, ** les noms de variables, les noms de méthodes, etc. sont très importants. ** On peut dire que le codage lui-même n'est pas si difficile tant que le nommage est fait correctement. Dans les projets SIer, il y a beaucoup d'idées qui ** font beaucoup de commentaires **. Donc, le code jusqu'à présent ressemble à ceci:

Sample1.java


    /**
     * List<Integer>Est reçu et la liste à partir de laquelle les nombres pairs sont extraits est renvoyée.
     * @param List<Integer>Liste des cibles de processus
     * @return Liste des résultats d'extraction
     */
    private List<Integer> searchListValue(List<Integer> a) {
        List<Integer> resultList = new ArrayList<>();
        for(int target : a) {
            if(a % 2 == 0) {
                //S'il est divisible par 2, stockez-le.
                resultList.add(target);
            }
        }
        return resultList;
    }

Comme vous pouvez le voir en regardant cela, il faut du temps pour lire **, comme `` resultListapparaissant plusieurs fois dans le même code source et le nom de l'argument esta```. Prendra ** Essayons de supprimer le commentaire. Et ça? C'est difficile à comprendre à moins de suivre le processus ...

Sample1.java


    private List<Integer> searchListValue(List<Integer> a) {
        List<Integer> resultList = new ArrayList<>();
        for(int target : a) {
            if(a % 2 == 0) {
                resultList.add(target);
            }
        }
        return resultList;
    }

Ce type de code est ** illisible sans commentaires (cela prend du temps à lire) **, qui est ** code avec commentaires **, c'est donc une grande croissance d'arrêter de faire ce genre de code était.

Sample1.java


    private List<Integer> filteledListNumber(List<Integer> targetNumList) {
        List<Integer> resultNumList = new ArrayList<>();
        for(int target : targetNumList) {
            if(a % 2 == 0) {
                resultNumList.add(target);
            }
        }
        return resultNumList;
    }

Le code ci-dessus vient d'être renommé, mais je pense que c'est un peu plus facile à lire. ~~ Cette dénomination n'est peut-être pas bonne ... ~~

De plus, dans les langages ** à typage dynamique ** tels que Python et JavaScript, si TypeScript et les indicateurs de type ne peuvent pas être utilisés, ** quel type de données doit être traité ** dans le nom de la fonction? Est en train d'écrire. Selon le cas

test.py


def add (a, b) :
    return a + b;

def addNumber(a, b) :
    return a + b;

C'est une histoire qui s'est réellement produite, mais je le fais depuis qu'il y a eu un cas où ** une erreur s'est produite lorsque j'ai passé une valeur numérique à une fonction qui joint des chaînes et l'ai appelée.

Le prochain changement est que ** appelle désormais des méthodes et des méthodes / fonctions standard trouvées dans des bibliothèques bien connues **. J'ai toujours recommandé d'utiliser if et `for```, et je pense que des méthodes comme` stream () `` `ne sont pas appréciées, les premières J'avais l'habitude de l'utiliser beaucoup, mais c'était une erreur.

L'avantage d'utiliser des méthodes et des bibliothèques standard est que vous pouvez maintenant penser à ** deviner s'il existe une méthode / fonction qui fait la même chose avec le même nom dans d'autres langues **.

--Je souhaite convertir les éléments de la collection. En Java, map () '' est applicable, mais est-ce aussi en Python? --Je veux calculer la valeur totale de la collection. Existe-t-il une méthode permettant de faire du JavaScript réduire () ''?

Etc.

Sample1.java


   private List<Integer> filteledListNumber(List<Integer> targetNumList) {
        List<Integer> resultList = targetNumList.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
        return resultList;
    }

J'ai aussi le sentiment que ** si vous connaissez ces méthodes, vous pouvez les lire dans les plus brefs délais **, ce qui est un gros avantage.

Une amélioration de la capacité d'écriture a été observée

À première vue, les compétences en rédaction peuvent décliner si vous arrêtez d'écrire des commentaires, mais vous devez en écrire beaucoup dans le ** document de conception **. (Pour moi-même) J'ai l'impression qu'il y a beaucoup de gens qui peuvent travailler seuls ** dans des projets dont la culture est ** n'écrivez pas de commentaires **, mais ** SES est un mélange de pierres. ** ** Le partage d'informations qui peut être fait pour les nouveaux arrivants qui ne peuvent pas lire le code et ceux qui ne fabriquent pas depuis longtemps doit être communiqué non seulement par le code mais aussi en utilisant le ** document de conception **.

J'ai essayé d'écrire ce document de conception en détail. ** La partie que je ne peux pas comprendre en lisant le code est pour que je puisse regarder le document de conception et découvrir quel type de traitement je veux faire **.

Dans le processus, mes compétences en écriture se sont améliorées.

(Edition supplémentaire) Maintenance facile

** J'ai été impliqué dans un projet où les commentaires que j'ai laissés n'ont pas été modifiés et étaient incompatibles avec le processus actuel **, mais j'ai écrit des commentaires par rapport aux difficultés de l'époque. Je pense qu'il est plus facile de ne pas l'avoir.

difficulté

A partir de maintenant, c'est un problème. La classification est

――Il peut être difficile de lire le code de la personne qui a quitté le projet.

C'est deux points.

Il peut être difficile de lire le code de la personne qui a quitté l'affaire

Beaucoup de projets auxquels j'ai participé chez SES ont eu beaucoup de trafic. ** Je me souviens que le code de la personne qui l'a soutenu était une logique Java de haut niveau, et c'était très difficile à lire. ** **

Lorsque cette situation s'accumule, ** tout le monde peut le maintenir s'il lit correctement le code, mais il est en feu et il n'y a pas de place pour cela. ** Cela s'est passé. Dans un tel cas, je voudrais laisser un commentaire autant que possible.

La qualité fluctue en fonction du niveau du responsable

Ne commentez pas. Dans le cadre du projet, il n'y avait pas ** de documentation ou de révision de code de l'ensemble du système. Bien sûr, il existe également des normes de codage. ** En d'autres termes, il consistait à faire de tous les livrables la responsabilité du responsable **.

Dans ces cas, j'estime que les commentaires sont valables.

Chacun des artefacts créés par chacun d'eux avait ses propres goûts, il y avait donc une différence à un niveau qui semblait être une langue complètement différente. ** Je souhaite partager des informations en japonais à de tels moments! J'ai fortement ressenti. ~~ J'ai éteint un feu parce que je ne pouvais pas le partager. ~~

Sample1.java


//Code de la recrue
    private List<Integer> searchListValue(List<Integer> a) {
        List<Integer> resultList = new ArrayList<>();
        for(int target : a) {
            if(a % 2 == 0) {
                resultList.add(target);
            }
        }
        return resultList;
    }

//Mon code
   private List<Integer> filteledListNumber(List<Integer> targetNumList) {
        List<Integer> resultList = targetNumList.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
        return resultList;
    }

//Code vétéran
   private List<Integer> filteledListNumber(List<Integer> targetNumList) {
        return targetNumList.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
    }

  

Tous ces éléments sont le même processus, mais avec une approche différente. La différence dans cette approche ** se produit dans tous les fichiers source. ** Donc, si vous voulez créer une culture où vous n'écrivez pas de commentaires, ** vous devez vous concentrer sur d'autres processus ou la limite viendra un jour. ** **

À la fin

C'est court, mais c'est tout. C'est une impression personnelle, mais le commentaire est

Je pense qu'il est efficace de décrire dans un tel cas.

Recommended Posts

Ce que j'ai pensé après avoir travaillé pendant un an sur le projet "Ne pas écrire de commentaires"
Ce que j'ai pensé et appris à étudier pendant 100 jours dans une école de programmation
TensorFlow change-t-il l'image de l'apprentissage profond? Ce que j'ai pensé après avoir touché un peu
Que dois-je faire avec la structure de répertoires Python après tout?
Quel est le fichier XX à la racine d'un projet Python populaire?
Ce que les utilisateurs de Java ont pensé d'utiliser le langage Go pendant une journée
Ce que j'ai appris au hackerrank en 1/30 jours.
J'ai présenté une affiche à la 36e Conférence conjointe sur l'informatique médicale
J'ai fait un peu de recherche sur la classe
Le monde a changé lorsque j'ai ouvert un gros projet Python (Django) sur Sourcetrail (Linux)
J'ai jeté un œil au contenu de sklearn (scikit-learn) (1) ~ Qu'en est-il de l'implémentation de CountVectorizer? ~