2008-09-30 16 views
28

C++ był pierwszym językiem programowania, na który naprawdę wpadłem, ale większość mojej pracy nad nim była akademickim lub programowaniem gier. Większość zadań programistycznych, w których pracuję, wymaga programistów Java lub .NET i mam dość dobre pojęcie o tym, jakich technologii potrzebują, poza podstawowym językiem. Na przykład programista Java może wymagać znajomości EJB, serwletów, hibernacji, źródeł i innych technologii, bibliotek i frameworków.Jakie technologie muszą znać programiści C++?

Nie jestem jednak pewien co do C++. Czy w rzeczywistych sytuacjach, dla ogólnego programowania biznesowego, programiści C++ muszą wiedzieć coś więcej niż funkcje językowe? Rzeczy jak Win32 API, niektórych bibliotek, ram, technologii, narzędzi itp


Edit: Myślałem o standardowej biblioteki, jak również kiedy powiedziałem język podstawowy, przepraszam, czy to źle, czy nie. Zastanawiam się, czy istnieją bardziej szczegółowe wymagania domeny podobne do wszystkich technologii Java lub .NET programiści mogą wymagać, aby dowiedzieć się, w jaki sposób programistów C++ trzeba wiedzieć w ogóle. Zgadzam się, że standardowa biblioteka i Boost są niezbędne, ale czy jest coś poza tym, czy jest inaczej dla każdej firmy/projektu/domeny?

Odpowiedz

29

Jak dla każdego języka, wierzę, istnieją trzy wzajemnie powiązane poziomy wiedzy:

  1. Mistrz język. Każdy programista powinien (zrobić to, co trzeba) opanować składnię. Dobre referencje dla osiągnięcia tego są następujące:
  2. Dobrze znasz swoje biblioteki.
    • STL jest zdecydowanie koniecznością jak to zostało ujęte w C++ Standard Library, więc wiedząc, że jest bardzo blisko do punktu 1: trzeba ją opanować.
    • Znajomość boost może być bardzo interesująca, jako wieloplatformowa i ogólna biblioteka.
    • Znasz biblioteki, z którymi masz pracować, niezależnie od tego, czy są to: Win32 API, OCCI, XPCOM lub UNO (tutaj tylko kilka przykładów). Nie musisz znać bazy danych, jeśli tworzysz komponenty czysto graficzne ...
  3. Rozwiń swoją wiedzę o wzorach. Nie można uniknąć tutaj Design Patterns: Elements of Reusable Object-Oriented Software ...


Więc moja odpowiedź na zaktualizowanym pytanie byłoby: znać język, znać swoją platformę, know swoją domenę. Myślę, że tutaj jest wystarczająco dużo pracy, szczególnie w C++. To wieczna praca, której nigdy nie wolno przeoczyć.

4
+1

Zauważ, że gdy programiści C++ mówić o "Standard Template Library" (STL), prawie zawsze naprawdę oznacza Standardowa biblioteka C++. STL służył jako podstawa dla dużej części Standardowej Biblioteki C++, ale STL jest przestarzały, z wyjątkiem tych implementacji C++, które nie implementują standardu. –

15

C++ developer ma grok std i boost bibliotek.

Lista innych technologii w dużym stopniu zależy od rodzaju projektu. Na pewno będziesz mieć jakąś interakcję z SO, więc będziesz musiał znać API twojego środowiska.

Jeśli chodzi o dostęp do danych i inne produkty, istnieje ton dla różnych rozwiązań. C++ jest znacznie bogatszy niż niektóre zarządzane języki w tym sensie. 99% starych popularnych systemów ma interfejs C/C++.

Po wyjaśnić swoje pytanie nieco w komentarzu do mojej odpowiedzi mogę polecić:

  • przeglądarkę dobrego kodu (SourceInsight lub zrozumienia dla C++ na przykład)
  • Narzędzia do analizy statycznej (Link, KlockWork obowiązujące na etc.)
  • MySQL \ SQLite (I napotkanych DB w ogromnej liczbie projektów C++)
  • technologii UI (OpenGL \ GLUT, DirectX, GDI, QT, etc)
+0

Tak, myślałem, że to zostało dane. Przepraszam, jeśli nie było to jasne. Mówiłem więcej o technologiach biznesowych, jeśli w ogóle. Nie chodzi o to, co C++ powinno wiedzieć, ale gdyby istniały jakieś inne szeroko stosowane koncepcje stosowane w kręgach zawodowych. –

4

Będzie to w dużej mierze zależeć od używanej platformy i innych ograniczeń. Zasadą jest, że dobry (C++) programista jest (lub powinien) nauczyć się API specyficznego dla platformy w bardzo krótkim czasie. W przypadku C++ znacznie ważniejsze jest zrozumienie różnych łańcuchów narzędzi (np. Programista Windows powinien również znać łańcuch narzędzi GCC) i różnice w kompilatorach. Programista powinien także rozumieć ograniczenia i zależne od platformy zachowanie języka.

Co do bibliotek, programiści C++ absolutnie muszą znać STL i Boost. Bez dyskusji.

+0

Najbardziej stabilny kod w C++, nad którym pracowałem, nie używał boostu. Chociaż jest to powszechne, nie jest jeszcze w pełni standardem branżowym. – tloach

+0

doszła do wniosku, że nie korzystała również ze STL, mieliśmy kod wewnętrzny, który spełniał ten sam cel, ale był specyficzny dla naszego obszaru biznesowego. – tloach

+0

@tloach: nawet jeśli nie będziesz ich używał, znajomość ich jest kluczowa. Najmniej wszystkiego, więc nie trzeba niepotrzebnie powielać istniejących funkcji. –

1

W żadnym określonym porządku

  • COM/ATL
  • DirectX
  • MFC & Win32
  • STL
  • GDI
  • BOOST
1

jeśli jesteś używając gcc, zdecydowanie powinieneś znać gdb. Właściwie powinieneś być biegły w lokalnym debugerze dla dowolnego kompilatora, którego używasz. Poza tym istnieje tak szeroki zakres wykorzystywanych bibliotek, że możliwość szybkiego pobrania interfejsu API jest bardziej przydatna niż jakikolwiek inny. Sugerowałbym jednak uczenie się doxygen.

6

technologie powinieneś wiedzieć jako programista C++ (a zatem bardziej technicznie kompetentny niż mniejszych programistów;)):

problemy z wydajnością - co sprawia, że ​​wszystko idzie powoli, jak znaleźć i naprawić takie problemy. Mam tu na myśli takie rzeczy jak przełączanie kontekstów, linie pamięci podręcznej, zoptymalizowane wyszukiwania, użycie pamięci i ograniczenia oraz podobne rzeczy, o które nie dba twój średni programista VB/C#.

Problemy z gwintowaniem - jak najlepiej wykorzystać aplikację wielowątkową, jak wykrywać i naprawiać tego samego typu.

Komunikacja niskopoziomowa - w szczególności możliwość łączenia się z mało znanymi systemami, których nikt inny nie napisał do zestawu narzędzi (w szczególności łączności radiowej), opóźnień i zarządzania przepustowością.

W przeciwnym razie, w przypadku określonych narzędzi - zależy to od tego, na co kierujesz reklamy, system Windows będzie inny niż system Linux, inny niż osadzony.

2

Poza rzeczami, które wszyscy wymienili, należy pamiętać, że programista C++ ma przestrzeń na rynku systemów wbudowanych (znacznie więcej niż większość innych języków wysokiego poziomu). Taka znajomość systemów wbudowanych i programowania może otworzyć wiele drzwi i możliwości pracy gdzie na przykład nie będziecie tak mocno konkurować z tworzeniem Javy. Zatem nauka kodowania kompaktowego kodu (kompakt po kompilacji) i technik zużywania małej ilości pamięci jest dobrym pomysłem.

1

Jeśli używasz Linuksa, to Valgrind jest bardzo przydatnym narzędziem do sprawdzania, jak program radzi sobie z dostępem do pamięci.

Powiązane problemy