Benötigt Ihr Team einen Dateningenieur?

Bild


Wir finden oft coole englischsprachige Artikel, die unserem Team nützlich erscheinen, und haben beschlossen, dass es schön wäre, ihre Übersetzung mit den Lesern von Habra zu teilen. Heute haben wir eine Übersetzung eines Artikels von Tristan Handy, dem Gründer von Fishtown Analytics, vorbereitet.


Die Rolle eines Dateningenieurs in modernen Startups ändert sich rasant. Sind Sie sicher, dass Sie gut verstehen, wann und warum Ihr Team einen solchen Spezialisten benötigt?


Ich kommuniziere oft mit führenden Vertretern der Analytikwelt und stelle fest, dass ihr Verständnis der Rolle eines Dateningenieurs in einem Team nicht stimmt. Dies kann zu Schwierigkeiten für das gesamte Datenanalyseteam führen, und ich möchte, dass Unternehmen lernen, wie solche Probleme vermieden werden können.


In diesem Artikel möchte ich meine Ideen darüber teilen, wann, wie und warum es sich lohnt, einen Dateningenieur einzustellen. Meine Überlegungen basieren auf meiner Erfahrung bei Fishtown Analytics , wo ich mit mehr als hundert Startups mit Risikokapitalunterstützung zusammengearbeitet und ihnen beim Aufbau von Datenanalyse- und -verarbeitungsteams sowie auf dem Wissen geholfen habe, das ich durch die Kommunikation mit Vertretern verschiedener Datenverarbeitungsunternehmen gewonnen habe.


Wenn Sie ein Team von Datenexperten leiten, ist dieser Beitrag für Sie.


Die Rolle eines Dateningenieurs ändert sich


Moderne Software ermöglicht es, langweiligere Arbeiten im Zusammenhang mit der Datenanalyse und -verarbeitung zu automatisieren.


Im Jahr 2012 musste mindestens ein Dateningenieur den gesamten Datensatz in einem von einem Venture finanzierten Startup analysieren. Ein solcher Spezialist musste Daten aus verschiedenen Systemen extrahieren, damit Analysten und Unternehmenskunden weiter mit ihnen arbeiten konnten. Oft war es notwendig, die Daten irgendwie zu transformieren, damit sie leichter zu analysieren waren. Ohne einen Dateningenieur hätten Datenanalyse- und -verarbeitungsspezialisten einfach nicht die Daten, mit denen sie arbeiten könnten, so oft begann sich das Team mit dem Dateningenieur zu bilden.


Bis 2019 kann das meiste davon mit vorgefertigten Lösungen erledigt werden. In den meisten Fällen können Sie und ein Analystenteam selbst eine Datenverarbeitungspipeline erstellen, ohne die Hilfe einer Person mit umfassender Erfahrung in der Datenwissenschaft. Und diese Pipeline wird überhaupt nicht schlecht sein - moderne vorgefertigte Werkzeuge sind perfekt, um solche Probleme zu lösen.


Analysten und Datenwissenschaftler hatten kürzlich die Möglichkeit, Pipelines selbst zu bauen - erst vor 2-3 Jahren. Dies geschah hauptsächlich aufgrund von drei Produkten: Stitch , Fivetran und dbt (es ist erwähnenswert, dass dbt ein Produkt meiner Firma Fishtown Analytics ist). Sie wurden fast unmittelbar nach Amazon Redshift veröffentlicht, als Startup-Analystenteams erkannten, dass sie Data Warehouses erstellen mussten. Es dauerte noch einige Jahre, bis diese Produkte von hoher Qualität waren - 2016 waren wir noch Pioniere.


Jetzt ist eine mit Stitch, Fivetran oder dbt gebaute Pipeline viel zuverlässiger als eine speziell mit Airflow entwickelte Pipeline. Ich weiß das nicht aus der Theorie, sondern aus eigener Erfahrung. Ich sage nicht, dass es unmöglich ist, mit Airflow eine zuverlässige Infrastruktur aufzubauen. Die meisten Startups tun dies einfach nicht. In Fishtown Analytics haben wir mit mehr als hundert Analyseteams in verschiedenen Startups zusammengearbeitet, und dieses Szenario wurde viele Male wiederholt. Wir helfen Menschen ständig dabei, von ihren eigenen Pipelines auf schlüsselfertige Lösungen umzusteigen, und jedes Mal ist der Effekt positiv.


Data Engineer sollte keine ETL schreiben


Im Jahr 2016 schrieb Jeff Magnusson einen grundlegenden Beitrag: Dateningenieure sollten keine ETL schreiben . Dies war der erste Beitrag in meiner Erinnerung, der eine solche Änderung forderte. Hier ist mein Lieblingsteil von dort:


* „In den letzten 5 Jahren haben sich Datenverarbeitungstools und -technologien weiterentwickelt. Die meisten Technologien haben sich bereits so weit entwickelt, dass sie sich an Ihre Bedürfnisse anpassen können, es sei denn, Sie müssen natürlich Petabytes an Daten oder Milliarden von Ereignissen pro Tag verarbeiten.


Wenn Sie nicht über die Fähigkeiten dieser Technologien hinausgehen müssen, benötigen Sie höchstwahrscheinlich kein Team hochspezialisierter Programmierer, um zusätzliche Lösungen zu entwickeln.


Wenn Sie es schaffen, sie einzustellen, werden sie sich bald langweilen. Wenn sie sich langweilen, verlassen sie Sie auf Google, Facebook, LinkedIn, Twitter - den Orten, an denen ihre Erfahrung wirklich notwendig ist. Wenn sie sich nicht langweilen, sind sie höchstwahrscheinlich eher mittelmäßig. Und mittelmäßigen Programmierern ist es wirklich gelungen, eine große Menge komplizierter, für normale Arbeit ungeeigneter Unsinn aufzubauen, die sie als „Lösungen“ bezeichnen. “*


Ich mag dieses Zitat wirklich, weil es nicht nur betont, dass Sie heute keine Dateningenieure benötigen, um die meisten ETL-Probleme zu lösen, sondern auch erklärt, warum Sie sie besser nicht bitten sollten, diese Probleme überhaupt zu lösen .


Wenn Sie Dateningenieure einstellen und sie bitten, eine Pipeline zu erstellen, denken sie, dass ihre Aufgabe darin besteht, eine Pipeline zu erstellen. Dies bedeutet, dass Tools wie Stitch, Fivetran und dbt eine Bedrohung für sie darstellen und keine starke Kraftquelle darstellen. Sie werden Gründe finden, warum die fertigen Pipelines nicht Ihren individuellen Datenanforderungen entsprechen und warum Analysten nicht unabhängig an der Datenkonvertierung teilnehmen sollten. Sie schreiben Code, der zerbrechlich, schwer zu warten und ineffizient ist. Und Sie werden sich auf diesen Code verlassen, weil er allem zugrunde liegt, was Ihr Team sonst noch tut.


Lauf weg von Spezialisten wie der Pest. Die Wachstumsrate in Ihrem Analystenteam wird stark sinken, und Sie werden Ihre ganze Zeit mit der Lösung von Infrastrukturproblemen verbringen. Dies ist keineswegs das, was Ihrem Unternehmen Einnahmen bringt.


Wenn nicht ETL, was dann?


Braucht Ihr Team wirklich einen Dateningenieur? Ja


Selbst mit neuen Tools, mit denen Datenanalysten und Data Science-Experten Pipelines selbst erstellen können, sind Dateningenieure immer noch ein wichtiger Bestandteil jedes professionellen Datenteams. Die Aufgaben, an denen sie arbeiten sollten, haben sich jedoch geändert, und die Reihenfolge, in der es sich lohnt, Mitarbeiter für die Arbeit mit Daten einzustellen. Im Folgenden werde ich darüber sprechen, wann dies zu tun ist, und jetzt wollen wir darüber sprechen, wofür Dateningenieure in modernen Startups verantwortlich sind.


Dateningenieure sind nach wie vor ein wichtiger Bestandteil jedes professionellen Datenteams.


Ihre Dateningenieure sollten keine Pipelines erstellen, für die es bereits vorgefertigte Lösungen gibt, und keine SQL-Datentransformationen schreiben. Hier ist, worauf sie sich konzentrieren sollten:


  • Organisation und Optimierung der zugrunde liegenden Dateninfrastruktur,
  • Bau und Unterstützung von kundenspezifischen Pipelines,
  • Unterstützung eines Teams von Datenspezialisten durch Verbesserung des Designs und der Leistung von Pipelines und Abfragen;
  • Erstellen von Nicht-SQL-Datentransformationen.

Organisation und Optimierung der zugrunde liegenden Dateninfrastruktur


Obwohl Dateningenieure in Startups keine Hadoop-Cluster mehr verwalten oder Geräte für Vertica konfigurieren müssen, sind in diesem Bereich noch Arbeiten erforderlich. Nachdem Sie sichergestellt haben, dass Ihre Technologie zum Sammeln, Übertragen und Verarbeiten von Daten ihren Höhepunkt erreicht, können Sie die Leistung, die Kosten oder beides erheblich verbessern. Dies beinhaltet normalerweise die folgenden Aufgaben:


  • Schaffung einer Überwachungsinfrastruktur zur Verfolgung des Status von Pipelines,
  • Überwachung aller Aufgaben, die sich auf die Clusterleistung auswirken,
  • regelmäßige Wartung
  • Optimieren von Tabellenschemata (Partitionierung, Komprimierung, Verteilung) zur Minimierung von Kosten und Steigerung der Produktivität
  • Entwicklung einer benutzerdefinierten Dateninfrastruktur, wenn keine vorgefertigten Lösungen vorhanden sind.

Diese Aufgaben werden in den frühen Entwicklungsphasen häufig übersehen, werden jedoch mit dem Wachstum des Teams und der Datenmenge kritisch. In einem Projekt konnten wir die Kosten für die Erstellung einer Tabelle in BigQuery schrittweise von 500 USD auf 1 USD pro Tag senken, indem wir die Tabellenpartitionen optimierten. Das ist wirklich wichtig.


Uber ist ein gutes Beispiel für ein erfolgreiches Unternehmen. Die Datenverarbeitungsspezialisten von Uber haben ein Tool namens Queryparser entwickelt, das automatisch alle Anforderungen an ihre Dateninfrastruktur verfolgt und Statistiken über die verwendeten Ressourcen und Nutzungsmuster sammelt. Uber Data-Ingenieure können Metadaten verwenden, um die Infrastruktur anzupassen.


Dateningenieure sind häufig auch für den Aufbau und die Wartung der CI / CD-Pipeline verantwortlich, die die Dateninfrastruktur verwaltet. Im Jahr 2012 hatten viele Unternehmen eine sehr schwache Infrastruktur für Versionskontrolle, -verwaltung und -tests, aber jetzt ändert sich alles, und genau dahinter stehen Dateningenieure.


Schließlich beteiligen sich Dateningenieure in führenden Unternehmen häufig an der Erstellung von Tools, die nicht vorgefertigt vorhanden sind. Zum Beispiel haben Airbnb-Ingenieure Airflow erstellt, weil sie keine Möglichkeit hatten, Datenverarbeitungs-Digraphen effizient zu generieren . Die Ingenieure von Netflix sind für die Erstellung und Wartung einer hoch entwickelten Infrastruktur für die Entwicklung und den Betrieb von Zehntausenden von Jupyter-Notebooks verantwortlich .


Sie können nur den größten Teil Ihrer Basisinfrastruktur kaufen, aber jemand sollte sie trotzdem warten. Und wenn Sie ein wirklich fortschrittliches Unternehmen sind, möchten Sie wahrscheinlich die Funktionen vorhandener Tools erweitern. Dateningenieure können bei beiden helfen.


Aufbau und Wartung von benutzerdefinierten Pipelines


Obwohl Dateningenieure keine Daten mehr manuell an Postgres oder Salesforce übertragen müssen, haben Anbieter „nur“ etwa 100 Integrationsoptionen. Die meisten unserer Kunden können sofort 75 bis 90% der Datenquellen erreichen, mit denen sie arbeiten.


In der Praxis erfolgt die Integration durch Wellen. In der Regel umfasst die erste Phase die Hauptanwendungsdatenbank und die Ereignisverfolgung, und die zweite Phase umfasst Marketing-Systeme wie ESP und Werbeplattformen. Bereits heute stehen schlüsselfertige Lösungen für beide Phasen zum Verkauf. Wenn Sie sich eingehender mit der Arbeit mit Daten von SaaS-Anbietern in Ihrem Fachgebiet befassen, benötigen Sie Dateningenieure, um diese Nischen-Datenverarbeitungs-Pipelines zu erstellen und zu warten.


Beispielsweise interagieren Unternehmen, die über das Internet im Vertrieb tätig sind, mit einer Vielzahl verschiedener Produkte in den Bereichen ERP, Logistik und Lieferung. Viele dieser Produkte sind sehr spezifisch und fast keines von ihnen ist im Handel erhältlich. Erwarten Sie von Ihren Dateningenieuren, dass sie in absehbarer Zeit ähnliche Produkte entwickeln werden.


Der Aufbau und die Wartung zuverlässiger Datenverarbeitungs-Pipelines ist eine schwierige Aufgabe. Wenn Sie sich entscheiden, Ihre Ressourcen in ihre Erstellung zu investieren, müssen Sie darauf vorbereitet sein, dass mehr Mittel als ursprünglich im Budget vorgesehen erforderlich sind und die Wartung auch mehr Aufwand erfordert als geplant. Die erste Version der Pipeline kann einfach erstellt werden, es ist jedoch schwierig, die Konsistenz der Daten in Ihrem Speicher aufrechtzuerhalten. Verpflichten Sie sich nicht, Ihre eigene Datenverarbeitungs-Pipeline zu warten, bis Sie sicher sind, dass Ihr Unternehmen funktioniert. Nehmen Sie sich einmal die Zeit, um es zuverlässig zu machen. Denken Sie an Singer, das Open-Source-Framework der Entwickler von Stitch. Wir haben damit etwa 20 Integrationen erstellt.


Unterstützung eines Teams von Datenspezialisten durch Verbesserung des Designs und der Leistung von Pipelines und Abfragen


Eine der Änderungen, die wir in den letzten fünf Jahren im Bereich Data Engineering gesehen haben, ist das Aufkommen von ELT - einer neuen Version von ETL, die Daten nach dem Laden in den Speicher und nicht vorher konvertiert. Das Wesen und die Ursachen einer solchen Änderung sind bereits in anderen Quellen ausführlich behandelt. Ich möchte betonen, dass diese Verschiebung einen großen Einfluss darauf hat, wer diese Pipelines baut.


Wenn Sie Code auf Scalding schreiben, um Terabyte an Ereignisdaten in S3 zu scannen und dann auf Vertica hochzuladen, benötigen Sie wahrscheinlich einen Dateningenieur. Wenn sich Ihre Ereignisdaten (aus Google Analytics 360 exportiert) bereits in BigQuery befinden, sind sie in einer leistungsstarken, skalierbaren Umgebung bereits vollständig verfügbar. Der Unterschied besteht darin, dass diese Umgebung SQL spricht. Dies bedeutet, dass Analysten jetzt ihre eigenen Datentransformations-Pipelines erstellen können.


Dieser Trend entwickelte sich 2014, als Looker das PDT-Tool veröffentlichte . Der Trend verstärkte sich, als ganze Teams von Datenexperten in den letzten zwei Jahren damit begannen, Datenverarbeitungs-Digraphen aus mehr als 500 Knoten zu erstellen und große Datenmengen mit dbt zu verarbeiten. Zu diesem Zeitpunkt ist das Modell tief in modernen Teams verwurzelt und hat den Analysten so viel Unabhängigkeit wie nie zuvor gegeben.


Durch den Wechsel zu ELT müssen Dateningenieure die meisten Datenkonvertierungsaufgaben nicht mehr ausführen . Dies bedeutet auch, dass Teams ohne Ingenieure mit Datentransformationstools für Analysten einen langen Weg gehen können. Dateningenieure spielen jedoch weiterhin eine wichtige Rolle beim Aufbau von Datenkonvertierungspipelines. Es gibt zwei Situationen, in denen ihre Teilnahme äußerst wichtig ist:


1. Wenn Sie die Produktivität steigern müssen


Manchmal erfordert die Logik eines Geschäftsprozesses eine besonders komplexe Transformation, und es ist nützlich, einen Dateningenieur hinzuzuziehen, um zu bewerten, wie sich ein bestimmter Ansatz zum Erstellen einer Tabelle auf die Leistung auswirkt. Viele Analysten haben nicht viel Erfahrung mit der Optimierung der Leistung in analytischen Data Warehouses. Dies ist ein hervorragender Grund, mit einem engeren Spezialisten zusammenzuarbeiten.


2. Wenn der Code zu kompliziert wird


Analysten sind sehr gut darin, geschäftliche Probleme mithilfe von Daten zu lösen, denken jedoch häufig nicht darüber nach, wie erweiterbarer Code geschrieben werden soll. Auf den ersten Blick ist es einfach, Tabellen in der Datenbank zu erstellen, aber alles kann schnell außer Kontrolle geraten. Wenden Sie sich an einen Dateningenieur, der über die allgemeine Architektur Ihres Speichers nachdenken und besonders komplexe Transformationen entwickeln kann. Andernfalls besteht die Gefahr, dass Sie mit einem Gewirr allein gelassen werden, das sich kaum auflösen lässt.


Erstellen von Nicht-SQL-Datentransformationen


SQL kann anfänglich die meisten Datenkonvertierungsanforderungen erfüllen, kann jedoch nicht alle Probleme lösen. Beispielsweise ist es häufig erforderlich, Geodaten zur Datenbank hinzuzufügen, indem Breiten- und Längengrade verwendet und mit einer bestimmten Region verknüpft werden. Viele moderne analytische Repositorys können ein solches Problem noch nicht lösen (obwohl sich dies allmählich ändert! ). Die beste Lösung wäre daher, in Python eine Pipline zu erstellen, die die Daten in Ihrem Repository mit Informationen über die Region ergänzt.


Ein weiterer offensichtlicher Anwendungsfall für Python (oder andere Sprachen als SQL) ist das maschinelle Lernen. Wenn Sie personalisierte Produktempfehlungen, ein Bedarfsprognosemodell oder einen Abflussprognosealgorithmus haben, der Daten aus Ihrem Speicher entnimmt und die Gewichte anordnet, können Sie diese als Endknoten Ihres SQL-Datenverarbeitungs-Digraphen hinzufügen.


Die meisten modernen Unternehmen, die solche Probleme mit Nicht-SQL lösen, verwenden Airflow. dbt wird für den SQL-basierten Teil des Datendigraphen verwendet, und Nicht-SQL-Knoten werden als Blätter hinzugefügt. Dieser Ansatz nutzt das Beste aus beiden Ansätzen: Datenanalysten können weiterhin hauptsächlich für SQL-basierte Konvertierungen verantwortlich sein, und Dateningenieure können für ML-Code für den industriellen Einsatz verantwortlich sein.


Wann braucht Ihr Team einen Dateningenieur?


Das Ändern der Rolle eines Dateningenieurs erfordert auch ein Überdenken der Reihenfolge der Einstellung von Mitarbeitern. Früher wurde angenommen, dass Sie in erster Linie Dateningenieure benötigen, da Analysten und Data Science-Spezialisten ohne eine vorgefertigte Datenverarbeitungs- und Analyseplattform nichts zu tun haben. Heute können Datenanalyse- und -verarbeitungsspezialisten unabhängig voneinander arbeiten und die erste Version der Dateninfrastruktur mit vorgefertigten Tools erstellen. Denken Sie daran, einen Dateningenieur einzustellen, wenn Ihr Startup eines der vier Skalenzeichen aufweist:


  1. Es gibt 3 Data Science Analysten / Spezialisten in Ihrem Team.
  2. Ihre BI-Plattform hat 50 aktive Benutzer.
  3. Die größte Tabelle in Ihrem Speicher erreicht 1 Milliarde Zeilen.
  4. Sie wissen, dass Sie in den nächsten Quartalen drei oder mehr benutzerdefinierte Datenverarbeitungs-Pipelines erstellen müssen, und alle sind von entscheidender Bedeutung.

Wenn Sie noch nicht auf eine dieser Situationen gestoßen sind, kann Ihr Team von Datenexperten wahrscheinlich selbstständig arbeiten und vorgefertigte Technologien, Unterstützung durch externe Berater und den Rat von Kollegen verwenden (z. B. in den Gemeinden Local Optimistic oder dbt in Slack).


Das Wichtigste ist, dass ein Dateningenieur für sich genommen keinen Wert für das Unternehmen hat. Seine Hauptaufgabe besteht darin, die Produktivität Ihrer Analysten zu steigern. Ihr Team von Datenexperten interagiert mit Stakeholdern, misst KPIs und erstellt Berichte und Modelle - diese helfen Ihrem Unternehmen jeden Tag dabei, sich in die richtige Richtung zu bewegen. Stellen Sie einen Dateningenieur ein, um ein bestehendes großes Team zu stärken: Wenn nach der Einstellung eines Dateningenieurs die Effizienz Ihrer vier Analysten um 33% gestiegen ist, war dies höchstwahrscheinlich eine gute Lösung.


Datenverarbeitungsingenieure profitieren vom Geschäft, indem sie Ihren Analysten und Datenwissenschaftlern helfen, produktiver zu werden.


Wenn Sie sich entscheiden, Ihr Team von Datenspezialisten zu erweitern, liegt das beste Verhältnis meiner Meinung nach bei etwa 5 zu 1: fünf Data Science-Analysten / Spezialisten pro Dateningenieur. Wenn Sie mit besonders großen oder ungewöhnlichen Datensätzen arbeiten, kann sich dieses Verhältnis ändern. Dies ist jedoch eine gute Anleitung.


Wer ist es wert, eingestellt zu werden?


Wenn sich die Rolle des Dateningenieurs ändert, ändern sich auch die Anforderungen an den idealen Kandidaten. Mein lieber Kollege Michael Kaminsky hat dies in unserer Korrespondenz zu diesem Thema sehr gut gesagt, deshalb werde ich ihn hier zitieren:


„Ich denke an all diese Änderungen, vor allem an die Rolle eines Dateningenieurs im Team. Vom Erfinder der Infrastruktur wurde er zu einem unterstützenden Bindeglied für eine größere Gruppe von Spezialisten. Dies ist eine bedeutende Änderung, und einige Dateningenieure (die sich auf den Aufbau der Infrastruktur konzentrieren möchten) sind darüber nicht immer erfreut.
Ich denke, das Wichtigste für Startups ist, einen Dateningenieur einzustellen, der voller Energie ist und Tools für ein Team von Data Science-Analysten / -Spezialisten erstellen möchte. Wenn Sie einen Dateningenieur einstellen, der sich nur mit dem Backend befassen möchte und es hasst, mit Leuten zu arbeiten, die weniger technische Fähigkeiten haben, wird dies wahrscheinlich schlecht enden. Ich suche Dateningenieure, die gerne mit Analysten und Forschern zusammenarbeiten und bereit sind zu sagen: "Was Sie tun, scheint mir völlig ineffektiv zu sein, und ich möchte einen Unterschied zum Besseren machen."


Ich stimme Michael vollkommen zu. Jetzt sind die besten Dateningenieure in Startups die Unterstützung und Unterstützung des Teams. Sie beteiligen sich an fast allem, was das Datenteam tut. Sie sollten Teamwork mögen und motiviert sein, als Team erfolgreich zu sein.


Wenn Sie an diesen Ort kommen, danke fürs Lesen :) Dieses Thema macht mir wirklich große Sorgen. Bitte schreiben Sie einen Kommentar, wenn Sie der Meinung sind, dass ich völlig falsch liege. Ich bin interessiert an Ihren Erfahrungen mit Dateningenieuren in Ihrem Team.


Wenn Sie sich jetzt entscheiden, einen Dateningenieur einzustellen, führt mein Unternehmen zahlreiche Interviews mit solchen Spezialisten. Wir sind der Meinung, dass dies ein guter Weg ist, um in der Branche auf dem Laufenden zu bleiben. Wenn Sie den letzten Leistungstest eines neuen potenziellen Teammitglieds arrangieren möchten, bevor Sie ein Angebot abgeben, führen wir gerne ein abschließendes Interview mit Ihren Kandidaten. Schreiben Sie uns einfach!


Kommentar von Gleb Sologub, Director of Analytics bei Skyeng :

Wir bei Skyeng haben jetzt mehr als 30 Full-Stack-Analysten und es gibt noch keine Dateningenieure. Dies wird ermöglicht, weil unsere gesamte Dateninfrastruktur auf den Cloud-Diensten basiert, von denen Tristan spricht. Wir verwenden Amazon Redshift als analytisches Repository, Stitch und Matillion ETL zum Sammeln von Daten aus über 40 Produktionsdatenbanken, Segment zum Sammeln von Ereignissen, Redash und Tableau für Berichte und Dashboards, Amazon SageMaker für ML.

— - . , MVP- , , . , , , Tableau .

, , , - . , , : , .

- -, , , , . 90% , . , Skyeng.

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


All Articles