Maison > Problème commun > Programmeur légendaire Zhihu Wheel Brother, je me suis agenouillé après avoir lu ceci

Programmeur légendaire Zhihu Wheel Brother, je me suis agenouillé après avoir lu ceci

Libérer: 2023-07-26 17:14:11
avant
1115 Les gens l'ont consulté

# À propos de l'auteur :


vczh, dont le vrai nom est Chen Zihan Parce que les informations personnelles de Zhihu indiquent « constructeur de roues professionnel », les gens dans le monde l'appellent « Wheel Brother ». ». vczh a effectué un stage chez Microsoft pendant ses études et a rejoint Microsoft juste après l'obtention de son diplôme. J'ai commencé chez Microsoft Shanghai, puis je suis entré chez Microsoft Research Asia à Pékin. Il a maintenant déménagé à Seattle, aux États-Unis, et travaille comme ingénieur au sein de l'équipe Office.


Les gens me demandaient souvent comment accéder à Microsoft. En fait, je n'avais jamais pensé à cette question, donc la réponse à cette époque était naturellement la publicité de Microsoft (bon en programmation, bon en mathématiques et bonne attitude). Lorsque j'étais en dernière année d'université en 2009, la crise des prêts hypothécaires à risque aux États-Unis nous a frappés, ce qui a rendu encore plus difficile l'exploitation de ceux d'entre nous qui souhaitaient travailler dans des entreprises américaines. Heureusement, j'ai réussi cinq tests et vaincu six généraux, et j'ai finalement réussi à rester après le stage. La cause et l'effet de cela ne peuvent évidemment pas être déterminés dans les quelques jours de l'interview, nous devons donc commencer par bonjour tout le monde.


#Collège


J'ai eu la chance d'apprendre la programmation depuis la deuxième année du collège. À cette époque, le monde était déjà à un niveau moderne. Le système d'exploitation disposait d'une mémoire virtuelle, d'une interface graphique, d'Internet, de logiciels de développement et d'environnements de développement intégrés. La compilation d'un programme nécessitait de changer plusieurs fois de disque, comme le décrivent certains anciens. . Les jours sont complètement différents.


C'était six mois après que j'ai acheté mon ordinateur et j'étais très curieux de savoir tout ce que je voyais. De plus, mon père n'était pas d'accord avec le fait que je joue à des jeux à ce moment-là, alors je pensais créer quelques jeux moi-même, alors. que je pouvais le faire ouvertement. Alors, quand j'ai entendu que le Shantou Overseas Chinese Middle School proposait des cours de Visual Basic 5.0, je me suis senti très excité. Mais le niveau d’excitation peut être ignoré par rapport au jour où j’étais trop excité pour mon premier cours d’informatique et où je faisais du vélo si vite que j’ai beaucoup saigné et perdu quelques dents.


Programmeur légendaire Zhihu Wheel Brother, je me suis agenouillé après avoir lu ceci


C'était encore la première année du 21ème siècle, lorsque l'accès à Internet était extrêmement coûteux et que Google venait juste de démarrer et que presque personne ne le savait. Apprendre à programmer était beaucoup plus difficile qu'aujourd'hui. Lorsque je cherchais des connaissances, Internet était fondamentalement sans espoir, alors j'ai développé un passe-temps en allant dans les librairies.


Il ne m'a pas fallu longtemps pour trouver un livre intitulé "Tutoriel de programmation graphique avancée de Visual Studio". J'aime beaucoup ce livre. Les illustrations sont très belles et elles sont dessinées en utilisant la programmation Visual Basic. Je ne peux pas le lâcher. Malheureusement, le contenu était trop avancé, donc plus tard, il y a eu des histoires sur la façon dont j'ai appris la géométrie analytique tridimensionnelle rudimentaire en autodidacte en troisième année du collège, et sur le fait que je n'ai pas écouté les cours en classe dans le collège. troisième année de lycée et je me suis appuyé uniquement sur ma propre analyse mathématique, mais je l'ai comprise plus tard.


Au milieu, j'ai essayé d'utiliser la programmation pour dessiner de nombreux graphiques complexes et effectuer diverses transformations complexes sur des images, j'ai donc dû déduire de longues formules sur papier avant d'écrire un programme. Si le résultat d'exécution du programme est erroné, il n'y a aucun moyen de le déboguer, nous devons donc le redériver, en espérant trouver quelques bugs dans la formule pour expliquer pourquoi l'erreur s'est produite.


À partir de là, je suis devenu très bon en arithmétique symbolique. De plus, que ce soit pour faire des devoirs de mathématiques et de physique ou pour dériver des formules grâce à la programmation, il y a trop de choses à calculer et je suis trop paresseux pour chercher des bouts de papier partout, j'ai donc acquis la capacité de calculer mentalement des processus complexes (malheureusement, j'ai perdu maintenant). D'ailleurs, cela m'a également apporté un avantage, c'est-à-dire que j'ai calculé mentalement toutes les réponses aux questions de mathématiques à choix multiples de l'examen d'entrée à l'université dans les 10 minutes suivant la remise des copies et je n'étais pas autorisé à écrire. tout est correct.


Programmeur légendaire Zhihu Wheel Brother, je me suis agenouillé après avoir lu ceci


Après avoir longtemps fait de la programmation graphique, je me suis souvenu de mon idéal initial et j'ai donc commencé à jouer à des jeux. À cette époque, j'ai vu "Heroes of Mana" développé par le groupe de travail Chengdu Golden Pin, ce qui a déclenché mon enthousiasme pour le développement de RPG. Après avoir connu plusieurs échecs, j'ai finalement terminé tout le travail de codage de "Tiandi Zhuan" le premier jour du premier mois lunaire de ma deuxième année de lycée, et je l'ai téléchargé sur le site Web GameRes peu de temps après.


C'est mon premier programme avec plus de 10 000 lignes. Afin de le mener à bien, j'ai compris beaucoup de vérités, notamment pourquoi il est orienté objet et pourquoi il est nécessaire de diviser les modules pour réduire l'interdépendance. Cela est également devenu pour moi l'opportunité de développer plus tard ma propre interface graphique et mon moteur de script. Plus tard, j’ai essayé d’utiliser OpenGL pour créer des jeux 3D, mais comme il était difficile de trouver des artistes partageant des intérêts communs pour travailler avec moi, j’ai abandonné. Mais cela m'a donné beaucoup de temps pour investir dans l'interface graphique et le moteur de script.


Programmeur légendaire Zhihu Wheel Brother, je me suis agenouillé après avoir lu ceci


Plus tard, j'ai eu l'idée d'expliquer les langages de haut niveau. Ce fut le premier tournant de toute mon histoire de programmation. À cette époque, je n'utilisais que des listes chaînées pour la structure des données et je n'avais jamais entendu parler de principes de compilation ou de modèles de conception. Il était naturellement plus difficile d'expliquer les langues de haut niveau à cette époque. Par conséquent, après plusieurs jours de réflexion, j'ai mis au point une méthode désormais appelée compilation en un seul passage (qui est également très mauvaise) pour retraiter un langage simple de haut niveau en un langage de jeu d'instructions simple, similaire à l'assembleur.


À cette époque, j'étais déjà en dernière année de lycée, donc je n'avais pas beaucoup de temps à investir dans la programmation, donc le premier prototype que j'ai réalisé était un interpréteur Pascal simplifié, développé en Delphi. En y réfléchissant maintenant, il doit y avoir beaucoup de fuites de mémoire et de problèmes de performances, mais je ne savais pas de quoi il s'agissait à l'époque. Pendant les trois mois d'inactivité après avoir obtenu mon diplôme d'études secondaires, j'ai repensé ce truc et j'ai obtenu un plan de plusieurs dizaines de pages. Comme je n’ai pas eu le temps de le terminer, je l’ai imprimé et je l’ai apporté à l’Université de technologie de Chine du Sud.

#Université


Quelques jours seulement après mon entrée à l'université, j'ai entendu d'une sœur aînée que notre professeur, M. Chen Jian, enseignait les principes de compilation, alors je lui ai montré cette pile de papier. Elle n'a rien dit (avec le recul, je peux seulement dire que le design était vraiment inesthétique...), et m'a donné un manuel sur les principes de la compilation. J'ai fini de le lire rapidement, puis j'ai utilisé les connaissances qu'il contenait pour créer le premier véritable moteur de script. La syntaxe a copié certaines parties simples du langage Java et a également ajouté une fonctionnalité qui modifie automatiquement les paramètres du modèle en La syntaxe du type Objet est. nommé Jupiter. Plus tard, j'ai suivi un cours Java et j'ai découvert que Java faisait réellement cela, ce qui m'a fait me sentir très étrange.


Plus tard, j'ai écrit de nombreux moteurs de script les uns après les autres. Jove, que j'ai construit quand j'étais en première année, a été le premier moteur de script que je pensais encore populaire. Le deuxième est le langage dynamique développé au cours de ma première année après avoir échoué en deuxième année et appris de nombreuses leçons. Le nom est Free (peut être trouvé sur mon blog http://www.cppblog.com/vczh). Récemment, il est prévu de le mettre à jour vers la version 3.0 pour coopérer avec GacUI, une bibliothèque de classes GUI accélérées par carte graphique en cours de développement. Ensuite, pendant mon stage dans le groupe WCFTools de Microsoft Shanghai, j'ai complété chaque soir un langage purement fonctionnel appelé KernelFP, qui est devenu plus tard mon projet de fin d'études.


Programmeur légendaire Zhihu Wheel Brother, je me suis agenouillé après avoir lu ceci


Après avoir soumis mon projet de fin d'études, j'ai terminé CMinus quelques mois avant l'obtention de mon diplôme. Il ne s'agit pas du CMinus extrêmement simple conçu dans le cours Principes de compilation, mais d'un compilateur complet en langage C (la syntaxe des pointeurs de fonction a été modifiée par mes soins, mais elle est toujours supportée). Le résultat de la compilation est un morceau de code binaire X86 enregistré en mémoire. L'adresse de départ de la fonction peut être forcée à être convertie en pointeur de fonction et utilisée directement dans le programme C++. lors de la génération d'instructions, la convention est clairement décrite dans MSDN.


Après l'obtention de mon diplôme, j'ai construit de manière ambitieuse NativeX, un langage C avec des génériques et une cartographie conceptuelle. Il y a quelques mois, j'ai essayé de copier C#, mais C# était trop compliqué, alors je me suis tourné vers GacUI. J'ai également écrit de nombreuses bibliothèques de classes d'interface graphique (GUI). Après avoir développé deux bibliothèques de contrôle pour les RPG au lycée, deux bibliothèques GUI développées avec OpenGL au collège ont échoué. Plus tard, l'API Windows (Vczh GUI) a également été encapsulée, essayant de rendre sa facilité d'utilisation proche de celle de VCL ou de WinForm.


Après l'obtention de mon diplôme, j'ai essayé à plusieurs reprises de publier une interface graphique basée sur le rendu et j'ai changé l'architecture à plusieurs reprises. Ce n'est qu'avec le GacUI que je développe actuellement que j'ai senti que j'étais sur la bonne voie. Une conclusion à laquelle je suis arrivé au cours de ce processus est la suivante : la conception de Windows Presentation Foundation est vraiment parfaite... En plus de faire ces choses, j'ai également développé trois programmes de rendu d'objets en trois dimensions. Les deux premiers ont été réalisés avant l'obtention de mon diplôme. , le dernier a été développé il y a un an parce que je ne savais pas comment utiliser mon temps libre pour enrichir ma vie. Il a été développé pour tuer le temps.


Programmeur légendaire Zhihu Wheel Brother, je me suis agenouillé après avoir lu ceci


Ici, je pense pouvoir répondre à une question à laquelle je ne pouvais pas bien répondre il y a un mois de la part de mes jeunes frères et sœurs. Comment puis-je trouver un emploi chez Microsoft ? Parce que j'ai écrit tout ce que j'ai fait ci-dessus sur mon CV. En même temps, si tu ne poses cette question qu'en terminale, c'est déjà trop tard...


Il convient de mentionner que depuis ma première année, j'entraîne un étudiant d'une école de logiciels qui n'avait presque aucune base et qui avait deux niveaux en dessous de moi pour apprendre la programmation. Afin de permettre à l'autre partie d'avoir une base solide en C++, un bon niveau d'écriture de tests unitaires et d'être capable de proposer intuitivement des conceptions pas trop mauvaises après avoir reçu ma formation de 3 ans, j'ai révisé beaucoup de contenu sur le C++, en particulier pour Je prépare plusieurs cours de pointeurs depuis plusieurs jours et il y a un devoir chaque jour. Au cours de ce processus, j'ai profondément ressenti que si vous voulez améliorer rapidement votre niveau de programmation, vous devez toujours faire quelque chose que vous pouvez faire, mais c'est si difficile que vous ne pouvez pas le faire si c'est juste un peu plus difficile. Si vous persistez ainsi pendant encore plusieurs années, vous entrerez certainement dans les rangs des maîtres.


Par conséquent, lors du processus d'organisation des devoirs, j'ai délibérément reporté le contenu sur les pointeurs. Tout d'abord, laissez l'autre partie accepter les variables et les boucles de branchement, puis développez un bon style (par exemple, vous ne pouvez pas toujours nommer les variables avec une seule lettre, etc.), puis apprenez à utiliser des tableaux, puis l'étape suivante concerne les pointeurs. sans conversion de type forcée. Quelques opérations, et en un mois j'ai créé une classe de chaînes avec des tests unitaires. L'essentiel des pointeurs est de faire en sorte que l'autre partie comprenne profondément le concept selon lequel « le pointeur lui-même est un nombre pointant vers la position ». À cette fin, j'ai spécialement conçu (mais je n'ai pas implémenté) un langage assembleur avec un seul tableau global de longueur infinie pour expliquer certains concepts complexes derrière les pointeurs. Après cela, il y a quelques connaissances sur l'orientation objet, les modèles de conception et les éléments liés aux moteurs de script.


Le projet de fin d'études de l'étudiant est un moteur de script de langage dynamique simple, et l'implémentation du moteur de script exécute correctement une bibliothèque de fonctions de traitement de liste sur laquelle j'ai imité Linq. Cette implémentation de fermetures est superposée, ajoutant des fonctions de suppression à un objet partout et créant divers itérateurs d'exécution retardée, qui peuvent tester l'implémentation d'un moteur de script. L'autre partie a été recrutée par NetEase après avoir obtenu son diplôme et a reçu des soins humains en termes de traitement.


Programmeur légendaire Zhihu Wheel Brother, je me suis agenouillé après avoir lu ceci


Mon parcours de programmation comprend non seulement les programmes que j'ai suivis pendant mon temps libre, mais également le processus de stage et de travail chez Microsoft. Quand j'étais au lycée, j'ai entendu parler du Microsoft Club de l'Université de technologie de Chine du Sud, et j'avais aussi un certain désir pour Microsoft. Par conséquent, après m'être inscrit, en plus du syndicat étudiant du collège, j'ai payé de près. attention au Microsoft Club. Recrutez de nouveaux membres et ignorez toutes les autres sociétés. Mais pour être honnête, mon travail au sein du Student Union et du Microsoft Club n’était qu’un spectacle secondaire, et je n’ai jamais rien fait de sérieux.


Quand j'étais en deuxième année à l'université, lorsque le Microsoft Search Technology Center (STC) est venu au Microsoft Club pour collecter des curriculum vitae, j'ai rencontré le professeur Chen Jian sur la route, le professeur mentionné précédemment, et je lui ai parlé de cette affaire. Plus tard, j'ai abandonné parce que l'autre partie disait que j'étais trop jeune, parce que tous les autres étaient des étudiants diplômés. Lorsque j'étais en première année, l'enseignante Chen Jian m'a mentionné qu'elle pouvait demander à d'anciens camarades de classe de m'aider à soumettre mon CV de stage chez Microsoft. J'ai donc reçu un entretien téléphonique de Microsoft Shanghai en mars 2008. Il y a eu deux entretiens téléphoniques, la première fois avec un responsable des ressources humaines et la deuxième fois avec un ingénieur logiciel. Au cours du deuxième entretien téléphonique, nous avons parlé de Free mentionné ci-dessus et avons également eu une discussion passionnée sur certains problèmes de structure de données et de conception de framework. Quelques jours plus tard, j'ai reçu l'avis d'entretien et je me suis rendu au port d'information numérique de Zizhu, dans le district de Minhang, à Shanghai, pour un entretien. C'était le premier entretien de ma vie.


#Stage


Les modalités d'entretien de Microsoft sont précises à la seconde près, ce qui est beaucoup plus convivial que celui de certaines entreprises et ne fera pas perdre des heures aux autres. Il y a eu trois séries d'entretiens pour le stage, et toutes les conversations se sont déroulées en anglais, même si un seul d'entre eux était étranger. Je me souviens encore vaguement que lorsque j'ai été interviewé par ce jeune étranger, j'étais trop nerveux et je n'ai pas réussi à donner la réponse optimale à une question simple. Mais ils m'ont finalement laissé rejoindre une équipe Microsoft WCF Tools à Shanghai en tant que stagiaire.


Cette équipe a un responsable du développement logiciel, M. Ge Ziang, que je respecte beaucoup. M. Ge est une personne qui aime l'agile et se consacre souvent à sa pratique. Au cours de mon stage de 4,5 mois, il m'a beaucoup appris sur le génie logiciel, et la chose la plus importante qui m'a beaucoup profité était les tests unitaires.


De plus, j'ai également fait l'expérience d'itérations rapides, de réunions Scrum, de programmation en binôme et de processus de développement collaboratif multi-personnes basés sur un système de gestion de versions de code source (nous avons utilisé TFS). Après avoir modifié PetShop pour créer une démo WCF pour la conférence TechEd, corrigé des bugs pour l'outil de développement WCF de Visual Studio 2010 et développé un éditeur de fichiers de configuration hautement évolutif, j'ai terminé mon stage chez Microsoft en décembre 2008. Après ce stage, ma capacité à contrôler le code source a également été améliorée, et cela se reflète directement dans la qualité du code des projets que je développe pendant mon temps libre.

# Devenez un habitué


Avant la fin du stage, on m'a proposé un entretien en tant qu'employé à temps plein (ETP). La situation était très grave à cette époque. La crise des subprimes aux États-Unis en 2008 a officiellement touché Microsoft Shanghai en octobre, et l'entreprise a décidé de réduire le nombre de recrutements d'employés à temps plein au cours de cette période. J'ai passé un entretien pour un emploi permanent en novembre et cet incident m'a rendu très nerveux. Plus tard, M. Ge a dit que sa suggestion personnelle était qu'il espérait que je resterais et continuerais à travailler après l'obtention de mon diplôme, ce qui m'a rassuré.


Il y a cinq séries d'entretiens pour que les stagiaires deviennent des employés à temps plein. Ce qui m'a très profondément impressionné, c'est qu'en un seul tour, l'intervieweur m'a posé beaucoup de questions très complexes, et m'a finalement posé une question sur la mise à jour en ligne des arbres binaires d'indices, mais je ne me souviens pas du contenu spécifique. Je me souviens juste qu'après avoir passé beaucoup de temps à réfléchir enfin à un algorithme correct, le temps était révolu et je n'avais plus le temps d'écrire du code sur le tableau blanc. Plus tard, j'ai finalement réussi l'entretien, et l'une des rares places m'a finalement été retirée. Cependant, j’ai entendu dire que les restrictions seraient assouplies dans quelques mois et que ce ne serait pas aussi difficile que lors de mon entretien.


Au cours du processus de stage et d'entretien, j'ai senti que de nombreux cours proposés par l'École de logiciels de l'Université de technologie de Chine du Sud étaient en fait très utiles, en particulier ceux sur la structure des données, les modèles de conception et les tests de logiciels. Ce sont des connaissances très utiles au travail, et il est également nécessaire de continuer à accumuler de l'expérience dans ces domaines dans les travaux futurs. C'est juste que parce que le collège compte un grand nombre d'étudiants et qu'un nouveau collège manque toujours de personnel enseignant, beaucoup de mes camarades de classe ont dit qu'il était difficile de comprendre le rôle du contenu mentionné dans le manuel. Vraisemblablement, les choses vont bien mieux aujourd’hui qu’elles ne l’étaient à l’époque.


#Microsoft SQL Server


Il a fallu des dizaines de jours entre la fin de l’entretien et le moment où j’ai reçu l’offre, et la dernière notification des RH est finalement arrivée le soir du Nouvel An. Au cours des six mois suivants, j'ai continué à faire mes propres activités à l'école, j'ai participé occasionnellement à quelques activités pour introduire l'expérience, etc., et je suis sorti jouer avec certaines personnes. Après avoir obtenu son diplôme, il est allé à Shanghai Microsoft. Quelque chose s'est produit au milieu. En raison du changement de quota, même si j'ai accepté l'offre des outils WCF, j'ai finalement été affecté au groupe SQL Server. Je n'ai pas reçu de notification avant cela. Comme je n'aime pas les bases de données et que je comprends très peu SQL Server, j'ai passé un an et demi à développer SQL Server Management Studio (également connu sous le nom de "interface" légendaire). Durant cette période, j'ai diffusé quelques connaissances sur les tests unitaires, le développement d'interfaces, les modèles de conception, Linq et les analyseurs de syntaxe avec mes collègues.


Cette année et demie d'expérience m'a fait beaucoup grandir, principalement parce que par rapport aux stages, lorsque je travaille de manière formelle, je dois toujours avoir des échanges passionnés et approfondis avec d'autres équipes, entreprises, ethnies, pays et espèces, et cela aussi prend beaucoup de temps. Parfois, je dois m'envoler pour les États-Unis pour constater la supériorité du socialisme. La partie interface du logiciel formel est très complexe. Non seulement le DPI modifie le système d'exploitation et le processus de localisation (la majeure partie du contenu consiste à traduire le texte de l'interface dans d'autres langues), mais la disposition de l'interface doit également être modifiée. être automatiquement ajusté afin qu'une partie du texte ne puisse pas être perdue. Ou bien les boutons ne sont affichés qu'à moitié, et divers types de personnes handicapées (en particulier les personnes ayant perdu la vue) doivent être pris en charge, et certaines interfaces d'exécution doivent être fournies pour certaines personnes. -dessiner du contenu complexe afin que l'équipe de tests automatiques puisse terminer son travail.


    Programmeur légendaire Zhihu Wheel Brother, je me suis agenouillé après avoir lu ceci


Cette expérience m'a fait ressentir à quel point il est difficile de développer une interface rigoureuse. Un autre sentiment concerne les changements de la demande. L'existence de modèles de conception est destinée à résister aux changements d'exigences. Je ne pouvais pas comprendre cette vérité avant de commencer à travailler. Vous devez si bien concevoir l'architecture d'un logiciel qu'après des changements à grande échelle dans les exigences, votre code dans son ensemble puisse toujours être beau, facile à modifier, performant et sûr. Chaque changement ne peut pas être un correctif, vous devez toujours refactoriser pour que votre code dans son ensemble soit bon à tout moment. Afin d’atteindre cet objectif, vous devez maîtriser et utiliser des modèles de conception pour développer des projets.


L'un des rares avantages de Microsoft par rapport à d'autres sociétés est qu'il vous laissera beaucoup de temps pour terminer lentement le logiciel. Et cette bonne définition se concentre bien entendu sur la fonctionnalité et la maintenabilité. Si un morceau de code utilise une méthode très sophistiquée pour accomplir une tâche à grande vitesse, mais est si compliqué qu'il ne peut pas être compris par les responsables suivants, même s'il est entièrement écrit avec des commentaires, alors le code n'a aucune valeur pratique. Un bon morceau de code ne réside pas dans l'intelligence de sa conception, ni dans l'avancée de son algorithme, mais dans le fait qu'il peut être développé par des milliers de personnes en même temps pendant 10 ans, et en ajoutant continuellement des fonctions, cela ne deviendra pas trop déroutant. Cela a nécessité une réécriture.


# Changement d'emploi


Plus tard, j'ai demandé un transfert de personnel vers Microsoft Research Asia (MSRA) pour certaines raisons. En janvier 2011, après avoir obtenu l'approbation de mon manager, je suis parti de Shanghai à Pékin pour assister à un entretien à l'institut. Il y a encore cinq séries d'entretiens cette fois. Cet entretien a été difficile. L'un des intervieweurs a trouvé beaucoup de choses liées aux compilateurs dans mon CV et a décidé de me demander d'implémenter une fonction strncpy. L'exigence est que le nombre d'accès CPU à la mémoire soit le minimum. Cela implique divers problèmes tels que les opérations de bande passante, d’alignement et de décalage d’octets binaires. La méthode elle-même est déjà très lourde et les erreurs sont toujours inévitables lors de l'écriture du code sur papier, donc je n'ai toujours pas le temps de finir d'écrire l'intégralité du programme. Un autre intervieweur, étranger, a également travaillé sur un compilateur lorsqu'il était jeune. Ce qui m'a surpris, c'est qu'il ne m'a posé aucune question pendant l'entretien, mais a parlé de divers algorithmes et de problèmes avec les compilateurs en une heure. les connaissances que je connaissais ont été révélées parce que je devais répondre aux questions. J'ai alors développé une profonde amitié avec cet homme.


Mon transfert a été approuvé peu de temps après. Après avoir effectué quelques travaux de finition, notamment l'établissement de normes de tests unitaires pour l'équipe SQL Server à Shanghai, je suis allé à Pékin en avril 2011 et je suis officiellement devenu membre de Microsoft Research Asia, effectuant des travaux liés à la recherche sur les systèmes distribués.


#Microsoft Research Asie


Le travail de l'institut de recherche est assez particulier, notamment parce que je n'ai participé à aucun projet à long terme et que j'ai toujours travaillé avec quelques chercheurs. Le premier projet est principalement un projet d'analyse dynamique visant à déterminer si un programme d'architecture C/S va se bloquer et à fournir des rapports pour aider les programmeurs à comprendre la cause profonde du problème et à modifier et déboguer davantage leurs propres programmes. Plus tard, je les ai suivis pour construire un moteur de recherche d'images et une base de données de graphes distribués. Avant de partir, je les ai aidés à construire plusieurs robots pour enrichir les données du propre projet de graphes de connaissances de Microsoft, etc.


Au cours des dernières années à l'institut, en plus d'acquérir des connaissances techniques et d'apprendre à devenir un vétéran, la principale croissance technique vient toujours des projets développés par moi-même. La structure de l'institut est très adaptée aux programmeurs comme moi qui aiment jouer avec des technologies complexes (mais pas nécessairement nouvelles). De plus, mon patron direct à l'institut était Zou Xin, ce qui m'a fait comprendre à quel point un bon leader est important.


Cela fait quatre ans et demi que je l’ai écrit. L'intention initiale d'écrire GacUI était de créer un IDE pour mon propre langage, mais c'était seulement amusant d'écrire un analyseur en C++. J'avais déjà expérimenté des projets utilisant C# pour écrire une interface utilisateur et C++ pour écrire des algorithmes d'invite intelligents.


Programmeur légendaire Zhihu Wheel Brother, je me suis agenouillé après avoir lu ceci


Plus tard, j’ai simplement pensé à quel point ce serait génial si tout cela pouvait être écrit en C++. Mais la prise en charge de MVVM par la bibliothèque GUI C++ est nulle, c'est pourquoi GacUI a vu le jour. Mais la charge de travail liée à la création d'une bibliothèque d'interface graphique est vraiment un peu lourde, et j'ai une bonne expérience en développement, donc j'y travaille depuis si longtemps. La version 1.0 devrait sortir cette année...


En développant GacUI, j'ai non seulement mis à profit l'expérience et les leçons des 7 bibliothèques GUI Heavenly Kingdom que j'avais construites au fil des ans, mais j'ai également appris à développer des programmes clients multiplateformes au moindre coût. En fait, il n’est pas du tout difficile d’écrire un programme multiplateforme. Je ne sais pas pourquoi tant de gens en font toute une histoire sur Internet. Un autre avantage que GacUI m'a apporté est que j'ai essentiellement révisé tout le contenu des modèles de conception, et en raison de sa taille énorme, j'ai également créé un petit outil qui implémente spécifiquement des dépendances d'ordre partiel entre différents dépôts git - utilisé pour le code C++ sous un l'intégralité du dépôt est regroupée dans deux fichiers afin qu'il puisse être utilisé directement par d'autres dépôts. Au départ, je voulais essayer le sous-module, mais le sous-module ne peut implémenter que des dépendances arborescentes, ce qui est vraiment mauvais.


GacUI a enfin revu les principes de compilation appris auparavant. Parce que dans le processus de compilation de XML, GacUI traduit tout en bytecode d'un moteur de script. En fin de compte, soit il exécute le script directement, soit il traduit le script en C++ (en cours de développement). Par conséquent, pour y parvenir, il est inévitable d'écrire un compilateur, et les éléments compilés doivent pouvoir communiquer avec les classes en C++, j'ai donc revu le contenu de COM (même si je ne l'ai pas utilisé, j'ai juste essayé J'ai fait la même chose).


Une fois la génération C++ terminée, je continuerai à écrire GacJS que j'ai commencé l'année dernière, à déplacer GacUI vers le navigateur et à exécuter mon IDE sous tous ses aspects. Les domaines dans lesquels le C++ est adapté sont vastes et profonds.


# Partir à l'étranger


Je dois dire que j'ai changé de travail pour l'Institut de recherche parce que je n'aimais pas les bases de données. En conséquence, l'Institut de recherche a vu que je venais de SQL Server et a créé beaucoup de choses sur les bases de données. Plus tard, j'ai demandé à mon patron si je pouvais faire autre chose ? Le patron m'a demandé ce que tu voulais faire, et j'ai dit d'essayer d'obtenir des trucs de compilateur ? Mon patron s'est donc arrangé pour que je travaille pour un autre institut de recherche afin de créer un langage de requête pour une base de données de graphiques distribués. Mais ce genre de chose est super simple au départ. Après l'avoir terminé rapidement, je suis redevenu développeur de bases de données. Cela m’a donc fait comprendre une vérité : la plupart des instituts de recherche n’ont rien qui me plaise. Programmeur légendaire Zhihu Wheel Brother, je me suis agenouillé après avoir lu ceci


Alors après quelques années, parce que mon mécontentement à l'égard de Pékin (primaire) et de l'institut (mineure) s'est progressivement accru, j'ai rapidement trouvé une femme et je me suis impliqué. En fait, c'est la même chose qu'un entretien ordinaire :


... Licencier des personnes ou incapables d'embaucher



4 Puis interviewer


5. 6 .Demander un visa


Ce processus m'a fait soupirer que les intervieweurs américains n'ont tout simplement pas vu le monde. La pression de la concurrence est trop faible et les questions sont très faciles à résoudre. Ils doivent venir en Chine pour rester et se rencontrer, sinon l'impérialisme américain sera vaincu tôt ou tard. Mais je pense qu'un autre aspect est que l'équipe qui a créé l'interface graphique multiplateforme pour Office a jeté un coup d'œil à la GacUI que j'ai créée. Je suppose qu'elle l'a trouvé plutôt bien, alors ils m'ont interviewé avec désinvolture. C'est également possible.



Je dois mentionner ici que Microsoft prend grand soin de ses employés. Non seulement elle m'a fourni des services de déménagement de haute qualité, mais elle m'a également trouvé une tante après mon arrivée aux États-Unis pour m'aider à m'intégrer dans la société moderne. Il a également dit que si je me sens génial et que je n’ai pas besoin de ces choses, je recevrai 20 000 dollars. Même chez Google, ceux-ci ne sont disponibles que pour ceux qui sont contraints de se rendre aux États-Unis par l'entreprise (plutôt que pour les employés qui souhaitent partir seuls à l'étranger). Le plus important est que les employés de Microsoft puissent bénéficier de réductions sur les BMW, ce qui est vraiment appréciable.


Bien qu'il n'y ait pas beaucoup de différence entre les salaires des personnes talentueuses en Chine et aux États-Unis, mis à part le fait que les prix de l'immobilier dans les régions informatiques des États-Unis sont similaires à ceux de Pékin, Shanghai et Guangzhou, d'autres choses, à l'exception des voitures et Les appareils électriques aux États-Unis sont beaucoup plus chers. Dans l'ensemble, le bonheur a diminué. Heureusement, la pollution de l'air dans les régions chinoises développées en informatique est si grave qu'elle compense non seulement cette lacune, mais me permet également de me sentir mieux si j'étais plus pauvre. Depuis que j’ai sauté le mur, je vis une vie où je n’ai plus le temps de jouer avec des produits électroniques, je conduis quand j’ai le temps et je vais travailler quand je n’ai pas le temps.

Effectivement, les cochons peuvent voler s’ils se tiennent face au vent. Évidemment, les salaires dans d'autres secteurs sont bien inférieurs en Chine qu'aux États-Unis, mais l'écart pour les programmeurs n'est que de 1 à 3 fois. Effectivement, la Chine a encore besoin d’un grand nombre de programmeurs professionnels dotés d’une formation spécialisée pour combler les lacunes du développement du socialisme.


#Microsoft Office


Cette fois-ci, lorsque j'ai changé de travail, j'ai rencontré quelqu'un de Microsoft qui voulait licencier des employés de Nokia. En conséquence, la plupart des équipes ont vu leurs quotas gelés. Seul Office qui avait les moyens financiers suffisants pouvait recruter des gens, je n'avais donc pas d'autre choix que de le faire. venir au bureau. À l'origine, mon objectif était de créer un moteur JS pour Edge, ou d'aller dans le groupe VS pour créer un compilateur ou quelque chose du genre, mais ils étaient trop pauvres, j'ai donc dû abandonner.

Travailler dans Office a été pour moi une révélation. J'ai découvert comment créer un logiciel écrit par 10 000 personnes pendant 30 ans et contenant des centaines de gigaoctets de code dans un seul instantané de dépôt. Parce que la machine est trop chère, lorsque vous modifiez le code, vous ne pouvez le compiler que localement. Par conséquent, l'ensemble de CI que nous avons créé sur la base de msbuild comprend également le code de la lib/dll qui doit être lié s'il n'est pas présent. le disque dur. Accédez au serveur pour trouver le cache compilé du point de contrôle actuel et téléchargez la fonction compilée. Par conséquent, les jours où la ferme de build raccroche occasionnellement, la compilation locale ne peut pas être effectuée en raison de la connexion réseau déconnectée.


#Épilogue


En repensant à mon parcours de programmation, lorsque j'étais étudiant, j'ai probablement commencé à écrire des jeux, puis à écrire des moteurs de jeux, puis à me spécialiser dans les graphiques, les bibliothèques GUI et les moteurs de script nécessaires aux moteurs de jeux. Enfin, grâce à mon énergie, j'ai donné naissance à. Bibliothèques GUI et périphérique de compilateurs. Lorsque j'ai conçu le moteur de script dès le début, j'ai accordé une grande attention à la question de savoir comment mettre le script en pause - en fait, cela découlait essentiellement des besoins du jeu - de sorte que la chair humaine a fait diverses implémentations étranges de la coroutine. En fin de compte, j'ai finalement appris la méthode orthodoxe, donc le problème qui aurait pu être facilement résolu est devenu un peu plus compliqué en raison des exigences ultérieures (pour le dire franchement, il s'agit de permettre aux scripts de personnaliser (ou de pirater) les coroutines liées systèmes de type. contenu), ce qui nécessite des méthodes infiniment complexes pour implémenter les coroutines. Pourquoi les humains se font-ils du mal ?


Quand il s'agissait de travailler, c'était essentiellement


1. Au départ, j'avais prévu d'acquérir Visual Studio, et je n'aimais pas SQL quand j'étais étudiant. Cependant, lorsque je travaillais, à cause de la crise économique, J'ai obtenu SQL. Le contenu du travail comprenait l'apprentissage de connaissances professionnelles sur les bases de données et les contrôles de glissement.


2. Mais après avoir travaillé pendant plusieurs années, j'avais toujours l'impression que je n'aimais pas SQL, alors je suis passé à MSRA. En conséquence, MSRA a fait de son mieux pour me laisser faire des tâches de base de données. Je ne pense pas que je suis parti parce que je n'aimais pas faire ça...


3. Plus tard, j'ai pensé, eh bien, puisque de toute façon, je n'ai pas besoin de faire le compilateur, je vais juste le faire. faites glisser le contrôle. J'ai donc dit aux gens d'Office : regardez à quel point je suis génial dans la création de GacUI ! Les gens du bureau ont dit : Merde ! J'ai donc été recruté pour être responsable de la partie non-GUI de l'équipe.


4. Après six mois, le patron a commencé à organiser le travail et j'ai pensé à une façon d'exprimer que j'aime toujours travailler sur d'autres choses. J'ai donc finalement commencé à faire mon ancien travail : développer des compilateurs internes pour les programmeurs Office.


Finalement, j’ai fini par faire le travail que j’aime.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:Java学习指南
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal