Vorwort
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Willkommen in der pragmatischen Welt der Softwareentwicklung, in der Ingenieure keine Angst vor ehrgeizigen Leistungszielen haben. Wo veränderte Anforderungen oder unerwartete Effizienzprobleme ohne Stress gehandhabt werden, wo der Code taktisch und effektiv auf der Grundlage von Daten optimiert wird und die Codebasis trotzdem einfach gehalten wird und leicht zu lesen, zu warten und zu erweitern ist. Moment, ist das überhaupt möglich?
Ja, und ich werde dir zeigen, wie! Die gute Nachricht ist: Wenn du dieses Buch gekauft hast, hast du schon die Hälfte geschafft - das bedeutet, dass du das Problem erkannt hast und bereit bist, mehr zu lernen! Die schlechte Nachricht ist, dass ich zwar versucht habe, das Wissen auf das Nötigste zu beschränken, es aber immer noch 11 Kapitel gibt, die du durcharbeiten musst. Ich denke, Efficient Go ist in dieser Hinsicht einzigartig, denn es ist kein schnelles Tutorial. Stattdessen ist es ein kompletter Leitfaden zum Schreiben effizienter und pragmatischer Software, der alle Aspekte behandelt, die ich zu Beginn meiner Karriere gerne gewusst hätte.
In diesem Buch lernst du zweifellos viel über meine Lieblingsprogrammiersprache Go und wie du sie optimieren kannst. Aber lass dich nicht vom Titel des Buches täuschen. Auch wenn ich Go als Beispielsprache verwende, um die Denkweise der Optimierung und die Muster der Beobachtbarkeit zu zeigen, sind 8 der 11 Kapitel dieses Buches sprachunabhängig. Du kannst die gleichen Techniken anwenden, um Software in jeder anderen Sprache wie Java, C#, Scala, Python, C++, Rust oder Haskell zu verbessern.
Wenn du eine vollständige Liste von Low-Level-Optimierungstricks erwartest, ist dies nicht das richtige Buch. Erstens lassen sich Optimierungen nicht gut verallgemeinern. Die Tatsache, dass jemand die Schleife abgerollt oder einen Zeiger in seinem struct-Feld verwendet hat und dadurch eine bessere Effizienz erreicht hat, bedeutet nicht, dass es hilfreich ist, wenn wir dasselbe tun! Wir werden einige Optimierungstricks durchgehen, aber ich lege stattdessen Wert auf vollständiges Wissen über Effizienz in der pragmatischen Softwareentwicklung.
Zweitens sind gefährliche Tricks auf "niedriger Ebene" oft nicht nötig. In den meisten Fällen reicht es aus, die einfachen Punkte zu kennen, an denen dein Programm Zeit und Ressourcen verschwendet, um deine Ziele in Bezug auf Effizienz und Skalierbarkeit kostengünstig und effektiv zu erreichen. Außerdem wirst du lernen, dass es in den meisten Fällen nicht nötig ist, dein Programm in C++, Rust oder Assembly umzuschreiben, um eine effiziente Lösung zu haben!
Bevor wir beginnen, lass uns die Hauptziele dieses Buches durchgehen und warum ich es für notwendig hielt, mich auf das Thema Effizienz zu konzentrieren. Außerdem erfährst du, wie du das Beste aus diesem Buch herausholst und es effektiv für deine Softwareentwicklungsaufgaben einsetzt.
Warum ich dieses Buch geschrieben habe
Ich habe rund 1.200 Stunden mit dem Schreiben von Efficient Go verbracht, also war die Entscheidung, ein solches Buch zu schreiben, nicht spontan. Im Zeitalter von Social Media, YouTube und TikTok mag sich das Schreiben und Lesen von Büchern veraltet anfühlen, aber meiner Erfahrung nach neigen die modernen Medien dazu, Themen zu stark zu vereinfachen. Man muss sie auf ein absolutes Minimum reduzieren, um nicht Zuschauer und Geld zu verlieren. Das führt zu falschen Anreizen, die im Allgemeinen mit dem kollidieren, was ich mit diesem Buch erreichen wollte.
Meine Mission ist ganz einfach: Ich möchte, dass die Software, die ich benutze oder von der ich abhängig bin, besser wird! Ich möchte, dass die Autoren und Betreuer von Softwareprojekten wissen, wie effizient ihr Code ist und wie sie ihn bewerten können. Ich möchte, dass sie meine oder fremde Pull Requests zuverlässig auf Effizienzverbesserungen prüfen. Ich möchte, dass die Menschen in meinem Umfeld wissen, wie man professionell mit Leistungsproblemen umgeht, anstatt eine stressige Atmosphäre zu schaffen. Ich möchte, dass Nutzer/innen und Stakeholder mit den Benchmarks und dem billigen Marketing, das wir in der Branche sehen, vorsichtig sind. Und schließlich möchte ich, dass Führungskräfte, Direktoren und Produktmanager das Thema Software-Effizienz mit dem Bewusstsein angehen, pragmatische Effizienzanforderungen zu formulieren, die den Ingenieuren helfen, hervorragende Produkte zu liefern.
Ich betrachte dieses Buch auch als einen kleinen Beitrag zu nachhaltigerer Software. Jede verschwendete CPU-Zeit und jeder verschwendete Speicherplatz verschlingt einen erheblichen Teil des Geldes deines Unternehmens. Sie verschwendet aber auch Energie und Hardware, was erhebliche Auswirkungen auf die Umwelt hat. Wenn du also gleichzeitig Geld und den Planeten schonst und einen besseren Nutzen für dein Unternehmen erzielst, ist das kein schlechtes Ergebnis der Fähigkeiten, die du hier lernst.
Ich habe herausgefunden, dass das Schreiben eines Buches der beste Weg ist, dieses Ziel zu erreichen. Es ist einfacher, als ständig die gleichen Feinheiten, Werkzeuge und Techniken in meiner täglichen Arbeit, auf Open Source und auf Konferenzen zu erklären!
Wie ich dieses Wissen erlangt habe
Ich habe meine Erfahrung in Bezug auf effiziente Themen und hochwertige Softwareentwicklung durch viel Übung, Fehler, Experimente, implizite Mentoren und Forschung aufgebaut.
Ich war 29 Jahre alt, als ich begann, dieses Buch zu schreiben. Das mag sich nicht nachviel Erfahrung anfühlen, aber ich habe mit 19 Jahren eine professionelle Vollzeitkarriere in der Softwareentwicklung begonnen. Parallel zu meinem Vollzeitstudium der Informatik arbeitete ich bei Intel im Bereich Software-definierte Infrastruktur (SDI). Zunächst programmierte ich in Python im Rahmen des OpenStack-Projekts, dann in C++ und leistete Beiträge zum damals sehr beliebten Mesos-Projekt unter der Aufsicht von tollen Ingenieuren von Mesosphere und Twitter. Schließlich wechselte ich zu Go, um Kubernetes zu entwickeln und verliebte mich in diese Sprache.
Ich habe bei Intel eine nicht unerhebliche Zeit damit verbracht, die Funktion der Überbelegung von Knoten (Oversubscription) mit Noisy Neighbour Mitigations zu entwickeln. Im Allgemeinen erlaubt die Überbelegung, dass mehr Programme auf einem einzigen Rechner laufen, als es sonst möglich wäre. Das kann funktionieren, da statistisch gesehen selten alle Programme gleichzeitig alle reservierten Ressourcen nutzen. Im Nachhinein betrachtet ist es in der Regel einfacher und effektiver, Geld zu sparen, indem man mit der Software-Optimierung beginnt, als mit komplexen Algorithmen wie diesem.
2016 zog ich nach London, um für ein Gaming-Start-up zu arbeiten. Ich arbeitete mit ehemaligen Mitarbeitern von Google, Amazon, Microsoft und Facebook zusammen, um eine globale Spieleplattform zu entwickeln und zu betreiben. Wir entwickelten Microservices, hauptsächlich in Go, die auf Dutzenden von Kubernetes-Clustern weltweit liefen. Hier habe ich viel über verteilte Systeme, Site Reliability Engineering und Monitoring gelernt. Vielleicht war das der Zeitpunkt, an dem ich süchtig nach den erstaunlichen Werkzeugen rund um die Beobachtbarkeit wurde, die der Schlüssel zum Erreichen pragmatischer Effizienz ist und in Kapitel 6 erklärt wird.
Meine Leidenschaft für eine gute Sichtbarkeit der laufenden Software führte dazu, dass ich ein Experte für die Verwendung und Entwicklung einer beliebten Open-Source-Zeitseriendatenbank für Überwachungszwecke namens Prometheus wurde. Schließlich wurde ich offizieller Maintainer und startete mehrere andere Go-Open-Source-Projekte und -Bibliotheken. Schließlich hatte ich die Gelegenheit, zusammen mit Fabian Reinartz eine große verteilte Open-Source-Zeitreihendatenbank namens Thanos zu entwickeln. Es würde mich nicht wundern, wenn etwas von meinem Code in der Infrastruktur deines Unternehmens läuft!
2019 wechselte ich zu Red Hat, wo ich Vollzeit an Observability-Systemen in Open Source arbeite. In dieser Zeit habe ich mich auch intensiver mit Continuous-Profiling-Lösungen beschäftigt, die du auch in diesem Buch kennenlernen wirst.
Außerdem bin ich in der Cloud Native Computing Foundation (CNCF) als technischer Leiter der Ambassador and Observability Technical Advisory Group (TAG) aktiv. Außerdem bin ich Mitorganisator von Konferenzen und Meetups. Mit den Projekten Prometheus und Thanos betreuen wir im Team jedes Jahr mehrere Ingenieure im Rahmen der CNCF-Mentoring-Initiativen.1
Ich habe Tausende von Codezeilen für verschiedene Software geschrieben oder überprüft, die in der Produktion laufen, zuverlässig sein und skalierbar sein musste. Ich habe bisher über zwei Dutzend Ingenieure unterrichtet und angeleitet. Aber am aufschlussreichsten war vielleicht die Arbeit im Bereich Open Source. Du hast mit vielen verschiedenen Menschen zu tun, die aus unterschiedlichen Unternehmen und Orten auf der ganzen Welt kommen und unterschiedliche Hintergründe, Ziele und Bedürfnisse haben.
Insgesamt glaube ich, dass wir mit den fantastischen Leuten, mit denen ich zusammenarbeiten durfte, erstaunliche Dinge erreicht haben. Ich hatte das Glück, in einem Umfeld zu arbeiten, in dem die Qualität des Codes wichtiger war als die Verzögerungen bei der Codeüberprüfung oder die Zeit, die für die Lösung von Stilfragen aufgewendet wurde. Wir legten großen Wert auf gutes Systemdesign, Wartbarkeit und Lesbarkeit des Codes. Wir haben versucht, diese Werte auf Open Source zu übertragen, und ich glaube, das ist uns gut gelungen. Es gibt jedoch eine wichtige Sache, die ich verbessern würde, wenn ich die Chance hätte, z. B. das Thanos-Projekt noch einmal zu schreiben: Ich würde versuchen, mich mehr auf die pragmatische Effizienz meines Codes und der von uns gewählten Algorithmen zu konzentrieren. Ich würde mich darauf konzentrieren, von Anfang an klarere Effizienzanforderungen zu stellen und mehr in Benchmarking und Profiling zu investieren.
Und versteh mich nicht falsch, das Thanos-System ist heute schneller und verbraucht viel weniger Ressourcen als einige Konkurrenten, aber es hat viel Zeit gekostet, und es gibt immer noch eine riesige Menge an Hardware-Ressourcen, die wir weniger nutzen könnten. Wir haben immer noch viele Engpässe, die der Aufmerksamkeit der Gemeinschaft bedürfen. Hätte ich jedoch das Wissen, die Techniken und die Vorschläge, die du in diesem Buch lernst, angewandt, hätten wir die Entwicklungskosten um die Hälfte, wenn nicht sogar mehr, senken können, um Thanos in den Zustand zu versetzen, den wir heute haben (ich hoffe, mein Ex-Boss, der diese Arbeit bezahlt hat, liest das nicht!).
Meine Reise hat mir gezeigt, wie sehr ein Buch wie dieses gebraucht wurde. Da immer mehr Menschen programmieren, oft ohne einen Informatikhintergrund, gibt es viele Fehler und Missverständnisse, vor allem in Bezug auf die Effizienz von Software. Es gab nicht viel Literatur, die uns praktische Antworten auf unsere Fragen zur Effizienz oder Skalierung gegeben hätte, insbesondere für Go. Wir hoffen, dass dieses Buch diese Literaturlücke füllt.
Für wen dieses Buch ist
Efficient Go konzentriert sich auf die Vermittlung von Werkzeugen und Kenntnissen, die notwendig sind, um zu beantworten, wann und wie Effizienzoptimierung angewendet werden sollte, was stark von den Umständen und den Zielen deines Unternehmens abhängt. Daher richtet sich dieses Buch in erster Linie an Softwareentwickler/innen, die in Go oder einer anderen modernen Sprache geschriebene Programme entwerfen, erstellen oder ändern. Ein Softwareentwickler sollte ein Experte darin sein, sicherzustellen, dass die von ihm erstellte Software sowohl den funktionalen als auch den Effizienzanforderungen gerecht wird. Idealerweise verfügst du über einige grundlegende Programmierkenntnisse, wenn du mit diesem Buch beginnst.
Ich glaube, dass dieses Buch auch für diejenigen nützlich ist, die hauptsächlich Software betreiben, die jemand anderes schreibt, z. B. DevOps-Ingenieure, SRE, Sysadmins und Plattformteams. Es gibt viele Optimierungsdesignstufen (wie in "Optimierungsdesignstufen" beschrieben ). Manchmal ist es sinnvoll, in Software-Optimierungen zu investieren, und manchmal müssen wir es auf anderen Ebenen angehen! Um eine verlässliche Effizienz zu erreichen, müssen Softwareentwickler/innen außerdem viele Benchmarks durchführen und mit produktionsähnlichen Umgebungen experimentieren (wie in Kapitel 6 erläutert), was in der Regel eine enge Zusammenarbeit mit Plattformteams bedeutet. Und schließlich sind die in Kapitel 6 erläuterten Beobachtungspraktiken hochmoderne Werkzeuge, die für modernes Platform Engineering empfohlen werden. Ich bin ein starker Befürworter der Unterscheidung zwischen Application Performance Monitoring (APM) und Observability für SRE zu vermeiden. Wenn du diese Unterscheidung hörst, kommt sie meist von Anbietern, die dich dazu bringen wollen, mehr zu bezahlen oder das Gefühl zu haben, dass sie mehr Funktionen haben. Wie ich erklären werde, können wir dieselben Tools, Instrumente und Signale für alle Softwarebeobachtungen wiederverwenden.2 Im Allgemeinen sind wir im selben Team - wir wollen bessere Produkte bauen!
Abschließend möchte ich dieses Buch Managern, Produktmanagern und Führungskräften empfehlen, die technisch versiert sind und wissen wollen, wie sie sicherstellen können, dass sie nicht Millionen von Dollar für leicht zu behebende Effizienzprobleme in ihrem Team verschwenden!
Wie dieses Buch organisiert ist
Dieses Buch ist in 11 Kapitel gegliedert. In Kapitel 1 diskutieren wir über Effizienz und warum sie wichtig ist. In Kapitel 2 führe ich kurz in Go ein, wobei ich die Effizienz im Blick habe. In Kapitel 3 geht es dann um Optimierungen und darum, wie du darüber nachdenken und sie angehen kannst. Effizienzverbesserungen können einen enormen Teil deiner Zeit in Anspruch nehmen, aber systematische Ansätze helfen dir, viel Zeit und Mühe zu sparen.
In den Kapiteln 4 und 5 erkläre ich dir alles, was du über Latenz, CPU- und Speicherressourcen wissen musst, und wie OS und Go sie abstrahieren.
Dann werden wir uns damit befassen, was es bedeutet, datengesteuerte Entscheidungen zur Software-Effizienz zu treffen. Wir beginnen mit Kapitel 6. Dann werden wir in Kapitel 7 die Zuverlässigkeit von Experimenten und Komplexitätsanalysen diskutieren. Schließlich erkläre ich in den Kapiteln 8 und 9 Benchmarking- und Profiling-Techniken.
Zu guter Letzt werde ich dir in Kapitel 10 verschiedene Beispiele für unterschiedliche Optimierungssituationen zeigen. In Kapitel 11 fassen wir schließlich verschiedene Effizienzmuster und Tricks zusammen, die wir in der Go-Gemeinschaft beobachten.
In diesem Buch verwendete Konventionen
In diesem Buch werden die folgenden typografischen Konventionen verwendet:
- Kursiv
-
Weist auf neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen hin.
Constant width
-
Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.
Constant width bold
-
Zeigt Befehle oder anderen Text an, der vom Benutzer wortwörtlich eingetippt werden sollte.
Constant width italic
-
Zeigt Text an, der durch vom Benutzer eingegebene Werte oder durch kontextabhängige Werte ersetzt werden soll.
Tipp
Dieses Element steht für einen Tipp oder eine Anregung.
Hinweis
Dieses Element steht für einen allgemeinen Hinweis.
Warnung
Dieses Element weist auf eine Warnung oder einen Warnhinweis hin.
Code-Beispiele verwenden
Dieses Buch enthält Codebeispiele, die dir helfen sollen, die Werkzeuge, Techniken und bewährten Verfahren zu verstehen. Alle Beispiele sind in der Programmiersprache Go verfasst und funktionieren mit Go ab Version 1.18.
Du findest alle Beispiele aus diesem Buch im ausführbaren und getesteten Open-Source-Repository auf GitHub efficientgo/examples
. Du bist herzlich eingeladen, es zu forken, es zu benutzen und mit den Beispielen in diesem Buch zu spielen. Jeder Mensch lernt anders. Für manche Leute ist es hilfreich, einige Beispiele in ihre Lieblings-IDE zu importieren und damit zu spielen, indem sie sie verändern, ausführen, testen oder debuggen. Finde den Weg, der für dich funktioniert, und zögere nicht, Fragen zu stellen oder Verbesserungen über GitHub Issues oder Pull Requests vorzuschlagen!
Beachte, dass die Code-Beispiele in diesem Buch vereinfacht wurden, um sie übersichtlicher und kleiner zu machen. Es gelten insbesondere die folgenden Regeln:
-
Wenn das Paket
Go
nicht angegeben ist, wirdpackage main
angenommen. -
Wenn der Dateiname oder die Erweiterung des Beispiels nicht angegeben ist, wird davon ausgegangen, dass die Datei eine .go-Erweiterung hat. Wenn es sich um einen Funktionstest oder Mikrobenchmark handelt, muss der Dateiname mit _test.go enden.
-
import
Anweisungen sind nicht immer vorhanden. In solchen Fällen wird davon ausgegangen, dass die Standardbibliothek oder zuvor eingeführte Pakete importiert werden. -
Manchmal gebe ich Importe nicht in der Anweisung
import
an, sondern in einem Kommentar (// import <URL>
). Das ist dann der Fall, wenn ich einen einzelnen, nicht trivialen Import von vielen erklären möchte, die in diesem Codebeispiel benötigt werden. -
Ein Kommentar mit drei Punkten (
// ...
) gibt an, dass ein unzusammenhängender Inhalt entfernt wurde. Dies unterstreicht, dass es eine gewisse Logik gibt, damit eine Funktion Sinn macht. -
Ein Kommentar mit der Anweisung
handle error
(// handle error
) zeigt an, dass die Fehlerbehandlung zur besseren Lesbarkeit entfernt wurde. Behandle Fehler immer in deinem Code!
Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Generell gilt: Wenn dieses Buch einen Beispielcode enthält, darfst du ihn in deinen Programmen und deiner Dokumentation verwenden. Du musst uns nicht um Erlaubnis fragen, es sei denn, du reproduzierst einen großen Teil des Codes. Wenn du zum Beispiel ein Programm schreibst, das mehrere Teile des Codes aus diesem Buch verwendet, brauchst du keine Erlaubnis. Der Verkauf oder die Verbreitung von Beispielen aus O'Reilly-Büchern erfordert jedoch eine Genehmigung. Die Beantwortung einer Frage mit einem Zitat aus diesem Buch und einem Beispielcode erfordert keine Genehmigung. Wenn du jedoch einen großen Teil des Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eine Genehmigung erforderlich.
Wir freuen uns, verlangen aber in der Regel keine Namensnennung. Eine Quellenangabe umfasst normalerweise den Titel, den Autor, den Verlag und die ISBN. Zum Beispiel:"Efficient Go von Bartłomiej Płotka (O'Reilly). Copyright 2023 Alloc Limited, 978-1-098-10571-6."
Wenn du der Meinung bist, dass die Verwendung von Code-Beispielen nicht unter die Fair-Use-Regelung oder die oben genannte Erlaubnis fällt, kannst du uns gerne unter permissions@oreilly.com kontaktieren .
Danksagungen
Wie man so schön sagt : "Die Größe liegt im Handeln der anderen". Bei diesem Buch ist das nicht anders. Zahlreiche Menschen haben mir direkt oder indirekt auf meinem Weg zum Efficient Go Buch und meiner Karriere geholfen.
Zuallererst möchte ich meiner Frau Kasia danken - ohne ihre Unterstützung wäre dies nicht möglich.
Danke an meine wichtigsten technischen Prüfer, Michael Bang und Saswata Mukherjee, die unermüdlich alle Inhalte im Detail geprüft haben. Danke an andere, die sich einige Teile der ersten Inhalte angesehen und tolles Feedback gegeben haben: Matej Gera, Felix Geisendörfer,Giedrius Statkevičius, Björn Rabenstein, Lili Cosic, Johan Brandhorst-Satzkorn, Michael Hausenblas, Juraj Michalek, Kemal Akkoyun, Rick Rackow, Goutham Veeramachaneni und viele mehr!
Außerdem danke ich den vielen talentierten Menschen aus der Open-Source-Gemeinschaft, die ihr enormes Wissen in ihren öffentlichen Inhalten teilen! Sie merken es vielleicht nicht, aber sie helfen bei dieser Arbeit, auch beim Schreiben dieses Buches. Du wirst in diesem Buch Zitate von einigen von ihnen finden: Chandler Carruth, Brendan Gregg, Damian Gryski, Frederic Branczyk, Felix Geisendörfer, Dave Cheney, Bartosz Adamczewski, Dominik Honnef, William (Bill) Kennedy, Bryan Boreham, Halvar Flake, Cindy Sridharan, Tom Wilkie, Martin Kleppmann, Rob Pike, Russ Cox, Scott Mayers, und viele mehr.
Abschließend möchte ich mich beim O'Reilly-Team bedanken, insbesondere bei Melissa Potter, Zan McQuade und Clare Jensen, für ihre großartige Hilfe und ihr Verständnis für Verzögerungen, Terminverschiebungen und die Tatsache, dass sie mehr Inhalte in dieses Buch eingeschleust haben als geplant :)
Feedback ist willkommen!
Wenn du meine Arbeit oder die Gruppen, mit denen ich zusammenarbeite, verfolgen oder noch mehr über dieses Thema erfahren möchtest, dann folge mir auf Twitter oder besuche meinen Blog.
Zögere nicht, mich zu kontaktieren, wenn du Feedback zu meiner Arbeit oder den von mir produzierten Inhalten hast. Ich bin immer offen dafür, mehr zu lernen!
O'Reilly Online Learning
Hinweis
Seit mehr als 40 Jahren bietet O'Reilly Media Schulungen, Wissen und Einblicke in Technologie und Wirtschaft, um Unternehmen zum Erfolg zu verhelfen.
Unser einzigartiges Netzwerk von Experten und Innovatoren teilt sein Wissen und seine Erfahrung durch Bücher, Artikel und unsere Online-Lernplattform. Die Online-Lernplattform von O'Reilly bietet dir On-Demand-Zugang zu Live-Trainingskursen, ausführlichen Lernpfaden, interaktiven Programmierumgebungen und einer umfangreichen Text- und Videosammlung von O'Reilly und über 200 anderen Verlagen. Weitere Informationen erhältst du unter https://oreilly.com.
Wie du uns kontaktierst
Bitte richte Kommentare und Fragen zu diesem Buch an den Verlag:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Nord
- Sebastopol, CA 95472
- 800-998-9938 (in den Vereinigten Staaten oder Kanada)
- 707-829-0515 (international oder lokal)
- 707-829-0104 (Fax)
Wir haben eine Webseite für dieses Buch, auf der wir Errata, Beispiele und zusätzliche Informationen auflisten. Du kannst diese Seite unter https://oreil.ly/efficient-go aufrufen .
Schreib eine E-Mail an bookquestions@oreilly.com, um Kommentare oder technische Fragen zu diesem Buch zu stellen.
Neuigkeiten und Informationen über unsere Bücher und Kurse findest du unter https://oreilly.com.
Du findest uns auf LinkedIn: https://linkedin.com/company/oreilly-media.
Folge uns auf Twitter: https://twitter.com/oreillymedia.
Sieh uns auf YouTube: https://www.youtube.com/oreillymedia.
1 Wenn du neu in der Softwareentwicklung oder Open Source bist, sprich mit uns, fang an etwas beizutragen und bewirb dich für ein zweimonatiges bezahltes Mentoring. Sag mir Bescheid, wenn du Spaß haben möchtest, während du andere betreust! Wir brauchen auch gute Mentoren - es ist wichtig, eine neue Generation von Open-Source-Betreuern auszubilden.
2 Ich habe schon von einigen erfahrenen Leuten die Rückmeldung bekommen, dass sie nicht wussten, dass man mit Kennzahlen an der Effizienz und Leistung arbeiten kann! Das ist möglich, und hier erfährst du, wie.
Get Efficient Go now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.