In grado di spiegare e utilizzare array, elenchi collegati, dizionari ecc. In attività pratiche di programmazione
Conosce i compromessi spaziali e temporali delle strutture dati di base, Arrays vs LinkedLists, è in grado di spiegare come possono essere implementati gli hashtable e può gestire le collisioni, code prioritarie e modi per implementarli ecc.
Conoscenza di strutture dati avanzate come B-tree, cumuli binomiali e di Fibonacci, alberi AVL / Red Black, Splay Trees, Skip List, tentativi ecc.
Non in grado di trovare la media dei numeri in un array
Algoritmi di base di ordinamento, ricerca e attraversamento della struttura dei dati e recupero
Tree, Graph, semplici algoritmi greedy e divide and conquer, è in grado di comprendere la rilevanza dei livelli di questa matrice.
In grado di riconoscere e codificare soluzioni di programmazione dinamica, buona conoscenza di algoritmi grafici, buona conoscenza di algoritmi di calcolo numerico, in grado di identificare problemi NP ecc.
Non sa cosa sia un compilatore, un linker o un interprete
Conoscenza di base di compilatori, linker e interpreti. Comprende cos'è il codice assembly e come funzionano le cose a livello hardware. Qualche conoscenza di memoria virtuale e paging.
Comprende la modalità kernel e la modalità utente, il multi-threading, le primitive di sincronizzazione e il modo in cui sono implementate, in grado di leggere il codice assembly. Comprende il funzionamento delle reti, la comprensione dei protocolli di rete e la programmazione a livello di socket.
Competente nell'uso delle funzionalità CVS e SVN. Sa come ramificare e unire, utilizzare le proprietà del repository di configurazione delle patch, ecc.
Conoscenza dei sistemi VCS distribuiti. Ha provato Bzr / Mercurial / Darcs / Git
Sa come costruire il sistema dalla riga di comando
Può impostare uno script per costruire il sistema di base
Può impostare uno script per costruire il sistema e anche documentazione, programmi di installazione, generare note di rilascio e contrassegnare il codice nel controllo del codice sorgente
Solo codice lineare con copia incolla per il riutilizzo
In grado di suddividere il problema in più funzioni
In grado di elaborare funzioni / oggetti riutilizzabili che risolvono il problema generale
Utilizzo di strutture e algoritmi di dati appropriati e produzione di codice generico / orientato agli oggetti che incapsula aspetti del problema soggetti a modifiche.
Non in grado di pensare al di sopra del livello di un singolo file / classe
In grado di suddividere lo spazio problematico e la soluzione di progettazione fintanto che si trova all'interno della stessa piattaforma / tecnologia
In grado di progettare sistemi che abbracciano più tecnologie / piattaforme.
In grado di visualizzare e progettare sistemi complessi con più linee di prodotti e integrazioni con sistemi esterni. Inoltre dovrebbe essere in grado di progettare sistemi di supporto alle operazioni come monitoraggio, reporting, failover ecc.
Nessun pensiero dato all'organizzazione del codice tra i file
I file correlati sono raggruppati in una cartella
Ogni file fisico ha uno scopo unico, ad es. una definizione di classe, un'implementazione di una caratteristica ecc.
L'organizzazione del codice a livello fisico è strettamente correlata al design e l'analisi dei nomi dei file e della distribuzione delle cartelle fornisce approfondimenti sulla progettazione
Separazione di base del codice in cartelle logiche.
Nessuna dipendenza circolare, binari, librerie, documenti, build, codice di terze parti, tutto organizzato in cartelle appropriate
Il layout fisico dell'albero di origine corrisponde alla gerarchia logica e all'organizzazione. I nomi delle directory e l'organizzazione forniscono informazioni sulla progettazione del sistema.
Buoni nomi per file, classi di variabili, metodi ecc.
Nessuna funzione lunga, commenti che spiegano codice insolito, correzioni di bug, presupposti del codice
Le ipotesi del codice vengono verificate utilizzando assert, il codice scorre in modo naturale - nessuna nidificazione profonda di condizionali o metodi
Gestione degli errori di base intorno al codice che può generare eccezioni / generare errori
Assicura che errori / eccezioni lascino il programma in buono stato, le risorse, le connessioni e la memoria siano tutte pulite correttamente
Codici per rilevare prima possibili eccezioni, mantenere una strategia di gestione delle eccezioni coerente in tutti i livelli di codice, elaborare linee guida sulla gestione delle eccezioni per l'intero sistema.
Conosce i concetti di base del database, la normalizzazione, l'ACID, le transazioni e sa scrivere selezioni semplici
In grado di progettare schemi di database validi e normalizzati tenendo presente le query che devono essere eseguite, esperto nell'uso di viste, stored procedure, trigger e tipi definiti dall'utente. Conosce la differenza tra indici cluster e non cluster. Competente nell'uso degli strumenti ORM.
Può eseguire l'amministrazione di base del database, l'ottimizzazione delle prestazioni, l'ottimizzazione degli indici, scrivere query di selezione avanzate, è in grado di sostituire l'utilizzo del cursore con sql relazionale, comprende come i dati vengono archiviati internamente, comprende come gli indici vengono archiviati internamente, comprende come i database possono essere specchiati, replicati ecc. Capisce come funziona il commit in due fasi.
Imperativo, orientato agli oggetti e dichiarativo (SQL), bonus aggiuntivo se comprendono la digitazione statica rispetto a quella dinamica, la digitazione debole o forte e i tipi inferiti statici
Funzionale, ulteriore vantaggio se capiscono la valutazione pigra, il curry, le continuazioni
Esperto di dominio. Ha progettato e implementato diversi prodotti / soluzioni nel dominio. Esperto con termini standard, protocolli utilizzati nel dominio.
Imperativo, orientato agli oggetti e dichiarativo (SQL), bonus aggiuntivo se comprendono la digitazione statica rispetto a quella dinamica, la digitazione debole o forte e i tipi inferiti statici
Funzionale, ulteriore vantaggio se capiscono la valutazione pigra, il curry, le continuazioni
Conoscenza di base del layout del codice e di come costruire il sistema
Buona conoscenza del codice di base, ha implementato diverse correzioni di bug e forse alcune piccole funzionalità.
Ha implementato più grandi funzionalità nella codebase e può facilmente visualizzare le modifiche richieste per la maggior parte delle funzionalità o le correzioni di bug.
Nessuna conoscenza degli interni della piattaforma
Ha una conoscenza di base del funzionamento interno della piattaforma
Conoscenza approfondita degli interni della piattaforma e possibilità di visualizzare come la piattaforma prende il programma e lo converte in codice eseguibile.
Ha scritto strumenti per migliorare o fornire informazioni sugli interni della piattaforma. Ad esempio disassemblatori, decompilatori, debugger ecc.
Struttura e interpretazione di programmi per computer, concetti tecnici, modelli di programmazione per computer, arte della programmazione per computer, sistemi di database, [Thinking Forth] (http://thinking-forth.sourceforge.net/), [Little Schemer] (https : //7chan.org/pr/src/The_Little_Schemer_4th_2.pdf)