Czy doświadczenie w C # dobrze przekłada się na C ++? [Zamknięte]

13

Moje zajęcia programistyczne w szkole to C ++, ale skończyłem pracę w C # przez ostatnie kilka lat. Gdyby istniało stanowisko wymagające powiedzenia 1 lub 2 lata doświadczenia w C ++, czy moje doświadczenie w C # byłoby warte rozważenia? Jak skuteczna mogłabym być w takiej sytuacji? Czy muszę więc zacząć jako programista C ++ na poziomie podstawowym, aby uzyskać niezbędne doświadczenie?

MetaGuru
źródło
4
Najtrudniejsza będzie nauka idiomów języka C ++ i „poprawnego” sposobu robienia rzeczy. W języku C # rzeczy takie jak zarządzanie pamięcią i sprawdzanie granic są upieczone w języku i frameworku. W C ++ istnieje wiele innych sposobów na zastrzelenie się w stopę.
Robert Harvey
1
@RobertHarvey: Tylko jeśli nigdy nie słyszałeś o inteligentnych wskaźnikach. Lub pojemniki.
DeadMG
11
@DeadMG: Nie wiem, co masz na myśli. Nawet jeśli o nich słyszałeś, musisz się ich nauczyć.
Robert Harvey
2
Seria Effective C ++ jest znacznie bardziej wymagająca niż skuteczna seria C #.
Job
@Robert: Cóż, jeśli robisz pojemniki i inteligentne wskaźniki, nie musisz zarządzać kawałkiem pamięci. Nauka ich to C ++ 101.
DeadMG

Odpowiedzi:

13

Problem polega na tym, że C ++ i C # są zasadniczo bardzo różnymi językami z różnymi podejściami do wielu problemów. Łatwo jest dodać je jako „język OO”, ale prosty fakt jest taki, że wiele idiomów C # jest uważanych za bardzo zły kod w C ++ (i odwrotnie).

Jeśli faktycznie znasz różnice i jak wyglądają idiomy C ++, to nie widzę powodu, dla którego nie powinno być dobrze.

DeadMG
źródło
5

Byłem na tej samej łodzi około 2 lata temu. Twoje doświadczenie w c # prawdopodobnie nie byłoby warte tyle samo dla zadania c ++, jak c ++ dla zadania ac #. To powiedziawszy, jeśli wiesz, jak faktycznie działa c # (bardzo niewielu programistów c # faktycznie to robi) i dobrze nauczyłeś się swojego c ++, to c ++ nie będzie problemem. Problemem będzie sposób, w jaki przyzwyczaiłeś się do pewnych wzorców projektowych, które będą zbyt wysokie dla c ++.

Na przykład przejście od ładnego modelu dostępu do danych ADO.NET do użycia cppcon dla dostępu mysql, System.Collections.Generic do użycia stl, wielokrotnego dziedziczenia, odśmiecania pamięci do czyszczenia pamięci w destruktorach i tak dalej ... wszystkie mają tendencję być trudnymi przejściami. C ++ nie jest problemem, uczenie się bibliotek, wzorców projektowych i jak z nich korzystać jest wyzwaniem. Większość osób rekrutujących nie zdaje sobie z tego sprawy. Jeśli potrafisz wykonać podstawowy projekt i umiesz korzystać z faktycznie powszechnie używanych funkcji c ++, powinieneś być w porządku w wywiadzie.

Jednak gotowość do pracy to inna historia. To zabawne wyzwanie, mam nadzieję, że wszystko pójdzie dobrze.

Jonathan Henson
źródło
Wszystkie prace w C ++, które widzę, wymagają 2-3 lat doświadczenia w C ++, ale moje w C #. To jest dla mnie naprawdę frustrujące, chcę tworzyć C ++! Masz rację co do rekrutera, zestrzelili mnie. Jak mogę zdobyć to doświadczenie, jeśli nikt nie pozwoli mi spróbować? Jestem pewien, że jeśli ktoś wpuści mnie do drzwi i będę mógł szybko się uczyć, po prostu nie wiem, jak się do tego dostać.
MetaGuru,
W mojej obecnej pracy rzuciłem się na projekt c ++. To prawdopodobnie twój najlepszy zakład. Lub zawsze możesz dostać się na projekt open source w c ++.
Jonathan Henson
@Ryan Jak powiedział Jonathan, istnieje wiele sposobów na zdobycie doświadczenia w C ++. Przynajmniej tam, skąd pochodzę, musisz udowodnić, że masz doświadczenie (zamiast popularnego stwierdzenia; pięciokrotne roczne doświadczenie). Działa to w obie strony - osoba bez dużego „papierowego” doświadczenia może mieć szansę na udowodnienie swojej wartości. Upewnij się, że znasz C ++, zanim spróbujesz!
Maks.
3

Nie mogę mówić za każdego pracodawcę, ale osobiście uważam programowanie za umiejętność i specyfikę języka za miłą. Wciąż możliwe jest zatrudnienie w innej pracy programistycznej, która nie jest twoją główną umiejętnością.

Powiedziawszy, że jest to bardzo mało prawdopodobne, zatrudnię kogoś, kto absolutnie nie ma doświadczenia w języku, dla którego go zatrudniam. Poświęć kilka weekendów na naukę i poproś o kilka domowych projektów, aby wzmocnić swoje CV. Nawet małe dowodzą, że potrafisz się uczyć i chętnie.

Tom Squires
źródło
3

Jesteś dokładnie w takiej samej sytuacji, w jakiej byłem 4 lata temu.

Podczas studiów zrobiłem trochę C ++, ale nienawidziłem tego. Zrobiłem dużo web dev, kiedy mogłem w wolnym czasie i dostać pracę w tej dziedzinie.

Kiedy się przeprowadziłem, ubiegałem się o pracę w C ++, która wymagała 2-letniego doświadczenia w C ++. Cóż, odświeżyłem swoje wspomnienia z C ++ przed wywiadem, a kiedy nadszedł czas na testy, udało mi się uciec od kilku rzeczy, nie byłem pewien, czy wszystko idzie dobrze.

Ale większość wywiadu dotyczyła rozwiązywania problemów i kreatywnych rozwiązań, a C ++ przestało być tylko drobnym czynnikiem.

Tak więc szanse naprawdę zależą od pracodawcy i zajmowanych przez niego stanowisk.

Jeśli przechodzisz przez agencję rekrutacyjną, „prawdopodobnie” dowiesz się, że Twój profil nie pasuje. Ale u prawdziwego pracodawcy masz większe szanse, ponieważ naprawdę wiedzą, czego potrzebują.

Kojot
źródło
1
po prostu upewnij się, że wiesz, czym jest wirtualny destruktor, aby przejść obok ekranu telefonu.
Kevin
2
Jak powiedzieli inni, pamiętaj o kilku podstawowych podstawach zarządzania pamięcią w C ++. To podstawowa różnica. W przeciwnym razie dotyczące bibliotek i frameworków Większość (dużych) firm ma własne biblioteki lib i otoki, więc nie oczekują, że znasz ich implementacje. W przeciwieństwie do C #, gdzie większość bibliotek wysokiego poziomu jest utworzona w frameworku .net, a wymagana będzie znajomość zestawu bibliotek odpowiednich dla tego stanowiska.
Coyote
Więc dostałeś pracę? Naprawdę chciałbym zająć się C ++, ale mój brak udokumentowanego doświadczenia polega na zamykaniu drzwi, nie jestem pewien, jak inaczej to zbudować.
MetaGuru,
Tak ... Pracowałem tam przez 3 lata. To było wspaniałe doświadczenie ... ale przez kilka pierwszych miesięcy musiałem nadrobić zaległości w C ++.
Coyote
1

To zależy. Jeśli potrafisz odpowiedzieć na kilka podstawowych pytań na temat wywiadów dotyczących wskaźników i tym podobne, nie powinno być problemu.

Korzystne jest również, jeśli możesz wymienić różnice między szablonami C ++ a rodzajami .NET.

Poza tym dość łatwo jest nadrobić zaległości w trakcie podróży.

Yam Marcovic
źródło
1

Tak. To może nie być tak istotne jak C ++, ale jest dobre.

Dobrzy pracodawcy będą zainteresowani tym, jak myślisz , bardziej niż liczbą lat określonego języka.

Podstawowa pozycja w C ++ jest w porządku: możesz uczyć się szybko i wykonywać świetną robotę. Dobra firma da ci wiele możliwości rozwoju. Jeśli nie, możesz pójść gdzie indziej i mieć doświadczenie zarówno w C #, jak i C ++.

B Seven
źródło
0

To naprawdę zależy od charakteru firmy, do której aplikujesz. Jeśli szukają kogoś, kto ma dobre umiejętności programowania i architektury w oparciu o OO, C # jest prawdopodobnie równie dobry, jak następna rzecz.

Jeśli są dumni z szybkości / czasu reakcji swojego oprogramowania, musisz znać swoje algorytmy, ponieważ jest to ważniejsze niż mikrooptymalizacje - tabele skrótów w porównaniu do wyszukiwania liniowego itp. C # jest nadal istotny, ale potrzebujesz w celu wykazania zrozumienia charakterystyki wydajności - nie wszyscy wiedzą na przykład o ngen.exe.

Jeśli znajdują się w środowisku osadzonym / mobilnym i / lub niezbierającym śmieci, naprawdę musisz wiedzieć, jak skutecznie zarządzać pamięcią. Kluczowe znaczenie mają tutaj inteligentne wskaźniki, jak wskazał @DeadMG, ale rozumie także profil alokacji pamięci. Programiści gier często wstępnie przydzielają duże tablice obiektów i poddają je recyklingowi, aby poznać z góry wymagania dotyczące pamięci i zmniejszyć liczbę niewiadomych dla poszczególnych klatek. Jest to również technika stosowana w przewijaniu TableViews w iOS.

Jeśli są jakieś prace integracyjne, prawdopodobnie potrzebujesz specjalistycznej wiedzy na poziomie C w zakresie zestawiania danych między językami (np. P / Invoke), ale także zrozumienia na poziomie bajtów, w jaki sposób można wykorzystać te struktury danych, co nie jest powszechną praktyką w C # z mojego doświadczenia.

JBRWilkinson
źródło