Comme un idiot C # enseigné. partie 1


Record 1


J'ai décidé d'enregistrer. Principalement parce que j'aime enregistrer. Mais non. En fait, je veux raconter une histoire. L'histoire que la programmation est intéressante. Le fait que la programmation puisse être non seulement une profession, mais aussi un grand passe-temps, comme la photographie, les échecs, la peinture ou la guitare. Qu'il n'est pas nécessaire d'avoir un talent inné, une superpuissance ou des années d'éducation spéciale pour réaliser de petites mais grandes victoires dans toute entreprise.

Ceci est le journal d'une personne qui apprend la programmation pour le plaisir. Pas pour une profession, pas pour vivre. Je ne vis pas au Nigéria avec un téléphone à bouton-poussoir et je ne suis pas dans une situation désespérée. J'étudie et programme juste pour le divertissement dans mon temps libre du travail et des affaires familiales. Afficher en temps réel. Publié par lots de 5 entrées.

Pour une raison quelconque, la mentalité établie (la mienne et d'autres) nous protège des expériences audacieuses avec quelque chose de nouveau. «Je ne sais pas comment» sonne comme une putain de condamnation à mort. Chaque jour, je vois cela au travail, lorsque des collègues sont confrontés à une tâche inconnue. Je ne sais pas comment. La fin du programme.

Mon fils de sept ans a peur d'essayer des activités inconnues. Parce qu'il ne sait pas comment. Mais il faut comprendre que dans ses années il ne sait pas combien.

Parfois, je lui dis: «Mon pote, si les gens ne faisaient que ce qu'ils peuvent, nous vivrions toujours dans des grottes, et en particulier vous passeriez toute la journée à beugler, ramper et caca dans un pantalon, au lieu de jouer à Angry Birds. Bien que non, vous ramperiez sans pantalon, car personne ne saurait coudre . »

Pourquoi suis-je? Au fait que je ne sais pas programmer. Mais je vais apprendre. Pas parce que je veux devenir développeur - j'ai déjà un métier. Mais parce que je peux. Bien qu'en réalité j'ai trois raisons.

La première consiste à étirer votre cerveau. Je suis convaincu que la vie ne peut pas être construite autour d'une seule activité. Il est nécessaire d'occuper votre esprit avec différentes tâches. Et plus ils sont divers, mieux c'est pour l'esprit.

La deuxième raison est pratique. Je vais écrire un jeu (ringard, oui), avec lequel nous allons jouer et nous amuser. Nous avons déjà une idée - dans la dernière itération, nous avons essayé de fabriquer un bâton, mais la mécanique s'est avérée trop compliquée.

La troisième raison est d'ordre éducatif. Je vais essayer de changer l'attitude de la société envers la programmation. Il est généralement admis que la programmation est le destin des professionnels. Personne ne programme comme passe-temps. Le concept de «programmation amateur» (rappelez-vous ce mot) n'existe pas du tout.

Une partie des pros qui me liront va maintenant attaquer avec des commentaires que je dévaluerai leur métier et leurs compétences acquises au fil des années. Ne vous précipitez pas. Pour l'instant, croyez-moi simplement que ce n'est pas le cas, et nous reviendrons sur ce sujet plus tard.

Bref, j'ai décidé d'apprendre le C #. Parce que mon idée a besoin d'un moteur, et si je comprends bien, Unity est le meilleur. Et l'unité est C #. Ceci est le premier.

La deuxième chose que j'ai réalisée est que commencer avec Unity est trop tôt. Presque tous les supports pédagogiques proviennent du fait que le lecteur connaît déjà la langue. Et tout ce que je sais sur C #, c'est qu'il est correct de dire "Sea Sharp", et non "Tse with a grid". Commençons donc par la langue elle-même.

La troisième chose que j'ai réalisée est que la formation sera approfondie. Puisque Sharpe est une nouvelle langue pour moi, vous avez besoin de quelque chose "pour les nuls", mais il n'y en a pas.

Il existe un manuel «C # pour les écoliers» de Martin Dreyer, mais il est absolument impossible de le lire. Tout d'abord, la familiarité avec la programmation commence par l'étude des classes et des objets. Trop compliqué et incompréhensible. Deuxièmement, dans un paragraphe essentiel, il y a trois pages d'exemples tirés du monde réel. Trop. Je ne suis pas prêt à consacrer autant de temps à l'histoire de la façon dont une fille sur une île déserte convainc un robot-étranger de faire qu'un éléphant choisisse une noix de coco.

Il y a un autre extrême. Tutoriels de mycsharp.ru et le «Guide complet du langage de programmation C # 8.0 et de la plateforme .NET Core 3» sur metanit.com/sharp/tutorial

Il existe des exemples de code à partir desquels vous pouvez réutiliser quelque chose, mais les exemples sont trop abstraits comme «Écrivons un programme qui met les objets a, b et c en mémoire, c'est tellement excitant!». Mais c'est un peu mieux que les éléphants et les noix de coco, d'autant plus que j'ai ma propre méthodologie d'enseignement.

En général, j'ai décidé que je pouvais le gérer et je me suis installé pour installer Visual Studio.

Record 2


Tout s'est déroulé comme prévu. Le lendemain, j'ai capturé l'écran noir. Je ne comprenais pas ce que c'était, mais il semble que le pilote vidéo a été mis à jour avant Windows et s'est avéré incompatible avec l'ancienne version.

Une fois, j'étais bien dans de telles choses. En cas de problème, j'ai simplement restauré la partition du système d'exploitation à partir d'une image soigneusement préparée, mais c'était il y a longtemps. Windows est devenu plus stable, je suis devenu plus négligent. Et ainsi.

J'ai passé une semaine à essayer de tout réparer. J'ai essayé toutes les recettes. J'ai trouvé un moyen de démarrer la ligne de commande, j'ai récupéré l'ancien Far, transféré les fichiers, à la troisième tentative, j'ai pris un assemblage approprié (j'utilise Windows personnalisé) avec la mise à jour problématique déjà installée.

Ici, je dois dire quelques mots sur mon parcours. Je ne sais pas programmer, mais en général je me considère assez comme un informaticien. Vers 8 ans, le premier PC de ma vie est apparu chez nous. Packard Bell 486. Cool à l'époque. Il avait deux programmes - Lexicon et Info-comptable.



J'ai joué à Lexicon.

A partir des caractères I, / et \ j'ai tracé une piste de course, et le curseur était une voiture. Tels sont les jouets cloués au sol. Pas d'Internet, pas d'amis avec des ordinateurs (au début). Je me suis amusé comme j'ai pu.

En plus de deux programmes, l'ordinateur était accompagné d'un MS-DOS à part entière sur une pile de disquettes et j'ai souvent expérimenté avec différentes équipes. Je suis arrivé à celui appelé QBASIC.

Il y avait un petit manuel en basique, et j'ai compris quelque chose. Il a appris une ou deux commandes et a pu écrire des programmes qui affichaient toutes les lettres à l'écran. C'était génial.

De plus, il y avait des cours d'informatique au lycée. Turbo Pascal. On nous a appris à écrire du vrai code. Bien sûr, dans les cahiers. Mais j'avais un ordinateur (déjà du Pentium) et je pouvais m'entraîner.

J'ai donc rencontré les choses les plus élémentaires. Constructions et boucles If-Then-else. Le sommet de mes compétences était le programme de roulette. La roulette était un jeu. Vous choisissez un nombre de 0 à 10 et faites un pari. Deviné - un bonus, pas - la perte d'un pari. Et ainsi, jusqu'à épuisement de l'argent. J'étais très fier.

Néanmoins, j'étais un humaniste complet et je n'ai pas commencé à relier ma vie à l'informatique. Donc, après les expériences scolaires, je n'ai pas pensé à la programmation depuis environ 19 ans.

Oh! L'installation de Visual Studio semble être terminée. Quelle jolie. Tout noir. Voyons ce qui est quoi.

Record 3


En fait, ce n'est pas ma première tentative de programmation. Il y a environ un an, un caprice est déjà venu sur moi et j'ai essayé VBA. Il a su maîtriser la syntaxe de plusieurs équipes et a écrit la même roulette qu'à l'école. Encore mieux. Maintenant, j'avais une interface graphique de champs et de boutons, ainsi que des fonctions pour sauvegarder et charger le jeu (les données étaient stockées dans des tableaux Excel).

Néanmoins, j'ai rapidement abandonné l'affaire. Pour l'essentiel, de l'incapacité à utiliser les images normalement, et peut-être aussi de la paresse. Je ne me souviens pas exactement. Dans tous les cas, nous considérerons mon expérience VBA comme une sorte d'échauffement. Il est maintenant temps pour un vrai hardcore.

J'ai passé 4-5 nuits à Sharpe. J'ai lu deux chapitres du manuel. Que puis-je dire? Je ne suis pas du tout inspiré par l'approche académique basée sur l'écriture de programmes inutiles qui font de l'informatique abstraite. Je ne suis pas sûr de pouvoir être fier de l'application qui considère l'aire du triangle.

J'ai donc élaboré mon propre programme. Avec le blackjack et ... enfin presque. J'ai appris certaines des commandes les plus importantes: Console.WriteLine pour afficher les étiquettes, Console.Readline pour la saisie au clavier, les opérations arithmétiques, une construction conditionnelle if-else, la boucle while, et bien sûr Random pour les nombres aléatoires.

Vous l'avez probablement déjà deviné. Encore une fois, j'ai écrit la roulette de la console :)



Les sensations sont un délice. Elle travaille! Vous pouvez y perdre ou gagner! Et c'est un vrai programme - il a 68 lignes de code incompréhensible, y compris jusqu'à 5 méthodes appelées.

C'était difficile? Oui J'ai lu des manuels, fait des erreurs et tout cassé, passé des heures à chercher des défauts, relu des manuels, me suis trompé dans le code et tout réécrit plusieurs fois, simplifiant les constructions en boucles et supprimant les variables inutiles.

Mais le résultat en valait la peine. Je suis plein d'espoir et je continue.

Record 4


Le premier obstacle. Je suis arrivé au concept de classes et d'objets. Le concept est totalement incompréhensible. Comment l'idée elle-même serait-elle claire, mais comment et pourquoi l'appliquer? Créer des cours pour joueur, casino et roulette? Ensuite, trouver des objets en eux? Et que feront-ils? Trop long. Cela ne semble pas naturel pour quelque chose et ne fait que confondre le programme.

Cela m'est venu en quelques jours. J'ai marché avec mon fils dans la cour de récréation et j'ai regardé le monde autour avec des yeux orientés objet.

class  {string Name;}, class  {string Name; int Age;}   = new  ();   = new  (); 

...

Et puis j'ai tout compris. Mon programme de roulette est trop stupide et primitif. Les cours n'y sont tout simplement pas nécessaires. C'était un bon exercice pour apprendre la programmation procédurale, mais rien de plus.

Il a fallu trouver un nouvel exercice pour comprendre les cours. Et je suis venu avec. Ici, je me suis assis sur un banc et je me suis écrit un puzzle au téléphone. Faites un mini RPG. Il y aura un héros avec ses propres paramètres de force et de santé. Chaque tour, il ira dans une nouvelle grotte et y rencontrera un troll avec ses propres paramètres. Ils se battront en lançant un dé, comme dans Never Interest. Et là, vous pouvez trouver des armes et des armures.

Les classes principales se sont demandées:

  • Héros (force, santé, argent)
  • Objet (dégâts, armure, durabilité)
  • Monstre (force, santé)

Ça devrait être intéressant. Puis-je le gérer? C'est facile. Allons-y.

Record 5


Cela n'a pas fonctionné facilement. J'ai rapidement esquissé des classes avec des champs. J'ai découvert dans le manuel ce qu'est un concepteur et j'ai lavé les concepteurs d'armures et d'armes. J'ai fait l'interface, trouvant comment changer la couleur du texte.

Maintenant, j'ai un message d'accueil, les statistiques des joueurs, des armes et des armures affichées sur mon écran. Il y a un menu à partir duquel vous pouvez commencer le prochain mouvement ou quitter le jeu.



Et même cela n'a pas été facile. J'ai constamment rencontré des erreurs. Spécial lors du portage de code vers des méthodes. Certaines ordures n'existent dans aucun contexte. Une autre poubelle n'est pas disponible en raison du niveau de protection ...

J'ai vraiment manqué une sorte de guide pour les nuls sur la façon de structurer le code. Où mettre la méthode pour générer l'article? Pour classer l'article? Au programme de classe? Laisser juste dans le code? Vous devez expérimenter, détecter et corriger les erreurs.

Deux jours séparés, j'ai été tourmenté par un générateur de nombres aléatoires, qui m'a donné un bouclier et une épée avec les mêmes paramètres. J'ai réalisé que les solutions normales ne sont pas encore disponibles pour moi et j'ai fait une pause d'une seconde entre deux générations.

Puis l'euphorie a pris fin et une stupeur a commencé. J'ai réussi à générer deux objets manuellement, en les nommant Weapon1 et Armor1. Mais je devrai le faire après chaque déplacement, les enregistrer dans l'inventaire, les changer ... Comment créer des objets par programmation? Comment générer leurs noms et, à plus forte raison, sélectionner ceux nécessaires à la modification de leurs paramètres?

VBA était plus facile. Internet regorge d'exemples de scripts pour chaque tâche particulière. Trouver et réutiliser le bon n'est pas un problème. Très souvent, je ne comprenais pas du tout la moitié du code écrit, mais cela fonctionnait comme par magie, puis je dois le comprendre.

Le manuel n'aide pas. Ils parlent déjà d'expressions lambda et de multithreading, et les exemples sont toujours au niveau de «Trouver la somme de tous les nombres pairs dans un certain nombre de nombres». L'ennui. Une recherche sur Internet ne donne pas non plus de réponses, car je ne formule pas la question de cette façon.

Je soupçonne que vous devez connecter la base de données et y écrire des objets. Je dois apprendre SQL.

Source: https://habr.com/ru/post/fr466641/


All Articles