Zwiększenie poziomu mojego kodu C / C ++

16

Programuję od 3-4 lat i czuję, że nie mogę już być nazywany początkującym, ale czytam kilka pytań na tej stronie i myślę, że o WTF mówią? Tak samo czuję się, kiedy wybieram książki o programowaniu.

Przeczytałem kilka początkujących książek o programowaniu, niektóre o C / C ++, a inne o grach. Napisałem kilka bardziej złożonych rzeczy, takich jak bardzo podstawowy interfejs AI, szeregowy i TCP / IP.

Planuję zostać programistą gier, ale ostatnio zainteresowałem się systemami wbudowanymi po tym, jak miałem okazję nad nimi pracować (interfejs szeregowy).

Bardzo trudno mi było znaleźć materiały do ​​dalszej nauki po ukończeniu wstępu i książek dla początkujących, ponieważ nie są to żadne pośrednie książki w C ++, które mogę znaleźć.

Jakich rad udzielisz mi, aby zwiększyć i poszerzyć moją wiedzę i umiejętności? Szczególne zasoby byłyby bardzo mile widziane.

Skeith
źródło
W przypadku książek w C ++ zobacz to pytanie: stackoverflow.com/questions/388242/...
Naveen

Odpowiedzi:

10

Jeśli mówisz o C / C ++, na pewno możesz skorzystać z dodatkowego doświadczenia. Pierwszą wskazówką, którą ci dam, jest to, że C i C ++ to zupełnie inne języki . Najlepszym zasobem do nauki języka C ++ jest StackOverflow - jest tam wielu ludzi, którzy mają ogromne doświadczenie i wiedzę.

Następną rzeczą do zrobienia jest rozpoczęcie dużego projektu, na przykład próba napisania silnika grafiki 3D w niskopoziomowym interfejsie API, takim jak DirectX, a gdy twój projekt niefortunnie zawiedzie, jak robią to wszystkie pierwsze projekty, dowiesz się czegoś o tym, jak nie do programu.

Możesz sprawdzić ten link na StackOverflow, aby znaleźć dużą listę dobrych książek do nauki języka C ++.

DeadMG
źródło
3
Nie, najlepszym źródłem do nauki C ++ jest dobra książka, a najlepiej książki.
Neil Butterworth,
+1 Za rozpoczęcie dużego projektu. Nauczyłem się więcej o walce z silnikiem graficznym 3D niż o czymkolwiek, co czytam w książce. Zmusza cię do wejścia w nieznane sytuacje, które wymagają badań do rozwiązania. Nie jest ładny, nie jest wydajny, ale nauczysz się czegoś.
SC Ghost,
+1 za „Jeśli mówisz o C / C ++, to na pewno możesz skorzystać z dodatkowego doświadczenia.” -1 dla „Najlepszym zasobem do nauki C ++ jest StackOverflow”, więc nie głosuj.
Residuum
5

Przede wszystkim zwiększ swoje podstawy teoretyczne w czymkolwiek, czego jeszcze nie znasz. Przestudiuj teorię i napisz kilka krótkich przykładów.

Przykładowe podstawowe podstawy teoretyczne obejmują:

  • Algorytmy i struktury danych
  • Projektowanie oprogramowania (UML, wzorce projektowe, OOP)
  • Systemy operacyjne i programowanie równoległe

Następnie rozważ naukę dodatkowego języka (na przykład Java lub C #). - Uczenie się dodatkowych języków pomaga lepiej wady i zalety każdego używanego języka i pomaga nauczyć się najlepszych praktyk, o których możesz nie wiedzieć.

Następnie wybierz nową domenę (programowanie internetowe, grafika komputerowa, przetwarzanie obrazu, widzenie komputerowe, dostęp do danych, ...). Przestudiuj teorię i napisz kilka krótkich przykładów.

Następnie utwórz duży przykład, który zawiera w sobie wielowarstwową aplikację, obsługującą dostęp do danych, interfejs użytkownika i określoną domenę, którą wybrałeś. Połóż nacisk na architekturę aplikacji (upewnij się, że jej części są możliwie luźno połączone).

Mamy nadzieję, że nauczysz się, jak uczyć się nowych podejść i technologii oraz integrować je z dobrą architekturą.


Specjalnie do programowania gier polecam wybranie następujących domen / technologii:

  • Podstawy przetwarzania obrazu
  • Dowolna konkretna technologia interfejsu użytkownika
  • Podstawy grafiki komputerowej
  • Dowolny konkretny silnik graficzny (np. DirectX, OpenGL, OGRE, ODG, Java3D, ...)
  • Podstawy fizyki mechanicznej
  • Dowolny konkretny silnik fizyki (np. PhysX, ...)
  • Dowolny konkretny silnik gry (np. XNA, ...)
  • Programowanie wielowątkowe
  • Programowanie rozproszone


Edytować:

Jak się nauczyć:

  • Przeczytaj i uruchom przykłady z CodeProject.
  • Przejrzyj kilka książek w bibliotece książek / ebooków, aż znajdziesz kilka książek, które Ci się podobają (które pasują do Twojego stylu czytania + obejmują tematy, o których chcesz przeczytać).
  • Czytaj blogi.
  • Spróbuj rzeczy i zapytaj na StackOverlow, gdy utkniesz.
Danny Varod
źródło
Wiem bezpośrednie x. Po drugie, myślałem o tym, ale nie mogę znaleźć żadnych zasobów poza podstawami, czy masz jakieś porady na temat JAK się uczyć?
Skeith
2
Pisząc przykłady - próba i błąd to najlepszy sposób. Zobacz także edycję.
Danny Varod
1

Używając C ++ (w połączeniu z C) załóżmy, że będziesz miał więcej do nauczenia się rozumieć WTF, o którym mówią. C ++ jest kilkoma językami, kilkoma warstwami abstrakcji mieszkającymi w tym samym miejscu i odkrywanie go zajmuje dużo czasu, a następnie zrozumienie tego, co właśnie zobaczyłeś.

Byłem w twoim przypadku i wciąż uczę się o tych językach. Dużo się też uczę, pracując na systemach wbudowanych.

Oto moja rada:

  • Przeczytaj te książki: /programming/388242/the-definitive-c-book-guide-and-list -> Zacznij od książek wprowadzających, nawet jeśli uważasz, że nie jesteś początkujący, ponieważ masz aby rozwikłać swoją podstawową wiedzę przed kontynuowaniem. Następnie dowiedz się o metaprogramowaniu szablonów i ograniczeniach systemów osadzonych.
  • Ćwicz dużo: im bardziej zastosujesz to, czego się uczysz, tym bardziej to zrozumiesz. W tym momencie moim sposobem jest przetestowanie dowolnego rogu języków i kontekstu w małych projektach testowych. Mam także „duże” projekty domowe, w których kontroluję wszystko, ćwiczę nowe techniki i popycham je, aż się zepsują.

Nie zakładaj, że wiesz już dużo o programowaniu. Większość programistów osiąga dojrzałość programistyczną dopiero po ponad 10 latach praktyki w świecie rzeczywistym, z innym kontekstem i rodzajem projektów, platform itp.

Właśnie zaczynasz swoją podróż.

Klaim
źródło
3
Nie wspominając już o tym, że „dojrzały”, kiedy go używasz, daleki jest od „nic więcej do nauczenia się”. Im więcej się uczysz, tym więcej rzeczy wiesz, że nie wiesz.
David Thornley,
0

W oparciu o twoje zainteresowania wbudowanym programowaniem i grami, polecam również następujące - możesz przejrzeć listy z powyższych postów, aby znaleźć dobre materiały źródłowe na wszystkie te tematy. Jedną z książek, które uznałem za niezbędne, była The C ++ Standard Library: A Tutorial and Reference

  • Jeśli nie znasz podstaw OOP - naucz się ich w pierwszej kolejności. Zrozumienie podstaw dziedziczenia i hermetyzacji. Dowiedz się, jak zachowują się słowa kluczowe wirtualne, publiczne / chronione oraz prywatne i statyczne.

  • Korzystaj ze wskaźników i odniesień (i ogólnie preferuj odniesienia). Naucz się i korzystaj z konstrukcji smart_ptr <>, aby osiągnąć „automatyczne” zarządzanie pamięcią.

  • Dowiedz się, jak korzystać z szablonów C ++ - początkowo jako typy danych kontenerów. Będziesz stale odkrywał nowe i bardziej zaawansowane techniki, które szablony C ++ mogą wykonywać za pomocą metaprogramowania.

  • Naucz się języka STL: używaj ciągów znaków, iostream, wyjątków i klas kontenerów i preferuj je nad typami danych char *, FILE * i char [], o ile jest to praktyczne.

  • Zacznij korzystać z części biblioteki Boost - polecam najpierw zapoznać się z ich biblioteką asio i wątków, biorąc pod uwagę twoje zainteresowania. Jest to bardzo wydajna, wieloplatformowa baza kodu C ++ o otwartym kodzie źródłowym, która umożliwia pisanie wysokiej jakości kodu, który jest również przenośny. (Wiele dodatków do podstawowego standardu C ++ pochodzi z wkładów Boost)

  • Baw się dobrze! Poważnie - wybierz kilka domowych projektów do kodowania. Może majstrujesz przy tablicach Arduino, jeśli lubisz osadzone projekty programistyczne.

  • Zdobądź trochę doświadczenia - jeśli używasz tylko Windows / Visual Studio C ++, spróbuj napisać kod dla Linux / g ++ lub OS X / XCode (możesz napisać C ++ na Macu lub naprawdę poszerzyć swoje horyzonty i przejść dla Celu C, aby zobaczyć, jak inna gałąź języków OOP rozwiązuje problemy!)

holtavolt
źródło