Pouvez-vous écrire une variété de codes pour montrer que vous êtes un vrai maître ? Faux, un vrai maître possède la pensée en programmation et la technologie les plus importantes. Même si toutes les technologies qu'il connaît actuellement sont obsolètes, il peut toujours maîtriser rapidement les nouvelles technologies et écrire des programmes de haute qualité.
Les frameworks et langages populaires d'aujourd'hui encapsulent un grand nombre de structures de données pratiques et même certains algorithmes classiques, ce qui nous apporte une grande commodité. Utiliser .NET pour simplement glisser-déposer un site Web, bien que les opérations backend. comme la liaison de base de données, le traitement et la mise à jour des données peuvent être un peu répétitifs et ennuyeux. Plus tard, je suis entré en contact avec Linq et thinkPHP (MVC de php), ce qui peut réduire considérablement ces codes moins techniques. J'ai toujours l'impression que ce n'est pas très intéressant. Ce n'est pas aussi agréable que d'écrire un petit programme ou un jeu par soi-même.
Je me souviens que notre professeur de structure de données a dit un jour : « L'algorithme est un art. » Ensuite, presque toute la classe a répondu avec dédain, et j'étais l'un de ses glorieux membres à cette époque. Par conséquent, j'ai très mal appris sur les structures de données et je l'ai beaucoup regretté.
Le livre d'algorithmes mentionne Minesweeper, un jeu classique comme Minesweeper. L'un des algorithmes de base consiste à calculer le nombre de mines autour de chaque grille.
Je pense que les gens qui programment depuis deux ans penseront rapidement à un tel algorithme : utiliser un tableau bidimensionnel pour stocker les informations de chaque grille, (bien sûr les mines ont été allouées immédiatement), puis parcourir le tableau et compter lorsqu'une est traversée. Le nombre de mines dans les huit directions environnantes est enregistré dans l'élément de tableau actuellement traversé. Bien entendu, le processus statistique peut être écrit sous la forme d’un appel de fonction. C’est l’algorithme le plus simple auquel penser.
Plus tard, j'ai pensé que c'était un peu du gaspillage, car de nombreuses grilles sans mines autour d'elles devaient être analysées à la recherche de mines dans huit directions. J'ai commencé à y réfléchir, ce que je voulais compter, c'était le nombre de mines autour de chaque grille, Alors qu'est-ce qui détermine son nombre de mines ? Bien sûr, ce sont des mines, alors il a commencé à penser au deuxième algorithme. Il parcourt toujours le tableau bidimensionnel, mais seulement lorsqu'une mine est traversée, les valeurs de la grille sont dans le tableau. huit directions autour de la mine sont +1, ce qui réduit considérablement le nombre de statistiques. Cela devrait être considéré comme une pensée inversée.
Lorsque Tongliang crée un programme d'échecs, il rencontrera l'algorithme "général" pour déterminer si son général ou maréchal est dans une situation où il sera capturé à l'étape suivante (la terminologie des échecs est appelée un général). Bien sûr, l'algorithme très simple consiste à parcourir les pièces d'échecs actuellement existantes et attaquantes de l'adversaire pour voir s'il est possible de tuer son général à l'étape suivante. Mais on peut aussi penser l'inverse. Puisque nous jugeons si le général est en état d'être tué, nous commençons directement par lui et jugeons s'il y a un adversaire, un « pion », une « voiture » ou un « canon ». " dans sa portée en ligne droite, puis jugez les environs qui nous entourent. Pensez-vous qu'il y a un "cheval" de l'autre côté de la grille japonaise ? Pensez au problème à l'envers.
Le sentiment de programmer
La chose la plus importante dans la programmation est une sorte de pensée. La vraie joie de la programmation est de concevoir un algorithme pour donner un programme vivant, et le. L'algorithme est leur âme. Bien sûr, créer un programme viable est une chose heureuse. Si vous vous sentez malheureux ou si la programmation est ennuyeuse, c'est parce que vous pratiquez certaines soi-disant technologies, soi-disant méthodes et modèles, plutôt que de programmer pour cela. souci de programmation.
La programmation est indissociable de la technologie, tout comme l'entraînement aux arts martiaux est indissociable des mouvements.
Les artistes martiaux de haut niveau disent souvent que le plus haut niveau de kung-fu est celui où vous n'avez aucun mouvement en tête. Et ce genre de non-mouvement ne signifie pas que vous ne pouvez rien faire, mais que vous avez rassemblé les forces de centaines d'écoles de pensée, et qu'après avoir intégré des milliers de mouvements, vos pensées, vos mouvements et votre corps sont hautement unifiés. et vous pouvez les utiliser comme vous le souhaitez. Il n’est pas possible d’atteindre cet état en apprenant tous les mouvements. Ce n’est qu’en sachant vraiment comment réfléchir au lien intérieur entre les mouvements et en les intégrant lentement dans vos propres pensées que vous pourrez y parvenir.
Certains vieux programmeurs nous apprennent souvent que la chose la plus taboue dans la programmation est trop mais pas assez.
Avoir plus de connaissances ne signifie pas que vous êtes un maître, et en savoir moins ne signifie pas que vous êtes une recrue. La programmation se concentre sur la réflexion, et cette réflexion détermine la profondeur avec laquelle vous approfondissez cette technologie.
Qu'est-ce que la pensée ? C'est l'idée de résoudre des problèmes, la capacité de planifier, la capacité d'analyse et la capacité d'organiser rapidement les idées pour résoudre des problèmes. Il peut s'agir d'un algorithme, d'un modèle ou d'un framework.
Ces idées nécessitent plusieurs années d'expérience, voire plus.
La pensée orientée objet est désormais populaire. Permettez-moi de parler brièvement de la compréhension superficielle de cette idée depuis .NET Du grand nombre de bibliothèques de fonctions en C au grand nombre de bibliothèques de classes (ou packages en Java). ) maintenant, il semble y avoir Une fois que vous avez appris les cours, vous devenez orienté objet. Cette affirmation est un peu tirée par les cheveux. Que vous appreniez Java ou C++, le plus important est d'utiliser C++ et Java pour réfléchir aux problèmes, les utiliser. orienté objet pour réfléchir aux problèmes et utiliser les objets comme primitives pour résoudre les problèmes.
La dernière fois que je suis allé à un entretien, l'intervieweur m'a demandé de parler de l'héritage orienté objet, du polymorphisme et des fonctionnalités d'encapsulation.
Je lui ai parlé d'un simple programme de combat de chars que j'ai écrit et qui analyse ces trois caractéristiques.
Héritage : ce concept est très simple à comprendre. La sous-classe hérite de tous les membres communs de la classe parent, comme la classe de base d'un tank, qui implémente les caractéristiques et méthodes de base du tank, telles que la taille, la santé, le mouvement, détermination des collisions, etc., qui sera discutée à l'avenir. Pour concevoir un char unique, tel qu'un char fantôme (Red Alert), il vous suffit d'hériter de la classe parent et d'ajouter une méthode fantôme pour résoudre le problème. Les avantages de l'héritage sont également évidents : la plupart des caractéristiques et méthodes communes aux chars sont écrites dans la classe de base. Si vous souhaitez concevoir de nouveaux types de chars à l'avenir, il vous suffit d'en hériter, en éliminant la majeure partie du code. L’héritage est donc le plus simple et le plus pratique.
Polymorphisme : peut être étroitement compris comme la surcharge des méthodes de la classe parent, de sorte que la même méthode ait des listes de paramètres différentes. Je pense que le polymorphisme est l'essence de l'orientation objet. Dans mon programme tank, il existe une classe de règles de contrôle qui nécessite un paramètre. Ce paramètre peut être une classe tank ou une classe bullet. bien sûr. , vous devez appeler leur méthode move(). Bien sûr, vous pouvez utiliser la puissante fonction de surcharge pour surcharger cette méthode, comme : someFun (tank mObj) {….}; Overload someFun (zidan mObj) {…. }; Il semble que, sauf que j'ai modifié le type du paramètre mObj, rien d'autre n'a été modifié. Mais cela a résolu le problème. Si la mise en œuvre de cette méthode anormale est de 10 000 lignes, une surcharge aura 20 000 lignes. Si la classe avion dispose également d'une méthode de déplacement à l'avenir, elle devra être rechargée à nouveau. Il est beaucoup plus simple d'utiliser l'interface héritage +. Il vous suffit d'écrire une interface appelée ImoveObj et d'y définir une méthode de déplacement. Cette interface est héritée par les classes de chars, de balles et d'avions. Écrivez la méthode comme someFun (ImoveObj mObj) {. ….}; plus tard Quel que soit le nombre de classes ajoutées pouvant servir de paramètre mObj, il vous suffit d'hériter de l'interface ImoveObj. (Ceux qui ont utilisé le modèle d'usine estiment que c'est trop courant. En effet, c'est aussi la compréhension de base du polymorphisme.)
Encapsulation : C'est facile à comprendre. Pour utiliser une classe, il suffit de savoir comment. utilisez les méthodes de cette classe. Il n’est pas nécessaire de connaître l’implémentation spécifique de cette méthode. L'interface est la spécification de conception du développeur, et le développeur implémente les éléments de l'interface. Les interfaces sont également des instructions utilisateur, indiquant aux utilisateurs d'une classe quelles méthodes cette classe implémente. Tant qu'ils peuvent les utiliser, ils n'ont pas besoin de comprendre leur implémentation.
Bien qu'il s'agisse de bases simples, il ne sera pas si difficile d'étudier l'injection, l'inversion, la cartographie, etc. une fois que vous aurez parfaitement compris ces choses.
En plus de l'orienté objet, il existe également l'orienté interface, l'orienté aspect (aspect), etc. Quelles que soient les idées utilisées pour programmer, le noyau est l'algorithme. Aussi petit qu'une fonction, il est indissociable. à partir de l'algorithme.
La chose la plus importante en programmation est la pensée, la technologie détermine la capacité et la pensée détermine la profondeur des capacités.