Hervorragende Kenntnisse in C ++ [geschlossen]

8

Ich habe kürzlich eine Rekrutierungsseite für ein Softwareunternehmen gesehen, auf der eine der Anforderungen "Ausgezeichnete Kenntnisse in C ++" lautete.

Nun, ich weiß, dass dies irgendwie als Expertenwissen über C ++ impliziert, aber wo genau passt Expertenwissen hin. Ist es das Wissen und die Erfahrung von (sagen wir) acht Jahren Programmieren in der Sprache, die die Vor- und Nachteile einer bestimmten Domäne haben und kennen. Oder handelt es sich um eine auffrischende, oberflächliche Herangehensweise an eine oder mehrere Domänen und gleichzeitig um ein detaillierteres Verständnis der gesamten Sprache?

Sie können beispielsweise nicht gleichzeitig Experte für das Schreiben von Systemtreibern und Game-Engines sein. Wo passt dieses exzellente oder Expertenwissen hin?

Vorabend
quelle
5
"Zum Beispiel kann man nicht erwarten, dass Systemtreiber und Game-Engines gleichzeitig geschrieben werden." Warum nicht?
Pubby
1
Nun, ich erwarte nichts.
Edward Strange
6
Dies bedeutet, dass Sie den Interviewzyklus und die C ++ - Fragen, die sie Ihnen stellen, hinter sich lassen können. Es hat nicht die gleiche Bedeutung zwischen Arbeitgebern, Personen oder Beschreibungen, und die Zeit, die für die Verwendung einer Sprache aufgewendet wird, hängt nicht mit dem Grad des Verständnisses und der Fachkenntnis einer Sprache zusammen (einige Personen produzieren nur Code in einer beliebigen Sprache, indem sie nur die ersten paar kennen Kapitel eines Buches, nie etwas darüber hinaus lernen).
wkl
1
Nachdem ich sowohl Systemtreiber als auch Game Engines geschrieben habe, muss ich mich hier auf die Seite von @Pubby stellen =)
Patrick Hughes
Ausgezeichnet ist ein vages Wort, da meine Version hier oben / unten sein könnte und Ihre dort oben ist. Ich werde sagen, dass ein "exzellentes Wissen" bedeuten sollte, dass Sie ein nicht triviales Programm in weniger als 2 Stunden codieren können (möglicherweise ein Weckerprogramm wie Pomodoro mit Einstellungen und Ton).
Adel

Antworten:

17

Wenn sie "Ausgezeichnetes Wissen" sagen, sollten Sie in der Lage sein, alle Funktionen der Sprache korrekt zu identifizieren und zu verwenden - einschließlich derjenigen aus dem neuesten C ++ 11-Standard, die derzeit allgemein unterstützt werden (was leider bedeutet, dass Visual Studio hier der kleinste gemeinsame Nenner ist ). Eine Person mit hervorragenden C ++ - Kenntnissen kann ihre eigenen Typmerkmale oder Ausdrucksvorlagen erstellen. Sie können ihre eigenen Container, Algorithmen und Allokatoren erstellen. Sie wissen, wann Vererbung und wann Vorlagen zu verwenden sind und wann keine von beiden zu verwenden sind. Sie wissen, wie man RAII verwendet, um alle bereinigungsbedürftigen Zustände zu verwalten.

Außerdem können sie mit der Interaktion mit Müll im C-Stil fertig werden, da dies leider immer noch Teil der Sprache ist.

DeadMG
quelle
2
Junge, das scheint, als würden Sie viel erwarten, besonders wenn die Experten, von denen ich immer wieder höre, nicht wissen, was member()eine Initialisierungsliste bewirkt. : P
Edward Strange
1
Ich stimme leider sowohl dieser Antwort als auch Crazy Eddie zu.
Klaim
+1 Sieht nach einer völlig akzeptablen Beschreibung aus. Wenn nicht "Experte", was wäre das?
Unabhängig
2
um fair zu sein, sollte dies ein Experte sein , kann aber auch das sein, was dieses Unternehmen damit meint
jk.
@DeadMG Schöne Antwort. Ich möchte nur hinzufügen: Man kann eine Sprache möglicherweise nicht perfekt kennen. Wenn Sie 30 Jahre alt sind und 20 Jahre Erfahrung in der Programmierung in verschiedenen Sprachen haben, können Sie nicht alles in einer Sprache behandeln. Wie lange es dauert, um in einer Sprache vollständig exzellent zu werden, ist trivial. Sie sind möglicherweise nie ein Experte in einer Sprache, aber möglicherweise ein Experte für Problemlösungen. Ich glaube nicht, dass die Leute, die die Rekrutierungsanforderungen geschrieben haben, darüber nachgedacht haben.
Eva
8

Ich glaube nicht, dass es eine allgemein akzeptierte Definition dessen gibt, was "exzellentes" Wissen über C ++ ausmacht.

Es ist in der Regel schwierig, eine klare Antwort darauf zu finden, was "gute", "ausgezeichnete", "hervorragende" (usw.) Kenntnisse in einer Sprache, einem Framework, einer Plattform oder was Sie haben. In vielen Fällen ist es besonders schwierig, eine klare Grenze zwischen wirklich nützlichem Wissen und dem Wissen um viele Kleinigkeiten zu ziehen.

Dies gilt insbesondere für etwas wie C ++, das es schon seit Jahrzehnten gibt, das auf viele verschiedene Arten angewendet und in dieser Zeit in vielen verschiedenen Stilen geschrieben wurde. Es gibt eine beinahe beängstigende Menge, die jemand über die Sprache lernen könnte , die fast nichts damit zu tun hat, sie zur guten Lösung von Problemen zu verwenden. Das Kennen aller Regeln wie Überlastungsauflösung oder teilweise Anordnung von Funktionsvorlagen ist wahrscheinlich nur dann hilfreich, wenn Sie versuchen, jemanden für die Arbeit an einem Compiler (oder etwas sehr Ähnlichem) einzustellen. Ich habe C ++ verwendet, seit es zum ersten Mal einigermaßen verfügbar war, und habe noch keine teilweise Reihenfolge von Funktionsvorlagen in echtem Code verwendet (oder sogar wollen).

Obwohl ich technisch nicht auf die gestellte Frage reagiere, beeile ich mich, jedem, der solche Anforderungen in Stellenanzeigen enthält, zu raten, ein gewisses Gleichgewicht im Auge zu behalten. Ich denke, dass übermäßige Betonung oft auf Programmiersprachen gelegt wird, auf Kosten von Dingen wie Problemlösungsfähigkeit und allgemeinen Algorithmen. Wenn man eine Programmiersprache gut kennt, kann man Lösungen gut ausdrücken , aber normalerweise hilft sie (bestenfalls) beim Entwerfen der Lösung selbst nur minimal. Eine großartige Lösung, die schlecht ausgedrückt wird, schlägt praktisch immer eine mittelmäßige Lösung, egal wie gut sie ausgedrückt wird.

Jerry Sarg
quelle
1
+1 Ein Arbeitgeber kann C mit Klassen als "ausgezeichnet" betrachten. Ein anderer Arbeitgeber möchte möglicherweise ein umfassendes Wissen über die Antwort von modernem C ++ a la DeadMG
jk.
@jk. Jeder, der C mit Klassen "ausgezeichnet" betrachtet, ist ein Idiot.
DeadMG
+1 Sehr guter Punkt im letzten Absatz, das habe ich mir auch gedacht, als ich diese Frage gestellt habe.
Eva
2

Ich würde erwarten, dass diese Person mit dem C ++ - Standard, den neu hinzugefügten Konzepten, Konstrukten und Schlüsselwörtern auf dem neuesten Stand ist. Zum Beispiel sollte er zumindest wissen, was eine Wertreferenz ist und warum sie nützlich sein kann.

Otávio Décio
quelle
0

Wie gut ist ein ausgezeichneter Fußballspieler? Es hängt davon ab, auf welcher Ebene Sie sich befinden, international, in der Kinderliga usw.

Gute Kenntnisse in C ++ bedeuten wahrscheinlich, dass Sie alle Schlüsselwörter kennen und wissen sollten, wann sie zusammen mit der STL verwendet werden.

Manchmal enthält es auch Designmuster und Boost, manchmal jedoch keine der oben genannten und erfordert, dass Sie die Codierungsprüfung bestehen und den Interviewer beeindrucken.

Ehrlich gesagt gibt es einfach keine tatsächliche Definition. Haben Sie das Gefühl, Sie können eine komplexe Multithread-Anwendung mit mehreren Threads unter Verwendung von C ++ und einigen Peripheriebibliotheken (STL, MFC, Boost usw.) schreiben? Wenn die Antwort ja lautet, haben Sie wahrscheinlich eine Chance auf Expertenpositionen.

Wenn die Antwort Nein lautet, verschwenden Sie möglicherweise Ihre Zeit.

Stefan
quelle
0

Ein ausgezeichneter C ++ - Programmierer weiß, wann er die unzähligen 'Funktionen' der Sprache nutzen muss und wann nicht.

James
quelle
Ich habe keine Ahnung, warum Sie abgelehnt wurden, es ist die vernünftigste Antwort.
Zvrba
Wahrscheinlich wegen des Sarkasmus um Merkmale.
DeadMG
0

Verweilen Sie nicht bei der Semantik von "exzellent", bewerben Sie sich einfach für den Job, wenn er interessant erscheint und Sie sich dazu bereit fühlen. Lassen Sie den Arbeitgeber entscheiden, ob Sie "ausgezeichnet" genug sind oder nicht.

Ein "ausgezeichneter Programmierer" kennt die rohe Leistungsfähigkeit des Tools und beurteilt anhand dessen mehrere Faktoren, die die Implementierung des unmittelbaren Problems bestimmen. Diese Faktoren sind: Einfachheit der Implementierung, Erweiterbarkeit / Wiederverwendbarkeit, Effizienz.

zvrba
quelle