Lässt sich C # -Erfahrung gut in C ++ übersetzen? [geschlossen]

13

Meine Programmierklassen in der Schule waren C ++, aber ich habe in den letzten Jahren einen Job in C # gemacht. Wenn es eine Position gäbe, die beispielsweise 1 oder 2 Jahre Erfahrung in C ++ erfordert, wäre meine Erfahrung in C # eine Überlegung wert? Wie effektiv könnte ich in einer solchen Position sein? Muss ich als C ++ - Einsteiger anfangen, um die nötige Erfahrung zu sammeln?

MetaGuru
quelle
4
Am schwierigsten wird es sein, die Redewendungen von C ++ und die "richtige" Vorgehensweise zu lernen. In C # werden Dinge wie die Speicherverwaltung und die Überprüfung von Grenzen in die Sprache und das Framework eingebettet. In C ++ gibt es viele weitere Möglichkeiten, sich in den Fuß zu schießen.
Robert Harvey
1
@RobertHarvey: Nur wenn Sie noch nie von intelligenten Zeigern gehört haben. Oder Behälter.
DeadMG
11
@DeadMG: Ich weiß nicht, was du damit meinst. Auch wenn Sie von ihnen gehört haben, müssen Sie sie noch lernen.
Robert Harvey
2
Die effektive C ++ - Serie ist viel nervenaufreibender als die effektive C # -Serie.
Job
@Robert: Wenn Sie Container und intelligente Zeiger verwenden, müssen Sie keinen Speicherleck verwalten. Und sie zu lernen ist C ++ 101.
DeadMG

Antworten:

13

Das Problem hierbei ist, dass C ++ und C # grundsätzlich extrem unterschiedliche Sprachen mit unterschiedlichen Ansätzen für viele Probleme sind. Es ist leicht, sie als "Eine OO-Sprache" zu fassen, aber die einfache Tatsache ist, dass viele C # -Idiome in C ++ als sehr schlechter Code angesehen werden (und umgekehrt).

Wenn Sie tatsächlich die Unterschiede kennen und wissen, wie C ++ - Redewendungen aussehen, dann sehe ich keinen Grund, warum es nicht in Ordnung sein sollte.

DeadMG
quelle
5

Ich war vor ungefähr 2 Jahren im selben Boot. Ihre C # -Erfahrung wäre für einen C ++ - Job wahrscheinlich nicht so viel wert wie für einen C # -Job. Das heißt, wenn Sie wissen, wie C # tatsächlich funktioniert (sehr wenige C # -Programmierer tun dies tatsächlich) und Ihr C ++ gut gelernt haben, wird C ++ nicht das Problem sein. Was das Problem sein wird, ist die Art und Weise, wie Sie sich an bestimmte Designmuster gewöhnt haben, die für c ++ zu hoch sind.

Zum Beispiel vom netten ADO.NET-Datenzugriffsmodell zur Verwendung von cppcon für den Mysql-Zugriff, System.Collections.Generic zur Verwendung von stl, Mehrfachvererbung, Garbage Collection zur Bereinigung Ihres Speichers in Destruktoren und so weiter ... alle neigen dazu harte Übergänge sein. C ++ ist nicht das Problem, das Erlernen der Bibliotheken, Entwurfsmuster und deren Verwendung ist die Herausforderung. Die meisten Personalvermittler erkennen dies nicht. Wenn Sie ein grundlegendes Design erstellen und die tatsächlich häufig verwendeten Funktionen von c ++ verwenden können, sollten Sie im Interview in Ordnung sein.

Bereit für den Job ist jedoch eine andere Geschichte. Es ist eine lustige Herausforderung, ich hoffe, dass alles gut geht.

Jonathan Henson
quelle
Alle C ++ Jobs, die ich sehe, wollen 2-3 Jahre Erfahrung in C ++, aber meine sind in C #. Das ist wirklich frustrierend für mich, ich möchte C ++ machen! Sie haben Recht mit dem Personalvermittler, er hat mich erschossen. Wie kann ich jemals diese Erfahrung machen, wenn mich niemand versuchen lässt? Ich bin zuversichtlich, dass, wenn mich jemand zur Tür hereinlässt, ich schnell lernen könnte, ich einfach nicht weiß, wie ich sie darauf ansprechen kann.
MetaGuru
Ich bin in meinem aktuellen Job in ein C ++ - Projekt gesprungen. Das ist wahrscheinlich die beste Wahl. Oder Sie können immer auf ein Open Source-Projekt zugreifen, das sich in c ++ befindet.
Jonathan Henson
@ Ryan Wie Jonathan sagte, gibt es viele Möglichkeiten, Erfahrungen in C ++ zu sammeln. Zumindest, woher ich komme, müssen Sie nachweisen, dass Sie Erfahrung haben (anstelle der populären Aussage; mit 1 Jahr Erfahrung fünfmal mehr). Dies funktioniert in beide Richtungen - jemand ohne viel "Papier" -Erfahrung kann die Chance bekommen, sich selbst zu beweisen. Stellen Sie einfach sicher, dass Sie C ++ kennen, bevor Sie es versuchen!
Max
3

Ich kann nicht für jeden Arbeitgeber sprechen, aber ich persönlich sehe das Programmieren als die Fähigkeit und die sprachlichen Besonderheiten als angenehm an. Es ist immer noch möglich, in einem anderen Programmierberuf angestellt zu werden, der nicht Ihre Hauptkompetenz ist.

Allerdings ist es sehr sehr unwahrscheinlich, dass ich jemanden anheuere, der keinerlei Erfahrung in der Sprache hat, für die ich ihn anstelle. Verbringen Sie ein paar Wochenenden mit Lernen und haben Sie ein paar Lieblingsprojekte, um Ihren Lebenslauf zu verbessern. Selbst kleine beweisen, dass Sie lernfähig und interessiert sind.

Tom Squires
quelle
3

Sie befinden sich genau in der Situation, in der ich mich vor 4 Jahren befand.

Ich habe während meines Studiums ein bisschen C ++ gemacht, aber ich hasste es. Ich habe viel Web-Entwicklung gemacht, wenn ich in meiner Freizeit konnte, und einen Job in diesem Bereich bekommen.

Als ich umgezogen bin, habe ich mich für einen C ++ - Job beworben, der 2 Jahre C ++ - Erfahrung vorausgesetzt hat. Nun, ich habe meine C ++ - Erinnerungen vor dem Interview aufgefrischt und als die Zeit für die Tests kam, konnte ich mit ein paar Dingen davonkommen, bei denen ich mir nicht sicher war, ob ich es richtig machte.

Aber der Großteil des Interviews drehte sich um Problemlösungen und kreative Lösungen, und C ++ war am Ende nur ein untergeordneter Faktor.

Die Chancen hängen also wirklich vom Arbeitgeber und seinen Positionen ab.

Wenn Sie eine Personalagentur aufsuchen, wird Ihnen "wahrscheinlich" mitgeteilt, dass Ihr Profil nicht übereinstimmt. Aber mit einem echten Arbeitgeber sind Ihre Chancen viel besser, da sie wirklich wissen, was sie brauchen.

Kojote
quelle
1
Stellen Sie einfach sicher, dass Sie wissen, was ein virtueller Destruktor ist, damit Sie es hinter dem Telefonbildschirm schaffen.
Kevin
2
Wie die anderen sagten, sollten Sie sich an die wenigen Grundlagen der Speicherverwaltung in C ++ erinnern. Das ist der grundlegende Unterschied. Ansonsten in Bezug auf Bibliotheken und Frameworks Die meisten (großen) Unternehmen haben ihre eigenen Bibliotheken und Wrapper, sodass sie nicht erwarten, dass Sie ihre Implementierungen kennen. Im Gegensatz zu C #, bei dem die meisten übergeordneten Bibliotheken im .net-Framework gesichert sind und die Anforderung darin besteht, eine Reihe von Bibliotheken zu kennen, die für die Position relevant sind.
Coyote
Hast du den Job bekommen? Ich würde wirklich gerne mit C ++ anfangen, aber mein Mangel an dokumentierter Erfahrung besteht darin, Türen zu schließen und nicht zu wissen, wie ich es sonst aufbauen soll.
MetaGuru
Ja ... arbeitete dort für 3 Jahre. Es war eine großartige Erfahrung ... aber ich musste in den ersten Monaten einige C ++ - Besonderheiten nachholen.
Coyote
1

Es hängt davon ab, ob. Wenn Sie einige grundlegende Interviewfragen zu Hinweisen und dergleichen beantworten können, sollte es Ihnen gut gehen.

Es ist auch von Vorteil, wenn Sie die Unterschiede zwischen C ++ - Vorlagen und .NET-Generika auflisten können.

Ansonsten ist es ziemlich einfach, mit dem Rest Schritt zu halten.

Yam Marcovic
quelle
1

Ja. Es ist möglicherweise nicht so relevant wie C ++ - Erfahrung, aber es ist gut.

Gute Arbeitgeber werden sich dafür interessieren, wie Sie denken , mehr als wie viele Jahre einer bestimmten Sprache Sie sprechen.

Eine C ++ - Einstiegsposition ist in Ordnung: Sie können schnell lernen und gute Arbeit leisten. Ein gutes Unternehmen gibt Ihnen viele Möglichkeiten zum Wachsen. Wenn nicht, können Sie woanders hingehen und sowohl C # - als auch C ++ - Erfahrungen sammeln.

B Sieben
quelle
0

Es hängt wirklich von der Art des Geschäfts ab, auf das Sie sich bewerben. Wenn sie jemanden suchen, der gute OO-basierte Programmier- und Architekturkenntnisse besitzt, ist C # wahrscheinlich so gut wie das nächste.

Wenn sie stolz auf die Geschwindigkeit / Reaktionsfähigkeit ihrer Software sind, müssen Sie Ihre Algorithmen kennen, da dies mehr als Mikrooptimierungen betrifft - Hash-Tabellen oder lineare Suche um das Verständnis der Leistungsmerkmale zu demonstrieren - zum Beispiel kennt nicht jeder ngen.exe.

Wenn es sich um eine eingebettete / mobile und / oder nicht müllsammelnde Umgebung handelt, müssen Sie wirklich wissen, wie Sie den Speicher effektiv verwalten können. Intelligente Zeiger sind, wie @DeadMG hervorhob, hier der Schlüssel, ebenso wie das Verständnis des Speicherzuweisungsprofils. Spieleprogrammierer ordnen häufig große Anordnungen von Objekten vorab zu und recyceln sie, um den Speicherbedarf im Voraus zu kennen und Unbekanntes auf Einzelbildbasis zu reduzieren. Dies ist auch die Technik, die in den scrollenden TableViews unter iOS verwendet wird.

Wenn es Integrationsarbeiten gibt, benötigen Sie wahrscheinlich Kenntnisse auf C-Ebene in Bezug auf das Marshalling von Daten zwischen Sprachen (wie P / Invoke), aber auch Kenntnisse auf Byte-Ebene darüber, wie diese Datenstrukturen verwendet werden können, was in der Praxis nicht üblich ist C # nach meiner Erfahrung.

JBRWilkinson
quelle