7 Möglichkeiten, in diesem Sommer besser in C++ zu werden

7 Möglichkeiten, in diesem Sommer besser in C++ zu werden

Der Sommer kommt.

Mit ihm kommt das Meer, die Sonne, der Strand oder der Berg oder vielleicht Ihr Familienhaus. Aber es gibt auch eine tolle Sache, die der Sommer mit sich bringt: mehr Zeit . Vielleicht nehmen Sie sich eine Auszeit, vielleicht liegt es aber auch daran, dass die Arbeit in dieser Zeit weniger intensiv ist. In allen Fällen ist der Sommer eine begrenzte Zeit, in der die Zeit weniger knapp ist als im Rest des Jahres.

Sie haben zwei Möglichkeiten:1) Verbringen Sie die ganze Zeit mit Chillen. Und es ist in Ordnung, eine gute Zeit zu haben. 2) Oder Sie könnten einen Teil davon investieren, um Ihre Fähigkeiten zu verbessern, insbesondere in C++, und nächstes Jahr mit einem Schub beginnen (Wortspiel sehr beabsichtigt).

Wenn Sie der Meinung sind, dass Option 1) besser für Sie ist, dann schalten Sie einfach das Telefon oder den Laptop aus und ruhen Sie sich aus! Aber wenn Sie Option 2) bevorzugen, dann ist dieser Beitrag wie für Sie gemacht.

Hier sind 7 Ideen, mit denen Sie Ihre Sommerzeit nutzen können, um einen echten Schub in C++ zu erzielen. Und danach gebe ich Ihnen ein paar Tipps, die Ihnen helfen, tatsächlich zu erreichen die von Ihnen gewählten Ziele.

1) Nehmen Sie ein Projekt auf

Das Erstellen Ihres eigenen kleinen Projekts in C++ ist eine großartige Möglichkeit zum Experimentieren und wirklich verstehen, wie die Dinge funktionieren. Es hat auch den Vorteil, dass Sie völlig frei sind, welche Komponenten Sie verwenden. Auf diese Weise können Sie Sprachfunktionen und Bibliothekskomponenten verbessern, auf die Sie im Laufe des Jahres keinen Zugriff/keine Zeit haben.

Während meines Sommerprojekts im letzten Jahr habe ich einige Reichweitenadapter implementiert. Und ich habe dadurch verdammt viel gelernt. Aus diesem Grund werde ich Ihnen dieses Projekt im Detail erläutern, damit Sie sich inspirieren lassen können, Ihr eigenes zu bauen:

  • Wenn Sie mit Ranges in C++ nicht vertraut sind, lesen Sie Ranges:the STL to the Next Level
  • Implementieren Sie einen transform_iterator,
  • Implementieren Sie einen Transformationsbereichsadapter
  • Implementieren Sie einen filter_iterator,
  • Implementieren Sie einen Filterbereichsadapter
  • Implementieren Sie einen ZIP-Adapter, der 2 Bereiche verwendet und eine Ansicht von Objektpaaren aus diesen 2 Bereichen zurückgibt, und verwenden Sie ihn dann mit dem Transformationsbereichsadapter
  • Verallgemeinern Sie den Zip-Adapter, indem Sie ihn beliebig viele Bereiche annehmen lassen
  • Implementieren Sie einen kartesischen Produktbereichsadapter
  • Implementieren Sie Ihren eigenen neuen Reichweitenadapter!

Es muss nicht perfekt oder vollständig sein oder diesen Richtlinien folgen. Es geht darum, dass Sie experimentieren . Die obigen Aufgaben geben Ihnen jedoch Folgendes:

  • ein solides Verständnis von Ranges, die jetzt ein sehr beliebtes Feature in C++ sind,
  • eine bewährte Methode mit verschiedenen Vorlagen,
  • ein Hauch von Template-Metaprogrammierung,

und das alles ganz allmählich.

Natürlich bin ich hier, wenn ich Ihnen bei einem solchen Projekt irgendwie helfen kann. Wenn es nützlich sein kann, hier ist das GitHub-Repository für meinen Versuch vom letzten Jahr an diesem Sommerprojekt.

2) Lies ein gutes Buch

Ich werde einen Post veröffentlichen, der C++-Büchern gewidmet ist, aber ich gebe Ihnen jetzt eine Auswahl. Meiner Meinung nach ist Code Complete von Steve McConnell das Buch Nr. 1, das man als Softwareentwickler lesen sollte. Obwohl es sich nicht speziell auf C++ konzentriert, lehrt Sie dieses Buch so ziemlich alle Aspekte des Schreibens von gutem Code. Vom Schreiben eines if (ja, es gibt Möglichkeiten, ein if zu vermasseln) über die Verteilung von Klassenverantwortlichkeiten bis hin zur Durchführung einer Codeüberprüfung deckt Code Complete alle Aspekte der Softwarekonstruktion ab. Nach der Lektüre dieses Buches werden Sie nie wieder auf die gleiche Weise programmieren.

Und wenn Sie es noch nicht gelesen haben, müssen Sie „Effective C++“ von Scott Meyers lesen. Ich schlage vor, es zweimal zu lesen . Ich habe es dreimal gelesen, aber ich denke, zweimal ist genauso gut. Und selbst wenn es vor C++11 geschrieben wurde, sind so ziemlich alle davon noch heute relevante Informationen. Es wurde kürzlich durch Effective Modern C++ ergänzt, um die Funktionen von C++11 und C++14 abzudecken.

Mein Sommerbuch in diesem Jahr wird das beliebte Domain Driven Design von Eric Evans sein. Im Wesentlichen besteht Domain Driven Design darin, einen intensiven Austausch zwischen Domänenexperten und Entwicklern zu führen, ein Modell der Domäne zu erstellen und die gleiche Sprache zu verwenden in Diskussionen, im Modell und im Code.

Obwohl das Buch wertvolle Inhalte hat, ist es keine leichte Lektüre. Ein Tipp, den ich nützlich fand, ist folgender:Lesen Sie für jeden Unterabschnitt den ersten Absatz, dann den letzten Absatz und lesen Sie dann den Rest des Unterabschnitts . Dadurch können Sie viel besser verstehen, wohin der Autor geht, und viel Zeit sparen.

Ich hoffe, Erkenntnisse darüber zu gewinnen, wie man Code ausdrucksstark macht, indem man die Domäne darin anzeigt. Natürlich werde ich sie im Blog mit euch teilen.

Dies ist nur eine Auswahl, und ich werde eine ausführlichere Liste von Büchern in einem eigenen Beitrag erstellen.

3) Lerne eine neue Sprache

So seltsam es auch scheinen mag, das Erlernen einer neuen Sprache ist eine der effizientesten Methoden, um ein tiefgreifendes Verständnis Ihrer Hauptsprache zu erlangen. Und je mehr sich die neue Sprache von Ihrer eigenen unterscheidet, desto besser.

Dies ergibt sich aus der neuen Sichtweise, die die zusätzliche Sprache zu Ihrem allgemeinen Verständnis der Programmierung bringt. Diese andere Art, Probleme zu lösen, bringt die Besonderheiten Ihrer Hauptsprache zum Vorschein, an die Sie sich so gewöhnt haben, dass Sie sie nicht mehr sehen. Und selbst wenn Sie diese neue Sprache nicht im Produktionscode verwenden, bieten Ihnen die neuen Konzepte Ideen, die Sie in Ihre Hauptsprache übertragen können.

Eine Sprache, die ich empfehle, sich mit C++ zu beschäftigen, ist Haskell. Haskell ist eine funktionale Programmierung Sprache. Wenn Sie noch nicht mit funktionaler Programmierung experimentiert haben, wird es Sie mit seinen Konzepten aufklären und Ihnen C++ mit einer neuen Sichtweise zeigen, insbesondere die STL.

Ich habe viel Zeit damit verbracht, Online-Ressourcen zu vergleichen, um Haskell zu lernen, und die beste, die ich gefunden habe, ist der Kurs der University of Pennsylvania von 2013 (in diesem bestimmten Jahr). Es ist gut erklärt, ohne zu viel Theorie und die Übungen sind schön und lehrreich. Und es ist kostenlos.

Und wenn Sie diesen Kurs abgeschlossen haben, können Sie mit Haskell im data61-Kurs viel Gymnastik machen, der aus Code besteht, in dem Sie die Lücken füllen müssen. Es ist eine gute Übung, sich mit ungewöhnlichen funktionalen Programmierkonzepten vertraut zu machen.

Wenn Sie mehr über funktionale Programmiersprachen und ihre Anwendungen in C++ erfahren möchten, empfehle ich Quentin Duvals Blog deque.blog.

Die Sprache, die ich diesen Sommer nehme, ist Lisp . Ich verstehe, dass es eine sehr mächtige Sprache ist, die das Verständnis der Programmierung im Allgemeinen verbessert. Mehrere Sprachen sind davon abgeleitet. Und es muss einen Grund geben, warum es nicht stirbt!

Ich bin mit der Recherche von Online-Ressourcen noch nicht ganz fertig, aber ich überlege, mich für das SICP-Buch zu entscheiden. Wenn Sie wissen, wie man Lisp lernt, lassen Sie es mich bitte wissen!

4) Aufstieg in der STL

Die STL ist der Teil der Sprache, der sich mit Containern und Algorithmen befasst. Es ist sehr mächtig, aber nicht so bekannt, wie es sein sollte, obwohl es an sich nicht schwierig ist. Es ist zwar eine Menge Wissen erforderlich, um es zu meistern, aber das Spiel ist es wert. Es ist eine fantastische Möglichkeit, Ihren C++-Code ausdrucksstärker und robuster zu machen.

Ich bin dabei, eine große Sammlung von Posts zu erstellen, die Ihnen helfen sollen, die STL zu beherrschen, die sogenannte STL-Lernressource. Es ist noch in Arbeit, aber es ist schon viel fertig – genug, um Sie für einen guten Teil des Sommers zu beschäftigen, denke ich. 😊

5) Informieren Sie sich über moderne C++-Funktionen

C++11, C++14 und C++17 bringen eine Vielzahl neuer Funktionen in die Sprach- und Standardbibliothek. Und selbst wenn Sie sie heute nicht in Produktion haben, wie Summer, kommen sie. Und Sie können die meisten davon jetzt in Ihren Nebenprojekten verwenden (siehe Nr. 1 oben).

Einige Funktionen sind einfach zu verstehen, wie Lambdas zum Beispiel. Zugegeben, es gibt viele Details, um sie vollständig zu beherrschen, aber ihre grundlegende Verwendung kommt ohne allzu großen Aufwand.

Ein Teil der Funktionen ist also leicht verständlich und erfordert nur eine gute Ressource und etwas Zeit, um sich darüber zu informieren. Viele C++11 und C++14 werden beispielsweise in Scott Meyers Effective Modern C++ (siehe Nr. 2 oben) behandelt.

Eine Ressource, die mir sehr gefällt, um sich mit C++17 vertraut zu machen, ist die Liste der partizipativen C++17-Features in Barteks Blog. Es ist ziemlich umfangreich, und Sie können dazu beitragen, indem Sie Informationen zu einer bestimmten Funktion hinzufügen. Bartolomiej hat es Ihnen super einfach gemacht, indem er alle Ressourcen und einen Github-Zugang zur Verfügung gestellt hat. Auf diese Weise können Sie sich einbringen, auch wenn Sie noch nichts über C++17 wissen, und viel dabei lernen .

Jetzt gibt es Funktionen, die Sie nicht verstehen können, wenn Sie sie nicht üben. Insbesondere variadische Vorlagen , die ein wichtiges Feature des modernen C++-Standards sind. Dafür ist das Projekt in Nr. 1 oben oder jedes andere Projekt, das verschiedene Vorlagen beinhaltet, der richtige Weg.

6) Verbessern Sie Ihr Wissen über Boost

Boost ist eine große Sammlung gut gestalteter C++-Bibliotheken, portabel und Open Source. Viele moderne C++-Features stammen eigentlich aus Boost.

Die Kenntnis des Inhalts von Boost ist aus zwei Gründen wichtig. Erstens könnten Sie sie tatsächlich in Ihrem Code benötigen, da sie hauptsächlich für den allgemeinen Gebrauch bestimmt sind. Und zweitens, und vielleicht noch wichtiger, da dies auch dann wichtig ist, wenn Sie im Produktionscode keinen Zugriff darauf haben:Sie geben Ihnen ein Modell für gut gestalteten API- und C++-Code im Allgemeinen. Wenn Sie wissen, was im Boost steckt, erhalten Sie Inspiration für Ihre eigenen Designs .

Eine Möglichkeit, sich über viele Boost-Bibliotheken zu informieren, ist das Lesen von Boris Schälings Buch The Boost C++ Libraries. Boris hat es online verfügbar gemacht, aber die Papierversion ist eine gute Alternative, um es in die Strandtasche zu stecken und im Sand liegend zu lesen (wahre Geschichte, es war mein Sommerbuch des letzten Jahres 😎). Dieses Buch basiert jedoch auf Boost 1.55.0, enthält also viele Bibliotheken, aber nicht alle.

Insbesondere enthält es nicht Boost Hana, eine beliebte moderne C++-Metaprogrammierungsbibliothek. Tatsächlich könnte der Einstieg in Boost Hana an sich schon ein Ziel für diesen Sommer sein!

Ich habe Louis Dionne, seinen Autor, um Empfehlungen gebeten, wie Sie Boost Hana effektiv lernen können. Das offizielle Tutorial ist also ein guter Ausgangspunkt, und für eine sanftere Einführung können Sie sich seinen ACCU-Vortrag (oder Meeting C++-Keynote mit ähnlichem Inhalt) ansehen. Um mehr in die Tiefe zu gehen, finden Sie hier alle Vorträge von Louis, von denen die meisten sich auf Metaprogrammierung und Hana beziehen.

7) Informieren Sie sich über Videos

Die C++-Community hat eine riesige Menge an Online-Videos, insbesondere von Konferenzen. Dieser Sommer könnte ein guter Zeitpunkt sein, um einige davon nachzuholen.

Hier sind ein paar Vorträge aus letzter Zeit, die ich lehrreich fand:

  • Patrice Roy – Die Ausnahmesituation. Dieser Vortrag gibt Ihnen einen Überblick darüber, was die Verwendung von Ausnahmen in C++ für Ihren Code bedeutet. Es ist gut strukturiert und Patrice hat einen Präsentationsstil, dem man leicht folgen kann.
  • Arthur O’Dwyer – Vorlagen-Normalprogrammierung. In diesem Vortrag stellt Arthur alles Wissenswerte über Vorlagen vor, ohne in TMP einzusteigen. Wieder gut präsentiert.
  • Stephan T. Lavavej – Tuple<>:Was ist neu und wie es funktioniert. Viele nützliche Informationen und Praktiken zu Tupeln, die helfen, in der Standardbibliothek klarer zu sehen.
  • Howard Hinnant – Ein <Chrono>-Tutorial. Dieser Vortrag führt Sie in die Chrono-Bibliothek und zeigt Ihnen, wie sie starke Typisierung für sicheren und ausdrucksstarken Code verwendet.
  • David Sankel – Monoide, Monaden und applikative Funktoren:Wiederholte Softwaremuster. David Sankel zeigt, wie sich rein funktionale Konzepte auf C++ anwenden lassen.
  • David Sankel – Varianten:Vergangenheit, Gegenwart und Zukunft. Eine gute Darstellung zu Varianten, die in C++17 im Standard enthalten sind.
  • Dietmar Kühl – Dauerspaß. Eine gute Präsentation zu constexpr .
  • Jason Turner – C++ Weekly. In dieser wöchentlichen Serie produziert Jason kurze Videos (5 bis 10 Minuten), die jedes Mal eine beeindruckende Verwendung der Sprache C++ zeigen. Normalerweise beschreibe ich diese Videos als „5 Minuten der Großartigkeit“.

Dies ist keineswegs eine vollständige Liste der guten Videos da draußen! Ich habe andere gute gesehen, und es gibt noch viel mehr, die ich nicht habe gesehen. Aber ich denke, das ist ein guter Anfang.

Erreiche deine Sommerziele

Das ist jetzt viel zu tun . Und es ist unmöglich, all dies in einem Sommer zu tun. Die Idee ist, etwas auszuwählen und Ihre Ziele im Voraus zu definieren . Hüpfe nicht von einem zum anderen, sonst vergeht der Sommer wie im Flug und du hast nichts erreicht.

Um die Arbeit zu erledigen, müssen Sie außerdem einige Momente der Konzentration haben . Ein praktischer Weg, sie zu erhalten, ist die Pomodoro-Technik, die ich mit Kanbanflow implementiere. Ich verwende es jetzt und es zeigt ziemlich gute Ergebnisse.

Meine Sommerziele in diesem Jahr sind, das Buch Domain Driven Design durchzuarbeiten und ein vernünftiges Verständnis von Lisp zu erlangen. Was sind deine?

Entscheiden Sie sich JETZT für zwei Ziele , und schreibe sie in den Kommentarbereich, um mir mitzuteilen, was du entschieden hast.

Warte nicht, sonst steht der September im Handumdrehen vor deiner Tür.

Und ich werde auch weiterhin bloggen, also bleiben Sie dran.