Czy programista często nie zna różnicy między C i C ++? [Zamknięte]

16

Podczas wywiadu zapytano mnie, czy znam różnicę między C i C ++.

Zastanawiałem się, dlaczego zadaje się takie pytanie?

Stella Lie
źródło
11
Biorąc pod uwagę liczbę pytań C, które widziałem w ciągu ostatnich kilku tygodni oznaczonych jako C ++, powiedziałbym, że było to dość ważne pytanie.
Gort the Robot
13
Sądząc po tym, jak często widzę „C / C ++”, powiedziałbym, że jest to bardzo powszechne.
user16764
6
Co odpowiedziałeś
Dima
8
Kandydat do pracy programistycznej często nic nie wie. Ale nie nazwałbym tej osoby programistą.
vartec
6
@Tjaart - Rozumiesz, że istnieją systemy, w których bajt nie ma 8 bitów, prawda?
Ramhound

Odpowiedzi:

25

Jeśli pytania zostały sformułowane w stylu „Czy znasz różnicę między C i C ++?” i pozwolono ci po prostu odpowiedzieć „Tak”, wtedy mogłem zobaczyć twoje zamieszanie, ale gdyby faktycznie pytali „Jakie są różnice między C i C ++?” i oczekiwano bardziej otwartej odpowiedzi, widzę ją jako uzasadnioną „drogę zapytania”, jak mówią.

Na przykład, mając tylko kodowanie w C, a nigdy w C ++, ledwo byłbym w stanie odpowiedzieć poza niejasnym „C ++ obsługuje kodowanie obiektowe?”.

Kzqai
źródło
40

Niektóre osoby zauważyły, że istnieje ogromna liczba programistów, którzy w ogóle nie potrafią pisać kodu . Tak, więc zadawanie „oczywistych” pytań ma sens.

Heinzi
źródło
7
To będzie prawie moja odpowiedź. Po przeprowadzeniu wywiadów z osobami zajmującymi stanowiska programistyczne mogę powiedzieć, że zadawanie oczywistych pytań bardzo łatwo wyeliminuje dużą liczbę kandydatów.
Tyanna,
Milion zwolenników dla ciebie. Jestem zdumiony pytaniami na poziomie początkującym, na które wielu rozmówców nie może odpowiedzieć.
HLGEM
1
Z drugiej strony programuję od ponad 25 lat i jest kilka pytań dla początkujących, na które tak naprawdę nie mogę już odpowiedzieć (pogorszy się, jeśli poprosisz o definicje). Patrzyłem na artykuł powiązany z tą odpowiedzią i pomyślałem: „hmmm, pozwól mi pomyśleć o tym przez chwilę”, podczas gdy w pracy pracuję nad wdrażaniem raczej złożonych systemów i ogólnie nie mam większych problemów z opracowywaniem rozwiązań. Niektóre z tych małych pytań przerażają mnie bardziej niż system wielopoziomowy i wprowadzają funkcjonalność wielowątkową, takie bzdury ... Dziwne, wiem.
MetalMikester
1
w rzeczy samej. Jak omówiono w innym wątku P.SE, w przypadku wywiadów nauczyłem się zaczynać od absurdalnie oczywistych pytań („jak zadeklarować zmienną w JS?”, „Ile bajtów na 1 int w Javie?”, „ co to jest wskaźnik? ”itp.). Nie mam nic przeciwko pierwszemu błędowi (stres jest czynnikiem, nawet jeśli rozpoczynam wywiady z rozmowami, aby je rozluźnić), ale zwykle jeśli mogę uzyskać 3 ostrzeżenia przed osiągnięciem przyzwoitych pytań, to uważam za całkowicie akceptowalne odłożyć słuchawkę bez wychodzenia dalej lub wykop je. Pięć minut potrzebnych do zadawania głupich pytań jest warte zaoszczędzonego czasu.
haylem
3
W rzeczywistości przepraszam nawet przed zadaniem tych pierwszych pytań, ponieważ nie chcę, aby wykwalifikowani kandydaci byli przez nich dziwni, ani nie sądzę, że nie biorę ich poważnie i czuję, że nie będą tu należeć.
haylem
8

Jest ich cała masa. Istnieje nieskończona liczba ludzi, którzy mają idiotycznych wykładowców, którzy uczą strun C newi delete/ lub przestarzałych samouczków lub złych książek, którzy uczą się „C ++”, ale w rzeczywistości C, którzy uważają, że te dwa są bardzo bliskie.

Oczywiście, jeśli jesteś pracodawcą, to mówienie, że są takie same lub nawet podobne, stanowi duże światło ostrzegawcze.

DeadMG
źródło
2
To podnosi bardzo dobry punkt. Dopuszczalne jest, a może nawet powszechne, nauczanie języka C, ale użycie kompilatora C ++. To oczywiście prowadzi do zamieszania przez studentów, którzy nigdy nie uczą się głównych różnic między C i C ++. Mówię tylko o głównych różnicach między tą samą wersją.
Ramhound
4
@Ramhound: To nie jest do przyjęcia w ogóle . To, że jest powszechne, jest ortogonalne.
DeadMG,
1
Smutne jest to, że C i C ++ są prawie powszechnie źle nauczane. Przejdź do SO i przejrzyj tagi C i C ++, a zobaczysz te same nieporozumienia, te same błędne interpretacje, te same złe praktyki powtarzane w kółko. To nie są ludzie, którzy popełniają te same błędy; były nauczane jak zrobić te błędy. „Mój profesor powiedział…” jest teraz dla mnie prawie zawsze czerwoną flagą.
John Bode
5

Istnieje również niewielki odsetek osób (takich jak ja), którzy nauczyli się C ++, zanim nauczyli się C.

Jestem pewien, że znasz różnice, ale jeśli jesteś studentem, który miał tylko klasę C ++, a nie klasę C, części C ++, które nie są kompatybilne z C, nie będą oczywiste.

Niektóre z bardziej oczywistych różnic, których się nauczyłem (nie wyczerpująca lista) ( ) struktury typów danych pierwotnie nie mogły zawierać funkcji i nie mogą mieć członków prywatnych, co oznacza, że ​​bardzo trudno jest egzekwować reguły ważności abstrakcyjnego typu danych w C. ( ) klasy nie są obsługiwane w C ( ) przekazywanie przez odniesienie przy użyciu operatora ampersand jest specyficzne dla C ++ ( ) C nie obsługuje strumieni ani szablonów (*) malloc i wolne są przeznaczone do użycia tylko w C, a nie w C ++

AB
źródło
2
Myślę, że to kluczowy wgląd ... w dawnych czasach miałeś kompilator C, a potem C ++, więc nauczyłeś się różnic. Teraz masz kompilatory C / C ++ i jeśli nauczysz się C ++ wyraźnie, prawie niemożliwe jest wiedzieć, co to jest C, a co C ++ poza „obiektami zorientowanymi obiektowo”. Nie jestem też pewien, czy C / C ++ jest najbardziej powszechny język do nauki w gniewie (?)
Al Biglan,
1
Mam wielką nadzieję, że odsetek ten nie będzie tak mały, ponieważ ci „przekonwertowani na C ++” programiści C często są bardzo złymi programistami C ++ .
sbi
1

Niestety myślę, że staje się to coraz bardziej powszechne.

Myślę, że młodzi programiści świeżo po studiach technicznych (lub tam, gdzie uczą się swoich umiejętności) po prostu nie uczą się starszych języków, takich jak C, C ++, Lisp, OCaml itp. Po prostu wychodzą jako „programiści c #” lub „programiści java” ”itp. A kiedy znajdą pracę, nie rzucają sobie wyzwania w nauce innych języków.

Oczywiście są takie, ale z tych, z którymi pracowałem, młodsi programiści mają ogólną tendencję do podążania za tym wzorem.

Zastrzeżenie: Ponieważ mówię o edukacji, oczywiście mogą występować różnice między krajami dotyczące tego, co jest podkreślane w edukacji.

Pete
źródło
O jakich uniwersytetach mówisz? Języki „tajemne”? Musiałem nauczyć się montażu w MIPS na uniwersytecie w Rzymie ...
Виталий Олегович
Ogólnie rzecz biorąc, „młodzi” programiści, których poznałem, mają dyplom inżyniera. Pomyśl o tym, prawie wszyscy programiści, z którymi pracuję, mają dyplom inżyniera, w tym ja.
Pete
1
C i C ++ są nadal nauczane w szkole. Problem polega na tym, że ten sam kompilator jest używany do uczenia obu. Oznacza to, że tak naprawdę nigdy nie uczą się różnic między dwoma językami.
Ramhound
@Pete Gdybym wyszedł jako programista C #, nie wyobrażam sobie nauki C lub C ++ jako „innego języka”. Z pewnością chciałbym Ruby, Haskell, JavaScript, Python. Języki rodziny C są na tyle blisko, że znajomość jednego wystarczy.
Kirk Broadhurst
0

Prawdopodobnie nie dosłownie, ponieważ uważają, że C ++ i C są jednym i tym samym, ale pod względem prawdziwego zrozumienia i możliwości korzystania z różnych funkcji C ++, tak.

Główną przyczyną jest binarny charakter listy języków / narzędzi w twoim CV / CV. Zasadniczo wydaje się, że jeśli masz „Hello World” do kompilacji i uruchamiania w języku, nie jest dozwolone umieszczanie go w CV / CV.

Tak się składa, że ​​wersja C „Hello, World!” również kompiluje i działa w C ++. Tak więc, bez żadnych innych informacji, wszystko, co widzę „C ++” w CV, mówi mi, że ta osoba zna wystarczająco dużo C, aby uzyskać „Witaj, świecie!” działa i wie, że większość programów w C kompiluje się w C ++.

Biorąc to pod uwagę, będę musiał to trochę zbadać podczas wywiadu. Prawdopodobnie nie zrobiłbym tego, pytając „Tak / Nie” „Czy znasz różnicę?” pytanie w skrócie, ponieważ ma oczywistą „właściwą” odpowiedź. Prawdopodobnie zapytałbym kandydata, który język jej się bardziej podoba, dlaczego i czy byłyby jakieś zalety tego, którego nie wybrała.

JohnMcG
źródło
0

Odpowiedź

Tak, to jest wspólne. Widziałem tę sytuację - zarówno ja, współpracownicy, jak i kod bibliotek stron trzecich.

Ja na przykład czasami pracuję z innymi językami programowania lub strukturami programistycznymi i muszę łączyć lub aktualizować biblioteki „czystego c” lub „c ++”.

Właśnie miałem problem z modyfikacją kodu „Pure C”. I przy użyciu funkcji alokacji pamięci „nowe” i „usuń”, czyli „c ++”. Reszta kodu nie była zorientowana obiektowo

Kompilatorem był C ++. Później pozwałem inny kompilator i odkryłem błąd.

Premia

Jeśli ktoś zapyta, ustnie, podczas testu pisemnego lub testu internetowego:

„Czy znasz różnicę między C lub C ++”

I odpowiadasz „Tak” lub „Nie”.

Naprawdę mają na myśli:

„Czy znasz różnicę między C lub C ++, jeśli tak, proszę powiedz mi?”

Musisz więc odpowiedzieć:

„Tak. Różnica polega na tym, że C ++ jest zorientowany obiektowo, chociaż możesz użyć Pure C, wewnątrz programu C ++, dla kompatybilności wstecznej.”

Czasami nie pytają cię „jeśli tak, powiedz mi” i zakładają, że nie wiesz. Nie odpowiadaj tylko „tak” lub „nie”.

umlcat
źródło
2
Cóż, nie sądzę, że ta odpowiedź jest całkowicie poprawna. Prawidłowa odpowiedź jest taka, że ​​C ++ ma solidną obsługę kodu zorientowanego obiektowo. Nie wymaga tego. (Co jest źródłem tego zamieszania.)
Gort the Robot
Również „możesz używać Pure C wewnątrz programu C ++” może oznaczać coś w rodzaju „C ++ jest nadzbiorem C, tzn. Każdy poprawny program w C jest również prawidłowym programem w C ++” (źle). Może to również oznaczać „możesz łączyć programy C ++ z bibliotekami C” (to prawda, ale większość języków może w ten czy inny sposób łączyć się z bibliotekami C). W prawdziwym wywiadzie powinieneś być o wiele bardziej precyzyjny.
nikie
-2

Edytować

Na początek zauważ, że ta odpowiedź nie ma na celu oświadczyć, że nie ma żadnych różnic lub że twierdzę, że znam różnice, a nawet że znam to niż „Hello World” w C lub C ++. Jest to odpowiedź na pytanie poprzez sformułowanie zakresu zadań, wskazując, że wiele osób zna podstawowe różnice (np. Ktoś ma +w nazwie kilka znaków), a bardzo niewiele osób zna wszystkie lub nawet większość różnic.


Zależy to, co rozumiesz przez „programistę” i co rozumiesz przez „różnicę”.

Jestem „programistą” (choć nazywam siebie programistą) i starałbym się podawać jakiekolwiek rzeczywiste różnice między C i C ++. Po naciśnięciu prawdopodobnie powiedziałbym, że C ++ jest nadzbiorem C, który ma przestrzenie nazw i dziedziczenie; różne sposoby radzenia sobie z pamięcią. Wiem wystarczająco dużo, aby załatać kilka błędów lub wprowadzić zmiany w istniejącym programie, ale nie wyobrażam sobie pisania czegoś więcej niż zwykłego narzędzia w C lub C ++. Wiem wystarczająco dużo, aby się z tym pogodzić, ale nie maluję się jako „znająca” któryś z tych języków.

Znam innych „programistów” (także programistów), którzy nawet nie powiedzieliby ci różnicy między Javą i FORTRAN, czy Javascript i Pascal. Są dobrzy w tym, co robią i nie robią języków proceduralnych.

Są też miliony miernych programistów, którzy ledwo znają język, z którym pracują na co dzień.

Termin „różnica” jest niejednoznaczny. Zwróciłem uwagę na pewne różnice powyżej, ale wiem, że nie są one ostateczne i kompletne. Bardzo niewiele osób pozna każdą różnicę - o wiele więcej osób będzie w stanie udzielić niejasnych odpowiedzi (tak jak ja) na temat orientacji obiektowej.

Kirk Broadhurst
źródło
5
„Z trudem podawałbym jakiekolwiek rzeczywiste różnice między C i C ++.” Na pewno nie jesteś programistą C ++. Proszę?
sbi
2
C i C ++ to bardzo różne języki, kodowane na bardzo różne sposoby. Wyraźnie ich nie znasz.
DeadMG,
@sbi „Nie maluję się jako„ znający ”jeden z tych języków.” Pozwól, że sam zdecydujesz.
Kirk Broadhurst
Wszelkie opinie na temat głosów negatywnych? Czy to dlatego, że nie znam różnicy między nimi? Nie zakładałbym, że to dyskwalifikuje mnie od odpowiedzi na pytanie.
Kirk Broadhurst
1
@KirkBroadhurst: Wydaje mi się, że wskazałem, która część twojej odpowiedzi nie podobała mi się na tyle, aby zagłosować, a ten komentarz był oceniany pięć razy częściej niż potem, więc nie jestem pewien, jakiego wyjaśnienia szukasz. Jednak, aby rozwinąć: termin „różnica” jest tutaj wystarczający, ponieważ C i C ++ mają tylko powierzchowne podobieństwa syntaktyczne, a poza tym są to bardzo różne języki. Jeśli chodzi o kwalifikacje: nie sądzę, że należy tu uzyskać kwalifikacje, ale jeśli odpowiedź jest rażąco nieprawidłowa, ta odpowiedź zostanie uznana za nieistotną dla kwalifikacji.
sbi
-3

Czy programista często nie zna różnicy między C i C ++?

Dwadzieścia lat temu? Tak.

Dzisiaj? Nie tak bardzo.

Powodem tego jest to, że krajobraz programowania zmienił się w wielkim stopniu. Wiele współczesnych programów jest opartych na sieci; nawet programy napisane dla komputerów stacjonarnych mogą być napisane w języku wyższego poziomu niż C lub C ++. Jako taki, chyba że jesteś programistą, który pisze kod systemu operacyjnego, możesz nie wiedzieć wiele o żadnym z tych dwóch języków.

Ankieter może zadać to pytanie podczas wywiadu, aby ocenić, ile wiesz o podstawach programowania; jeśli znasz różnicę między C i C ++, to prawdopodobnie wiesz, czym jest programowanie obiektowe, prawdopodobnie rozumiesz biblioteki i kompilatory, rozumiesz funkcje pamięci, referencje, wskaźniki ... wiele rzeczy, które wpłynęły na dzisiejsze języki programowania . Nie używam dużo C ++ (i naprawdę nie mogę powiedzieć, że jestem doskonałym programistą w dowolnym języku; mądrość przyjdzie z czasem), ale mogę powiedzieć, że moje doświadczenie z C ++ zdecydowanie uczyniło mnie lepszym programistą.

lunchmeat317
źródło
8
Powiedziałbym na odwrót. Widzę teraz więcej zdezorientowanych ludzi niż nawet 5 do 10 lat temu.
haylem
@Haylem Patrząc wstecz, myślę, że chciałem powiedzieć na odwrót .... ups.
lunchmeat317