JavaRush /Blog Java /Random-FR /Commençons par le début ou « Bonjour, Java World ! »
articles
Niveau 15

Commençons par le début ou « Bonjour, Java World ! »

Publié dans le groupe Random-FR
Je souhaite commencer cet article par une digression inhabituelle, à première vue. Plus tard, on comprendra pourquoi exactement.
Commençons par le début ou Hello, Java World !  - 1
Alors imaginons quelqu'un. Ce quelqu'un veut maîtriser le ski alpin. Et pour cela, il suit les étapes suivantes :
  • Instructeurs, manuels, manuels, etc. - tout cela vient du malin. Vous pouvez apprendre le ski par vous-même. De plus, à l’école, il a assez bien appris le ski de fond. En conséquence, tous les conseils de personnes mieux informées sont ignorés.

  • L'équipement le plus cool est choisi. Pas en dessous du niveau expert. Des bottes rigides qui font mal aux pieds. Des skis durs qui nécessitent un effort fantastique pour se plier, dépassant de loin le niveau de forme physique de quelqu'un. Eh bien, etc.

  • La piste d'essai est... enfin, disons, la piste qui accueille l'étape de slalom géant de la Coupe du monde. C'est parfait pour étudier.
  • Continuez dans le même esprit.
Voici donc la question. Comment appellerez-vous cela quelqu'un ? Personnellement, en tant que personne familiarisée avec le ski alpin depuis environ 20 ans, je l'appellerai (et c'est quand même très doux !) - désespéré. Il est totalement impossible d’apprendre quoi que ce soit avec cette approche. Mais c'est un moyen sûr de se blesser. Et le PLUS sûr est d’abandonner définitivement l’idée du ski. Je pense que vous serez d’accord avec moi dans cette évaluation. En tout cas, je suis presque sûr que ce Quelqu'un ne s'attendra pas à ce qu'on lui adresse quelque chose de désagréable. Imaginons maintenant un autre Quelqu'un. Laissez-le, par exemple, être un étudiant en informatique. Il a des connaissances en C++, C#, Pascal. Il veut apprendre Java. Ses actions:
  • La littérature correspondant à son niveau de connaissance (niveau zéro, à vrai dire) est balayée. Basé sur une légère familiarité avec les théories mentionnées du C++, du C# et de la POO.
  • L'environnement de programmation le plus puissant est retenu. Disons Eclipse ou NetBeans. Celui qui fait tout lui-même, il suffit d'appuyer sur un bouton.
  • En tant qu'application d'essai, nous sélectionnons... eh bien, disons, chat. Une application client-serveur, la partie client sous forme d'applet, la partie serveur - un service web ou, au pire, des servlets. Parfait pour étudier.
Question. Comment appellerez-vous cela quelqu'un ? Savez-vous quel est le paradoxe ? Le fait est que dans ce cas, il y aura beaucoup moins d'évaluations impartiales. Malgré le fait que les situations sont identiques en tous points. A moins que les conséquences sur la santé et la vie dans le second cas soient moins mortelles. C'est peut-être là le problème ? Les situations sont vraiment très similaires. Je les ai spécifiquement décrits dans le même style. Et chose étrange : si l'absurdité du premier est évidente, alors le deuxième scénario est suivi par un nombre alarmant de développeurs novices. La maîtrise de Java commence par l'écriture de MIDlets, de clients pour bases de données, de chats, de création de sites Web basés sur des servlets... Vous pouvez continuer longtemps. Mais le point n’en est pas moins évident. Dans le même temps, la littérature d’entrée de gamme est mise de côté avec dédain. Lis ça? Tome? Oui, j'écris en C++ depuis trois ans maintenant ! (Les options sont en Pascal, et même en Visual Basic.) Et je connais la POO ! Eh bien, en général. Alors, quelle est la prochaine étape ? Et puis ça :
  • Comment convertir un tableau de 8 octets en long ?
  • Pourquoi cela arrive-t-il NoClassDefFoundError?
  • Pourquoi est-ce que je lance l'application dans Eclipse ( NetBeans/IDEA/JBuilder), et tout va bien, mais sans elle je tape java HelloWorld.class, et il y a une erreur ?
  • Pourquoi ça plante ClassNotFoundException?
  • Pourquoi n'y a-t-il pas de bibliothèque ? Je l'ai déjà mis dans classes.zip, mais cela ne sert à rien !
  • Pourquoi est-ce que je crée un tableau d'objets, mais lorsque j'essaie d'utiliser un élément du tableau, j'obtiens NullPointerException?
  • Et pourquoi ...?
  • Et pourquoi ...?
  • Et pourquoi ...?
Pourquoi pourquoi pourquoi ? Mais parce que Java n’est pas C++ ou Pascal. Et pas Perl. La connaissance de ces langues non seulement n'aide pas le plus souvent, mais gêne également. Ne serait-ce que parce que ces langues ont des idéologies complètement différentes. Mais la ressemblance extérieure est trompeuse. Bien sûr, tous ces « pourquoi » et « comment » ont des réponses dans les livres. Dans la littérature du niveau le plus élémentaire. Mais le lire est paresseux (options : honte, pas de temps, etc.). Je connais pas mal de stéréotypes qui ont été transférés à Java par de bons spécialistes du C++. Un exemple récent : vous ne devriez jamais lever d'exception dans un constructeur. Pourquoi? Oui, car en C++ l’état d’un tel objet n’est pas défini. En conséquence, une fuite de mémoire se produit. En Java, ce problème n'existe en principe pas, en raison de la présence d'un ramasse-miettes. Cependant, certaines personnes tentent d’éviter de telles situations. Tout simplement selon un stéréotype bien ancré. Et le pire, c'est que grâce à ces efforts, le code devient beaucoup plus compliqué. La syntaxe est facile à apprendre. Et ce n’est absolument pas suffisant. L’idéologie du langage est bien plus importante. Et pour le maîtriser le plus efficacement possible, vous devez commencer dès le début. Pourquoi exactement et comment ? Et c'est une autre question. Donc. Où et comment commencer. Cela dépend de ce que vous voulez réaliser. Si vous voulez devenir un singe codeur expérimenté, vous pouvez commencer avec presque n'importe quoi. Si vous souhaitez devenir professionnel, les choses sont un peu plus compliquées. Mon expérience me donne des raisons de dire ce qui suit. La différence entre un développeur professionnel et un « codeur » est qu'il comprend ce qui se passe. Il fait un peu plus que simplement appuyer sur des boutons. Un environnement puissant est d’une très bonne aide. Pour ceux qui peuvent s’en passer. Mais c’est souvent le seul outil de ceux qui ont débuté avec. Et en son absence, la valeur du singe codant est nulle. Parce qu'il n'y a pas de boutons sur lesquels appuyer. En général, appuyer sur un bouton peut prendre des formes vraiment monstrueuses. Un de mes collègues a vu un produit écrit en Java. Les instructions pour l'installer commençaient par les mots : « Installer JBuilder à partir du disque… » Maintenant, CECI est déjà fatal. Si les développeurs ne pouvaient pas faire fonctionner le produit sans un environnement de développement, alors je frémis en pensant à la façon dont il a été écrit. Au minimum, il a été écrit par des amateurs. Qu'est-ce que je veux dire par « comprend ce qui se passe ? » Cela signifie qu'une personne doit comprendre ce qui suit :
  • Qu’est-ce qu’une machine virtuelle et pourquoi est-elle nécessaire ?
  • Qu'est-ce qu'une classe du point de vue d'une machine virtuelle.
  • Qu'est-ce qu'un forfait ?
  • Qu'est-ce qu'une bibliothèque ?
  • Comment la machine virtuelle recherche et charge les classes ; qu'est-ce qu'un chargeur de classe et comment fonctionne-t-il ; combien y en a-t-il par défaut ; qu'est-ce que le chemin de classe.
Etc. et ainsi de suite. La liste continue. Veuillez noter que je n'ai pas inclus les connaissances spécifiques au développeur lui-même. Qu'est-ce qu'un fil, qu'est-ce qu'une classe du point de vue de la POO et en quoi diffère-t-elle d'un objet, comment fonctionnent les gestionnaires de mise en page - TOUT développeur devrait savoir tout cela. Tout ce que j'ai énuméré est plutôt une question de technicité. Mais très souvent, il s’avère que les connaître est essentiel pour comprendre ce qui ne fonctionne pas. Un exemple de la vie. Il existe une bibliothèque pour travailler avec XML appelée xalan. Il contient plusieurs packages javax.xml... - analyseurs, transformateurs, etc. Cette bibliothèque est très populaire. Le problème est que ces mêmes packages sont présents dans le J2SDK depuis la version 1.4. Question. Quelle classe sera chargée lors de l'accès à la classe javax.xml.transform.stream.StreamSource depuis la bibliothèque, si xalan est également présent dans le chemin de classe - bibliothèque ou depuis J2SDK ? Pour répondre à cette question, vous devez savoir comment fonctionne le chargeur de classes. J'ai vu une fois une discussion de quatre jours dans l'un des forums qui a finalement abouti à cette question. Le code n'a pas fonctionné correctement précisément parce que le chargeur n'a pas pris la classe qu'on attendait de lui. Où est-ce que je veux en venir ? Voici le problème : plus l'environnement de développement est puissant, plus il est important pour le développeur - moins il doit réfléchir. Et c'est déjà oh, comme c'est mauvais. Si proche du singe. Cela nous amène à la première conclusion, aussi paradoxale que cela puisse paraître :

Conclusion 1. Il est conseillé de commencer à apprendre Java SANS environnement puissant.

Je ne préconise pas d'écrire dans des éditeurs de niveau bloc-notes. Mais je ne fais pas cela pour la seule raison - en règle générale, ils n'ont pas de coloration syntaxique. C'est une chose incroyablement pratique qui n'a aucun effet négatif. Vous pouvez utiliser quelque chose comme Notepad++ , il comprend la syntaxe Java et, soit dit en passant, est gratuit. Par exemple, j'ai le type de fichier .java enregistré dans le système spécifiquement pour cela. Donc, un éditeur de texte avec coloration syntaxique et ligne de commande. Deux ou trois jours de tourments - et comprendre ce qu'est un chemin de classe, comment l'interprète est lancé et bien d'autres petites choses - comprendre cela restera pour toujours. Plus loin. Mon expérience me donne des raisons de dire qu'il est impossible d'acquérir des connaissances pour une utilisation future. Dans le sens où cela ne vaut la peine de lire de la littérature que lorsqu’elle répond à des questions. Si vous lisez un livre sans vous poser de questions, les informations disparaîtront au bout d’une semaine. Je le sais très bien, notamment grâce à ma propre expérience. Un jour, j'ai commencé à lire cinq fois un livre sur les servlets. Jusqu'à ce que je commence à les traiter dans mon travail, l'information n'était pas absorbée. Et c’est loin d’être un cas isolé. Il était une fois, il y a très longtemps, il y a environ 8 à 10 ans, j'ai lu ce qui suit, malheureusement je ne me souviens pas de l'auteur : Comment enseigner à une personne un nouveau langage de programmation ? Très simple. Il faut lui donner un langage, plusieurs tâches et un minimum de documentation. Puis, après quelques mois, lorsqu'il commence à écrire au moins dans cette langue, fournissez une documentation complète. Il sera lu dans deux semaines comme un roman policier, après quoi la personne sera prête à travailler. Je suis d'accord à 100% avec cette affirmation. Dans deux mois, d’une part, tous les problèmes mineurs disparaîtront. Les réponses seront obtenues de manière indépendante, ce qui augmentera considérablement leur valeur. En revanche, des questions claires se formeront déjà, dont les réponses seront apportées par la documentation. Cela nous amène à la deuxième conclusion, qui ne semble pas moins paradoxale que la première :

Conclusion 2. Il est conseillé de commencer à apprendre Java SANS manuels. Documentation de l'API Java + tutoriel Java - c'est plus que suffisant.

La documentation de l'API Java est indispensable. Je recommande fortement de le conserver localement, sur disque. Vous devrez la contacter plus d'une fois, pas deux, ni même dix. Personnellement, il ne se passe pas un jour sans que j’y aille. Je recommande également de conserver le didacticiel Java localement. Il s’agit d’informations d’entrée de gamme qui remplacent complètement un manuel. Cependant, il y en a une bonne quantité. Je dois dire que dans des domaines que je ne traite pas au travail, je trouve quand même quelque chose de nouveau pour moi. Lire beaucoup est mauvais. Tant qu'il n'y a pas de demande, il n'y a pas de réponse. Lire un peu est également mauvais. Où est le juste milieu ? J'adhère à cette règle : je lis jusqu'à ce qu'il me semble que j'ai reçu la réponse à la question. Dans 90 % des cas, ce n'est pas le cas. Mais c’est à ce moment-là qu’il est préférable de s’arrêter et de continuer seul. L'impulsion initiale a été reçue et résoudre le problème de manière indépendante donnera bien plus. Bien sûr, après un certain temps, cela vaut la peine de se lancer dans la littérature. Mais encore une fois, pour la littérature d’entrée de gamme. Même si tout cela semble absurde, cela vaut la peine de lire les premiers chapitres. Je peux presque garantir que vous apprendrez au moins quelque chose de nouveau. Et ce quelque chose pourrait s’avérer plus tard extrêmement important. D'ACCORD. Il semble que nous ayons compris sur quoi écrire. Comment écrire - aussi. Mais que dois-je écrire ? Rappelez-vous où cet article a commencé. Dois-je commencer par écrire un système de messagerie instantanée ? Le choix vous appartient bien entendu. Il me semble que ça n’en vaut pas la peine. Plus la tâche est complexe, plus les questions se poseront. En l’absence d’expérience, un tel nombre de questions donnera un sentiment d’impossibilité de les résoudre, suivi d’un sentiment de sa propre infériorité, de sa stupidité, etc. En fin de compte, cela peut conduire à la décision de « s’en foutre… » et à l’arrêt de l’apprentissage de la langue. Ceux. exactement l’effet inverse de celui qui était nécessaire. Ceci n'est pas tant une caractéristique de Java que du processus d'apprentissage lui-même. Mais pour une raison quelconque, ils l’oublient lorsqu’il s’agit d’enseigner la programmation. Pendant ce temps, une petite tâche accomplie jusqu'au bout peut donner une bien plus grande satisfaction et une bien plus grande connaissance qu'un système grandiose abandonné au tout début du voyage. D'où la troisième conclusion : Conclusion 3. Il est conseillé de commencer l'apprentissage de Java avec des tâches adaptées à votre niveau actuel de connaissance de Java. Vous ne devriez pas commencer à apprendre à conduire une voiture sur une voiture de Formule 1. Vous ne devriez pas commencer à apprendre le ski alpin sur la piste de la Coupe du monde. Et de la même manière, il ne faut pas commencer à maîtriser Java en écrivant quelque chose d’énorme. Je comprends que l’ambition est exigeante. Mais dans ce cas, elles ne sont pas fondées. Et plus vos ambitions sont déraisonnables, moins vous avez de chances de devenir professionnel. Curieusement, les forums divers sont un phénomène remarquable en termes d'apprentissage. Si vous les utilisez à bon escient. Sagement - cela signifie que vous devez faire le contraire, pas comme d'habitude. Il ne s’agit pas de poser des questions, mais d’y répondre. Tout ce que vous avez la force d’atteindre. Si vous pensez que je sais tout moi-même, vous vous trompez lourdement. Oui, j'en sais beaucoup. Mais il y a des domaines que je n'ai jamais rencontrés. Ou alors je l'ai fait, mais très peu. Un exemple classique de ma pratique est le travail avec des certificats : signature de code, connexions sécurisées, etc. En 1998, lors de la rédaction de ma thèse, j'ai fait cela, mais depuis, tout a beaucoup changé. Au fil des années, mes questions se sont accumulées. J'ai même commencé à lire de la littérature. Mais comme je l’ai dit plus haut, vous ne pouvez pas acquérir de connaissances pour une utilisation future. C'est comme un pied de biche : il rentre dans une oreille et ressort par l'autre. Il n’y a aucun résultat sauf un trou dans la tête. Et cela a continué jusqu'à récemment, lorsqu'une question a été posée sur le forum concernant une connexion SSL avec Tomcat. Il y a eu quelques problèmes. Et seule cette question m'a poussé à creuser profondément. Et s’il y a une demande, il y a aussi une réponse. Non seulement j’ai compris quel était le problème de la personne, mais j’ai également trouvé de nombreuses autres informations utiles. J'ai enfin compris comment fonctionnent les certificats. L'article correspondant est dans les plans. Et cela arrive tout le temps. J'ai beaucoup travaillé, par exemple, avec l'interface graphique. Ce n'est qu'à la suite d'une question posée par quelqu'un sur le forum que j'ai compris certaines fonctionnalités de TextLayout. Avant cette question, je n'en avais aucune idée. De la même manière, j'ai récemment découvert qu'il s'avère que JButton interprète également le HTML comme son propre en-tête. Avant cela, je pensais que seul JLabel pouvait faire cela. Et c'est encore grâce au forum. Il s’avère donc : plus nous répondons aux questions, plus nous apprenons nous-mêmes. C'est pourquoi je ne suis pas d'accord avec l'opinion populaire selon laquelle si une personne siège sur un forum, elle ne fait rien. Ceci est loin d’être clair et dépend principalement de la raison pour laquelle la personne se trouve sur le forum. Et que fait-il principalement – ​​demander ou répondre. En fait, vous pouvez même demander. Mais aussi avec sagesse. Ne demandez pas de solution (et surtout avec le post-scriptum « S'il vous plaît à ceux qui savent, répondez et ne posez pas de questions ! », que j'ai rencontré l'autre jour !), mais encore une fois, au contraire, demandez de régler le direction du mouvement. Il est tout à fait compréhensible qu'il soit difficile pour un débutant de comprendre où creuser, car il manque tout simplement d'expérience. Ce n’est pas la faute de la personne, et ce n’est même pas un problème. C'est bon. Tout le monde est passé par là. Moi inclus. Pour moi personnellement, il est bien plus important qu'une personne veuille apprendre quelque chose. Et pas seulement obtenir une réponse, pour l'oublier cinq minutes après avoir suivi un laboratoire de programmation. Je vous dirai toujours la direction du mouvement. Si je le connais moi-même. Et si je ne sais pas, au moins je peux deviner. Et je chercherai certainement aussi la réponse. Mais je ne donne probablement jamais de réponses directes – du moins, je ne m’en souviens pas. D'ailleurs, c'est à cause de cela que j'ai quitté l'un des forums. Lorsque j’ai commencé à poser des questions suggestives, ils m’ont expliqué à l’unisson qu’il était d’usage qu’ils répondent simplement. Et avec mes questions, je peux aller plus loin. Considérant que le niveau du forum laissait beaucoup à désirer, notamment grâce à cette approche ! – J'ai décidé de ne plus perdre de temps. Alors choisissez un forum à votre goût et c'est parti. D'ailleurs, ce site est apparu précisément grâce à l'un des forums. Après y avoir discuté pendant un certain temps, j'ai accumulé une liste des sujets les plus fréquemment évoqués et j'ai réalisé qu'un tel site serait très demandé. Et c’est ce qui s’est passé. Presque tous les articles sont rédigés à la suite de certaines discussions sur le forum. Ou suite à la correspondance que j'effectue également régulièrement. Quel est le résultat? Travaillez, travaillez et travaillez encore. Plus vous vous autorisez à faire par vous-même au stade initial, moins vous acquérez de connaissances. Et plus le chemin vers le professionnalisme est long. Mais vous seul pouvez choisir qui vous voulez être : un singe qui appuie sur un bouton sans réfléchir ou un professionnel. Et vous seul choisissez vous-même le chemin par lequel vous pouvez réaliser ceci ou cela. La première voie est claire. J'ai essayé de montrer le deuxième. À vous de jouer, messieurs ! Lien vers la source originale : Commençons par le début ou "Bonjour, Java World !"
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION