Podczas wywiadu zapytano mnie, czy znam różnicę między C i C ++.
Zastanawiałem się, dlaczego zadaje się takie pytanie?
programming-languages
interview
Stella Lie
źródło
źródło
Odpowiedzi:
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?”.
źródło
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.
źródło
Jest ich cała masa. Istnieje nieskończona liczba ludzi, którzy mają idiotycznych wykładowców, którzy uczą strun C
new
idelete
/ 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.
źródło
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 ++
źródło
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.
źródło
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.
źródło
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”.
źródło
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.
źródło
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ą.
źródło