Migliorare il livello del mio codice C / C ++


16

Sto programmando da 3-4 anni ormai e sento di non poter più essere chiamato come un principiante, ma ho letto alcune domande su questo sito e penso di cosa stanno parlando? Mi sento allo stesso modo quando raccolgo libri di programmazione al giorno d'oggi.

Ho letto diversi libri di programmazione iniziali, alcuni su C / C ++ e altri sui giochi. Ho scritto alcune cose più complesse come AI molto semplice, interfaccia seriale e TCP / IP.

Ho intenzione di diventare un programmatore di giochi, ma recentemente mi sono interessato un po 'ai sistemi embedded dopo aver avuto la possibilità di lavorarci su (l'interfaccia seriale).

Ho trovato molto difficile trovare materiali per continuare il mio apprendimento dopo aver completato i libri introduttivi e per principianti poiché non ci sono libri C ++ intermedi che riesco a trovare.

Che consiglio daresti per crescere e migliorare le mie conoscenze e abilità? Risorse specifiche sarebbero molto apprezzate.


Per i libri C ++ vedi questa domanda: stackoverflow.com/questions/388242/…
Naveen,

Risposte:


10

Se stai parlando di C / C ++, allora potresti sicuramente usare qualche esperienza extra. Il primo suggerimento che ti darò è che C e C ++ sono linguaggi completamente diversi . La migliore risorsa per imparare il C ++ è StackOverflow: ci sono molte persone che hanno una grande quantità di esperienza e conoscenza.

La prossima cosa da fare è avviare un grande progetto, come provare a scrivere un motore grafico 3D in un'API di basso livello come DirectX, e quando il tuo progetto fallisce miseramente come fanno tutti i primi progetti, allora imparerai qualcosa su come no programmare.

Puoi controllare questo link su StackOverflow per un ampio elenco di buoni libri per imparare il C ++.


3
No, la miglior risorsa per imparare il C ++ è un buon libro, o preferibilmente libri.
Neil Butterworth,

+1 Per l'avvio di un grande progetto. Ho imparato di più lottando attraverso un motore grafico 3D di qualsiasi cosa abbia letto in un libro. Ti costringe a entrare in situazioni sconosciute che richiedono ricerca per risolvere. Non è carino, non è efficiente, ma imparerai qualcosa.
SC Ghost

+1 per "Se stai parlando di C / C ++, allora potresti sicuramente usare qualche esperienza extra." -1 per "La migliore risorsa per imparare il C ++ è StackOverflow", quindi nessun voto.
Residuum,

5

Prima di tutto, aumenta il tuo background teorico di base in tutto ciò che non conosci ancora. Studia la teoria e scrivi alcuni brevi esempi.

Esempio di base teorica di base include:

  • Algoritmi e datastrutture
  • Progettazione software (UML, modelli di progettazione, OOP)
  • Sistemi operativi e programmazione parallela

Quindi, considera l'apprendimento di una lingua aggiuntiva (ad esempio Java o C #). - Studiare altre lingue aiuta meglio sotto i pro ei contro di qualunque lingua tu stia usando e ti aiuta a imparare le migliori pratiche di cui potresti non essere a conoscenza.

Quindi scegli un nuovo dominio (programmazione web, computer grafica, elaborazione delle immagini, visione artificiale, accesso ai dati, ...). Studia la teoria e scrivi alcuni brevi esempi.

Successivamente, crea un grande esempio, che incapsula un'applicazione a più livelli, gestendo l'accesso ai dati, l'interfaccia utente e un dominio specifico che hai scelto. Metti l'accento sull'architettura dell'applicazione (assicurati che le sue parti siano accoppiate il più liberamente possibile).

Spero che imparerai come apprendere nuovi approcci e tecnologie e integrarli con una buona architettura.


In particolare per la programmazione di giochi, consiglio di scegliere i seguenti domini / tecnologie:

  • Nozioni di base sull'elaborazione delle immagini
  • Qualsiasi tecnologia dell'interfaccia utente specifica
  • Nozioni di base sulla computer grafica
  • Qualsiasi motore grafico specifico (ad es. DirectX, OpenGL, OGRE, ODG, Java3D, ...)
  • Nozioni di base di fisica meccanica
  • Qualsiasi motore fisico specifico (ad esempio PhysX, ...)
  • Qualsiasi motore di gioco specifico (ad es. XNA, ...)
  • Programmazione multi-thread
  • Programmazione distribuita


Modificare:

Come imparare:

  • Leggi ed esegui esempi da CodeProject.
  • Sfoglia alcuni libri in una libreria di libri / ebook o negozi fino a trovare un paio di libri che ti piacciono (che corrispondono al tuo stile di lettura + coprono gli argomenti di cui vuoi leggere).
  • Leggi i blog.
  • Prova le cose e chiedi su StackOverlow quando rimani bloccato.

Conosco direttamente x. secondo, ci ho pensato, ma non riesco a trovare risorse al di là delle basi, hai qualche consiglio su come imparare le cose?
Skeith

2
Scrivendo esempi: tentativi ed errori sono il modo migliore. Vedi anche modifica.
Danny Varod,

1

L'uso di C ++ (in combinazione con C) suppone che avrai molto di più per imparare a capire WTF di cui stanno parlando. Il C ++ è composto da più lingue, diversi strati di astrazioni che vivono nello stesso posto e ci vuole molto tempo per esplorarlo tutto una volta, quindi capire cosa hai appena visto.

Sono stato nel tuo caso e sto ancora imparando queste lingue. Inoltre imparo molto lavorando su sistemi embedded.

Ecco il mio consiglio:

  • Leggi quei libri: /programming/388242/the-definitive-c-book-guide-and-list -> Inizia con i libri introduttivi, anche se ritieni di non essere principiante, perché hai per rendere molto solide le tue conoscenze di base prima di continuare. Quindi scopri la metaprogrammazione dei modelli e le restrizioni dei sistemi integrati.
  • Esercitati molto: più applichi ciò che impari, più lo capisci. Su questo punto, il mio modo di fare è testare qualsiasi angolo delle lingue e del contesto in piccoli progetti di test. Ho anche "grandi" progetti domestici in cui ho il controllo di tutto e pratico nuove tecniche e li spingo fino a quando non si rompono.

Non dare per scontato che sai già molto sulla programmazione. La maggior parte degli sviluppatori sviluppa la programmazione solo dopo più di 10 anni di pratica nel mondo reale, con diversi contesti e tipi di progetti, piattaforme, ecc.

Stai solo iniziando il tuo viaggio.


3
Per non parlare del fatto che "maturo", come lo stai usando, è tutt'altro che "niente da imparare". Più impari, più cose che sai di non sapere.
David Thornley,

0

In base ai tuoi interessi nella programmazione e nei giochi integrati, ti consiglio anche quanto segue: puoi consultare le liste dei libri dei post sopra per trovare materiale di buona fonte su tutti questi argomenti. Un libro che ho trovato essenziale era The C ++ Standard Library: A Tutorial and Reference

  • Se non ti senti a tuo agio con le basi di OOP, imparale prima. Comprendi le basi dell'ereditarietà e dell'incapsulamento. Scopri come si comportano le parole chiave virtuali, pubbliche / protette e private e statiche.

  • Mettiti comodo usando puntatori e riferimenti (e generalmente preferisci i riferimenti). Impara e usa il costrutto smart_ptr <> per ottenere una gestione della memoria "automagica".

  • Scopri come utilizzare i modelli C ++, inizialmente solo come tipi di dati del contenitore. Scoprirai continuamente nuove e più potenti tecniche che i modelli C ++ possono eseguire tramite meta-programmazione.

  • Impara l'STL: usa string, iostream, le eccezioni e le classi contenitore e preferiscile sui tipi di dati char *, FILE * e char [] di livello inferiore quando possibile.

  • Inizia a utilizzare parti della libreria Boost : ti consiglio di imparare prima la loro libreria asio e thread, dati i tuoi interessi. Questa è una base sorgente C ++ molto potente, open source e multipiattaforma che ti permetterà di scrivere codice di alta qualità che è anche portatile. (Molte aggiunte allo standard C ++ di base hanno avuto origine nei contributi Boost)

  • Divertiti! Scherzi a parte, scegli alcuni progetti per animali domestici da codificare. Magari armeggiare con le schede Arduino se ti piacciono i progetti di programmazione integrati.

  • Ottieni un po 'di esperienza: se hai utilizzato solo Windows / Visual Studio C ++, prova a scrivere del codice per Linux / g ++ o OS X / XCode (puoi codificare C ++ su Mac o puoi davvero espandere i tuoi orizzonti e andare per Objective-C, per vedere come un'altra branca delle lingue OOP affronta le cose!)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.