Und wieder der 256. Tag des Jahres

Hallo. Der zweihundertsechsundfünfzigste Tag des Jahres ist in vollem Gange, und die Jungs von Avito und ich möchten allen gratulieren, die diesen Blog am Tag des Programmierers lesen und ein wenig in Nostalgie eintauchen.


Unter dem Schnitt erinnern wir uns zu Ehren des Feiertags an unsere ersten Codezeilen. Und auch - der Code und die Programme, an die wir uns am meisten erinnern. Und sag warum. Und natürlich freuen wir uns auf Ihre Geschichten in den Kommentaren!



Welche Programmiersprache ist auf dem Bild?

Wir sind heute nostalgisch und haben uns für COBOL als Glückwunsch entschieden. Es war die erste standardisierte Programmiersprache (1960 standardisiert). Dies bedeutet, dass ein auf einem Computer geschriebenes Programm ohne Änderungen kompiliert und auf einem anderen Computer ausgeführt werden kann. In jenen Tagen war dies ein großer Durchbruch, andere Sprachen erforderten eine Verfeinerung der Programme, wenn versucht wurde, sie auf einem anderen Computer auszuführen. Oft war es schwierig und langwierig.


Der Happy Programmer's Day bei COBOL sieht genau so aus. (Danke für den Ausflug und Code pik4ez ).


Worum geht es in diesem Beitrag?


Die Idee der Post wurde während der Sommer-Firmenfeier geboren, als meine Kollegen und ich plötzlich anfingen, über die ersten Schritte in der Programmierung zu sprechen. Und iseregin und ich beschlossen, ihre Erinnerungen zu sammeln und mit der Öffentlichkeit zu teilen. Also ...


Erste Codezeilen


Es scheint so interessant in den ersten Codezeilen? Einige dachten es auch zuerst.


Dev 1: Ich dachte, jeder hätte die erste Codezeile wie:


!#/bin/bash echo "Hello World" 

Dev 2: In unserer Gegend war es früher: MsgBox "Hello World" . Weil Sie immer noch versuchen mussten, eine Festplatte unter Linux zu finden.


Man könnte sagen, die Diskussion begann bereits mit den ersten Bemerkungen im Chat. Und dann haben wir einige interessante und detaillierte Antworten erhalten, die wir teilen möchten. Das haben uns Kollegen von Avito erzählt.


Bild

Andrey Shodan Aksyonov, Leiter der Suchinfrastruktur: „Die ersten Codezeilen, die ich im Grunde genommen in den Computer eingegeben habe, waren definitiv nicht meine. Dies waren einige seltsame Basisprogramme, die ich aus Zeitschriften nachgedruckt habe (wegen einer harten Kindheit, 8-Bit-Spielzeug). Aber ich erinnere mich genau, wie andere Leute mein Programm zum ersten Mal benutzt haben.

Dies war die Ära des Endes von DOS. Ich habe ein Assembler-Programm geschrieben, das den Bildschirm im grafischen Modus erfasst. Darüber hinaus hat sie im Gegensatz zu allem, was auf dem "Markt" war, alle Videomodi im Allgemeinen bewältigt, einschließlich der völlig verrückten Hacker-Modi. Wenn beispielsweise der Standard-VGA-Betriebsmodus 320 x 200 und 256 Farben betrug, erreichten Personen, die eine Art abscheuliche Hacks verwendeten und den Controller neu programmierten, der die Strahlen durch die MDG-Röhre treibt, 360 x 240. Ich habe es geschafft, ein Programm zu schreiben, das mit all dem fertig wurde, den Bildschirm (Videospeicher) erfasst, in einer Datei gespeichert und dann aus diesem Speicherauszug geschickt .bmp als separates Offline-Dienstprogramm gespeichert. Ich habe dieses Programm beendet, es ins Internet gestellt und erfolgreich vergessen.

Seit diesem Moment sind fast 12-15 Jahre vergangen. Ich habe eine E-Mail erhalten. Ein solches Blatt, als ob Leo Tolstoi schreibt, auf drei Blättern - und dies ist nur der erste Satz. „Hallo, ich bin ein Trucker aus Kanada. Aktiver Benutzer Ihres Programms. Ich habe kein Geld, aber ich habe fünf Kinder. Und ich habe den 486. Computer in der Müllkippe gefunden und einige alte Spiele im Internet gestohlen, und jetzt spielen meine Kinder wild verschiedene Spiele auf diesem Computer. Gleichzeitig kann ihr Lieblingsspiel nichts retten: Es ist unmöglich, eine gemeinsame Ehrentafel zu retten, nicht einmal einen einzigen Top-Highscore, und selbst ein Screenshot kann nicht aufgenommen werden, da eine Art Drogenabhängigkeitsmodus verwendet wird. Und Ihr Dienstprogramm leistet hervorragende Arbeit, und Kinder verwenden es ständig. Ja, ich selbst, es passiert zwischen den Flügen ... Da wir aktive Benutzer Ihres alten Programms sind, habe ich beschlossen, Sie zu ermutigen. Hier ist ein Western Union-Überweisungscode für 20 US-Dollar. “ Ich weinte praktisch und entschied, dass ich am dunkelsten Tag, wenn es endlich eintrifft und ich hungern werde, hier diesen MTCN (Überweisungscode) nehmen, ihn einlösen und die Tür öffnen werde. Leider sind seitdem viele weitere Jahre vergangen, so dass nicht bekannt ist, wo sich MTCN jetzt befindet. Vielleicht gibt es in den alten Postarchiven, wenn ich sie in dieser Zeit nicht verloren habe. Ich erkenne am schwärzesten Tag. “

Bild

Artyom Razinov, ein führender iOS-Entwickler: „In der fünften Klasse habe ich den Code selbst im Kinderprogramm Logo Mira geschrieben, während alle anderen erfolgreicheren Jungs Spiele spielten. Ich habe ein Programm erstellt und es hat funktioniert. An diesem Tag habe ich beschlossen, Programmierer zu werden. “



Bild

Daniil Popov, leitender Android-Entwickler: s := width * height; „Es war eine Linie auf Pascal, die die Fläche des Rechtecks ​​berechnet hat. Der Fall war in Programmierkursen für Schüler der achten Klasse. Was mich am meisten beeindruckt hat, war, dass ich den Computern Befehle geben kann und sie implizit ausführt. Eine Art Maschinenmeister. Seitdem finde ich es wirklich toll, wenn die aufgebaute Abfolge von Aktionen (Algorithmus) zum Ergebnis führt. “

Bild

Dmitry Belov, leitender Backend-Entwickler: „Dies war der erste Auftrag für ausländische Freiberufler. Hungrige Studenten, ich wollte wenigstens ein bisschen Geld verdienen, und es war nicht so wichtig, worüber ich schreiben sollte: Es gab fast kein Wissen, um sowieso von Grund auf neu zu lernen.

Ich habe den Auftrag erhalten, eine animierte Karteikarte zu erstellen. Ich musste ein kleines Action Script lernen. Stackoverflow war noch nicht da, ich musste die Dokumentation lesen.

Der Kunde war zufrieden, ich konnte das Projekt sofort abschließen. Er hat seine ersten fünfzehn Dollar als Freiberufler verdient. "

Bild

Ilya Gribov, Front-End-Entwickler: „Ich habe gern ab der 8. Klasse der Schule (Basic, Pascal) programmiert, aber dann gab es eine lange Pause. Er kehrte erst nach dem Studium zu diesem Geschäft zurück und musste sich an viel erinnern!
Winter, 6 Uhr morgens, starker Kaffee, bevor ich zur Arbeit ging (dann arbeitete ich überhaupt in der IT)

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


Emotionen: WAS IST String [] args ??? ”.

Bild

Vladimir Akimov, leitender Front-End-Entwickler: „Meine erste Codezeile wurde geschrieben, weil ich unbedingt in den Rap-Hangout eintreten wollte. Ich war ungefähr 17 Jahre alt, wusste nicht, wie man rappt und Musik schreibt, und beschloss, durch Design in ein cooles Team einzusteigen.

Dann war niemand daran beteiligt, unabhängige Künstler im Internet zu fördern. Freunde zeichnen also das Cover, geben die CD frei und verteilen sie an Freunde. Und es gab eine MySpace-Site, auf der Sie cool eine Musikerseite gestalten konnten. Ich habe gesehen, wie Jungs aus Übersee das machen. Irgendwann stieß ich auf einen Mann, der in Deutschland lebte und eine Seite für Seryoga machte. Derjenige, der "Black Boomer, Remember" gesungen hat? Ich beschloss auszuspionieren, wie das geht. MySpace wurde auf Tischen ausgelegt, ich nahm diese ganze Seite auf, verstand seine Idee und borgte sie aus.

Meine ersten Seiten waren seinen Seiten ähnlich. Ich habe nacheinander versucht, sie zu fördern. Also habe ich mich mit einem Team angefreundet. Es gab einen Designer, der mich einlud, Code zu schreiben und die Bilder selbst zu machen. Wir haben begonnen, MySpace-Seiten für alle unsere beliebten russischen Rap-Künstler zu erstellen. Und dann wurde ich eingeladen, im Büro von MySpace St. Petersburg zu arbeiten.
Dann habe ich dort viele Codezeilen geschrieben - vom gleichen Typ, tabellarisch: Es war CSS und Layout, nichts Kompliziertes. Jetzt wird jeder Junior es herausfinden und es kühler machen. Aber dann war es ein "Wow", weil wir mit IE5 und anderen Browsern gearbeitet haben, für die wir viel Magie machen mussten.

Ohne diese Geschichte würde ich mich nicht mit Programmieren beschäftigen, ich würde nicht zum Entwerfen kommen, ich würde nicht verstehen, was es ist. "

Bild

Konstantin Seleznev, Backend-Entwickler: „Mein Klassenkamerad hat mich dazu gebracht, in der siebten Klasse zu programmieren (wirklich wie eine Droge):
- Pss, Mann, willst du etwas programmieren? - so etwas erzählte er mir, gab mir eine CD mit Borland Development Studio und eine riesige Sammlung von Artikeln über Delphi.

Später fand ich in einem dieser Artikel Folgendes: „Lernen wir den Benutzer kennen. Zum Beispiel zeigen wir plötzlich die Meldung "Es ist Zeit zu schlafen" an und ... schalten den Monitor aus! Die Kurbel kann sie nicht einschalten ... ". Ich habe den im Artikel angegebenen Code ausprobiert und alles hat für mich geklappt! Ich fühlte mich wie ein echter Hacker!

Danach musste ich den Computer jedoch neu starten, da ich den Monitor wirklich nicht wieder einschalten konnte. “

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



Und hier sind Geschichten aus dem führenden Podcast Podlodka.


Bild

Stas Tsyganov, Leiter Mobile Development bei Tutu.ru: „Meine Mutter hat als Informatiklehrerin gearbeitet, und ich hatte ziemlich früh Zugang zu Computern. Und meine erste Programmiererfahrung war Cucaracha für MS-DOS. Ich habe mit Interesse erfahren, dass sie noch lebt und sogar auf Windows portiert ist.

    5   


Und der erste Code, den ich hatte, war so etwas. “

Bild

Egor Tolstoy, App Platform Development Manager bei Avito: „Mit ungefähr zehn Jahren besuchte ich meinen älteren Bruder, der damals seinen ersten Computer hatte, wieder unter MS-DOS. Zusätzlich zu den zügellosen Kerben im ersten GTA (in russischer Lokalisierung hieß es der schöne Name "Avtovor") und Herzog Nukem entdeckten wir die Programmierung für uns. Mathe hat mich damals nicht sonderlich angezogen, aber logisches Verzweigen und Zeichnen waren genau richtig! Das erste Programm war also die Erzeugung suprematistischer Kompositionen aus Kreisen und Linien: CIRCLE(10, 10), 50 ”.

Bild

Katya Petrova, Leiterin Entwicklung, Frontend-Architektur, Avito: „Es war natürlich unterhaltsam und informativ, eine Schildkröte in den Logo-Welten zum Zeichnen von Kreisen zu zwingen und im Informatikunterricht in Pascal„ Hallo Welt “zu schreiben. Aber in der 8. Klasse hat es noch mehr Spaß gemacht, Bosse im WoW Classic zu fahren (damals noch kein Mainstream). Also hier sind meine wirklich NÜTZLICHEN ersten Codezeilen. "

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



Bild

Zhenya Catella, Leiterin der mobilen Entwicklung bei Yandex.Transport: „Irgendwann in der 8. oder 9. Klasse interessierte ich mich für Programmierung, deshalb kauften mir meine Eltern ein Buch über Turbo Pascal. Ich erinnere mich noch, dass sie rot war. Und zuerst gab es einfache Dinge, wie Zyklen und Bedingungen. Und dann, so scheint es, endete das erste Kapitel mit einer Geschichte darüber, was Rekursion ist. Und es war notwendig, das Rätsel um den Hanoi-Turm zu lösen. Daher kann es mit Ausnahme der Hello Worlds als mein erstes Programm angesehen werden. “

Die denkwürdigste Codezeile


Natürlich war die Diskussion nicht auf die ersten Codezeilen beschränkt. Und wir haben auch über den Code gesprochen, an den wir uns aus verschiedenen Gründen wirklich erinnern.


Bild

Andrey Shodan Aksyonov, Leiter der Suchinfrastruktur: „Als ich einmal in der Spieleentwicklung gearbeitet habe, haben wir törichterweise unsere eigene Engine mit unseren Händen geschrieben. Im Allgemeinen kann dies nicht getan werden, es ist unmöglich, aber niemand hat uns dies gesagt. Aus diesem Grund haben wir unsere eigene Engine und alle Tools für die Entwicklung des Spiels von Grund auf neu geschrieben und auf diesem Spiel aufgebaut. Dies alles haben wir in drei Jahren geschafft. Nun, und insbesondere während dieses Iigrostroys habe ich mir diese Art von kluger Finte mit meinen Ohren ausgedacht. Bei der allerersten Generation von grafisch programmierbaren Beschleunigern, an denen gerade Shader angebracht waren, gab es eine kurze Zeit, in der die GPU in Assemblersprache programmiert und Anweisungen für die Steckplätze mit Ihren Händen erstellt werden konnten. Dann wurde diese Funktion deaktiviert, nur HLSL blieb übrig, aber am Anfang war es möglich. Hier haben wir es geschafft, vier Texturen gleichzeitig in einem Durchgang zu verwenden (dies ist trivial) und gleichzeitig die Beleuchtung, die Karte der Unebenheiten, die anzuwendenden Schatten und etwas anderes zu zählen (aber niemand wusste wie). Unsere Firma hatte dann, wenn nicht 3 Know-how, dann 2 Know-how, diese Sache war die Hauptsache. Dann, nach ein oder zwei Jahren, als sich die Technologie weiterentwickelte und mit Genehmigung der Behörden etwas an Relevanz verlor, veröffentlichte ich einen Artikel im ShaderX4- Buch darüber. Es war eine sehr schöne, ehrliche technische Lösung, für die ich mich bis heute nicht geschämt habe. Aber das ist nicht eine Codezeile, sondern zehn ganze! “

  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 



Bild

Daniil Popov, leitender Android-Entwickler:

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


Dies ist ein Ausschnitt einer Funktion, die die schnelle Rückgabewurzel von x berechnet. Solche Berechnungen werden in Game-Engines benötigt, um die Bühnenbeleuchtung zu berechnen. Dieser unlesbare Code wurde nach der Veröffentlichung von Quake III: Arena weithin bekannt.

Als ich diesen Code sah, erkannte ich zum ersten Mal deutlich die gigantische Lücke zwischen dem lesbaren und dem optimalen Code.

Bild

Ilya Gribov, Front-End-Entwickler: „Ich erinnere mich an diesen Code. Ich dachte: "Wie einfach und prägnant!)".
 >>> comp_list = [x ** 2 for x in range(7) if x % 2 == 0] >>> print(comp_list) // [4, 16, 36] 



Bild

Mikhail Yudin, leitender Android-Entwickler: „Ich habe als Student im zweiten Jahr auf acm.timus.ru einen rot-schwarzen Baum mit Cormans Buch geschrieben, und etwas ist vom Dach gefallen, und ich habe dies auf Nullgleichheit überprüft. Diese Situation ist unmöglich. Sie haben mir geschrieben, dass ich Kommersant bin (wie wahr, hart). “

 if (this == null) 



Bild

Nikolai Ryabov, leitender Front-End-Entwickler: „Irgendwie warf mir bei meiner ersten Arbeit im Zusammenhang mit dem Front-End, bei dem ich noch ein sehr, sehr grüner Junior war, derselbe unerfahrene Entwickler diese Gedankenlinie mit den Worten zu: "Freund, ich habe versucht zu verstehen, was es ist und wie es funktioniert - lasst uns zusammen leiden!" Infolgedessen war mein Kopf nur damit beschäftigt und nach ein paar Stunden wurde mir immer noch klar, was es war und was wir als Ergebnis in foo bekommen würden. Aber ich konnte es damals nicht erklären.

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


Bereits viel später begann ich, dieses Snippet für Interviews zu verwenden, und es zeigte hervorragende Ergebnisse: Als ich das Problem hatte, einen guten Entwickler zu finden, der ihm alle meine Kompetenzen in meiner vorherigen Arbeit übertrug, traf ich auf einer der Konferenzen eine bemerkenswerte Person und dazwischen Das Café lud ihn ein, zu erzählen, wie dieser Code funktioniert. Er schaffte es im Gegensatz zu vielen Kandidaten, die ich zuvor interviewt hatte. Infolgedessen hat er die Erwartungen voll erfüllt, als ich seinen damaligen Job arrangierte. Und bis heute mag ich es, dieses Rätsel zu lösen und Mimik zu betrachten, obwohl dieser Code im Zusammenhang mit der Veröffentlichung neuer ECMAScript-Standards nicht mehr relevant ist. “

Und nicht nur der Code


Ich möchte diesen Beitrag beenden, indem ich Andrei Shodans Kollegen Aksyonov zitiere:


„Im Allgemeinen ist eine Geschichte normalerweise nicht auf eine Codezeile beschränkt. Und selbst ein kleiner Ausschnitt aus zehn Zeilen ist äußerst selten. Und die bezauberndsten Geschichten, sie handeln wahrscheinlich nie über den Code, sondern hauptsächlich über Menschen, darüber, wie dieser Code sie beeinflusst hat. Und welche Art von Codezeile speziell vorhanden war oder was speziell ein dummer Fehler von zwei Zeichen ist, ist völlig unwichtig. “

Einige der Geschichten, die hier erzählt werden, wurden von Iseregin auf Video aufgenommen und auf unserem YouTube-Kanal veröffentlicht. Schauen Sie vorbei, wenn Ihnen das Video gefällt.


Nochmals herzlichen Glückwunsch an alle Programmierer (und gleichzeitig an diejenigen, die eng mit ihnen zusammenarbeiten). Verbringen Sie diesen Tag angenehm und interessant.
Und teilen Sie in den Kommentaren die Zeilen und Geschichten mit, an die Sie sich am meisten erinnern!

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


All Articles