Wie kann man aus Hoffnungslosigkeit ein Programmierer werden und zu den Höhen des Erfolgs aufsteigen? Heute
beantwortet Finkelstein in unserem virtuellen Studio Pasha
asm0dey Fragen. Pasha ist einer der wenigen, die wissen, wie man Backends auf Kotlin erstellt. DarĂŒber hinaus sieht er Open Source, nimmt aktiv am Leben der Community teil und hat fĂŒr eine Minute an fast allen unseren Java-Konferenzen in Moskau teilgenommen.
So finden Sie Zeit fĂŒr Commits
- Es gibt verschiedene Themen, die diskutiert werden können. ZunĂ€chst halten Sie einen Vortrag bei Joker. Zweitens sind Sie ein aktives Mitglied der Community und tun stĂ€ndig etwas. Drittens nehmen Sie stĂ€ndig an unseren Konferenzen teil und halten dies aus irgendeinem Grund fĂŒr gut.
- In Bezug auf die Tatsache, dass ich ein Mitglied der Gemeinschaft bin. Ich leide wie die meisten Menschen an einem Betrugssyndrom. Ich habe nicht das GefĂŒhl, dass ich viele nĂŒtzliche Dinge tue, insbesondere fĂŒr die Java-Community, insbesondere in letzter Zeit. Das Letzte, was ich getan habe, war nĂŒtzlich fĂŒr die Community - die Jungs und ich haben eine coole Bibliothek fĂŒr Spring namens Spring-Flow-State-Machine geschrieben , mit der Sie den Status von Objekten in der Anwendung steuern können. Sie ist klein und bequem.
- Dies ist genau die Bibliothek, die jetzt fĂŒr den HauptfrĂŒhling wirbt?
- Nein, wahrscheinlich ist Spring Statemachine da und es ist unglaublich elend: Es ist sehr schlecht geschrieben, es funktioniert sehr seltsam und macht absolut nichts. Spring Statemachine verwaltet den Status der Anwendung, wenn Ihre Anwendung eine Art endliche Statemachine ist und in verschiedenen ZustĂ€nden unterschiedlich funktioniert. Wir haben eine andere Sache gemacht: Wenn Sie eine EntitĂ€t haben, legen Sie einen Lebenszyklus dafĂŒr fest und können ihn durch diesen Lebenszyklus fĂŒhren. Unsere Aufgabe ist es, darĂŒber nachzudenken, wie Ihre Transaktionen funktionieren und so weiter. Wie Sie wissen, haben wir die @ Transactional-Annotation einfach an einer richtigen Stelle, und dies reicht aus, um zu sagen, dass sie den Status steuert. Die Hauptsache ist, dass es ein praktisches DSL gibt, mit dem Sie sagen können, wo Sie von wo aus können und was Sie unterwegs tun mĂŒssen.
"Und ich verstehe richtig, dass Sie, da dieses Ding abstrakte Dinge kontrolliert, dasselbe tun können wie Spring Statemachine?"
- Ja, stimmt, es gibt eine Nuance. Die HauptentitÀt, die dieses Ding kontrolliert, ist anscheinend eine EntitÀt mit ID oder so Àhnlich. Dies ist wirklich eine sehr kleine Bibliothek mit zwei Schnittstellen, zwei Ausnahmen und vier Klassen.
"Und das, was Spring getan hat - warum denkst du, ist das etwas Seltsames und warum ist nicht klar warum?"
- Es ist verstĂ€ndlich, warum es benötigt wird, es wird nur sehr schlecht gemacht. Es wird gesagt, als ob es weiĂ, wie man alles macht. Erstens werden die Beispiele in der Dokumentation nicht erfasst, und zweitens, wenn Sie versuchen, in den Quellcode einzutauchen (und Sie immer in den Quellcode von Spring eintauchen, wenn Sie etwas tun möchten, weil nicht alles geschrieben ist In der Dokumentation erfahren Sie, dass es so geschrieben ist, dass es besser ist, nicht zu schreiben. Ăbrigens scheint es, dass Spring Batch normalerweise ungefĂ€hr die gleichen Beschwerden hat.
"Hast du auch Spring Batch benutzt?"
- Es scheint mir, dass ich fast alles verwendet habe, was sich im FrĂŒhlingsökosystem befindet.
"Und wie benutzt du es weiterhin?"
- WeiĂt du, am nĂ€chsten Arbeitsplatz werde ich keinen FrĂŒhling haben, ich werde SIE haben. Es war nicht meine Wahl. Ich hĂ€tte wahrscheinlich Spring verwendet, aber tatsĂ€chlich habe ich in unserem Podcast einmal gesagt, dass mein Favorit jetzt das Jooby- Mikroframework ist , das alles weiĂ. Es wurde in einer Person von einem Java-Champion geschrieben. Es gibt auch eine AbhĂ€ngigkeitsinjektion, die auf Guice basiert. Es ist cool, es hat ein Ăkosystem, das sich ĂŒbrigens von allen anderen Mikroframes unterscheidet.
- Ich sehe, dass es zwei Möglichkeiten gibt - fĂŒr Java und fĂŒr Kotlin.
"Ich vermute, Sie können fĂŒr alles." Scala ist wahrscheinlich auch möglich, aber Sie mĂŒssen Guice aufgeben, was mit Scala wahrscheinlich nicht funktioniert. Ich liebe wie immer die Konstruktorinjektion mit Anmerkungen. Und das geschieht in Guice.
- Und wenn eine solche Anwendung mit GraalVM statisch zusammengestellt werden kann, ist es nur Platz.
"Ich glaube nicht, dass du dort viel gewinnen wirst." Es ist wie im FrĂŒhling - natĂŒrlich werden Sie etwas an Leistung gewinnen.
- Erhöhen Sie zum Beispiel die Startgeschwindigkeit.
- NatĂŒrlich werden wir in der Produktion eine marginale Sache ziehen, die von einem Java-Champion geschrieben wurde, und wir werden dort um die Geschwindigkeit eines Startups kĂ€mpfen!
- Ich verstehe.
- Wahrscheinlich nehmen die Leute, die sich wirklich fĂŒr die Startgeschwindigkeit interessieren, etwas Azul Zing und stimmen sie mit etwas ab, das auf nackter SE geschrieben ist.
"Habe ich richtig verstanden, dass die Bibliothek, die Sie geschrieben haben, Open Source war und so?"
- Ja, es ist Open Source von meinem frĂŒheren Arbeitgeber und gehört ihm irgendwie, wie es im Arbeitsentwurf verwendet wurde.
- Ich verstehe. Das heiĂt, Sie haben es wĂ€hrend der Arbeitszeit geschrieben.
- Ja, sie haben wÀhrend der Arbeitszeit geschrieben.
- Und was denkst du, gibt es eine Aussicht, nach Stunden Software zu schreiben?
- Ich schreibe Software nach Stunden, obwohl es jetzt keine echte Software ist. Und das Letzte, was ich geschrieben habe ... jetzt in Russland ist das Problem mit Schlössern tatsĂ€chlich, und fĂŒr mich besteht das dringende Problem darin, diese Schlösser zu umgehen. Es gibt einen wunderbaren Proxyserver namens 3proxy , also habe ich Ansible Playbook fĂŒr Fedora, Ubuntu, Debian und Centos geschrieben, alles getestet und auf GitHub geteilt. Und auch in Ansible Galaxy geteilt.
"Und wo findest du die Zeit dafĂŒr?"
- Ich habe, wie jeder andere auch, Probleme mit der Zeit, weil ich bei der Arbeit mĂŒde werde, eine Familie habe und mindestens einige Zeit mit meiner Familie verbringen muss. Aber am Wochenende schlĂ€ft die Familie spĂ€t, und ich bin eine Lerche und wache frĂŒh auf, mein Kopf funktioniert morgens gut und ich kann viele Dinge tun. Manchmal schreibe ich schon vor der Arbeit etwas.
- Was wĂŒrden Sie denen raten, die anfangen möchten, etwas in Open Source zu schreiben, aber es funktioniert nicht?
- Fragen Sie sich, warum es nicht funktioniert. Und versuchen Sie je nach Antwort auf die Frage, etwas zu schreiben.
- Es gibt eine Standardantwort: Keine Zeit, es ist nicht klar, wo ich sie brauche.
- Was âkeine Zeitâ betrifft, passiert es, dass es wirklich keine Zeit gibt, aber es passiert, dass es wirklich keine Zeit gibt. "Keine Zeit" ist eine solche Art zu sagen, dass ich keine Motivation habe. Dies ist absolut klar und nicht die Tatsache, dass dies bekĂ€mpft werden muss. Nicht alle Menschen mĂŒssen sich zu Open Source verpflichten. Dies ist eine coole Art, etwas fĂŒr sich selbst und fĂŒr die Gemeinschaft zu tun, aber niemand schuldet irgendjemandem etwas.
Wenn nicht klar ist, wer Sie braucht, ist die Frage erneut, warum. Es gibt zwei GrĂŒnde: Sie haben noch sehr wenig Zeit, um so etwas in der Programmierung zu tun, und es scheint Ihnen, dass dies etwas extrem Langweiliges ist, und dann ist es wahrscheinlich wahr, dass Sie zu diesem Zeitpunkt niemandem helfen können. Obwohl ich Leute kenne, zum Beispiel Slava Semushin - das erste, was er tat -, begann er, Alt Linux zu schmuggeln, bevor er irgendwo in der Produktion programmierte. Es war sein Weg in die Programmierung (das ist natĂŒrlich ein Witz). Aber er verstand wirklich nichts, als er anfing, verstand er es auf dem Weg. Und das ist kein Scherz mehr.
Es kommt vor, dass Menschen lange Zeit im Unternehmertum tĂ€tig sind und nicht verstehen, was sie tun können. Ich bin schon sehr lange in dieser Situation. Vor ungefĂ€hr 4 Jahren sicher. Ich bin seit 6 Jahren im Unternehmen und habe nicht verstanden, was ich tun kann. Aber im Laufe der Zeit habe ich gesehen, dass diese eine Komponente des Systems, die ich im Prinzip umschreiben möchte, in ein separates Modul unterteilt und ĂŒberempfunden werden kann. Dies muss mit dem Arbeitgeber vereinbart werden. Die Hauptsache ist, den ersten Schritt zu machen.
Manchmal will der Arbeitgeber nicht koordinieren, das ist ein ziemlich lebhaftes Thema. Zum Beispiel ist Tinkoff nicht bestrebt, einige seiner Backend-Komponenten zu öffnen, obwohl dies theoretisch möglich wÀre.
Mit der Zeit sehen Sie Chancen. Die Hauptsache ist, dies in eine separate Komponente zu isolieren. Wenn der Arbeitgeber es nicht zulÀsst, werden Sie es innerhalb des Arbeitgebers verwenden, es wird eine solche interne Open Source geben, wie sie es in einigen Zalando tun. Dann werden Sie beim nÀchsten Projekt sehen, dass auch dieses Ding unterschieden werden kann.
- Wow. Oder schreiben Sie es zum Beispiel noch einmal.
- Ăber das "wieder schreiben". Eines der Probleme, die wir zuletzt gelöst haben, war die Protokollierung. Es ist klar, dass alle Krupnyaki mit zentraler Protokollierung verwechselt werden, ohne dieses Leben ĂŒberhaupt. Die Standardlösung hierfĂŒr ist ELK Stack, ElasticSearch, Logstash, Kibana. Nur gibt es ein kleines Problem - das ist Logstash. ElasticSearch, Kibana funktionieren gut, Logstash jedoch nicht. Es funktioniert entweder nicht dauerhaft oder sehr langsam. Wenn es nicht dauerhaft funktioniert, betrĂ€gt die WarteschlangengröĂe 5000 Nachrichten. Mehr voll - Nachrichten beginnen zu fallen. Um es milde auszudrĂŒcken, ein unangenehmes Merkmal. Deshalb hatten wir Kafka anstelle von ihm. In der Sberbank haben wir unseren eigenen Kafka Logback Appender geschrieben , der ebenfalls Open Source ist und fĂŒr sich selbst recht gut funktioniert.
- So war es also!
- Es gibt bereits drei, ich bin mir nicht sicher, was Sie bei uns gesehen haben.
- Okay. ZurĂŒck zum Thema Open Source und Protokollierung. Und warum verwenden die Leute stĂ€ndig zentralisierte Logger im Unternehmen und versuchen, sie selbst zu schreiben, wenn es Linux gibt und die Art und Weise, wie GroĂvĂ€ter sie erfunden haben - zum Beispiel alles in eine Datei hochladen?
- Ich kenne unter Linux keine normale zentralisierte Protokollierung. Es gibt rsyslog, ein gutes Format, aber, gelinde gesagt, es ist nicht an Java angepasst, denn wenn man sich eine Art Stapelspuren ansieht, stellt sich plötzlich heraus, dass Stapelspuren viele Zeilen sind, nicht nur eine. In rsyslog sind dies also separate ProtokolleintrĂ€ge. Wenn all dies in einem groĂen Haufen verwechselt wird, scheint es mir, dass es alle verletzen wird.
- Ja, vielleicht.
- Und ich weià ehrlich gesagt nicht, was rsyslog garantiert. Normalerweise bin ich festgefahren, wenn ich eine Lösung habe. Ich versuche, ihren Platz im CAP-Theorem zu finden. Und ich habe diese Informationen auf rsyslog einfach nicht gefunden, vielleicht habe ich schlecht ausgesehen. Aber schnell konnte ich es nicht feststellen. Er garantiert in der Regel die Lieferung an uns und wie lange? Welche Zeitstempel wird es geben, wenn er irgendwo zischt? Wenn er garantiert, dass dies bereits gut ist, wenn Sie normalerweise mit allen Arten von Spannweiten und Spuren protokollieren, werden Sie es trotzdem herausfinden, egal was er dort tut. Wenn die Lieferung nicht garantiert wird, ist dies absolut eine Katastrophe. In diesem Sinne vertraue ich kafka mehr, aber es hat mehr Bandbreite. Dies trotz der Tatsache, dass ich Kafka nicht gut kenne, um ehrlich zu sein.
- Dort mĂŒssen Sie die Protokolle wahrscheinlich irgendwie in kritisch / nicht kritisch unterteilen, denn wenn der Protokollierungsserver abstĂŒrzt, werden Sie nie wissen, was passiert ist.
WĂ€hrend wir ĂŒber Java sprechen, ist alles sehr einfach. Wir laufen in einem Docker und haben Protokolle in stdout, die von der ERROR-Ebene eingegeben wurden. Und alles beginnt in Kafka zu flieĂen, angefangen beim Debuggen oder vom Track. Ich bin die Art von Person, deren Debit-Protokolle normalerweise nie ausgeschaltet werden. Ich habe diesen hellen Moment noch nie erlebt, als mir klar wurde, dass das alles ist. Ich verwende die Protokollierung nicht mehr, um Probleme zu analysieren.
"Haben Sie keine Angst, dass beispielsweise der Durchsatz des Kafka-Netzwerks einfach anhÀlt und endet, wenn all diese Terabyte an Protokollen dorthin fliegen?"
- Wir waren immer zu klein, wir hatten 100 GB Protokolle pro Tag und 100 GB - wie groĂ ist dieses Volumen? Das Hauptproblem ist, wie man es speichert, nicht wie man es ĂŒbertrĂ€gt. Hatten Sie wirklich Terabyte an Protokollen?
- Ich weiĂ nicht, wie viel Speicherplatz auf der Festplatte vorhanden war, aber ich weiĂ, dass das System manchmal so langsam gestartet wurde, dass wir nicht darauf gewartet haben, dass es gestartet wird. Jemand hat versehentlich entweder Debug oder Trace inszeniert, und das ist alles.
- Warte. Es scheint mir, oder sind Sie in die falsche Richtung gegangen, als Sie die Protokolle ĂŒber das Netzwerk synchronisiert haben?
- Nein, sie sind nur in Kafka gegossen.
- Aber synchron? Es ist unwahrscheinlich, dass Sie die Option hatten, dies asynchron zu tun. Sie mĂŒssten von mindestens einem Knoten auf die ACK von Kafka warten, selbst wenn Sie völlig hartnĂ€ckig sind und keine Garantie fĂŒr die Protokolle wĂŒnschen. Mindestens eine BestĂ€tigung, auf die Sie noch gewartet haben.
- Vielleicht ja.
- Ich sage, weil wir den Logback-Appender geschrieben haben, verstehe ich, woran wir uns orientiert haben. Aber wir haben diesen Appender in AsyncAppender eingewickelt und dann experimentell berechnet, wie viele Nachrichten wir in der Spitze haben, und der Puffer in diesem AsyncAppender wurde etwas mehr verdreht, als ob es eine Spitze plus 10% gibt. Es stellte sich heraus, dass unsere Anwendung nicht blockiert ist.
"Was fĂŒr schreckliche Geschichten du hast." Und warum ist das in Java nicht Standard, warum sollten Sie mit Ihren HĂ€nden schreiben?
- Da Sie in allen Sprachen mit den HĂ€nden schreiben mĂŒssen, ist nur in Java zumindest klar, wo Sie schreiben mĂŒssen. Und wenn Sie irgendwelche Pluspunkte nehmen, weiĂ ich nicht, wo ich anfangen soll.
- Sie denken also, es gibt keine Bibliotheken, die zu Maven hinzugefĂŒgt werden können, und alles wird von selbst installiert?
- Beginnen wir mit der Tatsache, dass sie keinen normalen Maven haben, weil sie Ninja, Make, CMake, qmake haben und alles ein bisschen schwer mit Maven ist. NatĂŒrlich verfĂŒgen sie ĂŒber Bibliotheken fĂŒr die Protokollierung, sie befinden sich in Java und es ist klar, wie Appender an sie angehĂ€ngt werden. DarĂŒber hinaus sind sie in Java schön, flexibel und arbeiten normalerweise mit Fassaden und all dem. Und wenn Sie sich Rust ansehen, gibt es etwas völlig Trauriges, Trauriges. Ich weiĂ nicht, wo ich meine Logger ablegen und aufschreiben soll. Ich habe es kaum gemeistert, wie man sie konfiguriert.
"Also magst du Java wirklich?"
- Ich mag das Ăkosystem. Ich mag Kotlin als Sprache und Java als Ăkosystem. Ăbrigens ist keine einzige Sprache besser als Kotlin, ich weiĂ es jetzt ĂŒberhaupt nicht. Sobald ich bei Groovy war, habe ich sogar ein T-Shirt von Baruch mit der Aufschrift Groovy.
Warum Kotlin?
- Wahl zwischen Java, Scala, Groovy und Kotlin - warum genau Kotlin?
- Die perfekte Kombination aus guter Syntax und KomplexitĂ€t, um sich in den FuĂ zu schieĂen. Ich mag keinen Rock, weil es sehr einfach ist, in das Bein zu schieĂen, und manchmal nicht fĂŒr dich selbst, sondern fĂŒr deinen Nachbarn. Sie fĂŒgen implizite Variablen hinzu, alles funktioniert magisch fĂŒr Sie und die Hölle ist in seinem Debug. Sie können natĂŒrlich zustimmen, sie nicht zu verwenden, dann verlieren Sie einige der Reize des Felsens. Wenn Sie völlig schlau sind, verwenden Sie natĂŒrlich Makros im Rock und niemand auĂer Ihnen versteht, wie das funktioniert.
- In the Rock die Makros vervollstÀndigt, stellt sich heraus?
- Ich möchte sagen, dass sie funktionieren, aber ich möchte nicht sagen, dass sie verwendet werden können. Und wenn Sie noch schlauer sind, verwenden Sie eine Bibliothek wie Cats. Aber dies ist wahrscheinlich auf dem gleichen Niveau, als Sie ein bisschen schlauer wurden und sich bereits mit Scalaz langweilen und Katzen verwenden. Aber niemand auĂer Ihnen kann diesen Code lesen.
- Und andere KatzenanhÀnger.
"Du sagst es so, als ob es wahr wÀre, aber es ist nicht wahr, weil andere KatzenanhÀnger es anders benutzen."
- Dies ist Teil der Leistung dieses Systems.
- Sehr kraftvoll, erinnert an BFG .
- Was du zu deinen FĂŒĂen schieĂt.
"Manchmal fĂŒr dich selbst, manchmal fĂŒr andere, wie viel GlĂŒck." Ăbrigens ist mir aufgefallen, dass Leute, die auf dem Rock schreiben, manchmal vergessen zu denken. Sie haben so schöne Konzepte, dass sie zwei EinfĂŒgungen hintereinander an verschiedenen Stellen vornehmen können und nicht daran denken, dass all dies irgendwie in eine Transaktion eingebunden werden muss. Aber sie haben schöne Aufrufe an die Datenbank mit etwas Slick (oder was auch immer jetzt fĂŒr die Arbeit mit SQL in Scala in Mode ist).
- Aber Sie können es an zwei Stellen in Java tun ...
- Aber in Java habe ich Spring und ich habe die Annotation @Transactional eingefĂŒgt. In Java ist es nicht ĂŒblich, komplexe Dinge zu tun. In Kotlin scheint es ĂŒbrigens auch so. Aber in the Rock akzeptiert. Was Groove betrifft, ist dies natĂŒrlich eine coole Sprache, bis Sie auf einer Seite in den Bytecode gelangen oder auf die Tatsache stoĂen, dass Sie nicht verstehen, welche Art von Objekt Sie haben. Manchmal schreien sie auch gerne, dass jeder gĂŒltige Java-Code ein gĂŒltiger Groove-Code ist, aber dies ist nicht wahr, weil anonyme innere Klassen dort nicht funktionieren. Sie können nicht nehmen und instanziieren. Sie mĂŒssen ein Lambda erstellen und es dann wirken. Und so wĂ€hle ich Kotlin, es hat eine etwas andere Syntax als in Java, aber es gibt dort einen Konverter, wenn Sie wirklich wollen. Auf der anderen Seite keine neue KomplexitĂ€t. Es gibt nichts, wo man nicht bei gedrĂŒckter Strg-Taste auf etwas klicken und nicht gehen könnte. Sie klicken bei gedrĂŒckter Strg-Taste auf die Doppelgleichheit und wechseln zur Gleichheitsmethode.
- So ein rutschiger Moment: Vertraust du JetBrains? Jetzt vertrauen viele Java nicht wirklich, weil es Oracle ist, aber was tun mit JetBrains? Sitzen dort normale Leute und entwickeln eine Sprache?
- Ich möchte keinen Teil des Berichts verderben, aber insgesamt gefĂ€llt mir die Art und Weise, wie sie sagen, und mir gefĂ€llt, was ich sehe. Ich habe nicht die Möglichkeit, "nicht zu vertrauen". Okay, ich vertraue JetBrains nicht, dann wird alles wirklich traurig, denn welche anderen Sprachen haben wir von einigen relativ gesunden Menschen entwickelt? Wahrscheinlich Rust (entwickelt von Mozilla), Golang wird von Google entwickelt. AuĂerdem werden sie alle von Communities entwickelt, einschlieĂlich Java. Es ist einfach nicht klar, wem und warum Sie vertrauen können. Ich habe Probleme mit Paranoia und weiĂ nicht, wie ich das machen soll.
Am ersten Tag der Joker-Konferenz (19.-20. Oktober 2018) wird Pascha im Bericht âKotlin - 2 Jahre in Produktion und keine einzige LĂŒckeâ ĂŒber Backends auf Kotlin sprechen. Joker ist eine unserer Hauptkonferenzen und wir schreiben stĂ€ndig auf HabrĂ© darĂŒber. Wenn möglich, kommen Sie unbedingt.
- Vor kurzem haben Baruch und ich eine bestimmte Studie zum Thema Kotlin entdeckt, die zeigt, dass das Programm auf Kotlin mit 40 ihrer Papageien (Studienpapageien) besser ist als das Programm auf Java.
- Nicht besser, aber kurz gesagt, wenn mein GedÀchtnis mir recht tut.
- Es gibt beide kĂŒrzer und besser. Sie haben alles in Code-GerĂŒchen gemessen. Ich weiĂ nicht, wie ich es sagen soll. Wahrscheinlich kann dies in gewissem Sinne durch das Wort "besser" ersetzt werden.
- GroĂartig. Wissen Sie nur, dass es bei jedem Vergleich der beiden Sprachen ein kleines Problem gibt. Haben sie die gleiche Aufgabe realisiert und gab es die gleichen Messinstrumente? Stimmt es, dass fettgedruckte Codes in Java und Kotlin die gleiche QualitĂ€t aufweisen? Oder haben sie die letzten 20 Jahre in Java geschrieben und gelernt, wie man den Code von Paaren 800 findet, und in Kotlin haben sie 2 Jahre geschrieben und gelernt, 20 zu finden?
- Wow, das ist eine sehr gute Frage. Aber dort sind nicht die Zahlen, die sie abgeleitet haben, interessant, sondern die Fragen, mit denen sie sich befasst haben. Es gibt nur 5 von ihnen, ich möchte Sie auch fragen. Wie hoch ist der Anpassungsgrad von Kotlin in der gesamten Region? Es hÀngt davon ab, mit wie vielen Personen Sie arbeiten, wie viele Projekte, wie viele Beispiele.
- Es ist klar, dass Android fast vollstĂ€ndig auf Kotlin (moderne Entwicklung) umgestellt wurde und sich das Backend sehr langsam bewegt. Eines der Ziele meines Berichts ist es, diesen Prozess zu beschleunigen. Als ich zu einem Interview zu HH kam und sagte, dass ich in den letzten zwei Jahren ein Backend in Kotlin geschrieben habe, sagten sie mir, ist das möglich? Dies ist nur fĂŒr Handys! Die Arbeitgeber wissen wirklich nicht, dass dies möglich ist. Wahrscheinlich wissen es die Mitarbeiter auch nicht. Es ist schwer, ĂŒber den Umfang der Anpassung zu sprechen. Ich denke, dass es in Android 80-90% und im Backend wahrscheinlich maximal 10% sind. Ja, was fĂŒr eine 10! Wenn Sie alle Legacy-Systeme zĂ€hlen, gibt es keine zwei Prozent. Aber wenn Sie nur neue Projekte zĂ€hlen, dann vielleicht 10 Prozent.
- Das heiĂt, zumindest so etwas wie Kotlin im Backend gibt es schon?
- Ja, ich habe im Real Estate Center der Sberbank geschrieben. Und davor schrieb er auch.
- Gut. Viele sagen einfach, dass dies JetBrains-Marketing ist, und lebende Menschen werden anders darauf reagieren.
- Ein Teil meines Berichts widmet sich der Tatsache, dass der gesamte Java-Teil des Unternehmens nach dem erfolgreichen Flug unseres Projekts auf Kotlin umgestellt wurde.
- Die nÀchste Frage stellt sich also weiter: Wie viel Prozent des Codes auf Kotlin ist die Anwendung? Erstens können Sie Java und Kotlin als Basis mischen. Zweitens kann Kotlin als DSL verwendet werden und beginnt, alles in einer Reihe darauf neu zu schreiben.
- Aus meiner Sicht gibt es nur sehr wenige Situationen, in denen Sie Java und Kotlin absichtlich stören mĂŒssen. Es ist sinnvoll, das gesamte Projekt auf Kotlin zu schreiben. Wenn Sie der Meinung sind, dass Sie die gesamte Anwendung in Kotlin ĂŒbersetzen, können Sie möglicherweise zuerst neue Klassen in Kotlin schreiben und dann irgendwann die alten Klassen von Java nach Kotlin konvertieren und sie mit Stiften zuschneiden. Aber ich muss sagen, dass "Java2Kotlin" ein mittelmĂ€Ăiges Werkzeug ist, nicht perfekt.
- Mit "Java2Kotlin" meinen Sie Strg C - Strg V in der Idee zwischen Dateien?
- Ja, aber es gibt wahrscheinlich immer noch eine AbkĂŒrzung.
- Ăbrigens habe ich einmal versucht, dass Scala genau Strg C - Strg V in der Idee verwendet, aber dort stellte sich heraus, dass es sich um einen seltenen MĂŒll handelte.
"Mir gefĂ€llt auch nicht, was Java2Kotlin macht." Ich schreibe besser. Manchmal kann man natĂŒrlich damit beginnen. Sie haben zwei Möglichkeiten: Entweder konvertieren Sie das gesamte Projekt, insbesondere wenn es nicht sehr groĂ ist, und korrigieren dann alle falschen Stellen. Oder Sie tun es nach einem Klassiker: Um mit Ihren HĂ€nden fĂŒr eine sehr lange Zeit viel mechanische Arbeit umzuschreiben. Aber Sie möchten wahrscheinlich irgendwo anfangen.
- Gibt es irgendwelche Komplikationen, die nicht mit der dummen Syntax, sondern mit dem semantischen Teil zusammenhÀngen?
- Es scheint, dass ich in einem Bericht darĂŒber sprechen werde.
- Gut. Wenn Kotlin zum Projekt hinzugefĂŒgt wird, steigt oder sinkt seine Menge weiter? Wie viel Kotlin sollte er sein, um alles zu verschlingen?
"Ich habe keine solche Erfahrung." Wir haben den Antrag bis auf einen Fall sofort in Kotlin geschrieben. Lassen Sie sich vom Ăkosystem der Plugins fĂŒr die Idee leiten?
- Ein bisschen.
â , , , - . - , , , , , .
â Community Edition , , .
â Community Edition , Ultimate.
â Ultimate , Spring-.
â , , Spring-, .
â -, , endpoints, , .
â . endpoint', ?
â , . , , .
â , , Shift-Shift-Shift, - , Shift-Shift-Shift , , endpoint' , . , - .
â , Search Anywhere, .
- Also. , , . . , , , . , , , , , , , , .
â , ?
â , . , , , .
â . , , , . . , , , , .
â , , , , , , , , , . . , -. . , , . Java-, . generic , , invariants, in. . . , , . , . , Haskell, ? : map, fmap, .
â .
â : , , . , â sequence. â , .
, , , - . GraalVM , , . , @graalvm_ru.
â ?
â . 2, 2 2 . .
â , . , .
â - . : for- , for-, ( baseline), . 2 6 . , â : sequence' sequence'. , , - . . . , . , , , baseline.
â , ?
â , - .
â , , GraalVM .
â . JDK10 JVMCI , GraalVM EE, , C2.
â - , Community Edition -Community Edition, , .
â . , , . . , , , .
â ! :-)
â , .
« »
â . : . , . : ?
â . . « ». , , , , : , , , . 2008 , , , . , . , , . .
â ?
â 4 C++ Builder, Java, , -, , . Java , C++ Builder, , , C++ Builder, . . , . , , , .
â â VCL, .
â , . , - , - . - , SQL, . , , .
â C++.
â , Java, . C++ - , , , , , . MVC. , NetBeans, , . , , . GroupLayout BorderLayout. , , , , . , , -.
â , IDE-?
â . , , - Electron.
â . , Java.
â , . - - : JavaScript. .
â GraalVM , Electron JavaScript -.
â . , , , . Nashorn . Truffle- JavaScript? , .
â , , Nashorn, . Electron, .
â , ?
â , Electron.
â ?
â Node.js, Graal Node.js, . .
â ?
â . - .
â . â Node.js, Electron Builder, SQLite ORM . , , â SQLite â 10 . -, , . .
â , , , .
â . . , Java FX, , , , 10- . , JRE, . , â , . , -. , - , .
â , .
â - , - , . -, .
â - desktop environment , , -. , - to do list, - . , , , , . , , , . â F1, .
â , , . - â CLI-. , Task Warrior, . , .
â « ». , , , - . ?
â , ?
â .
â , .
â -. , ?
â , : «, , ?» : «». , - . - , - , . : « ?» , . : «, . , ?» «». « , ».
â : , , . ? , - ?
â , , , : . (5 , ), , - , , , , . , , , - , , , , .
â , , â , , ? , , ?
â , - . , . , . . , . . .
â : - , , - â SQL , . .
"Sind sie gut?" Die einzige wichtige Frage ist, ob es ihnen gut geht. Es gibt keinen abstrakten richtigen Weg fĂŒr alle zu leben. FĂŒr mich ist es richtig, vorwĂ€rts zu gehen und nach interessanten Aufgaben zu suchen. FĂŒr jemanden ist es richtig, still zu sitzen und die Arbeit zu erledigen, die immer gut funktioniert, und dafĂŒr bezahlt zu werden. Alle Menschen werden gebraucht.
- Ăbrigens! Sie kennen so viele interessante Dinge und können es erzĂ€hlen. Warum nehmen Sie nicht jedes Jahr mit einem neuen Bericht an unseren Konferenzen teil?
"Ich glaube nicht, dass ich genug weiĂ, um viel zu erzĂ€hlen."
"Aber du bist trotzdem gekommen!"
- Es ist Zufall, dass ich ein mehr oder weniger einzigartiges Fachwissen fĂŒr die Branche habe. Sehr wenige schreiben wirklich ein Backend ĂŒber Kotlin. Es scheint, dass keiner von ihnen darauf aus ist, darĂŒber zu sprechen. Und sie haben wahrscheinlich nicht diese Ader der Evangelisation. Ich habe immer den Wunsch, anderen das Leben beizubringen (oder es zumindest zu versuchen). Deshalb bin ich natĂŒrlich interessiert. AuĂerdem interessiert mich dieser Bericht etwas, da der nĂ€chste Arbeitgeber, zu dem ich kommen und in Kotlin schreiben möchte, sagen wird: âWarum?â, Ich werde sagen, dass ich jetzt einen Bericht bei Joker gemacht habe mal sehen
- Wie formulieren Sie den Moment, in dem Sie verstehen, dass Sie ĂŒber genĂŒgend Fachwissen verfĂŒgen, um einen Bericht zu erstellen?
- Auf keinen Fall. Der Bericht wird nicht erstellt, weil Sie ĂŒber Fachwissen verfĂŒgen, sondern weil Sie Erfahrung und den Wunsch haben, darĂŒber zu sprechen. Ich habe den Wunsch, schon vom ersten Mal an zu erzĂ€hlen, als ich zu JPoint kam. Aber das absichtliche Thema "zum ErzĂ€hlen" hatte ich vor nicht allzu langer Zeit. Ein solches Thema, damit Sie ĂŒber 45 Minuten sprechen können.
Warum zur Konferenz gehen?
- Warum Konferenzen? Warum werden sie gebraucht? Aus der Tatsache, dass Sie in der Regel zu ihnen gehen, stellt sich heraus, dass Sie sie brauchen.
- Nein, aus der Tatsache, dass ich zu ihnen gehe, stellt sich nur heraus, dass ich zu ihnen gehe.
"Aber brauchst du sie aus irgendeinem Grund?"
- Ich weiĂ nicht, wie ehrlich ich bin, diese Frage zu beantworten. Ich bin mir nicht sicher, ob ich zur Information zur Konferenz gehe. In gewisser Weise gehe ich zur Konferenz, damit Sie mich kennen.
- Das ist eine normale Idee.
- Wenn ich "du" sage, meine ich viele Leute, die sich an mich erinnern. Im Allgemeinen ist es fĂŒr mich nĂŒtzlich, dass der Markt mich nur in Bezug auf meinen Wert kennt, insbesondere wenn ich einen guten Eindruck mache. Und ich versuche das zu tun, weil ich eigentlich nicht so wenig zu wissen scheine und mir stĂ€ndig interessante Arbeit fehlt. Ich bin stĂ€ndig auf der Suche nach einem interessanteren Job. Sehr selten erscheint etwas, das interessanter erscheint als das, was ich jetzt habe.
Andererseits gehe ich zu einer Konferenz, um in den Darm zu klettern. Es gibt nirgendwo eine solche Gelegenheit. Ich habe gehört, wie Azul Zing funktioniert, weil es interessant ist. Ja, ich kann dieses Wissen kaum nutzen, aber es ist einfach interessant. Dies kann kaum in einem Buch gelesen werden. Ich habe ein anderes Problem: Ich lese ein wenig BĂŒcher. Ich lese lieber Fiktion. Ich bin wahrscheinlich einer der wenigen, zumindest ernsthaften Techniker, die so leben. Ich lese Referenzen, Whitepeppers, aber fast nie BĂŒcher. Und in Referenzen und Whitepeppers sind solche Informationen selten möglich.
- Ja, und in BĂŒchern kommt diese Information nicht so oft vor.
- BĂŒcher sind fĂŒr mich direkt schwer, um ehrlich zu sein. Das letzte wichtige Buch, das ich ĂŒber Java gelesen habe, ist "Java Concurrency in Practice", und ĂŒber das Java-Ăkosystem ist "High-Performance Java Persistence", Vlad Mihalcea (dies ist ein sehr gutes Buch). Aber normalerweise ist es eine sehr schwierige LektĂŒre und wird mir nicht gegeben.
- Lohnt es sich, das Dock von Java zu lesen?
- Es hÀngt von Ihrer Art zu lernen ab. Die Menschen werden je nach Lernmethode in zwei Typen unterteilt: Einige schreiben lieber zuerst, verstehen dann, wie es funktioniert, und andere lesen zuerst, wie man schreibt, und schreiben dann. Ich gehöre zum ersten Typ. Ich beginne immer mit Experimenten und tauche nicht tief. Ich tauche viel spÀter tief. Ein wundervolles MÀdchen arbeitete mit mir zusammen, das, bevor es die erste Zeile in Kotlin schrieb, ein Dock auf Kotlin las.
- Wahrscheinlich hĂ€tte ich das ĂŒbrigens getan.
- Das ist ein wunderbarer Weg, ich habe nichts dagegen.
"Ich bin auch sehr daran interessiert, wie Leute wie Sie es tun, die sofort normal schreiben können."
- Es gibt keine Aufgabe zum normalen Schreiben, es gibt eine Aufgabe zum Schreiben. Es ist sehr wichtig. Im Allgemeinen tritt die Aufgabe des Schreibens normalerweise nicht immer auf, insbesondere wenn Sie studieren. Wenn ich etwas lerne, kann ich nicht nur eine Reihe von Informationen verstehen und dann schreiben. Ich beginne immer mit Experimenten. Vielleicht weiĂt du, dass ich manchmal einen Podcast schreibe. In der ersten Ausgabe, die wir aufgenommen und veröffentlicht haben, habe ich darĂŒber gesprochen, dass ich es schaffe, alles nur zu studieren, weil ich es nie fĂŒr spĂ€ter aufgeschoben habe. Ich habe keine Aufgabe, etwas zu lesen, und spare daher viel Zeit, da ich mich sofort hinsetze und anfange, eine Technologie zu verwenden, entweder in einem Arbeitsprojekt oder in einer Art Heimprojekt. Dann werde ich, wenn nötig, tiefer gehen. Aber fĂŒr den Anfang kann ich Ihnen sagen, dass ich verstehe, wie man es benutzt. Im nĂ€chsten Schritt kann ich Ihnen sagen, dass ich weiĂ, wie das funktioniert. Ich habe angefangen, Spring zu verwenden, bevor mir klar wurde, wie es funktioniert. Wahrscheinlich ungefĂ€hr 6 Jahre alt.
- Es scheint, wir sollten uns zusammenrollen :-) Vielen Dank! Wir sehen uns bei Joker. Ich werde auf jeden Fall kommen, um Ihren Bericht anzuhören.