1---2name: fondamenti-23description: 1. Non conosce la differenza tra Array e LinkedList4---56# Computer Science Skills78## Legenda skills9101. Level 0112. Level 1123. Level 2134. Level 31415### strutture dati16171. Non conosce la differenza tra Array e LinkedList182. In grado di spiegare e utilizzare array, elenchi collegati, dizionari ecc. In attività pratiche di programmazione193. 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.204. Conoscenza di strutture dati avanzate come B-tree, cumuli binomiali e di Fibonacci, alberi AVL / Red Black, Splay Trees, Skip List, tentativi ecc.2122### algoritmi23241. Non in grado di trovare la media dei numeri in un array252. Algoritmi di base di ordinamento, ricerca e attraversamento della struttura dei dati e recupero263. Tree, Graph, semplici algoritmi greedy e divide and conquer, è in grado di comprendere la rilevanza dei livelli di questa matrice.274. 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.2829### programmazione dei sistemi30311. Non sa cosa sia un compilatore, un linker o un interprete322. 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.333. 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.344. Comprende l'intero stack di programmazione, hardware (CPU + memoria + cache + interrupt + microcodice), codice binario, assembly, collegamento statico e dinamico, compilazione, interpretazione, compilazione JIT, garbage collection, heap, stack, indirizzamento della memoria ...3536## Ingegneria software3738### controllo della versione del codice sorgente39401. Backup delle cartelle per data412. VSS e utente CVS / SVN iniziale423. Competente nell'uso delle funzionalità CVS e SVN. Sa come ramificare e unire, utilizzare le proprietà del repository di configurazione delle patch, ecc.434. Conoscenza dei sistemi VCS distribuiti. Ha provato Bzr / Mercurial / Darcs / Git4445### build automation46471. Sa solo come *buildare* da IDE482. Sa come costruire il sistema dalla riga di comando493. Può impostare uno script per costruire il sistema di base504. 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 sorgente5152### test automatizzati53541. Pensa che tutti i test siano compito del tester552. Ha scritto unit test automatizzati e fornisce buoni casi di unit test per il codice che viene scritto563. Ha scritto codice in modo TDD574. Comprende ed è in grado di impostare test funzionali, carico / prestazioni e UI automatizzati5859## Programmazione6061### scomposizione del problema62631. Solo codice lineare con copia incolla per il riutilizzo642. In grado di suddividere il problema in più funzioni653. In grado di elaborare funzioni / oggetti riutilizzabili che risolvono il problema generale664. Utilizzo di strutture e algoritmi di dati appropriati e produzione di codice generico / orientato agli oggetti che incapsula aspetti del problema soggetti a modifiche.676869### systems decomposition70711. Non in grado di pensare al di sopra del livello di un singolo file / classe722. In grado di suddividere lo spazio problematico e la soluzione di progettazione fintanto che si trova all'interno della stessa piattaforma / tecnologia733. In grado di progettare sistemi che abbracciano più tecnologie / piattaforme.744. 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.7576### comunicazione77781. Non è in grado di esprimere pensieri / idee ai colleghi. Ortografia e grammatica scadenti.792. I colleghi possono capire cosa viene detto. Buona ortografia e grammatica.803. È in grado di comunicare efficacemente con i colleghi814. In grado di comprendere e comunicare pensieri / progetti / idee / specifiche in modo inequivocabile e adattare la comunicazione al contesto8283### organizzazione del codice all'interno di un file84851. nessuna prova di organizzazione all'interno di un file862. I metodi sono raggruppati logicamente o per accessibilità873. Il codice è raggruppato in regioni e ben commentato con riferimenti ad altri file di origine884. Il file ha intestazione della licenza, riepilogo, utilizzo dello spazio vuoto ben commentato e coerente. Il file dovrebbe essere bellissimo.8990### organizzazione del codice tra i file91921. Nessun pensiero dato all'organizzazione del codice tra i file932. I file correlati sono raggruppati in una cartella943. Ogni file fisico ha uno scopo unico, ad es. una definizione di classe, un'implementazione di una caratteristica ecc.954. 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 progettazione9697### organizzazione dell'albero dei sorgenti98991. Tutto in una cartella1002. Separazione di base del codice in cartelle logiche.1013. Nessuna dipendenza circolare, binari, librerie, documenti, build, codice di terze parti, tutto organizzato in cartelle appropriate1024. 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.103104### leggibilità del codice1051061. Nomi mono-sillabe1072. Buoni nomi per file, classi di variabili, metodi ecc.1083. Nessuna funzione lunga, commenti che spiegano codice insolito, correzioni di bug, presupposti del codice1094. Le ipotesi del codice vengono verificate utilizzando assert, il codice scorre in modo naturale - nessuna nidificazione profonda di condizionali o metodi110111### defensive coding1121131. Non capisce il concetto1142. Controlla tutti gli argomenti e asserisce i presupposti critici nel codice1153. Si assicura di controllare i valori di ritorno e controllare le eccezioni intorno al codice che può non riuscire.1164. Ha la sua libreria per aiutare con la codifica difensiva, scrive unit test che simulano i guasti117118### gestione degli errori1191201. Codifica solo *happy case*1212. Gestione degli errori di base intorno al codice che può generare eccezioni / generare errori1223. Assicura che errori / eccezioni lascino il programma in buono stato, le risorse, le connessioni e la memoria siano tutte pulite correttamente1234. 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.124125### IDE1261271. Utilizza principalmente IDE per la modifica del testo1282. Conosce l'interfaccia, è in grado di utilizzare efficacemente l'IDE utilizzando i menu.1293. Conosce le scorciatoie da tastiera per le operazioni più utilizzate.1304. Ha scritto macro personalizzate131132### API1331341. Ha bisogno di cercare frequentemente la documentazione1352. Ha in memoria le API utilizzate più di frequente1363. Conoscenza ampia e approfondita dell'API1374. Ha scritto librerie che si trovano in cima all'API per semplificare le attività usate di frequente e per colmare le lacune nell'API138139### framework1401411. Non ha utilizzato alcun framework al di fuori della piattaforma principale1422. Ha sentito parlare ma non ha utilizzato i framework popolari disponibili per la piattaforma.1433. Ha utilizzato più di un framework a titolo professionale ed è esperto con gli idiomi dei framework.1444. Autore del framework145146### requirements1471481. Accetta i requisiti e i codici forniti secondo le specifiche1492. Pone domande sui casi non considerati nelle specifiche1503. Comprendere il quadro completo e individuare intere aree che devono essere specificate1514. In grado di suggerire alternative e flussi migliori a determinati requisiti sulla base dell'esperienza152153### scripting1541551. Nessuna conoscenza degli strumenti di scripting1562. File batch / script di shell1573. Perl / Python / Ruby / VBScript / Powershell1584. Ha scritto e pubblicato codice riutilizzabile159160### database1611621. Pensa che Excel sia un database1632. Conosce i concetti di base del database, la normalizzazione, l'ACID, le transazioni e sa scrivere selezioni semplici1643. 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.1654. 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.166167## Esperienza168169### lingue con esperienza professionale1701711. Imperativo o orientato agli oggetti1722. 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 statici1733. Funzionale, ulteriore vantaggio se capiscono la valutazione pigra, il curry, le continuazioni1744. Concorrente (Erlang, Oz) e Logic (Prolog)175176### piattaforme con esperienza professionale1771781. 11792. 2-31803. 4-51814. 6+182183### anni di esperienza professionale1841851. 11862. 2-51873. 6-91884. 10+189190### conoscenza del dominio1911921. Nessuna conoscenza del dominio1932. Ha lavorato su almeno un prodotto nel dominio.1943. Ha lavorato su più prodotti nello stesso dominio.1954. Esperto di dominio. Ha progettato e implementato diversi prodotti / soluzioni nel dominio. Esperto con termini standard, protocolli utilizzati nel dominio.196197198---199## Conoscenza200201### conoscenza degli strumenti2022031. Limitato all'IDE principale (VS.Net, Eclipse ecc.)2042. Conosce alcune alternative agli strumenti comuni e standard.2053. Buona conoscenza di editor, debugger, IDE, alternative open source ecc. Ha utilizzato strumenti ORM.2064. Ha effettivamente scritto strumenti e script, un ulteriore vantaggio se sono stati pubblicati.207208### esperienza dei linguaggi2092101. Imperativo o orientato agli oggetti2112. 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 statici2123. Funzionale, ulteriore vantaggio se capiscono la valutazione pigra, il curry, le continuazioni2134. Concurrent (Erlang, Oz) e Logic (Prolog)214215216### codebase knowledge2172181. Non ha mai esaminato il codice base2192. Conoscenza di base del layout del codice e di come costruire il sistema2203. Buona conoscenza del codice di base, ha implementato diverse correzioni di bug e forse alcune piccole funzionalità.2214. 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.222223### conoscenza delle prossime tecnologie2242251. Non ha sentito parlare delle prossime tecnologie2262. Ha sentito parlare delle imminenti tecnologie nel campo2273. Ha scaricato l'anteprima alpha / CTP / beta e ha letto alcuni articoli / manuali2284. Ha giocato con le anteprime e ha effettivamente costruito qualcosa con esso e come bonus lo ha condiviso con tutti gli altri229230### platform internals2312321. Nessuna conoscenza degli interni della piattaforma2332. Ha una conoscenza di base del funzionamento interno della piattaforma2343. Conoscenza approfondita degli interni della piattaforma e possibilità di visualizzare come la piattaforma prende il programma e lo converte in codice eseguibile.2354. Ha scritto strumenti per migliorare o fornire informazioni sugli interni della piattaforma. Ad esempio disassemblatori, decompilatori, debugger ecc.236237### libri di settore2382391. Serie Unleashed, serie di 21 giorni, serie di 24 ore, serie di manichini ...2402. Codice completo, non farmi pensare, padronanza delle espressioni regolari2413. Design Patterns, Peopleware, Programming Pearls, Algorithm Design Manual, Pragmatic Programmer, Mythical Man month2424. 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)243244### blog di settore2452461. Ne ha sentito parlare ma non ne ha mai avuto il tempo.2472. Legge blog di tecnologia / programmazione / ingegneria del software e ascolta regolarmente i podcast.2483. Mantiene un blog di collegamento con una raccolta di articoli e strumenti utili che ha raccolto2494. Mantiene un blog in cui vengono condivise intuizioni personali e pensieri sulla programmazione