Vorwort
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Du kannst diesen Satz nur lesen, wenn du dieses Buch aufschlägst, entweder physisch oder digital. Das sagt mir, dass du dich für TypeScript interessierst, eine der beliebtesten Programmiersprachen der letzten Jahre. Laut der 2022 State of JavaScript-Umfrage verwenden fast 70 % aller Teilnehmer/innen aktiv TypeScript. Die StackOverflow-Umfrage 2022 listet TypeScript als eine der fünf beliebtesten Sprachen und die vierthöchste Benutzerzufriedenheit auf. Anfang 2023 zählt TypeScript mehr als 40 Millionen wöchentliche Downloads auf NPM.
Zweifellos: TypeScript ist ein Phänomen!
Trotz seiner Beliebtheit macht TypeScript vielen Entwicklern das Leben schwer. Den Type-Checker zu bekämpfen ist eine Redewendung, die man oft hört; eine andere ist, ein paar any
's hineinzuwerfen, damit er die Klappe hält. Manche Leute fühlen sich ausgebremst, weil sie nur schreiben, um dem Compiler zu gefallen, obwohl sie wissen, dass ihr Code funktionieren muss. Der einzige Zweck von TypeScript ist es jedoch, JavaScript-Entwickler/innen produktiver und effizienter zu machen. Schlägt das Tool letztendlich fehl, oder erwarten wir als Entwickler/innen etwas anderes von dem Tool, als es eigentlich liefern soll?
Die Antwort liegt irgendwo in der Mitte, und genau hier kommt das TypeScript Cookbook ins Spiel. In diesem Buch findest du mehr als hundert Rezepte, die sich mit allem befassen, von komplexen Projekt-Setups bis hin zu fortgeschrittenen Typisierungstechniken. Du lernst die Feinheiten und das Innenleben des Typisierungssystems kennen und erfährst, welche Kompromisse und Ausnahmen es eingehen muss, um seine Grundlage nicht zu beeinträchtigen: JavaScript. Außerdem lernst du Methoden, Entwurfsmuster und Entwicklungstechniken kennen, um besseren und robusteren TypeScript-Code zu erstellen. Am Ende wirst du nicht nur verstehen , wie man etwas macht, sondern auch warum.
Mein Ziel ist es, dir einen Leitfaden an die Hand zu geben, der dich vom Anfänger zum Experten macht, und ein Nachschlagewerk, das du auch nach der Lektüre des Buches nutzen kannst. Da TypeScript vier Mal pro Jahr veröffentlicht wird, ist es unmöglich, alle aktuellen Funktionen in einem einzigen Buch aufzulisten. Deshalb konzentrieren wir uns auf die dauerhaften Aspekte der Programmiersprache, um dich auf alle kommenden Änderungen vorzubereiten. Willkommen zum TypeScript Kochbuch.
Für wen dieses Buch ist
Dieses Buch richtet sich an Entwickler, Ingenieure und Architekten, die genügend JavaScript-Kenntnisse haben, um gefährlich zu werden, und die sich mit TypeScript vertraut gemacht haben. Du verstehst die grundlegenden Konzepte von Typen und wie man sie anwendet, und du kennst die unmittelbaren Vorteile von statischen Typen. Du bist an einem Punkt angelangt, an dem die Dinge interessant werden: Du brauchst ein tieferes Wissen über das Typsystem und du musst aktiv mit TypeScript arbeiten, nicht nur um eine robuste und skalierbare Anwendung zu gewährleisten, sondern auch um die Zusammenarbeit zwischen dir und deinen Kollegen zu garantieren.
Du willst lernen, wie sich etwas in TypeScript verhält und die Gründe für sein Verhalten verstehen. Das ist es, was du im TypeScript Cookbook bekommst. Du lernst den Projektaufbau, die Eigenheiten und das Verhalten des Typsystems, komplexe Typen und ihre Anwendungsfälle sowie die Arbeit mit Frameworks und die Anwendung der Typentwicklungsmethodik. Dieses Buch ist so konzipiert, dass es dich vom Anfänger zum Lehrling und schließlich zum Experten macht. Wenn du einen Leitfaden brauchst, um aktiv mehr über die ausgefeilten Funktionen von TypeScript zu lernen, aber auch ein Nachschlagewerk, auf das du dich während deiner gesamten Karriere verlassen kannst, ist dieses Buch genau das Richtige für dich.
Was steht in diesem Buch?
Ein vorrangiges Ziel beim Schreiben des TypeScript Cookbook war es, sich auf Lösungen für alltägliche Probleme zu konzentrieren. TypeScript ist eine bemerkenswerte Programmiersprache, und die Funktionen des Typensystems sind so mächtig, dass wir einen Punkt erreichen, an dem sich die Leute mit fortgeschrittenen TypeScript-Rätseln herausfordern. Diese Rätsel sind zwar unterhaltsam, aber ihnen fehlt oft der Bezug zur realen Welt, weshalb sie nicht Teil dieses Buches sind.
Ich möchte sicherstellen, dass die präsentierten Inhalte etwas sind, das dir in deinem Alltag als TypeScript-Entwickler begegnet, mit Problemen, die aus realen Situationen stammen, und Lösungen, die ganzheitlich sind. Ich werde dir Techniken und Methoden beibringen, die du in verschiedenen Szenarien anwenden kannst, nicht nur in einem einzigen Rezept. Überall im Buch findest du Verweise auf frühere Rezepte, die dir zeigen, wie eine bestimmte Technik in einem neuen Kontext angewendet werden kann.
Die Beispiele sind entweder direkt aus dem Quellcode echter Projekte entnommen oder auf das Wesentliche reduziert, um ein Konzept zu veranschaulichen, ohne zu viel Fachwissen zu erfordern. Während einige Beispiele sehr spezifisch sind, wirst du auch eine Menge Person
Objekte sehen, die den Namen "Stefan" tragen (und du wirst mein Alter im ganzen Buch sehen können).
Das Buch konzentriert sich fast ausschließlich auf die Funktionen, die TypeScript zu JavaScript hinzufügt; um das Beispiel vollständig zu verstehen, musst du also ein angemessenes Maß an JavaScript verstehen. Ich erwarte nicht, dass du ein JavaScript-Guru bist, aber die Fähigkeit, grundlegenden JavaScript-Code zu lesen, ist ein Muss. Da JavaScript und TypeScript so engmiteinander verbunden sind, werden in einigen Kapiteln des Buches JavaScript-Funktionen und ihr Verhalten behandelt, aber immer durch die Brille von TypeScript.
Ein Kochbuch ist dazu da, dir eine schnelle Lösung für ein Problem zu geben: ein Rezept. In diesem Buch endet jedes Rezept mit einer Diskussion, die dir einen breiteren Kontext und eine Bedeutung für die Lösung gibt. Je nach Stil des Autors liegt der Schwerpunkt derKochbücher von O'Reilly entweder auf der Lösung oder auf der Diskussion. TypeScript Cookbook ist unverkennbar ein Diskussionsbuch. In meiner fast 20-jährigen Karriere als Softwareentwickler bin ich noch nie auf Situationen gestoßen, in denen eine Lösung für alle Probleme passt. Deshalb möchte ich dir im Detail zeigen, wie wir zu unseren Schlussfolgerungen gekommen sind, was sie bedeuten und welche Kompromisse wir eingegangen sind. Letztlich soll dieses Buch ein Leitfaden für solche Diskussionen sein. Warum eine Vermutung anstellen, wenn du gute Argumente für deineEntscheidungen hast?
Aufbau dieses Buches
Das TypeScript Cookbook führt dich von Anfang bis Ende durch die Sprache. Wir beginnen mit der Projekteinrichtung, sprechen über grundlegende Typen und die Funktionsweise des Typsystems und gehen schließlich auf fortgeschrittene Themen wie bedingte Typen und Hilfstypen ein. Weiter geht es mit Kapiteln, die sich mit ganz speziellen Funktionen befassen, wie der Dualität von Klassen und der Unterstützung von React.
Es gibt zwar einen roten Faden und einen Aufbau, aber jedes Kapitel und jedes Rezept kann auch für sich allein verzehrt werden. Jede Lektion wurde so gestaltet, dass sie auf die Verbindung zu vorherigen (oder nächsten!) Rezepten im Buch hinweist, aber jedes Kapitel ist letztlich in sich abgeschlossen. Du kannst das Buch von Anfang bis Ende durcharbeiten oder es nach dem Prinzip "Wähle dein eigenes Abenteuer" mit seinen vielen Verweisen lesen. Hier ist ein kurzer Überblick über den Inhalt.
TypeScript will mit allen JavaScript-Varianten zusammenarbeiten, und davon gibt es eine Menge. In Kapitel 1, "Projekt einrichten", lernst du die Konfigurationsmöglichkeiten für verschiedene Sprachlaufzeiten, Modulsysteme und Zielplattformen kennen.
Kapitel 2, "Grundtypen", führt dich durch die Typenhierarchie, erklärt dir den Unterschied zwischen any
und unknown
, lehrt dich, welcher Code zu welchem Namensraum beiträgt, und beantwortet die uralte Frage, ob du einen Typ-Alias oder eine Schnittstelle zur Beschreibung deiner Objekttypen wählen solltest.
Eines der längeren Kapitel des Buches ist Kapitel 3, "Das Typensystem". Hier erfährst du alles über Vereinigungs- und Überschneidungstypen, wie du diskriminierte Vereinigungstypen definierst, wie du die Techniken assert never und optional never verwendest und wie du Typen je nach Anwendungsfall einschränkst und erweiterst. Nach diesem Kapitel wirst du verstehen, warum es in TypeScript Type Assertions und keine Type Casts gibt, warum Enums generell verpönt sind und wie du die nominalen Bits in einem strukturellen Typsystem findest.
TypeScript hat ein generisches Typsystem, das wir in Kapitel 4, "Generics", im Detail sehen werden . Generische Typen machen deinen Code nicht nur wiederverwendbar, sondern sind auch der Einstieg in die fortgeschrittenen Funktionen von TypeScript. Dieses Kapitel markiert den Punkt, an dem du von den TypeScript-Grundlagen zu den anspruchsvolleren Bereichen des Typsystems aufsteigst - ein passender Abschluss für den ersten Teil.
Kapitel 5, "Bedingte Typen" erklärt, warum das TypeScript-Typsystem auch eine eigene Metaprogrammiersprache ist. Mit der Möglichkeit, Typen basierend auf bestimmten Bedingungen auszuwählen, haben die Menschen die tollsten Dinge erfunden, wie einen vollwertigen SQL-Parser oder ein Wörterbuch im Typensystem. Wir verwenden bedingte Typen als Werkzeug, um ein statisches Typsystem flexibler für dynamische Situationen zu machen.
In Kapitel 6, "String Template Literal Types", siehst du, wie TypeScript einen String-Parser in das Typsystem integriert. Das Extrahieren von Namen aus Formatstrings, das Definieren eines dynamischen Ereignissystems auf der Grundlage von String-Eingaben und das dynamische Erstellen von Bezeichnern: Nichts scheint unmöglich!
Einen kleinen Vorgeschmack auf die funktionale Programmierung bekommst du in Kapitel 7, "Variadic Tuple Types". Das Tupel hat in TypeScript eine besondere Bedeutung und hilft dabei, Funktionsparameter und objektähnliche Arrays zu beschreiben und flexible Hilfsfunktionen zu erstellen.
Noch mehr Metaprogrammierung gibt es in Kapitel 8, "Hilfstypen". TypeScript hat ein paar eingebaute Hilfstypen, die es dir erleichtern, Typen von anderen Typen abzuleiten. In diesem Kapitel lernst du nicht nur, wie du sie verwendest, sondern auch, wie du deine eigenen Typen erstellen kannst. Dieses Kapitel markiert auch den nächsten Haltepunkt im TypeScript Cookbook, denn an dieser Stelle hast du alle grundlegenden Bestandteile der Sprache und des Typensystems gelernt, die du dann im nächsten Teil anwenden kannst.
Nachdem du in acht Kapiteln die Feinheiten des Typensystems kennengelernt hast, ist es an der Zeit, dein Wissen in Kapitel 9, "Die Standardbibliothekund externe Typendefinitionen", mit den Typendefinitionen anderer zu verknüpfen . In diesem Kapitel lernst du Situationen kennen, die anders funktionieren als erwartet, und erfährst, wie du die eingebauten Typdefinitionen nach deinem Willen biegen kannst.
In Kapitel 10, "TypeScript und React", erfährst du, wie eines der beliebtesten JavaScript-Frameworks in TypeScript integriert ist, welche Funktionen die Syntaxerweiterung JSX möglich machen und wie diese in das Gesamtkonzept von TypeScript passt. Du lernst außerdem, wie du robuste Typen für Komponenten und Hooks schreibst und wie du mit einer Typdefinitionsdatei umgehst, die nachträglich an die eigentliche Bibliothek angehängt wurde.
Im nächsten Kapitel geht es um Klassen, ein Grundnahrungsmittel der objektorientierten Programmierung, das in TypeScript verfügbar war, lange bevor es sein Gegenstück in JavaScript gab. Dies führt zu einer interessanten Dualität von Funktionen, die in Kapitel 11, "Klassen", ausführlich behandelt werden .
Das Buch endet mit Kapitel 12, "Strategien der Typentwicklung". Hier konzentriere ich mich darauf, dir die Fähigkeiten zu vermitteln, fortgeschrittene Typen selbst zu erstellen, die richtigen Entscheidungen zu treffen, wie du dein Projekt vorantreibst, und mit Bibliotheken umzugehen, die Typen für dich validieren. Außerdem lernst du spezielle Workarounds und versteckte Funktionen kennen und erfährst, wie du Generics benennen kannst oder ob fortgeschrittene Typen ein bisschen zu viel sind. Dieses Kapitel macht besonders viel Spaß, denn nach einer langen Reise vom Neuling zum Lehrling erreichst du denExpertenstatus.
Alle Beispiele sind als TypeScript-Spielplatz oder CodeSandbox-Projekt auf der Website des Buches verfügbar. Vor allem die Playgrounds bieten einen Zwischenstand, so dass du selbst herumspielen und mit den Verhaltensweisen spielen kannst. Ich sage immer, dass man eine Programmiersprache nicht lernen kann, indem man nur über sie liest; man muss aktiv programmieren und sich die Hände schmutzig machen, um zu verstehen, wie alles zusammenspielt. Sieh dies als eine Einladung, Spaß mit Programmiersprachen zu haben.
In diesem Buch verwendete Konventionen
Programmierkonventionen
TypeScript ermöglicht viele Programmierstile und Formatierungsoptionen. Um das zu vermeiden, habe ich mich entschieden, alle Beispiele mit Prettier automatisch zu formatieren. Wenn du an einen anderen Formatierungsstil gewöhnt bist - vielleicht bevorzugst du Kommas statt Semikolons nach jeder Eigenschaftsdeklaration deiner Typen - kannst du gerne deine Vorliebe beibehalten.
DasTypeScript Cookbook enthält viele Beispiele und behandelt eine Menge Funktionen. Es gibt viele Möglichkeiten, Funktionen zu schreiben, und ich habe mich dafür entschieden, hauptsächlich Funktionsdeklarationen statt Funktionsausdrücke zu schreiben, außer wenn es wichtig war, die Unterschiede zwischen den beiden Notationen zu erklären. In allen anderen Fällen ist es eher eine Frage des Geschmacks als technischer Gründe.
Alle Beispiele wurden mit TypeScript 5.0 getestet, der aktuellsten Version zum Zeitpunkt der Erstellung dieses Buches. TypeScript ändert sich ständig und damit auch die Regeln. Dieses Buch stellt sicher, dass wir uns hauptsächlich auf Dinge konzentrieren, die langlebig sind und auf die man sich über Versionen hinweg verlassen kann. Wo ich eine Weiterentwicklung oder grundlegende Änderung erwarte, gebe ich entsprechende Warnungen und Hinweise.
Schriftsatz-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 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
Zusätzliches Material (Code-Beispiele, Übungen usw.) steht unter https://typescript-cookbook.com zum Download bereit .
Wenn du eine technische Frage oder ein Problem mit den Codebeispielen hast, sende bitte eine E-Mail an support@oreilly.com.
Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Wenn in diesem Buch Beispielcode angeboten wird, 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 einen großen Teil des Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eineGenehmigung erforderlich.
Wir schätzen die Namensnennung, verlangen sie aber nicht. Eine Quellenangabe umfasst normalerweise den Titel, den Autor, den Verlag und die ISBN. Zum Beispiel: "TypeScript Cookbook von Stefan Baumgartner (O'Reilly). Copyright 2023 Stefan Baumgartner, 978-1-098-13665-9."
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 .
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)
- support@oreilly.com
- https://www.oreilly.com/about/contact.html
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/typescript-cookbook aufrufen .
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://youtube.com/oreillymedia.
Danksagungen
Alexander Rosemann, Sebastian Gierlinger, Dominik Angerer und Georg Kothmeier sind die ersten, zu denen ich gehe, wenn ich etwas Neues koche. Unsere regelmäßigen Treffen und Interaktionen sind nicht nur unterhaltsam, sondern geben mir auch das nötige Feedback, um alle meine Entscheidungen zu bewerten. Sie sind die ersten, die von dem Buch gehört haben, und auch die ersten, die mir Feedback gegeben haben.
Der Austausch mit Matt Pocock, Joe Previte, Dan Vanderkam, Nathan Shively-Sanders und Josh Goldberg in den sozialen Medien brachte viele neue Ideen auf den Tisch. Ihre Herangehensweise an TypeScript mag sich von meiner unterscheiden, aber letztendlich haben sie meinen Horizont erweitert und dafür gesorgt, dass ich nicht zu eigensinnig wurde.
Phil Nash, Simona Cotin und Vanessa Böhner waren nicht nur frühe Rezensenten des endgültigen Manuskripts, sondern auch langjährige Wegbegleiter und Freunde, die immer da sind, um meine Ideen auf ihre Richtigkeit zu überprüfen. Addy Osmani hat mich während meiner gesamten Karriere inspiriert und ich bin sehr stolz darauf, dass er sich bereit erklärt hat, mein neues Buch zu eröffnen.
Lena Matscheko, Alexandra Rapeanu und Mike Kuss zögerten nicht, mich mit technischen Herausforderungen und Fragen zu bombardieren, die auf ihren Erfahrungen aus der Praxis beruhten. Wo mir ein gutes Beispiel fehlte, überschwemmten sie mich mit hervorragendem Quellenmaterial, das ich destillieren konnte.
Ich würde den Überblick über alle TypeScript-Entwicklungen verlieren, wenn es nicht Peter Kröner gäbe, der ständig an meine Tür klopft, wenn eine neue TypeScript-Version herauskommt. Unsere gemeinsamen Podcast-Episoden über TypeScript-Veröffentlichungen sind legendär, und es geht auch immer weniger um TypeScript.
Meine technischen Redakteure Mark Halpin, Fabian Friedl und Bernhard Mayr gaben mir das beste technische Feedback, das ich mir wünschen konnte. Sie hinterfragten jede Annahme, prüften jedes Codebeispiel und stellten sicher, dass meine Argumentation Sinn machte und ich nichts übersehen hatte. Ihre Liebe zum Detail und ihre Fähigkeit, auf einem so hohen Niveau zu diskutieren, haben dafür gesorgt, dass dieses Buch nicht nur eine weitere Sammlung von Hot Takes ist, sondern ein Leitfaden und ein Nachschlagewerk, das auf einem soliden Fundament steht.
Dieses Buch würde es ohne Amanda Quinn nicht geben. Nachdem ich im Jahr 2020 TypeScript in 50 Lektionen geschrieben hatte, dachte ich, ich hätte alles gesagt, was ich über TypeScript sagen musste. Es war Amanda, die mich dazu brachte, die Idee eines Kochbuchs auszuprobieren, um zu sehen, welche Ideen ich finden würde, die es nicht in mein erstes Buch schaffen würden. Nach drei Stunden hatte ich einen kompletten Vorschlag und ein Inhaltsverzeichnis mit mehr als hundert Einträgen. Amanda hatte Recht: Ich hatte noch so viel mehr zu sagen, und ich bin ihr unendlich dankbar für ihreUnterstützung und ihre Anleitung.
Während Amanda in der Anfangsphase half, sorgte Shira Evans dafür, dass das Projekt gut vorankam und nicht entgleiste. Ihr Feedback war von unschätzbarem Wert, und ihre pragmatische und praktische Herangehensweise machte die Zusammenarbeit zu einem Vergnügen.
Elizabeth Faerm und Theresa Jones haben sich um die Produktion gekümmert. Ihr Auge für Details ist hervorragend und sie haben dafür gesorgt, dass die Produktionsphase aufregend ist und tatsächlich eine Menge Spaß macht! Das Endergebnis ist ein wunderschönes Erlebnis, von dem ich nicht genug bekommen kann.
Beim Schreiben hatte ich große Unterstützung von Porcupine Tree, Beck, Nobuo Uematsu, Camel, The Beta Band und vielen anderen.
Der größte Beitrag zu diesem Buch kommt von meiner Familie. Doris, Clemens und Aaron sind alles, was ich mir je gewünscht habe, und ohne ihre unendliche Liebe und Unterstützung wäre ich nicht in der Lage, meine Ambitionen zu verfolgen. Ich danke euch für alles.
Get TypeScript Kochbuch 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.