Et encore une fois, le 256e jour de l'année

Salut Le deux cent cinquante-sixième jour de l'année bat son plein, et les gars d'Avito et moi tenons à féliciter tous ceux qui lisent ce blog le jour de la programmation et plongent un peu dans la nostalgie.


Sous la coupe, on se souvient en l'honneur des vacances de nos premières lignes de code. Et aussi - le code et les programmes dont nous nous souvenons le plus. Et dites pourquoi. Et bien sûr, nous attendons vos histoires avec impatience dans les commentaires!



Quel genre de langage de programmation est dans l'image?

Nous sommes nostalgiques aujourd'hui, nous avons donc choisi COBOL pour nos félicitations. C'était le premier langage de programmation standardisé (standardisé en 1960). Cela signifie qu'un programme écrit sur un ordinateur peut être compilé et exécuté sur un autre ordinateur sans aucune modification. À cette époque, c'était une percée énorme, d'autres langues nécessitaient un raffinement des programmes lors de la tentative de les exécuter sur un autre ordinateur, souvent c'était difficile et long.


La bonne journée du programmeur chez COBOL ressemble exactement à ça. (Merci pour l'excursion et code pik4ez ).


De quoi parle ce post?


L'idée du poste est née lors de la fête d'entreprise d'été, lorsque mes collègues et moi avons soudainement commencé à parler des premières étapes de la programmation. Et iseregin et moi avons décidé de rassembler leurs souvenirs et de les partager avec le public. Alors ...


Premières lignes de code


Il semblerait que cela soit intéressant dans les premières lignes de code? Certains le pensaient également au début.


Dev 1: Je pensais que tout le monde avait la première ligne de code quelque chose comme:


!#/bin/bash echo "Hello World" 

Dev 2: Dans notre région, c'était plus tôt: MsgBox "Hello World" . Parce qu'il fallait encore essayer de trouver un disque avec Linux.


La discussion, pourrait-on dire, a déjà commencé à partir des premières remarques du chat. Et puis nous avons obtenu des réponses intéressantes et détaillées que nous voulons partager. C'est ce que nos collègues d'Avito nous ont dit.


image

Andrey Shodan Aksyonov, responsable de l'infrastructure de recherche: «Les toutes premières lignes de code que j'ai essentiellement entrées dans l'ordinateur n'étaient certainement pas les miennes. Ce sont des programmes de base étranges que j'ai réimprimés dans des magazines (à cause d'une enfance difficile, de jouets à huit bits). Mais je me souviens exactement comment les autres ont utilisé mon programme pour la première fois.

Ce fut l'ère de la fin du DOS. J'ai écrit un programme d'assemblage qui a capturé l'écran en mode graphique. De plus, contrairement à tout ce qui se trouvait sur le "marché", elle a géré tous les modes vidéo en général, y compris les hackers complètement fous. Par exemple, si le mode de fonctionnement VGA standard était de 320x200 et 256 couleurs, alors les personnes utilisant une sorte de hacks vils et reprogrammant le contrôleur, qui conduit les rayons à travers le tube MDG, ont atteint 360x240. J'ai réussi à écrire un programme qui a fait face à tout cela, a capturé l'écran (mémoire vidéo), l'a enregistré dans un fichier, puis à partir de ce vidage, vous pouvez habilement .bmp l'enregistrer comme un utilitaire hors ligne séparé. J'ai mis fin à ce programme, l'ai publié sur Internet et j'ai oublié avec succès.

Près de 12 à 15 ans se sont écoulés depuis ce moment. J'ai reçu un e-mail. Une telle feuille, comme si Léon Tolstoï écrit, sur trois feuilles - et ce n'est que la première phrase. «Bonjour, je suis un camionneur du Canada. Utilisateur actif de votre programme. Je n'ai pas d'argent, mais j'ai cinq enfants. Et j'ai trouvé le 486e ordinateur dans la décharge, en plus j'ai volé de vieux jeux sur Internet, et maintenant mes enfants jouent sauvagement à différents jeux sur cet ordinateur. En même temps, leur jeu préféré ne peut rien sauver: il est impossible de sauvegarder un tableau d'honneur commun, pas même un seul meilleur score, et même une capture d'écran ne peut pas être prise, car une sorte de mode de toxicomanie est utilisé. Et votre utilitaire fait un excellent travail, et les enfants l'utilisent constamment. Oui, moi-même, ça arrive, entre les vols ... Donc, comme nous sommes des utilisateurs actifs de votre ancien programme, j'ai décidé de vous encourager. Voici un code de transfert Western Union de 20 $. " J'ai pratiquement pleuré et décidé que le jour le plus sombre, quand il arriverait enfin et que j'aurais faim, ici je prendrais ce MTCN (code de transfert), je l'encaisserais et la porte. Malheureusement, de nombreuses années se sont écoulées depuis lors, de sorte que l'on ne sait pas où se trouve actuellement le MTCN. Il y en a peut-être dans les anciennes archives du courrier, si je ne les ai pas perdues pendant ce temps. Je reconnais le jour le plus noir. "

image

Artyom Razinov, un développeur iOS de premier plan: «En cinquième année, j'ai écrit le code moi-même dans le programme pour enfants Logo Mira, tandis que tous les autres gars les plus performants jouaient à des jeux. J'ai créé un programme et cela a fonctionné. Ce jour-là, j'ai décidé de devenir programmeur. »



image

Daniil Popov, développeur Android senior: s := width * height; «C'était une ligne sur Pascal qui calculait l'aire du rectangle. L'affaire concernait la programmation de cours pour les élèves de huitième année. Ce qui m'a le plus impressionné, c'est que je peux donner des commandes à l'ordinateur et qu'il les exécute implicitement. Une sorte de maître des machines. Depuis lors, je l'aime vraiment lorsque la séquence d'actions (algorithme) aboutit au résultat. »

image

Dmitry Belov, développeur backend senior: «C'était la première commande de freelance étranger. Étudiants affamés, je voulais gagner au moins un peu d'argent, et ce n'était pas si important sur quoi écrire: il n'y avait presque pas de connaissances, pour étudier quand même à partir de zéro.

J'ai reçu une commande pour faire une carte flash animée. J'ai dû apprendre un petit script d'action. Stackoverflow n'était pas encore là, j'ai dû lire la documentation.

Le client était satisfait, j'ai réussi à terminer le projet tout de suite. Il a gagné ses quinze premiers dollars en freelance. "

image

Ilya Gribov, développeur front-end: «J'aimais la programmation dès la 8e année de l'école (Basic, Pascal), mais il y a eu une longue pause. Il n'est revenu dans cette entreprise qu'après l'université et a dû se souvenir de beaucoup de choses!
Hiver, 6 heures du matin, café fort, avant d'aller travailler (puis j'ai travaillé du tout en informatique)

 static void main(String[] args) { System.out.println("!"); } 


Émotions: QU'EST-CE QUE String [] args ??? ”.

image

Vladimir Akimov, développeur front-end senior: «Ma première ligne de code a été écrite parce que je voulais vraiment entrer dans le repaire du rap. J'avais environ 17 ans, je ne savais pas comment raper et écrire de la musique, et j'ai décidé d'entrer dans une équipe sympa grâce au design.

Ensuite, personne n'a participé à la promotion d'artistes indépendants sur Internet. Ainsi, les amis dessineront la pochette, sortiront le disque et le distribueront à leurs amis. Et il y avait un site MySpace où vous pouviez concevoir froidement la page d'un musicien. J'ai regardé comment les gars d'outre-mer le font. À un moment donné, je suis tombé sur un gars qui vivait en Allemagne et j'ai fait une page pour Seryoga. Celui qui a chanté "Black Boomer, Remember"? J'ai décidé d'espionner comment faire ça. MySpace était disposé sur des tables, j'ai repris toute cette page, compris son idée et l'ai empruntée.

Mes premières pages étaient similaires à ses pages. Je l'ai fait l'un après l'autre, j'ai essayé de les promouvoir. Je me suis donc lié d'amitié avec une équipe. Il y avait un designer qui m'a invité à écrire du code et a pris les photos sur lui-même. Nous avons commencé à créer des pages MySpace pour tous nos artistes de rap russes populaires. Et puis j'ai été invité à travailler au bureau MySpace de Saint-Pétersbourg pour travailler.
Ensuite, j'ai écrit beaucoup de lignes de code - du même type, tabulaire: c'était CSS et la mise en page, rien de compliqué. Maintenant, n'importe quel junior le découvrira et le rendra plus frais. Mais ce fut un «wow», car nous avons travaillé avec IE5 et d'autres navigateurs, pour lesquels nous avons dû faire beaucoup de magie.

S'il n'y avait pas cette histoire, je ne me lancerais pas dans la programmation, je ne viendrais pas concevoir, je ne comprendrais pas ce que c'est.

image

Konstantin Seleznev, développeur backend: «Mon camarade de classe m'a« accroché »à la programmation en septième année (vraiment, comme un médicament):
- Pss, mec, tu veux de la programmation? - quelque chose comme ça, il m'a dit, m'a remis un disque avec Borland Development Studio et une énorme collection d'articles sur Delphi.

Plus tard, dans l'un de ces articles, j'ai trouvé ce qui suit: «Apprenons à connaître l'utilisateur. Par exemple, nous affichons soudain le message «Il est temps de dormir» et ... coupons le moniteur! La manivelle ne pourra pas l'allumer ... ". J'ai essayé le code donné dans l'article et tout a fonctionné pour moi! Je me sentais comme un vrai hacker!

Cependant, après cela, j'ai dû redémarrer l'ordinateur, car je n'ai vraiment pas rallumé le moniteur. »

 procedure TForm1.Button1Click(Sender: TObject); begin MessageDlg(' .   .     !', mtInformation, [mbOk], 0); SendMessage(Application.Handle, WM_SYSCOMMAND, SC_MONITORPOWER, 0); end; 



Et voici les histoires du podcast leader Podlodka.


image

Stas Tsyganov, responsable du développement mobile, Tutu.ru: «Ma mère a travaillé comme professeur d'informatique et j'ai eu accès aux ordinateurs assez tôt. Et ma première expérience de programmation a été Cucaracha pour MS-DOS. J'ai appris avec intérêt qu'elle est toujours en vie et même portée sur Windows.

    5   


Et le premier code que j'avais était quelque chose comme ça. "

image

Egor Tolstoy, responsable du développement de la plate-forme d'application, Avito: «Vers dix ans, je suis venu rendre visite à mon frère aîné, qui avait alors son premier ordinateur, sur MS-DOS. En plus des pseudos effrénés dans le premier GTA (dans la localisation russe, il s'appelait le beau nom "Avtovor") et Duke Nukem, nous avons découvert la programmation pour nous-mêmes. Les mathématiques ne m'attiraient pas beaucoup à l'époque, mais le branchement logique et le dessin étaient parfaits! Le premier programme a donc été la génération de compositions suprématistes à partir de cercles et de lignes: CIRCLE(10, 10), 50 ”.

image

Katya Petrova, responsable du développement, Frontend Architecture, Avito: «Forcer une tortue dans les mondes du logo à dessiner des cercles et écrire« Bonjour le monde »en Pascal lors des cours d'informatique était, bien sûr, divertissant et instructif. Mais c'était encore plus amusant en 8e année de conduire des patrons dans le WoW Classic (alors toujours pas courant). Voici donc mes premières lignes de code vraiment UTILES. "

 #showtooltip Regrowth /cast [@mouseover,exists,help][@player] Regrowth(Rank 5) 



image

Zhenya Catella, responsable du développement mobile, Yandex.Transport: «Quelque part en 8e ou 9e année, je me suis intéressé à la programmation, alors mes parents m'ont acheté un livre sur Turbo Pascal. Je me souviens encore qu'elle était rouge. Et au début, il y avait des choses simples, comme les cycles et les conditions. Et puis, semble-t-il, le premier chapitre s'est terminé par une histoire sur ce qu'est la récursivité. Et il fallait résoudre l'énigme de la tour de Hanoi. Par conséquent, à l'exception des Hello Worlds, il peut être considéré comme mon premier programme. »

La ligne de code la plus mémorable


Bien entendu, la discussion ne s'est pas limitée aux premières lignes de code. Et nous avons également parlé du code, dont nous nous souvenons vraiment pour diverses raisons.


image

Andrey Shodan Aksyonov, responsable de l'infrastructure de recherche: «Il était une fois, lorsque je travaillais dans le développement de jeux, nous écrivions bêtement notre propre moteur avec nos mains. En général, cela ne peut pas être fait, c'est impossible, mais personne ne nous l'a dit. Par conséquent, nous avons écrit à partir de zéro notre propre moteur, et tous les outils pour développer le jeu, et construit sur ce jeu, et avons réussi à faire tout cela en trois ans. Eh bien, et en particulier pendant cet igrostroy, j'ai trouvé et fait ce genre de feinte intelligente avec mes oreilles. À la toute première génération d'accélérateurs graphiques programmables, où les shaders étaient juste attachés, il y avait une courte période où le GPU pouvait être programmé en langage assembleur et présenté les instructions pour les emplacements avec vos mains. Ensuite, cette fonctionnalité a été désactivée, seul HLSL a été laissé, mais au tout début, c'était possible. Nous avons donc réussi à utiliser quatre textures à la fois en un seul passage (c'est trivial), et en même temps à compter l'éclairage, une carte des irrégularités, des ombres portées et autre chose (mais personne ne savait comment). Notre entreprise avait alors, sinon 3 savoir-faire, puis 2 savoir-faire, cette chose était l'essentiel. Puis, après un an ou deux, lorsque la technologie a progressé et qu'elle a quelque peu perdu de sa pertinence, avec la permission des autorités, j'ai publié un article dans le livre ShaderX4 à ce sujet. C'était une très belle solution d'ingénierie honnête, pour laquelle je n'ai pas honte à ce jour. Mais ce n'est pas une ligne de code, mais dix entiers! »

  Listing 5. #define POW c3 // c3.b=B, c3.a=A, for m=2. see [Beaudoin02] dp3_sat r1.rgb, t1_bx2, t2_bx2 // (1) (NH) dp3_sat r0.rgb, t1_bx2, v1_bx2 // (2) (NL) +mad_x4_sat r0.a, r1.b, POW.a, POW.b // (2) (NH)*A+B mul_x4_sat r1.rgb, r0.a, r0.a // (3) (NH)^n +mad r1.a, t0.b, SPECK.b, SPECK.a // (3) specshadow mul_sat r0.rgb, r0, r1_bx2.a // (4) (NL)*diffshadow +mul_sat r0.a, r1.b, r1.a // (4) ((NH)^n)*specshadow mad_sat r0.rgb, r0, DIFF, v0 // (5) (NL)*shadow*diffcol+ambi +mul_sat r0.a, r0.a, t1.a // (5) ((NH)^n)*shadow*specmap mul_sat r0.rgb, r0, t3 // (6) diffmap*difflighting mad_sat r0.rgb, r0.a, SPEC, r0 // (7) result +mov r0.a, t3.a // (7) diffuse map alpha 



image

Daniil Popov, développeur Android senior:

 i = 0x5f3759df - ( i >> 1 ); // what the fuck? 


Il s'agit d'un extrait d'une fonction qui calcule la racine inverse rapide de x. De tels calculs sont nécessaires dans les moteurs de jeu pour calculer l'éclairage de la scène. Ce code illisible est devenu largement connu après la sortie de Quake III: Arena.

Quand j'ai vu ce code, pour la première fois j'ai clairement réalisé l'écart gigantesque entre le code lisible et le code optimal.

image

Ilya Gribov, développeur front-end: «Je me souviens de ce code. J'ai pensé: "Comme c'est simple et concis!)" ".
 >>> comp_list = [x ** 2 for x in range(7) if x % 2 == 0] >>> print(comp_list) // [4, 16, 36] 



image

Mikhail Yudin, développeur Android senior: «J'ai écrit un arbre rouge-noir en tant qu'étudiant de deuxième année sur acm.timus.ru en utilisant le livre de Corman, et quelque chose a explosé, et j'ai vérifié cela pour une égalité nulle. Cette situation est impossible. Ils m'ont écrit que je suis Kommersant (comme vrai, dur). »

 if (this == null) 



image

Nikolai Ryabov, développeur front-end senior: «D'une certaine manière, lors de mon premier travail lié au front-end, où j'étais encore un junior très, très vert, le même développeur novice m'a lancé cette réflexion, avec les mots: "Ami, j'ai essayé de comprendre ce que c'est et comment ça marche - souffrons ensemble!" En conséquence, ma tête n'était occupée que par cela et après quelques heures, je réalisais toujours ce que c'était et ce que nous allions obtenir en conséquence. Mais je ne pouvais pas l'expliquer alors.

 const foo = Function.prototype.call.bind(Array.prototype.slice) 


Déjà beaucoup plus tard, j'ai commencé à utiliser cet extrait pour des entretiens, et il a donné d'excellents résultats: une fois que j'ai eu le problème de trouver un bon développeur pour lui transférer toutes mes compétences dans mon travail précédent, et lors d'une des conférences, j'ai rencontré une personne notable et entre les deux. le café l'a invité à dire comment ce code fonctionne. Il a réussi, contrairement à de nombreux candidats que j'ai interviewés auparavant. En conséquence, il a pleinement répondu aux attentes lorsque j'ai pris des dispositions pour son emploi à l'époque. Et à ce jour, j'aime lancer ce puzzle et regarder les expressions faciales, bien que ce code ne soit plus pertinent dans le cadre de la publication des nouvelles normes ECMAScript. »

Et pas seulement le code


Je veux terminer ce post en citant le collègue d'Andrei Shodan , Aksyonov:


«En général, une histoire n'est généralement pas limitée à une seule ligne de code. Et même un petit extrait sur dix lignes est extrêmement rare. Et les histoires les plus enchanteresses, elles n'ont probablement jamais porté sur le code, mais principalement sur les gens, sur la façon dont ce code les a affectés. Et quel type de ligne de code était spécifiquement là, ou quelle erreur stupide de deux caractères en particulier n'a absolument aucune importance. »

Certaines des histoires qui sont racontées ici ont été tournées en vidéo et publiées sur notre chaîne YouTube. Passez nous voir si vous aimez la vidéo.


Encore une fois, félicitations à tous les programmeurs (et en même temps à ceux qui travaillent en étroite collaboration avec eux). Passez cette journée agréablement et de façon intéressante.
Et partagez dans les commentaires les lignes et les histoires dont vous vous souvenez le plus!

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


All Articles