Mam pytanie, na które, jak sądzę, najlepiej odpowiedzieć tutaj.
Jestem całkiem niezły C++
, dobrze, bo dobrze się z językiem, przeczytałem Accelerated C++
i wykonałem prawie wszystkie ćwiczenia.
Mam jednak duży problem. Czy muszę się uczyć C
? Nigdy C
w życiu tego nie robiłem . Zacząłem od C++
kiedy zacząłem programować. Prawdopodobnie dlatego, że zawsze byłem zainteresowany tym, dlaczego wszyscy nazywają ten język tak złożonym. Teraz jednak znam odpowiedź na to pytanie;)
Szczególnie interesuje mnie to, czy mogę przetrwać bez wiedzy C
w dzisiejszym świecie. Na przykład, jeśli udzielę wywiadu w firmie, jeśli powiem, że nie wiem C
- czy uznają to za OK? Dwa języki, w których jestem dobry, to Python i C ++. Pytam o to, ponieważ słyszałem, że firmy pytają o struktury danych w wywiadach. Jeśli więc poproszą mnie o wdrożenie, a jeśli zrobię to w C ++, czy jest to do przyjęcia?
A ludzie, którzy mówią „jak możesz nie znać C, gdy C ++”, proszę nie odpowiadać :) Bez urazy, ale nie rozumiem, dlaczego nauka C jest niezbędna.
Odpowiedzi:
Jeśli znasz C ++, nie uczyłbym się C tylko ze względu na to. Nie powinieneś mieć trudności z nauczeniem się, czy i kiedy tego potrzebujesz.
Zdecydowanie wolałbym spotkać kogoś, kto twierdzi, że zna C ++, ale nie C, niż kogoś, kto twierdzi, że zna C / C ++.
źródło
Odpowiedź wieloczęściowa. Tylko moje opinie.
Moje doświadczenie (25 lat po studiach) jest takie, że C ++, choć coraz rzadziej, nadal będzie miał kluczowe znaczenie dla interesujących systemów w dającej się przewidzieć przyszłości. Trzymam się tego jako mojej głównej specjalizacji. Praca jest ciężka, interesująca i ważna.
Programiści C ++ są ogólnie cenni właśnie dlatego, że nie dorastali w językach zarządzanych, a zatem mają większe prawdopodobieństwo zrozumienia tego, co dzieje się pod przykryciem. Łatwiej jest przejść z C ++ do C # / Java niż odwrotnie, ponieważ pasek wprowadzania jest wyższy.
Tak więc, moim zdaniem, nie jest konieczne rozumienie C, aby móc kompetentnie programować w C ++, rozwijanie zrozumienia, dlaczego C ++ istnieje w kontekście C - jego ograniczenia i mocne strony oraz sposób, w jaki są one rozwiązywane, czy nie w C ++ - byłoby bezcenne dla ciebie z czasem.
Powodzenia.
źródło
Oto, co ma do powiedzenia Bjarne:
źródło
Tylko moja osobista opinia: jeśli znasz C ++, możesz pisać w C. Niektóre doświadczenia byłyby fajne, ale to nie jest problem. Przeciwnie, nie jest poprawna: znajomość języka C nie pozwala na pisanie w języku C ++, bez dodatkowej nauki. Nigdy nie nauczyłem się C i używam go, gdy jest to konieczne, bez żadnych problemów.
źródło
Dobra, po pierwsze - nie, znajomość C nie jest warunkiem do nauki C ++. Rzeczywiście może to stanowić przeszkodę.
Po drugie, jest to całkowicie sytuacyjne. To, czy będziesz musiał znać C, zależy całkowicie od tego, czy praca tego wymaga. Jeśli chcesz być facetem od systemów wbudowanych, to tak, nauka języka C pomoże. W przeciwnym razie większość zadań nie będzie tego wymagać. Jeśli praca potrzebuje C, powinna to powiedzieć. Jeśli tak nie jest, prawdopodobnie nie potrzebuje tego. Jeśli chodzi o struktury danych, znów sprowadza się to do firmy. Zwykle firma mówi: „Programujemy w tych językach, napisz do nas tę strukturę danych. Użyj wybranego przez siebie języka z powyższej listy”. Jeśli poprosą cię o napisanie go w C, po prostu powiesz: „Nie znam C - w moim CV nie napisano, że znam C, ta praca nie jest dla mnie”.
źródło
Zapytaj, czy potrzebują C (i bądź gotów się tego nauczyć, czy nie, jeśli tak).
Spodziewałbym się tego, jeśli przeprowadzają wywiady / zatrudniają cię do pracy w C ++.
Jeśli jest to pytanie o „struktury danych”, możesz zapytać ich, czy chcą, abyś zademonstrował użycie kontenerów STL, czy też (ponieważ jest to wywiad) chcą, abyś zaimplementował struktury danych od podstaw.
źródło
C jest prawie właściwym podzbiorem C ++. Jeśli nie znasz C, to nie znasz dużego i ważnego podzbioru C ++. Czy mają nauczyć się tego podzbioru? Nie. C ++ jest absurdalnie dużym językiem i większość ludzi wybiera z nim podzbiór i program. Nie jest wymagane, aby znać podzbiór, którym jest C. W szczególności nie jest tak ważne, aby znać standardową bibliotekę C. Rzuciłbym jednak bardzo podejrzane oko na każdego, kto nie rozumiał podstawowych pojęć C, takich jak wskaźniki, tablice i drżenie.
źródło
Nie, nie musisz. Kropka.
Ale nauka nowego języka programowania jest korzystna na dłuższą metę. Nauka języków w oparciu o różne paradygmaty programowania jest jeszcze bardziej korzystna. Niezależnie od tego, czy jest to język OOP (Smalltalk lub C ++), język dynamiczny (Lisp, Clojure, Python), funkcjonalny (Lisp, Haskell, Erlang), współbieżny (Erlang, Go, Algol 68, Smalltalk), czy cokolwiek innego (Fortran 03, Perl, Forth) inny wymyślony paradygmat uderza w twoją fantazję; nauka różnych języków pomaga poznać wiele linii myślenia, z których każda ma swoje mocne i słabe strony, aby poradzić sobie z danym zadaniem.
Fortran nadal dominuje w obliczeniach numerycznych, COBOL jest nadal podstawą dużych firm ubezpieczeniowych, Unix, BSD i Linux są nadal oparte głównie na C. Stary kod nie zawsze traci na wartości wraz z wiekiem, ponieważ niekoniecznie się zużywa jak urządzenia mechaniczne, które z czasem trzeba wymienić. Tak więc starszy język może być cenny pod względem szans na zatrudnienie w porównaniu z fajnym czynnikiem nowego języka .
Podobnie jak nauka bycia wielojęzycznym w naturalnych (ludzkich) językach prawdopodobnie poprawia twoją zdolność do wyrażania siebie , tak samo niesie ze sobą ten sam bonus dla języków komputerowych.
Chociaż uważam, że ważne jest (z biegiem czasu), aby nauczyć się biegłej znajomości nie tylko wielu języków, ale ważniejsza jest biegła znajomość wielu paradygmatów programowania.
Mam zamiar wykonać kopię zapasową i powiedzieć, że C ++ jest bogatym i złożonym językiem, potrzeba lat lat ekspozycji i ciągłej praktyki, aby stać się naprawdę płynnym we wszystkich jego bogatych (lub brzydkich) subtelnościach.
Nie spiesz się, a nauka jest najważniejszą radą, jaką mogę ci dać. Jeśli ktoś podejmie się tego, zachęcam do zapoznania się z treścią „ Naucz się programowania przez Petera Norviga za dziesięć lat” .
źródło
Bardzo krótka odpowiedź na twoje pytanie: zależy w dużej mierze od twoich potrzeb. Niektóre firmy polegają głównie na C, czasem jako relikwie (jeśli C był już używany od lat). Inne firmy nie mają nic wspólnego z C. C jest językiem niższego poziomu niż, powiedzmy, Python lub Java, a wiele programów użytkowych może nie wymagać żadnej znajomości C. W przeciwieństwie do języków OOP, C wymaga innego myślenia, dzięki któremu Mam na myśli to, że programy są zorganizowane i zorganizowane w różny sposób i należy wziąć pod uwagę niektóre bardziej szczegółowe aspekty. Na ogół warto nauczyć się tego idiomu, a nawet po prostu poszerzyć swój umysł, że tak powiem. Ale znowu to, czy firmy będą dbać, zależy od ich potrzeb. Niektóre mogą dać ci wybór języka, niektóre mogą wymagać Java, inne C ++, inne wciąż C itp. Czy potrafisz przetrwać? Tak dzisiaj' Świat ma tak wiele różnych obszarów programowania, że nigdy nie możesz przejść obok kodu C. Powinieneś nauczyć się C? Powiedziałbym - tak, niezależnie od późniejszego użycia.
źródło
Niektórzy ludzie mogą nie czuć się komfortowo programując w C, znając C ++.
Wokół C ++ istnieje „ochronna” struktura, która przyczynia się do sterowania nie tylko strukturą, ale także algorytmami programu. Na przykład pomoc w strukturze STL i algorytmach, oczywiste podejście do programowania obiektowego, con / destructor, dodana warstwa abstrakcyjna pochodząca z szablonów ...
Podczas gdy C jest - powiedział - prostszy, zmusza programistę do samodzielnego wstrzykiwania struktury i algorytmów do modelowania problemu. To intensywny wzrost swobody programowania.
Ale ma to swój koszt, ponieważ niektórzy ludzie potrzebują bardziej narzuconej struktury i zbudować program, który staje się wykładniczo trudniejszy w utrzymaniu, gdy staje się większy. Często mówię, że problemem nie jest język (C), ale to, co się z nim robi.
Biorąc to pod uwagę, jako osoba rekrutująca cieszę się, że mogę przeprowadzić wywiad z kimś, kto ma silne umiejętności C ++, ale byłbym jeszcze bardziej entuzjastyczny, gdyby miała wystarczającą autonomię językową, aby opracować cały projekt C.
Dobry program C wymaga również dobrych umiejętności programistycznych, ponieważ język wymaga (zwykle) dobrego zrozumienia składników systemu, aby zbudować wydajne środowisko uruchomieniowe.
źródło
Jeśli czujesz się komfortowo w C ++, nie martwię się o naukę C. C ++ ma wiele ulepszeń w stosunku do C (zdolność do obsługi RAII za pomocą konstruktorów / destruktorów, podstawowych kontenerów, strumieni i łańcuchów jest duża).
Sugerowałbym jednak nauczenie się
printf
iscanf
szeregu funkcji, abyś mógł CZYTAĆ kod, który ich używa. Są dość popularne w C ++, więc wiedza o ich użyciu jest pomocna. Nie sugeruję używania ich we własnym kodzie bez konkretnego powodu.źródło
Jedynym razem, kiedy trzeba wiedzieć C jest jeśli przewiduje się kod C. Jeśli nie, to nie ma problemu.
Nie pisałem C profesjonalnie przez ostatnie 6 lat; istnieje wiele domen aplikacji lepiej obsługiwanych przez inne języki (przynajmniej z punktu widzenia wydajności, jeśli nie wydajności), takie jak Java, C # lub Python. Z pewnością możesz przetrwać, a nawet prosperować jako programista bez dotykania C.
Jeśli chcesz nauczyć się C dla własnego znęcania się, nie ma sprawy. W zależności od tego, jak nauczyłeś się C ++ i od tego, jak polegasz na funkcjach specyficznych dla C ++ (szablony, typy referencyjne, STL, przeciążanie) możesz nieco popsuć się, gdy zdasz sobie sprawę, że 90% narzędzi, dzięki którym programowanie jest tolerowane, nie jest już dostępnych. Rzeczy takie jak zarządzanie pamięcią w C jest bardzo pracochłonne i żmudne w porównaniu do C ++ lub Java. Istnieją również pewne niezgodności między C i C ++, a wraz z każdą nową wersją językową ta luka będzie się powiększać.
Nadal istnieją domeny aplikacji, w których C jest właściwym narzędziem do pracy: mała, szybka, mało magii pod maską, a nie montaż. Jednak w przypadku ogólnego tworzenia aplikacji (zwłaszcza aplikacji komputerowych opartych na graficznym interfejsie użytkownika) dostępne są znacznie lepsze narzędzia.
źródło
Myślę, że jeśli czujesz się dobrze w C ++, to też będziesz w C.
Główną różnicą między nimi jest to, że C ++ jest czysty - obiektowy - C nie jest :)
źródło
Znajomość C daje ci wgląd w zarządzanie pamięcią itp. Chodzi o to, jak niski poziom chcesz uzyskać i czy zrozumienie rzeczy przy niższej dźwigni pomaga ci, czy nie. Możesz pójść o krok dalej i nauczyć się również języka asemblera, ale wszystko zależy od tego, ile jest dla ciebie warte.
Zależy to również od tego, czy chcesz programować w C, czy nie. :)
źródło
Tak jest ok...
IMHO, skoro jesteś dobry
C++
, naprawdę wystarczy ...Założę się, że istnieją branże, które szukają programistów C ++ ... Ale kiedy już się w to zaangażujesz, wszystko zależy od potrzeb twojego projektu. Cokolwiek to wymaga, musisz się nauczyć. Może to być Java, .Net lub nawet C .. Jeśli firma jest gotowa Ci zapłacić, po prostu naucz się ...
Jeśli jesteś na wcześniejszych etapach swojej kariery, ankieterzy IME mają tendencję do patrzenia na twoje nastawienie i zrozumienie języka, w którym czujesz się komfortowo.
Zamiast uczyć się
C
dla samej nauki, naucz się nieco C ++ .. Popraw to, w czym jesteś dobry. Jestem pewien, że możesz się wiele nauczyć ... Dla mnie zawsze jest coś do nauki w C ++ ..: )źródło
Myślę, że najważniejsze rzeczy, które powinieneś wiedzieć o C, to różnice między C i C ++. Będzie prawdopodobnie zobaczyć jakiś kod, który ma pewne C styl w nim w pewnym momencie, i nie powinno być mylone gdy widzisz rzeczy jak
malloc
,free
,printf
,fopen
, lubfclose
. Powinieneś także wiedzieć, jak są one podobne, a także czym różnią się od ich odpowiedników w C ++.Powinieneś także o tym wiedzieć
<<
i>>
są operatorami lewej i prawej zmiany, a nie operatorami wstawiania. W C ++, gdzie można przeciążać operatorów, zostały one przeciążone, aby wykonać wstawianie strumienia i podobne rzeczy, ale nadal są używane do przenoszenia liczb całkowitych.Upewnij się, że rozumiesz wszystkie podstawowe funkcje C ++, których nie ma w C. Jeśli przeczytasz wystarczająco dużo stackoverflow.com, zobaczysz wiele pytań związanych z różnicami w językach i nieporozumieniami ludzi.
Powinieneś także zapoznać się z preprocesorem C, który jest prawie taki sam jak (i często taki sam program jak) preprocesor C ++. Umiejętność korzystania z niego pomoże Ci w C ++, ale w C.
Jedną wielką rzeczą, z którą trudno jest sobie poradzić w C, którą posiada C ++, są destruktory. Te rzeczy można nazwać wszędzie, dbając o uwolnienie zasobów, ale w C musisz zrobić to wszystko bardziej wyraźnie. Programiści z C ++ łatwo o tym zapomnieli.
Jeśli chodzi o wywiady, jeśli ktoś poprosi cię o napisanie kodu dla jakiegoś ogólnego algorytmu w C i zrobisz coś takiego:
Nie sądzę, aby zdecydowali, że nie wiesz, co robisz, ponieważ nie zrobiłeś:
I naprawdę nie powinny przejmować się tym, jeśli używałeś,
cout
chyba że próbują przekonać cię do twojej zdolności radzenia sobie z wejściami i wyjściami, co C ++ ułatwia w typowych przypadkach.Jeśli znajdziesz się w sytuacji, w której przeprowadzana jest rozmowa kwalifikacyjna w sprawie pracy, która wymaga C, powinieneś szczerze powiedzieć o swojej nieznajomości C poza jego nakładaniem się z C ++. Prawdopodobnie zrozumieją, że dobry programista powinien być w stanie dość szybko przejść do C z C ++.
Biorąc to wszystko pod uwagę, C nie jest aż tak wielkim językiem. Standardowa biblioteka jest znacznie mniejsza niż biblioteka C ++ i zapoznanie się z najczęstszymi jej fragmentami nie jest wielkim problemem, więc nauczenie się jej nie zaszkodzi.
źródło